summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java3
-rw-r--r--api/test-current.txt12
-rw-r--r--cmds/statsd/src/atoms.proto5
-rw-r--r--core/java/android/app/ActivityManager.java34
-rw-r--r--core/java/android/app/INotificationManager.aidl5
-rw-r--r--core/java/android/app/NotificationChannel.java21
-rw-r--r--core/java/android/app/NotificationManager.java15
-rw-r--r--core/java/android/content/IntentFilter.java41
-rw-r--r--core/java/android/content/pm/IPackageInstaller.aidl2
-rw-r--r--core/java/android/net/NetworkAgent.java33
-rw-r--r--core/java/android/net/NetworkCapabilities.java2
-rwxr-xr-x[-rw-r--r--]core/java/android/provider/Settings.java8
-rw-r--r--core/java/android/service/autofill/augmented/AugmentedAutofillService.java6
-rw-r--r--core/java/android/service/autofill/augmented/FillCallback.java6
-rw-r--r--core/java/android/service/autofill/augmented/IFillCallback.aidl2
-rw-r--r--core/java/android/view/SurfaceControlViewHost.java16
-rw-r--r--core/java/android/view/SurfaceView.java19
-rw-r--r--core/java/android/view/WindowInsets.java14
-rw-r--r--core/java/android/window/TaskEmbedder.java24
-rw-r--r--core/java/android/window/TaskOrganizer.java13
-rw-r--r--core/java/android/window/TaskOrganizerTaskEmbedder.java37
-rw-r--r--core/java/android/window/VirtualDisplayTaskEmbedder.java18
-rw-r--r--core/java/android/window/WindowContainerToken.java13
-rw-r--r--core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java (renamed from core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java)20
-rw-r--r--core/java/com/android/internal/accessibility/util/AccessibilityUtils.java3
-rw-r--r--core/java/com/android/internal/accessibility/util/ShortcutUtils.java43
-rw-r--r--core/java/com/android/internal/app/ChooserActivity.java47
-rw-r--r--core/java/com/android/internal/app/ChooserActivityLogger.java3
-rw-r--r--core/java/com/android/internal/app/IntentForwarderActivity.java41
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl2
-rw-r--r--core/res/AndroidManifest.xml2
-rw-r--r--core/res/res/layout/accessibility_shortcut_chooser_item.xml (renamed from core/res/res/layout/accessibility_button_chooser_item.xml)8
-rw-r--r--core/res/res/layout/notification_material_action_list.xml36
-rw-r--r--core/res/res/values/config.xml2
-rw-r--r--core/res/res/values/symbols.xml12
-rw-r--r--core/tests/coretests/src/com/android/internal/app/IntentForwarderActivityTest.java20
-rwxr-xr-xlibs/hwui/jni/Bitmap.cpp15
-rwxr-xr-x[-rw-r--r--]media/java/android/media/AudioManager.java11
-rw-r--r--media/java/android/media/ExifInterface.java17
-rwxr-xr-x[-rw-r--r--]media/java/android/media/IAudioService.aidl2
-rw-r--r--media/java/android/media/midi/MidiDeviceInfo.java15
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java5
-rw-r--r--packages/PrintSpooler/res/values-hi/strings.xml2
-rw-r--r--packages/PrintSpooler/res/values-ne/strings.xml6
-rw-r--r--packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml2
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java5
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java24
-rw-r--r--packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java3
-rw-r--r--packages/SoundPicker/res/values-af/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-am/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ar/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-as/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-az/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-b+sr+Latn/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-be/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-bg/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-bn/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-bs/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ca/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-cs/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-da/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-de/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-el/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-en-rAU/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-en-rCA/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-en-rGB/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-en-rIN/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-en-rXC/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-es-rUS/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-es/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-et/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-eu/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-fa/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-fi/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-fr-rCA/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-fr/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-gl/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-gu/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-hi/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-hr/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-hu/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-hy/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-in/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-is/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-it/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-iw/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ja/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ka/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-kk/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-km/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-kn/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ko/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ky/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-lo/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-lt/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-lv/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-mk/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ml/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-mn/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-mr/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ms/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-my/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-nb/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ne/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-nl/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-or/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-pa/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-pl/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-pt-rBR/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-pt-rPT/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-pt/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ro/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ru/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-si/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-sk/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-sl/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-sq/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-sr/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-sv/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-sw/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ta/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-te/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-th/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-tl/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-tr/strings.xml28
-rw-r--r--packages/SoundPicker/res/values-uk/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-ur/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-uz/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-vi/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-zh-rCN/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-zh-rHK/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-zh-rTW/strings.xml29
-rw-r--r--packages/SoundPicker/res/values-zu/strings.xml29
-rw-r--r--packages/SystemUI/Android.bp4
-rw-r--r--packages/SystemUI/res-keyguard/values-ne/strings.xml2
-rw-r--r--packages/SystemUI/res-keyguard/values-vi/strings.xml2
-rw-r--r--packages/SystemUI/res-product/values-ca/strings.xml2
-rw-r--r--packages/SystemUI/res/drawable/ic_create_bubble.xml20
-rw-r--r--packages/SystemUI/res/drawable/ic_stop_bubble.xml25
-rw-r--r--packages/SystemUI/res/layout/controls_dialog_pin.xml2
-rw-r--r--packages/SystemUI/res/layout/controls_horizontal_divider_with_empty.xml (renamed from packages/SystemUI/res/layout/controls_horizontal_divider_withEmpty.xml)0
-rw-r--r--packages/SystemUI/res/layout/notification_snooze.xml3
-rw-r--r--packages/SystemUI/res/values-af/strings.xml11
-rw-r--r--packages/SystemUI/res/values-am/strings.xml19
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml51
-rw-r--r--packages/SystemUI/res/values-as/strings.xml35
-rw-r--r--packages/SystemUI/res/values-az/strings.xml37
-rw-r--r--packages/SystemUI/res/values-b+sr+Latn/strings.xml11
-rw-r--r--packages/SystemUI/res/values-be/strings.xml23
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml13
-rw-r--r--packages/SystemUI/res/values-bn/strings.xml13
-rw-r--r--packages/SystemUI/res/values-bs/strings.xml11
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml13
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml13
-rw-r--r--packages/SystemUI/res/values-da/strings.xml17
-rw-r--r--packages/SystemUI/res/values-de/strings.xml29
-rw-r--r--packages/SystemUI/res/values-el/strings.xml35
-rw-r--r--packages/SystemUI/res/values-en-rAU/strings.xml19
-rw-r--r--packages/SystemUI/res/values-en-rCA/strings.xml19
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml19
-rw-r--r--packages/SystemUI/res/values-en-rIN/strings.xml19
-rw-r--r--packages/SystemUI/res/values-en-rXC/strings.xml9
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml13
-rw-r--r--packages/SystemUI/res/values-es/strings.xml31
-rw-r--r--packages/SystemUI/res/values-et/strings.xml15
-rw-r--r--packages/SystemUI/res/values-eu/strings.xml15
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml11
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml17
-rw-r--r--packages/SystemUI/res/values-fr-rCA/strings.xml11
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml31
-rw-r--r--packages/SystemUI/res/values-gl/strings.xml11
-rw-r--r--packages/SystemUI/res/values-gu/strings.xml11
-rw-r--r--packages/SystemUI/res/values-hi/strings.xml21
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml11
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml13
-rw-r--r--packages/SystemUI/res/values-hy/strings.xml9
-rw-r--r--packages/SystemUI/res/values-in/strings.xml13
-rw-r--r--packages/SystemUI/res/values-is/strings.xml15
-rw-r--r--packages/SystemUI/res/values-it/strings.xml19
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml13
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ka/strings.xml23
-rw-r--r--packages/SystemUI/res/values-kk/strings.xml37
-rw-r--r--packages/SystemUI/res/values-km/strings.xml35
-rw-r--r--packages/SystemUI/res/values-kn/strings.xml21
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ky/strings.xml51
-rw-r--r--packages/SystemUI/res/values-lo/strings.xml35
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml35
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml11
-rw-r--r--packages/SystemUI/res/values-mk/strings.xml19
-rw-r--r--packages/SystemUI/res/values-ml/strings.xml31
-rw-r--r--packages/SystemUI/res/values-mn/strings.xml23
-rw-r--r--packages/SystemUI/res/values-mr/strings.xml13
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml11
-rw-r--r--packages/SystemUI/res/values-my/strings.xml23
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml15
-rw-r--r--packages/SystemUI/res/values-ne/strings.xml41
-rw-r--r--packages/SystemUI/res/values-ne/strings_tv.xml2
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml19
-rw-r--r--packages/SystemUI/res/values-or/strings.xml29
-rw-r--r--packages/SystemUI/res/values-pa/strings.xml35
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml13
-rw-r--r--packages/SystemUI/res/values-pt-rBR/strings.xml19
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml29
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml19
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml17
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml37
-rw-r--r--packages/SystemUI/res/values-si/strings.xml11
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml11
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml57
-rw-r--r--packages/SystemUI/res/values-sq/strings.xml25
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml11
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml13
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml11
-rw-r--r--packages/SystemUI/res/values-ta/strings.xml146
-rw-r--r--packages/SystemUI/res/values-te/strings.xml29
-rw-r--r--packages/SystemUI/res/values-th/strings.xml17
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml13
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml17
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml45
-rw-r--r--packages/SystemUI/res/values-ur/strings.xml11
-rw-r--r--packages/SystemUI/res/values-uz/strings.xml23
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml17
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml13
-rw-r--r--packages/SystemUI/res/values-zh-rHK/strings.xml11
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml35
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml11
-rw-r--r--packages/SystemUI/res/values/dimens.xml3
-rw-r--r--packages/SystemUI/shared/Android.bp1
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/Interpolators.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java87
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationChannelHelper.java84
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java79
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java58
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/TargetSdkResolver.kt56
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java110
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt24
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt2
-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/ExpandableNotificationRowController.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java71
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt62
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java21
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java7
-rw-r--r--packages/Tethering/AndroidManifest.xml5
-rw-r--r--packages/Tethering/AndroidManifest_InProcess.xml5
-rw-r--r--packages/Tethering/proguard.flags2
-rw-r--r--packages/Tethering/res/values/config.xml2
-rw-r--r--packages/Tethering/src/android/net/ip/IpServer.java9
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/ConnectedClientsTracker.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/ConnectedClientsTracker.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/EntitlementManager.java)5
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/IPv6TetheringCoordinator.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/OffloadController.java)4
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/Tethering.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java)4
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/TetheringConfiguration.java)3
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/TetheringDependencies.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/TetheringInterfaceUtils.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/TetheringInterfaceUtils.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/TetheringNotificationUpdater.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/TetheringNotificationUpdater.java)3
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/TetheringService.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java)2
-rw-r--r--packages/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkState.java (renamed from packages/Tethering/src/com/android/server/connectivity/tethering/UpstreamNetworkState.java)2
-rw-r--r--packages/Tethering/tests/unit/AndroidManifest.xml4
-rw-r--r--packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java8
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/ConnectedClientsTrackerTest.kt (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/ConnectedClientsTrackerTest.kt)4
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/EntitlementManagerTest.java)3
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/IPv6TetheringCoordinatorTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/IPv6TetheringCoordinatorTest.java)2
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/MockTetheringService.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/MockTetheringService.java)2
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/OffloadControllerTest.java)8
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringConfigurationTest.java)3
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringNotificationUpdaterTest.kt (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringNotificationUpdaterTest.kt)7
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringServiceTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringServiceTest.java)4
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java)5
-rw-r--r--packages/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java (renamed from packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java)4
-rw-r--r--packages/VpnDialogs/res/values-my/strings.xml2
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java18
-rw-r--r--services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java18
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java3
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java8
-rw-r--r--services/core/java/com/android/server/attention/AttentionManagerService.java7
-rwxr-xr-x[-rw-r--r--]services/core/java/com/android/server/audio/AudioService.java17
-rwxr-xr-x[-rw-r--r--]services/core/java/com/android/server/audio/MediaFocusControl.java134
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecMessage.java24
-rw-r--r--services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java28
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java19
-rw-r--r--services/core/java/com/android/server/notification/BubbleExtractor.java263
-rw-r--r--services/core/java/com/android/server/notification/NotificationDelegate.java2
-rwxr-xr-xservices/core/java/com/android/server/notification/NotificationManagerService.java67
-rw-r--r--services/core/java/com/android/server/notification/NotificationShellCmd.java44
-rw-r--r--services/core/java/com/android/server/notification/PreferencesHelper.java52
-rw-r--r--services/core/java/com/android/server/notification/RankingConfig.java2
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java87
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java23
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java16
-rw-r--r--services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java103
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerService.java135
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java12
-rw-r--r--services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java41
-rw-r--r--services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java8
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java4
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java25
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java90
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java53
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java7
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java8
-rw-r--r--services/core/java/com/android/server/wm/DisplayRotation.java23
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java14
-rw-r--r--services/core/java/com/android/server/wm/ScreenRotationAnimation.java40
-rw-r--r--services/core/java/com/android/server/wm/Task.java14
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java5
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java29
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java8
-rw-r--r--services/core/java/com/android/server/wm/WindowToken.java10
-rw-r--r--services/incremental/IncrementalService.cpp44
-rw-r--r--services/incremental/IncrementalService.h4
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java129
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/BubbleCheckerTest.java261
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java353
-rwxr-xr-xservices/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java236
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java50
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java76
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java60
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java63
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java78
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java25
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java2
-rw-r--r--startop/iorap/src/com/google/android/startop/iorap/DexOptEvent.java114
-rw-r--r--startop/iorap/src/com/google/android/startop/iorap/IorapForwardingService.java5
-rwxr-xr-xtelephony/java/android/telephony/CarrierConfigManager.java11
-rw-r--r--telephony/java/android/telephony/SignalStrength.java10
-rw-r--r--tests/RollbackTest/MultiUserRollbackTest/src/com/android/tests/rollback/host/MultiUserRollbackTest.java3
-rw-r--r--tests/net/common/java/android/net/CaptivePortalDataTest.kt (renamed from tests/net/java/android/net/CaptivePortalDataTest.kt)49
-rw-r--r--wifi/jarjar-rules.txt128
370 files changed, 6830 insertions, 2606 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java
index d7b1e0793f67..1645bcb928c1 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java
@@ -184,7 +184,6 @@ public final class BackgroundJobsController extends StateController {
}
boolean updateSingleJobRestrictionLocked(JobStatus jobStatus, int activeState) {
-
final int uid = jobStatus.getSourceUid();
final String packageName = jobStatus.getSourcePackageName();
@@ -199,7 +198,7 @@ public final class BackgroundJobsController extends StateController {
isActive = (activeState == KNOWN_ACTIVE);
}
if (isActive && jobStatus.getStandbyBucket() == NEVER_INDEX) {
- Slog.wtf(TAG, "App became active but still in NEVER bucket");
+ Slog.wtf(TAG, "App " + packageName + " became active but still in NEVER bucket");
}
boolean didChange = jobStatus.setBackgroundNotRestrictedConstraintSatisfied(canRun);
didChange |= jobStatus.setUidActive(isActive);
diff --git a/api/test-current.txt b/api/test-current.txt
index 641767c7bccd..0dff41b6a99c 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -5232,14 +5232,14 @@ package android.window {
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static android.window.WindowContainerToken getImeTarget(int);
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]);
- method public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
- method public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo);
- method public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
- method public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int);
+ method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
+ method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo);
+ method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
+ method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void registerOrganizer(int);
method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(boolean);
method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void unregisterOrganizer();
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void unregisterOrganizer();
}
public final class WindowContainerToken implements android.os.Parcelable {
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 453ddeb332af..1f090fda2ce7 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -9249,12 +9249,13 @@ message SharesheetStarted {
optional bool is_workprofile = 7;
enum SharesheetPreviewType { // Constants from ChooserActivity.java
+ CONTENT_PREVIEW_TYPE_UNKNOWN = 0; // Default for proto 2 / 3 compatibility.
CONTENT_PREVIEW_IMAGE = 1; // The preview shown in the sharesheet is an image.
CONTENT_PREVIEW_FILE = 2; // The preview shown in the sharesheet is a file.
CONTENT_PREVIEW_TEXT = 3; // The preview shown in the sharesheet is text.
}
// How the sharesheet preview is presented.
- optional SharesheetPreviewType previewType = 8;
+ optional SharesheetPreviewType preview_type = 8;
enum ResolverActivityIntent { // Intents handled by ResolverActivity.java
INTENT_DEFAULT = 0;
@@ -9267,7 +9268,7 @@ message SharesheetStarted {
INTENT_ACTION_MAIN = 7;
}
// The intent being processed (only SEND and SEND_MULTIPLE are system sharesheet)
- optional ResolverActivityIntent intentType = 9;
+ optional ResolverActivityIntent intent_type = 9;
}
/**
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index b6d519ae5d2b..fd73632632ff 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -69,6 +69,7 @@ import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.WorkSource;
+import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.Singleton;
@@ -1597,6 +1598,39 @@ public class ActivityManager {
+ " resizeMode: " + ActivityInfo.resizeModeToString(mResizeMode)
+ " minWidth: " + mMinWidth + " minHeight: " + mMinHeight;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof TaskDescription)) {
+ return false;
+ }
+
+ TaskDescription other = (TaskDescription) obj;
+ return TextUtils.equals(mLabel, other.mLabel)
+ && TextUtils.equals(mIconFilename, other.mIconFilename)
+ && mIcon == other.mIcon
+ && mColorPrimary == other.mColorPrimary
+ && mColorBackground == other.mColorBackground
+ && mStatusBarColor == other.mStatusBarColor
+ && mNavigationBarColor == other.mNavigationBarColor
+ && mEnsureStatusBarContrastWhenTransparent
+ == other.mEnsureStatusBarContrastWhenTransparent
+ && mEnsureNavigationBarContrastWhenTransparent
+ == other.mEnsureNavigationBarContrastWhenTransparent
+ && mResizeMode == other.mResizeMode
+ && mMinWidth == other.mMinWidth
+ && mMinHeight == other.mMinHeight;
+ }
+
+ /** @hide */
+ public static boolean equals(TaskDescription td1, TaskDescription td2) {
+ if (td1 == null && td2 == null) {
+ return true;
+ } else if (td1 != null && td2 != null) {
+ return td1.equals(td2);
+ }
+ return false;
+ }
}
/**
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 78d3581a7012..9d0364eba39f 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -78,10 +78,9 @@ interface INotificationManager
boolean shouldHideSilentStatusIcons(String callingPkg);
void setHideSilentStatusIcons(boolean hide);
- void setBubblesAllowed(String pkg, int uid, boolean allowed);
+ void setBubblesAllowed(String pkg, int uid, int bubblePreference);
boolean areBubblesAllowed(String pkg);
- boolean areBubblesAllowedForPackage(String pkg, int uid);
- boolean hasUserApprovedBubblesForPackage(String pkg, int uid);
+ int getBubblePreferenceForPackage(String pkg, int uid);
void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList);
void createNotificationChannels(String pkg, in ParceledListSlice channelsList);
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index d1d67f0d81d8..2feb9277775c 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -102,7 +102,7 @@ public final class NotificationChannel implements Parcelable {
private static final String ATT_FG_SERVICE_SHOWN = "fgservice";
private static final String ATT_GROUP = "group";
private static final String ATT_BLOCKABLE_SYSTEM = "blockable_system";
- private static final String ATT_ALLOW_BUBBLE = "can_bubble";
+ private static final String ATT_ALLOW_BUBBLE = "allow_bubble";
private static final String ATT_ORIG_IMP = "orig_imp";
private static final String ATT_PARENT_CHANNEL = "parent";
private static final String ATT_CONVERSATION_ID = "conv_id";
@@ -168,7 +168,7 @@ public final class NotificationChannel implements Parcelable {
NotificationManager.IMPORTANCE_UNSPECIFIED;
private static final boolean DEFAULT_DELETED = false;
private static final boolean DEFAULT_SHOW_BADGE = true;
- private static final boolean DEFAULT_ALLOW_BUBBLE = true;
+ private static final boolean DEFAULT_ALLOW_BUBBLE = false;
@UnsupportedAppUsage
private String mId;
@@ -545,15 +545,8 @@ public final class NotificationChannel implements Parcelable {
}
/**
- * Sets whether notifications posted to this channel can appear outside of the notification
- * shade, floating over other apps' content as a bubble.
- *
- * <p>This value will be ignored for channels that aren't allowed to pop on screen (that is,
- * channels whose {@link #getImportance() importance} is <
- * {@link NotificationManager#IMPORTANCE_HIGH}.</p>
- *
- * <p>Only modifiable before the channel is submitted to
- * * {@link NotificationManager#createNotificationChannel(NotificationChannel)}.</p>
+ * As of Android 11 this value is no longer respected.
+ * @see #canBubble()
* @see Notification#getBubbleMetadata()
*/
public void setAllowBubbles(boolean allowBubbles) {
@@ -702,8 +695,10 @@ public final class NotificationChannel implements Parcelable {
}
/**
- * Returns whether notifications posted to this channel can display outside of the notification
- * shade, in a floating window on top of other apps.
+ * Returns whether notifications posted to this channel are allowed to display outside of the
+ * notification shade, in a floating window on top of other apps.
+ *
+ * @see Notification#getBubbleMetadata()
*/
public boolean canBubble() {
return mAllowBubbles;
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 0e97e3fe06ce..d6df400f86b6 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -452,6 +452,19 @@ public class NotificationManager {
*/
public static final int IMPORTANCE_MAX = 5;
+ /**
+ * @hide
+ */
+ public static final int BUBBLE_PREFERENCE_NONE = 0;
+ /**
+ * @hide
+ */
+ public static final int BUBBLE_PREFERENCE_ALL = 1;
+ /**
+ * @hide
+ */
+ public static final int BUBBLE_PREFERENCE_SELECTED = 2;
+
@UnsupportedAppUsage
private static INotificationManager sService;
@@ -1213,7 +1226,7 @@ public class NotificationManager {
/**
- * Sets whether notifications posted by this app can appear outside of the
+ * Gets whether all notifications posted by this app can appear outside of the
* notification shade, floating over other apps' content.
*
* <p>This value will be ignored for notifications that are posted to channels that do not
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index f951d2b89958..745add174582 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -17,6 +17,7 @@
package android.content;
import android.annotation.IntDef;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.net.Uri;
@@ -40,6 +41,7 @@ import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -766,16 +768,30 @@ public class IntentFilter implements Parcelable {
* @return True if the action is listed in the filter.
*/
public final boolean matchAction(String action) {
- return matchAction(action, false);
+ return matchAction(action, false /*wildcardSupported*/, null /*ignoreActions*/);
}
/**
* Variant of {@link #matchAction(String)} that allows a wildcard for the provided action.
* @param wildcardSupported if true, will allow action to use wildcards
- */
- private boolean matchAction(String action, boolean wildcardSupported) {
- if (wildcardSupported && !mActions.isEmpty() && WILDCARD.equals(action)) {
- return true;
+ * @param ignoreActions if not null, the set of actions to should not be considered valid while
+ * calculating the match
+ */
+ private boolean matchAction(String action, boolean wildcardSupported,
+ @Nullable Collection<String> ignoreActions) {
+ if (wildcardSupported && WILDCARD.equals(action)) {
+ if (ignoreActions == null) {
+ return !mActions.isEmpty();
+ }
+ for (int i = mActions.size() - 1; i >= 0; i--) {
+ if (!ignoreActions.contains(mActions.get(i))) {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (ignoreActions != null && ignoreActions.contains(action)) {
+ return false;
}
return hasAction(action);
}
@@ -1779,17 +1795,24 @@ public class IntentFilter implements Parcelable {
*/
public final int match(String action, String type, String scheme,
Uri data, Set<String> categories, String logTag) {
- return match(action, type, scheme, data, categories, logTag, false /*supportWildcards*/);
+ return match(action, type, scheme, data, categories, logTag, false /*supportWildcards*/,
+ null /*ignoreActions*/);
}
/**
* Variant of {@link #match(ContentResolver, Intent, boolean, String)} that supports wildcards
* in the action, type, scheme, host and path.
- * @hide if true, will allow supported parameters to use wildcards to match this filter
+ * @param supportWildcards if true, will allow supported parameters to use wildcards to match
+ * this filter
+ * @param ignoreActions a collection of actions that, if not null should be ignored and not used
+ * if provided as the matching action or the set of actions defined by this
+ * filter
+ * @hide
*/
public final int match(String action, String type, String scheme,
- Uri data, Set<String> categories, String logTag, boolean supportWildcards) {
- if (action != null && !matchAction(action, supportWildcards)) {
+ Uri data, Set<String> categories, String logTag, boolean supportWildcards,
+ @Nullable Collection<String> ignoreActions) {
+ if (action != null && !matchAction(action, supportWildcards, ignoreActions)) {
if (false) Log.v(
logTag, "No matching action " + action + " for " + this);
return NO_MATCH_ACTION;
diff --git a/core/java/android/content/pm/IPackageInstaller.aidl b/core/java/android/content/pm/IPackageInstaller.aidl
index b0b2c33e0ddd..37baae35734b 100644
--- a/core/java/android/content/pm/IPackageInstaller.aidl
+++ b/core/java/android/content/pm/IPackageInstaller.aidl
@@ -55,4 +55,6 @@ interface IPackageInstaller {
in IntentSender statusReceiver, int userId, in List<String> whiteListedPermissions);
void setPermissionsResult(int sessionId, boolean accepted);
+
+ void bypassNextStagedInstallerCheck(boolean value);
}
diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java
index 31d7d0820996..65e772cb5ebb 100644
--- a/core/java/android/net/NetworkAgent.java
+++ b/core/java/android/net/NetworkAgent.java
@@ -25,12 +25,14 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
+import android.os.ConditionVariable;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
@@ -572,6 +574,37 @@ public abstract class NetworkAgent {
}
/**
+ * Register this network agent with a testing harness.
+ *
+ * The returned Messenger sends messages to the Handler. This allows a test to send
+ * this object {@code CMD_*} messages as if they came from ConnectivityService, which
+ * is useful for testing the behavior.
+ *
+ * @hide
+ */
+ public Messenger registerForTest(final Network network) {
+ log("Registering NetworkAgent for test");
+ synchronized (mRegisterLock) {
+ mNetwork = network;
+ mInitialConfiguration = null;
+ }
+ return new Messenger(mHandler);
+ }
+
+ /**
+ * Waits for the handler to be idle.
+ * This is useful for testing, and has smaller scope than an accessor to mHandler.
+ * TODO : move the implementation in common library with the tests
+ * @hide
+ */
+ @VisibleForTesting
+ public boolean waitForIdle(final long timeoutMs) {
+ final ConditionVariable cv = new ConditionVariable(false);
+ mHandler.post(cv::open);
+ return cv.block(timeoutMs);
+ }
+
+ /**
* @return The Network associated with this agent, or null if it's not registered yet.
*/
@Nullable
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 73c6b3daf2ec..52d6fdfbd529 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -680,11 +680,13 @@ public final class NetworkCapabilities implements Parcelable {
public void restrictCapabilitesForTestNetwork() {
final long originalCapabilities = mNetworkCapabilities;
final NetworkSpecifier originalSpecifier = mNetworkSpecifier;
+ final int originalSignalStrength = mSignalStrength;
clearAll();
// Reset the transports to only contain TRANSPORT_TEST.
mTransportTypes = (1 << TRANSPORT_TEST);
mNetworkCapabilities = originalCapabilities & TEST_NETWORKS_ALLOWED_CAPABILITIES;
mNetworkSpecifier = originalSpecifier;
+ mSignalStrength = originalSignalStrength;
}
/**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 541883346e23..fe340c46e3c4 100644..100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -4748,6 +4748,14 @@ public final class Settings {
public static final String SHOW_BATTERY_PERCENT = "status_bar_show_battery_percent";
/**
+ * Whether or not to enable multiple audio focus.
+ * When enabled, requires more management by user over application playback activity,
+ * for instance pausing media apps when another starts.
+ * @hide
+ */
+ public static final String MULTI_AUDIO_FOCUS_ENABLED = "multi_audio_focus_enabled";
+
+ /**
* IMPORTANT: If you add a new public settings you also have to add it to
* PUBLIC_SETTINGS below. If the new setting is hidden you have to add
* it to PRIVATE_SETTINGS below. Also add a validator that can validate
diff --git a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
index 1efa3dd0c865..b47b2b41bdd9 100644
--- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
+++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
@@ -31,6 +31,7 @@ import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Build;
+import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.IBinder;
@@ -558,9 +559,10 @@ public abstract class AugmentedAutofillService extends Service {
}
}
- void reportResult(@Nullable List<Dataset> inlineSuggestionsData) {
+ void reportResult(@Nullable List<Dataset> inlineSuggestionsData,
+ @Nullable Bundle clientState) {
try {
- mCallback.onSuccess(inlineSuggestionsData);
+ mCallback.onSuccess(inlineSuggestionsData, clientState);
} catch (RemoteException e) {
Log.e(TAG, "Error calling back with the inline suggestions data: " + e);
}
diff --git a/core/java/android/service/autofill/augmented/FillCallback.java b/core/java/android/service/autofill/augmented/FillCallback.java
index 526a749c95a1..21738d80f2d3 100644
--- a/core/java/android/service/autofill/augmented/FillCallback.java
+++ b/core/java/android/service/autofill/augmented/FillCallback.java
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
+import android.os.Bundle;
import android.service.autofill.Dataset;
import android.service.autofill.augmented.AugmentedAutofillService.AutofillProxy;
import android.util.Log;
@@ -55,14 +56,15 @@ public final class FillCallback {
if (response == null) {
mProxy.logEvent(AutofillProxy.REPORT_EVENT_NO_RESPONSE);
- mProxy.reportResult(/* inlineSuggestionsData */ null);
+ mProxy.reportResult(/* inlineSuggestionsData */ null, /* clientState */ null);
return;
}
List<Dataset> inlineSuggestions = response.getInlineSuggestions();
+ Bundle clientState = response.getClientState();
if (inlineSuggestions != null && !inlineSuggestions.isEmpty()) {
mProxy.logEvent(AutofillProxy.REPORT_EVENT_INLINE_RESPONSE);
- mProxy.reportResult(inlineSuggestions);
+ mProxy.reportResult(inlineSuggestions, clientState);
return;
}
diff --git a/core/java/android/service/autofill/augmented/IFillCallback.aidl b/core/java/android/service/autofill/augmented/IFillCallback.aidl
index 24af1e51dd56..609e382e2b96 100644
--- a/core/java/android/service/autofill/augmented/IFillCallback.aidl
+++ b/core/java/android/service/autofill/augmented/IFillCallback.aidl
@@ -30,7 +30,7 @@ import java.util.List;
*/
interface IFillCallback {
void onCancellable(in ICancellationSignal cancellation);
- void onSuccess(in @nullable List<Dataset> inlineSuggestionsData);
+ void onSuccess(in @nullable List<Dataset> inlineSuggestionsData, in @nullable Bundle clientState);
boolean isCompleted();
void cancel();
}
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java
index 174165c5ba59..cfceb031539f 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -50,6 +50,22 @@ public class SurfaceControlViewHost {
* elements. It's expected to get this object from
* {@link SurfaceControlViewHost#getSurfacePackage} afterwards it can be embedded within
* a SurfaceView by calling {@link SurfaceView#setChildSurfacePackage}.
+ *
+ * Note that each {@link SurfacePackage} must be released by calling
+ * {@link SurfacePackage#release}. However, if you use the recommended flow,
+ * the framework will automatically handle the lifetime for you.
+ *
+ * 1. When sending the package to the remote process, return it from an AIDL method
+ * or manually use FLAG_WRITE_RETURN_VALUE in writeToParcel. This will automatically
+ * release the package in the local process.
+ * 2. In the remote process, consume the package using SurfaceView. This way the
+ * SurfaceView will take over the lifetime and call {@link SurfacePackage#release}
+ * for the user.
+ *
+ * One final note: The {@link SurfacePackage} lifetime is totally de-coupled
+ * from the lifetime of the underlying {@link SurfaceControlViewHost}. Regardless
+ * of the lifetime of the package the user should still call
+ * {@link SurfaceControlViewHost#release} when finished.
*/
public static final class SurfacePackage implements Parcelable {
private SurfaceControl mSurfaceControl;
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index b677ccd9a618..9880ea096cf2 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -1650,11 +1650,24 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
/**
* Display the view-hierarchy embedded within a {@link SurfaceControlViewHost.SurfacePackage}
- * within this SurfaceView. If this SurfaceView is above it's host Surface (see
+ * within this SurfaceView.
+ *
+ * This can be called independently of the SurfaceView lifetime callbacks. SurfaceView
+ * will internally manage reparenting the package to our Surface as it is created
+ * and destroyed.
+ *
+ * If this SurfaceView is above its host Surface (see
* {@link #setZOrderOnTop} then the embedded Surface hierarchy will be able to receive
- * input. This will take ownership of the SurfaceControl contained inside the SurfacePackage
+ * input.
+ *
+ * This will take ownership of the SurfaceControl contained inside the SurfacePackage
* and free the caller of the obligation to call
- * {@link SurfaceControlViewHost.SurfacePackage#release}.
+ * {@link SurfaceControlViewHost.SurfacePackage#release}. However, note that
+ * {@link SurfaceControlViewHost.SurfacePackage#release} and
+ * {@link SurfaceControlViewHost#release} are not the same. While the ownership
+ * of this particular {@link SurfaceControlViewHost.SurfacePackage} will be taken by the
+ * SurfaceView the underlying {@link SurfaceControlViewHost} remains managed by it's original
+ * remote-owner.
*
* @param p The SurfacePackage to embed.
*/
diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java
index ca3dd04fd756..aad1c60d7b7e 100644
--- a/core/java/android/view/WindowInsets.java
+++ b/core/java/android/view/WindowInsets.java
@@ -473,6 +473,12 @@ public final class WindowInsets {
/**
* Returns the display cutout if there is one.
*
+ * <p>Note: the display cutout will already be {@link #consumeDisplayCutout consumed} during
+ * dispatch to {@link View#onApplyWindowInsets}, unless the window has requested a
+ * {@link WindowManager.LayoutParams#layoutInDisplayCutoutMode} other than
+ * {@link WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER never} or
+ * {@link WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT default}.
+ *
* @return the display cutout or null if there is none
* @see DisplayCutout
*/
@@ -1424,7 +1430,13 @@ public final class WindowInsets {
/**
* Returns an insets type representing the area that used by {@link DisplayCutout}.
*
- * <p>This is equivalent to the safe insets on {@link #getDisplayCutout()}.</p>
+ * <p>This is equivalent to the safe insets on {@link #getDisplayCutout()}.
+ *
+ * <p>Note: During dispatch to {@link View#onApplyWindowInsets}, if the window is using
+ * the {@link WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT default}
+ * {@link WindowManager.LayoutParams#layoutInDisplayCutoutMode}, {@link #getDisplayCutout()}
+ * will return {@code null} even if the window overlaps a display cutout area, in which case
+ * the {@link #displayCutout() displayCutout() inset} will still report the accurate value.
*
* @see DisplayCutout#getSafeInsetLeft()
* @see DisplayCutout#getSafeInsetTop()
diff --git a/core/java/android/window/TaskEmbedder.java b/core/java/android/window/TaskEmbedder.java
index 45ab310c5148..2ead37a9397d 100644
--- a/core/java/android/window/TaskEmbedder.java
+++ b/core/java/android/window/TaskEmbedder.java
@@ -26,7 +26,6 @@ import android.app.ActivityTaskManager;
import android.app.ActivityView;
import android.app.IActivityTaskManager;
import android.app.PendingIntent;
-import android.app.TaskStackListener;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -129,7 +128,6 @@ public abstract class TaskEmbedder {
protected SurfaceControl.Transaction mTransaction;
protected SurfaceControl mSurfaceControl;
- protected TaskStackListener mTaskStackListener;
protected Listener mListener;
protected boolean mOpened; // Protected by mGuard.
@@ -170,13 +168,6 @@ public abstract class TaskEmbedder {
if (!onInitialize()) {
return false;
}
-
- mTaskStackListener = createTaskStackListener();
- try {
- mActivityTaskManager.registerTaskStackListener(mTaskStackListener);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to register task stack listener", e);
- }
if (mListener != null && isInitialized()) {
mListener.onInitialized();
}
@@ -187,11 +178,6 @@ public abstract class TaskEmbedder {
}
/**
- * @return the task stack listener for this embedder
- */
- public abstract TaskStackListener createTaskStackListener();
-
- /**
* Whether this container has been initialized.
*
* @return true if initialized
@@ -420,16 +406,6 @@ public abstract class TaskEmbedder {
mSurfaceControl.release();
boolean reportReleased = onRelease();
-
- if (mTaskStackListener != null) {
- try {
- mActivityTaskManager.unregisterTaskStackListener(mTaskStackListener);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to unregister task stack listener", e);
- }
- mTaskStackListener = null;
- }
-
if (mListener != null && reportReleased) {
mListener.onReleased();
}
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index 5098b4440070..f661d9af5999 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -16,6 +16,7 @@
package android.window;
+import android.annotation.BinderThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -39,7 +40,7 @@ public class TaskOrganizer extends WindowOrganizer {
* and receive taskVanished callbacks in the process.
*/
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
- public void registerOrganizer(int windowingMode) {
+ public final void registerOrganizer(int windowingMode) {
try {
getController().registerTaskOrganizer(mInterface, windowingMode);
} catch (RemoteException e) {
@@ -49,7 +50,7 @@ public class TaskOrganizer extends WindowOrganizer {
/** Unregisters a previously registered task organizer. */
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
- public void unregisterOrganizer() {
+ public final void unregisterOrganizer() {
try {
getController().unregisterTaskOrganizer(mInterface);
} catch (RemoteException e) {
@@ -57,13 +58,17 @@ public class TaskOrganizer extends WindowOrganizer {
}
}
+ @BinderThread
public void onTaskAppeared(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
+ @BinderThread
public void onTaskVanished(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
- public void onTaskInfoChanged(@NonNull ActivityManager.RunningTaskInfo info) {}
+ @BinderThread
+ public void onTaskInfoChanged(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
- public void onBackPressedOnTaskRoot(@NonNull ActivityManager.RunningTaskInfo info) {}
+ @BinderThread
+ public void onBackPressedOnTaskRoot(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
/** Creates a persistent root task in WM for a particular windowing-mode. */
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
diff --git a/core/java/android/window/TaskOrganizerTaskEmbedder.java b/core/java/android/window/TaskOrganizerTaskEmbedder.java
index 39a0101bbf59..b63741ec69c4 100644
--- a/core/java/android/window/TaskOrganizerTaskEmbedder.java
+++ b/core/java/android/window/TaskOrganizerTaskEmbedder.java
@@ -21,7 +21,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import android.app.ActivityManager;
import android.app.ActivityOptions;
-import android.app.ActivityView;
import android.app.TaskStackListener;
import android.content.Context;
import android.graphics.Rect;
@@ -55,11 +54,6 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
super(context, host);
}
- @Override
- public TaskStackListener createTaskStackListener() {
- return new TaskStackListenerImpl();
- }
-
/**
* Whether this container has been initialized.
*
@@ -219,29 +213,6 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
Log.d(TAG, "[" + System.identityHashCode(this) + "] " + msg);
}
- /**
- * A task change listener that detects background color change of the topmost stack on our
- * virtual display and updates the background of the surface view. This background will be shown
- * when surface view is resized, but the app hasn't drawn its content in new size yet.
- * It also calls StateCallback.onTaskMovedToFront to notify interested parties that the stack
- * associated with the {@link ActivityView} has had a Task moved to the front. This is useful
- * when needing to also bring the host Activity to the foreground at the same time.
- */
- private class TaskStackListenerImpl extends TaskStackListener {
-
- @Override
- public void onTaskDescriptionChanged(ActivityManager.RunningTaskInfo taskInfo) {
- if (!isInitialized()) {
- return;
- }
- if (taskInfo.taskId == mTaskInfo.taskId) {
- mTaskInfo.taskDescription = taskInfo.taskDescription;
- mHost.onTaskBackgroundColorChanged(TaskOrganizerTaskEmbedder.this,
- taskInfo.taskDescription.getBackgroundColor());
- }
- }
- }
-
private class TaskOrganizerImpl extends TaskOrganizer {
@Override
public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo) {
@@ -249,7 +220,6 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
log("taskAppeared: " + taskInfo.taskId);
}
- // TODO: Ensure visibility/alpha of the leash in its initial state?
mTaskInfo = taskInfo;
mTaskToken = taskInfo.token;
mTaskLeash = mTaskToken.getLeash();
@@ -270,6 +240,13 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
}
@Override
+ public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
+ mTaskInfo.taskDescription = taskInfo.taskDescription;
+ mHost.post(() -> mHost.onTaskBackgroundColorChanged(TaskOrganizerTaskEmbedder.this,
+ taskInfo.taskDescription.getBackgroundColor()));
+ }
+
+ @Override
public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
if (DEBUG) {
log("taskVanished: " + taskInfo.taskId);
diff --git a/core/java/android/window/VirtualDisplayTaskEmbedder.java b/core/java/android/window/VirtualDisplayTaskEmbedder.java
index 0f26d5d00f6d..70164692032f 100644
--- a/core/java/android/window/VirtualDisplayTaskEmbedder.java
+++ b/core/java/android/window/VirtualDisplayTaskEmbedder.java
@@ -67,6 +67,7 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
private VirtualDisplay mVirtualDisplay;
private Insets mForwardedInsets;
private DisplayMetrics mTmpDisplayMetrics;
+ private TaskStackListener mTaskStackListener;
/**
* Constructs a new TaskEmbedder.
@@ -82,11 +83,6 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
mSingleTaskInstance = singleTaskInstance;
}
- @Override
- public TaskStackListener createTaskStackListener() {
- return new TaskStackListenerImpl();
- }
-
/**
* Whether this container has been initialized.
*
@@ -124,6 +120,9 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
.setDisplayToSingleTaskInstance(displayId);
}
setForwardedInsets(mForwardedInsets);
+
+ mTaskStackListener = new TaskStackListenerImpl();
+ mActivityTaskManager.registerTaskStackListener(mTaskStackListener);
} catch (RemoteException e) {
e.rethrowAsRuntimeException();
}
@@ -142,6 +141,15 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
// Clear tap-exclude region (if any) for this window.
clearTapExcludeRegion();
+ if (mTaskStackListener != null) {
+ try {
+ mActivityTaskManager.unregisterTaskStackListener(mTaskStackListener);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to unregister task stack listener", e);
+ }
+ mTaskStackListener = null;
+ }
+
if (isInitialized()) {
mVirtualDisplay.release();
mVirtualDisplay = null;
diff --git a/core/java/android/window/WindowContainerToken.java b/core/java/android/window/WindowContainerToken.java
index dde98dae4057..3316d0e5b71f 100644
--- a/core/java/android/window/WindowContainerToken.java
+++ b/core/java/android/window/WindowContainerToken.java
@@ -84,4 +84,17 @@ public final class WindowContainerToken implements Parcelable {
public int describeContents() {
return 0;
}
+
+ @Override
+ public int hashCode() {
+ return mRealToken.asBinder().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof WindowContainerToken)) {
+ return false;
+ }
+ return mRealToken.asBinder() == ((WindowContainerToken) obj).asBinder();
+ }
}
diff --git a/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java
index 4f98a6354ea3..9338c3c87217 100644
--- a/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
+++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.internal.app;
+package com.android.internal.accessibility.dialog;
import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON;
import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY;
@@ -79,9 +79,10 @@ import java.util.List;
import java.util.Locale;
/**
- * Activity used to display and persist a service or feature target for the Accessibility button.
+ * Activity used to display various targets related to accessibility service, accessibility
+ * activity or white listing feature for volume key shortcut.
*/
-public class AccessibilityButtonChooserActivity extends Activity {
+public class AccessibilityShortcutChooserActivity extends Activity {
@ShortcutType
private static int sShortcutType;
@UserShortcutType
@@ -355,17 +356,18 @@ public class AccessibilityButtonChooserActivity extends Activity {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(
- R.layout.accessibility_button_chooser_item, parent, /* attachToRoot= */
+ R.layout.accessibility_shortcut_chooser_item, parent, /* attachToRoot= */
false);
holder = new ViewHolder();
holder.mItemView = convertView;
holder.mCheckBox = convertView.findViewById(
- R.id.accessibility_button_target_checkbox);
- holder.mIconView = convertView.findViewById(R.id.accessibility_button_target_icon);
+ R.id.accessibility_shortcut_target_checkbox);
+ holder.mIconView = convertView.findViewById(
+ R.id.accessibility_shortcut_target_icon);
holder.mLabelView = convertView.findViewById(
- R.id.accessibility_button_target_label);
+ R.id.accessibility_shortcut_target_label);
holder.mSwitchItem = convertView.findViewById(
- R.id.accessibility_button_target_switch_item);
+ R.id.accessibility_shortcut_target_switch_item);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
diff --git a/core/java/com/android/internal/accessibility/util/AccessibilityUtils.java b/core/java/com/android/internal/accessibility/util/AccessibilityUtils.java
index bcbd6abc252c..a92a50d4d832 100644
--- a/core/java/com/android/internal/accessibility/util/AccessibilityUtils.java
+++ b/core/java/com/android/internal/accessibility/util/AccessibilityUtils.java
@@ -19,6 +19,7 @@ import static com.android.internal.accessibility.common.ShortcutConstants.Access
import static com.android.internal.accessibility.common.ShortcutConstants.SERVICES_SEPARATOR;
import android.accessibilityservice.AccessibilityServiceInfo;
+import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.Context;
import android.os.Build;
@@ -115,7 +116,7 @@ public final class AccessibilityUtils {
* @return int from {@link AccessibilityFragmentType}.
*/
public static @AccessibilityFragmentType int getAccessibilityServiceFragmentType(
- AccessibilityServiceInfo accessibilityServiceInfo) {
+ @NonNull AccessibilityServiceInfo accessibilityServiceInfo) {
final int targetSdk = accessibilityServiceInfo.getResolveInfo()
.serviceInfo.applicationInfo.targetSdkVersion;
final boolean requestA11yButton = (accessibilityServiceInfo.flags
diff --git a/core/java/com/android/internal/accessibility/util/ShortcutUtils.java b/core/java/com/android/internal/accessibility/util/ShortcutUtils.java
index 717e78078b1c..7ec80ecdb2a9 100644
--- a/core/java/com/android/internal/accessibility/util/ShortcutUtils.java
+++ b/core/java/com/android/internal/accessibility/util/ShortcutUtils.java
@@ -39,21 +39,21 @@ public final class ShortcutUtils {
new TextUtils.SimpleStringSplitter(SERVICES_SEPARATOR);
/**
- * Opts in component name into colon-separated {@link UserShortcutType}
- * key's string in Settings.
+ * Opts in component id into colon-separated {@link UserShortcutType}
+ * key's string from Settings.
*
* @param context The current context.
* @param shortcutType The preferred shortcut type user selected.
- * @param componentId The component id that need to be opted out from Settings.
+ * @param componentId The component id that need to be opted in Settings.
*/
public static void optInValueToSettings(Context context, @UserShortcutType int shortcutType,
- String componentId) {
+ @NonNull String componentId) {
final StringJoiner joiner = new StringJoiner(String.valueOf(SERVICES_SEPARATOR));
final String targetKey = convertToKey(shortcutType);
final String targetString = Settings.Secure.getString(context.getContentResolver(),
targetKey);
- if (hasValueInSettings(context, shortcutType, componentId)) {
+ if (isComponentIdExistingInSettings(context, shortcutType, componentId)) {
return;
}
@@ -66,14 +66,15 @@ public final class ShortcutUtils {
}
/**
- * Opts out component name into colon-separated {@code shortcutType} key's string in Settings.
+ * Opts out of component id into colon-separated {@link UserShortcutType} key's string from
+ * Settings.
*
* @param context The current context.
* @param shortcutType The preferred shortcut type user selected.
- * @param componentId The component id that need to be opted out from Settings.
+ * @param componentId The component id that need to be opted out of Settings.
*/
public static void optOutValueFromSettings(
- Context context, @UserShortcutType int shortcutType, String componentId) {
+ Context context, @UserShortcutType int shortcutType, @NonNull String componentId) {
final StringJoiner joiner = new StringJoiner(String.valueOf(SERVICES_SEPARATOR));
final String targetsKey = convertToKey(shortcutType);
final String targetsValue = Settings.Secure.getString(context.getContentResolver(),
@@ -96,36 +97,38 @@ public final class ShortcutUtils {
}
/**
- * Returns if component name existed in one of {@code shortcutTypes} string in Settings.
+ * Returns if component id existed in one of {@link UserShortcutType} string from Settings.
*
* @param context The current context.
* @param shortcutTypes A combination of {@link UserShortcutType}.
- * @param componentId The component name that need to be checked existed in Settings.
- * @return {@code true} if componentName existed in Settings.
+ * @param componentId The component id that need to be checked existed in Settings.
+ * @return {@code true} if component id existed in Settings.
*/
- public static boolean hasValuesInSettings(Context context, int shortcutTypes,
+ public static boolean hasValuesInSettings(Context context, @UserShortcutType int shortcutTypes,
@NonNull String componentId) {
boolean exist = false;
if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) {
- exist = hasValueInSettings(context, UserShortcutType.SOFTWARE, componentId);
+ exist = isComponentIdExistingInSettings(context, UserShortcutType.SOFTWARE,
+ componentId);
}
if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) {
- exist |= hasValueInSettings(context, UserShortcutType.HARDWARE, componentId);
+ exist |= isComponentIdExistingInSettings(context, UserShortcutType.HARDWARE,
+ componentId);
}
return exist;
}
/**
- * Returns if component name existed in Settings.
+ * Returns if component id existed in Settings.
*
* @param context The current context.
* @param shortcutType The preferred shortcut type user selected.
* @param componentId The component id that need to be checked existed in Settings.
- * @return {@code true} if componentName existed in Settings.
+ * @return {@code true} if component id existed in Settings.
*/
- public static boolean hasValueInSettings(Context context, @UserShortcutType int shortcutType,
- @NonNull String componentId) {
+ public static boolean isComponentIdExistingInSettings(Context context,
+ @UserShortcutType int shortcutType, @NonNull String componentId) {
final String targetKey = convertToKey(shortcutType);
final String targetString = Settings.Secure.getString(context.getContentResolver(),
targetKey);
@@ -146,7 +149,7 @@ public final class ShortcutUtils {
}
/**
- * Converts {@link UserShortcutType} to key in Settings.
+ * Converts {@link UserShortcutType} to {@link Settings.Secure} key.
*
* @param type The shortcut type.
* @return Mapping key in Settings.
@@ -169,7 +172,7 @@ public final class ShortcutUtils {
* Converts {@link ShortcutType} to {@link UserShortcutType}.
*
* @param type The shortcut type.
- * @return {@link UserShortcutType}.
+ * @return Mapping type from {@link UserShortcutType}.
*/
public static @UserShortcutType int convertToUserType(@ShortcutType int type) {
switch (type) {
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index c82ab6c79e9d..3e7f24b034ac 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -169,6 +169,17 @@ public class ChooserActivity extends ResolverActivity implements
public static final String EXTRA_PRIVATE_RETAIN_IN_ON_STOP
= "com.android.internal.app.ChooserActivity.EXTRA_PRIVATE_RETAIN_IN_ON_STOP";
+ /**
+ * Integer extra to indicate which profile should be automatically selected.
+ * <p>Can only be used if there is a work profile.
+ * <p>Possible values can be either {@link #PROFILE_PERSONAL} or {@link #PROFILE_WORK}.
+ */
+ static final String EXTRA_SELECTED_PROFILE =
+ "com.android.internal.app.ChooserActivity.EXTRA_SELECTED_PROFILE";
+
+ static final int PROFILE_PERSONAL = AbstractMultiProfilePagerAdapter.PROFILE_PERSONAL;
+ static final int PROFILE_WORK = AbstractMultiProfilePagerAdapter.PROFILE_WORK;
+
private static final String PREF_NUM_SHEET_EXPANSIONS = "pref_num_sheet_expansions";
private static final String CHIP_LABEL_METADATA_KEY = "android.service.chooser.chip_label";
@@ -860,15 +871,31 @@ public class ChooserActivity extends ResolverActivity implements
filterLastUsed,
mUseLayoutForBrowsables,
/* userHandle */ getWorkProfileUserHandle());
+ int selectedProfile = findSelectedProfile();
return new ChooserMultiProfilePagerAdapter(
/* context */ this,
personalAdapter,
workAdapter,
- /* defaultProfile */ getCurrentProfile(),
+ selectedProfile,
getPersonalProfileUserHandle(),
getWorkProfileUserHandle());
}
+ private int findSelectedProfile() {
+ int selectedProfile;
+ if (getIntent().hasExtra(EXTRA_SELECTED_PROFILE)) {
+ selectedProfile = getIntent().getIntExtra(EXTRA_SELECTED_PROFILE, /* defValue = */ -1);
+ if (selectedProfile != PROFILE_PERSONAL && selectedProfile != PROFILE_WORK) {
+ throw new IllegalArgumentException(EXTRA_SELECTED_PROFILE + " has invalid value "
+ + selectedProfile + ". Must be either ChooserActivity.PROFILE_PERSONAL or "
+ + "ChooserActivity.PROFILE_WORK.");
+ }
+ } else {
+ selectedProfile = getProfileForUser(getUser());
+ }
+ return selectedProfile;
+ }
+
@Override
protected boolean postRebuildList(boolean rebuildCompleted) {
updateStickyContentPreview();
@@ -2479,7 +2506,10 @@ public class ChooserActivity extends ResolverActivity implements
gridAdapter.getMaxTargetsPerRow());
}
- if (mChooserMultiProfilePagerAdapter.getCurrentUserHandle() != getUser()) {
+ UserHandle currentUserHandle = mChooserMultiProfilePagerAdapter.getCurrentUserHandle();
+ int currentProfile = getProfileForUser(currentUserHandle);
+ int initialProfile = findSelectedProfile();
+ if (currentProfile != initialProfile) {
return;
}
@@ -2576,6 +2606,19 @@ public class ChooserActivity extends ResolverActivity implements
}
}
+ /**
+ * Returns {@link #PROFILE_PERSONAL}, {@link #PROFILE_WORK}, or -1 if the given user handle
+ * does not match either the personal or work user handle.
+ **/
+ private int getProfileForUser(UserHandle currentUserHandle) {
+ if (currentUserHandle == getPersonalProfileUserHandle()) {
+ return PROFILE_PERSONAL;
+ } else if (currentUserHandle == getWorkProfileUserHandle()) {
+ return PROFILE_WORK;
+ }
+ return -1;
+ }
+
private ViewGroup getCurrentEmptyStateView() {
int currentPage = mChooserMultiProfilePagerAdapter.getCurrentPage();
return mChooserMultiProfilePagerAdapter.getItem(currentPage).getEmptyStateView();
diff --git a/core/java/com/android/internal/app/ChooserActivityLogger.java b/core/java/com/android/internal/app/ChooserActivityLogger.java
index 088973cde3e9..c26bac437915 100644
--- a/core/java/com/android/internal/app/ChooserActivityLogger.java
+++ b/core/java/com/android/internal/app/ChooserActivityLogger.java
@@ -182,7 +182,8 @@ public interface ChooserActivityLogger {
return FrameworkStatsLog.SHARESHEET_STARTED__PREVIEW_TYPE__CONTENT_PREVIEW_FILE;
case ChooserActivity.CONTENT_PREVIEW_TEXT:
default:
- return FrameworkStatsLog.SHARESHEET_STARTED__PREVIEW_TYPE__CONTENT_PREVIEW_TEXT;
+ return FrameworkStatsLog
+ .SHARESHEET_STARTED__PREVIEW_TYPE__CONTENT_PREVIEW_TYPE_UNKNOWN;
}
}
diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java
index 9bdfa4ad4e43..36eecfb685e8 100644
--- a/core/java/com/android/internal/app/IntentForwarderActivity.java
+++ b/core/java/com/android/internal/app/IntentForwarderActivity.java
@@ -108,20 +108,16 @@ public class IntentForwarderActivity extends Activity {
finish();
return;
}
+ if (Intent.ACTION_CHOOSER.equals(intentReceived.getAction())) {
+ launchChooserActivityWithCorrectTab(intentReceived, className);
+ return;
+ }
final int callingUserId = getUserId();
final Intent newIntent = canForward(intentReceived, getUserId(), targetUserId,
mInjector.getIPackageManager(), getContentResolver());
if (newIntent != null) {
- if (Intent.ACTION_CHOOSER.equals(newIntent.getAction())) {
- Intent innerIntent = newIntent.getParcelableExtra(Intent.EXTRA_INTENT);
- // At this point, innerIntent is not null. Otherwise, canForward would have returned
- // false.
- innerIntent.prepareToLeaveUser(callingUserId);
- innerIntent.fixUris(callingUserId);
- } else {
- newIntent.prepareToLeaveUser(callingUserId);
- }
+ newIntent.prepareToLeaveUser(callingUserId);
final ResolveInfo ri = mInjector.resolveActivityAsUser(newIntent, MATCH_DEFAULT_ONLY,
targetUserId);
@@ -153,6 +149,33 @@ public class IntentForwarderActivity extends Activity {
finish();
}
+ private void launchChooserActivityWithCorrectTab(Intent intentReceived, String className) {
+ // When showing the sharesheet, instead of forwarding to the other profile,
+ // we launch the sharesheet in the current user and select the other tab.
+ // This fixes b/152866292 where the user can not go back to the original profile
+ // when cross-profile intents are disabled.
+ int selectedProfile = findSelectedProfile(className);
+ sanitizeIntent(intentReceived);
+ intentReceived.putExtra(ChooserActivity.EXTRA_SELECTED_PROFILE, selectedProfile);
+ Intent innerIntent = intentReceived.getParcelableExtra(Intent.EXTRA_INTENT);
+ if (innerIntent == null) {
+ Slog.wtf(TAG, "Cannot start a chooser intent with no extra " + Intent.EXTRA_INTENT);
+ return;
+ }
+ sanitizeIntent(innerIntent);
+ startActivity(intentReceived);
+ finish();
+ }
+
+ private int findSelectedProfile(String className) {
+ if (className.equals(FORWARD_INTENT_TO_PARENT)) {
+ return ChooserActivity.PROFILE_PERSONAL;
+ } else if (className.equals(FORWARD_INTENT_TO_MANAGED_PROFILE)) {
+ return ChooserActivity.PROFILE_WORK;
+ }
+ return -1;
+ }
+
private boolean shouldShowDisclosure(@Nullable ResolveInfo ri, Intent intent) {
if (!isDeviceProvisioned()) {
return false;
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 1dbd69c67831..24fe0638b091 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -77,7 +77,7 @@ interface IStatusBarService
void onNotificationSmartReplySent(in String key, in int replyIndex, in CharSequence reply,
in int notificationLocation, boolean modifiedBeforeSending);
void onNotificationSettingsViewed(String key);
- void onNotificationBubbleChanged(String key, boolean isBubble);
+ void onNotificationBubbleChanged(String key, boolean isBubble, int flags);
void onBubbleNotificationSuppressionChanged(String key, boolean isSuppressed);
void grantInlineReplyUriPermission(String key, in Uri uri, in UserHandle user, String packageName);
void clearInlineReplyUriPermissions(String key);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 32a79f3ab8ae..5d6fc766676b 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -5060,7 +5060,7 @@
<category android:name="android.intent.category.VOICE" />
</intent-filter>
</activity>
- <activity android:name="com.android.internal.app.AccessibilityButtonChooserActivity"
+ <activity android:name="com.android.internal.accessibility.dialog.AccessibilityShortcutChooserActivity"
android:exported="false"
android:theme="@style/Theme.DeviceDefault.Dialog.Alert.DayNight"
android:finishOnCloseSystemDialogs="true"
diff --git a/core/res/res/layout/accessibility_button_chooser_item.xml b/core/res/res/layout/accessibility_shortcut_chooser_item.xml
index b7dd892fd161..fff22d916b15 100644
--- a/core/res/res/layout/accessibility_button_chooser_item.xml
+++ b/core/res/res/layout/accessibility_shortcut_chooser_item.xml
@@ -24,7 +24,7 @@
android:padding="16dp">
<CheckBox
- android:id="@+id/accessibility_button_target_checkbox"
+ android:id="@+id/accessibility_shortcut_target_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
@@ -34,13 +34,13 @@
android:visibility="gone"/>
<ImageView
- android:id="@+id/accessibility_button_target_icon"
+ android:id="@+id/accessibility_shortcut_target_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:scaleType="fitCenter"/>
<TextView
- android:id="@+id/accessibility_button_target_label"
+ android:id="@+id/accessibility_shortcut_target_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
@@ -50,7 +50,7 @@
android:fontFamily="sans-serif-medium"/>
<Switch
- android:id="@+id/accessibility_button_target_switch_item"
+ android:id="@+id/accessibility_shortcut_target_switch_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
diff --git a/core/res/res/layout/notification_material_action_list.xml b/core/res/res/layout/notification_material_action_list.xml
index 425801991927..ec54091e5a20 100644
--- a/core/res/res/layout/notification_material_action_list.xml
+++ b/core/res/res/layout/notification_material_action_list.xml
@@ -20,16 +20,34 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/notification_action_list_margin_top"
android:layout_gravity="bottom">
- <com.android.internal.widget.NotificationActionListLayout
- android:id="@+id/actions"
+
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="@dimen/notification_action_list_height"
- android:paddingEnd="12dp"
+ android:layout_height="wrap_content"
android:orientation="horizontal"
- android:gravity="center_vertical"
- android:visibility="gone"
- android:background="@color/notification_action_list_background_color"
+ android:paddingEnd="12dp"
>
- <!-- actions will be added here -->
- </com.android.internal.widget.NotificationActionListLayout>
+
+ <com.android.internal.widget.NotificationActionListLayout
+ android:id="@+id/actions"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="@dimen/notification_action_list_height"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:visibility="gone"
+ android:background="@color/notification_action_list_background_color"
+ >
+ <!-- actions will be added here -->
+ </com.android.internal.widget.NotificationActionListLayout>
+
+ <ImageView
+ android:id="@+id/bubble_button"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_gravity="center_vertical|end"
+ android:visibility="gone"
+ android:scaleType="centerInside"
+ />
+ </LinearLayout>
</FrameLayout>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 340dd4d7d89a..fba237936f6e 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3397,7 +3397,7 @@
<!-- Inactivity threshold (in milliseconds) used in JobScheduler. JobScheduler will consider
the device to be "idle" after being inactive for this long. -->
- <integer name="config_jobSchedulerInactivityIdleThreshold">4260000</integer>
+ <integer name="config_jobSchedulerInactivityIdleThreshold">1860000</integer>
<!-- The alarm window (in milliseconds) that JobScheduler uses to enter the idle state -->
<integer name="config_jobSchedulerIdleWindowSlop">300000</integer>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ef1e8b74b05f..5317c8bd238e 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3232,12 +3232,13 @@
<java-symbol type="string" name="accessibility_enable_service_title" />
<java-symbol type="string" name="accessibility_enable_service_encryption_warning" />
+ <java-symbol type="layout" name="accessibility_shortcut_chooser_item" />
+ <java-symbol type="id" name="accessibility_shortcut_target_checkbox" />
+ <java-symbol type="id" name="accessibility_shortcut_target_icon" />
+ <java-symbol type="id" name="accessibility_shortcut_target_label" />
+ <java-symbol type="id" name="accessibility_shortcut_target_switch_item" />
+
<!-- Accessibility Button -->
- <java-symbol type="layout" name="accessibility_button_chooser_item" />
- <java-symbol type="id" name="accessibility_button_target_checkbox" />
- <java-symbol type="id" name="accessibility_button_target_icon" />
- <java-symbol type="id" name="accessibility_button_target_label" />
- <java-symbol type="id" name="accessibility_button_target_switch_item" />
<java-symbol type="string" name="accessibility_magnification_chooser_text" />
<java-symbol type="string" name="edit_accessibility_shortcut_menu_button" />
<java-symbol type="string" name="done_accessibility_shortcut_menu_button" />
@@ -3495,6 +3496,7 @@
<java-symbol type="id" name="clip_children_set_tag" />
<java-symbol type="id" name="clip_to_padding_tag" />
<java-symbol type="id" name="clip_children_tag" />
+ <java-symbol type="id" name="bubble_button" />
<java-symbol type="dimen" name="messaging_avatar_size" />
<java-symbol type="dimen" name="messaging_group_sending_progress_size" />
<java-symbol type="dimen" name="messaging_image_rounding" />
diff --git a/core/tests/coretests/src/com/android/internal/app/IntentForwarderActivityTest.java b/core/tests/coretests/src/com/android/internal/app/IntentForwarderActivityTest.java
index 8cf146ea801d..769c57835662 100644
--- a/core/tests/coretests/src/com/android/internal/app/IntentForwarderActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/IntentForwarderActivityTest.java
@@ -213,13 +213,9 @@ public class IntentForwarderActivityTest {
}
@Test
- public void forwardToManagedProfile_canForward_chooserIntent() throws Exception {
+ public void launchInSameProfile_chooserIntent() {
sComponentName = FORWARD_TO_MANAGED_PROFILE_COMPONENT_NAME;
- // Intent can be forwarded.
- when(mIPm.canForwardTo(
- any(Intent.class), nullable(String.class), anyInt(), anyInt())).thenReturn(true);
-
// Manage profile exists.
List<UserInfo> profiles = new ArrayList<>();
profiles.add(CURRENT_USER_INFO);
@@ -235,10 +231,6 @@ public class IntentForwarderActivityTest {
intent.putExtra(Intent.EXTRA_INTENT, sendIntent);
IntentForwarderWrapperActivity activity = mActivityRule.launchActivity(intent);
- ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mIPm).canForwardTo(intentCaptor.capture(), eq(TYPE_PLAIN_TEXT), anyInt(), anyInt());
- assertEquals(Intent.ACTION_SEND, intentCaptor.getValue().getAction());
-
assertNotNull(activity.mStartActivityIntent);
assertEquals(Intent.ACTION_CHOOSER, activity.mStartActivityIntent.getAction());
assertNull(activity.mStartActivityIntent.getPackage());
@@ -249,9 +241,9 @@ public class IntentForwarderActivityTest {
assertEquals(Intent.ACTION_SEND, innerIntent.getAction());
assertNull(innerIntent.getComponent());
assertNull(innerIntent.getPackage());
- assertEquals(CURRENT_USER_INFO.id, innerIntent.getContentUserHint());
+ assertEquals(UserHandle.USER_CURRENT, innerIntent.getContentUserHint());
- assertEquals(MANAGED_PROFILE_INFO.id, activity.mUserIdActivityLaunchedIn);
+ assertEquals(CURRENT_USER_INFO.id, activity.mUserIdActivityLaunchedIn);
}
@Test
@@ -656,6 +648,12 @@ public class IntentForwarderActivityTest {
}
@Override
+ public void startActivity(Intent intent) {
+ mStartActivityIntent = intent;
+ mUserIdActivityLaunchedIn = getUserId();
+ }
+
+ @Override
protected MetricsLogger getMetricsLogger() {
return mMetricsLogger;
}
diff --git a/libs/hwui/jni/Bitmap.cpp b/libs/hwui/jni/Bitmap.cpp
index ba669053ed63..c0663a9bc699 100755
--- a/libs/hwui/jni/Bitmap.cpp
+++ b/libs/hwui/jni/Bitmap.cpp
@@ -601,6 +601,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
android::Parcel* p = parcelForJavaObject(env, parcel);
+ const bool isMutable = p->readInt32() != 0;
const SkColorType colorType = (SkColorType)p->readInt32();
const SkAlphaType alphaType = (SkAlphaType)p->readInt32();
const uint32_t colorSpaceSize = p->readUint32();
@@ -649,7 +650,9 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
// Map the bitmap in place from the ashmem region if possible otherwise copy.
sk_sp<Bitmap> nativeBitmap;
- if (blob.fd() >= 0 && !blob.isMutable()) {
+ // If the blob is mutable we have ownership of the region and can always use it
+ // If the blob is immutable _and_ we're immutable, we can then still use it
+ if (blob.fd() >= 0 && (blob.isMutable() || !isMutable)) {
#if DEBUG_PARCEL
ALOGD("Bitmap.createFromParcel: mapped contents of bitmap from %s blob "
"(fds %s)",
@@ -669,7 +672,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
// Map the pixels in place and take ownership of the ashmem region. We must also respect the
// rowBytes value already set on the bitmap instead of attempting to compute our own.
nativeBitmap = Bitmap::createFrom(bitmap->info(), bitmap->rowBytes(), dupFd,
- const_cast<void*>(blob.data()), size, true);
+ const_cast<void*>(blob.data()), size, !isMutable);
if (!nativeBitmap) {
close(dupFd);
blob.release();
@@ -707,7 +710,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
}
return createBitmap(env, nativeBitmap.release(),
- getPremulBitmapCreateFlags(false), NULL, NULL, density);
+ getPremulBitmapCreateFlags(isMutable), NULL, NULL, density);
#else
doThrowRE(env, "Cannot use parcels outside of Android");
return NULL;
@@ -728,6 +731,7 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,
auto bitmapWrapper = reinterpret_cast<BitmapWrapper*>(bitmapHandle);
bitmapWrapper->getSkBitmap(&bitmap);
+ p->writeInt32(!bitmap.isImmutable());
p->writeInt32(bitmap.colorType());
p->writeInt32(bitmap.alphaType());
SkColorSpace* colorSpace = bitmap.colorSpace();
@@ -754,7 +758,7 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,
// Transfer the underlying ashmem region if we have one and it's immutable.
android::status_t status;
int fd = bitmapWrapper->bitmap().getAshmemFd();
- if (fd >= 0 && p->allowFds()) {
+ if (fd >= 0 && bitmap.isImmutable() && p->allowFds()) {
#if DEBUG_PARCEL
ALOGD("Bitmap.writeToParcel: transferring immutable bitmap's ashmem fd as "
"immutable blob (fds %s)",
@@ -775,9 +779,10 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,
p->allowFds() ? "allowed" : "forbidden");
#endif
+ const bool mutableCopy = !bitmap.isImmutable();
size_t size = bitmap.computeByteSize();
android::Parcel::WritableBlob blob;
- status = p->writeBlob(size, false, &blob);
+ status = p->writeBlob(size, mutableCopy, &blob);
if (status) {
doThrowRE(env, "Could not copy bitmap to parcel blob.");
return JNI_FALSE;
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 8477aa3ca26e..3e1f72da8731 100644..100755
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -6145,6 +6145,17 @@ public class AudioManager {
}
}
+ /** @hide
+ * TODO: make this a @SystemApi */
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ public void setMultiAudioFocusEnabled(boolean enabled) {
+ try {
+ getService().setMultiAudioFocusEnabled(enabled);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
//---------------------------------------------------------
// Inner classes
//--------------------
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index d2379757f226..ed566a50ec58 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -31,6 +31,7 @@ import android.system.OsConstants;
import android.util.Log;
import android.util.Pair;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ArrayUtils;
import libcore.io.IoUtils;
@@ -586,7 +587,9 @@ public class ExifInterface {
private static final int WEBP_CHUNK_SIZE_BYTE_LENGTH = 4;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
+ @GuardedBy("sFormatter")
private static SimpleDateFormat sFormatter;
+ @GuardedBy("sFormatterTz")
private static SimpleDateFormat sFormatterTz;
// See Exchangeable image file format for digital still cameras: Exif version 2.2.
@@ -2426,12 +2429,17 @@ public class ExifInterface {
try {
// The exif field is in local time. Parsing it as if it is UTC will yield time
// since 1/1/1970 local time
- Date datetime = sFormatter.parse(dateTimeString, pos);
+ Date datetime;
+ synchronized (sFormatter) {
+ datetime = sFormatter.parse(dateTimeString, pos);
+ }
if (offsetString != null) {
dateTimeString = dateTimeString + " " + offsetString;
ParsePosition position = new ParsePosition(0);
- datetime = sFormatterTz.parse(dateTimeString, position);
+ synchronized (sFormatterTz) {
+ datetime = sFormatterTz.parse(dateTimeString, position);
+ }
}
if (datetime == null) return -1;
@@ -2473,7 +2481,10 @@ public class ExifInterface {
ParsePosition pos = new ParsePosition(0);
try {
- Date datetime = sFormatter.parse(dateTimeString, pos);
+ final Date datetime;
+ synchronized (sFormatter) {
+ datetime = sFormatter.parse(dateTimeString, pos);
+ }
if (datetime == null) return -1;
return datetime.getTime();
} catch (IllegalArgumentException e) {
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index bb10e1fe2f2c..e3b67f86a367 100644..100755
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -301,4 +301,6 @@ interface IAudioService {
// WARNING: read warning at top of file, new methods that need to be used by native
// code via IAudioManager.h need to be added to the top section.
+
+ oneway void setMultiAudioFocusEnabled(in boolean enabled);
}
diff --git a/media/java/android/media/midi/MidiDeviceInfo.java b/media/java/android/media/midi/MidiDeviceInfo.java
index c2229850b4ce..dd3b6dbd6a39 100644
--- a/media/java/android/media/midi/MidiDeviceInfo.java
+++ b/media/java/android/media/midi/MidiDeviceInfo.java
@@ -19,7 +19,6 @@ package android.media.midi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
-
import android.util.Log;
/**
@@ -205,6 +204,20 @@ public final class MidiDeviceInfo implements Parcelable {
public MidiDeviceInfo(int type, int id, int numInputPorts, int numOutputPorts,
String[] inputPortNames, String[] outputPortNames, Bundle properties,
boolean isPrivate) {
+ // Check num ports for out-of-range values. Typical values will be
+ // between zero and three. More than 16 would be very unlikely
+ // because the port index field in the USB packet is only 4 bits.
+ // This check is mainly just to prevent OutOfMemoryErrors when
+ // fuzz testing.
+ final int maxPorts = 256; // arbitrary and very high
+ if (numInputPorts < 0 || numInputPorts > maxPorts) {
+ throw new IllegalArgumentException("numInputPorts out of range = "
+ + numInputPorts);
+ }
+ if (numOutputPorts < 0 || numOutputPorts > maxPorts) {
+ throw new IllegalArgumentException("numOutputPorts out of range = "
+ + numOutputPorts);
+ }
mType = type;
mId = id;
mInputPortCount = numInputPorts;
diff --git a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java
index 707ee4fed84d..1814fd0403d0 100644
--- a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java
+++ b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java
@@ -264,6 +264,11 @@ public class CarKeyguardViewController extends OverlayViewController implements
}
@Override
+ public void setKeyguardGoingAwayState(boolean isKeyguardGoingAway) {
+ // no-op
+ }
+
+ @Override
public void onStartedGoingToSleep() {
// no-op
}
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
index 2637c3c0b562..4f2719f8e0f8 100644
--- a/packages/PrintSpooler/res/values-hi/strings.xml
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -104,7 +104,7 @@
</string-array>
<string name="print_write_error_message" msgid="5787642615179572543">"फ़ाइल पर नहीं लिखा जा सका"</string>
<string name="print_error_default_message" msgid="8602678405502922346">"क्षमा करें, उससे बात नहीं बनी. फिर से प्रयास करें."</string>
- <string name="print_error_retry" msgid="1426421728784259538">"फिर से प्रयास करें"</string>
+ <string name="print_error_retry" msgid="1426421728784259538">"फिर से कोशिश करें"</string>
<string name="print_error_printer_unavailable" msgid="8985614415253203381">"यह प्रिंटर इस समय उपलब्ध नहीं है."</string>
<string name="print_cannot_load_page" msgid="6179560924492912009">"झलक नहीं दिखाई जा सकती"</string>
<string name="print_preparing_preview" msgid="3939930735671364712">"झलक तैयार हो रही है..."</string>
diff --git a/packages/PrintSpooler/res/values-ne/strings.xml b/packages/PrintSpooler/res/values-ne/strings.xml
index da49afbc3528..154364de4b53 100644
--- a/packages/PrintSpooler/res/values-ne/strings.xml
+++ b/packages/PrintSpooler/res/values-ne/strings.xml
@@ -33,7 +33,7 @@
<string name="pages_range_example" msgid="8558694453556945172">"उदाहरण १-५,८,११-१३"</string>
<string name="print_preview" msgid="8010217796057763343">"प्रिन्ट पूर्वावलोकन"</string>
<string name="install_for_print_preview" msgid="6366303997385509332">"पूर्वावलोकनको लागि PDF भ्यूअर स्थापना गर्नुहोस्"</string>
- <string name="printing_app_crashed" msgid="854477616686566398">"मुद्रण अनुप्रयोग क्र्यास भयो"</string>
+ <string name="printing_app_crashed" msgid="854477616686566398">"प्रिन्टिङ अनुप्रयोग क्र्यास भयो"</string>
<string name="generating_print_job" msgid="3119608742651698916">"प्रिन्ट कार्य निर्माण गरिँदै"</string>
<string name="save_as_pdf" msgid="5718454119847596853">"PDF को रूपमा सुरक्षित गर्नुहोस्"</string>
<string name="all_printers" msgid="5018829726861876202">"सबै प्रिन्टरहरू..."</string>
@@ -64,9 +64,9 @@
<string name="notification_channel_progress" msgid="872788690775721436">"चलिरहेका छपाइका कार्यहरू"</string>
<string name="notification_channel_failure" msgid="9042250774797916414">"कार्यहरूलाई छाप्न सकिएन"</string>
<string name="could_not_create_file" msgid="3425025039427448443">"फाइल सिर्जना गर्न सकिएन"</string>
- <string name="print_services_disabled_toast" msgid="9089060734685174685">"केही मुद्रण सम्बन्धी सेवाहरूलाई असक्षम गरिएको छ"</string>
+ <string name="print_services_disabled_toast" msgid="9089060734685174685">"केही प्रिन्टिङ सम्बन्धी सेवाहरूलाई असक्षम गरिएको छ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिन्टरहरू खोज्दै"</string>
- <string name="print_no_print_services" msgid="8561247706423327966">"कुनै पनि मुद्रण सेवाहरू सक्रिय छैनन्"</string>
+ <string name="print_no_print_services" msgid="8561247706423327966">"कुनै पनि प्रिन्टिङ सेवाहरू सक्रिय छैनन्"</string>
<string name="print_no_printers" msgid="4869403323900054866">"कुनै प्रिन्टरहरू भेटाइएन"</string>
<string name="cannot_add_printer" msgid="7840348733668023106">"प्रिन्टरहरू थप्न सक्दैन"</string>
<string name="select_to_add_printers" msgid="3800709038689830974">"प्रिन्टर थप्नका लागि चयन गर्नुहोस्"</string>
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml
index 6b1f2590f8e2..1d23c31f493d 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml
@@ -17,6 +17,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="enabled_by_admin" msgid="6630472777476410137">"ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ସକ୍ଷମ କରାଯାଇଛି"</string>
+ <string name="enabled_by_admin" msgid="6630472777476410137">"ଆଡମିନଙ୍କ ଦ୍ୱାରା ସକ୍ଷମ କରାଯାଇଛି"</string>
<string name="disabled_by_admin" msgid="4023569940620832713">"ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ଵାରା ଅକ୍ଷମ କରାଯାଇଛି"</string>
</resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
index 3024b842c2be..a62d76f732da 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
@@ -401,6 +401,11 @@ public class LocalMediaManager implements BluetoothCallback {
}
private List<MediaDevice> buildDisconnectedBluetoothDevice() {
+ if (mBluetoothAdapter == null) {
+ Log.w(TAG, "buildDisconnectedBluetoothDevice() BluetoothAdapter is null");
+ return new ArrayList<>();
+ }
+
final List<BluetoothDevice> bluetoothDevices =
mBluetoothAdapter.getMostRecentlyConnectedDevices();
final CachedBluetoothDeviceManager cachedDeviceManager =
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
index 7ddd64c15876..206c8590a952 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
@@ -691,4 +691,28 @@ public class LocalMediaManagerTest {
assertThat(mLocalMediaManager.mMediaDevices).hasSize(7);
verify(mCallback).onDeviceListUpdate(any());
}
+
+ @Test
+ public void onDeviceListAdded_bluetoothAdapterIsNull_noDisconnectedDeviceAdded() {
+ final List<MediaDevice> devices = new ArrayList<>();
+ final MediaDevice device1 = mock(MediaDevice.class);
+ final MediaDevice device2 = mock(MediaDevice.class);
+ final MediaDevice device3 = mock(MediaDevice.class);
+ mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
+ devices.add(device1);
+ devices.add(device2);
+ mLocalMediaManager.mMediaDevices.add(device3);
+ mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
+
+ mShadowBluetoothAdapter = null;
+
+ when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id");
+
+ assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
+ mLocalMediaManager.registerCallback(mCallback);
+ mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
+
+ assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
+ verify(mCallback).onDeviceListUpdate(any());
+ }
}
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 01a2b6952f2a..03f6df0d5d2d 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -101,7 +101,8 @@ public class SettingsBackupTest {
Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
Settings.System.SCREEN_BRIGHTNESS_FLOAT,
- Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT
+ Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT,
+ Settings.System.MULTI_AUDIO_FOCUS_ENABLED // form-factor/OEM specific
);
private static final Set<String> BACKUP_BLACKLISTED_GLOBAL_SETTINGS =
diff --git a/packages/SoundPicker/res/values-af/strings.xml b/packages/SoundPicker/res/values-af/strings.xml
new file mode 100644
index 000000000000..cf6414659f6e
--- /dev/null
+++ b/packages/SoundPicker/res/values-af/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Verstekluitoon"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Verstekwekkerklank"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Voeg luitoon by"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Voeg wekker by"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Voeg kennisgewing by"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Vee uit"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Kan nie gepasmaakte luitoon byvoeg nie"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Kan nie gepasmaakte luitoon uitvee nie"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-am/strings.xml b/packages/SoundPicker/res/values-am/strings.xml
new file mode 100644
index 000000000000..9026d3629180
--- /dev/null
+++ b/packages/SoundPicker/res/values-am/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ነባሪ የስልክ ላይ ጥሪ"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ነባሪ የማንቂያ ድምፅ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"የጥሪ ቅላጼ አክል"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"የማንቂያ ደውል አክል"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"ማሳወቂያን አክል"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ሰርዝ"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ብጁ የጥሪ ቅላጼን ማከል አልተቻለም"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ብጁ የጥሪ ቅላጼን መሰረዝ አልተቻለም"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ar/strings.xml b/packages/SoundPicker/res/values-ar/strings.xml
new file mode 100644
index 000000000000..0af7ff52a928
--- /dev/null
+++ b/packages/SoundPicker/res/values-ar/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"نغمة الرنين التلقائية"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"الصوت التلقائي للمنبّه"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"إضافة نغمة رنين"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"إضافة منبه"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"إضافة إشعار"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"حذف"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"يتعذر إضافة نغمة رنين مخصصة"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"يتعذر حذف نغمة الرنين المخصصة"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-as/strings.xml b/packages/SoundPicker/res/values-as/strings.xml
new file mode 100644
index 000000000000..6cbea0797696
--- /dev/null
+++ b/packages/SoundPicker/res/values-as/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"পূর্বনিধার্ৰিত ৰিংট\'ন"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"এলাৰ্মৰ ডিফ\'ল্ট ধ্বনি"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ৰিংট\'ন যোগ কৰক"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"এলাৰ্ম যোগ কৰক"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"জাননী যোগ কৰক"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"মচক"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"নিজৰ উপযোগিতা অনুযায়ী তৈয়াৰ কৰা ৰিংট\'ন যোগ কৰিব পৰা নগ\'ল"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"নিজৰ উপযোগিতা অনুযায়ী তৈয়াৰ কৰা ৰিংট\'ন মচিব পৰা নগ\'ল"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-az/strings.xml b/packages/SoundPicker/res/values-az/strings.xml
new file mode 100644
index 000000000000..16f739d32346
--- /dev/null
+++ b/packages/SoundPicker/res/values-az/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Defolt rinqton"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Defolt siqnal səsi"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Zəng səsi daxil edin"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Siqnal əlavə edin"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Bildiriş əlavə edin"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Silin"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Fərdi zəng səsi əlavə etmək mümkün deyil"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Fərdi zəng səsini silmək mümkün deyil"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-b+sr+Latn/strings.xml b/packages/SoundPicker/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000000..03fd58a4cd69
--- /dev/null
+++ b/packages/SoundPicker/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Podrazumevani zvuk zvona"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Podrazumevani zvuk alarma"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Dodaj melodiju zvona"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Dodajte alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Dodajte obaveštenje"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Izbriši"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Dodavanje prilagođene melodije zvona nije uspelo"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Brisanje prilagođene melodije zvona nije uspelo"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-be/strings.xml b/packages/SoundPicker/res/values-be/strings.xml
new file mode 100644
index 000000000000..55f6ab3e875e
--- /dev/null
+++ b/packages/SoundPicker/res/values-be/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Стандартны рынгтон"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Стандартны сігнал будзільніка"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Дадаць рынгтон"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Дадаць будзільнік"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Дадаць апавяшчэнне"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Выдаліць"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Немагчыма дадаць карыстальніцкі рынгтон"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Немагчыма выдаліць карыстальніцкі рынгтон"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-bg/strings.xml b/packages/SoundPicker/res/values-bg/strings.xml
new file mode 100644
index 000000000000..c31f35f9e4d4
--- /dev/null
+++ b/packages/SoundPicker/res/values-bg/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Стандартна мелодия"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Стандартен звук за будилника"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Добавяне на мелодия"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Добавяне на будилник"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Добавяне на известие"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Изтриване"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Персонализираната мелодия не може да се добави"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Персонализираната мелодия не може да се изтрие"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-bn/strings.xml b/packages/SoundPicker/res/values-bn/strings.xml
new file mode 100644
index 000000000000..ebbed152833d
--- /dev/null
+++ b/packages/SoundPicker/res/values-bn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ডিফল্ট রিংটোন"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ডিফল্ট অ্যালার্মের সাউন্ড"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"রিংটোন যোগ করুন"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"অ্যালার্ম যোগ করুন"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"বিজ্ঞপ্তি যোগ করুন"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"মুছুন"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"কাস্টম রিংটোন যোগ করা গেল না"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"কাস্টম রিংটোন মোছা গেল না"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-bs/strings.xml b/packages/SoundPicker/res/values-bs/strings.xml
new file mode 100644
index 000000000000..ad4fe573090d
--- /dev/null
+++ b/packages/SoundPicker/res/values-bs/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Zadana melodija zvona"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Zadani zvuk alarma"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Dodaj melodiju zvona"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Dodajte alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Dodajte obavještenje"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Izbriši"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nije moguće dodati prilagođenu melodiju zvona"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nije moguće izbrisati prilagođenu melodiju zvona"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ca/strings.xml b/packages/SoundPicker/res/values-ca/strings.xml
new file mode 100644
index 000000000000..5b324292c485
--- /dev/null
+++ b/packages/SoundPicker/res/values-ca/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"So predeterminat"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"So d\'alarma predeterminat"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Afegeix un so de trucada"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Afegeix una alarma"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Afegeix una notificació"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Suprimeix"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"No es pot afegir el so de trucada personalitzat"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"No es pot suprimir el so de trucada personalitzat"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-cs/strings.xml b/packages/SoundPicker/res/values-cs/strings.xml
new file mode 100644
index 000000000000..d60e217508c0
--- /dev/null
+++ b/packages/SoundPicker/res/values-cs/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Výchozí vyzváněcí tón"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Výchozí zvuk budíku"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Přidat vyzváněcí tón"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Přidat budík"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Přidat oznámení"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Smazat"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Vlastní vyzváněcí tón se nepodařilo přidat"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Vlastní vyzváněcí tón se nepodařilo smazat"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-da/strings.xml b/packages/SoundPicker/res/values-da/strings.xml
new file mode 100644
index 000000000000..c4ba8ee7b6dd
--- /dev/null
+++ b/packages/SoundPicker/res/values-da/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Standardringetone"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Standardlyd for alarmer"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Tilføj ringetone"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Tilføj alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Tilføj notifikation"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Slet"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Den tilpassede ringetone kunne ikke tilføjes"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Den tilpassede ringetone kunne ikke slettes"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-de/strings.xml b/packages/SoundPicker/res/values-de/strings.xml
new file mode 100644
index 000000000000..ca7e498934ff
--- /dev/null
+++ b/packages/SoundPicker/res/values-de/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Standard-Klingelton"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Standard-Weckton"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Klingelton hinzufügen"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Weckruf hinzufügen"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Benachrichtigung hinzufügen"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Löschen"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Benutzerdefinierter Klingelton konnte nicht hinzugefügt werden"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Benutzerdefinierter Klingelton konnte nicht gelöscht werden"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-el/strings.xml b/packages/SoundPicker/res/values-el/strings.xml
new file mode 100644
index 000000000000..b600e8801026
--- /dev/null
+++ b/packages/SoundPicker/res/values-el/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Προεπιλεγμένος ήχος κλήσης"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Προεπιλεγμένος ήχος ειδοποίησης"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Προσθήκη ήχου κλήσης"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Προσθήκη ξυπνητηριού"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Προσθήκη ειδοποίησης"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Διαγραφή"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Δεν είναι δυνατή η προσθήκη προσαρμοσμένου ήχου κλήσης"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Δεν είναι δυνατή η διαγραφή προσαρμοσμένου ήχου κλήσης"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-en-rAU/strings.xml b/packages/SoundPicker/res/values-en-rAU/strings.xml
new file mode 100644
index 000000000000..7e4a8b695f13
--- /dev/null
+++ b/packages/SoundPicker/res/values-en-rAU/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Default ringtone"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Default notification sound"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Default alarm sound"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Add ringtone"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Add alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Add notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Delete"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-en-rCA/strings.xml b/packages/SoundPicker/res/values-en-rCA/strings.xml
new file mode 100644
index 000000000000..7e4a8b695f13
--- /dev/null
+++ b/packages/SoundPicker/res/values-en-rCA/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Default ringtone"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Default notification sound"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Default alarm sound"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Add ringtone"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Add alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Add notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Delete"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-en-rGB/strings.xml b/packages/SoundPicker/res/values-en-rGB/strings.xml
new file mode 100644
index 000000000000..7e4a8b695f13
--- /dev/null
+++ b/packages/SoundPicker/res/values-en-rGB/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Default ringtone"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Default notification sound"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Default alarm sound"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Add ringtone"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Add alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Add notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Delete"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-en-rIN/strings.xml b/packages/SoundPicker/res/values-en-rIN/strings.xml
new file mode 100644
index 000000000000..7e4a8b695f13
--- /dev/null
+++ b/packages/SoundPicker/res/values-en-rIN/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Default ringtone"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Default notification sound"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Default alarm sound"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Add ringtone"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Add alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Add notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Delete"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-en-rXC/strings.xml b/packages/SoundPicker/res/values-en-rXC/strings.xml
new file mode 100644
index 000000000000..04b2662c8caa
--- /dev/null
+++ b/packages/SoundPicker/res/values-en-rXC/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎Default ringtone‎‏‎‎‏‎"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎Default notification sound‎‏‎‎‏‎"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎Default alarm sound‎‏‎‎‏‎"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎Add ringtone‎‏‎‎‏‎"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎Add alarm‎‏‎‎‏‎"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎Add notification‎‏‎‎‏‎"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎Delete‎‏‎‎‏‎"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎Unable to add custom ringtone‎‏‎‎‏‎"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎Unable to delete custom ringtone‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-es-rUS/strings.xml b/packages/SoundPicker/res/values-es-rUS/strings.xml
new file mode 100644
index 000000000000..e6cb5ff1c423
--- /dev/null
+++ b/packages/SoundPicker/res/values-es-rUS/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Tono predeterminado"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Sonido de alarma predeterminado"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Agregar tono"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Agregar alarma"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Agregar notificación"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Borrar"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"No se puede agregar el tono personalizado"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"No se puede borrar el tono personalizado"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-es/strings.xml b/packages/SoundPicker/res/values-es/strings.xml
new file mode 100644
index 000000000000..c7e8be2000d6
--- /dev/null
+++ b/packages/SoundPicker/res/values-es/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Tono por defecto"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Sonido de alarma predeterminado"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Añadir tono de llamada"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Añadir alarma"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Añadir notificación"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Eliminar"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"No se ha podido añadir un tono de llamada personalizado"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"No se ha podido eliminar un tono de llamada personalizado"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-et/strings.xml b/packages/SoundPicker/res/values-et/strings.xml
new file mode 100644
index 000000000000..1eb5ca275b94
--- /dev/null
+++ b/packages/SoundPicker/res/values-et/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Vaikehelin"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Märguande vaikeheli"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Äratuse vaikeheli"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Lisa helin"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Lisa äratus"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Lisa märguanne"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Kustuta"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Kohandatud helinat ei õnnestu lisada"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Kohandatud helinat ei õnnestu kustutada"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-eu/strings.xml b/packages/SoundPicker/res/values-eu/strings.xml
new file mode 100644
index 000000000000..33133b03943c
--- /dev/null
+++ b/packages/SoundPicker/res/values-eu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Tonu lehenetsia"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Alarmaren soinu lehenetsia"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Gehitu tonua"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Gehitu alarma"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Gehitu jakinarazpena"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Ezabatu"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Ezin da gehitu tonu pertsonalizatua"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Ezin da ezabatu tonu pertsonalizatua"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-fa/strings.xml b/packages/SoundPicker/res/values-fa/strings.xml
new file mode 100644
index 000000000000..908efaf675c2
--- /dev/null
+++ b/packages/SoundPicker/res/values-fa/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"آهنگ زنگ پیش‌فرض"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"صدای زنگ پیش‌فرض"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"افزودن آهنگ زنگ"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"افزودن زنگ"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"افزودن اعلان"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"حذف"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"افزودن آهنگ زنگ سفارشی ممکن نیست"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"حذف آهنگ زنگ سفارشی ممکن نیست"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-fi/strings.xml b/packages/SoundPicker/res/values-fi/strings.xml
new file mode 100644
index 000000000000..812e0ecb249e
--- /dev/null
+++ b/packages/SoundPicker/res/values-fi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Oletussoittoääni"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Herätyksen oletusääni"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Lisää soittoääni"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Lisää hälytys"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Lisää ilmoitus"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Poista"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Muokatun soittoäänen lisääminen epäonnistui."</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Muokatun soittoäänen poistaminen epäonnistui."</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-fr-rCA/strings.xml b/packages/SoundPicker/res/values-fr-rCA/strings.xml
new file mode 100644
index 000000000000..63182df7992f
--- /dev/null
+++ b/packages/SoundPicker/res/values-fr-rCA/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Sonnerie par défaut"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Son de notification par défaut"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Son de l\'alarme par défaut"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Ajouter une sonnerie"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Ajouter une alarme"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Ajouter une notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Supprimer"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Impossible d\'ajouter une sonnerie personnalisée"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Impossible de supprimer la sonnerie personnalisée"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-fr/strings.xml b/packages/SoundPicker/res/values-fr/strings.xml
new file mode 100644
index 000000000000..ece6a137dac9
--- /dev/null
+++ b/packages/SoundPicker/res/values-fr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Sonnerie par défaut"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Son de l\'alarme par défaut"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Ajouter une sonnerie"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Ajouter une alarme"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Ajouter une notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Supprimer"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Impossible d\'ajouter une sonnerie personnalisée"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Impossible de supprimer la sonnerie personnalisée"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-gl/strings.xml b/packages/SoundPicker/res/values-gl/strings.xml
new file mode 100644
index 000000000000..2d75f224106f
--- /dev/null
+++ b/packages/SoundPicker/res/values-gl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Ton de chamada predeterminado"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Son de alarma predeterminado"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Engadir ton de chamada"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Engadir alarma"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Engadir notificación"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Eliminar"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Non se pode engadir un ton de chamada personalizado"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Non se pode eliminar un ton de chamada personalizado"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-gu/strings.xml b/packages/SoundPicker/res/values-gu/strings.xml
new file mode 100644
index 000000000000..0505b46351f2
--- /dev/null
+++ b/packages/SoundPicker/res/values-gu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ડિફોલ્ટ રિંગટોન"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ડિફૉલ્ટ એલાર્મ સાઉન્ડ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"રિંગટોન ઉમેરો"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"અલાર્મ ઉમેરો"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"નોટિફિકેશન ઉમેરો"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ડિલીટ કરો"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"કસ્ટમ રિંગટોન ઉમેરવામાં અસમર્થ"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"કસ્ટમ રિંગટોન કાઢી નાખવામાં અસમર્થ"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-hi/strings.xml b/packages/SoundPicker/res/values-hi/strings.xml
new file mode 100644
index 000000000000..1d18da21d778
--- /dev/null
+++ b/packages/SoundPicker/res/values-hi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"डिफ़ॉल्‍ट रिंगटोन"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"डिफ़ॉल्ट अलार्म आवाज़"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"रिंगटोन जोड़ेंं"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"अलार्म जोड़ें"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"सूचना जोड़ें"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"मिटाएं"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"आपके मुताबिक रिंगटोन नहीं जोड़ी जा सकी"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"आपके मुताबिक रिंगटोन नहीं हटाई जा सकी"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-hr/strings.xml b/packages/SoundPicker/res/values-hr/strings.xml
new file mode 100644
index 000000000000..1a398175a85e
--- /dev/null
+++ b/packages/SoundPicker/res/values-hr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Zadana melodija zvona"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Zadani zvuk alarma"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Dodaj melodiju zvona"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Dodaj alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Dodaj obavijest"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Izbriši"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Dodavanje prilagođene melodije zvona nije moguće"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Brisanje prilagođene melodije zvona nije moguće"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-hu/strings.xml b/packages/SoundPicker/res/values-hu/strings.xml
new file mode 100644
index 000000000000..6b83509d5058
--- /dev/null
+++ b/packages/SoundPicker/res/values-hu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Alapértelmezett csengőhang"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Alapértelmezett ébresztési hang"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Csengőhang hozzáadása"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Ébresztés hozzáadása"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Értesítés felvétele"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Törlés"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nem sikerült hozzáadni az egyéni csengőhangot"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nem sikerült törölni az egyéni csengőhangot"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-hy/strings.xml b/packages/SoundPicker/res/values-hy/strings.xml
new file mode 100644
index 000000000000..f422ff861d84
--- /dev/null
+++ b/packages/SoundPicker/res/values-hy/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Կանխադրված զանգերանգ"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Ծանուցման կանխադրված ձայնը"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Զարթուցիչի կանխադրված ձայնը"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Ավելացնել զանգերանգ"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Ավելացնել զարթուցիչ"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Ավելացնել ծանուցում"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Ջնջել"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Հնարավոր չէ հատուկ զանգերանգ ավելացնել"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Հնարավոր չէ ջնջել հատուկ զանգերանգը"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-in/strings.xml b/packages/SoundPicker/res/values-in/strings.xml
new file mode 100644
index 000000000000..fe2d4a2c35c0
--- /dev/null
+++ b/packages/SoundPicker/res/values-in/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Nada dering default"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Suara notifikasi default"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Suara alarm default"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Tambahkan nada dering"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Tambahkan alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Tambahkan notifikasi"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Hapus"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Tidak dapat menambahkan nada dering khusus"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Tidak dapat menghapus nada dering khusus"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-is/strings.xml b/packages/SoundPicker/res/values-is/strings.xml
new file mode 100644
index 000000000000..68994aa2b2d9
--- /dev/null
+++ b/packages/SoundPicker/res/values-is/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Sjálfgefinn hringitónn"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Sjálfgefið hljóð í vekjara"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Bæta hringitóni við"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Bæta vekjara við"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Bæta tilkynningu við"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Eyða"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Get ekki bætt sérsniðnum hringitóni við"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Get ekki eytt sérsniðnum hringitóni"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-it/strings.xml b/packages/SoundPicker/res/values-it/strings.xml
new file mode 100644
index 000000000000..e9302c1b5b2e
--- /dev/null
+++ b/packages/SoundPicker/res/values-it/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Suoneria predefinita"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Suono sveglia predefinito"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Aggiungi suoneria"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Aggiungi sveglia"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Aggiungi notifica"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Elimina"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Impossibile aggiungere suoneria personalizzata"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Impossibile eliminare suoneria personalizzata"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-iw/strings.xml b/packages/SoundPicker/res/values-iw/strings.xml
new file mode 100644
index 000000000000..2bed8e05aac5
--- /dev/null
+++ b/packages/SoundPicker/res/values-iw/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"רינגטון ברירת מחדל"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"צליל לשעון מעורר"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"רינגטון חדש"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"הוספת התראה"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"הוספת התראה"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"מחיקה"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"לא ניתן להוסיף רינגטון מותאם אישית"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"לא ניתן למחוק רינגטון מותאם אישית"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ja/strings.xml b/packages/SoundPicker/res/values-ja/strings.xml
new file mode 100644
index 000000000000..d3ebcccc3eb5
--- /dev/null
+++ b/packages/SoundPicker/res/values-ja/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"プリセット着信音"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"デフォルトの警告音"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"着信音を追加"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"アラームの追加"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"通知の追加"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"削除"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"カスタム着信音を追加できません"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"カスタム着信音を削除できません"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ka/strings.xml b/packages/SoundPicker/res/values-ka/strings.xml
new file mode 100644
index 000000000000..c097d91a90bd
--- /dev/null
+++ b/packages/SoundPicker/res/values-ka/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ნაგულისხმევი ზარი"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"მაღვიძარას ნაგულისხმევი ხმა"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ზარის დამატება"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"მაღვიძარას დამატება"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"შეტყობინების დამატება"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"წაშლა"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"მორგებული ზარის დამატება შეუძლებელია"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"მორგებული ზარის წაშლა შეუძლებელია"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-kk/strings.xml b/packages/SoundPicker/res/values-kk/strings.xml
new file mode 100644
index 000000000000..a2ddf5ed05ce
--- /dev/null
+++ b/packages/SoundPicker/res/values-kk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Әдепкі рингтон"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Әдепкі дабыл дыбысы"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Рингтон енгізу"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Оятқыш енгізу"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Хабарландыру енгізу"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Жою"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Арнаулы рингтонды енгізу мүмкін емес"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Арнаулы рингтонды жою мүмкін емес"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-km/strings.xml b/packages/SoundPicker/res/values-km/strings.xml
new file mode 100644
index 000000000000..dcc202a8e22b
--- /dev/null
+++ b/packages/SoundPicker/res/values-km/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"សំឡេង​រោទ៍​លំនាំដើម"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"សំឡេងម៉ោងរោទិ៍លំនាំដើម"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"បន្ថែម​សំឡេង​រោទ៍"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"បញ្ចូល​ម៉ោងរោទ៍"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"បញ្ចូល​ការជូន​ដំណឹង"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"លុប"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"មិន​អាច​បន្ថែម​សំឡេង​រោទ៍​ផ្ទាល់ខ្លួន​បាន"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"មិន​អាច​លុប​សំឡេង​រោទ៍​ផ្ទាល់ខ្លួន​បាន​ទេ"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-kn/strings.xml b/packages/SoundPicker/res/values-kn/strings.xml
new file mode 100644
index 000000000000..705dd0d0fed3
--- /dev/null
+++ b/packages/SoundPicker/res/values-kn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ಡಿಫಾಲ್ಟ್ ರಿಂಗ್‌ಟೋನ್"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ಡೀಫಾಲ್ಟ್ ಅಲಾರಾಂ ಧ್ವನಿ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ರಿಂಗ್‌ಟೋನ್ ಸೇರಿಸಿ"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"ಅಲಾರಾಂ ಸೇರಿಸಿ"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"ಅಧಿಸೂಚನೆಯನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ಅಳಿಸಿ"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್ ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ko/strings.xml b/packages/SoundPicker/res/values-ko/strings.xml
new file mode 100644
index 000000000000..6d59034f11da
--- /dev/null
+++ b/packages/SoundPicker/res/values-ko/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"기본 벨소리"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"기본 알람 소리"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"벨소리 추가"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"알람 추가"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"알림 추가"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"삭제"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"맞춤 벨소리를 추가할 수 없습니다."</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"맞춤 벨소리를 삭제할 수 없습니다."</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ky/strings.xml b/packages/SoundPicker/res/values-ky/strings.xml
new file mode 100644
index 000000000000..bd6c17d00130
--- /dev/null
+++ b/packages/SoundPicker/res/values-ky/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Демейки шыңгыр"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Ойготкучтун демейки үнү"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Шыңгыр кошуу"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Ойготкуч кошуу"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Билдирме кошуу"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Жок кылуу"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Жеке рингтон кошулбай жатат"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Жеке рингтон жок кылынбай жатат"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-lo/strings.xml b/packages/SoundPicker/res/values-lo/strings.xml
new file mode 100644
index 000000000000..f225a6ce1032
--- /dev/null
+++ b/packages/SoundPicker/res/values-lo/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ຣິງໂທນເລີ່ມຕົ້ນ"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ສຽງໂມງປຸກຕາມຄ່າເລີ່ມຕົ້ນ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ເພີ່ມຣິງໂທນ"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"ເພີ່ມໂມງປຸກ"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"ເພີ່ມການແຈ້ງເຕືອນ"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"​ລຶບ"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add custom ringtone"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete custom ringtone"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-lt/strings.xml b/packages/SoundPicker/res/values-lt/strings.xml
new file mode 100644
index 000000000000..cc1b0e67fd48
--- /dev/null
+++ b/packages/SoundPicker/res/values-lt/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Numatytasis skambėjimo tonas"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Numatytasis signalo garsas"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Pridėti skambėjimo toną"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Pridėti signalą"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Pridėti pranešimą"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Ištrinti"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nepavyksta pridėti tinkinto skambėjimo tono"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nepavyksta ištrinti tinkinto skambėjimo tono"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-lv/strings.xml b/packages/SoundPicker/res/values-lv/strings.xml
new file mode 100644
index 000000000000..421ad0b5c4f3
--- /dev/null
+++ b/packages/SoundPicker/res/values-lv/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Noklusējuma zvana signāls"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Signāla noklusējuma skaņa"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Pievienot zvana signālu"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Pievienot signālu"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Pievienot paziņojumu"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Dzēst"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nevar pievienot pielāgotu zvana signālu"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nevar izdzēst pielāgotu zvana signālu"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-mk/strings.xml b/packages/SoundPicker/res/values-mk/strings.xml
new file mode 100644
index 000000000000..b5008ce036dc
--- /dev/null
+++ b/packages/SoundPicker/res/values-mk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Стандардна мелодија"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Стандарден звук за аларм"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Додај мелодија"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Додајте аларм"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Додајте известување"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Избриши"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Не може да се додаде приспособена мелодија"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Не може да се избрише приспособена мелодија"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ml/strings.xml b/packages/SoundPicker/res/values-ml/strings.xml
new file mode 100644
index 000000000000..f2d51f53e51e
--- /dev/null
+++ b/packages/SoundPicker/res/values-ml/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ഡിഫോൾട്ട് റിംഗ്‌ടോൺ"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ഡിഫോൾട്ട് അലാറം ശബ്ദം"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"റിംഗ്‌ടോൺ ചേർക്കുക"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"അലാറം ചേർക്കുക"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"അറിയിപ്പ് ചേർക്കുക"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ഇല്ലാതാക്കുക"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ഇഷ്ടാനുസൃത റിംഗ്‌ടോൺ ചേർക്കാനാവില്ല"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ഇഷ്ടാനുസൃത റിംഗ്‌ടോൺ ഇല്ലാതാക്കാനാവില്ല"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-mn/strings.xml b/packages/SoundPicker/res/values-mn/strings.xml
new file mode 100644
index 000000000000..e996d19c1a00
--- /dev/null
+++ b/packages/SoundPicker/res/values-mn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Үндсэн хонхны ая"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Сэрүүлгийн өгөгдмөл дуу"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Хонхны ая нэмэх"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Сэрүүлэг нэмэх"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Мэдэгдэл нэмэх"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Устгах"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Захиалгат хонхны ая нэмэх боломжгүй"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Захиалгат хонхны ая устгах боломжгүй"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-mr/strings.xml b/packages/SoundPicker/res/values-mr/strings.xml
new file mode 100644
index 000000000000..19ab294a792e
--- /dev/null
+++ b/packages/SoundPicker/res/values-mr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"डीफॉल्ट रिंगटोन"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"डीफॉल्ट अलार्म ध्वनी"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"रिंगटोन जोडा"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"अलार्म जोडा"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"सूचना जोडा"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"हटवा"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"कस्टम रिंगटोन जोडण्यात अक्षम"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"कस्टम रिंगटोन हटविण्यात अक्षम"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ms/strings.xml b/packages/SoundPicker/res/values-ms/strings.xml
new file mode 100644
index 000000000000..bda0bdeab9f2
--- /dev/null
+++ b/packages/SoundPicker/res/values-ms/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Nada dering lalai"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Bunyi penggera lalai"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Tambah nada dering"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Tambah penggera"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Tambah pemberitahuan"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Padam"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Tidak dapat menambah nada dering tersuai"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Tidak dapat memadamkan nada dering tersuai"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-my/strings.xml b/packages/SoundPicker/res/values-my/strings.xml
new file mode 100644
index 000000000000..36225d72d74a
--- /dev/null
+++ b/packages/SoundPicker/res/values-my/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"မူရင်းမြည်သံ"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"မူရင်းနှိုးစက်သံ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ဖုန်းမြည်သံကို ထည့်ရန်"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"နှိုးစက်ထည့်ရန်"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"အကြောင်းကြားချက် ထည့်ရန်"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ဖျက်ရန်"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"စိတ်ကြိုက်ဖုန်းမြည်သံကို ထည့်သွင်း၍မရပါ"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"စိတ်ကြိုက်ဖုန်းမြည်သံကို ဖျက်၍မရပါ"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-nb/strings.xml b/packages/SoundPicker/res/values-nb/strings.xml
new file mode 100644
index 000000000000..726e716d73fe
--- /dev/null
+++ b/packages/SoundPicker/res/values-nb/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Standard ringetone"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Standard alarmlyd"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Legg til ringelyd"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Legg til en alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Legg til et varsel"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Slett"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Kan ikke legge til egendefinert ringelyd"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Kan ikke slette egendefinert ringelyd"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ne/strings.xml b/packages/SoundPicker/res/values-ne/strings.xml
new file mode 100644
index 000000000000..d5f0bf6076c3
--- /dev/null
+++ b/packages/SoundPicker/res/values-ne/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"पूर्वनिर्धारित रिङटोन"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"अलार्मका लागि पूर्वनिर्धारित ध्वनि"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"रिङटोन थप्नुहोस्"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"अलार्म थप्नुहोस्"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"सूचना थप्नुहोस्"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"मेट्नुहोस्"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"आफू अनुकूल रिङटोन थप्न सकिएन"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"आफू अनुकूल रिङटोनलाई मेट्न सकिएन"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-nl/strings.xml b/packages/SoundPicker/res/values-nl/strings.xml
new file mode 100644
index 000000000000..998f908f2fad
--- /dev/null
+++ b/packages/SoundPicker/res/values-nl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Standaardbeltoon"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Standaard alarmgeluid"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Ringtone toevoegen"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Wekker toevoegen"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Melding toevoegen"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Verwijderen"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Toevoegen van aangepaste ringtone is mislukt"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Verwijderen van aangepaste ringtone is mislukt"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-or/strings.xml b/packages/SoundPicker/res/values-or/strings.xml
new file mode 100644
index 000000000000..d06f70bd26be
--- /dev/null
+++ b/packages/SoundPicker/res/values-or/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ଡିଫଲ୍ଟ ରିଙ୍ଗଟୋନ୍‌"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ଡିଫଲ୍ଟ ଆଲାର୍ମ ଶବ୍ଦ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ରିଙ୍ଗଟୋନ୍‍ ଯୋଡ଼ନ୍ତୁ"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"ଆଲାର୍ମ ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"ବିଜ୍ଞପ୍ତି ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ଡିଲିଟ୍‌ କରନ୍ତୁ"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"କଷ୍ଟମ୍‍ ରିଙ୍ଗଟୋନ୍‍ ଯୋଡ଼ିପାରିବ ନାହିଁ"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"କଷ୍ଟମ୍‍ ରିଙ୍ଗଟୋନ୍‍ ଡିଲିଟ୍‍ କରିପାରିବ ନାହିଁ"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-pa/strings.xml b/packages/SoundPicker/res/values-pa/strings.xml
new file mode 100644
index 000000000000..bdd66ed7019d
--- /dev/null
+++ b/packages/SoundPicker/res/values-pa/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰਿੰਗਟੋਨ"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਅਲਾਰਮ ਧੁਨੀ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ਰਿੰਗਟੋਨ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"ਅਲਾਰਮ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"ਸੂਚਨਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ਮਿਟਾਓ"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ਵਿਉਂਤੀ ਰਿੰਗਟੋਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੇ ਅਯੋਗ"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ਵਿਉਂਤੀ ਰਿੰਗਟੋਨ ਨੂੰ ਮਿਟਾਉਣ ਦੇ ਅਯੋਗ"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-pl/strings.xml b/packages/SoundPicker/res/values-pl/strings.xml
new file mode 100644
index 000000000000..0a5b0e61d661
--- /dev/null
+++ b/packages/SoundPicker/res/values-pl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Dzwonek domyślny"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Domyślny dźwięk alarmu"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Dodaj dzwonek"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Dodaj alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Dodaj powiadomienie"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Usuń"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nie można dodać dzwonka niestandardowego"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nie można usunąć dzwonka niestandardowego"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-pt-rBR/strings.xml b/packages/SoundPicker/res/values-pt-rBR/strings.xml
new file mode 100644
index 000000000000..ab7184250238
--- /dev/null
+++ b/packages/SoundPicker/res/values-pt-rBR/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Toque padrão"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Som de alarme padrão"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Adicionar toque"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Adicionar alarme"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Adicionar notificação"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Excluir"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Não foi possível adicionar o toque personalizado"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Não foi possível excluir o toque personalizado"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-pt-rPT/strings.xml b/packages/SoundPicker/res/values-pt-rPT/strings.xml
new file mode 100644
index 000000000000..59d35a7341a1
--- /dev/null
+++ b/packages/SoundPicker/res/values-pt-rPT/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Toque predefinido"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Som de alarme predefinido"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Adicionar toque"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Adicionar alarme"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Adicionar notificação"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Eliminar"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Não foi possível adicionar o toque personalizado"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Não foi possível eliminar o toque personalizado"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-pt/strings.xml b/packages/SoundPicker/res/values-pt/strings.xml
new file mode 100644
index 000000000000..ab7184250238
--- /dev/null
+++ b/packages/SoundPicker/res/values-pt/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Toque padrão"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Som de alarme padrão"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Adicionar toque"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Adicionar alarme"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Adicionar notificação"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Excluir"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Não foi possível adicionar o toque personalizado"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Não foi possível excluir o toque personalizado"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ro/strings.xml b/packages/SoundPicker/res/values-ro/strings.xml
new file mode 100644
index 000000000000..e072880a0dcf
--- /dev/null
+++ b/packages/SoundPicker/res/values-ro/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Ton de apel prestabilit"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Sunet de alarmă prestabilit"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Adăugați un ton de sonerie"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Adăugați o alarmă"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Adăugați o notificare"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Ștergeți"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nu se poate adăuga tonul de sonerie personalizat"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nu se poate șterge tonul de sonerie personalizat"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ru/strings.xml b/packages/SoundPicker/res/values-ru/strings.xml
new file mode 100644
index 000000000000..92668aea6259
--- /dev/null
+++ b/packages/SoundPicker/res/values-ru/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Мелодия по умолчанию"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Звук будильника по умолчанию"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Добавить рингтон"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Добавить будильник"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Добавить уведомление"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Удалить"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Не удалось добавить рингтон"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Не удалось удалить рингтон"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-si/strings.xml b/packages/SoundPicker/res/values-si/strings.xml
new file mode 100644
index 000000000000..b375091b2870
--- /dev/null
+++ b/packages/SoundPicker/res/values-si/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"සුපුරුදු රින්ටෝනය සකසන්න"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"පෙරනිමි එලාම හඬ"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"නාද රිද්මය එක් කරන්න"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"ඇඟවීමක් එක් කරන්න"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"දැනුම්දීම එක් කරන්න"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"මකන්න"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"අභිරුචි නාද රිද්මය එක් කළ නොහැකිය"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"අභිරුචි නාද රිද්මය මැකිය නොහැකිය"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-sk/strings.xml b/packages/SoundPicker/res/values-sk/strings.xml
new file mode 100644
index 000000000000..6838af0d2e3f
--- /dev/null
+++ b/packages/SoundPicker/res/values-sk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Predvolený tón zvonenia"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Predvolený zvuk budíkov"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Pridať tón zvonenia"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Pridať budík"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Pridať upozornenie"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Odstrániť"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nepodarilo sa pridať vlastný tón zvonenia"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nepodarilo sa odstrániť vlastný tón zvonenia"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-sl/strings.xml b/packages/SoundPicker/res/values-sl/strings.xml
new file mode 100644
index 000000000000..a050787d72cb
--- /dev/null
+++ b/packages/SoundPicker/res/values-sl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Privzeta melodija zvonjenja"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Privzeti zvok alarma"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Dodaj ton zvonjenja"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Dodaj alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Dodaj obvestilo"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Izbriši"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Tona zvonjenja po meri ni mogoče dodati"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Tona zvonjenja po meri ni mogoče izbrisati"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-sq/strings.xml b/packages/SoundPicker/res/values-sq/strings.xml
new file mode 100644
index 000000000000..7acdfa7efdd0
--- /dev/null
+++ b/packages/SoundPicker/res/values-sq/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Zile e paracaktuar."</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Tingulli i parazgjedhur i njoftimit"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Tingulli i parazgjedhur i alarmit"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Shto zile"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Shto një alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Shto një njoftim"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Fshi"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nuk mund të shtojë ton zileje të personalizuar"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nuk mund të fshijë ton zileje të personalizuar"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-sr/strings.xml b/packages/SoundPicker/res/values-sr/strings.xml
new file mode 100644
index 000000000000..01db396ff628
--- /dev/null
+++ b/packages/SoundPicker/res/values-sr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Подразумевани звук звона"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Подразумевани звук аларма"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Додај мелодију звона"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Додајте аларм"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Додајте обавештење"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Избриши"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Додавање прилагођене мелодије звона није успело"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Брисање прилагођене мелодије звона није успело"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-sv/strings.xml b/packages/SoundPicker/res/values-sv/strings.xml
new file mode 100644
index 000000000000..f6acdd48617f
--- /dev/null
+++ b/packages/SoundPicker/res/values-sv/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Standardringsignal"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Standardljud för alarm"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Lägg till ringsignal"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Lägg till alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Lägg till avisering"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Radera"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Det gick inte att lägga till en egen ringsignal"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Det gick inte att radera den egna ringsignalen"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-sw/strings.xml b/packages/SoundPicker/res/values-sw/strings.xml
new file mode 100644
index 000000000000..beb8780e9d15
--- /dev/null
+++ b/packages/SoundPicker/res/values-sw/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Mlio chaguomsingi"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Sauti chaguomsingi ya kengele"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Ongeza mlio wa simu"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Ongeza kengele"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Ongeza arifa"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Futa"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Imeshindwa kuongeza mlio maalum wa simu"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Imeshindwa kufuta mlio maalum wa simu"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ta/strings.xml b/packages/SoundPicker/res/values-ta/strings.xml
new file mode 100644
index 000000000000..3c9cc5449f3e
--- /dev/null
+++ b/packages/SoundPicker/res/values-ta/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"இயல்புநிலை ரிங்டோன்"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"இயல்பு அலார ஒலி"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"ரிங்டோனைச் சேர்"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"அலாரத்தைச் சேர்"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"அறிவிப்பைச் சேர்"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"நீக்கு"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"பிரத்தியேக ரிங்டோனைச் சேர்க்க முடியவில்லை"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"பிரத்தியேக ரிங்டோனை நீக்க முடியவில்லை"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-te/strings.xml b/packages/SoundPicker/res/values-te/strings.xml
new file mode 100644
index 000000000000..e0baa593e61a
--- /dev/null
+++ b/packages/SoundPicker/res/values-te/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"డిఫాల్ట్ రింగ్‌టోన్"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"డిఫాల్ట్ అలారం ధ్వని"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"రింగ్‌టోన్‌ను జోడించు"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"అలారాన్ని జోడించు"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"నోటిఫికేషన్‌‌ని జోడించు"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"తొలగించు"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"అనుకూల రింగ్‌టోన్‌ను జోడించలేకపోయింది"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"అనుకూల రింగ్‌టోన్‌ను తొలగించలేకపోయింది"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-th/strings.xml b/packages/SoundPicker/res/values-th/strings.xml
new file mode 100644
index 000000000000..098e4dd23e6d
--- /dev/null
+++ b/packages/SoundPicker/res/values-th/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"เสียงเรียกเข้าเริ่มต้น"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"เสียงปลุกเริ่มต้น"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"เพิ่มเสียงเรียกเข้า"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"เพิ่มการปลุก"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"เพิ่มการแจ้งเตือน"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"ลบ"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ไม่สามารถเพิ่มเสียงเรียกเข้าที่กำหนดเอง"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ไม่สามารถลบเสียงเรียกเข้าที่กำหนดเอง"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-tl/strings.xml b/packages/SoundPicker/res/values-tl/strings.xml
new file mode 100644
index 000000000000..80b93de9a788
--- /dev/null
+++ b/packages/SoundPicker/res/values-tl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Default na ringtone"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Default na tunog ng alarm"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Magdagdag ng ringtone"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Magdagdag ng alarm"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Magdagdag ng notification"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"I-delete"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Hindi maidagdag ang custom na ringtone"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Hindi ma-delete ang custom na ringtone"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-tr/strings.xml b/packages/SoundPicker/res/values-tr/strings.xml
new file mode 100644
index 000000000000..3c634d8c356f
--- /dev/null
+++ b/packages/SoundPicker/res/values-tr/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Varsayılan zil sesi"</string>
+ <string name="notification_sound_default" msgid="8133121186242636840">"Varsayılan bildirim sesi"</string>
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Varsayılan alarm sesi"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Zil sesi ekle"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Alarm ekle"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Bildirim ekle"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Sil"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Özel zil sesi eklenemiyor"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Özel zil sesi silinemiyor"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-uk/strings.xml b/packages/SoundPicker/res/values-uk/strings.xml
new file mode 100644
index 000000000000..4ec70c09bc93
--- /dev/null
+++ b/packages/SoundPicker/res/values-uk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Мелодія за умовчанням"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Сигнал будильника за умовчанням"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Додати сигнал"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Додати сигнал"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Додати сповіщення"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Видалити"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Не вдалося додати користувацький сигнал дзвінка"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Не вдалося видалити користувацький сигнал дзвінка"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-ur/strings.xml b/packages/SoundPicker/res/values-ur/strings.xml
new file mode 100644
index 000000000000..0c2dc7af4010
--- /dev/null
+++ b/packages/SoundPicker/res/values-ur/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"ڈیفالٹ رنگ ٹون"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"الارم کی ڈیفالٹ آواز"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"رنگ ٹون شامل کریں"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"الارم شامل کریں"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"اطلاع شامل کریں"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"حذف کریں"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"حسب ضرورت رنگ ٹون شامل کرنے سے قاصر ہے"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"حسب ضرورت رنگ ٹون حذف کرنے سے قاصر ہے"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-uz/strings.xml b/packages/SoundPicker/res/values-uz/strings.xml
new file mode 100644
index 000000000000..3c7693bd02a0
--- /dev/null
+++ b/packages/SoundPicker/res/values-uz/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Standart rington"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Standart signal tovushi"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Rington qo‘shish"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Signal qo‘shish"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Bildirishnoma qo‘shish"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"O‘chirish"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Maxsus rington qo‘shib bo‘lmadi"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Maxsus ringtonni o‘chirib bo‘lmadi"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-vi/strings.xml b/packages/SoundPicker/res/values-vi/strings.xml
new file mode 100644
index 000000000000..e27b6928ff76
--- /dev/null
+++ b/packages/SoundPicker/res/values-vi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Nhạc chuông mặc định"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Âm thanh báo thức mặc định"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Thêm nhạc chuông"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Thêm báo thức"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Thêm thông báo"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Xóa"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Không thể thêm nhạc chuông tùy chỉnh"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Không thể xóa nhạc chuông tùy chỉnh"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-zh-rCN/strings.xml b/packages/SoundPicker/res/values-zh-rCN/strings.xml
new file mode 100644
index 000000000000..3199803fe7a8
--- /dev/null
+++ b/packages/SoundPicker/res/values-zh-rCN/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"默认铃声"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"默认闹钟铃声"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"添加铃声"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"添加闹钟"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"添加通知"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"删除"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"无法添加自定义铃声"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"无法删除自定义铃声"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-zh-rHK/strings.xml b/packages/SoundPicker/res/values-zh-rHK/strings.xml
new file mode 100644
index 000000000000..6c3b2f83b738
--- /dev/null
+++ b/packages/SoundPicker/res/values-zh-rHK/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"預設鈴聲"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"預設鬧鐘音效"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"加入鈴聲"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"新增鬧鐘"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"新增通知"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"刪除"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"無法加入自訂鈴聲"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"無法刪除自訂鈴聲"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-zh-rTW/strings.xml b/packages/SoundPicker/res/values-zh-rTW/strings.xml
new file mode 100644
index 000000000000..379c1d5d2e88
--- /dev/null
+++ b/packages/SoundPicker/res/values-zh-rTW/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"預設鈴聲"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"預設鬧鐘音效"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"新增鈴聲"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"新增鬧鐘"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"新增通知"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"刪除"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"無法新增自訂鈴聲"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"無法刪除自訂鈴聲"</string>
+</resources>
diff --git a/packages/SoundPicker/res/values-zu/strings.xml b/packages/SoundPicker/res/values-zu/strings.xml
new file mode 100644
index 000000000000..6c11dc591f3c
--- /dev/null
+++ b/packages/SoundPicker/res/values-zu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="ringtone_default" msgid="798836092118824500">"Iringithoni emisiwe"</string>
+ <!-- no translation found for notification_sound_default (8133121186242636840) -->
+ <skip />
+ <string name="alarm_sound_default" msgid="4787646764557462649">"Umsindo we-alamu ozenzakalelayo"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Engeza ithoni yokukhala"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Engeza i-alamu"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Engeza isaziso"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Susa"</string>
+ <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Ayikwazi ukwengeza ithoni yokukhala yangokwezifiso"</string>
+ <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Ayikwazi ukususa ithoni yokukhala yangokwezifiso"</string>
+</resources>
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 0eadcc741747..f63365bcd369 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -45,6 +45,7 @@ android_library {
"WindowManager-Shell",
"SystemUIPluginLib",
"SystemUISharedLib",
+ "SystemUI-statsd",
"SettingsLib",
"androidx.viewpager2_viewpager2",
"androidx.legacy_legacy-support-v4",
@@ -81,6 +82,8 @@ filegroup {
"tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java",
"tests/src/com/android/systemui/statusbar/RankingBuilder.java",
"tests/src/com/android/systemui/statusbar/SbnBuilder.java",
+ "tests/src/com/android/systemui/util/concurrency/FakeExecutor.java",
+ "tests/src/com/android/systemui/util/time/FakeSystemClock.java",
],
path: "tests/src",
}
@@ -106,6 +109,7 @@ android_library {
static_libs: [
"SystemUIPluginLib",
"SystemUISharedLib",
+ "SystemUI-statsd",
"SettingsLib",
"androidx.viewpager2_viewpager2",
"androidx.legacy_legacy-support-v4",
diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml
index 37b2a60ba2de..a1e6d62234e9 100644
--- a/packages/SystemUI/res-keyguard/values-ne/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml
@@ -60,7 +60,7 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"कुनै त्रुटिका कारण यो eSIM लाई असक्षम पार्न सकिएन।"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"प्रविष्टि गर्नुहोस्"</string>
<string name="kg_forgot_pattern_button_text" msgid="3304688032024541260">"ढाँचा बिर्सनुभयो"</string>
- <string name="kg_wrong_pattern" msgid="5907301342430102842">"गलत ढाँचा"</string>
+ <string name="kg_wrong_pattern" msgid="5907301342430102842">"प्याटर्न मिलेन"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"गलत पासवर्ड"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"गलत PIN"</string>
<plurals name="kg_too_many_failed_attempts_countdown" formatted="false" msgid="991400408675793914">
diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml
index cfb156424f35..de642f3cc27c 100644
--- a/packages/SystemUI/res-keyguard/values-vi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml
@@ -60,7 +60,7 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Không thể tắt eSIM do lỗi."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Nhập"</string>
<string name="kg_forgot_pattern_button_text" msgid="3304688032024541260">"Đã quên hình mở khóa"</string>
- <string name="kg_wrong_pattern" msgid="5907301342430102842">"Hình không chính xác"</string>
+ <string name="kg_wrong_pattern" msgid="5907301342430102842">"Hình mở khóa không chính xác"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Mật khẩu sai"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Mã PIN sai"</string>
<plurals name="kg_too_many_failed_attempts_countdown" formatted="false" msgid="991400408675793914">
diff --git a/packages/SystemUI/res-product/values-ca/strings.xml b/packages/SystemUI/res-product/values-ca/strings.xml
index a1444bbe9f26..6da5f12bc049 100644
--- a/packages/SystemUI/res-product/values-ca/strings.xml
+++ b/packages/SystemUI/res-product/values-ca/strings.xml
@@ -25,7 +25,7 @@
<string name="inattentive_sleep_warning_message" product="default" msgid="5693904520452332224">"El dispositiu s\'apagarà aviat; prem per mantenir-lo encès."</string>
<string name="keyguard_missing_sim_message" product="tablet" msgid="5018086454277963787">"No hi ha cap targeta SIM a la tauleta."</string>
<string name="keyguard_missing_sim_message" product="default" msgid="7053347843877341391">"No hi ha cap targeta SIM al telèfon."</string>
- <string name="kg_invalid_confirm_pin_hint" product="default" msgid="6278551068943958651">"Els codis PIN no coincideixen"</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="6278551068943958651">"Els PIN no coincideixen"</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="302165994845009232">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, la tauleta es restablirà i se\'n suprimiran totes les dades."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="2594813176164266847">"Has provat de desbloquejar el telèfon <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, el telèfon es restablirà i se\'n suprimiran totes les dades."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="8710104080409538587">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. La tauleta es restablirà i se\'n suprimiran totes les dades."</string>
diff --git a/packages/SystemUI/res/drawable/ic_create_bubble.xml b/packages/SystemUI/res/drawable/ic_create_bubble.xml
index 1947f58f8f5e..d58e9a347a2f 100644
--- a/packages/SystemUI/res/drawable/ic_create_bubble.xml
+++ b/packages/SystemUI/res/drawable/ic_create_bubble.xml
@@ -14,16 +14,12 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path
- android:pathData="M12,3c-4.97,0 -9,4.03 -9,9c0,1.39 0.32,2.69 0.88,3.86l1.53,-1.53C5.15,13.6 5,12.82 5,12c0,-3.86 3.14,-7 7,-7s7,3.14 7,7s-3.14,7 -7,7c-0.83,0 -1.62,-0.15 -2.35,-0.42l-1.53,1.53C9.3,20.67 10.61,21 12,21c4.97,0 9,-4.03 9,-9C21,7.03 16.97,3 12,3z"
- android:fillColor="#000000"/>
- <path
- android:pathData="M12.99,15.99l2,0l0,-7l-7,0l0,2l3.59,0l-8.79,8.8l1.41,1.41l8.79,-8.79z"
- android:fillColor="#000000"/>
-</vector>
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M22,12C22,12 22,12 22,12C22,12 22,12 22,12c0,0.56 -0.06,1.1 -0.15,1.64l-1.97,-0.33c0.15,-0.91 0.15,-1.84 -0.02,-2.75c-0.01,-0.03 -0.01,-0.07 -0.02,-0.1c-0.03,-0.18 -0.08,-0.36 -0.13,-0.54c-0.02,-0.08 -0.04,-0.16 -0.06,-0.24c-0.04,-0.14 -0.09,-0.27 -0.14,-0.41c-0.04,-0.12 -0.08,-0.24 -0.13,-0.35c-0.04,-0.09 -0.08,-0.18 -0.13,-0.27c-0.07,-0.15 -0.14,-0.3 -0.22,-0.45c-0.03,-0.05 -0.06,-0.09 -0.08,-0.14c-0.72,-1.26 -1.77,-2.31 -3.03,-3.03c-0.05,-0.03 -0.09,-0.06 -0.14,-0.08c-0.15,-0.08 -0.3,-0.15 -0.45,-0.22c-0.09,-0.04 -0.18,-0.09 -0.27,-0.13c-0.11,-0.05 -0.23,-0.09 -0.35,-0.13c-0.14,-0.05 -0.27,-0.1 -0.41,-0.14c-0.08,-0.02 -0.16,-0.04 -0.23,-0.06c-0.18,-0.05 -0.36,-0.1 -0.54,-0.13c-0.03,-0.01 -0.07,-0.01 -0.1,-0.01c-0.95,-0.17 -1.93,-0.17 -2.88,0c-0.03,0.01 -0.07,0.01 -0.1,0.01c-0.18,0.04 -0.36,0.08 -0.54,0.13C9.85,4.3 9.77,4.32 9.69,4.34C9.55,4.38 9.42,4.44 9.28,4.49C9.17,4.53 9.05,4.57 8.93,4.61C8.84,4.65 8.75,4.7 8.66,4.74c-0.15,0.07 -0.3,0.14 -0.45,0.22C8.16,4.98 8.12,5.01 8.07,5.04C5.64,6.42 4,9.02 4,12c0,2.74 1.39,5.16 3.49,6.6c0.01,0.01 0.03,0.02 0.04,0.03c0.16,0.11 0.33,0.2 0.49,0.3c0.06,0.04 0.12,0.08 0.19,0.11c0.13,0.07 0.27,0.13 0.4,0.19c0.11,0.05 0.21,0.1 0.32,0.15c0.1,0.04 0.2,0.07 0.29,0.11c0.15,0.06 0.31,0.11 0.46,0.16c0.05,0.02 0.11,0.03 0.17,0.04c1.11,0.31 2.27,0.35 3.4,0.18l0.35,1.98c-0.54,0.09 -1.08,0.14 -1.62,0.14V22c-0.65,0 -1.28,-0.07 -1.9,-0.19c-0.01,0 -0.01,0 -0.02,0c-0.25,-0.05 -0.49,-0.11 -0.73,-0.18c-0.08,-0.02 -0.16,-0.04 -0.23,-0.06c-0.19,-0.06 -0.37,-0.13 -0.55,-0.19c-0.13,-0.05 -0.26,-0.09 -0.39,-0.14c-0.13,-0.05 -0.25,-0.12 -0.38,-0.18c-0.18,-0.08 -0.35,-0.16 -0.53,-0.25c-0.07,-0.04 -0.14,-0.08 -0.21,-0.13c-0.22,-0.12 -0.43,-0.25 -0.64,-0.39c-0.01,-0.01 -0.02,-0.02 -0.04,-0.03c-0.51,-0.35 -1,-0.74 -1.45,-1.2l0,0C3.12,17.26 2,14.76 2,12c0,-2.76 1.12,-5.26 2.93,-7.07l0,0c0.45,-0.45 0.93,-0.84 1.44,-1.19C6.39,3.73 6.4,3.72 6.42,3.71c0.2,-0.14 0.41,-0.26 0.62,-0.38c0.08,-0.05 0.15,-0.09 0.23,-0.14c0.17,-0.09 0.33,-0.16 0.5,-0.24c0.13,-0.06 0.27,-0.13 0.4,-0.19C8.3,2.71 8.42,2.67 8.55,2.63c0.19,-0.07 0.38,-0.14 0.58,-0.2c0.07,-0.02 0.14,-0.03 0.21,-0.05C10.18,2.14 11.07,2 12,2c0.65,0 1.29,0.07 1.91,0.19c0,0 0,0 0,0c0.25,0.05 0.5,0.11 0.75,0.18c0.07,0.02 0.14,0.03 0.22,0.06c0.19,0.06 0.38,0.13 0.57,0.2c0.12,0.05 0.25,0.09 0.37,0.14c0.14,0.06 0.27,0.12 0.4,0.18c0.17,0.08 0.34,0.16 0.51,0.25c0.08,0.04 0.15,0.09 0.23,0.14c0.21,0.12 0.42,0.24 0.62,0.38c0.01,0.01 0.03,0.02 0.04,0.03c0.51,0.35 0.99,0.74 1.45,1.19c0.24,0.24 0.47,0.49 0.68,0.75c0.04,0.04 0.06,0.09 0.1,0.13c0.17,0.22 0.34,0.45 0.5,0.68c0.01,0.01 0.02,0.03 0.03,0.04c0.69,1.05 1.17,2.21 1.42,3.44c0,0 0,0.01 0,0.01c0.06,0.29 0.1,0.58 0.13,0.87c0.01,0.04 0.01,0.09 0.02,0.13C21.98,11.32 22,11.66 22,12zM18.5,15c-1.93,0 -3.5,1.57 -3.5,3.5s1.57,3.5 3.5,3.5s3.5,-1.57 3.5,-3.5S20.43,15 18.5,15z"/>
+</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_stop_bubble.xml b/packages/SystemUI/res/drawable/ic_stop_bubble.xml
new file mode 100644
index 000000000000..11bc741a4f17
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_stop_bubble.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2020 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M21.98,18.32l-3.3,-3.3C20.47,15.11 21.89,16.53 21.98,18.32zM8.66,4.74C8.75,4.7 8.84,4.65 8.93,4.61c0.11,-0.05 0.23,-0.09 0.35,-0.13c0.14,-0.05 0.27,-0.1 0.41,-0.14C9.77,4.32 9.85,4.3 9.92,4.28c0.18,-0.05 0.36,-0.1 0.54,-0.13c0.03,-0.01 0.07,-0.01 0.1,-0.01c0.95,-0.17 1.93,-0.17 2.88,0c0.03,0.01 0.07,0.01 0.1,0.01c0.18,0.04 0.36,0.08 0.54,0.13c0.08,0.02 0.16,0.04 0.23,0.06c0.14,0.04 0.27,0.09 0.41,0.14c0.12,0.04 0.23,0.08 0.35,0.13c0.09,0.04 0.18,0.09 0.27,0.13c0.15,0.07 0.3,0.14 0.45,0.22c0.05,0.03 0.09,0.06 0.14,0.08c1.26,0.72 2.31,1.77 3.03,3.03c0.03,0.05 0.06,0.09 0.08,0.14c0.08,0.15 0.15,0.3 0.22,0.45c0.04,0.09 0.09,0.18 0.13,0.27c0.05,0.11 0.09,0.23 0.13,0.35c0.05,0.13 0.1,0.27 0.14,0.41c0.02,0.08 0.04,0.16 0.06,0.24c0.05,0.18 0.1,0.36 0.13,0.54c0.01,0.03 0.01,0.07 0.02,0.1c0.16,0.91 0.17,1.84 0.02,2.75l1.97,0.33C21.94,13.1 22,12.56 22,12c0,0 0,0 0,0s0,0 0,0c0,-0.34 -0.02,-0.68 -0.05,-1.01c0,-0.04 -0.01,-0.09 -0.02,-0.13c-0.03,-0.29 -0.07,-0.58 -0.13,-0.87c0,0 0,-0.01 0,-0.01c-0.25,-1.23 -0.73,-2.39 -1.42,-3.44c-0.01,-0.01 -0.02,-0.03 -0.03,-0.04c-0.15,-0.23 -0.32,-0.46 -0.5,-0.68c-0.03,-0.04 -0.06,-0.09 -0.1,-0.13c-0.21,-0.26 -0.44,-0.51 -0.68,-0.75c-0.45,-0.45 -0.94,-0.84 -1.45,-1.19c-0.01,-0.01 -0.03,-0.02 -0.04,-0.03c-0.2,-0.14 -0.41,-0.26 -0.62,-0.38c-0.08,-0.04 -0.15,-0.09 -0.23,-0.14c-0.17,-0.09 -0.34,-0.17 -0.51,-0.25c-0.13,-0.06 -0.26,-0.13 -0.4,-0.18c-0.12,-0.05 -0.25,-0.09 -0.37,-0.14c-0.19,-0.07 -0.38,-0.14 -0.57,-0.2c-0.07,-0.02 -0.14,-0.04 -0.22,-0.06c-0.25,-0.07 -0.5,-0.13 -0.75,-0.18c0,0 0,0 0,0C13.29,2.07 12.65,2 12,2c-0.93,0 -1.82,0.14 -2.67,0.37C9.26,2.39 9.19,2.41 9.12,2.43c-0.2,0.06 -0.39,0.13 -0.58,0.2C8.42,2.67 8.3,2.71 8.18,2.76c-0.14,0.06 -0.27,0.12 -0.4,0.19C7.61,3.03 7.44,3.1 7.27,3.19C7.19,3.24 7.12,3.29 7.04,3.33C7.03,3.34 7.02,3.34 7.01,3.35l1.48,1.48C8.55,4.8 8.6,4.77 8.66,4.74zM2.71,1.29L1.29,2.71l2.97,2.97C2.85,7.4 2,9.6 2,12c0,2.76 1.12,5.26 2.93,7.07l0,0c0.45,0.45 0.94,0.85 1.45,1.2c0.01,0.01 0.02,0.02 0.04,0.03c0.21,0.14 0.42,0.27 0.64,0.39c0.07,0.04 0.14,0.09 0.21,0.13c0.17,0.09 0.35,0.17 0.53,0.25c0.13,0.06 0.25,0.12 0.38,0.18c0.13,0.05 0.26,0.1 0.39,0.14c0.18,0.07 0.36,0.14 0.55,0.19c0.08,0.02 0.16,0.04 0.23,0.06c0.24,0.07 0.48,0.13 0.73,0.18c0.01,0 0.01,0 0.02,0C10.72,21.93 11.35,22 12,22v-0.01c0.54,0 1.08,-0.05 1.62,-0.14l-0.35,-1.98c-1.13,0.18 -2.29,0.13 -3.4,-0.18c-0.06,-0.02 -0.11,-0.03 -0.17,-0.04c-0.16,-0.05 -0.31,-0.11 -0.46,-0.16c-0.1,-0.04 -0.2,-0.07 -0.29,-0.11c-0.11,-0.05 -0.22,-0.1 -0.32,-0.15c-0.13,-0.06 -0.27,-0.12 -0.4,-0.19c-0.06,-0.03 -0.13,-0.08 -0.19,-0.11c-0.17,-0.1 -0.33,-0.19 -0.49,-0.3c-0.01,-0.01 -0.03,-0.02 -0.04,-0.03C5.39,17.16 4,14.74 4,12c0,-1.85 0.64,-3.54 1.7,-4.89l9.73,9.73C15.16,17.33 15,17.9 15,18.5c0,1.93 1.57,3.5 3.5,3.5c0.6,0 1.17,-0.16 1.66,-0.43l1.13,1.13l1.41,-1.41L2.71,1.29z"/>
+</vector>
diff --git a/packages/SystemUI/res/layout/controls_dialog_pin.xml b/packages/SystemUI/res/layout/controls_dialog_pin.xml
index b77d6fa6a956..afef5eaa3979 100644
--- a/packages/SystemUI/res/layout/controls_dialog_pin.xml
+++ b/packages/SystemUI/res/layout/controls_dialog_pin.xml
@@ -25,6 +25,7 @@
android:id="@+id/controls_pin_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:minHeight="48dp"
android:hint="@string/controls_pin_instructions"
android:inputType="numberPassword" />
<CheckBox
@@ -32,5 +33,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
+ android:minHeight="48dp"
android:text="@string/controls_pin_use_alphanumeric" />
</LinearLayout>
diff --git a/packages/SystemUI/res/layout/controls_horizontal_divider_withEmpty.xml b/packages/SystemUI/res/layout/controls_horizontal_divider_with_empty.xml
index 90b3398e3de2..90b3398e3de2 100644
--- a/packages/SystemUI/res/layout/controls_horizontal_divider_withEmpty.xml
+++ b/packages/SystemUI/res/layout/controls_horizontal_divider_with_empty.xml
diff --git a/packages/SystemUI/res/layout/notification_snooze.xml b/packages/SystemUI/res/layout/notification_snooze.xml
index c350ed22b765..253bc328c5b8 100644
--- a/packages/SystemUI/res/layout/notification_snooze.xml
+++ b/packages/SystemUI/res/layout/notification_snooze.xml
@@ -20,7 +20,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:clickable="true"
android:background="@color/notification_material_background_color"
android:theme="@style/Theme.SystemUI">
@@ -55,6 +54,8 @@
android:layout_marginEnd="@dimen/notification_guts_button_side_margin"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
+ android:minWidth="@dimen/min_clickable_item_size"
+ android:minHeight="@dimen/min_clickable_item_size"
android:text="@string/snooze_undo"
style="@style/TextAppearance.NotificationInfo.Button" />
</RelativeLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 29e4361209f8..efa28792271a 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Vergrotingoorleggervenster"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Vergrotingvenster"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Vergrotingvensterkontroles"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Kitskontroles"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Toestelkontroles"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Voeg kontroles vir jou gekoppelde toestelle by"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Stel kitskontroles op"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Stel toestelkontroles op"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hou die aan/af-skakelaar in om na jou kontroles toe te gaan"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Kies program om kontroles by te voeg"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroles"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Kies kontroles om toegang vanaf die aan/af-kieslys te kry"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hou en sleep \'n kontrole om dit te beweeg"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Die lys met alle kontroles kon nie gelaai word nie."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Ander"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Voeg by kitskontroles"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Voeg by toestelkontroles"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Voeg by gunstelinge"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> het voorgestel dat hierdie kontrole by jou gunstelinge gevoeg word."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontroles opgedateer"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 58809e60eb85..96934b17eeb0 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"ፍቀድ"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"የዩኤስቢ እርማት አይፈቀድም"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"አሁን ወደዚህ መሣሪያ የገባው ተጠቃሚ የዩኤስቢ እርማትን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም ወደ ዋና ተጠቃሚ ይቀይሩ።"</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"በዚህ አውታረ መረብ ላይ ገመድ-አልባ ማረም ይፈቀድ?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"በዚህ አውታረ መረብ ላይ ገመድ-አልባ debugging ይፈቀድ?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"የአውታረ መረብ ስም (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nየWi‑Fi አድራሻ (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"ሁልጊዜ በዚህ አውታረ መረብ ላይ ፍቀድ"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"ፍቀድ"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"ገመድ-አልባ ማረም አይፈቀድም"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"በአሁኑ ጊዜ በመለያ ወደዚህ መሣሪያ የገባው ተጠቃሚ የገመድ-አልባ ማረምን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም ወደ ዋና ተጠቃሚ ይቀይሩ።"</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"ገመድ-አልባ debugging አይፈቀድም"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"በአሁኑ ጊዜ በመለያ ወደዚህ መሣሪያ የገባው ተጠቃሚ የገመድ-አልባ debuggingን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም ወደ ዋና ተጠቃሚ ይቀይሩ።"</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"የዩኤስቢ ወደብ ተሰናክሏል"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"መሣሪያዎን ከፈሳሽ ወይም ፍርስራሽ ለመጠበቅ ሲባል የዩኤስቢ ወደቡ ተሰናክሏል፣ እና ማናቸውም ተቀጥላዎችን አያገኝም።\n\nየዩኤስቢ ወደቡን እንደገና መጠቀም ችግር በማይኖረው ጊዜ ማሳወቂያ ይደርሰዎታል።"</string>
<string name="usb_port_enabled" msgid="531823867664717018">"ኃይል መሙያዎችን እና ተጨማሪ መሣሪያዎችን ፈልጎ ለማግኘት የነቃ የዩኤስቢ ወደብ"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ቅጽበታዊ ገጽ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"ቅጽበታዊ ገጽ እይታን አሰናብት"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"ቅጽበታዊ ገጽ እይታን ክፈት"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"ማያ መቅረጫ"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"የማያ መቅጃ"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"ለአንድ የማያ ገጽ ቀረጻ ክፍለ-ጊዜ በመካሄድ ያለ ማሳወቂያ"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"መቅረጽ ይጀመር?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"እየቀረጹ ሳለ የAndroid ስርዓት በማያ ገጽዎ ላይ የሚታይ ወይም በመሣሪያዎ ላይ የሚጫወት ማንኛውም ሚስጥራዊነት ያለው መረጃን መያዝ ይችላል። ይህ የይለፍ ቃላትን፣ የክፍያ መረጃን፣ ፎቶዎችን፣ መልዕክቶችን እና ኦዲዮን ያካትታል።"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"የማጉያ ንብርብር መስኮት"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"የማጉያ መስኮት"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"የማጉያ መስኮት መቆጣጠሪያዎች"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ፈጣን መቆጣጠሪያዎች"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"የመሣሪያ መቆጣጠሪያዎች"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"ለእርስዎ የተገናኙ መሣሪያዎች መቆጣጠሪያዎችን ያክሉ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ፈጣን መቆጣጠሪያዎችን ያቀናብሩ"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"የመሣሪያ መቆጣጠሪያዎችን ያቀናብሩ"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"የእርስዎን መቆጣጠሪያዎች ለመድረስ የኃይል አዝራሩን ይያዙ"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"መቆጣጠሪያዎችን ለማከል መተግበሪያ ይምረጡ"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"መቆጣጠሪያዎች"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ከኃይል ምናሌ ላይ ለመድረስ መቆጣጠሪያዎችን ይምረጡ"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ለማንቀሳቀስ መቆጣጠሪያውን ይያዙት እና ይጎትቱት"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"የሁሉም መቆጣጠሪያዎች ዝርዝር ሊጫን አልተቻለም።"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ሌላ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ወደ ፈጣን መቆጣጠሪያዎች ያክሉ"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ወደ የመሣሪያ መቆጣጠሪያዎች ያክሉ"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ወደ ተወዳጆች አክል"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ይህን ቁጥጥር ወደ ተወዳጆችዎ እንዲታከል ሐሳብ ጠቁሟል።"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"መቆጣጠሪያዎች ተዘምነዋል"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index ca1af6765edf..de8a07b0382c 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -34,7 +34,7 @@
<string name="invalid_charger_text" msgid="2339310107232691577">"استخدم الشاحن المرفق بجهازك."</string>
<string name="battery_low_why" msgid="2056750982959359863">"الإعدادات"</string>
<string name="battery_saver_confirmation_title" msgid="1234998463717398453">"هل تريد تفعيل ميزة توفير شحن البطارية؟"</string>
- <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"لمحة حول ميزة \"توفير شحن البطارية\""</string>
+ <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"لمحة عن ميزة \"توفير شحن البطارية\""</string>
<string name="battery_saver_confirmation_ok" msgid="5042136476802816494">"تفعيل"</string>
<string name="battery_saver_start_action" msgid="4553256017945469937">"هل تريد تفعيل ميزة توفير شحن البطارية؟"</string>
<string name="status_bar_settings_settings_button" msgid="534331565185171556">"الإعدادات"</string>
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"سماح"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"‏لا يُسمح بتصحيح أخطاء USB"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"‏لا يمكن للمستخدم الذي يسجّل دخوله حاليًا إلى هذا الجهاز تفعيل تصحيح الأخطاء USB. لاستخدام هذه الميزة، يمكنك التبديل إلى المستخدم الأساسي."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"‏هل تريد السماح باستخدام ميزة \"تصحيح الأخطاء عبر شبكة Wi-Fi\" على هذه الشبكة؟"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"هل تريد السماح باستخدام ميزة \"تصحيح الأخطاء اللاسلكي\" على هذه الشبكة؟"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"‏اسم الشبكة (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nعنوان شبكة Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"السماح باستخدام هذه الميزة على هذه الشبكة دائمًا"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"سماح"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"‏غير مسموح باستخدام ميزة \"تصحيح الأخطاء عبر شبكة Wi-Fi\""</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"‏لا يمكن للمستخدم المسجِّل دخوله حاليًا على هذا الجهاز تفعيل ميزة \"تصحيح الأخطاء عبر شبكة Wi-Fi\". لاستخدام هذه الميزة، يمكنك التبديل إلى المستخدم الأساسي."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"غير مسموح باستخدام ميزة \"تصحيح الأخطاء اللاسلكي\""</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"لا يمكن للمستخدم المسجِّل دخوله حاليًا على هذا الجهاز تفعيل ميزة \"تصحيح الأخطاء اللاسلكي\". لاستخدام هذه الميزة، يمكنك التبديل إلى المستخدم الأساسي."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"‏تمّ إيقاف منفذ USB"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"‏لحماية جهازك من السوائل أو الشوائب، سيتمّ إيقاف منفذ USB ولن يتم رصد أيّ ملحقات.\n\nوسيتمّ إعلامك عندما يُسمح باستخدام منفذ USB مرة أخرى."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"‏تم تفعيل منفذ USB لاكتشاف أجهزة الشحن والملحقات."</string>
@@ -257,10 +257,10 @@
<string name="accessibility_notification_dismissed" msgid="4411652015138892952">"تم تجاهل الإشعار."</string>
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"مركز الإشعارات."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"الإعدادات السريعة."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"شاشة التأمين."</string>
+ <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"شاشة القفل."</string>
<string name="accessibility_desc_settings" msgid="6728577365389151969">"الإعدادات"</string>
<string name="accessibility_desc_recent_apps" msgid="1748675199348914194">"النظرة عامة."</string>
- <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"شاشة تأمين بيانات العمل"</string>
+ <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"شاشة قفل بيانات العمل"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"إغلاق"</string>
<string name="accessibility_quick_settings_wifi" msgid="167707325133803052">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="2230487165558877262">"‏تم إيقاف Wifi."</string>
@@ -335,8 +335,8 @@
<string name="status_bar_notification_inspect_item_title" msgid="6818779631806163080">"إعدادات الإشعارات"</string>
<string name="status_bar_notification_app_settings_title" msgid="5050006438806013903">"إعدادات <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="accessibility_rotation_lock_off" msgid="3880436123632448930">"سيتم تدوير الشاشة تلقائيًا."</string>
- <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"تم تأمين الشاشة في الاتجاه الأفقي."</string>
- <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"تم تأمين الشاشة في الاتجاه العمودي."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"تم قفل الشاشة في الاتجاه الأفقي."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"تم قفل الشاشة في الاتجاه العمودي."</string>
<string name="accessibility_rotation_lock_off_changed" msgid="5772498370935088261">"سيتم الآن تدوير الشاشة تلقائيًا."</string>
<string name="accessibility_rotation_lock_on_landscape_changed" msgid="5785739044300729592">"تم قفل الشاشة الآن في الاتجاه الأفقي."</string>
<string name="accessibility_rotation_lock_on_portrait_changed" msgid="5580170829728987989">"تم قفل الشاشة الآن في الاتجاه الرأسي."</string>
@@ -693,7 +693,7 @@
<string name="tuner_full_importance_settings" msgid="1388025816553459059">"عناصر التحكم في إشعارات التشغيل"</string>
<string name="tuner_full_importance_settings_on" msgid="917981436602311547">"تشغيل"</string>
<string name="tuner_full_importance_settings_off" msgid="5580102038749680829">"إيقاف"</string>
- <string name="power_notification_controls_description" msgid="1334963837572708952">"باستخدام عناصر التحكم في إشعار التشغيل، يمكنك تعيين مستوى الأهمية من 0 إلى 5 لإشعارات التطبيق. \n\n"<b>"المستوى 5"</b>" \n- العرض أعلى قائمة الإشعارات \n- يسمح بمقاطعة ملء الشاشة \n- الظهور الخاطف دائمًا \n\n"<b>"المستوى 4"</b>" \n- منع مقاطعة ملء الشاشة \n- الظهور الخاطف دائمًا \n\n"<b>"المستوى 3"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n\n"<b>"المستوى 2"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n- عدم إصدار أصوات واهتزاز \n\n"<b>"المستوى 1"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n- عدم إصدار أصوات أو اهتزاز أبدًا \n- الإخفاء من شاشة التأمين وشريط الحالة \n- العرض أسفل قائمة الإشعارات \n\n"<b>"المستوى 0"</b>" \n- حظر جميع الإشعارات من التطبيق"</string>
+ <string name="power_notification_controls_description" msgid="1334963837572708952">"باستخدام عناصر التحكم في إشعار التشغيل، يمكنك تعيين مستوى الأهمية من 0 إلى 5 لإشعارات التطبيق. \n\n"<b>"المستوى 5"</b>" \n- العرض أعلى قائمة الإشعارات \n- يسمح بمقاطعة ملء الشاشة \n- الظهور الخاطف دائمًا \n\n"<b>"المستوى 4"</b>" \n- منع مقاطعة ملء الشاشة \n- الظهور الخاطف دائمًا \n\n"<b>"المستوى 3"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n\n"<b>"المستوى 2"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n- عدم إصدار أصوات واهتزاز \n\n"<b>"المستوى 1"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n- عدم إصدار أصوات أو اهتزاز أبدًا \n- الإخفاء من شاشة القفل وشريط الحالة \n- العرض أسفل قائمة الإشعارات \n\n"<b>"المستوى 0"</b>" \n- حظر جميع الإشعارات من التطبيق"</string>
<string name="notification_header_default_channel" msgid="225454696914642444">"الإشعارات"</string>
<string name="notification_channel_disabled" msgid="928065923928416337">"لن تتلقى هذه الإشعارات بعد الآن."</string>
<string name="notification_channel_minimized" msgid="6892672757877552959">"سيتم تصغير هذه الإشعارات."</string>
@@ -720,12 +720,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"يساعدك هذا الإشعار على التركيز بدون صوت أو اهتزاز."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"يلفت هذا الإشعار انتباهك باستخدام الصوت والاهتزاز."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"يلفِت هذا الإشعار انتباهك لهذا المحتوى باستخدام اختصار عائم."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"تظهر كفقاعة في أعلى قسم المحادثات"</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"تظهر كل المحادثات من تطبيق <xliff:g id="APP_NAME_0">%1$s</xliff:g> كفقاعات تلقائيًا. يمكنك إدارة هذا الإعداد في <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"تظهر كفقاعة محادثة في أعلى قسم المحادثات"</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"تظهر كل المحادثات من تطبيق <xliff:g id="APP_NAME_0">%1$s</xliff:g> كفقاعات محادثات تلقائيًا. يمكنك إدارة هذا الإعداد في <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"الإعدادات"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"الأولوية"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ليس هناك فقاعات حديثة"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ستظهر هنا أحدث الفقاعات والفقاعات التي تم إغلاقها."</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ليس هناك فقاعات محادثات"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ستظهر هنا أحدث فقاعات المحادثات وفقاعات المحادثات التي تم إغلاقها."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"يتعذّر تعديل هذه الإشعارات."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"يتعذّر ضبط مجموعة الإشعارات هذه هنا."</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"إشعار مستند إلى خادم وكيل"</string>
@@ -753,7 +753,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"تم كتم الصوت"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"تنبيه"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"إظهار فقاعة تفسيرية"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"إزالة الفقاعات التفسيرية"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"إزالة فقاعات المحادثات"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"إضافة إلى الشاشة الرئيسية"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"عناصر التحكم في الإشعارات"</string>
@@ -1003,7 +1003,7 @@
<string name="device_services" msgid="1549944177856658705">"خدمات الأجهزة"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"بلا عنوان"</string>
<string name="restart_button_description" msgid="6916116576177456480">"انقر لإعادة تشغيل هذا التطبيق والانتقال إلى وضع ملء الشاشة."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"إعداد الفقاعات التفسيرية على <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"إعدادات فقاعات المحادثات على <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"إدارة"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> من <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> من <xliff:g id="APP_NAME">%2$s</xliff:g> و<xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> أيضًا"</string>
@@ -1013,11 +1013,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"نقل إلى أسفل يمين الشاشة"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"نقل إلى أسفل اليسار"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"تجاهل"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"عدم عرض المحادثة كفقاعة"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"الدردشة باستخدام الفقاعات"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"تظهر المحادثات الجديدة كرموز عائمة أو فقاعات. انقر عليها لفتحها كفقاعة أو اسحبها لتحريكها."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"التحكّم في الفقاعات في أي وقت"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"انقر على \"إدارة\" لإيقاف الفقاعات من هذا التطبيق."</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"عدم عرض المحادثة كفقاعة محادثة"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"الدردشة باستخدام فقاعات المحادثات"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"تظهر المحادثات الجديدة كرموز عائمة أو كفقاعات. انقر لفتح فقاعة المحادثة، واسحبها لتحريكها."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"التحكّم في فقاعات المحادثات في أي وقت"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"انقر على \"إدارة\" لإيقاف فقاعات المحادثات من هذا التطبيق."</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"حسنًا"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"تم تحديث التنقل داخل النظام. لإجراء التغييرات، يُرجى الانتقال إلى \"الإعدادات\"."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"الانتقال إلى \"الإعدادات\" لتعديل التنقل داخل النظام"</string>
@@ -1025,9 +1025,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"نافذة تراكب التكبير"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"نافذة التكبير"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"عناصر التحكم في نافذة التكبير"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"عناصر التحكّم السريعة"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"عناصر التحكم في الأجهزة"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"إضافة عناصر تحكّم لأجهزتك المتصلة"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"إعداد عناصر التحكّم السريعة"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"إعداد عناصر التحكم في الأجهزة"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"اضغط مع الاستمرار على زر التشغيل للوصول إلى عناصر التحكّم"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"اختيار تطبيق لإضافة عناصر التحكّم"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1040,10 +1040,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"عناصر التحكّم"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"اختيار عناصر التحكّم التي تريد الوصول إليها من قائمة التشغيل"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"اضغط مع الاستمرار على عنصر تحكّم واسحبه لتحريكه."</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"تعذّر تحميل قائمة كل عناصر التحكّم."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"غير ذلك"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"إضافة إلى عناصر التحكم السريعة"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"إضافة إلى عناصر التحكم في الأجهزة"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"إضافة إلى الإعدادات المفضّلة"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"اقترح تطبيق <xliff:g id="APP">%s</xliff:g> إضافة عنصر التحكّم هذا إلى الإعدادات المفضّلة."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"تم تعديل عناصر التحكّم."</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 17dba435ffe1..f32757c2720f 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"অনুমতি দিয়ক"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"ইউএছবি ডিবাগিঙৰ অনুমতি নাই"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"এই ডিভাইচটোত বর্তমান ছাইন ইন হৈ থকা ব্যৱহাৰকাৰীজনে ইউএছবি ডিবাগিং অন কৰিব নোৱাৰে। এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ হ\'লে মুখ্য ব্যৱহাৰকাৰী হিচাপে ছাইন ইন কৰক।"</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"এই নেটৱৰ্কত ৱায়াৰলেছ ডিবাগিঙৰ অনুমতি দিবনে?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"এই নেটৱৰ্কত ৱায়াৰলেচ ডি\'বাগিংৰ অনুমতি দিবনে?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"নেটৱৰ্কৰ নাম (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nৱাই-ফাইৰ ঠিকনা (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"এই নেটৱৰ্কত সদায় অনুমতি দিয়ক"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"অনুমতি দিয়ক"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"ৱায়াৰলেছ ডিবাগিঙৰ অনুমতি নাই"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"এই ডিভাইচটোত বর্তমান ছাইন ইন হৈ থকা ব্যৱহাৰকাৰীজনে ৱায়াৰলেছ ডিবাগিং অন কৰিব নোৱাৰে। এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ হ’লে প্ৰাথমিক ব্যৱহাৰকাৰী হিচাপে ছাইন ইন কৰক।"</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"ৱায়াৰলেচ ডি\'বাগিংৰ অনুমতি নাই"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"এই ডিভাইচটোত বর্তমান ছাইন ইন হৈ থকা ব্যৱহাৰকাৰীজনে ৱায়াৰলেচ ডি\'বাগিং অন কৰিব নোৱাৰে। এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ হ’লে প্ৰাথমিক ব্যৱহাৰকাৰী হিচাপে ছাইন ইন কৰক।"</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"ইউএছবি প’ৰ্ট অক্ষম কৰা হ’ল"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"আপোনাৰ ডিভাইচটো তৰল বা ধূলি-মাকতিৰ পৰা ৰক্ষা কৰিবলৈ ইউএছবি প’ৰ্টটো অক্ষম কৰি ৰখা হৈছে ফলত ই কোনো আনুষংগিক সামগ্ৰী ধৰা পেলাব নোৱাৰে।\n\nযেতিয়া ইউএছবি প’ৰ্টটো নিৰাপদভাৱে ব্যৱহাৰ কৰিব পৰা হ’ব তেতিয়া আপোনাক জনোৱা হ’ব।"</string>
<string name="usb_port_enabled" msgid="531823867664717018">"চাৰ্জাৰ আৰু আনুষংগিক সামগ্ৰী চিনাক্ত কৰিবলৈ USB প’ৰ্ট সক্ষম কৰা হ’ল"</string>
@@ -509,7 +509,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"ইতিহাস"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"নীৰৱ জাননীসমূহ"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"সতৰ্কতামূলক জাননীসমূহ"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"বাৰ্তালাপসমূহ"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"বাৰ্তালাপ"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"সকলো নীৰৱ জাননী মচক"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"অসুবিধা নিদিব-ই জাননী পজ কৰিছে"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"এতিয়াই আৰম্ভ কৰক"</string>
@@ -712,8 +712,8 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>ৰ সকলো বাৰ্তালাপ ডিফ’ল্ট হিচাপে বাবল হয়। <xliff:g id="APP_NAME_1">%2$s</xliff:g>ত পৰিচালনা কৰক।"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ছেটিংসমূহ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"অগ্ৰাধিকাৰ"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"কোনো শেহতীয়া বাবল নাই"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"শেহতীয়া বাবলসমূহ আৰু অগ্ৰাহ্য কৰা বাবলসমূহ ইয়াত প্ৰদর্শিত হ\'ব"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"কোনো শেহতীয়া bubbles নাই"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"শেহতীয়া bubbles আৰু অগ্ৰাহ্য কৰা bubbles ইয়াত প্ৰদর্শিত হ\'ব"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"এই জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"এই ধৰণৰ জাননীবোৰ ইয়াত কনফিগাৰ কৰিব পৰা নাযায়"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"প্ৰক্সি হিচাপে পঠিওৱা জাননী"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"নীৰৱ কৰি ৰখা হৈছে"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"সতৰ্কতামূলক"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"বাবল হিচাপে দেখুৱাওক"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"বাবলসমূহ আঁতৰাওক"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Bubbles আঁতৰাওক"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"গৃহ স্ক্ৰীনত যোগ কৰক"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"জাননীৰ নিয়ন্ত্ৰণসমূহ"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"ডিভাইচ সেৱা"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"কোনো শিৰোনাম নাই"</string>
<string name="restart_button_description" msgid="6916116576177456480">"এপ্‌টো ৰিষ্টাৰ্ট কৰক আৰু পূৰ্ণ স্ক্ৰীণ ব্যৱহাৰ কৰক।"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবলৰ ছেটিংসমূহ"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ bubblesৰ ছেটিংসমূহ"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"পৰিচালনা কৰক"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g>ৰ পৰা <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> আৰু<xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>টাৰ পৰা <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -994,10 +994,10 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"তলৰ সোঁফালে নিয়ক"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"অগ্ৰাহ্য কৰক"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"বাৰ্তালাপ বাবল নকৰিব"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"বাবলসমূহ ব্যৱহাৰ কৰি চাট কৰক"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"নতুন বার্তালাপসমূহ উপঙি থকা চিহ্নসমূহ অথবা বাবলসমূহ হিচাপে প্ৰদর্শিত হয়। বাবল খুলিবলৈ টিপক। এইটো স্থানান্তৰ কৰিবলৈ টানি নিয়ক।"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"যিকোনো সময়তে বাবলসমূহ নিয়ন্ত্ৰণ কৰক"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"এই এপ্‌টোৰ পৰা বাবল অফ কৰিবলৈ পৰিচালনা কৰকত টিপক"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Bubbles ব্যৱহাৰ কৰি চাট কৰক"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"নতুন বাৰ্তালাপ উপঙি থকা চিহ্নসমূহ অথবা bubbles হিচাপে প্ৰদর্শিত হয়। Bubbles খুলিবলৈ টিপক। এইটো স্থানান্তৰ কৰিবলৈ টানি নিয়ক।"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"যিকোনো সময়তে bubbles নিয়ন্ত্ৰণ কৰক"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"এই এপ্‌টোৰ পৰা bubbles অফ কৰিবলৈ পৰিচালনা কৰকত টিপক"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"বুজি পালোঁ"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"ছিষ্টেম নেভিগেশ্বন আপডে’ট কৰা হ’ল। সলনি কৰিবলৈ ছেটিংসমূহ-লৈ যাওক।"</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"ছিষ্টেম নেভিগেশ্বন আপডে’ট কৰিবলৈ ছেটিংসমূহ-লৈ যাওক"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"বিবৰ্ধন অ’ভাৰলে’ৰ ৱিণ্ড’"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"বিবৰ্ধন ৱিণ্ড’"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"বিবৰ্ধন ৱিণ্ড’ৰ নিয়ন্ত্ৰণসমূহ"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ক্ষিপ্ৰ নিয়ন্ত্ৰণসমূহ"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহ"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"আপোনাৰ সংযোজিত ডিভাইচসমূহৰ বাবে নিয়ন্ত্ৰণসমূহ যোগ কৰক"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ক্ষিপ্ৰ নিয়ন্ত্ৰণসমূহ ছেট আপ কৰক"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহ ছেট আপ কৰক"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"আপোনাৰ নিয়ন্ত্ৰণসমূহ এক্সেছ কৰিবলৈ পাৱাৰ বুটামটো হেঁচি ধৰি ৰাখক"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"নিয়ন্ত্ৰণসমূহ যোগ কৰিবলৈ এপ্‌ বাছনি কৰক"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্ৰণসমূহ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"পাৱাৰ মেনুখনৰ পৰা এক্সেছ পাবলৈ নিয়ন্ত্ৰণসমূহ বাছনি কৰক"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"নিয়ন্ত্ৰণটো স্থানান্তৰ কৰিবলৈ ধৰি ৰাখি টানি নিয়ক"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"নিয়ন্ত্ৰণসমূহৰ সম্পূর্ণ সূচীখন ল’ড কৰিব পৰা নগ’ল।"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ক্ষিপ্ৰ নিয়ন্ত্ৰণসমূহত যোগ কৰক"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহত যোগ দিয়ক"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"প্ৰিয়সমূহত যোগ কৰক"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g>এ এই নিয়ন্ত্ৰণটো আপোনাৰ প্ৰিয়সমূহত যোগ কৰাৰ পৰামৰ্শ দিছে।"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"নিয়ন্ত্ৰণসমূহ আপডে\'ট কৰা হৈছে"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 55c3bbe647a1..b06a8ea597bf 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"İcazə verin"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB debaq prosesinə icazə verilmir"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Hazırda bu cihaza daxil olmuş istifadəçi USB sazlama prosesini aktiv edə bilməz. Bu funksiyadan istifadə etmək üçün əsas istifadəçi hesaba daxil olmalıdır."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Bu şəbəkədə simsiz sazlamaya icazə verilsin?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Bu şəbəkədə WiFi sazlamasına icazə verilsin?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Şəbəkə Adı (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi Ünvanı (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Bu şəbəkədə həmişə icazə verilsin"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"İcazə verin"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Simsiz sazlamaya icazə verilmir"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Hazırda bu cihaza daxil olmuş istifadəçi simsiz sazlamanı aktiv edə bilmir. Bu funksiyadan istifadə etmək üçün əsas istifadəçiyə keçin."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"WiFi sazlamasına icazə verilmir"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Hazırda bu cihaza daxil olmuş istifadəçi WiFi sazlamasını aktiv edə bilmir. Bu funksiyadan istifadə etmək üçün əsas istifadəçiyə keçin."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB portu deaktiv edildi"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"USB portu deaktivdir. Cihazı maye və zərbədən qorumaq üçün aksesuar aşkarlanmayacaq.\n\nUSB portu yenidən istifadə üçün təhlükəsiz olduqda bildiriş göndəriləcək."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Adapter və aksesuarları aşkarlamaq üçün USB portu aktiv edildi"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Səs və ya vibrasiya olmadan fokuslanmağınıza kömək edir."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Səs və ya vibrasiya ilə diqqətinizi çəkir."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Bu məzmuna üzən qısayol ilə diqqətinizi cəlb edir."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Söhbət bölməsinin yuxarısında göstərilir və qabarcıq kimi görünür."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Defolt olaraq, <xliff:g id="APP_NAME_0">%1$s</xliff:g> tətbiqindən gələn söhbətlər qabarcıq şəklində göstərilir. <xliff:g id="APP_NAME_1">%2$s</xliff:g> tətbiqində idarə edin."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Söhbət bölməsinin yuxarısında göstərilir və yumrucuq kimi görünür."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Defolt olaraq, <xliff:g id="APP_NAME_0">%1$s</xliff:g> tətbiqindən gələn söhbətlər yumrucuq şəklində göstərilir. <xliff:g id="APP_NAME_1">%2$s</xliff:g> tətbiqində idarə edin."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ayarlar"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Qabarcıq yoxdur"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Son qabarcıqlar və buraxılmış qabarcıqlar burada görünəcək"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Yumrucuqlar yoxdur"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Son yumrucuqlar və buraxılmış yumrucuqlar burada görünəcək"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirişlər dəyişdirilə bilməz."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Bu bildiriş qrupunu burada konfiqurasiya etmək olmaz"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Proksi bildirişi"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Susdurulub"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Siqnal"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Qabarcığı göstərin"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Qabarcıqları silin"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Yumrucuqları silin"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Əsas ekrana əlavə edin"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"bildiriş nəzarəti"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Cihaz Xidmətləri"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Başlıq yoxdur"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Bu tətbiqi sıfırlayaraq tam ekrana keçmək üçün klikləyin."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> qabarcıqları üçün ayarlar"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> yumrucuqları üçün ayarlar"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"İdarə edin"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> tətbiqindən <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> tətbiqindən <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> və daha <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> qabarcıq"</string>
@@ -994,10 +994,10 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Aşağıya sağa köçürün"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Kənarlaşdırın"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Söhbətdən gələn bildirişi göstərməyin"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Qabarcıqlardan istifadə edərək söhbət edin"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Yeni söhbətlər üzən nişanlar və ya qabarcıqlar kimi görünür. Qabarcığı açmaq üçün toxunun. Hərəkət etdirmək üçün sürüşdürün."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Qabarcıqları istənilən vaxt idarə edin"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Bu tətbiqdə qabarcıqları deaktiv etmək üçün \"İdarə edin\" seçiminə toxunun"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Yumrucuqlardan istifadə edərək söhbət edin"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Yeni söhbətlər üzən nişanlar və ya yumrucuqlar kimi görünür. Yumrucuğu açmaq üçün toxunun. Hərəkət etdirmək üçün sürüşdürün."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Yumrucuqları istənilən vaxt idarə edin"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Bu tətbiqdə yumrucuqları deaktiv etmək üçün \"İdarə edin\" seçiminə toxunun"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Anladım"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Sistem naviqasiyası yeniləndi. Dəyişiklik etmək üçün Ayarlara daxil olun."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Sistem naviqasiyasını yeniləmək üçün Ayarlara keçin"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Böyütmə Üst-üstə Düşən Pəncərəsi"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Böyütmə Pəncərəsi"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Böyütmə Pəncərəsi Kontrolları"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Sürətli nizamlayıcılar"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Cihaz nizamlayıcıları"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Qoşulmuş cihazlarınız üçün nizamlayıcılar əlavə edin"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Sürətli nizamlayıcıları ayarlayın"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Cihaz nizamlayıcılarını ayarlayın"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Nizamlayıcılara giriş üçün Yandırıb-söndürmə düyməsini basıb saxlayın"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Nizamlayıcıları əlavə etmək üçün tətbiq seçin"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Nizamlayıcılar"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Enerji menyusundan daxil olacağınız nizamlayıcıları seçin"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hərəkət etdirmək üçün nizamlayıcını tutub sürüşdürün"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Bütün nizamlayıcıların siyahısı yüklənmədi."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Digər"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Cəld nizamlayıcılara əlavə edin"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Cihaz nizamlayıcılarına əlavə edin"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Sevimlilərə əlavə edin"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> sevimlilərə əlavə etmək üçün bu nizamlayıcını təklif edib."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Nizamlayıcılar güncəlləndi"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 5aea86bca758..702c89901ad7 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -1010,9 +1010,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Preklopni prozor za uvećanje"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Prozor za uvećanje"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontrole prozora za uvećanje"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Brze kontrole"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Dodajte kontrole za povezane uređaje"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Podesite brze kontrole"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Podesite kontrole uređaja"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Zadržite dugme za uključivanje da biste pristupili kontrolama"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju za dodavanje kontrola"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1022,10 +1022,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Odaberite kontrole kojima ćete pristupati iz menija napajanja"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Zadržite i prevucite kontrolu da biste je premestili"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Učitavanje liste svih kontrola nije uspelo."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Dodajte u brze kontrole"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajte u kontrole uređaja"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Dodajte u omiljene"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> predlaže da dodate ovu kontrolu u omiljene."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrole su ažurirane"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 6945010897b8..f976b36c696f 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Дазволіць"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Адладка USB не дапускаецца"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Карыстальнік, які зараз увайшоў у гэту прыладу, не можа ўключыць адладку USB. Каб выкарыстоўваць гэту функцыю, пераключыцеся на асноўнага карыстальніка."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Дазволіць бесправадную адладку ў гэтай сетцы?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Дазволіць адладку па Wi-Fi у гэтай сетцы?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Назва сеткі (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nАдрас Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Заўсёды дазваляць у гэтай сетцы"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Дазволіць"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Бесправадная адладка не дазволена"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Карыстальнік, які зараз увайшоў у гэту прыладу, не можа ўключыць бесправадную адладку. Каб выкарыстоўваць гэту функцыю, пераключыцеся на асноўнага карыстальніка."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Адладка па Wi-Fi не дазволена"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Карыстальнік, які зараз увайшоў у гэту прыладу, не можа ўключыць адладку па Wi-Fi. Каб выкарыстоўваць гэту функцыю, пераключыцеся на асноўнага карыстальніка."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Порт USB адключаны"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Порт USB адключаны, каб засцерагчы прыладу ад вадкасці і смецця, таму дадатковае абсталяванне не будзе выяўлена.\n\nВы атрымаеце апавяшчэнне, калі порт USB можна будзе выкарыстоўваць зноў."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"USB-порту дазволена вызначаць зарадныя прылады і аксесуары"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Рабіць здымкі экрана не дазваляе праграма ці ваша арганізацыя"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Адхіліць здымак экрана"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Адкрыць здымак экрана"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Праграма запісу экрана"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Запіс экрана"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Бягучае апавяшчэнне для сеанса запісу экрана"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Пачаць запіс?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Падчас запісу сістэма Android можа збіраць канфідэнцыяльную інфармацыю, якая адлюстроўваецца на экране вашай прылады ці прайграецца на ёй. Гэта могуць быць паролі, плацежная інфармацыя, фота, паведамленні і аўдыяданыя."</string>
@@ -993,7 +993,7 @@
<string name="device_services" msgid="1549944177856658705">"Сэрвісы прылады"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Без назвы"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Націсніце, каб перазапусціць гэту праграму і перайсці ў поўнаэкранны рэжым."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Налады дыялогаў у праграме \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Налады ўсплывальных апавяшчэнняў у праграме \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Кіраваць"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ад праграмы \"<xliff:g id="APP_NAME">%2$s</xliff:g>\""</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ад праграмы \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" і яшчэ <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -1007,7 +1007,7 @@
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Размаўляйце ў чаце, які паказвае ўсплывальныя апавяшчэнні"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Новыя размовы будуць паказвацца як рухомыя значкі ці ўсплывальныя апавяшчэнні. Націсніце, каб адкрыць усплывальнае апавяшчэнне. Перацягніце яго, каб перамясціць."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Кіруйце ўсплывальнымі апавяшчэннямі ў любы час"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Каб выключыць усплывальная апавяшчэнні з гэтай праграмы, націсніце \"Кіраваць\""</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Каб выключыць усплывальныя апавяшчэнні з гэтай праграмы, націсніце \"Кіраваць\""</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Зразумела"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Навігацыя ў сістэме абноўлена. Каб унесці змяненні, перайдзіце ў Налады."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Перайдзіце ў Налады, каб абнавіць параметры навігацыі ў сістэме"</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Акно-накладка з павелічэннем"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Акно павелічэння"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Налады акна павелічэння"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Элементы хуткага кіравання"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Элементы кіравання прыладай"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Дадайце элементы кіравання для падключаных прылад"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Наладзіць элементы хуткага кіравання"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Наладзіць элементы кіравання прыладай"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Для доступу да элементаў кіравання ўтрымлівайце кнопку сілкавання націснутай"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Выберыце праграму для дадавання элементаў кіравання"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Сродкі кіравання"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Выберыце элементы кіравання, да якіх вы хочаце мець доступ з меню сілкавання"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Каб перамясціць элемент кіравання, перацягніце яго"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Не ўдалося загрузіць спіс усіх сродкаў кіравання."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Іншае"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Дадаць у хуткае кіраванне"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Дадаць у элементы кіравання прыладай"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Дадаць у абраныя"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> прапануе дадаць гэты элемент кіравання ў вашы абраныя."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Элементы кіравання абноўлены"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index d350c407929c..d838c2bf9860 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Правенето на екранни снимки не е разрешено от приложението или организацията ви"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Отхвърляне на екранната снимка"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Отваряне на екранната снимка"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Записване на екрана"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Запис на екрана"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Текущо известие за сесия за записване на екрана"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Да се стартира ли записът?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"По време на записване системата Android може да прихване поверителна информация, която е показана на екрана или възпроизвеждана на устройството ви. Това включва пароли, данни за плащане, снимки, съобщения и аудио."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Прозорец с наслагване за ниво на мащаба"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Прозорец за ниво на мащаба"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Контроли за прозореца за ниво на мащаба"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Бързи контроли"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за устройството"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Добавяне на контроли за свързаните ви устройства"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Настройване на бързи контроли"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Настройване на контролите за устройството"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Задръжте бутона за захранване, за да осъществите достъп до контролите"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Изберете приложение, за да добавите контроли"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Избиране на контроли, които да са достъпни в менюто за захранване"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Задръжте и плъзнете дадена контрола, за да я преместите"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Списъкът с всички контроли не бе зареден."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друго"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Добавяне към бързите контроли"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Добавяне към контролите за устройството"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Добавяне в любимите"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> предложи тази контрола да се добави към любимите ви."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Контролите са актуализирани"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 047d00bfc962..095bee6e67ca 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -993,7 +993,7 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"নিচে বাঁদিকে সরান"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"নিচে ডান দিকে সরান"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"খারিজ করুন"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"কথোপকথন বাবল হিসেবে দেখাবেন না"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"কথোপকথন বাবল হিসেবে দেখাবে না"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"বাবল ব্যবহার করে চ্যাট করুন"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"নতুন কথোপকথন ভেসে থাকা আইকন বা বাবল হিসেবে দেখানো হয়। বাবল খুলতে ট্যাপ করুন। সেটি সরাতে ধরে টেনে আনুন।"</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"যেকোনও সময় বাবল নিয়ন্ত্রণ করুন"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"ওভারলে উইন্ডো বড় করে দেখা"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"উইন্ডো বড় করে দেখা"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"উইন্ডো কন্ট্রোল বড় করে দেখা"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"দ্রুত কন্ট্রোল"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ডিভাইস কন্ট্রোল"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"আপনার কানেক্ট করা ডিভাইসের জন্য কন্ট্রোল যোগ করুন"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"দ্রুত কন্ট্রোল সেট-আপ করুন"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ডিভাইস কন্ট্রোল সেট-আপ করুন"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"আপনার কন্ট্রোল অ্যাক্সেস করতে পাওয়ার বোতাম ধরে থাকুন"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"কন্ট্রোল যোগ করতে অ্যাপ বেছে নিন"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্রণ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"যেসব কন্ট্রোল অ্যাক্সেস করতে চান সেগুলি পাওয়ার মেনু থেকে বেছে নিন"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"কন্ট্রোল সরাতে সেটি ধরে টেনে আনুন"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"সব কন্ট্রোলের তালিকা লোড করা যায়নি।"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"কুইক কন্ট্রোলে যোগ করুন"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ডিভাইস কন্ট্রোলে যোগ করুন"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"পছন্দসইতে যোগ করুন"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"আপনার পছন্দসইতে যোগ করতে <xliff:g id="APP">%s</xliff:g> এই কন্ট্রোল সাজেস্ট করেছে।"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"কন্ট্রোল আপডেট করা হয়েছে"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 76b46de18e9c..6d05242352fe 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -1012,9 +1012,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Preklopni prozor za uvećavanje"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Prozor za uvećavanje"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontrole prozora za uvećavanje"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Brze kontrole"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Dodavanje kontrola za povezane uređaje"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Postavite brze kontrole"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Postavite kontrole uređaja"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Držite dugme za uključivanje da pristupite kontrolama"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju da dodate kontrole"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1024,10 +1024,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izaberite kontrole za pristup iz menija napajanja"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Zadržite i prevucite kontrolu da je premjestite"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Učitavanje liste svih kontrola nije uspjelo."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Dodajte u brze kontrole"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajte u kontrole uređaja"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Dodajte u omiljeno"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Aplikacija <xliff:g id="APP">%s</xliff:g> je predložila da se ova kontrola doda u omiljeno."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrole su ažurirane"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 04e053d9ba03..638282d75722 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -500,7 +500,7 @@
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Redueix el rendiment i l\'ús de les dades en segon pla."</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Desactiva l\'estalvi de bateria"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tindrà accés a tota la informació que es veu en pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara contrasenyes, detalls dels pagaments, fotos, missatges i àudio."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servei que ofereix aquesta funció tindrà accés a tota la informació que es veu en pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara contrasenyes, detalls dels pagaments, fotos, missatges i àudio."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servei que ofereix aquesta funció tindrà accés a tota la informació visible a la teva pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara contrasenyes, detalls dels pagaments, fotos, missatges i àudio que reprodueixis."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vols començar a gravar o emetre contingut?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Vols començar a gravar o emetre contingut amb <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"No ho tornis a mostrar"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Finestra superposada d\'ampliació"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Finestra d\'ampliació"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Finestra de controls d\'ampliació"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controls ràpids"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controls del dispositiu"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Afegeix controls per als teus dispositius connectats"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configura els controls ràpids"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configura els controls del dispositiu"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Mantén el botó d\'engegada premut per accedir als teus controls"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Selecciona l\'aplicació per afegir controls"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Selecciona els controls per accedir-hi des del menú d\'engegada"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Mantén premut i arrossega un control per moure\'l"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"No s\'ha pogut carregar la llista completa de controls."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altres"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Afegeix als controls ràpids"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Afegeix als controls del dispositiu"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Afegeix als preferits"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ha suggerit aquest control perquè l\'afegeixis als preferits."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"S\'han actualitzat els controls"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 6c356a947dc3..c5192825073c 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikace nebo organizace zakazuje pořizování snímků obrazovky"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Zavřít snímek obrazovky"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Otevřít snímek obrazovky"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Nahrávání obrazovky"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Rekordér obrazovky"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Trvalé oznámení o relaci nahrávání"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Spustit nahrávání?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Při nahrávání může systém Android zaznamenávat citlivé údaje, které jsou viditelné na obrazovce nebo které jsou přehrávány na zařízení. Týká se to hesel, údajů o platbě, fotek, zpráv a zvuků."</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Překryvné zvětšovací okno"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Zvětšovací okno"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Ovládací prvky zvětšovacího okna"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Rychlé ovládací prvky"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Ovládací prvky zařízení"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Přidejte ovládací prvky pro připojená zařízení"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Nastavení rychlých ovládacích prvků"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Nastavení ovládacích prvků zařízení"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Podržením vypínače zobrazíte ovládací prvky"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Vyberte aplikaci, pro kterou chcete přidat ovládací prvky"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládací prvky"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vyberte ovládací prvky, které budou zobrazeny v nabídce vypínače"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Ovládací prvek přesunete přetáhnutím"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Načtení seznamu všech ovládacích prvků se nezdařilo."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Jiné"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Přidat do rychlých ovládacích prvků"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Přidání ovládacích prvků zařízení"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Přidat k oblíbeným"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Aplikace <xliff:g id="APP">%s</xliff:g> navrhuje přidat tento ovládací prvek do oblíbených."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Ovládací prvky aktualizovány"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 82e554b16e77..c6dac99d3989 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller din organisation tillader ikke, at du tager screenshots"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Luk screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Åbn screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Skærmoptager"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Skærmoptagelse"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Konstant notifikation om skærmoptagelse"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Vil du starte optagelse?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Når du optager, kan Android-systemet registrere følsomme oplysninger, der er synlige på din skærm, eller som afspilles på din enhed. Dette inkluderer adgangskoder, betalingsoplysninger, fotos, meddelelser og lyd."</string>
@@ -597,7 +597,7 @@
<string name="screen_pinning_toast" msgid="2083944237147005811">"Hold knapperne Tilbage og Oversigt nede for at frigøre skærmen"</string>
<string name="screen_pinning_toast_recents_invisible" msgid="6343770487795352573">"Hold knapperne Tilbage og Hjem nede for at frigøre skærmen"</string>
<string name="screen_pinning_toast_gesture_nav" msgid="2884536903398445645">"Stryg opad, og hold fingeren nede for at frigøre denne skærm"</string>
- <string name="screen_pinning_positive" msgid="3285785989665266984">"OK, det er forstået"</string>
+ <string name="screen_pinning_positive" msgid="3285785989665266984">"OK"</string>
<string name="screen_pinning_negative" msgid="6882816864569211666">"Nej tak"</string>
<string name="screen_pinning_start" msgid="5695091877402422575">"Skærmen blev fastgjort"</string>
<string name="screen_pinning_exit" msgid="5114993350662745840">"Skærmen blev frigjort"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Vindue med overlejret forstørrelse"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Vindue med forstørrelse"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Vindue med forstørrelsesstyring"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Hurtig betjening"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Styring af enheder"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Tilføj betjeningselementer på dine tilsluttede enheder"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Konfigurer hurtig betjening"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Konfigurer styring af enheder"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hold afbryderknappen nede for at få adgang til dine betjeningselementer"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Vælg en app for at tilføje betjeningselementer"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1015,11 +1015,14 @@
<item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> styringselementer er tilføjet.</item>
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Betjeningselementer"</string>
- <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vælg, hvilke betjeningselementer der skal være adgang til fra afbryderknappens menu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hold et betjeningselement nede, og træk for at flytte det"</string>
+ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vælg, hvilke indstillinger der skal være i menuen for afbryderknappen"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Listen over styringselementer kunne ikke indlæses."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Andre"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Føj til Hurtig betjening"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Føj til styring af enheder"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Føj til favoritter"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> har foreslået, at du føjer denne funktion til dine favoritter."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Betjeningselementerne er opdateret"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 46733b0f86d0..842689509317 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Erlauben"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB-Debugging nicht zulässig"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Der momentan auf diesem Gerät angemeldete Nutzer kann das USB-Debugging nicht aktivieren. Um diese Funktion verwenden zu können, wechsle zum primären Nutzer."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Kabelloses Debugging in diesem Netzwerk zulassen?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"\"Debugging über WLAN\" in diesem Netzwerk zulassen?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Netzwerkname (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWLAN-Adresse (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Immer in diesem Netzwerk zulassen"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Zulassen"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Kabelloses Debugging nicht zulässig"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Der momentan auf diesem Gerät angemeldete Nutzer kann das kabellose Debugging nicht aktivieren. Um diese Funktion verwenden zu können, wechsle zum Hauptnutzer."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"\"Debugging über WLAN\" nicht zulässig"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Der momentan auf diesem Gerät angemeldete Nutzer kann \"Debugging über WLAN\" nicht aktivieren. Um diese Funktion verwenden zu können, wechsle zum Hauptnutzer."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB-Port deaktiviert"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Zum Schutz deines Geräts vor Flüssigkeiten oder Fremdkörpern ist der USB-Port zurzeit deaktiviert und erkennt kein Zubehör.\n\nDu wirst benachrichtigt, wenn der USB-Port wieder verwendet werden kann."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Erkennung von Ladegeräten und Zubehör am USB-Port aktiviert"</string>
@@ -168,7 +168,7 @@
<string name="biometric_dialog_failed_attempts_now_wiping_device" msgid="6585503524026243042">"Zu viele Fehlversuche. Die Daten auf diesem Gerät werden gelöscht."</string>
<string name="biometric_dialog_failed_attempts_now_wiping_user" msgid="7015008539146949115">"Zu viele Fehlversuche. Dieser Nutzer wird vom Gerät entfernt."</string>
<string name="biometric_dialog_failed_attempts_now_wiping_profile" msgid="5239378521440749682">"Zu viele Fehlversuche. Dieses Arbeitsprofil und die zugehörigen Daten werden gelöscht."</string>
- <string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Ablehnen"</string>
+ <string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Schließen"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Berühre den Fingerabdrucksensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Fingerabdruck-Symbol"</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"Wir suchen nach dir…"</string>
@@ -508,7 +508,7 @@
<string name="manage_notifications_text" msgid="6885645344647733116">"Verwalten"</string>
<string name="manage_notifications_history_text" msgid="57055985396576230">"Verlauf"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Lautlose Benachrichtigungen"</string>
- <string name="notification_section_header_alerting" msgid="3168140660646863240">"Nicht stummgeschaltete Benachrichtigungen"</string>
+ <string name="notification_section_header_alerting" msgid="3168140660646863240">"Laut gestellte Benachrichtigungen"</string>
<string name="notification_section_header_conversations" msgid="821834744538345661">"Unterhaltungen"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Alle lautlosen Benachrichtigungen löschen"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"Benachrichtigungen durch \"Bitte nicht stören\" pausiert"</string>
@@ -704,7 +704,7 @@
<string name="inline_keep_showing_app" msgid="4393429060390649757">"Benachrichtigungen dieser App weiterhin anzeigen?"</string>
<string name="notification_silence_title" msgid="8608090968400832335">"Lautlos"</string>
<string name="notification_alert_title" msgid="7629202599338071971">"Benachrichtigen"</string>
- <string name="notification_bubble_title" msgid="8330481035191903164">"Infofeld"</string>
+ <string name="notification_bubble_title" msgid="8330481035191903164">"Bubble"</string>
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Benachrichtigungen werden ohne Ton oder Vibration angekündigt, um deine Konzentration nicht zu stören."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Benachrichtigungen werden mit einem Ton oder einer Vibration angekündigt."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Du wirst mit einer unverankerten Verknüpfung darauf aufmerksam gemacht."</string>
@@ -740,8 +740,8 @@
<string name="notification_conversation_unfavorite" msgid="181383708304763807">"Keine wichtige Unterhaltung"</string>
<string name="notification_conversation_mute" msgid="268951550222925548">"Stummgeschaltet"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Nicht stummgeschaltet"</string>
- <string name="notification_conversation_bubble" msgid="2242180995373949022">"Infofeld anzeigen"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Infofelder entfernen"</string>
+ <string name="notification_conversation_bubble" msgid="2242180995373949022">"Bubble anzeigen"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Bubbles entfernen"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Zum Startbildschirm hinzufügen"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"Benachrichtigungseinstellungen"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Overlay-Vergrößerungsfenster"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Vergrößerungsfenster"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Einstellungen für Vergrößerungsfenster"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Schnellsteuerung"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Gerätesteuerung"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Karten für deine verbundenen Geräte hinzufügen"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Schnellsteuerung einrichten"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Gerätesteuerung einrichten"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Halte die Ein-/Aus-Taste gedrückt, um auf die Steuerelemente zuzugreifen."</string>
<string name="controls_providers_title" msgid="6879775889857085056">"App zum Hinzufügen von Steuerelementen auswählen"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1015,11 +1015,14 @@
<item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> Steuerelement hinzugefügt.</item>
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Steuerelemente"</string>
- <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Karten auswählen, auf die über das Menü \"Ein/Aus\" zugegriffen werden kann"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Zum Verschieben einer Gerätekarte Karte halten und ziehen"</string>
+ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Karten auswählen, auf die man über das Ein-/Aus-Menü zugreifen kann"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Fehler beim Laden der Liste mit Steuerelementen."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Andere"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Zum Kartenbereich hinzufügen"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Zur Gerätesteuerung hinzufügen"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Zu Favoriten hinzufügen"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"\"<xliff:g id="APP">%s</xliff:g>\" hat vorgeschlagen, dieses Steuerelement deinen Favoriten hinzuzufügen."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Gerätekarten aktualisiert"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index a745c8ca55ac..dc026e4e156a 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Να επιτρέπεται"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Δεν επιτρέπεται ο εντοπισμός σφαλμάτων USB"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Ο χρήστης που είναι συνδεδεμένος αυτήν τη στιγμή σε αυτήν τη συσκευή δεν μπορεί να ενεργοποιήσει τον εντοπισμό σφαλμάτων USB. Για να χρησιμοποιήσετε αυτήν τη λειτουργία, κάντε εναλλαγή στον κύριο χρήστη."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Να επιτρέπεται ο εντοπισμός σφαλμάτων μέσω ασύρματης σύνδεσης σε αυτό το δίκτυο;"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Να επιτρέπεται ο ασύρματος εντοπισμός σφαλμάτων σε αυτό το δίκτυο;"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Όνομα δικτύου (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nΔιεύθυνση Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Να επιτρέπεται πάντα σε αυτό το δίκτυο"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Να επιτρέπεται"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Ο εντοπισμός σφαλμάτων μέσω ασύρματης σύνδεσης δεν επιτρέπεται"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Ο χρήστης που είναι συνδεδεμένος αυτήν τη στιγμή στη συγκεκριμένη συσκευή δεν μπορεί να ενεργοποιήσει τον εντοπισμό σφαλμάτων μέσω ασύρματης σύνδεσης. Για να χρησιμοποιήσετε αυτήν τη λειτουργία, κάντε εναλλαγή στον κύριο χρήστη."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Ο ασύρματος εντοπισμός σφαλμάτων δεν επιτρέπεται"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Ο χρήστης που είναι συνδεδεμένος αυτήν τη στιγμή στη συγκεκριμένη συσκευή δεν μπορεί να ενεργοποιήσει τον ασύρματο εντοπισμό σφαλμάτων. Για να χρησιμοποιήσετε αυτήν τη λειτουργία, κάντε εναλλαγή στον κύριο χρήστη."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Η θύρα USB απενεργοποιήθηκε"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Για την προστασία της συσκευής σας από υγρασία ή ακαθαρσίες, η θύρα USB έχει απενεργοποιηθεί και δεν θα εντοπίζει τυχόν αξεσουάρ.\n\nΘα ειδοποιηθείτε όταν θα μπορείτε να χρησιμοποιήσετε ξανά τη θύρα USB."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Η θύρα USB ενεργοποιήθηκε για τον εντοπισμό φορτιστών και αξεσουάρ"</string>
@@ -509,7 +509,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"Ιστορικό"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Ειδοποιήσεις σε σίγαση"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"Ειδοποιήσεις"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"Συνομιλίες"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"Συζητήσεις"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Διαγραφή όλων των ειδοποιήσεων σε σίγαση"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"Οι ειδοποιήσεις τέθηκαν σε παύση από τη λειτουργία \"Μην ενοχλείτε\""</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"Έναρξη τώρα"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Σας βοηθά να συγκεντρωθείτε χωρίς ήχο και δόνηση."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Τραβά την προσοχή σας με ήχο ή δόνηση."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Κρατάει την προσοχή σας με μια κινούμενη συντόμευση προς αυτό το περιεχόμενο."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Εμφανίζεται στο επάνω μέρος της ενότητας συνομιλίας ως φούσκα."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Όλες οι συνομιλίες από την εφαρμογή <xliff:g id="APP_NAME_0">%1$s</xliff:g> εμφανίζονται από προεπιλογή ως φούσκες. Διαχείριση στην εφαρμογή <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Εμφανίζεται στο επάνω μέρος της ενότητας συζήτησης ως συννεφάκι."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Όλες οι συζητήσεις από την εφαρμογή <xliff:g id="APP_NAME_0">%1$s</xliff:g> εμφανίζονται από προεπιλογή ως συννεφάκια. Διαχείριση στην εφαρμογή <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ρυθμίσεις"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Προτεραιότητα"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Δεν υπάρχουν πρόσφατες φούσκες"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Οι πρόσφατες φούσκες και οι φούσκες που παραβλέψατε θα εμφανίζονται εδώ."</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Δεν υπάρχουν πρόσφατα συννεφάκια"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Τα πρόσφατα συννεφάκια και τα συννεφάκια που παραβλέψατε θα εμφανίζονται εδώ."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Δεν είναι δυνατή η τροποποίηση αυτών των ειδοποιήσεων"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Δεν είναι δυνατή η διαμόρφωση αυτής της ομάδας ειδοποιήσεων εδώ"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Ειδοποίηση μέσω διακομιστή μεσολάβησης"</string>
@@ -993,10 +993,10 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Μετακίνηση κάτω αριστερά"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Μετακίνηση κάτω δεξιά"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Παράβλεψη"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Να μη γίνει προβολή της συνομιλίας σε φούσκες."</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Συζητήστε χρησιμοποιώντας φούσκες."</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Οι νέες συνομιλίες εμφανίζονται ως κινούμενα εικονίδια ή φούσκες. Πατήστε για να ανοίξετε τη φούσκα. Σύρετε για να το μετακινήσετε."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Ελέγξτε τις φούσκες ανά πάσα στιγμή."</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Να μην γίνει προβολή της συζήτησης σε συννεφάκια."</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Συζητήστε χρησιμοποιώντας συννεφάκια."</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Οι νέες συζητήσεις εμφανίζονται ως κινούμενα εικονίδια ή φούσκες. Πατήστε για να ανοίξετε τη φούσκα. Σύρετε για να το μετακινήσετε."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Ελέγξτε τα συννεφάκια ανά πάσα στιγμή."</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Πατήστε Διαχείριση για να απενεργοποιήσετε τα συννεφάκια από αυτήν την εφαρμογή."</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Το κατάλαβα."</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Η πλοήγηση συστήματος ενημερώθηκε. Για να κάνετε αλλαγές, μεταβείτε στις Ρυθμίσεις."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Παράθυρο επικάλυψης μεγέθυνσης"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Παράθυρο μεγέθυνσης"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Στοιχεία ελέγχου παραθύρου μεγέθυνσης"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Στοιχεία γρήγορου ελέγχου"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Στοιχεία ελέγχου συσκευής"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Προσθήκη στοιχείων ελέγχου για τις συνδεδεμένες συσκευές σας."</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Ρύθμιση στοιχείων γρήγορου ελέγχου"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Ρύθμιση στοιχείων ελέγχου συσκευής"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Κρατήστε πατημένο το κουμπί λειτουργίας, για να αποκτήσετε πρόσβαση στα στοιχεία ελέγχου"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Επιλογή εφαρμογής για προσθήκη στοιχείων ελέγχου"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Στοιχεία ελέγχου"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Επιλέξτε τα στοιχεία ελέγχου στα οποία θα έχετε πρόσβαση από το μενού λειτουργίας."</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Πατήστε παρατεταμένα και σύρετε ένα στοιχείο ελέγχου, για να το μετακινήσετε."</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Ανεπιτυχής φόρτωση λίστας όλων των στοιχ. ελέγχου."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Άλλο"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Προσθ. σε Στοιχ. γρήγ. ελέγχου"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Προσθήκη στα στοιχεία ελέγχου συσκευής"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Προσθήκη στα αγαπημένα"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> πρότεινε αυτό το στοιχείο ελέγχου για προσθήκη στα αγαπημένα."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Ενημέρωση στοιχείων ελέγχου"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 15fdaf1d1d84..bbaa283e9fe7 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Dismiss screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Open screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"While recording, Android system can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
@@ -713,7 +713,7 @@
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent Bubbles and dismissed Bubbles will appear here"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -994,9 +994,9 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Move bottom right"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Dismiss"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Don’t bubble conversation"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using Bubbles"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or Bubbles. Tap to open bubble. Drag to move it."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control Bubbles at any time"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using bubbles"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control bubbles at any time"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Tap Manage to turn off bubbles from this app"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"OK"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"System navigation updated. To make changes, go to Settings."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification overlay window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Quick controls"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Add controls for your connected devices"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Set up quick controls"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Set up device controls"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hold the Power button to access your controls"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hold and drag a control to move it"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Add to quick controls"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Add to favourites"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> suggested this control to add to your favourites."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 084d82b4f11e..55bc58288b2e 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Dismiss screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Open screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"While recording, Android system can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
@@ -713,7 +713,7 @@
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent Bubbles and dismissed Bubbles will appear here"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -994,9 +994,9 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Move bottom right"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Dismiss"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Don’t bubble conversation"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using Bubbles"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or Bubbles. Tap to open bubble. Drag to move it."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control Bubbles at any time"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using bubbles"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control bubbles at any time"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Tap Manage to turn off bubbles from this app"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"OK"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"System navigation updated. To make changes, go to Settings."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification overlay window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Quick controls"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Add controls for your connected devices"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Set up quick controls"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Set up device controls"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hold the Power button to access your controls"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hold and drag a control to move it"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Add to quick controls"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Add to favourites"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> suggested this control to add to your favourites."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 15fdaf1d1d84..bbaa283e9fe7 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Dismiss screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Open screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"While recording, Android system can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
@@ -713,7 +713,7 @@
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent Bubbles and dismissed Bubbles will appear here"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -994,9 +994,9 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Move bottom right"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Dismiss"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Don’t bubble conversation"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using Bubbles"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or Bubbles. Tap to open bubble. Drag to move it."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control Bubbles at any time"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using bubbles"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control bubbles at any time"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Tap Manage to turn off bubbles from this app"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"OK"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"System navigation updated. To make changes, go to Settings."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification overlay window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Quick controls"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Add controls for your connected devices"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Set up quick controls"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Set up device controls"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hold the Power button to access your controls"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hold and drag a control to move it"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Add to quick controls"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Add to favourites"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> suggested this control to add to your favourites."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 15fdaf1d1d84..bbaa283e9fe7 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Dismiss screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Open screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"While recording, Android system can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
@@ -713,7 +713,7 @@
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent Bubbles and dismissed Bubbles will appear here"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -994,9 +994,9 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Move bottom right"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Dismiss"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Don’t bubble conversation"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using Bubbles"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or Bubbles. Tap to open bubble. Drag to move it."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control Bubbles at any time"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat using bubbles"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Control bubbles at any time"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Tap Manage to turn off bubbles from this app"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"OK"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"System navigation updated. To make changes, go to Settings."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification overlay window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Quick controls"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Add controls for your connected devices"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Set up quick controls"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Set up device controls"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hold the Power button to access your controls"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hold and drag a control to move it"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Add to quick controls"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Add to favourites"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> suggested this control to add to your favourites."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 24628b54fdb2..046f5cd34efb 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎Magnification Overlay Window‎‏‎‎‏‎"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎Magnification Window‎‏‎‎‏‎"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎Magnification Window Controls‎‏‎‎‏‎"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎Quick controls‎‏‎‎‏‎"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎Device controls‎‏‎‎‏‎"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎Add controls for your connected devices‎‏‎‎‏‎"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎Set up quick controls‎‏‎‎‏‎"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎Set up device controls‎‏‎‎‏‎"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎Hold the Power button to access your controls‎‏‎‎‏‎"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎Choose app to add controls‎‏‎‎‏‎"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎Controls‎‏‎‎‏‎"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎Choose controls to access from the power menu‎‏‎‎‏‎"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎Hold and drag a control to move it‎‏‎‎‏‎"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎Hold &amp; drag to rearrange controls‎‏‎‎‏‎"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎All controls removed‎‏‎‎‏‎"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎The list of all controls could not be loaded.‎‏‎‎‏‎"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎Other‎‏‎‎‏‎"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎Add to quick controls‎‏‎‎‏‎"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎Add to device controls‎‏‎‎‏‎"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎Add to favorites‎‏‎‎‏‎"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ suggested this control to add to your favorites.‎‏‎‎‏‎"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎Controls updated‎‏‎‎‏‎"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 9e7bfb9a4ca7..4cc643b36a3f 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Servicios del dispositivo"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Sin título"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Presiona para reiniciar esta app y acceder al modo de pantalla completa."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Configuración para cuadros de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Configuración para burbujas de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Administrar"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> de <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> de <xliff:g id="APP_NAME">%2$s</xliff:g> y <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> más"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Ventana superpuesta de ampliación"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Ventana de ampliación"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Controles de ampliación de la ventana"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controles rápidos"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controles del dispositivo"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Agrega controles para los dispositivos conectados"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configura los controles rápidos"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurar controles del dispositivo"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Mantén presionado el botón de encendido para acceder a los controles"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Elige la app para agregar los controles"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Elige los controles a los que quieres acceder desde el menú de encendido"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Mantén presionado un control y arrástralo para moverlo"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"No se cargó la lista completa de controles."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Agregar a controles rápidos"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Agregar a controles del dispositivo"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Agregar a favoritos"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"La app <xliff:g id="APP">%s</xliff:g> sugirió que agregaras este control a favoritos."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles actualizados"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index d6700232cab9..80dca347ab06 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -28,7 +28,7 @@
<string name="battery_low_percent_format" msgid="4276661262843170964">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería"</string>
<string name="battery_low_percent_format_hybrid" msgid="3985614339605686167">"Queda un <xliff:g id="PERCENTAGE">%1$s</xliff:g> (tiempo restante aproximado según tu uso: <xliff:g id="TIME">%2$s</xliff:g>)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="5917433188456218857">"Queda un <xliff:g id="PERCENTAGE">%1$s</xliff:g> (tiempo restante aproximado: <xliff:g id="TIME">%2$s</xliff:g>)"</string>
- <string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería. Se ha activado la función Ahorro de energía."</string>
+ <string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería. Se ha activado el modo Ahorro de batería."</string>
<string name="invalid_charger" msgid="4370074072117767416">"No se puede cargar por USB. Utiliza el cargador original incluido con el dispositivo."</string>
<string name="invalid_charger_title" msgid="938685362320735167">"No se puede cargar por USB"</string>
<string name="invalid_charger_text" msgid="2339310107232691577">"Utiliza el cargador original incluido con el dispositivo"</string>
@@ -46,9 +46,9 @@
<string name="bluetooth_tethered" msgid="4171071193052799041">"Bluetooth anclado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="2972273031043777851">"Configurar métodos de entrada"</string>
<string name="status_bar_use_physical_keyboard" msgid="4849251850931213371">"Teclado físico"</string>
- <string name="usb_device_permission_prompt" msgid="4414719028369181772">"¿Quieres permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> acceda a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
+ <string name="usb_device_permission_prompt" msgid="4414719028369181772">"¿Permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> acceda a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
<string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"¿Quieres que <xliff:g id="APPLICATION">%1$s</xliff:g> pueda acceder a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicación no tiene permisos para grabar, pero podría captar audio a través de este dispositivo USB."</string>
- <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"¿Quieres permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> acceda a <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"¿Permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> acceda a <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="4091711472439910809">"¿Quieres abrir <xliff:g id="APPLICATION">%1$s</xliff:g> para utilizar <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"¿Quieres abrir <xliff:g id="APPLICATION">%1$s</xliff:g> para gestionar <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicación no tiene permisos para grabar, pero puede capturar audio mediante este dispositivo USB."</string>
<string name="usb_accessory_confirm_prompt" msgid="5728408382798643421">"¿Quieres abrir <xliff:g id="APPLICATION">%1$s</xliff:g> para utilizar <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
@@ -499,20 +499,20 @@
<string name="battery_saver_notification_title" msgid="8419266546034372562">"Ahorro de batería activado"</string>
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Reduce el rendimiento y los datos en segundo plano"</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Desactivar Ahorro de batería"</string>
- <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que se muestra en pantalla o se reproduce en el dispositivo mientras grabas o envías contenido, incluyendo contraseñas, detalles de pagos, fotos, mensajes y audios que reproduzcas."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servicio que ofrece esta función tendrá acceso a toda la información que se muestra en pantalla o se reproduce en el dispositivo mientras grabas o envías contenido, incluyendo contraseñas, detalles de pagos, fotos, mensajes y audios que reproduzcas."</string>
- <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"¿Quieres empezar a grabar o enviar contenido?"</string>
+ <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que se muestre en pantalla o se reproduzca en el dispositivo mientras grabas o envías contenido, incluyendo contraseñas, detalles de pagos, fotos, mensajes y audios que reproduzcas."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servicio que ofrece esta función tendrá acceso a toda la información que se muestre en pantalla o se reproduzca en el dispositivo mientras grabas o envías contenido, incluyendo contraseñas, detalles de pagos, fotos, mensajes y audios que reproduzcas."</string>
+ <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"¿Empezar a grabar o enviar contenido?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"¿Quieres iniciar la grabación o el envío de contenido con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"No volver a mostrar"</string>
<string name="clear_all_notifications_text" msgid="348312370303046130">"Borrar todo"</string>
<string name="manage_notifications_text" msgid="6885645344647733116">"Gestionar"</string>
<string name="manage_notifications_history_text" msgid="57055985396576230">"Historial"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Notificaciones silenciadas"</string>
- <string name="notification_section_header_alerting" msgid="3168140660646863240">"Notificaciones que alertan"</string>
+ <string name="notification_section_header_alerting" msgid="3168140660646863240">"Notificaciones de alerta"</string>
<string name="notification_section_header_conversations" msgid="821834744538345661">"Conversaciones"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Borrar todas las notificaciones silenciadas"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"Notificaciones pausadas por el modo No molestar"</string>
- <string name="media_projection_action_text" msgid="3634906766918186440">"Iniciar ahora"</string>
+ <string name="media_projection_action_text" msgid="3634906766918186440">"Empezar ahora"</string>
<string name="empty_shade_text" msgid="8935967157319717412">"No hay notificaciones"</string>
<string name="profile_owned_footer" msgid="2756770645766113964">"Es posible que se supervise el perfil"</string>
<string name="vpn_footer" msgid="3457155078010607471">"Puede que la red esté supervisada"</string>
@@ -638,7 +638,7 @@
<string name="output_service_bt_wifi" msgid="7186882540475524124">"Bluetooth y Wi‑Fi"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Configurador de UI del sistema"</string>
<string name="show_battery_percentage" msgid="6235377891802910455">"Mostrar porcentaje de batería insertado"</string>
- <string name="show_battery_percentage_summary" msgid="9053024758304102915">"Mostrar el porcentaje del nivel de batería en el icono de la barra de estado cuando no se esté cargando"</string>
+ <string name="show_battery_percentage_summary" msgid="9053024758304102915">"Muestra el porcentaje del nivel de batería en el icono de la barra de estado cuando no se esté cargando"</string>
<string name="quick_settings" msgid="6211774484997470203">"Ajustes rápidos"</string>
<string name="status_bar" msgid="4357390266055077437">"Barra de estado"</string>
<string name="overview" msgid="3522318590458536816">"Aplicaciones recientes"</string>
@@ -965,7 +965,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"No tendrás conexión a Internet ni de datos móviles a través de <xliff:g id="CARRIER">%s</xliff:g>. Solo podrás conectarte a Internet mediante una red Wi‑Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"tu operador"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Una aplicación impide ver una solicitud de permiso, por lo que Ajustes no puede verificar tu respuesta."</string>
- <string name="slice_permission_title" msgid="3262615140094151017">"¿Quieres permitir que <xliff:g id="APP_0">%1$s</xliff:g> muestre fragmentos de <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
+ <string name="slice_permission_title" msgid="3262615140094151017">"¿Permitir que <xliff:g id="APP_0">%1$s</xliff:g> muestre fragmentos de <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- Puede leer información de <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="slice_permission_text_2" msgid="6758906940360746983">"- Puede realizar acciones en <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="slice_permission_checkbox" msgid="4242888137592298523">"Permitir que <xliff:g id="APP">%1$s</xliff:g> muestre fragmentos de cualquier aplicación"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Ventana de superposición de ampliación"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Ventana de ampliación"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Ventana de controles de ampliación"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controles rápidos"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controles del dispositivo"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Añade controles a tus dispositivos conectados"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurar controles rápidos"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurar controles del dispositivo"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Mantén pulsado el botón de encendido para acceder a tus controles"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Elige una aplicación para añadir controles"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Elige los controles a los que acceder desde el menú de encendido"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Pulsa y arrastra un control para moverlo"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"No se ha podido cargar la lista de los controles."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Añadir a controles rápidos"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Añadir a controles del dispositivo"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Añadir a favoritos"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"La aplicación <xliff:g id="APP">%s</xliff:g> ha sugerido este control para que lo añadas a tus favoritos."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles actualizados"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 5ee56bf92163..aab46930286a 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Rakendus või teie organisatsioon ei luba ekraanipilte jäädvustada"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Sule ekraanipilt"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Ava ekraanipilt"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Ekraanikuva salvesti"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Ekraanisalvesti"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Pooleli märguanne ekraanikuva salvestamise seansi puhul"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Kas alustada salvestamist?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Heli salvestamise ajal võib Androidi süsteem jäädvustada tundlikku teavet, mis on ekraanikuval nähtav või mida seadmes esitatakse. See hõlmab paroole, makseteavet, fotosid, sõnumeid ja heli."</string>
@@ -962,7 +962,7 @@
<string name="running_foreground_services_title" msgid="5137313173431186685">"Rakendusi käitatakse taustal"</string>
<string name="running_foreground_services_msg" msgid="3009459259222695385">"Aku ja andmekasutuse üksikasjade nägemiseks puudutage"</string>
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Kas lülitada mobiilne andmeside välja?"</string>
- <string name="mobile_data_disable_message" msgid="8604966027899770415">"Teil ei ole operaatori <xliff:g id="CARRIER">%s</xliff:g> kaudu juurdepääsu andmesidele ega Internetile. Internet on saadaval ainult WiFi kaudu."</string>
+ <string name="mobile_data_disable_message" msgid="8604966027899770415">"Pärast seda pole teil operaatori <xliff:g id="CARRIER">%s</xliff:g> kaudu juurdepääsu andmesidele ega internetile. Internet on saadaval ainult WiFi kaudu."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"teie operaator"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Seaded ei saa teie vastust kinnitada, sest rakendus varjab loataotlust."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"Kas lubada rakendusel <xliff:g id="APP_0">%1$s</xliff:g> näidata rakenduse <xliff:g id="APP_2">%2$s</xliff:g> lõike?"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Suurendamisakna ülekate"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Suurendamisaken"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Suurendamisakna juhtelemendid"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Kiirnupud"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Seadme juhtelemendid"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Lisage juhtelemendid ühendatud seadmete jaoks"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Kiirnuppude seadistamine"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Seadme juhtelementide seadistamine"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Juhtelementidele juurdepääsemiseks hoidke all toitenuppu"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Valige juhtelementide lisamiseks rakendus"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Juhtnupud"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Valige toitemenüüs saadaolevad juhtelemendid"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hoidke ja lohistage juhtelementi, et seda liigutada"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Kõikide juhtelementide loendit ei saanud laadida."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Muu"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Lisa kiirnuppude hulka"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Seadme juhtelementide hulka lisamine"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Lisa lemmikutesse"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> soovitas selle juhtnupu teie lemmikutesse lisada."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Juhtelemente värskendati"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 1688fc324a05..56c2f7c26016 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -68,7 +68,7 @@
<string name="wifi_debugging_always" msgid="2968383799517975155">"Onartu beti sare honetan"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Baimendu"</string>
<string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Ez da onartzen hari gabeko arazketa"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Gailu honetan saioa hasita daukan erabiltzaileak ezin du aktibatu hari gabeko bidezko arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Gailu honetan saioa hasita daukan erabiltzaileak ezin du aktibatu hari gabeko arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Desgaitu egin da USB ataka"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"USB ataka desgaitu egin da gailua likido edo zikinkeriengandik babesteko, eta ez du hautemango osagarririk.\n\nJakinarazpen bat jasoko duzu USB ataka berriz erabiltzeko moduan dagoenean."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"USB ataka gaitu da kargagailuak eta osagarriak hautemateko"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Lupa-leiho gainjarria"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Lupa-leihoa"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Lupa-leihoaren aukerak"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Kontrolatzeko aukera bizkorrak"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Gailua kontrolatzeko aukerak"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Gehitu kontrolatzeko aukerak konektatutako gailuetan"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Konfiguratu kontrolatzeko aukera bizkorrak"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Konfiguratu gailua kontrolatzeko aukerak"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Kontrol-aukerak atzitzeko, eduki sakatuta etengailua"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Aukeratu aplikazio bat kontrolatzeko aukerak gehitzeko"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1015,11 +1015,14 @@
<item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontrol-aukera gehitu da.</item>
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolatzeko aukerak"</string>
- <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Aukeratu pizteko menutik atzitu nahi dituzun kontrolatzeko aukerak"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Kontrolatzeko aukera bat mugitzeko, eduki ezazu sakatuta, eta arrastatu"</string>
+ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Aukeratu itzaltzeko menutik atzitu nahi dituzun kontrolatzeko aukerak"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Ezin izan da kargatu kontrol guztien zerrenda."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Beste bat"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Gehitu kontrolatzeko aukera bizkorretan"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Gehitu gailua kontrolatzeko aukeretan"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Gehitu gogokoetan"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> aplikazioak aukera hau gogokoetan gehitzea iradoki du."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Eguneratu dira kontrolatzeko aukerak"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index e719c538ca81..a343bdf42ef2 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"پنجره همپوشانی بزرگ‌نمایی"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"پنجره بزرگ‌نمایی"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"کنترل‌های پنجره بزرگ‌نمایی"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"کنترل‌های سریع"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"کنترل‌های دستگاه"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"افزودن کنترل‌ها برای دستگاه‌های متصل"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"راه‌اندازی کنترل‌های سریع"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"تنظیم کنترل‌های دستگاه"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"دکمه روشن/خاموش را نگه دارید تا به کنترل‌ها دسترسی پیدا کنید"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"انتخاب برنامه برای افزودن کنترل‌ها"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"کنترل‌ها"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"برای دسترسی از منوی روشن/خاموش، کنترل‌ها را انتخاب کنید"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"برای جابه‌جایی کنترل، آن را نگه دارید و بکشید"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"فهرست همه کنترل‌ها را نمی‌توان بارگیری کرد."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"موارد دیگر"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"افزودن به «کنترل‌های سریع»"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"افزودن به کنترل‌های دستگاه"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"افزودن به موارد دلخواه"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> پیشنهاد می‌کند این کنترل به موارد دلخواهتان اضافه شود."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"کنترل‌ها به‌روزرسانی شد"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index b71fc5309b54..c082c75788a3 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Kaikki sovelluksen <xliff:g id="APP_NAME_0">%1$s</xliff:g> keskustelut näytetään oletuksena kuplina. Muuta asetuksia sovelluksessa <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Asetukset"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Tärkeä"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ei viimeaikaisia ohjekuplia"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ei viimeaikaisia kuplia"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viimeaikaiset ja äskettäin ohitetut kuplat näkyvät täällä"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Näitä ilmoituksia ei voi muokata"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Tätä ilmoitusryhmää ei voi määrittää tässä"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Mykistetty"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Hälyttää"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Näytä ohjekuplana"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Poista ohjekuplat"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Poista kuplat"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Lisää aloitusnäytölle"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"Ilmoitusten hallinta"</string>
@@ -997,7 +997,7 @@
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Chattaile kuplien avulla"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Uudet keskustelut näkyvät kelluvina kuvakkeina tai kuplina. Avaa kupla napauttamalla. Siirrä sitä vetämällä."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Muuta kuplien asetuksia milloin tahansa"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Valitse Hallinnoi, jos haluat poistaa ohjekuplat käytöstä tästä sovelluksesta"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Valitse Hallinnoi, jos haluat poistaa kuplat käytöstä tästä sovelluksesta"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Selvä"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Järjestelmän navigointitapa vaihdettu. Voit muuttaa sitä asetuksista."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Vaihda järjestelmän navigointitapaa asetuksista"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Suurennuksen peittoikkuna"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Suurennusikkuna"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Suurennusikkunan ohjaimet"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Pikasäätimet"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Laitteen säätimet"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Lisää säätimiä yhdistettyihin laitteisiisi"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Ota pikasäätimet käyttöön"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Laitteen säätimien käyttöönotto"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Voit käyttää säätimiä painamalla virtapainiketta"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Valitse sovellus lisätäksesi säätimiä"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Säätimet"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Valitse säätimet, joita käytetään virtavalikosta"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Siirrä säädintä painamalla sitä pitkään ja vetämällä"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Kaikkien säätimien luetteloa ei voitu ladata."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Muu"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Lisää pikasäätimiin"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Lisää laitteen säätimiin"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Lisää suosikkeihin"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ehdotti tämän säätimen lisäämistä suosikkeihisi."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Säätimet päivitetty"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index bd86b0841a29..82879f188f19 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -500,7 +500,7 @@
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Réduire les performances et de fond"</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Désactiver la fonction Économie d\'énergie"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aura accès à toute l\'information visible sur votre écran ou qui joue sur votre appareil durant l\'enregistrement ou la diffusion. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et l\'audio que vous faites jouer."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Le service offrant cette fonction aura accès à toute l\'information visible sur votre écran ou qui joue sur votre appareil durant l\'enregistrement ou la diffusion. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et l\'audio que vous faites jouer."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Le service offrant cette fonction aura accès à toute l\'information qui est visible sur votre écran ou sur ce qui joue sur votre appareil durant l\'enregistrement ou la diffusion. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et le contenu audio que vous faites jouer."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Commencer à enregistrer ou à diffuser?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Commencer à enregistrer ou à diffuser avec <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"Ne plus afficher"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Fenêtre d\'agrandissement superposée"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Fenêtre d\'agrandissement"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Commandes pour la fenêtre d\'agrandissement"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Commandes rapides"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Commandes de l\'appareil"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Ajoutez des commandes pour vos appareils connectés"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurer les commandes rapides"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurer les commandes de l\'appareil"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Maintenez l\'interrupteur enfoncé pour accéder à vos commandes"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'application pour laquelle ajouter des commandes"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Sélectionnez les commandes auxquelles vous souhaitez accéder à partir du menu de l\'interrupteur"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Maintenez le doigt sur une commande et faites-la glisser pour la déplacer"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Maintenez le doigt sur l\'écran, puis glissez-le pour réorganiser les commandes"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Impossible de charger la liste des commandes."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Autre"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Ajouter aux commandes rapides"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Ajouter aux commandes de l\'appareil"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Ajouter aux favoris"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"L\'application <xliff:g id="APP">%s</xliff:g> a suggéré d\'ajouter cette commande à vos favoris."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Commandes mises à jour"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 4b78d1680cbc..4193499de4e4 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Autoriser"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Débogage USB non autorisé"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"L\'utilisateur actuellement connecté sur cet appareil ne peut pas activer le débogage USB. Pour utiliser cette fonctionnalité, l\'utilisateur principal doit se connecter."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Autoriser le débogage via Wi-Fi sur ce réseau ?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Autoriser le débogage sans fil sur ce réseau ?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Nom du réseau (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nAdresse Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Toujours autoriser sur ce réseau"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Autoriser"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Débogage via Wi-Fi non autorisé"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"L\'utilisateur actuellement connecté sur cet appareil ne peut pas activer le débogage via Wi-Fi. Pour que cette fonctionnalité soit disponible, l\'utilisateur principal doit se connecter."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Débogage sans fil non autorisé"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"L\'utilisateur actuellement connecté sur cet appareil ne peut pas activer le débogage sans fil. Pour que cette fonctionnalité soit disponible, l\'utilisateur principal doit se connecter."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Port USB désactivé"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Pour protéger votre appareil des liquides et des saletés, le port USB est désactivé et ne détecte plus les accessoires.\n\nVous recevrez une notification lorsque vous pourrez de nouveau utiliser le port USB."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Port USB activé pour détecter les chargeurs et les accessoires"</string>
@@ -500,7 +500,7 @@
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Limite les performances et les données en arrière-plan."</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Désactiver l\'économiseur de batterie"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aura accès à toutes les informations visibles sur votre écran ou lues depuis votre appareil lors d\'un enregistrement ou d\'une diffusion de contenu. Par exemple, vos mots de passe, vos données de paiement, vos photos, vos messages ou encore vos contenus audio lus."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Le service fournissant cette fonctionnalité aura accès à toutes les informations visibles sur votre écran ou lues depuis votre appareil lors d\'un enregistrement ou d\'une diffusion de contenu. Par exemple, vos mots de passe, vos données de paiement, vos photos, vos messages ou encore vos contenus audio lus."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Le service qui fournit cette fonction aura accès à toutes les informations visibles sur votre écran ou lues depuis votre appareil lors d\'un enregistrement ou d\'une diffusion de contenu. Cela comprend, entre autres, vos mots de passe, vos données de paiement, vos photos, vos messages ou encore les contenus audio que vous lisez."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Démarrer l\'enregistrement ou la diffusion ?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Démarrer l\'enregistrement ou la diffusion avec <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"Ne plus afficher"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Sans sons ni vibrations, vous aide à vous concentrer."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Attire votre attention à l\'aide de sons ou de vibrations."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Attire votre attention à l\'aide d\'un raccourci flottant vers ce contenu."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"S\'affiche en haut de la section des conversations sous forme de bulle."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Par défaut, toutes les conversations <xliff:g id="APP_NAME_0">%1$s</xliff:g> s\'affichent sous forme de bulles. Gérer dans <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"S\'affiche en haut de la section des conversations et apparaît sous forme de bulle."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Par défaut, toutes les conversations <xliff:g id="APP_NAME_0">%1$s</xliff:g> s\'affichent sous forme de bulles. Vous pouvez gérer cela dans <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Paramètres"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritaire"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Aucune bulle récente"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bulles récentes et fermées s\'afficheront ici"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bulles récentes et ignorées s\'afficheront ici"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossible de modifier ces notifications."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Vous ne pouvez pas configurer ce groupe de notifications ici"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Notification de proxy"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"En silencieux"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Réactiver le son"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Afficher sous forme de bulle"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Désactiver l\'affichage sous forme de bulle"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Désactiver l\'affichage sous forme de bulles"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ajouter à l\'écran d\'accueil"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> : <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"paramètres des notifications"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Déplacer en bas à gauche"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Déplacer en bas à droite"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Ignorer"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Ne pas afficher les conversations dans des bulles"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Ne pas afficher la conversations dans des bulles"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Chatter en utilisant des bulles"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Les nouvelles conversations s\'affichent sous forme d\'icônes flottantes ou bulles. Appuyez sur la bulle pour l\'ouvrir. Faites-la glisser pour la déplacer."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Contrôler les paramètres des bulles"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Appuyez sur \"Gérer\" pour désactiver les bulles pour cette application"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Appuyez sur \"Gérer\" pour désactiver les bulles de cette application"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"OK"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Navigation système mise à jour. Pour apporter des modifications, accédez aux paramètres."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Accédez aux paramètres pour mettre à jour la navigation système"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Fenêtre de superposition de l\'agrandissement"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Fenêtre d\'agrandissement"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Fenêtre des commandes d\'agrandissement"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Commandes rapides"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Commandes de l\'appareil"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Ajouter des commandes pour vos appareils connectés"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurez des commandes rapides"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurer les commandes de l\'appareil"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Appuyez de manière prolongée sur le bouton Marche/Arrêt pour accéder aux commandes"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'appli pour laquelle ajouter des commandes"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Sélectionnez les commandes auxquelles vous souhaitez accéder depuis le menu de démarrage"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Appuyez de manière prolongée sur une commande pour la déplacer"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Impossible de charger toutes les commandes."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Autre"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Ajouter aux commandes rapides"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Ajouter aux commandes de l\'appareil"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Ajouter aux favoris"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> a suggéré d\'ajouter cette commande aux favoris."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Commandes mises à jour"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 95f432e35152..dec9c71b31e6 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Ampliación da ventá de superposición"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Ventá de superposición"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Controis de ampliación da ventá"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controis rápidos"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Control de dispositivos"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Engade controis para os dispositivos conectados"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurar os controis rápidos"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurar control de dispositivos"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Mantén premido o botón de acendido para acceder aos controis"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Escolle unha aplicación para engadir controis"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controis"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolle os controis para acceder desde o menú de acendido"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Mantén premido un control e arrástrao para movelo"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Non se puido cargar a lista de todos os controis."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outra"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Engadir a controis rápidos"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Engadir ao control de dispositivos"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Engadir a favoritos"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> suxeriu que se engada este control aos teus favoritos."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Actualizáronse os controis"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index f781c3f542ea..b0ebf7afa03e 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"વિસ્તૃતીકરણ ઓવરલે વિંડો"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"વિસ્તૃતીકરણ વિંડો"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"વિસ્તૃતીકરણ વિંડોના નિયંત્રણો"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ઝડપી નિયંત્રણો"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ડિવાઇસનાં નિયંત્રણો"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"તમારા કનેક્ટ કરેલા ડિવાઇસ માટે નિયંત્રણો ઉમેરો"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ઝડપી નિયંત્રણો સેટઅપ કરો"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ડિવાઇસનાં નિયંત્રણો સેટઅપ કરો"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"તમારા નિયંત્રણોને ઍક્સેસ કરવા માટે પાવર બટન દબાવી રાખો"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"નિયંત્રણો ઉમેરવા માટે ઍપ પસંદ કરો"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"નિયંત્રણો"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"પાવર મેનૂમાંથી ઍક્સેસ કરવા માટેના નિયંત્રણોને પસંદ કરો"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"નિયંત્રણને ખસેડવા માટે તેના પર આંગળી દબાવીને ખેંચો"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"બધા નિયંત્રણોની સૂચિ લોડ કરી શકાઈ નથી."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"અન્ય"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ઝડપી નિયંત્રણોમાં ઉમેરો"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ડિવાઇસનાં નિયંત્રણોમાં ઉમેરો"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"મનપસંદમાં ઉમેરો"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> એ આ નિયંત્રણને તમારા મનપસંદમાં ઉમેરવાનું સૂચવ્યું છે."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"નિયંત્રણ અપડેટ કર્યા"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 107edb8ae716..cdfa4f723227 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"अनुमति दें"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB डीबगिंग की अनुमति नहीं है"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"अभी इस डिवाइस में जिस उपयोगकर्ता ने साइन इन किया है, वो USB डीबगिंग चालू नहीं कर सकता. इस सुविधा का इस्तेमाल करने के लिए, प्राथमिक उपयोगकर्ता में बदलें."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"क्या आप इस नेटवर्क पर वायरलेस तरीके से डीबग करने की सुविधा के इस्तेमाल की अनुमति देना चाहते हैं?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"क्या आप इस नेटवर्क पर वॉयरलेस डीबगिंग की सुविधा के इस्तेमाल की अनुमति देना चाहते हैं?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"नेटवर्क का नाम (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nवाई-फ़ाई का पता (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"इस नेटवर्क पर हमेशा अनुमति दें"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"अनुमति दें"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"वायरलेस तरीके से डीबग करने की सुविधा चालू करने की अनुमति नहीं है"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"अभी इस डिवाइस में जिस उपयोगकर्ता ने साइन इन कर रखा है वह वायरलेस तरीके से डीबग करने की सुविधा चालू नहीं कर सकता. इस सुविधा का इस्तेमाल करने के लिए, मुख्य उपयोगकर्ता के तौर पर साइन इन करें."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"वॉयरलेस डीबगिंग की सुविधा चालू करने की अनुमति नहीं है"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"अभी इस डिवाइस में जिस उपयोगकर्ता ने साइन इन कर रखा है वह वॉयरलेस डीबगिंग की सुविधा चालू नहीं कर सकता. इस सुविधा का इस्तेमाल करने के लिए, मुख्य उपयोगकर्ता के तौर पर साइन इन करें."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"यूएसबी पोर्ट बंद है"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"तरल चीज़ या कचरे से आपके डिवाइस की सुरक्षा करने के लिए, यूएसबी पोर्ट को बंद कर दिया गया है. साथ ही, इससे किसी भी एक्सेसरी की पहचान नहीं की जा सकेगी.\n\nयूएसबी पोर्ट का दोबारा इस्तेमाल करना सुरक्षित होने पर आपको सूचित किया जाएगा."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"चार्जर और एक्सेसरी पहचानने के लिए यूएसबी पोर्ट को चालू कर दिया गया है"</string>
@@ -743,7 +743,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"आवाज़ और वाइब्रेशन बंद किया गया"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"आवाज़ या वाइब्रेशन चालू करें"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"बबल दिखाएं"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"बबल हटाएं"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"बबल्स हटाएं"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"होम स्क्रीन पर जोड़ें"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"सूचना नियंत्रण"</string>
@@ -985,7 +985,7 @@
<string name="device_services" msgid="1549944177856658705">"डिवाइस सेवाएं"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"कोई शीर्षक नहीं"</string>
<string name="restart_button_description" msgid="6916116576177456480">"इस ऐप्लिकेशन को रीस्टार्ट करने और फ़ुल स्क्रीन चालू करने के लिए टैप करें."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> बबल की सेटिंग"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> बबल्स की सेटिंग"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"प्रबंधित करें"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> से <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> और <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> अन्य ऐप्लिकेशन से <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -1007,9 +1007,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification Overlay Window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"स्क्रीन को बड़ा करके दिखाने वाली विंडो"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"स्क्रीन को बड़ा करके दिखाने वाली विंडो के नियंत्रण"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"क्विक कंट्रोल"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"डिवाइस के कंट्रोल"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"कनेक्ट किए गए डिवाइस के लिए कंट्रोल जोड़ें"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"क्विक कंट्रोल सेट अप करें"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"डिवाइस के कंट्रोल सेट अप करें"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"कंट्रोल ऐक्सेस करने के लिए पावर बटन को दबाकर रखें"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"कंट्रोल जोड़ने के लिए ऐप्लिकेशन चुनें"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1018,10 +1018,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"कंट्राेल"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"पावर मेन्यू से ऐक्सेस करने के लिए कंट्रोल चुनें"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"किसी कंट्रोल को एक जगह से दूसरी जगह ले जाने के लिए, इसे दबाकर खींचें और छोड़ें"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"सभी कंट्रोल की सूची लोड नहीं हो सकी."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"अन्य"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"\'फटाफट कंट्रोल\' में जोड़ें"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"डिवाइस के कंट्रोल में जोड़ें"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"पसंदीदा में जोड़ें"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> आपको इस कंट्रोल को अपनी पसंदीदा में जोड़ने का सुझाव देता है."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"कंट्रोल अपडेट किए गए"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 338eb63118c9..fd4aa6c296ff 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -1010,9 +1010,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Prozor preklapanja povećavanja"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Prozor za povećavanje"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontrole prozora za povećavanje"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Brze kontrole"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Upravljanje uređajem"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Dodavanje kontrola za povezane uređaje"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Postavljanje brzih kontrola"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Postavljanje kontrola uređaja"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Dulje pritisnite tipku za uključivanje/isključivanje da biste pristupili kontrolama"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Odabir aplikacije za dodavanje kontrola"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1022,10 +1022,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Odaberite kontrole kojima želite pristupati iz izbornika napajanja"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Zadržite i povucite kontrolu da biste je pomaknuli"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Popis svih kontrola nije se učitao."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Dodavanje u brze kontrole"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Dodavanje kontrolama uređaja"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Dodaj u favorite"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Aplikacija <xliff:g id="APP">%s</xliff:g> predlaže dodavanje ove kontrole u vaše favorite."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrole su ažurirane"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 78458be81dd0..76c344546a1a 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -223,7 +223,7 @@
<string name="data_connection_lte" msgid="557021044282539923">"LTE"</string>
<string name="data_connection_lte_plus" msgid="4799302403782283178">"LTE+"</string>
<string name="data_connection_cdma" msgid="7678457855627313518">"1X"</string>
- <string name="data_connection_roaming" msgid="375650836665414797">"Barangolás"</string>
+ <string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="data_connection_edge" msgid="6316755666481405762">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="4422160347472742434">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="1140839832913084973">"Nincs SIM."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Nagyítási fedvény ablaka"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Nagyítás ablaka"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Nagyítási vezérlők ablaka"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Gyorsvezérlők"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Eszközvezérlők"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Vezérlők hozzáadása a csatlakoztatott eszközökhöz"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Gyorsvezérlők beállítása"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Eszközvezérlők beállítása"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Tartsa nyomva a bekapcsológombot, hogy hozzáférhessen a vezérlőkhöz"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Válasszon alkalmazást a vezérlők hozzáadásához"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Vezérlők"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"A bekapcsológomb menüjéből hozzáférhető vezérlők kiválasztása"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Áthelyezéséhez tartsa nyomva, majd húzza a kívánt helyre a vezérlőt"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Nem sikerült betölteni az összes vezérlő listáját."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Más"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Hozzáadás a gyorsvezérlőkhöz"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Hozzáadás az eszközvezérlőkhöz"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Hozzáadás a kedvencekhez"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"A(z) <xliff:g id="APP">%s</xliff:g> azt javasolta, hogy adja hozzá ezt a vezérlőt a kedvenceihez."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Vezérlők frissítve"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index e42ccc5991e1..d625bb3fde1e 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Խոշորացման պատուհանի վրադրում"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Խոշորացման պատուհան"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Խոշորացման պատուհանի կառավարման տարրեր"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Արագ կառավարման տարրեր"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Սարքի կառավարման տարրեր"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Ավելացրեք կառավարման տարրեր ձեր միացված սարքերի համար"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Արագ կառավարման տարրերի կարգավորում"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Սարքի կառավարման տարրերի կարգավորում"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Սեղմած պահեք սնուցման կոճակը՝ կառավարման տարրերը բացելու համար"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Ընտրեք հավելված` կառավարման տարրեր ավելացնելու համար"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Կառավարման տարրեր"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Ընտրեք կառավարման տարրերը՝ դրանք սնուցման ընտրացանկից բացելու համար"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Կառավարման տարրը տեղափոխելու համար պահեք և քաշեք այն"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Պահեք և քաշեք՝ կառավարման տարրերը վերադասավորելու համար"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"Կառավարման բոլոր տարրերը հեռացվեցին"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Չհաջողվեց բեռնել բոլոր կառավարների ցանկը։"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Այլ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Ավելացրեք արագ կառավարման տարրերում"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Ավելացրեք սարքի կառավարման տարրերում"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Ավելացնել ընտրանիում"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> հավելվածն առաջարկում է ավելացնել այս կառավարը ձեր ընտրանիում։"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Կառավարման տարրերը թարմացվեցին"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 2cd79d78f568..3f6cbb472b8f 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -406,7 +406,7 @@
<string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampu Senter"</string>
<string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera sedang digunakan"</string>
<string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Data seluler"</string>
- <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"Penggunaan kuota"</string>
+ <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"Penggunaan data"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="1136599216568805644">"Data tersisa"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="4561921367680636235">"Melebihi batas"</string>
<string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"<xliff:g id="DATA_USED">%s</xliff:g> digunakan"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Jendela Overlay Pembesaran"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Jendela Pembesaran"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontrol Jendela Pembesaran"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Kontrol cepat"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Kontrol perangkat"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Tambahkan kontrol untuk perangkat terhubung"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Siapkan kontrol cepat"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Siapkan kontrol perangkat"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Tahan tombol Daya untuk mengakses kontrol"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Pilih aplikasi untuk menambahkan kontrol"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrol"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pilih kontrol yang akan diakses dari menu daya"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Tahan dan tarik kontrol untuk memindahkannya"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Daftar semua kontrol tidak dapat dimuat."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Lainnya"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Tambahkan ke kontrol cepat"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Tambahkan ke kontrol perangkat"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Tambahkan ke favorit"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> menyarankan kontrol ini ditambahkan ke favorit."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrol diperbarui"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 803d99493c8c..2dad05035ee2 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Forritið eða fyrirtækið þitt leyfir ekki skjámyndatöku"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Loka skjámynd"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Opna skjámynd"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Upptökutæki á skjá"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Skjáupptaka"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Áframhaldandi tilkynning fyrir skjáupptökulotu"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Hefja upptöku?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Á meðan tekið er upp getur Android kerfið fangað viðkvæmar upplýsingar sem sjást á skjánum eða spilast í tækinu. Þar á meðal eru upplýsingar á borð við aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð."</string>
@@ -993,7 +993,7 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Færa neðst til vinstri"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Færðu neðst til hægri"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Hunsa"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Ekki setja samtöl í blöðrur"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Ekki setja samtal í blöðru"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Spjalla með blöðrum"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Ný samtöl birtast sem fljótandi tákn eða blöðrur. Ýttu til að opna blöðru. Dragðu hana til að færa."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Hægt er að stjórna blöðrum hvenær sem er"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Stækkun yfirglugga"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Stækkunargluggi"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Stækkunarstillingar glugga"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Flýtistýringar"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Tækjastýringar"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Bæta við stýringum fyrir tengd tæki"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Setja upp flýtistýringar"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Setja upp tækjastýringar"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Haltu inni aflrofanum til að sjá stýringarnar þínar"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Veldu forrit til að bæta við stýringum"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Stýringar"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Veldu hvaða stýringar birtast í aflrofavalmyndinni"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Haltu og dragðu stýringu til að færa hana"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Ekki tókst að hlaða lista yfir allar stýringar."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Annað"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Bæta við flýtistýringar"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Bæta við tækjastýringar"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Bæta við uppáhald"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> stakk upp á að bæta þessari stýringu við uppáhald."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Stýringar uppfærðar"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 875bc4f39cc7..587e94be88e7 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"L\'acquisizione di screenshot non è consentita dall\'app o dall\'organizzazione"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Ignora screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Apri screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Registrazione dello schermo"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Notifica costante per una sessione di registrazione dello schermo"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Avviare la registrazione?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Durante la registrazione, il sistema Android può catturare dati sensibili visibili sullo schermo o riprodotti sul tuo dispositivo. Sono incluse password, dati di pagamento, foto, messaggi e audio."</string>
@@ -362,7 +362,7 @@
<string name="quick_settings_rotation_locked_portrait_label" msgid="1194988975270484482">"Verticale"</string>
<string name="quick_settings_rotation_locked_landscape_label" msgid="2000295772687238645">"Orizzontale"</string>
<string name="quick_settings_ime_label" msgid="3351174938144332051">"Metodo di immissione"</string>
- <string name="quick_settings_location_label" msgid="2621868789013389163">"Geolocalizz."</string>
+ <string name="quick_settings_location_label" msgid="2621868789013389163">"Geolocalizzazione"</string>
<string name="quick_settings_location_off_label" msgid="7923929131443915919">"Geolocalizz. non attiva"</string>
<string name="quick_settings_media_device_label" msgid="8034019242363789941">"Dispositivo multimediale"</string>
<string name="quick_settings_rssi_label" msgid="3397615415140356701">"RSSI"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Silenziata"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Avvisi"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostra fumetto"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Rimuovi fumetti"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Rimuovi bolle"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Aggiungi a schermata Home"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"gestione delle notifiche"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Servizi del dispositivo"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Senza titolo"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Tocca per riavviare l\'app e passare a schermo intero."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Impostazioni per fumetti <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Impostazioni per bolle <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Gestisci"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> da <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> da <xliff:g id="APP_NAME">%2$s</xliff:g> e altre <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Finestra overlay ingrandimento"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Finestra ingrandimento"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Finestra controlli di ingrandimento"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controlli rapidi"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controlli del dispositivo"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Aggiungi controlli per i dispositivi connessi"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configura controlli rapidi"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configura i controlli del dispositivo"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Tieni premuto il tasto di accensione per accedere ai controlli"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Scegli un\'app per aggiungere controlli"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controlli"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Seleziona i controlli a cui accedere dal menu di accensione"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Tieni premuto un controllo e trascinalo per spostarlo"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Impossibile caricare l\'elenco di tutti i controlli."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altro"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Aggiungi ai controlli rapidi"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Aggiungi ai controlli del dispositivo"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Aggiungi ai preferiti"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ha suggerito di aggiungere questo controllo ai preferiti."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controlli aggiornati"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 0d9f8391bccf..b6f445d670f0 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"האפליקציה או הארגון שלך אינם מתירים ליצור צילומי מסך"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"סגירת צילום מסך"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"פתיחת צילום מסך"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"מקליט מסך"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"מקליט המסך"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"התראה מתמשכת לסשן הקלטת מסך"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"להתחיל את ההקלטה?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"‏בזמן ההקלטה, מערכת Android יכולה לתעד מידע רגיש שגלוי במסך או מופעל במכשיר שלך. מידע זה כולל סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו."</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"חלון ליצירת שכבת-על להגדלה"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"חלון הגדלה"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"בקרות של חלון ההגדלה"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"פקדים מהירים"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"פקדי המכשיר"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"יש להוסיף פקדים למכשירים המחוברים"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"הגדרה של פקדים מהירים"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"הגדרה של פקדי המכשיר"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"יש ללחוץ לחיצה ארוכה על לחצן ההפעלה כדי לגשת לבקרים"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"יש לבחור אפליקציה כדי להוסיף פקדים"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"פקדים"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"יש לבחור פקדים לגישה מתפריט ההפעלה"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"כדי להזיז פקד, יש ללחוץ עליו ולגרור אותו"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"לא ניתן היה לטעון את הרשימה של כל הפקדים."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"אחר"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"הוספה לפקדים מהירים"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"הוספה לפקדי המכשיר"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"הוספה למועדפים"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"בקרה זו הוצעה על ידי <xliff:g id="APP">%s</xliff:g> להוספה למועדפים."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"הפקדים עודכנו"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 41888fdeef9c..8a2b923d7664 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"スクリーンショットの作成はアプリまたは組織で許可されていません"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"スクリーンショットを閉じます"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"スクリーンショットを開きます"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"画面レコーダー"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"スクリーン レコーダー"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"画面の録画セッション中の通知"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"録画を開始しますか?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"録画中に機密情報が画面に表示されたりデバイスで再生されたりした場合、Android システムでキャプチャされることがあります。これには、パスワード、お支払い情報、写真、メッセージ、音声などが含まれます。"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"音やバイブレーションが作動しないため、通知に煩わされずに済みます。"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"音やバイブレーションで通知をお知らせします。"</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"このコンテンツのフローティング ショートカットで通知をお知らせします。"</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"会話セクションの一番上にふきだしとして表示されます。"</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"デフォルトでは <xliff:g id="APP_NAME_0">%1$s</xliff:g> からのすべての会話がふきだしで表示されます。[<xliff:g id="APP_NAME_1">%2$s</xliff:g>] で管理します。"</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"会話セクションの一番上にバブルとして表示されます。"</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"デフォルトでは <xliff:g id="APP_NAME_0">%1$s</xliff:g> からのすべての会話がバブルで表示されます。[<xliff:g id="APP_NAME_1">%2$s</xliff:g>] で管理します。"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"設定"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"優先度"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近閉じたふきだしはありません"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近表示されたふきだしや閉じたふきだしが、ここに表示されます"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近閉じたバブルはありません"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近表示されたバブルや閉じたバブルが、ここに表示されます"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"これらの通知は変更できません。"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"このグループの通知はここでは設定できません"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"代理通知"</string>
@@ -740,8 +740,8 @@
<string name="notification_conversation_unfavorite" msgid="181383708304763807">"重要でない会話"</string>
<string name="notification_conversation_mute" msgid="268951550222925548">"マナーモード"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"アラートを受け取る"</string>
- <string name="notification_conversation_bubble" msgid="2242180995373949022">"ふきだしを表示"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ふきだしを削除"</string>
+ <string name="notification_conversation_bubble" msgid="2242180995373949022">"バブルを表示"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"バブルを削除"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"ホーム画面に追加"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"通知管理"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"デバイス サービス"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"タイトルなし"</string>
<string name="restart_button_description" msgid="6916116576177456480">"タップしてこのアプリを再起動すると、全画面表示になります。"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> のふきだしの設定"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> のバブルの設定"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"管理"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>(<xliff:g id="APP_NAME">%2$s</xliff:g>)"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>(<xliff:g id="APP_NAME">%2$s</xliff:g>)、他 <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> 件"</string>
@@ -993,10 +993,10 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"左下に移動"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"右下に移動"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"閉じる"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"会話をふきだしにしない"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"チャットでのふきだしの使用"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"新しい会話はフローティング アイコン(ふきだし)として表示されます。タップするとふきだしが開きます。ドラッグしてふきだしを移動できます。"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"いつでもふきだしを管理"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"会話をバブルにしない"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"チャットでのバブルの使用"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"新しい会話はフローティング アイコン(バブル)として表示されます。タップするとバブルが開きます。ドラッグしてバブルを移動できます。"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"いつでもバブルを管理"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"このアプリからのバブルをオフにするには、[管理] をタップしてください"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"OK"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"システム ナビゲーションを更新しました。変更するには [設定] に移動してください。"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"拡大オーバーレイ ウィンドウ"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"拡大ウィンドウ"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"拡大ウィンドウ コントロール"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"クイック コントロール"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"デバイス コントロール"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"接続済みデバイスのコントロールを追加します"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"クイック コントロールの設定"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"デバイス コントロールの設定"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"コントロールにアクセスするには、電源ボタンを長押しします"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"コントロールを追加するアプリの選択"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"コントロール"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"電源メニューからアクセスするコントロールを選択する"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"コントロールを移動するには、長押してドラッグします"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"コントロールを並べ替えるには長押ししてドラッグします"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"すべてのコントロールを削除しました"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"全コントロールの一覧を読み込めませんでした。"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"その他"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"クイック コントロールへの追加"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"デバイス コントロールに追加"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"お気に入りに追加"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g>が、お気に入りに追加のためにこのコントロールを提案しました。"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"コントロールを更新しました"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 2097892ceba4..99b10c10cb2b 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ეკრანის ანაბეჭდების შექმნა არ არის ნებადართული აპის ან თქვენი ორგანიზაციის მიერ"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"ეკრანის ანაბეჭდის დახურვა"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"ეკრანის ანაბეჭდის გახსნა"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"ეკრანის რეკორდერი"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"ეკრანის ჩამწერი"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"უწყვეტი შეტყობინება ეკრანის ჩაწერის სესიისთვის"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"დაიწყოს ჩაწერა?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"ჩაწერის განმავლობაში Android სისტემას შეუძლია აღბეჭდოს ნებისმიერი სენსიტიური ინფორმაცია, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება. აღნიშნული მოიცავს პაროლებს, გადახდის დეტალებს, ფოტოებს, შეტყობინებებსა და აუდიოს."</string>
@@ -509,7 +509,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"ისტორია"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"ჩუმი შეტყობინებები"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"გამაფრთხილებელი შეტყობინებები"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"მიმოწერები"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"საუბრები"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ყველა ჩუმი შეტყობინების გასუფთავება"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"შეტყობინებები დაპაუზდა „არ შემაწუხოთ“ რეჟიმის მეშვეობით"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"დაწყება ახლავე"</string>
@@ -708,8 +708,8 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"გეხმარებათ ფოკუსირებაში ხმის ან ვიბრაციის უქონლობის გამო."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"იპყრობს თქვენს ყურადღებას ხმით ან ვიბრაციით."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"იპყრობს თქვენს ყურადღებას ამ კონტენტის მოლივლივე მალსახმობით."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"გამოჩნდება მიმოწერის სექციის ზედა ნაწილში ბუშტის სახით."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ყველა მიმოწერა <xliff:g id="APP_NAME_0">%1$s</xliff:g>-დან ნაგულისხმევად გამოჩნდება ბუშტის სახით. <xliff:g id="APP_NAME_1">%2$s</xliff:g>-ში მართვა."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"გამოჩნდება საუბრის სექციის ზედა ნაწილში ბუშტის სახით."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ყველა საუბარი <xliff:g id="APP_NAME_0">%1$s</xliff:g>-დან ნაგულისხმევად გამოჩნდება ბუშტის სახით. <xliff:g id="APP_NAME_1">%2$s</xliff:g>-ში მართვა."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"პარამეტრები"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"პრიორიტეტი"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ბოლო დროს გამოყენებული ბუშტები არ არის"</string>
@@ -993,9 +993,9 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"ქვევით და მარცხნივ გადატანა"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"გადაანაცვ. ქვემოთ და მარჯვნივ"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"დახურვა"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"აიკრძალოს მიმოწერის ბუშტები"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"აიკრძალოს საუბრის ბუშტები"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"ჩეთი ბუშტების გამოყენებით"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"ახალი მიმოწერები გამოჩნდება როგორც მოტივტივე ხატულები ან ბუშტები. შეეხეთ ბუშტის გასახსნელად. გადაიტანეთ ჩავლებით."</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"ახალი საუბრები გამოჩნდება როგორც მოტივტივე ხატულები ან ბუშტები. შეეხეთ ბუშტის გასახსნელად. გადაიტანეთ ჩავლებით."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ბუშტების ნებისმიერ დროს გაკონტროლება"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"ამ აპის ბუშტების გამოსართავად შეეხეთ „მართვას“"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"გასაგებია"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"გადიდების გადაფარვის ფანჯარა"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"გადიდების ფანჯარა"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"გადიდების კონტროლის ფანჯარა"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"სწრაფად მართვის საშუალებები"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"მოწყობილ. მართვის საშუალებები"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"მართვის საშუალებების დამატება თქვენს დაკავშირებულ მოწყობილობებზე"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"სწრაფად მართვის საშუალებების დაყენება"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"მოწყობილობის მართვის საშუალებების დაყენება"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"ხანგრძლივად დააჭირეთ ჩართვის ღილაკს მართვის საშუალებებზე წვდომისთვის"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"აირჩიეთ აპი მართვის საშუალებების დასამატებლად"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"მართვის საშუალებები"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"აირჩიეთ მართვის საშუალებები ელკვების მენიუდან"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ჩავლებით გადაიტანეთ კონტროლის საშუალება"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"მართვის ყველა საშუალების სია ვერ ჩაიტვირთა."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"სხვა"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"სწრაფად მართვის საშ. დამატება"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"მოწყობილ. მართვის საშუალებებში დამატება"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"რჩეულებში დამატება"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> გთავაზობთ, მართვის ეს საშუალება თქვენს რჩეულებში დაამატოთ."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"მართვის საშუალებები განახლდა"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 6fc5ff3cf440..dd8ecc40e1f1 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Қолданба немесе ұйым скриншоттар түсіруге рұқсат етпейді"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Скриншотты жабу"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Скриншотты ашу"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Экрандағы бейнені жазу"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Экран жазғыш"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды бейнеге жазудың ағымдағы хабарландыруы"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Жазу басталсын ба?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Жазу кезінде Android жүйесі экранда көрсетілетін немесе құрылғыда ойнатылатын құпия ақпаратты пайдалана алады. Ол ақпаратқа құпия сөздер, төлеу ақпараты, фотосуреттер, хабарлар және аудио жатады."</string>
@@ -509,7 +509,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"Тарих"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Дыбыссыз хабарландырулар"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"Ескертуші хабарландлырулар"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"Сөйлесулер"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"Әңгімелер"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Барлық дыбыссыз хабарландыруларды өшіру"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"Хабарландырулар \"Мазаламау\" режимінде кідіртілді"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"Қазір бастау"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Хабарландырулар келгенде, дыбыс шықпайды не дірілдемейді"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Хабарландырулар келгенде, дыбыс шығады не дірілдейді"</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Осы мазмұнға бекітілген қалқымалы таңбашамен назарыңызды өзіне тартады."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Чат бөлімінің жоғарғы жағында және қалқымалы хабар түрінде көрсетіледі."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> хабарлары әдепкісінше көрсетіледі. <xliff:g id="APP_NAME_1">%2$s</xliff:g> арқылы басқарыңыз."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Сөйлесу бөлімінің жоғарғы жағында және қалқыма хабар түрінде көрсетіледі."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Барлық <xliff:g id="APP_NAME_0">%1$s</xliff:g> әңгімесінің қалқыма хабарлары әдепкісінше көрсетіледі. <xliff:g id="APP_NAME_1">%2$s</xliff:g> арқылы басқарыңыз."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Параметрлер"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Маңыздылығы"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Жақындағы қалқымалы анықтамалар жоқ"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Жақында ашылған және жабылған қалқымалы хабарлар осы жерде көрсетіледі."</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Жақындағы қалқыма хабарлар жоқ"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Жақында ашылған және жабылған қалқыма хабарлар осы жерде көрсетіледі."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Бұл хабарландыруларды өзгерту мүмкін емес."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Мұндай хабарландырулар бұл жерде конфигурацияланбайды."</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Прокси-сервер арқылы жіберілген хабарландыру"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Үнсіз режимге қойылған."</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Дыбысын қосу"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Қалқымалы анықтаманы көрсету"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Қалқымалы анықтамаларды өшіру"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Қалқыма хабарларды өшіру"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Негізгі экранға қосу"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"хабарландыруларды басқару элементтері"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Құрылғы қызметтері"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Атауы жоқ"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Бұл қолданбаны қайта қосып, толық экранға өту үшін түртіңіз."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> қалқымалы анықтамаларының параметрлері"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> қалқыма хабарларының параметрлері"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Басқару"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> жіберген хабарландыру: <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> қолданбасы жіберген <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> және тағы <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Төменгі сол жаққа жылжыту"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Төменгі оң жаққа жылжыту"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Жабу"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Қалқымалы хабар көрсетілмесін"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Сөйлесуге арналған қалқымалы хабарлар"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Жаңа чаттар қалқымалы белгішелер немесе хабарлар түрінде көрсетіледі. Қалқымалы хабарды ашу үшін түртіңіз. Жылжыту үшін сүйреңіз."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Қалқымалы хабарларды реттеу"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Бұл қолданбадан қалқымалы анықтамаларды өшіру үшін \"Басқару\" түймесін түртіңіз."</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Әңгіменің қалқыма хабары көрсетілмесін"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Сөйлесуге арналған қалқыма хабарлар"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Жаңа әңгімелер қалқыма белгішелер немесе хабарлар түрінде көрсетіледі. Қалқыма хабарды ашу үшін түртіңіз. Жылжыту үшін сүйреңіз."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Қалқыма хабарларды реттеу"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Бұл қолданбадан қалқыма хабарларды өшіру үшін \"Басқару\" түймесін түртіңіз."</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Түсінікті"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Жүйе навигациясы жаңартылды. Өзгерту енгізу үшін \"Параметрлер\" бөліміне өтіңіз."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Жүйе навигациясын жаңарту үшін \"Параметрлер\" бөліміне өтіңіз."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Ұлғайту терезесін қабаттастыру"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Ұлғайту терезесі"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Ұлғайту терезесінің басқару элементтері"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Жылдам басқару элементтері"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Құрылғыны басқару элементтері"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Жалғанған құрылғыларға басқару элементтерін енгізу"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Жылдам басқару элементтерін реттеу"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Құрылғыны басқару элементтерін реттеу"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Басқару элементтерін шығару үшін қуат түймесін басып тұрыңыз."</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Басқару элементтері енгізілетін қолданбаны таңдаңыз"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Басқару элементтері"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"\"Қуат\" мәзірінен пайдалануға болатын басқару элементтерін таңдаңыз."</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Басқару элементін жылжыту үшін оны басып тұрып, сүйреңіз."</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Барлық басқару элементі тізімі жүктелмеді."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Басқа"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Жылдам басқару элементтеріне қосу"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Құрылғыны басқару элементтеріне қосу"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Таңдаулыларға қосу"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> қолданбасы бұл басқару элементін таңдаулыларға қосып қоюды ұсынды."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Басқару элементтері жаңартылды"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index a6f993e500b3..53e9c0eb8d13 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ការថត​រូបអេក្រង់​មិនត្រូវ​បាន​អនុញ្ញាត​ដោយ​កម្មវិធី​នេះ ឬ​ស្ថាប័ន​របស់អ្នក"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"ច្រានចោល​រូបថត​អេក្រង់"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"បើក​រូបថត​អេក្រង់"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"កម្មវិធីថត​អេក្រង់"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"មុខងារថត​អេក្រង់"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"ការជូនដំណឹង​ដែល​កំពុង​ដំណើរការ​សម្រាប់​រយៈពេលប្រើ​ការថត​សកម្មភាព​អេក្រង់"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"ចាប់ផ្តើម​ថត​ឬ?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"នៅពេល​កំពុងថត ប្រព័ន្ធ Android អាច​ថត​ព័ត៌មាន​រសើប​ដែលអាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬដែល​បានចាក់​នៅលើ​ឧបករណ៍​របស់អ្នក។ ព័ត៌មាននេះ​រួមមាន​ពាក្យសម្ងាត់ ព័ត៌មាន​អំពី​ការបង់ប្រាក់ រូបថត សារ និងសំឡេង។"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"ជួយឱ្យ​អ្នក​ផ្តោតអារម្មណ៍ ដោយមិនឮសំឡេង ឬ​ការញ័រ។"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"ធ្វើឱ្យ​អ្នក​ចាប់អារម្មណ៍​តាមរយៈ​សំឡេង ឬ​ការញ័រ។"</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ធ្វើឱ្យអ្នក​ចាប់អារម្មណ៍​ដោយប្រើ​ផ្លូវកាត់​អណ្ដែត​សម្រាប់ខ្លឹមសារនេះ។"</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"បង្ហាញ​នៅខាងលើ​ផ្នែកនៃ​ការសន្ទនា និង​បង្ហាញជា​សារលេចឡើង។"</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ការសន្ទនា​ទាំងអស់​ពី <xliff:g id="APP_NAME_0">%1$s</xliff:g> បង្ហាញជា​សារលេចឡើង​តាមលំនាំដើម។ គ្រប់គ្រង​នៅក្នុង <xliff:g id="APP_NAME_1">%2$s</xliff:g>។"</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"បង្ហាញ​នៅខាងលើផ្នែកសន្ទនា និង​បង្ហាញជាពពុះ។"</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ការសន្ទនា​ទាំងអស់​ពី <xliff:g id="APP_NAME_0">%1$s</xliff:g> បង្ហាញជា​ពពុះតាមលំនាំដើម។ គ្រប់គ្រង​នៅក្នុង <xliff:g id="APP_NAME_1">%2$s</xliff:g>។"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ការកំណត់"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"អាទិភាព"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"មិនមាន​សារលេចឡើង​ថ្មីៗ​ទេ"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"សារលេចឡើង​ដែលបានច្រានចោល និង​សារលេចឡើង​ថ្មីៗ​នឹង​បង្ហាញ​នៅទីនេះ"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"មិនមាន​ពពុះ​ថ្មីៗ​ទេ"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ពពុះថ្មីៗ​ និង​ពពុះដែលបានបិទ​​នឹង​បង្ហាញ​នៅទីនេះ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"មិនអាច​កែប្រែ​ការជូនដំណឹង​ទាំងនេះ​បានទេ។"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"មិនអាច​កំណត់​រចនាសម្ព័ន្ធ​ក្រុមការជូនដំណឹងនេះ​នៅទីនេះ​បានទេ"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"ការជូនដំណឹង​ជា​ប្រូកស៊ី"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"បានបិទសំឡេង"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"បញ្ចេញ​សំឡេង"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"បង្ហាញ​ជា​សារ​លេចឡើង"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"លុប​សារលេចឡើង"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"លុប​​ពពុះ"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"បញ្ចូល​ទៅក្នុង​អេក្រង់​ដើម"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"ការគ្រប់គ្រង​ការជូន​ដំណឹង"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"សេវាកម្មឧបករណ៍"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"គ្មាន​ចំណងជើង"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ចុចដើម្បី​ចាប់ផ្ដើម​កម្មវិធី​នេះឡើងវិញ រួចចូលប្រើ​ពេញអេក្រង់។"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"ការកំណត់​សម្រាប់សារលេចឡើង <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"ការកំណត់​សម្រាប់​ពពុះ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"គ្រប់គ្រង"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ពី <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ពី <xliff:g id="APP_NAME">%2$s</xliff:g> និង <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> ទៀត"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"ផ្លាស់ទីទៅផ្នែកខាងក្រោមខាងឆ្វេង​"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"ផ្លាស់ទីទៅផ្នែកខាងក្រោម​ខាងស្ដាំ"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"ច្រានចោល"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"កុំបង្ហាញ​ការសន្ទនា​ជាសារលេចឡើង"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"ជជែក​ដោយប្រើ​សារលេចឡើង"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"ការសន្ទនាថ្មីៗ​បង្ហាញជា​សារលេចឡើង ឬរូបអណ្ដែត។ ចុច ដើម្បីបើក​សារលេចឡើង។ អូស ដើម្បី​ផ្លាស់ទី​សារលេចឡើង​នេះ។"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"គ្រប់គ្រង​សារលេចឡើង​បានគ្រប់ពេល"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ចុច \"គ្រប់គ្រង\" ដើម្បីបិទ​សារលេចឡើង​ពីកម្មវិធីនេះ"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"កុំបង្ហាញ​ការសន្ទនា​ជាពពុះ"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"ជជែក​ដោយប្រើ​ពពុះ"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"ការសន្ទនាថ្មីៗ​បង្ហាញជា​​ពពុះ ឬរូបអណ្ដែត។ ចុច ដើម្បីបើក​ពពុះ។ អូស ដើម្បី​ផ្លាស់ទី​ពពុះនេះ។"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"គ្រប់គ្រង​​ពពុះ​បានគ្រប់ពេល"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ចុច \"គ្រប់គ្រង\" ដើម្បីបិទ​ពពុះពីកម្មវិធីនេះ"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"យល់ហើយ"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"បានធ្វើ​បច្ចុប្បន្នភាព​ការរុករកក្នុង​ប្រព័ន្ធ។ ដើម្បីធ្វើការផ្លាស់ប្ដូរ សូមចូលទៅ​កាន់ការកំណត់។"</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"ចូល​ទៅកាន់​ការកំណត់ ដើម្បី​ធ្វើបច្ចុប្បន្នភាព​ការរុករក​ក្នុង​ប្រព័ន្ធ"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"វិនដូ​ត្រួតគ្នា​លើ​ការពង្រីក"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"វិនដូ​ការពង្រីក"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"វិនដូគ្រប់គ្រង​​ការពង្រីក"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ការគ្រប់គ្រង​រហ័ស"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ការ​គ្រប់គ្រង​ឧបករណ៍"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"បញ្ចូល​ការគ្រប់គ្រង​សម្រាប់​ឧបករណ៍​ដែលបានភ្ជាប់​របស់អ្នក"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"រៀបចំការគ្រប់គ្រងរហ័ស"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"រៀបចំ​ការ​គ្រប់គ្រង​ឧបករណ៍"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"សង្កត់ប៊ូតុង​ថាមពលឱ្យជាប់ ដើម្បី​ចូលប្រើ​ការគ្រប់គ្រងរបស់អ្នក"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ជ្រើសរើស​កម្មវិធី ដើម្បី​បញ្ចូល​ការគ្រប់គ្រង"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ការគ្រប់គ្រង"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ជ្រើសរើស​ការគ្រប់គ្រង ដើម្បី​ចូលប្រើ​ពីម៉ឺនុយ​ថាមពល"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"សង្កត់​ និងអូសការគ្រប់គ្រង ដើម្បី​ផ្លាស់ទី​វា"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"មិនអាច​ផ្ទុក​បញ្ជី​នៃការគ្រប់គ្រង​ទាំងអស់​បានទេ។"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ផ្សេងៗ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"បញ្ចូលទៅក្នុងការគ្រប់គ្រងរហ័ស"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"បញ្ចូល​ទៅក្នុងការ​គ្រប់គ្រង​ឧបករណ៍"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"បញ្ចូល​​ទៅ​ក្នុងសំណព្វ"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> បានណែនាំឱ្យបញ្ចូល​ការគ្រប់គ្រងនេះទៅក្នុងសំណព្វរបស់អ្នក។"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"បានធ្វើបច្ចុប្បន្នភាពការគ្រប់គ្រង"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 5c3dabb46757..3b8d86ec6d1d 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -509,7 +509,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"ಇತಿಹಾಸ"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"ನಿಶ್ಶಬ್ಧ ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"ಎಚ್ಚರಿಸುವ ಅಧಿಸೂಚನೆಗಳು"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"ಸಂವಾದಗಳು"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"ಸಂಭಾಷಣೆಗಳು"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ಎಲ್ಲಾ ನಿಶ್ಶಬ್ಧ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಎನ್ನುವ ಮೂಲಕ ಅಧಿಸೂಚನೆಗಳನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"ಈಗ ಪ್ರಾರಂಭಿಸಿ"</string>
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ಡೀಫಾಲ್ಟ್ ಆಗಿ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ನ ಎಲ್ಲಾ ಸಂಭಾಷಣೆಗಳನ್ನು ಬಬಲ್‌ ಆಗಿ ತೋರಿಸಿ. <xliff:g id="APP_NAME_1">%2$s</xliff:g> ನಲ್ಲಿ ನಿರ್ವಹಿಸಿ."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ಆದ್ಯತೆ"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಬಬಲ್‌ಗಳಿಲ್ಲ"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಬಬಲ್ಸ್ ಇಲ್ಲ"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ಇತ್ತೀಚಿನ ಬಬಲ್ಸ್ ಮತ್ತು ವಜಾಗೊಳಿಸಿದ ಬಬಲ್ಸ್ ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ಈ ಗುಂಪಿನ ಅಧಿಸೂಚನೆಗಳನ್ನು ಇಲ್ಲಿ ಕಾನ್ಫಿಗರ್‌ ಮಾಡಲಾಗಿರುವುದಿಲ್ಲ"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"ಮೌನಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"ಎಚ್ಚರಿಸಲಾಗುತ್ತಿದೆ"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"ಬಬಲ್ ತೋರಿಸಿ"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ಬಬಲ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ಬಬಲ್ಸ್‌ ಅನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"ಮುಖಪುಟದ ಪರದೆಗೆ ಸೇರಿಸಿ"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳು"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"ಸಾಧನ ಸೇವೆಗಳು"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"ಯಾವುದೇ ಶೀರ್ಷಿಕೆಯಿಲ್ಲ"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಮತ್ತು ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ನೋಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಬಬಲ್‌ಗಳಿಗಾಗಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಬಬಲ್ಸ್‌ಗಾಗಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"ನಿರ್ವಹಿಸಿ"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> ಆ್ಯಪ್‌ನ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> ಮತ್ತು <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> ಹೆಚ್ಚಿನವುಗಳ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -997,7 +997,7 @@
<string name="bubbles_user_education_title" msgid="5547017089271445797">"ಬಬಲ್ಸ್ ಬಳಸಿ ಚಾಟ್ ಮಾಡಿ"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"ಹೊಸ ಸಂಭಾಷಣೆಗಳು ತೇಲುವ ಐಕಾನ್‌ಗಳು ಅಥವಾ ಬಬಲ್ಸ್ ಆಗಿ ಗೋಚರಿಸುತ್ತವೆ. ಬಬಲ್ ತೆರೆಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಅದನ್ನು ಡ್ರ್ಯಾಗ್ ಮಾಡಲು ಎಳೆಯಿರಿ."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬಬಲ್ಸ್ ಅನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ಈ ಆ್ಯಪ್‌ನಿಂದ ಬಬಲ್‌ಗಳನ್ನು ಆಫ್ ಮಾಡಲು ನಿರ್ವಹಿಸಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ಈ ಆ್ಯಪ್‌ನಿಂದ ಬಬಲ್ಸ್ ಅನ್ನು ಆಫ್ ಮಾಡಲು ನಿರ್ವಹಿಸಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"ಅರ್ಥವಾಯಿತು"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"ಸಿಸ್ಟಂ ನ್ಯಾವಿಗೇಷನ ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"ಸಿಸ್ಟಂ ನ್ಯಾವಿಗೇಷನ್ ಅಪ್‌ಡೇಟ್ ಮಾಡಲು ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"ವರ್ಧನೆಯ ಓವರ್‌ಲೇ ವಿಂಡೋ"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"ವರ್ಧನೆಯ ವಿಂಡೋ"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"ವರ್ಧನೆಯ ವಿಂಡೋ ನಿಯಂತ್ರಣಗಳು"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ತ್ವರಿತ ನಿಯಂತ್ರಣಗಳು"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳು"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"ನಿಮ್ಮ ಸಂಪರ್ಕಿತ ಸಾಧನಗಳಿಗೆ ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಿ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ತ್ವರಿತ ನಿಯಂತ್ರಣಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳನ್ನು ಸೆಟಪ್ ಮಾಡಿ"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"ನಿಮ್ಮ ನಿಯಂತ್ರಣಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಪವರ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ನಿಯಂತ್ರಣಗಳು"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ಪವರ್ ಮೆನುವಿನಿಂದ ಪ್ರವೇಶಿಸಲು ನಿಯಂತ್ರಣಗಳನ್ನು ಆರಿಸಿ"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ಅದನ್ನು ಸರಿಸಲು ನಿಯಂತ್ರಣವೊಂದನ್ನು ಹಿಡಿದುಕೊಂಡು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"ಎಲ್ಲಾ ನಿಯಂತ್ರಣಗಳ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡಲು ಆಗಲಿಲ್ಲ."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ಇತರ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ತ್ವರಿತ ನಿಯಂತ್ರಣಗಳಿಗೆ ಸೇರಿಸಿ"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳಿಗೆ ಸೇರಿಸಿ"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಿ"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"ಈ ನಿಯಂತ್ರಣವನ್ನು ನಿಮ್ಮ ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಲು <xliff:g id="APP">%s</xliff:g> ಸೂಚಿಸಿದೆ."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"ನಿಯಂತ್ರಣಗಳನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index a72fe1ad8257..daa827864755 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"소리나 진동 없이 집중할 수 있도록 도와줍니다"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"소리나 진동으로 알립니다."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"이 콘텐츠로 연결되는 플로팅 바로가기로 사용자의 주의를 끕니다."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"대화 섹션 상단에 버블로 표시"</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"기본적으로 <xliff:g id="APP_NAME_0">%1$s</xliff:g>의 모든 대화가 버블로 표시됩니다. <xliff:g id="APP_NAME_1">%2$s</xliff:g>에서 관리하세요."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"대화 섹션 상단에 대화창으로 표시"</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"기본적으로 <xliff:g id="APP_NAME_0">%1$s</xliff:g>의 모든 대화가 대화창으로 표시됩니다. <xliff:g id="APP_NAME_1">%2$s</xliff:g>에서 관리하세요."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"설정"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"우선순위"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"최근에 닫은 도움말 풍선 없음"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"최근 버블과 내가 닫은 버블이 여기 표시됩니다."</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"최근에 닫은 대화창 없음"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"최근 대화창과 내가 닫은 대화창이 여기에 표시됩니다."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"이 알림은 수정할 수 없습니다."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"이 알림 그룹은 여기에서 설정할 수 없습니다."</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"프록시를 통한 알림"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"무음으로 설정됨"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"알림"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"버블 표시"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"버블 사용 중지"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"대화창 사용 중지"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"홈 화면에 추가"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"알림 관리"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"기기 서비스"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"제목 없음"</string>
<string name="restart_button_description" msgid="6916116576177456480">"탭하여 이 앱을 다시 시작하고 전체 화면으로 이동합니다."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> 알림 풍선 설정"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> 대화창 설정"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"관리"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g>의 <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> 외 <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>개의 <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"왼쪽 하단으로 이동"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"오른쪽 하단으로 이동"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"닫기"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"대화를 버블로 표시하지 않음"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"버블을 사용하여 채팅하세요"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"새로운 대화가 플로팅 아이콘인 버블로 표시됩니다. 버블을 열려면 탭하세요. 드래그하여 이동할 수 있습니다."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"언제든지 버블을 제어하세요"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"이 앱에서 버블을 사용 중지하려면 관리를 탭하세요."</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"대화를 대화창으로 표시하지 않음"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"대화창을 사용하여 채팅하세요"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"새로운 대화가 플로팅 아이콘인 대화창으로 표시됩니다. 대화창을 열려면 탭하세요. 드래그하여 이동할 수 있습니다."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"언제든지 대화창을 제어하세요"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"이 앱에서 대화창을 사용 중지하려면 관리를 탭하세요."</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"확인"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"시스템 탐색이 업데이트되었습니다. 변경하려면 설정으로 이동하세요."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"설정으로 이동하여 시스템 탐색을 업데이트하세요."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"확대 오버레이 창"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"확대 창"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"확대 창 컨트롤"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"빠른 컨트롤"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"기기 컨트롤"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"연결된 기기의 컨트롤을 추가합니다."</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"빠른 컨트롤 설정"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"기기 컨트롤 설정"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"전원 버튼을 길게 눌러 컨트롤에 액세스하세요."</string>
<string name="controls_providers_title" msgid="6879775889857085056">"컨트롤을 추가할 앱을 선택하세요"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"제어"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"전원 메뉴에서 액세스할 컨트롤을 선택합니다."</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"컨트롤을 길게 터치하고 드래그하여 이동"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"전체 컨트롤 목록을 로드할 수 없습니다."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"기타"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"빠른 컨트롤에 추가"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"기기 컨트롤에 추가"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"즐겨찾기에 추가"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g>에서 이 제어 기능을 즐겨찾기에 추가할 것을 제안합니다."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"컨트롤 업데이트됨"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 47c42fa5d56f..ff614e52f06a 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Уруксат берүү"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB мүчүлүштүктөрүн оңдоого уруксат жок"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Учурда бул аккаунтта USB аркылуу мүчүлүштүктөрдү оңдоо функциясын иштетүүгө болбойт. Негизги колдонуучунун аккаунтуна кириңиз."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Бул тармакта мүчүлүштүктөрдү зымсыз оңдоого уруксат берилсинби?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Бул тармакта мүчүлүштүктөрдү Wi-Fi аркылуу оңдоого уруксат берилсинби?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Тармактын аталышы (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi дареги (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Бул тармакта ар дайым уруксат берилсин"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Уруксат берүү"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Мүчүлүштүктөрдү зымсыз оңдоого уруксат берилген жок"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Учурда бул түзмөккө кирген колдонуучу мүчүлүштүктөрдү зымсыз оңдоо функциясын күйгүзө албайт. Бул функцияны колдонуу үчүн негизги колдонуучунун аккаунтуна которулуңуз."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Мүчүлүштүктөрдү Wi-Fi аркылуу оңдоого уруксат берилген жок"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Учурда бул түзмөккө кирген колдонуучу мүчүлүштүктөрдү Wi-Fi аркылуу оңдоо функциясын күйгүзө албайт. Бул функцияны колдонуу үчүн негизги колдонуучунун аккаунтуна которулуңуз."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB порту өчүрүлдү"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Түзмөгүңүздүн ичине суюктук же булганч нерселер кирип кетпеши үчүн USB порту өчүрүлдү. Азырынча ал аркылуу башка түзмөктөргө туташууга болбойт.\n\nUSB портун кайра колдонуу мүмкүн болгондо, билдирме аласыз."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Кубаттагычтарды жана аксессуарларды аныктоо үчүн USB оюкчасы иштетилди"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Скриншот тартууга колдонмо же ишканаңыз тыюу салган."</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Скриншотту четке кагуу"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Скриншотту ачуу"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Экранды жаздыргыч"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"экрандан видео жаздырып алуу"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды жаздыруу сеансы боюнча учурдагы билдирме"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Жаздырып башталсынбы?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Жаздыруу учурунда Android тутуму экраныңызда көрүнүп турган жана түзмөктө ойнотулуп жаткан бардык купуя маалыматты жаздырып алат. Буга сырсөздөр, төлөм маалыматы, сүрөттөр, билдирүүлөр жана аудио файлдар кирет."</string>
@@ -97,7 +97,7 @@
<string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Музыка, чалуулар жана рингтондор сыяктуу түзмөгүңүздөгү добуштар"</string>
<string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
<string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Түзмөктүн аудиосу жана микрофон"</string>
- <string name="screenrecord_start" msgid="330991441575775004">"Старт"</string>
+ <string name="screenrecord_start" msgid="330991441575775004">"Баштадык"</string>
<string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Экран жаздырылууда"</string>
<string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Экран жана аудио жаздырылууда"</string>
<string name="screenrecord_taps_label" msgid="1595690528298857649">"Экранды басууларды көрсөтүү"</string>
@@ -315,7 +315,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="1490779000057752281">"4G дайындары тындырылды"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="2286843518689837719">"Мобилдик Интернет кызматы тындырылды"</string>
<string name="data_usage_disabled_dialog_title" msgid="9131615296036724838">"Дайындар тындырылды"</string>
- <string name="data_usage_disabled_dialog" msgid="7933201635215099780">"Трафик сиз койгон чекке жетти. Эми мобилдик Интернетти колдоно албайсыз.\n\nЭгер улантсаңыз, дайындарды өткөрүү үчүн акы алынышы мүмкүн."</string>
+ <string name="data_usage_disabled_dialog" msgid="7933201635215099780">"Трафик сиз койгон чекке жетти. Эми мобилдик Интернетти колдоно албайсыз.\n\nЭгер улантсаңыз, дайын-даректерди өткөрүү үчүн акы алынышы мүмкүн."</string>
<string name="data_usage_disabled_dialog_enable" msgid="2796648546086408937">"Улантуу"</string>
<string name="gps_notification_searching_text" msgid="231304732649348313">"GPS издөө"</string>
<string name="gps_notification_found_text" msgid="3145873880174658526">"GPS боюнча аныкталган жайгашуу"</string>
@@ -394,7 +394,7 @@
<string name="quick_settings_connected" msgid="3873605509184830379">"Туташкан"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Туташып турат, батареянын деңгээли – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Туташууда…"</string>
- <string name="quick_settings_tethering_label" msgid="5257299852322475780">"Тетеринг"</string>
+ <string name="quick_settings_tethering_label" msgid="5257299852322475780">"Модем режими"</string>
<string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Байланыш түйүнү"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Күйгүзүлүүдө…"</string>
<string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Трафикти үнөмдөө күйүк"</string>
@@ -428,7 +428,7 @@
<string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC өчүрүлгөн"</string>
<string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC иштетилген"</string>
<string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Экранды жаздыруу"</string>
- <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Старт"</string>
+ <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Баштадык"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Токтотуу"</string>
<string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Колдонмолорду которуштуруу үчүн өйдө сүрүңүз"</string>
<string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Колдонмолорду тез которуштуруу үчүн оңго сүйрөңүз"</string>
@@ -497,11 +497,11 @@
<string name="user_remove_user_message" msgid="6702834122128031833">"Бул колдонуучунун бардык колдонмолору жана дайындары өчүрүлөт."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"Алып салуу"</string>
<string name="battery_saver_notification_title" msgid="8419266546034372562">"Батареяны үнөмдөгүч режими күйүк"</string>
- <string name="battery_saver_notification_text" msgid="2617841636449016951">"Иштин майнаптуулугун начарлатып, фондук дайындарды чектейт"</string>
+ <string name="battery_saver_notification_text" msgid="2617841636449016951">"Иштин майнаптуулугун начарлатып, фондук дайын-даректерди чектейт"</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Батареяны үнөмдөгүч режимин өчүрүү"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"Бул функцияны аткарган <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> кызматы экраныңызда көрүнүп турган бардык маалыматты же жаздыруу жана тышкы экранга чыгаруу учурунда түзмөгүңүздө ойнотулган маалыматты колдоно алат. Буга сырсөздөр, төлөмдүн чоо-жайы, сүрөттөр, билдирүүлөр жана ойнотулган аудио кирет."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Бул функцияны аткарган кызмат экраныңызда көрүнүп турган бардык маалыматты же жаздыруу жана тышкы экранга чыгаруу учурунда түзмөгүңүздө ойнотулган маалыматты колдоно алат. Буга сырсөздөр, төлөмдүн чоо-жайы, сүрөттөр, билдирүүлөр жана ойнотулган аудио кирет."</string>
- <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Жаздырылып же тышкы экранга чыгарылып башталсынбы?"</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Бул функцияны аткарган кызматка экраныңыздагы бардык маалымат же түзмөктө ойнотулуп жаткан нерсе, сырсөздөр, төлөмдөрдүн чоо-жайы, сүрөттөр, билдирүүлөр жана аудио файлдар жеткиликтүү болот."</string>
+ <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Жаздырып же тышкы экранга чыгарып баштайсызбы?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> менен жаздырылып же тышкы экранга чыгарылып башталсынбы?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"Экинчи көрсөтүлбөсүн"</string>
<string name="clear_all_notifications_text" msgid="348312370303046130">"Баарын тазалап салуу"</string>
@@ -510,7 +510,7 @@
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Үнсүз билдирмелер"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"Эскертүүлөр"</string>
<string name="notification_section_header_conversations" msgid="821834744538345661">"Жазышуулар"</string>
- <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Маанилүү эмес билдирмелердин баарын өчүрүү"</string>
+ <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Бардык үнсүз билдирмелерди өчүрүү"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"\"Тынчымды алба\" режиминде билдирмелер тындырылды"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"Азыр баштоо"</string>
<string name="empty_shade_text" msgid="8935967157319717412">"Билдирме жок"</string>
@@ -541,8 +541,8 @@
<string name="disable_vpn" msgid="482685974985502922">"VPN\'ди өчүрүү"</string>
<string name="disconnect_vpn" msgid="26286850045344557">"VPN\'ди ажыратуу"</string>
<string name="monitoring_button_view_policies" msgid="3869724835853502410">"Саясаттарды карап көрүү"</string>
- <string name="monitoring_description_named_management" msgid="7424612629468754552">"Түзмөгүңүздү <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
- <string name="monitoring_description_management" msgid="8081910434889677718">"Түзмөгүңүздү уюмуңуз башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
+ <string name="monitoring_description_named_management" msgid="7424612629468754552">"Түзмөгүңүздү <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайын-даректерди жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
+ <string name="monitoring_description_management" msgid="8081910434889677718">"Түзмөгүңүздү уюмуңуз башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайын-даректерди жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
<string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Ишканаңыз бул түзмөккө тастыктоочу борборду орнотту. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Ишканаңыз жумуш профилиңизге тастыктоочу борборду орнотту. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
<string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Бул түзмөктө тастыктоочу борбор орнотулган. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
@@ -553,7 +553,7 @@
<string name="monitoring_description_personal_profile_named_vpn" msgid="8179722332380953673">"Жеке профилиңиз электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди көзөмөлдөй турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турат."</string>
<string name="monitoring_description_do_header_generic" msgid="6130190408164834986">"Түзмөгүңүз <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> тарабынан башкарылат."</string>
<string name="monitoring_description_do_header_with_name" msgid="2696255132542779511">"Түзмөгүңүздү башкаруу үчүн <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> уюму <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> колдонмосун колдонот."</string>
- <string name="monitoring_description_do_body" msgid="7700878065625769970">"Администраторуңуз жөндөөлөрдү, корпоративдик кирүү мүмкүнчүлүгүн, колдонмолорду, уруксаттарды жана ушул түзмөкө байланыштуу дайындарды, ошондой эле түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат."</string>
+ <string name="monitoring_description_do_body" msgid="7700878065625769970">"Администраторуңуз жөндөөлөрдү, корпоративдик кирүү мүмкүнчүлүгүн, колдонмолорду, уруксаттарды жана ушул түзмөкө байланыштуу дайын-даректерди, ошондой эле түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат."</string>
<string name="monitoring_description_do_learn_more_separator" msgid="1467280496376492558">" "</string>
<string name="monitoring_description_do_learn_more" msgid="645149183455573790">"Кеңири маалымат"</string>
<string name="monitoring_description_do_body_vpn" msgid="7699280130070502303">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
@@ -578,7 +578,7 @@
<string name="hidden_notifications_cancel" msgid="4805370226181001278">"Жок, рахмат"</string>
<string name="hidden_notifications_setup" msgid="2064795578526982467">"Орнотуу"</string>
<string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
- <string name="volume_zen_end_now" msgid="5901885672973736563">"Азыр өчүрүлсүн"</string>
+ <string name="volume_zen_end_now" msgid="5901885672973736563">"Өчүрүү"</string>
<string name="accessibility_volume_settings" msgid="1458961116951564784">"Добуштун жөндөөлөрү"</string>
<string name="accessibility_volume_expand" msgid="7653070939304433603">"Жайып көрсөтүү"</string>
<string name="accessibility_volume_collapse" msgid="2746845391013829996">"Жыйнап коюу"</string>
@@ -758,10 +758,10 @@
<item quantity="other">%d мүнөт</item>
<item quantity="one">%d мүнөт</item>
</plurals>
- <string name="battery_panel_title" msgid="5931157246673665963">"Батарея колдонулушу"</string>
+ <string name="battery_panel_title" msgid="5931157246673665963">"Батареяны керектөө"</string>
<string name="battery_detail_charging_summary" msgid="8821202155297559706">"Батареяны үнөмдөгүч түзмөк кубатталып жатканда иштебейт"</string>
<string name="battery_detail_switch_title" msgid="6940976502957380405">"Батареяны үнөмдөгүч"</string>
- <string name="battery_detail_switch_summary" msgid="3668748557848025990">"Иштин майнаптуулугун начарлатып, фондук дайындарды чектейт"</string>
+ <string name="battery_detail_switch_summary" msgid="3668748557848025990">"Иштин майнаптуулугун начарлатып, фондук дайын-даректерди чектейт"</string>
<string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> баскычы"</string>
<string name="keyboard_key_home" msgid="3734400625170020657">"Башкы бет"</string>
<string name="keyboard_key_back" msgid="4185420465469481999">"Артка"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Түзмөк кызматтары"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Аталышы жок"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Бул колдонмону өчүрүп күйгүзүп, толук экранга өтүү үчүн таптап коюңуз."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> көбүктөрүнүн жөндөөлөрү"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> калкып чыкма билдирмелер жөндөөлөрү"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Башкаруу"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> колдонмосунан <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> жана дагы <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> колдонмодон <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -995,7 +995,7 @@
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Жабуу"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Жазышуу калкып чыкма билдирмеде көрүнбөсүн"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Калкып чыкма билдирмелер аркылуу маектешүү"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Жаңы жазышуулар калкыма сүрөтчөлөр же билдирмелер болуп көрүнөт. Калкып чыкма билдирмени ачуу үчүн таптап коюңуз. Жылдыруу үчүн сүйрөңүз."</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Жаңы жазышуулар калкыма сүрөтчөлөр же калкып чыкма билдирмелер болуп көрүнөт. Калкып чыкма билдирмелерди ачуу үчүн таптап коюңуз. Жылдыруу үчүн сүйрөңүз."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Калкып чыкма билдирмелерди каалаган убакта көзөмөлдөңүз"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Бул колдонмодогу калкып чыкма билдирмелерди өчүрүү үчүн \"Башкарууну\" басыңыз"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Түшүндүм"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Чоңойтуу терезесин үстүнө коюу"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Чоңойтуу терезеси"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Чоңойтуу терезесин башкаруу каражаттары"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Ыкчам көзөмөлдөр"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Түзмөктү көзөмөлдөө элементтери"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Байланыштырылган түзмөктөрүңүз үчүн көзөмөлдөрдү кошуңуз"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Ыкчам көзөмөлдөрдү жөндөө"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Түзмөктү көзөмөлдөө элементтерин жөндөө"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Көзөмөлдөргө өтүү үчүн күйгүзүү/өчүрүү баскычын басып туруңуз"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Көзөмөлдөрдү кошуу үчүн колдонмо тандаңыз"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Башкаруу элементтери"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Күйгүзүү/өчүрүү баскычынын менюсу үчүн көзөмөлдөрдү тандаңыз"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Жылдыруу үчүн көзөмөлдү сүйрөп келиңиз"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Бардык көзөмөлдөрдүн тизмеси жүктөлгөн жок."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Башка"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Ыкчам көзөмөлгө кошуу"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Түзмөктү көзөмөлдөө элементтерине кошуу"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Сүйүктүүлөргө кошуу"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> бул көзөмөлдү сүйүктүүлөргө кошууну сунуштады."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Башкаруу элементтери жаңырды"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 8336c61095c3..2250077a5e0c 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ແອັບ ຫຼື ອົງກອນຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຖ່າຍຮູບໜ້າຈໍ"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"ປິດຮູບໜ້າຈໍ"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"ເປີດຮູບໜ້າຈໍ"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"ຕົວບັນທຶກໜ້າຈໍ"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"ໂປຣແກຣມບັນທຶກໜ້າຈໍ"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"ການແຈ້ງເຕືອນສຳລັບເຊດຊັນການບັນທຶກໜ້າຈໍໃດໜຶ່ງ"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"ເລີ່ມການບັນທຶກບໍ?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"ໃນລະຫວ່າງການບັນທຶກ, ລະບົບ Android ຈະສາມາດບັນທຶກຂໍ້ມູນທີ່ລະອຽດອ່ອນໃດກໍຕາມທີ່ສະແດງຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນທ່ານ. ນີ້ຮວມເຖິງລະຫັດຜ່ານ, ຂໍ້ມູນການຈ່າຍເງິນ, ຮູບ, ຂໍ້ຄວາມ ແລະ ສຽງນຳ."</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"ຊ່ວຍທ່ານມີສະມາທິໂດຍບໍ່ໃຊ້ສຽງ ຫຼື ການສັ່ນເຕືອນ."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"ດຶງຄວາມສົນໃຈຂອງທ່ານດ້ວຍສຽງ ຫຼື ການສັ່ນເຕືອນ."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ເອົາໃຈໃສ່ທາງລັດແບບລອຍໄປຫາເນື້ອຫານີ້."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ສະແດງຢູ່ເທິງສຸດຂອງພາກສ່ວນການສົນທະນາ ແລະ ປາກົດເປັນ bubble."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ການສົນທະນາທັງໝົດຈາກ bubble ຂອງ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ຕາມຄ່າເລີ່ມຕົ້ນ. ຈັດການໃນ <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ສະແດງຢູ່ເທິງສຸດຂອງພາກສ່ວນການສົນທະນາ ແລະ ສະແດງເປັນຟອງ."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"ການສົນທະນາທັງໝົດຈາກ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ທີ່ສະແດງເປັນຟອງຕາມຄ່າເລີ່ມຕົ້ນ. ຈັດການໃນ <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ຕັ້ງຄ່າ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ຄວາມສຳຄັນ"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ບໍ່ມີ bubble ຫຼ້າສຸດ"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Bubbles ຫຼ້າສຸດ ແລະ Bubbles ທີ່ປິດໄປຈະປາກົດຢູ່ບ່ອນນີ້"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ບໍ່ມີຟອງຫຼ້າສຸດ"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ຟອງຫຼ້າສຸດ ແລະ ຟອງທີ່ປິດໄປຈະປາກົດຢູ່ບ່ອນນີ້"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ບໍ່ສາມາດຕັ້ງຄ່າກຸ່ມການແຈ້ງເຕືອນນີ້ຢູ່ບ່ອນນີ້ໄດ້"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"ການແຈ້ງເຕືອນແບບພຣັອກຊີ"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"ປິດສຽງແລ້ວ"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"ການເຕືອນ"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"ສະແດງຟອງນ້ຳ"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ລຶບຟອງນ້ຳອອກ"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ລຶບຟອງອອກ"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"ເພີ່ມໃສ່ໜ້າຈໍຫຼັກ"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"ການຄວບຄຸມການແຈ້ງເຕືອນ"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"ບໍລິການອຸປະກອນ"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"ບໍ່ມີຊື່"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ແຕະເພື່ອຣີສະຕາດແອັບນີ້ ແລະ ໃຊ້ແບບເຕັມຈໍ."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"ການຕັ້ງຄ່າສຳລັບ bubble <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"ການຕັ້ງຄ່າສຳລັບຟອງ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"ຈັດການ"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ຈາກ <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ຈາກ <xliff:g id="APP_NAME">%2$s</xliff:g> ແລະ ອີກ <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"ຍ້າຍຊ້າຍລຸ່ມ"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"ຍ້າຍຂວາລຸ່ມ"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"ປິດໄວ້"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"ຢ່າ bubble ການສົນທະນາ"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"ສົນທະນາໂດຍໃຊ້ bubbles"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"ການສົນທະນາໃໝ່ຈະປາກົດເປັນໄອຄອນ ຫຼື bubbles ແບບລອຍ. ແຕະເພື່ອເປີດ bubble. ລາກເພື່ອຍ້າຍມັນ."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ຄວບຄຸມ bubbles ຕອນໃດກໍໄດ້"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ແຕະຈັດການເພື່ອປິດ bubble ຈາກແອັບນີ້"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"ຢ່າໃຊ້ຟອງໃນການສົນທະນາ"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"ສົນທະນາໂດຍໃຊ້ຟອງ"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"ການສົນທະນາໃໝ່ຈະປາກົດເປັນໄອຄອນ ຫຼື ຟອງແບບລອຍ. ແຕະເພື່ອເປີດຟອງ. ລາກເພື່ອຍ້າຍມັນ."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ຄວບຄຸມຟອງຕອນໃດກໍໄດ້"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ແຕະຈັດການ ເພື່ອປິດຟອງຈາກແອັບນີ້"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"ເຂົ້າໃຈແລ້ວ"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"ອັບເດດການນຳທາງລະບົບແລ້ວ. ເພື່ອປ່ຽນແປງ, ກະລຸນາໄປທີ່ການຕັ້ງຄ່າ."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"ໄປທີ່ການຕັ້ງຄ່າເພື່ອອັບເດດການນຳທາງລະບົບ"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"ໜ້າຈໍວາງທັບການຂະຫຍາຍ"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"ໜ້າຈໍການຂະຫຍາຍ"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"ການຄວບຄຸມໜ້າຈໍການຂະຫຍາຍ"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ການຄວບຄຸມດ່ວນ"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ການຄວບຄຸມອຸປະກອນ"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"ເພີ່ມການຄວບຄຸມສຳລັບອຸປະກອນທີ່ເຊື່ອມຕໍ່ແລ້ວຂອງທ່ານ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ຕັ້ງຄ່າການຄວບຄຸມດ່ວນ"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ຕັ້ງຄ່າການຄວບຄຸມອຸປະກອນ"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້ເພື່ອເຂົ້າເຖິງການຄວບຄຸມຂອງທ່ານ"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ເລືອກແອັບເພື່ອເພີ່ມການຄວບຄຸມ"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ການຄວບຄຸມ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ເລືອກການຄວບຄຸມເພື່ອເຂົ້າເຖິງຈາກເມນູເປີດປິດ"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ກົດຄ້າງໄວ້ແລ້ວລາກການຄວບຄຸມເພື່ອຍ້າຍມັນ"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"ບໍ່ສາມາດໂຫຼດລາຍຊື່ການຄວບຄຸມທັງໝົດໄດ້."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ອື່ນໆ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ເພີ່ມໃສ່ການຄວບຄຸມດ່ວນ"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ເພີ່ມໃສ່ການຄວບຄຸມອຸປະກອນ"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ເພີ່ມໃສ່ລາຍການທີ່ມັກ"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ແນະນຳການຄວບຄຸມນີ້ເພື່ອເພີ່ມໃສ່ລາຍການທີ່ທ່ານມັກ."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"ອັບເດດການຄວບຄຸມແລ້ວ"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 2fb11bf7f8ad..ffe86199f71d 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Jūsų organizacijoje arba naudojant šią programą neleidžiama daryti ekrano kopijų"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Praleisti ekrano kopiją"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Atidaryti ekrano kopiją"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Ekrano garso įrašytuvas"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Ekrano vaizdo įrašytuvas"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Šiuo metu rodomas ekrano įrašymo sesijos pranešimas"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Pradėti įrašymą?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Įrašant „Android“ sistema gali fiksuoti bet kokią neskelbtiną informaciją, rodomą ekrane ar leidžiamą įrenginyje. Tai apima slaptažodžius, išsamią mokėjimo informaciją, nuotraukas, pranešimus ir garso įrašus."</string>
@@ -714,12 +714,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Padeda atkreipti dėmesį be garso arba vibravimo."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Atkreipia dėmesį garsu arba vibravimu."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Naudojant slankųjį spartųjį klavišą lengviau sutelkti dėmesį į šį turinį."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Rodoma pokalbio skilties viršuje kaip debesėlis."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Visi pokalbiai iš „<xliff:g id="APP_NAME_0">%1$s</xliff:g>“ debesėlio pagal numatytuosius nustatymus. Tvarkyti naudojant „<xliff:g id="APP_NAME_1">%2$s</xliff:g>“."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Rodoma pokalbio skilties viršuje kaip burbulas."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Visi pokalbiai iš „<xliff:g id="APP_NAME_0">%1$s</xliff:g>“ burbulo pagal numatytuosius nustatymus. Tvarkyti naudojant „<xliff:g id="APP_NAME_1">%2$s</xliff:g>“."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nustatymai"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritetas"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nėra naujausių debesėlių"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Naujausi ir atsisakyti debesėliai bus rodomi čia"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nėra naujausių burbulų"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Naujausi ir atsisakyti burbulus bus rodomi čia"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Šių pranešimų keisti negalima."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Šios grupės pranešimai čia nekonfigūruojami"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Per tarpinį serverį gautas pranešimas"</string>
@@ -747,7 +747,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Nutildyta"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Įspėti"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Rodyti debesėlį"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Pašalinti debesėlius"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Pašalinti burbulus"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Pridėti prie pagrindinio ekrano"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"pranešimų valdikliai"</string>
@@ -993,7 +993,7 @@
<string name="device_services" msgid="1549944177856658705">"Įrenginio paslaugos"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Nėra pavadinimo"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Palieskite, kad paleistumėte iš naujo šią programą arba įjungtumėte viso ekrano režimą."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ debesėlių nustatymai"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ burbulų nustatymai"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Tvarkyti"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"„<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>“ iš „<xliff:g id="APP_NAME">%2$s</xliff:g>“"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"„<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>“ iš „<xliff:g id="APP_NAME">%2$s</xliff:g>“ ir dar <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -1003,11 +1003,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Perkelti į apačią kairėje"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Perkelti į apačią dešinėje"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Atmesti"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Nerodyti pokalbio debesėlyje"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Pokalbis naudojant debesėlius"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Nauji pokalbiai rodomi kaip slankiosios piktogramos arba debesėliai. Palieskite, kad atidarytumėte debesėlį. Vilkite, kad perkeltumėte."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Bet kada valdyti debesėlius"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Palieskite „Tvarkyti“, kad išjungtumėte debesėlius šioje programoje"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Nerodyti pokalbio burbule"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Pokalbis naudojant burbulus"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Nauji pokalbiai rodomi kaip slankiosios piktogramos arba burbulus. Palieskite, kad atidarytumėte burbulą. Vilkite, kad perkeltumėte."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Bet kada valdyti burbulus"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Palieskite „Tvarkyti“, kad išjungtumėte burbulus šioje programoje"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Supratau"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Sistemos naršymo funkcijos atnaujintos. Jei norite pakeisti, eikite į skiltį „Nustatymai“."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Eikite į skiltį „Nustatymai“, kad atnaujintumėte sistemos naršymo funkcijas"</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Didinimo perdangos langas"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Didinimo langas"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Didinimo lango valdikliai"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Spartieji valdikliai"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Įrenginio valdikliai"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Pridėkite prijungtų įrenginių valdiklių"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Sparčiųjų valdiklių nustatymas"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Įrenginio valdiklių nustatymas"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Laikykite paspaudę maitinimo mygtuką, kad pasiektumėte valdiklius"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Pasirinkite programą, kad pridėtumėte valdiklių"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Valdikliai"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pasirinkite valdiklius, kuriuos norite pasiekti įjungimo meniu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Norėdami perkelti valdiklį, laikykite ir vilkite jį"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Nepavyko įkelti visų valdiklių sąrašo."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Kita"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Pridėj. prie sparč. valdiklių"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Pridėjimas prie įrenginio valdiklių"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Pridėjimas prie mėgstamiausių"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"„<xliff:g id="APP">%s</xliff:g>“ pasiūlė pridėti šį valdiklį prie mėgstamiausių."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Valdikliai atnaujinti"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 1ace75bdf3dc..adc7c1fad506 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -1010,9 +1010,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Palielināšanas pārklājuma logs"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Palielināšanas logs"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Palielināšanas loga vadīklas"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Ātrās piekļuves vadīklas"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Ierīces vadīklas"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Pievienojiet vadīklas pievienotajām ierīcēm"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Ātrās piekļuves vadīklu iestatīšana"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Ierīces vadīklu iestatīšana"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Turiet nospiestu barošanas pogu, lai piekļūtu vadīklām."</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Izvēlieties lietotni, lai pievienotu vadīklas"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1022,10 +1022,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Vadīklas"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izvēlieties vadīklas, kurām piekļūt no barošanas izvēlnes"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Lai pārvietotu lietotni, turiet un velciet to"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Nevarēja ielādēt sarakstu ar visām vadīklām."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Cita"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Pievienošana ātrajām vadīklām"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Pievienošana ierīces vadīklām"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Pievienot izlasei"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ieteica pievienot šo vadīklu izlasei."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Vadīklas atjauninātas"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 5945fa9998f1..c41cc5ab6d22 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Апликацијата или вашата организација не дозволува снимање слики од екранот"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Отфрлете ја сликата од екранот"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Отворете ја сликата од екранот"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Снимач на екранот"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Снимач на екран"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Тековно известување за сесија за снимање на екранот"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Да се започне со снимање?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"При снимањето, системот на Android може да ги сними сите чувствителни податоци што се видливи на вашиот екран или пуштени на уредот. Ова вклучува лозинки, податоци за плаќање, фотографии, пораки и аудио."</string>
@@ -394,7 +394,7 @@
<string name="quick_settings_connected" msgid="3873605509184830379">"Поврзано"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Поврзан, ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Се поврзува..."</string>
- <string name="quick_settings_tethering_label" msgid="5257299852322475780">"Поврзување"</string>
+ <string name="quick_settings_tethering_label" msgid="5257299852322475780">"Врзување"</string>
<string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Точка на пристап"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Се вклучува…"</string>
<string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Вклучен штедач"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Услуги за уредот"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Без наслов"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Допрете за да ја рестартирате апликацијава и да ја отворите на цел екран."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Поставки за баланчињата на <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Поставки за балончињата за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Управување"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> од <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> од <xliff:g id="APP_NAME">%2$s</xliff:g> и уште <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -993,7 +993,7 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Премести долу лево"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Премести долу десно"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Отфрли"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Разговор без балончиња"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Не прикажувај го разговорот во балончиња"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Разговор во балончиња"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Новите разговори ќе се појавуваат како лебдечки икони или балончиња. Допрете за отворање на балончето. Повлечете за да го преместите."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Контролирајте ги балончињата во секое време"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Прозорец за преклопување на зголемувањето"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Прозорец за зголемување"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Контроли на прозорец за зголемување"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Брзи контроли"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за уредите"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Додајте контроли за поврзаните уреди"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Поставете брзи контроли"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Поставете ги контролите за уредите"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Задржете го копчето за вклучување за да пристапите до контролите"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Изберете апликација во која ќе додадате контроли"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Изберете ги контролите до кои ќе пристапувате од менито за вклучување"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Задржете и влечете ја контролата за да ја преместите"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Не можеше да се вчита списокот со сите контроли."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друга"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Додајте во брзите контроли"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Додајте во контроли за уредите"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Додај во омилени"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> предложи да ја додадете контролава во вашите омилени."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Контролите се ажурирани"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 07c2eddb2bbd..2d53c8d9ebcf 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"അനുവദിക്കുക"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB ഡീബഗ്ഗിംഗ് അനുവദനീയമല്ല"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"ഉപകരണത്തിൽ ഇപ്പോൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന ഉപയോക്താവിന് USB ഡീബഗ്ഗിംഗ് ഓണാക്കാനാകില്ല. ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ പ്രാഥമിക ഉപയോക്താവിലേക്ക് മാറുക."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"ഈ നെറ്റ്‌വർക്കിൽ വയർലെസ് ഡീബഗ്ഗ് ചെയ്യൽ അനുവദിക്കണോ?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"ഈ നെറ്റ്‌വർക്കിൽ വയർലെസ് ഡീബഗ്ഗിംഗ് അനുവദിക്കണോ?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"നെറ്റ്‌വർക്കിന്റെ പേര് (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nവൈഫൈ വിലാസം (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"ഈ നെറ്റ്‌വർക്കിൽ എപ്പോഴും അനുവദിക്കുക"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"അനുവദിക്കൂ"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"വയർലെസ് ഡീബഗ്ഗ് ചെയ്യൽ അനുവദനീയമല്ല"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"ഉപകരണത്തിൽ ഇപ്പോൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന ഉപയോക്താവിന് വയർലെസ് ഡീബഗ്ഗ് ചെയ്യൽ ഓണാക്കാനാകില്ല. ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ പ്രാഥമിക ഉപയോക്താവിലേക്ക് മാറുക."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"വയർലെസ് ഡീബഗ്ഗിംഗ് അനുവദനീയമല്ല"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"ഉപകരണത്തിൽ ഇപ്പോൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന ഉപയോക്താവിന് വയർലെസ് ഡീബഗ്ഗിംഗ് ഓണാക്കാനാകില്ല. ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ പ്രാഥമിക ഉപയോക്താവിലേക്ക് മാറുക."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB പോർട്ട് പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"ദ്രാവകത്തിൽ നിന്നോ പൊടിയിൽ നിന്നോ നിങ്ങളുടെ ഉപകരണത്തെ പരിരക്ഷിക്കാനായി USB പോർട്ട് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നതിനാൽ അത് ആക്‌സസറികളൊന്നും തിരിച്ചറിയില്ല.\n\n USB പോർട്ട് വീണ്ടും ഉപയോഗിക്കാനാകുമ്പോൾ നിങ്ങളെ അറിയിക്കും."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"ആക്‌സസറികളും ചാർജറുകളും കണ്ടെത്താൻ USB പോർട്ട് പ്രവർത്തനക്ഷമമാക്കുക"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"ശബ്‌ദമോ വൈബ്രേഷനോ ഇല്ലാതെ ശ്രദ്ധ കേന്ദ്രീകരിക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"ശബ്‌ദമോ വെെബ്രേഷനോ ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ ക്ഷണിക്കുന്നു."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ഈ ഉള്ളടക്കത്തിലേക്ക് ഒരു ഫ്ലോട്ടിംഗ് കുറുക്കുവഴി ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ നിലനിർത്തുന്നു."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"സംഭാഷണ വിഭാഗത്തിന് മുകളിൽ ഒരു ബബിളായി ദൃശ്യമാവുന്നു."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"സംഭാഷണ വിഭാഗത്തിന് മുകളിൽ ബബിളായി ദൃശ്യമാവുന്നു."</string>
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> എന്നതിൽ നിന്നുള്ള എല്ലാ സംഭാഷണങ്ങളും ഡിഫോൾട്ടായി ബബിളാവുന്നു. <xliff:g id="APP_NAME_1">%2$s</xliff:g> എന്നതിൽ മാനേജ് ചെയ്യുക."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ക്രമീകരണം"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"മുൻഗണന"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"അടുത്തിടെയുള്ള ബബിളുകൾ ഒന്നുമില്ല"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"അടുത്തിടെയുള്ള ബബിൾ, ഡിസ്മിസ് ചെയ്ത ബബിൾ എന്നിവ ഇവിടെ ദൃശ്യമാവും"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"അടുത്തിടെയുള്ള ബബിളുകൾ, ഡിസ്മിസ് ചെയ്ത ബബിളുകൾ എന്നിവ ഇവിടെ ദൃശ്യമാവും"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ഈ അറിയിപ്പുകൾ പരിഷ്ക്കരിക്കാനാവില്ല."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"അറിയിപ്പുകളുടെ ഈ ഗ്രൂപ്പ് ഇവിടെ കോണ്‍ഫിഗര്‍ ചെയ്യാൻ കഴിയില്ല"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"പ്രോക്‌സി അറിയിപ്പ്"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"ഉപകരണ സേവനങ്ങള്‍"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"പേരില്ല"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ഈ ആപ്പ് റീസ്‌റ്റാർട്ട് ചെയ്യാനും പൂർണ്ണ സ്‌ക്രീനാവാനും ടാപ്പ് ചെയ്യുക."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനുള്ള ബബിളുകളുടെ ക്രമീകരണം"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ബബിളുകളുടെ ക്രമീകരണം"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"മാനേജ് ചെയ്യുക"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g>-ൽ നിന്നുള്ള <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>, <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> കൂടുതലും"</string>
@@ -994,10 +994,10 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"ചുവടെ വലതുഭാഗത്തേക്ക് നീക്കുക"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"ഡിസ്‌മിസ് ചെയ്യുക"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"സംഭാഷണം ബബിൾ ചെയ്യരുത്"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"ബബിൾ ഉപയോഗിച്ച് ചാറ്റ് ചെയ്യുക"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"പുതിയ സംഭാഷണങ്ങൾ ഫ്ലോട്ടിംഗ് ഐക്കണുകളോ ബബിളോ ആയി ദൃശ്യമാവുന്നു. ബബിൾ തുറക്കാൻ ടാപ്പ് ചെയ്യു. ഇത് നീക്കാൻ വലിച്ചിടുക."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ബബിൾ ഏതുസമയത്തും നിയന്ത്രിക്കുക"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ഈ ആപ്പിൽ നിന്നുള്ള ബബിളുകൾ ഓഫാക്കാൻ \'മാനേജ് ചെയ്യുക\' ടാപ്പ് ചെയ്യുക"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"ബബിളുകൾ ഉപയോഗിച്ച് ചാറ്റ് ചെയ്യുക"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"പുതിയ സംഭാഷണങ്ങൾ ഫ്ലോട്ടിംഗ് ഐക്കണുകളോ ബബിളുകളോ ആയി ദൃശ്യമാവുന്നു. ബബിൾ തുറക്കാൻ ടാപ്പ് ചെയ്യു. ഇത് നീക്കാൻ വലിച്ചിടുക."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ബബിളുകൾ ഏതുസമയത്തും നിയന്ത്രിക്കുക"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ഈ ആപ്പിൽ നിന്നുള്ള ബബിളുകൾ ഓഫാക്കാൻ മാനേജ് ചെയ്യുക ടാപ്പ് ചെയ്യുക"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"ലഭിച്ചു"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"സിസ്‌റ്റം നാവിഗേഷൻ അപ്‌ഡേറ്റ് ചെയ്‌തു. മാറ്റങ്ങൾ വരുത്താൻ ക്രമീകരണത്തിലേക്ക് പോവുക."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"സിസ്‌റ്റം നാവിഗേഷൻ അപ്‌ഡേറ്റ് ചെയ്യാൻ ക്രമീകരണത്തിലേക്ക് പോവുക"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"മാഗ്നിഫിക്കേഷൻ ഓവർലേ വിൻഡോ"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"മാഗ്നിഫിക്കേഷൻ വിൻഡോ"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"മാഗ്നിഫിക്കേഷൻ വിൻഡോ നിയന്ത്രണങ്ങൾ"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ദ്രുത നിയന്ത്രണങ്ങൾ"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ഉപകരണ നിയന്ത്രണങ്ങൾ"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"നിങ്ങളുടെ കണക്റ്റ് ചെയ്ത ഉപകരണങ്ങൾക്ക് നിയന്ത്രണങ്ങൾ ചേർക്കുക"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ദ്രുത നിയന്ത്രണങ്ങൾ സജ്ജീകരിക്കുക"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ഉപകരണ നിയന്ത്രണങ്ങൾ സജ്ജീകരിക്കുക"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"നിങ്ങളുടെ നിയന്ത്രണങ്ങൾ ആക്‌സസ് ചെയ്യാൻ പവർ ബട്ടണിൽ പിടിക്കുക"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"നിയന്ത്രണങ്ങൾ ചേർക്കാൻ ആപ്പ് തിരഞ്ഞെടുക്കുക"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"നിയന്ത്രണങ്ങൾ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"പവർ മെനുവിൽ നിന്ന് ആക്സസ് ചെയ്യേണ്ട നിയന്ത്രണങ്ങൾ തിരഞ്ഞെടുക്കുക"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ഇത് നീക്കാൻ, നിയന്ത്രണം പിടിച്ച് വലിച്ചിടുക"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"എല്ലാ നിയന്ത്രണങ്ങളുടെയും ലിസ്റ്റ് ലോഡ് ചെയ്യാനായില്ല."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"മറ്റുള്ളവ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ദ്രുത നിയന്ത്രണങ്ങളിലേക്ക് ചേർക്കൂ"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ഉപകരണ നിയന്ത്രണങ്ങളിലേക്ക് ചേർക്കുക"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"പ്രിയപ്പെട്ടവയിലേക്ക് ചേർക്കുക"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"ഈ നിയന്ത്രണത്തെ നിങ്ങളുടെ പ്രിയപ്പെട്ടവയിലേക്ക് ചേർക്കാൻ <xliff:g id="APP">%s</xliff:g> ശുപാർശ ചെയ്‌തു."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"നിയന്ത്രണങ്ങൾ അപ്ഡേറ്റ് ചെയ്തു"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 52c0581d7d39..b4bac5f07ca0 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Зөвшөөрөх"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB алдаа засалт хийх боломжгүй"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Энэ төхөөрөмжид нэвтэрсэн хэрэглэгч USB дебаг хийх онцлогийг асаах боломжгүй байна. Энэ онцлогийг ашиглахын тулд үндсэн хэрэглэгч рүү сэлгэнэ үү."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Энэ сүлжээн дээр утасгүй дебагийг зөвшөөрөх үү?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Энэ сүлжээн дээр wireless debugging-г зөвшөөрөх үү?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Сүлжээний нэр (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi хаяг (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Энэ сүлжээн дээр үргэлж зөвшөөрөх"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Зөвшөөрөх"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Утасгүй дебагийг зөвшөөрөөгүй байна"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Энэ төхөөрөмжид одоогоор нэвтэрсэн байгаа хэрэглэгч утасгүй дебагийг асаах боломжгүй. Энэ онцлогийг ашиглахын тулд үндсэн хэрэглэгч рүү сэлгэнэ үү."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Wireless debugging-г зөвшөөрөөгүй байна"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Энэ төхөөрөмжид одоогоор нэвтэрсэн байгаа хэрэглэгч wireless debugging-г асаах боломжгүй. Энэ онцлогийг ашиглахын тулд үндсэн хэрэглэгч рүү сэлгэнэ үү."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB портыг идэвхгүй болгосон"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Таны төхөөрөмжийг шингэн зүйл эсвэл бохирдлоос хамгаалахын тулд USB портыг идэвхгүй болгосон бөгөөд энэ нь ямар ч дагалдах хэрэгслийг илрүүлэхгүй.\n\nТанд USB портыг дахин ашиглахад аюулгүй болох үед мэдэгдэх болно."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Цэнэглэгч болон нэмэлт хэрэгслийг илрүүлэхийн тулд USB портыг идэвхжүүлсэн"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Таны апп, байгууллагад дэлгэцийн зураг авахыг зөвшөөрдөггүй"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Дэлгэцийн агшныг хаах"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Дэлгэцийн агшныг нээх"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Дэлгэцийн бичигч"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Дэлгэцийн үйлдэл бичигч"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Дэлгэц бичих горимын үргэлжилж буй мэдэгдэл"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Бичлэгийг эхлүүлэх үү?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Бичих үед Андройд систем нь таны дэлгэц дээр харагдах эсвэл төхөөрөмж дээрээ тоглуулсан аливаа эмзэг мэдээллийг авах боломжтой. Үүнд нууц үг, төлбөрийн мэдээлэл, зураг, зурвас болон аудио багтана."</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Дуугүй болгосон"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Сэрэмжлүүлж байна"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Хөөсийг харуулах"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Хөөсийг хасах"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Бөмбөлгүүдийг хасах"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Үндсэн нүүрэнд нэмэх"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"мэдэгдлийн удирдлага"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Төхөөрөмжийн үйлчилгээ"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Гарчиггүй"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Энэ аппыг дахин эхлүүлж, бүтэн дэлгэцэд орохын тулд товшино уу."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н хөөсний тохиргоо"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н бөмбөлгүүдийн тохиргоо"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Удирдах"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g>-н <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g>-н <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> болон бусад <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Томруулалтыг давхарласан цонх"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Томруулалтын цонх"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Томруулалтын цонхны хяналт"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Шуурхай хяналт"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Төхөөрөмжийн хяналт"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Холбогдсон төхөөрөмжүүд дээрээ хяналт нэмэх"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Шуурхай хяналтыг тохируулах"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Төхөөрөмжийн хяналтыг тохируулах"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Хяналтууддаа хандахын тулд Асаах товчийг удаан дарна уу"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Хяналтууд нэмэхийн тулд аппыг сонгоно уу"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Хяналт"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Тэжээлийн цэсээс хандах хяналтуудыг сонгоно уу"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Хяналтыг зөөхийн тулд дараад чирнэ үү"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Бүх хяналтын жагсаалтыг ачаалж чадсангүй."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Бусад"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Шуурхай хяналтад нэмэх"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Төхөөрөмжийн хяналт руу нэмэх"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Дуртайд нэмэх"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> нь энэ хяналтыг дуртайдаа нэмэхийг санал болгосон."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Хяналтуудыг шинэчиллээ"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index c2ebfcd3d779..de4f39f02bad 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -997,7 +997,7 @@
<string name="bubbles_user_education_title" msgid="5547017089271445797">"बबल वापरून चॅट करा"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"नवीन संभाषणे फ्लोटिंग आयकन किंवा बबल म्हणून दिसतात. बबल उघडण्यासाठी टॅप करा. हे हलवण्यासाठी ड्रॅग करा."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"बबल कधीही नियंत्रित करा"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"या अ‍ॅपमधून बुडबुडे बंद करण्यासाठी व्यवस्थापित करा वर टॅप करा"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"या अ‍ॅपमधून बबल बंद करण्यासाठी व्यवस्थापित करा वर टॅप करा"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"समजले"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"सिस्टम नेव्हिगेशन अपडेट केले. बदल करण्यासाठी, सेटिंग्जवर जा."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"सिस्टम नेव्हिगेशन अपडेट करण्यासाठी सेटिंग्जवर जा"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"मॅग्निफिकेशन ओव्हरले विंडो"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"मॅग्निफिकेशन विंडो"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"मॅग्निफिकेशन विंडो नियंत्रणे"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"क्विक नियंत्रणे"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"डिव्हाइस नियंत्रणे"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"तुमच्या कनेक्ट केलेल्या डिव्हाइससाठी नियंत्रणे जोडा"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"क्विक नियंत्रणे सेट करा"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"डिव्हाइस नियंत्रणे सेट करा"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"तुमची नियंत्रणे अ‍ॅक्सेस करण्यासाठी पॉवर बटण दाबून ठेवा"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"नियंत्रणे जोडण्यासाठी ॲप निवडा"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"नियंत्रणे"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"पॉवर मेनूमधून अ‍ॅक्सेस करण्यासाठी नियंत्रणे निवडा"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"हे हलवण्यासाठी नियंत्रण धरून ठेवा आणि ड्रॅग करा"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"सर्व नियंत्रणांची सूची लोड करता आली नाही."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"इतर"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"क्विक नियंत्रणांमध्ये जोडा"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"डिव्हाइस नियंत्रणांमध्ये जोडा"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"आवडीचे यामध्ये जोडा"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ने तुमच्या आवडीचे मध्ये जोडण्यासाठी या नियंत्रणाची शिफारस केली आहे."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"नियंत्रणे अपडेट केली आहेत"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index f61bc46da3ab..94334a6812db 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Tetingkap Tindanan Pembesaran"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Tetingkap Pembesaran"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kawalan Tetingkap Pembesaran"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Kawalan pantas"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Kawalan peranti"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Tambah kawalan untuk peranti yang disambungkan"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Sediakan kawalan pantas"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Sediakan kawalan peranti"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Tahan butang Kuasa untuk mengakses kawalan anda"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Pilih apl untuk menambah kawalan"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kawalan"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pilih kawalan untuk diakses daripada menu kuasa"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Tahan dan seret kawalan untuk mengalih"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Senarai semua kawalan tidak dapat dimuatkan."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Lain-lain"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Tambahkan pada kawalan pantas"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Tambahkan pada kawalan peranti"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Tambahkan pada kegemaran"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> mencadangkan kawalan ini untuk ditambahkan pada kegemaran anda."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kawalan dikemas kini"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index e3184f42d956..3dd9c8b915bc 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -67,7 +67,7 @@
<string name="wifi_debugging_message" msgid="5461204211731802995">"ကွန်ရက်အမည် (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi လိပ်စာ (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"ဤကွန်ရက်ကို အမြဲခွင့်ပြုပါ"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"ခွင့်ပြုရန်"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"ကြိုးမဲ့ အမှားပြင်ဆင်ခြင်းကို ခွင့်မပြုပါ"</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"ကြိုးမဲ့ အမှားရှာပြင်ခြင်းကို ခွင့်မပြုပါ"</string>
<string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"ဤစက်ပစ္စည်းသို့ လက်ရှိဝင်ရောက်ထားသည့် အသုံးပြုသူသည် ကြိုးမဲ့ အမှားပြင်ဆင်ခြင်းကို ဖွင့်၍မရပါ။ ဤဝန်ဆောင်မှုကို အသုံးပြုရန် အဓိကအသုံးပြုသူအဖြစ်သို့ ပြောင်းပါ။"</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB ပို့တ် ပိတ်ပြီးပြီ"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"USB ပို့တ်ကို ပိတ်၍ သင့်ကိရိယာသို့ အရည် သို့မဟုတ် အမှိုက်စများ မဝင်စေရန် ကာကွယ်ပါ၊ မည်သည့် အပိုပစ္စည်းကိုမျှ အာရုံခံသိရှိနိုင်တော့မည် မဟုတ်ပါ။\n\nUSB ပို့တ်ကို ပြန်အသုံးပြုနိုင်သည့်အခါ သင့်ကိုအကြောင်းကြားပါမည်။"</string>
@@ -500,7 +500,7 @@
<string name="battery_saver_notification_text" msgid="2617841636449016951">"လုပ်ကိုင်မှုကို လျှော့ချလျက် နောက်ခံ ဒေတာကို ကန့်သတ်သည်"</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"ဘက်ထရီ အားထိန်းကို ပိတ်ရန်"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် အသံဖမ်းနေစဉ် (သို့) ကာစ်လုပ်နေစဉ် သင့်မျက်နှာပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်မှန်သမျှကို သုံးနိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ဤလုပ်ဆောင်ချက်ကို ပေးအပ်သည့် ဝန်ဆောင်မှုသည် အသံဖမ်းနေစဉ် (သို့) ကာစ်လုပ်နေစဉ် သင့်မျက်နှာပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်မှန်သမျှကို သုံးနိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ဤလုပ်ရပ်အတွက် ဝန်ဆောင်မှုသည် အသံဖမ်းနေစဉ် (သို့) ကာစ်လုပ်နေစဉ် သင့်မျက်နှာပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်မှန်သမျှကို သုံးနိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ဖမ်းယူခြင်း သို့မဟုတ် ကာစ်လုပ်ခြင်း စတင်မလား။"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> နှင့် ဖမ်းယူခြင်း သို့မဟုတ် ကာစ်လုပ်ခြင်း စတင်မလား။"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"နောက်ထပ် မပြပါနှင့်"</string>
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"မူရင်းသတ်မှတ်ချက်အဖြစ် <xliff:g id="APP_NAME_0">%1$s</xliff:g> စကားဝိုင်းအားလုံးကို ပူဖောင်းကွက်ပြုလုပ်သည်။ <xliff:g id="APP_NAME_1">%2$s</xliff:g> တွင် စီမံခန့်ခွဲပါ။"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ဆက်တင်များ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ဦးစားပေး"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"မကြာမီက ပူဖောင်းကွက်များ မရှိပါ"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"လတ်တလော ပူဖောင်းကွက်များ မရှိပါ"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"လတ်တလော ပူဖောင်းကွက်များနှင့် ပိတ်လိုက်သော ပူဖောင်းကွက်များကို ဤနေရာတွင် မြင်ရပါမည်"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ဤအကြောင်းကြားချက်များကို ပြုပြင်၍ မရပါ။"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ဤအကြောင်းကြားချက်အုပ်စုကို ဤနေရာတွင် စီစဉ်သတ်မှတ်၍ မရပါ"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"အသံတိတ်ထားသည်"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"သတိပေးခြင်း"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"ပူဖောင်းကွက်ကို ပြရန်"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ပူဖောင်းကွက်ကို ဖယ်ရှားရန်"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ပူဖောင်းကွက် ဖယ်ရှားရန်"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"ပင်မစာမျက်နှာတွင် ထည့်ရန်"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"အကြောင်းကြားချက် ထိန်းချုပ်မှုများ"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"စက်ပစ္စည်းဝန်ဆောင်မှုများ"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"ခေါင်းစဉ် မရှိပါ"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ဤအက်ပ်ကို ပြန်စတင်ပြီး မျက်နှာပြင်အပြည့်လုပ်ရန် တို့ပါ။"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ပူဖောင်းကွက်များအတွက် ဆက်တင်များ"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ပူဖောင်းကွက်အတွက် ဆက်တင်များ"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"စီမံရန်"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> မှ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> နှင့် နောက်ထပ် <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> ခုမှ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -994,9 +994,9 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"ညာအောက်ခြေသို့ ရွှေ့ပါ"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"ပယ်ရန်"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"စကားဝိုင်းကို ပူဖောင်းကွက် မပြုလုပ်ပါနှင့်"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"ပူဖောင်းကွက်များ အသုံးပြုပြီး ချတ်လုပ်ခြင်း"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"ပူဖောင်းကွက် သုံး၍ ချတ်လုပ်ခြင်း"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"စကားဝိုင်းအသစ်များကို မျောနေသည့် သင်္ကေတများ သို့မဟုတ် ပူဖောင်းကွက်များအဖြစ် မြင်ရပါမည်။ ပူဖောင်းကွက်ကိုဖွင့်ရန် တို့ပါ။ ရွှေ့ရန် ၎င်းကို ဖိဆွဲပါ။"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ပူဖောင်းကွက်ကို အချိန်မရွေး ထိန်းချုပ်ခြင်း"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ပူဖောင်းကွက်ကို အချိန်မရွေး ထိန်းချုပ်ရန်"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"ဤအက်ပ်မှနေ၍ ပူဖောင်းများကို ပိတ်ရန်အတွက် \'စီမံရန်\' ကို တို့ပါ"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"ရပါပြီ"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"စနစ်လမ်းညွှန်ခြင်း အပ်ဒိတ်လုပ်ပြီးပါပြီ။ အပြောင်းအလဲများ ပြုလုပ်ရန် \'ဆက်တင်များ\' သို့သွားပါ။"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"ဝင်းဒိုး ထပ်ပိုးလွှာ ချဲ့ခြင်း"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"ဝင်းဒိုး ချဲ့ခြင်း"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"ဝင်းဒိုး ထိန်းချုပ်မှုများ ချဲ့ခြင်း"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"အမြန်ထိန်းချုပ်မှုများ"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"စက်ပစ္စည်း ထိန်းချုပ်မှုများ"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"သင့်ချိတ်ဆက်ထားသော စက်များအတွက် ထိန်းချုပ်မှုများ ထည့်ပါ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"အမြန်ထိန်းချုပ်မှုများကို စနစ်ထည့်သွင်းခြင်း"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"စက်ပစ္စည်းထိန်းချုပ်မှုများကို စနစ်ထည့်သွင်းခြင်း"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"သင့်ထိန်းချုပ်မှုများကို အသုံးပြုရန် \'ပါဝါ\' ခလုတ်ကို ဖိထားပါ"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ထိန်းချုပ်မှုများထည့်ရန် အက်ပ်ရွေးခြင်း"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ထိန်းချုပ်မှုများ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ဖွင့်ပိတ်မီနူးမှ သုံးရန် ထိန်းချုပ်မှုများ ရွေးပါ"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ထိန်းချုပ်မှုတစ်ခု ရွှေ့ရန် ၎င်းကိုဖိဆွဲပါ"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ထိန်းချုပ်မှုများ ပြန်စီစဉ်ရန် ဖိပြီးဆွဲပါ"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"ထိန်းချုပ်မှုအားလုံး ဖယ်ရှားလိုက်သည်"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"ထိန်းချုပ်မှုအားလုံး၏ စာရင်းကို ဖွင့်၍မရပါ။"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"အခြား"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"အမြန်ထိန်းချုပ်မှု သို့ထည့်ခြင်း"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"စက်ပစ္စည်းထိန်းချုပ်မှုများသို့ ထည့်ရန်"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"အကြိုက်ဆုံးများသို့ ထည့်ရန်"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> သည် ဤခလုတ်ကို သင့်အကြိုက်ဆုံးများသို့ ထည့်ရန် အကြံပြုထားသည်။"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"ထိန်းချုပ်မှု အပ်ဒိတ်လုပ်ပြီးပြီ"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 1614139d91f8..da8654847650 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -709,7 +709,7 @@
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Får oppmerksomheten din med lyd eller vibrering."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Holder deg oppmerksom med en svevende snarvei til dette innholdet."</string>
<string name="notification_channel_summary_priority" msgid="7415770044553264622">"Vises øverst i en samtaledel og vises som en boble."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Alle samtaler fra <xliff:g id="APP_NAME_0">%1$s</xliff:g> legges til i bobler som standard. Administrer i <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Alle samtaler fra <xliff:g id="APP_NAME_0">%1$s</xliff:g> vises i bobler som standard. Administrer i <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Innstillinger"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ingen nylige bobler"</string>
@@ -993,7 +993,7 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Flytt til nederst til venstre"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Flytt til nederst til høyre"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Avvis"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Ikke lag bobler for samtaler"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Ikke vis samtaler i bobler"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Chat med bobler"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Nye samtaler vises som flytende ikoner, eller bobler. Trykk for å åpne bobler. Dra for å flytte dem."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Kontrollér bobler når som helst"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Overleggsvindu for forstørring"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Forstørringsvindu"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontroller for forstørringsvindu"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Hurtigkontroller"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Enhetskontroller"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Legg til kontroller for de tilkoblede enhetene dine"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Konfigurer hurtigkontroller"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Konfigurer enhetskontroller"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Hold inne av/på-knappen for å få tilgang til kontrollene"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Velg en app for å legge til kontroller"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Velg kontroller som er tilgjengelige fra av/på-menyen"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Hold og dra en kontroll for å flytte den"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Listen over alle kontroller kunne ikke lastes inn."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Annet"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Legg til i hurtigkontroller"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Legg til i enhetskontroller"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Legg til som favoritt"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> har foreslått at du legger denne kontrollen til i favorittene dine."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrollene er oppdatert"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index e9f2c07ba18a..0fca63cfc813 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"अनुमति दिनुहोस्"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB डिबग गर्न अनुमति छैन"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"हाल यस यन्त्रमा साइन इन हुनुभएको प्रयोगकर्ताले USB डिबग सक्रिय गर्न सक्नुहुन्न। यो सुविधाको प्रयोग गर्न प्राथमिक प्रयोगकर्तामा बदल्नुहोस्‌।"</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"यस नेटवर्कमा वायरलेस डिबग गर्न दिने हो?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"यस नेटवर्कमा वायरलेस डिबगिङ सेवा प्रयोग गर्न दिने हो?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"नेटवर्कको नाम (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi ठेगाना (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"यस नेटवर्कमा सधैँ अनुमति दिनुहोस्"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"अनुमति दिनुहोस्"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"वायरलेस डिबग प्रक्रियाका लागि अनुमति छैन"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"हाल यस यन्त्रमा साइन इन हुनुभएका प्रयोगकर्ता वायरलेस डिबग प्रक्रिया सक्रिय गर्न सक्नुहुन्न। यो सुविधाको प्रयोग गर्न प्राथमिक प्रयोगकर्ताको खातामार्फत साइन इन गर्नुहोस्।"</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"वायरलेस डिबगिङ सेवालाई अनुमति दिइएको छैन"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"हाल यस यन्त्रमा साइन इन हुनुभएका प्रयोगकर्ता वायरलेस डिबगिङ सक्रिय गर्न सक्नुहुन्न। यो सुविधाको प्रयोग गर्न प्राथमिक प्रयोगकर्ताको खातामार्फत साइन इन गर्नुहोस्।"</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB पोर्ट असक्षम पारियो"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"तपाईंको यन्त्रलाई तरल पदार्थ वा धुलोबाट जोगाउन यसको USB पोर्ट असक्षम पारिएको छ र यसले कुनै पनि सहायक उपकरणहरू पहिचान गर्ने छैन।\n\nउक्त USB पोर्ट फेरि प्रयोग गर्दा हुन्छ भने तपाईंलाई यसबारे सूचित गरिने छ।"</string>
<string name="usb_port_enabled" msgid="531823867664717018">"चार्जर तथा सामानहरू पत्ता लगाउन सक्षम पारिएको USB पोर्ट"</string>
@@ -151,7 +151,7 @@
<string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ढाँचा प्रयोग गर्नुहोस्"</string>
<string name="biometric_dialog_use_password" msgid="3445033859393474779">"पासवर्ड प्रयोग गर्नुहोस्"</string>
<string name="biometric_dialog_wrong_pin" msgid="1878539073972762803">"PIN मिलेन"</string>
- <string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"ढाँचा मिलेन"</string>
+ <string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"प्याटर्न मिलेन"</string>
<string name="biometric_dialog_wrong_password" msgid="69477929306843790">"पासवर्ड मिलेन"</string>
<string name="biometric_dialog_credential_too_many_attempts" msgid="3083141271737748716">"अत्यन्तै धेरै पटक गलत प्रयास गरिए। \n <xliff:g id="NUMBER">%d</xliff:g>सेकेन्ड पछि पुनः प्रयास गर्नुहोस्।"</string>
<string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"फेरि प्रयास गर्नुहोस्। <xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g> मध्ये <xliff:g id="ATTEMPTS_0">%1$d</xliff:g> प्रयास।"</string>
@@ -174,7 +174,7 @@
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"तपाईंलाई खोज्दै…"</string>
<string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"अनुहारको आइकन"</string>
<string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"मिलाउने जुम बटन।"</string>
- <string name="accessibility_compatibility_zoom_example" msgid="2617218726091234073">"स्क्रिनलाई सानोबाट ठूलो पार्नुहोस्।"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="2617218726091234073">"स्क्रिनलाई सानोबाट ठुलो पार्नुहोस्।"</string>
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ब्लुटुथ जडान भयो।"</string>
<string name="accessibility_bluetooth_disconnected" msgid="7195823280221275929">"ब्लुटुथसँग विच्छेद गरियो।"</string>
<string name="accessibility_no_battery" msgid="3789287732041910804">"कुनै ब्याट्री छैन।"</string>
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> मार्फत भएका सबै वार्तालापहरू पूर्वनिर्धारित रूपमा बबलमा देखिन्छन्। <xliff:g id="APP_NAME_1">%2$s</xliff:g> मा गई व्यवस्थापन गर्नुहोस्।"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"सेटिङ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"प्राथमिकता"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"हालसालै खारेज गरिएको कुनै पनि बबल छैन"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"हालैका बबलहरू छैनन्"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"हालैका बबल र खारेज गरिएका बबलहरू यहाँ देखिने छन्"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"यी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"यहाँबाट सूचनाहरूको यो समूह कन्फिगर गर्न सकिँदैन"</string>
@@ -866,16 +866,16 @@
<string name="tuner_low_priority" msgid="8412666814123009820">"कम प्राथमिकताका सूचना आइकनहरू देखाउनुहोस्"</string>
<string name="other" msgid="429768510980739978">"अन्य"</string>
<string name="accessibility_divider" msgid="2830785970889237307">"विभाजित-स्क्रिन छुट्याउने"</string>
- <string name="accessibility_action_divider_left_full" msgid="7598733539422375847">"बायाँ भाग पूर्ण स्क्रिन"</string>
+ <string name="accessibility_action_divider_left_full" msgid="7598733539422375847">"बायाँ भाग फुल स्क्रिन"</string>
<string name="accessibility_action_divider_left_70" msgid="4919312892541727761">"बायाँ भाग ७०%"</string>
<string name="accessibility_action_divider_left_50" msgid="3664701169564893826">"बायाँ भाग ५०%"</string>
<string name="accessibility_action_divider_left_30" msgid="4358145268046362088">"बायाँ भाग ३०%"</string>
- <string name="accessibility_action_divider_right_full" msgid="8576057422864896305">"दायाँ भाग पूर्ण स्क्रिन"</string>
- <string name="accessibility_action_divider_top_full" msgid="4243901660795169777">"माथिल्लो भाग पूर्ण स्क्रिन"</string>
+ <string name="accessibility_action_divider_right_full" msgid="8576057422864896305">"दायाँ भाग फुल स्क्रिन"</string>
+ <string name="accessibility_action_divider_top_full" msgid="4243901660795169777">"माथिल्लो भाग फुल स्क्रिन"</string>
<string name="accessibility_action_divider_top_70" msgid="6941226213260515072">"माथिल्लो भाग ७०%"</string>
<string name="accessibility_action_divider_top_50" msgid="6275211443706497621">"माथिल्लो भाग ५०%"</string>
<string name="accessibility_action_divider_top_30" msgid="5780597635887574916">"माथिल्लो भाग ३०%"</string>
- <string name="accessibility_action_divider_bottom_full" msgid="7352434720610115395">"तल्लो भाग पूर्ण स्क्रिन"</string>
+ <string name="accessibility_action_divider_bottom_full" msgid="7352434720610115395">"तल्लो भाग फुल स्क्रिन"</string>
<string name="accessibility_qs_edit_tile_label" msgid="9079791448815232967">"स्थिति <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>। सम्पादन गर्नाका लागि डबल ट्याप गर्नुहोस्।"</string>
<string name="accessibility_qs_edit_add_tile_label" msgid="8292218072049068613">"<xliff:g id="TILE_NAME">%1$s</xliff:g>। थप्नका लागि डबल ट्याप गर्नुहोस्।"</string>
<string name="accessibility_qs_edit_move_tile" msgid="6027997446473163426">"<xliff:g id="TILE_NAME">%1$s</xliff:g> लाई सार्नुहोस्"</string>
@@ -982,7 +982,7 @@
<string name="sensor_privacy_mode" msgid="4462866919026513692">"सेन्सरहरू निष्क्रिय छन्"</string>
<string name="device_services" msgid="1549944177856658705">"यन्त्रका सेवाहरू"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"शीर्षक छैन"</string>
- <string name="restart_button_description" msgid="6916116576177456480">"यो अनुप्रयोग पुनः सुरु गर्न ट्याप गर्नुहोस् र पूर्ण स्क्रिन मोडमा जानुहोस्।"</string>
+ <string name="restart_button_description" msgid="6916116576177456480">"यो अनुप्रयोग पुनः सुरु गर्न ट्याप गर्नुहोस् र फुल स्क्रिन मोडमा जानुहोस्।"</string>
<string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> का बबलसम्बन्धी सेटिङहरू"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"व्यवस्थापन गर्नुहोस्"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> को <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"पुछारमा बायाँतिर सार्नुहोस्"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"पुछारमा दायाँतिर सार्नुहोस्"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"हटाउनुहोस्"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"वार्तालाप बबलमा नदेखाइयोस्"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"वार्तालाप बबलको रूपमा नदेखाइयोस्"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"बबलहरू प्रयोग गरी कुराकानी गर्नुहोस्"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"नयाँ वार्तालापहरू तैरने आइकन वा बबलका रूपमा देखिन्छन्। बबल खोल्न ट्याप गर्नुहोस्। बबल सार्न त्यसलाई ड्र्याग गर्नुहोस्।"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"जुनसुकै बेला बबलहरू व्यवस्थापन गर्नुहोस्"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"यो अनुप्रयोगमा बबल निष्क्रिय पार्न व्यवस्थापन गर्नुहोस् नामक बटन ट्याप गर्नुहोस्"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"नयाँ वार्तालापहरू तैरने आइकन वा बबलका रूपमा देखिन्छन्। बबल खोल्न ट्याप गर्नुहोस्। बबल सार्न सो बबललाई ड्र्याग गर्नुहोस्।"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"जुनसुकै बेला बबलहरू नियन्त्रण गर्नुहोस्"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"यो अनुप्रयोगबाट आएका बबलहरू निष्क्रिय पार्न व्यवस्थापन गर्नुहोस् नामक बटनमा ट्याप गर्नुहोस्"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"बुझेँ"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"प्रणालीको नेभिगेसन अद्यावधिक गरियो। परिवर्तन गर्न सेटिङमा जानुहोस्।"</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"प्रणालीको नेभिगेसन अद्यावधिक गर्न सेटिङमा जानुहोस्"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"म्याग्निफिकेसन ओभरले विन्डो"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"म्याग्निफिकेसन विन्डो"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"म्याग्निफिकेसन विन्डोका नियन्त्रणहरू"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"द्रुत नियन्त्रणहरू"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"यन्त्रले नियन्त्रण गर्न सक्ने कुराहरू"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"आफ्ना जोडिएका यन्त्रहरूका लागि नियन्त्रण सुविधाहरू थप्नुहोस्"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"द्रुत नियन्त्रणहरू सेटअप गर्नुहोस्"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"यन्त्रले नियन्त्रण गर्न सक्ने कुराहरू सेटअप गर्नुहोस्"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"आफ्ना नियन्त्रणहरूमाथि पहुँच राख्न पावर बटन थिचिराख्नुहोस्"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"नियन्त्रणहरू थप्न अनुप्रयोग छनौट गर्नुहोस्"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"नियन्त्रणहरू"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"पावर मेनुबाट प्रयोग गर्न चाहेका नियन्त्रण सुविधाहरू छान्नुहोस्"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"कुनै नियन्त्रण सुविधा सार्न त्यसलाई थिचेर ड्र्याग गर्नुहोस्"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"सबै नियन्त्रणहरूको सूची लोड गर्न सकिएन।"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"अन्य"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"द्रुत नियन्त्रणहरूमा थप्नुहोस्"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"यन्त्रले नियन्त्रण गर्न सक्ने कुराहरूको सूचीमा थप्नुहोस्"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"मन पर्ने कुराहरूमा थप्नुहोस्"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ले यो नियन्त्रण तपाईंका मन पर्ने कुराहरूमा थप्न सुझाव सिफारिस गरेको छ।"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"नियन्त्रण सुविधाहरू अद्यावधिक गरिए"</string>
diff --git a/packages/SystemUI/res/values-ne/strings_tv.xml b/packages/SystemUI/res/values-ne/strings_tv.xml
index 6998f39cec2b..20411351b549 100644
--- a/packages/SystemUI/res/values-ne/strings_tv.xml
+++ b/packages/SystemUI/res/values-ne/strings_tv.xml
@@ -22,7 +22,7 @@
<string name="notification_channel_tv_pip" msgid="844249465483874817">"Picture-in-Picture"</string>
<string name="pip_notification_unknown_title" msgid="4413256731340767259">"(शीर्षकविहीन कार्यक्रम)"</string>
<string name="pip_close" msgid="5775212044472849930">"PIP लाई बन्द गर्नुहोस्"</string>
- <string name="pip_fullscreen" msgid="3877997489869475181">"पूर्ण स्क्रिन"</string>
+ <string name="pip_fullscreen" msgid="3877997489869475181">"फुल स्क्रिन"</string>
<string name="mic_active" msgid="5766614241012047024">"माइक्रोफोन सक्रिय छ"</string>
<string name="app_accessed_mic" msgid="2754428675130470196">"%1$s ले तपाईंको माइक्रोफोनमाथि पहुँच राख्यो"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index baeca5b145b7..5b021969f385 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Het maken van screenshots wordt niet toegestaan door de app of je organisatie"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Screenshot sluiten"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Screenshot openen"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Schermrecorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Schermopname"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Doorlopende melding voor een schermopname-sessie"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Opname starten?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Tijdens de opname kan het Android-systeem gevoelige informatie opnemen die zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Dit omvat wachtwoorden, betalingsgegevens, foto\'s, berichten en audio."</string>
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Alle gesprekken uit <xliff:g id="APP_NAME_0">%1$s</xliff:g> worden standaard als bubbels weergegeven. Beheer dit in <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Instellingen"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioriteit"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Geen recente ballonnen"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Geen recente bubbels"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recente bubbels en gesloten bubbels worden hier weergegeven"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Deze meldingen kunnen niet worden aangepast."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Deze groep meldingen kan hier niet worden geconfigureerd"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Zonder geluid"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Waarschuwen"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Ballon weergeven"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ballonnen verwijderen"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Bubbels verwijderen"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Toevoegen aan startscherm"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"beheeropties voor meldingen"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Apparaatservices"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Geen titel"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Tik om deze app opnieuw te starten en te openen op het volledige scherm."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Instellingen voor <xliff:g id="APP_NAME">%1$s</xliff:g>-ballonnen"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Instellingen voor <xliff:g id="APP_NAME">%1$s</xliff:g>-bubbels"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Beheren"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> van <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> van <xliff:g id="APP_NAME">%2$s</xliff:g> en nog <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Overlay voor vergrotingsvenster"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Vergrotingsvenster"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Bediening van vergrotingsvenster"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Snelle bedieningselementen"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Apparaatopties"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Bedieningselementen voor je gekoppelde apparaten toevoegen"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Snelle bedieningselementen instellen"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Apparaatopties instellen"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Houd de aan/uit-knop ingedrukt voor toegang tot de bedieningselementen"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Kies de app waaraan je bedieningselementen wilt toevoegen"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Bedieningselementen"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Kies bedieningselementen die je vanaf het menu Voeding wilt kunnen gebruiken"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Houd een bedieningselement vast en sleep om het te verplaatsen"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Kan lijst met alle bedieningselementen niet laden."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Overig"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Toevoegen aan snelle bediening"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Toevoegen aan apparaatopties"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Toevoegen aan favorieten"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> heeft voorgesteld dit bedieningselement toe te voegen aan je favorieten."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Bedieningselementen geüpdated"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index d4796d69dd9e..cf15c83ea416 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -209,7 +209,7 @@
<string name="accessibility_two_bars" msgid="1335676987274417121">"ଦୁଇଟି ବାର୍‍ ଅଛି।"</string>
<string name="accessibility_three_bars" msgid="819417766606501295">"ତିନୋଟି ବାର୍‍ ଅଛି।"</string>
<string name="accessibility_signal_full" msgid="5920148525598637311">"ସିଗ୍ନାଲ୍ ଫୁଲ୍ ଅଛି।"</string>
- <string name="accessibility_desc_on" msgid="2899626845061427845">"ଅନ୍।"</string>
+ <string name="accessibility_desc_on" msgid="2899626845061427845">"ଚାଲୁ।"</string>
<string name="accessibility_desc_off" msgid="8055389500285421408">"ଅଫ୍।"</string>
<string name="accessibility_desc_connected" msgid="3082590384032624233">"ସଂଯୁକ୍ତ।"</string>
<string name="accessibility_desc_connecting" msgid="8011433412112903614">"ସଂଯୋଗ କରୁଛି।"</string>
@@ -232,7 +232,7 @@
<string name="cell_data_off_content_description" msgid="9165555931499878044">"ମୋବାଇଲ୍‌ ଡାଟା ବନ୍ଦ ଅଛି"</string>
<string name="not_default_data_content_description" msgid="6757881730711522517">"ବ୍ୟବହୃତ ଡାଟା ପାଇଁ ସେଟ୍ ହୋଇନାହିଁ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ଅଫ୍ ଅଛି"</string>
- <string name="accessibility_bluetooth_tether" msgid="6327291292208790599">"ବ୍ଲୁଟୂଥ୍‍ ଟିଥରିଙ୍ଗ।"</string>
+ <string name="accessibility_bluetooth_tether" msgid="6327291292208790599">"ବ୍ଲୁଟୁଥ ଟିଥରିଂ।"</string>
<string name="accessibility_airplane_mode" msgid="1899529214045998505">"ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍‌।"</string>
<string name="accessibility_vpn_on" msgid="8037549696057288731">"VPN ଅନ୍‍।"</string>
<string name="accessibility_no_sims" msgid="5711270400476534667">"କୌଣସି SIM କାର୍ଡ ନାହିଁ।"</string>
@@ -276,7 +276,7 @@
<string name="accessibility_quick_settings_dnd" msgid="2415967452264206047">"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ।"</string>
<string name="accessibility_quick_settings_dnd_changed_off" msgid="1457150026842505799">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\"କୁ ବନ୍ଦ କରାଯାଇଛି।"</string>
<string name="accessibility_quick_settings_dnd_changed_on" msgid="186315911607486129">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଚାଲୁ ଅଛି।"</string>
- <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"ବ୍ଲୁଟୂଥ୍‍‌।"</string>
+ <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"ବ୍ଲୁଟୁଥ।"</string>
<string name="accessibility_quick_settings_bluetooth_off" msgid="3795983516942423240">"ବ୍ଲୁଟୂଥ୍‌ ଅଫ୍ ଅଛି।"</string>
<string name="accessibility_quick_settings_bluetooth_on" msgid="3819082137684078013">"ବ୍ଲୁଟୂଥ୍‍‍ ଅନ୍ ଅଛି।"</string>
<string name="accessibility_quick_settings_bluetooth_connecting" msgid="7362294657419149294">"ବ୍ଲୁଟୂଥ୍‍‌ ସଂଯୋଗ ହେଉଛି।"</string>
@@ -344,7 +344,7 @@
<string name="quick_settings_dnd_priority_label" msgid="6251076422352664571">"କେବଳ ପ୍ରାଥମିକତା"</string>
<string name="quick_settings_dnd_alarms_label" msgid="1241780970469630835">"କେବଳ ଆଲାର୍ମ"</string>
<string name="quick_settings_dnd_none_label" msgid="8420869988472836354">"ସମ୍ପୂର୍ଣ୍ଣ ନୀରବ"</string>
- <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"ବ୍ଲୁଟୂଥ୍‍‌"</string>
+ <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"ବ୍ଲୁଟୁଥ"</string>
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="6595808498429809855">"ବ୍ଲୁଟୂଥ୍‍‌ (<xliff:g id="NUMBER">%d</xliff:g>ଟି ଡିଭାଇସ୍‌)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="6375098046500790870">"ବ୍ଲୁଟୂଥ୍‍‌ ଅଫ୍"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="5760239584390514322">"ପେୟାର୍‍ ହୋଇଥିବା କୌଣସି ଡିଭାଇସ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
@@ -394,7 +394,7 @@
<string name="quick_settings_connected" msgid="3873605509184830379">"ସଂଯୁକ୍ତ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"କନେକ୍ଟ ରହିଛି, ବ୍ୟାଟେରୀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"ସଂଯୋଗ କରୁଛି..."</string>
- <string name="quick_settings_tethering_label" msgid="5257299852322475780">"ଟିଥରିଙ୍ଗ"</string>
+ <string name="quick_settings_tethering_label" msgid="5257299852322475780">"ଟିଥରିଂ"</string>
<string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ହଟସ୍ପଟ୍‌"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ଅନ୍ ହେଉଛି…"</string>
<string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ଡାଟା ସେଭର୍‌ ଅନ୍‌ ଅଛି"</string>
@@ -597,7 +597,7 @@
<string name="screen_pinning_toast" msgid="2083944237147005811">"ଏହି ସ୍କ୍ରୀନ୍‍‍କୁ ଅନପିନ୍‍ କରିବା ପାଇଁ, ବ୍ୟାକ୍ ଏବଂ ଓଭରଭ୍ୟୁ ବଟନ୍‍‌କୁ ଦାବିଧରନ୍ତୁ"</string>
<string name="screen_pinning_toast_recents_invisible" msgid="6343770487795352573">"ଏହି ସ୍କ୍ରୀନ୍‍‍କୁ ଅନପିନ୍‍ କରିବା ପାଇଁ, ବ୍ୟାକ୍ ଏବଂ ହୋମ୍ ବଟନ୍‍‌କୁ ଦାବିଧରନ୍ତୁ"</string>
<string name="screen_pinning_toast_gesture_nav" msgid="2884536903398445645">"ଏହି ସ୍କ୍ରୀନ୍‌କୁ ଅନପିନ୍ କରିବା ପାଇଁ, ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ ଏବଂ ଧରି ରଖନ୍ତୁ"</string>
- <string name="screen_pinning_positive" msgid="3285785989665266984">"ବୁଝିଲି"</string>
+ <string name="screen_pinning_positive" msgid="3285785989665266984">"ବୁଝିଗଲି"</string>
<string name="screen_pinning_negative" msgid="6882816864569211666">"ନାହିଁ, ଥାଉ"</string>
<string name="screen_pinning_start" msgid="5695091877402422575">"ସ୍କ୍ରୀନ୍‌କୁ ପିନ୍‌ କରାଗଲା"</string>
<string name="screen_pinning_exit" msgid="5114993350662745840">"ସ୍କ୍ରୀନ୍‌ ଅନପିନ୍ ହୋଇଗଲା"</string>
@@ -633,7 +633,7 @@
<string name="output_calls_title" msgid="7085583034267889109">"ଫୋନ୍‍ କଲ୍‍ ଆଉଟପୁଟ୍‍"</string>
<string name="output_none_found" msgid="5488087293120982770">"କୌଣସି ଡିଭାଇସ୍ ମିଳିଲା ନାହିଁ"</string>
<string name="output_none_found_service_off" msgid="935667567681386368">"କୌଣସି ଡିଭାଇସ୍ ମିଳିଲା ନାହିଁ। <xliff:g id="SERVICE">%1$s</xliff:g> ଅନ୍‍ କରି ଦେଖନ୍ତୁ"</string>
- <string name="output_service_bt" msgid="4315362133973911687">"ବ୍ଲୁଟୂଥ୍‍‌"</string>
+ <string name="output_service_bt" msgid="4315362133973911687">"ବ୍ଲୁଟୁଥ"</string>
<string name="output_service_wifi" msgid="9003667810868222134">"ୱାଇ-ଫାଇ"</string>
<string name="output_service_bt_wifi" msgid="7186882540475524124">"ବ୍ଲୁଟୂଥ୍‍‌ ଓ ୱାଇ-ଫାଇ"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"ସିଷ୍ଟମ୍ UI ଟ୍ୟୁନର୍‍"</string>
@@ -679,7 +679,7 @@
<string name="do_not_silence" msgid="4982217934250511227">"ନିରବ କରନ୍ତୁ ନାହିଁ"</string>
<string name="do_not_silence_block" msgid="4361847809775811849">"ନିରବ କିମ୍ବା ବ୍ଲକ୍‌ କରନ୍ତୁ ନାହିଁ"</string>
<string name="tuner_full_importance_settings" msgid="1388025816553459059">"ପାୱାର୍‍ ବିଜ୍ଞପ୍ତି କଣ୍ଟ୍ରୋଲ୍‌"</string>
- <string name="tuner_full_importance_settings_on" msgid="917981436602311547">"ଅନ୍"</string>
+ <string name="tuner_full_importance_settings_on" msgid="917981436602311547">"ଚାଲୁ"</string>
<string name="tuner_full_importance_settings_off" msgid="5580102038749680829">"ଅଫ୍"</string>
<string name="power_notification_controls_description" msgid="1334963837572708952">"ପାୱାର୍‍ ବିଜ୍ଞପ୍ତି କଣ୍ଟ୍ରୋଲ୍‌ରେ, ଆପଣ ଏକ ଆପ୍‍ ବିଜ୍ଞପ୍ତି ପାଇଁ 0 ରୁ 5 ଗୁରୁତ୍ୱ ସ୍ତର ସେଟ୍‍ କରିହେବେ। \n\n"<b>"ସ୍ତର 5"</b>" \n- ବିଜ୍ଞପ୍ତି ତାଲିକାର ଶୀର୍ଷରେ ଦେଖାନ୍ତୁ \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ \n- ସର୍ବଦା ପିକ୍‍ କରନ୍ତୁ \n\n"<b>"ସ୍ତର 4"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- ସର୍ବଦା ପିକ୍‍ କରନ୍ତୁ \n\n"<b>"ସ୍ତର 3"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- କଦାପି ପିକ୍‍ କରନ୍ତୁ ନାହିଁ \n\n"<b>"ସ୍ତର 2"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- କଦାପି ପିକ୍‍ କରନ୍ତୁ ନାହିଁ \n- କଦାପି ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଟ୍‍ କରନ୍ତୁ ନାହିଁ \n\n"<b>"ସ୍ତର 1"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- କଦାପି ପିକ୍‍ କରନ୍ତୁ ନାହିଁ \n- କଦାପି ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଟ୍‍ କରନ୍ତୁ ନାହିଁ \n- ଲକ୍‍ ସ୍କ୍ରୀନ୍‍ ଓ ଷ୍ଟାଟସ୍‍ ବାର୍‌ରୁ ଲୁଚାନ୍ତୁ \n- ବିଜ୍ଞପ୍ତି ତାଲିକାର ନିମ୍ନରେ ଦେଖାନ୍ତୁ \n\n"<b>"ସ୍ତର 0"</b>" \n- ଆପରୁ ସମସ୍ତ ବିଜ୍ଞପ୍ତି ବ୍ଲକ୍‌ କରନ୍ତୁ"</string>
<string name="notification_header_default_channel" msgid="225454696914642444">"ବିଜ୍ଞପ୍ତି"</string>
@@ -977,7 +977,7 @@
<string name="auto_saver_enabled_title" msgid="4294726198280286333">"ଆଗରୁ ସେଟ୍‌ କରିଥିବା ସମୟ ଅନୁସାରେ ବ୍ୟାଟେରୀ ସେଭର୍‌ ଅନ୍‌ ହୋଇଛି"</string>
<string name="auto_saver_enabled_text" msgid="7889491183116752719">"ଚାର୍ଜ <xliff:g id="PERCENTAGE">%d</xliff:g>%%ରୁ କମ୍‌ ହେଲେ ବ୍ୟାଟେରୀ ସେଭର୍‌ ଆପେ ଅନ୍‌ ହୋଇଯିବ।"</string>
<string name="open_saver_setting_action" msgid="2111461909782935190">"ସେଟିଙ୍ଗ"</string>
- <string name="auto_saver_okay_action" msgid="7815925750741935386">"ବୁଝିଲି"</string>
+ <string name="auto_saver_okay_action" msgid="7815925750741935386">"ବୁଝିଗଲି"</string>
<string name="heap_dump_tile_name" msgid="2464189856478823046">"SysUI ହିପ୍ ଡମ୍ପ୍ କରନ୍ତୁ"</string>
<string name="sensor_privacy_mode" msgid="4462866919026513692">"ସେନ୍ସର୍‍ଗୁଡ଼ିକ ବନ୍ଦ ଅଛି"</string>
<string name="device_services" msgid="1549944177856658705">"ଡିଭାଇସ୍‍ ସେବାଗୁଡିକ"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"ମ୍ୟାଗ୍ନିଫିକେସନ୍ ଓଭର୍‌ଲେ ୱିଣ୍ଡୋ"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"ମ୍ୟାଗ୍ନିଫିକେସନ୍ ୱିଣ୍ଡୋ"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"ମ୍ୟାଗ୍ନିଫିକେସନ୍ ୱିଣ୍ଡୋ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ଦ୍ରୁତ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"ଆପଣଙ୍କ ସଂଯୁକ୍ତ ଥିବା ଡିଭାଇସଗୁଡ଼ିକ ପାଇଁ ନିୟନ୍ତ୍ରଣ ଯୋଗ କରନ୍ତୁ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ଦ୍ରୁତ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"ଆପଣଙ୍କ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରିବାକୁ ପାୱାର ବଟନକୁ ଧରି ରଖନ୍ତୁ"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଯୋଗ କରିବାକୁ ଆପ୍ ବାଛନ୍ତୁ"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ପାୱାର ମେନୁରୁ ଆକ୍ସେସ୍ କରିବାକୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ବାଛନ୍ତୁ"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ଏକ ନିୟନ୍ତ୍ରଣକୁ ମୁଭ୍ କରିବାକୁ ଏହାକୁ ଧରି ଟାଣନ୍ତୁ"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"ସବୁ ନିୟନ୍ତ୍ରଣର ତାଲିକା ଲୋଡ୍ କରିପାରିଲା ନାହିଁ।"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ଅନ୍ୟ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ଦ୍ରୁତ ନିୟନ୍ତ୍ରଣରେ ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକରେ ଯୋଗ କରନ୍ତୁ"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ପସନ୍ଦଗୁଡ଼ିକରେ ଯୋଗ କରନ୍ତୁ"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"ଏହି ନିୟନ୍ତ୍ରଣକୁ ଆପଣଙ୍କ ପସନ୍ଦଗୁଡ଼ିକରେ ଯୋଗ କରିବାକୁ <xliff:g id="APP">%s</xliff:g> ପ୍ରସ୍ତାବ ଦେଇଛି।"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଅପଡେଟ୍ କରାଯାଇଛି"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 9a7201bdbec1..1b78d13df43e 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -20,7 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4811759950673118541">"ਸਿਸਟਮ UI"</string>
- <string name="status_bar_clear_all_button" msgid="2491321682873657397">"ਹਟਾਓ"</string>
+ <string name="status_bar_clear_all_button" msgid="2491321682873657397">"ਕਲੀਅਰ ਕਰੋ"</string>
<string name="status_bar_no_notifications_title" msgid="7812479124981107507">"ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ"</string>
<string name="status_bar_ongoing_events_title" msgid="3986169317496615446">"ਜਾਰੀ"</string>
<string name="status_bar_latest_events_title" msgid="202755896454005436">"ਸੂਚਨਾਵਾਂ"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"ਤੁਹਾਨੂੰ ਬਿਨਾਂ ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਦੇ ਫੋਕਸ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਨਾਲ ਤੁਹਾਡਾ ਧਿਆਨ ਖਿੱਚਦੀ ਹੈ।"</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ਇਸ ਸਮੱਗਰੀ ਦੇ ਅਸਥਿਰ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਆਪਣਾ ਧਿਆਨ ਕੇਂਦਰਿਤ ਰੱਖੋ।"</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ਗੱਲਬਾਤ ਸੈਕਸ਼ਨ ਦੇ ਉੱਪਰ ਅਤੇ ਬੁਲਬੁਲਿਆਂ ਦੇ ਤੌਰ \'ਤੇ ਦਿਖਾਉਂਦਾ ਹੈ।"</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ਵੱਲੋਂ ਸਾਰੀਆਂ ਗੱਲਾਂਬਾਤਾਂ \'ਤੇ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਬੁਲਬੁਲੇ ਲਾਏ ਜਾਂਦੇ ਹਨ। <xliff:g id="APP_NAME_1">%2$s</xliff:g> ਵਿੱਚ ਪ੍ਰਬੰਧਨ ਕਰੋ।"</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ਗੱਲਬਾਤ ਸੈਕਸ਼ਨ ਦੇ ਉੱਪਰ ਅਤੇ ਬਬਲ ਦੇ ਤੌਰ \'ਤੇ ਦਿਖਾਉਂਦਾ ਹੈ।"</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ਵੱਲੋਂ ਸਾਰੀਆਂ ਗੱਲਾਂਬਾਤਾਂ \'ਤੇ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਬਬਲ ਲਾਏ ਜਾਂਦੇ ਹਨ। <xliff:g id="APP_NAME_1">%2$s</xliff:g> ਵਿੱਚ ਪ੍ਰਬੰਧਨ ਕਰੋ।"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ਸੈਟਿੰਗਾਂ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ਤਰਜੀਹ"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ਕੋਈ ਹਾਲੀਆ ਬੁਲਬੁਲਾ ਨਹੀਂ"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ਹਾਲੀਆ ਬੁਲਬੁਲੇ ਅਤੇ ਖਾਰਜ ਕੀਤੇ ਬੁਲਬੁਲੇ ਇੱਥੇ ਦਿਸਣਗੇ"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ਕੋਈ ਹਾਲੀਆ ਬਬਲ ਨਹੀਂ"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ਹਾਲੀਆ ਬਬਲ ਅਤੇ ਖਾਰਜ ਕੀਤੇ ਬਬਲ ਇੱਥੇ ਦਿਸਣਗੇ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ਇਹ ਸੂਚਨਾਵਾਂ ਦਾ ਗਰੁੱਪ ਇੱਥੇ ਸੰਰੂਪਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"ਇੱਕ ਐਪ ਦੀ ਥਾਂ \'ਤੇ ਦੂਜੀ ਐਪ ਰਾਹੀਂ ਦਿੱਤੀ ਗਈ ਸੂਚਨਾ"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"ਚੁੱਪ ਕਰਵਾਈਆਂ ਗਈਆਂ"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"ਸੁਚੇਤਨਾ"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"ਬੁਲਬੁਲਾ ਦਿਖਾਓ"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ਬੁਲਬੁਲੇ ਹਟਾਓ"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ਬਬਲ ਹਟਾਓ"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"ਸੂਚਨਾ ਕੰਟਰੋਲ"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"ਡੀਵਾਈਸ ਸੇਵਾਵਾਂ"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"ਕੋਈ ਸਿਰਲੇਖ ਨਹੀਂ"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ਇਸ ਐਪ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਪੂਰੀ-ਸਕ੍ਰੀਨ ਮੋਡ \'ਤੇ ਜਾਓ।"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਬੁਲਬੁਲਿਆਂ ਲਈ ਸੈਟਿੰਗਾਂ"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਬਬਲ ਲਈ ਸੈਟਿੰਗਾਂ"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> ਤੋਂ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> ਅਤੇ <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> ਹੋਰਾਂ ਤੋਂ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"ਹੇਠਾਂ ਵੱਲ ਖੱਬੇ ਲਿਜਾਓ"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"ਹੇਠਾਂ ਵੱਲ ਸੱਜੇ ਲਿਜਾਓ"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"ਖਾਰਜ ਕਰੋ"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"ਗੱਲਬਾਤ \'ਤੇ ਬੁਲਬੁਲੇ ਨਾ ਲਾਓ"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"ਬੁਲਬੁਲੇ ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"ਨਵੀਆਂ ਗੱਲਾਂਬਾਤਾਂ ਫਲੋਟਿੰਗ ਪ੍ਰਤੀਕਾਂ ਜਾਂ ਬੁਲਬੁਲਿਆਂ ਦੇ ਰੂਪ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ। ਬੁਲਬੁਲਿਆਂ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ। ਇਸਨੂੰ ਲਿਜਾਣ ਲਈ ਘਸੀਟੋ।"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ਬੁਲਬੁਲਿਆਂ ਨੂੰ ਕਿਸੇ ਵੇਲੇ ਵੀ ਕੰਟਰੋਲ ਕਰੋ"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ਇਸ ਐਪ \'ਤੇ ਬੁਲਬੁਲੇ ਬੰਦ ਕਰਨ ਲਈ \'ਪ੍ਰਬੰਧਨ ਕਰੋ\' \'ਤੇ ਟੈਪ ਕਰੋ"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"ਗੱਲਬਾਤ \'ਤੇ ਬਬਲ ਨਾ ਲਾਓ"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"ਬਬਲ ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"ਨਵੀਆਂ ਗੱਲਾਂਬਾਤਾਂ ਫਲੋਟਿੰਗ ਪ੍ਰਤੀਕਾਂ ਜਾਂ ਬਬਲ ਦੇ ਰੂਪ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ। ਬਬਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ। ਇਸਨੂੰ ਲਿਜਾਣ ਲਈ ਘਸੀਟੋ।"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"ਬਬਲ ਨੂੰ ਕਿਸੇ ਵੇਲੇ ਵੀ ਕੰਟਰੋਲ ਕਰੋ"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ਇਸ ਐਪ \'ਤੇ ਬਬਲ ਬੰਦ ਕਰਨ ਲਈ \'ਪ੍ਰਬੰਧਨ ਕਰੋ\' \'ਤੇ ਟੈਪ ਕਰੋ"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"ਸਮਝ ਲਿਆ"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"ਸਿਸਟਮ ਨੈਵੀਗੇਸ਼ਨ ਅੱਪਡੇਟ ਹੋ ਗਿਆ। ਤਬਦੀਲੀਆਂ ਕਰਨ ਲਈ, ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ।"</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"ਸਿਸਟਮ ਨੈਵੀਗੇਸ਼ਨ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"ਵੱਡਦਰਸ਼ੀਕਰਨ ਓਵਰਲੇ Window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"ਵੱਡਦਰਸ਼ੀਕਰਨ Window"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"ਵੱਡਦਰਸ਼ੀਕਰਨ Window ਦੇ ਕੰਟਰੋਲ"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ਤਤਕਾਲ ਕੰਟਰੋਲ"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"ਡੀਵਾਈਸ ਕੰਟਰੋਲ"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"ਆਪਣੇ ਕਨੈਕਟ ਕੀਤੇ ਡੀਵਾਈਸਾਂ ਲਈ ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ਤਤਕਾਲ ਕੰਟਰੋਲਾਂ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ਡੀਵਾਈਸ ਕੰਟਰੋਲਾਂ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"ਆਪਣੇ ਕੰਟਰੋਲਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਪਾਵਰ ਬਟਨ ਦਬਾ ਕੇ ਰੱਖੋ"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ਕੰਟਰੋਲਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਐਪ ਚੁਣੋ"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ਕੰਟਰੋਲ"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"ਪਹੁੰਚ ਕਰਨ ਲਈ ਪਾਵਰ ਮੀਨੂ ਤੋਂ ਕੰਟਰੋਲ ਚੁਣੋ"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"ਕਿਸੇ ਕੰਟਰੋਲ ਨੂੰ ਇੱਕ ਥਾਂ ਤੋਂ ਦੂਜੀ ਥਾਂ \'ਤੇ ਲਿਜਾਣ ਲਈ ਫੜ੍ਹ ਕੇ ਰੱਖੋ ਅਤੇ ਘਸੀਟੋ"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"ਸਾਰੇ ਕੰਟਰੋਲਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ਹੋਰ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ਤਤਕਾਲ ਕੰਟਰੋਲ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"ਡੀਵਾਈਸ ਕੰਟਰੋਲਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ਮਨਪਸੰਦ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ਨੇ ਇਸ ਕੰਟਰੋਲ ਨੂੰ ਤੁਹਾਡੇ ਮਨਪਸੰਦ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਸੁਝਾਅ ਦਿੱਤਾ ਹੈ।"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"ਕੰਟਰੋਲ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index bf5a581d050e..3d243b22dca4 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -566,7 +566,7 @@
<string name="monitoring_description_vpn_settings_separator" msgid="8292589617720435430">"  "</string>
<string name="monitoring_description_vpn_settings" msgid="5264167033247632071">"Otwórz ustawienia VPN"</string>
<string name="monitoring_description_ca_cert_settings_separator" msgid="7107390013344435439">" "</string>
- <string name="monitoring_description_ca_cert_settings" msgid="8329781950135541003">"Otwórz zaufane dane logowania"</string>
+ <string name="monitoring_description_ca_cert_settings" msgid="8329781950135541003">"Otwórz zaufane certyfikaty"</string>
<string name="monitoring_description_network_logging" msgid="577305979174002252">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim urządzeniu.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
<string name="monitoring_description_vpn" msgid="1685428000684586870">"Aplikacja otrzymała od Ciebie uprawnienia do konfigurowania połączenia VPN.\n\nMoże ona monitorować Twoją aktywność na urządzeniu i w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="4964237035412372751">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem.\n\nŁączysz się też z siecią VPN, która może monitorować Twoją aktywność w sieci."</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Okno nakładki powiększenia"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Okno powiększenia"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Elementy sterujące okna powiększenia"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Szybkie sterowanie"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Sterowanie urządzeniem"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Dodaj elementy sterujące do połączonych urządzeń"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Skonfiguruj szybkie sterowanie"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Konfigurowanie sterowania urządzeniem"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Przytrzymaj przycisk zasilania, aby uzyskać dostęp do elementów sterujących"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Wybierz aplikację, do której chcesz dodać elementy sterujące"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Elementy sterujące"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Wybierz elementy sterujące dostępne w menu zasilania"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Przytrzymaj i przeciągnij element sterujący, by go przenieść"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Nie udało się wczytać listy elementów sterujących."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Inne"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Dodaj do Szybkiego sterowania"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Dodaj do sterowania urządzeniem"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Dodaj do ulubionych"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Aplikacja <xliff:g id="APP">%s</xliff:g> zaproponowała dodanie tego elementu sterującego do ulubionych."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Zaktualizowano elementy sterujące"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 6565cd0fdcb0..6e1266bf018e 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Permitir"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Depuração USB não permitida"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"O usuário conectado a este dispositivo não pode ativar a depuração USB. Para usar esse recurso, mude para o usuário principal \"NAME\"."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Permitir a depuração sem fio nesta rede?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Permitir a depuração por Wi-Fi nesta rede?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Nome da rede (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nEndereço do Wi-Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Sempre permitir nesta rede"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Permitir"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Depuração sem fio não permitida"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"O usuário conectado a este dispositivo não pode ativar a depuração sem fio. Para usar esse recurso, conecte-se como o usuário principal."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Depuração por Wi-Fi não permitida"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"O usuário conectado a este dispositivo não pode ativar a depuração por Wi-Fi. Para usar esse recurso, conecte-se como o usuário principal."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Porta USB desativada"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Para proteger seu dispositivo de líquidos e detritos, a porta USB está desativada e não detectará nenhum acessório.\n\nVocê receberá uma notificação quando for seguro usar a porta USB novamente."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Porta USB ativada para detectar carregadores e acessórios"</string>
@@ -500,7 +500,7 @@
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Reduz o desempenho e os dados em segundo plano"</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Desativar a Economia de bateria"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"O app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações visíveis na tela ou tocadas no dispositivo, como gravação ou transmissão Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e áudio que você toca."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou tocadas no dispositivo durante uma gravação ou transmissão. Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e áudio que você toca."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou reproduzidas durante uma gravação ou transmissão. Isso inclui senhas, detalhes de pagamento, fotos, mensagens e áudio."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Iniciar gravação ou transmissão?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Iniciar gravação ou transmissão com o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"Não mostrar novamente"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Janela de sobreposição de ampliação"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Controles da janela de ampliação"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controles rápidos"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Adiciona controles para os dispositivos conectados"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurar controles rápidos"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurar controles do dispositivo"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Toque no botão liga/desliga e mantenha-o pressionado para acessar seus controles"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controles para acessar pelo menu do botão liga/desliga"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Segure e arraste um controle para movê-lo"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista de controles."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Adic. aos controles rápidos"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Adicionar aos controles do dispositivo"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Adicionar aos favoritos"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> sugeriu a adição desse controle aos seus favoritos."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles atualizados"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index c73b90146f9c..1137a77e12c2 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -46,9 +46,9 @@
<string name="bluetooth_tethered" msgid="4171071193052799041">"Bluetooth ligado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="2972273031043777851">"Configurar métodos introdução"</string>
<string name="status_bar_use_physical_keyboard" msgid="4849251850931213371">"Teclado físico"</string>
- <string name="usb_device_permission_prompt" msgid="4414719028369181772">"Pretende permitir que a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> aceda ao dispositivo <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
- <string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"Pretende permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> aceda a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicação não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB."</string>
- <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"Pretende permitir que a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> aceda ao acessório <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
+ <string name="usb_device_permission_prompt" msgid="4414719028369181772">"Permitir que a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> aceda ao dispositivo <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
+ <string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"Permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> aceda a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicação não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB."</string>
+ <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"Permitir que a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> aceda ao acessório <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="4091711472439910809">"Pretende abrir a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"Pretende abrir a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicação não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB."</string>
<string name="usb_accessory_confirm_prompt" msgid="5728408382798643421">"Pretende abrir a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
@@ -63,7 +63,7 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Permitir"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Depuração USB não permitida"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"O utilizador com sessão iniciada atualmente neste dispositivo não pode ativar a depuração USB. Para utilizar esta funcionalidade, mude para o utilizador principal."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Pretende permitir a depuração sem fios nesta rede?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Permitir a depuração sem fios nesta rede?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Nome da rede (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nEndereço Wi-Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Permitir sempre nesta rede"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Permitir"</string>
@@ -473,7 +473,7 @@
<string name="accessibility_multi_user_switch_quick_contact" msgid="4504508915324898576">"Mostrar perfil"</string>
<string name="user_add_user" msgid="4336657383006913022">"Adicionar utilizador"</string>
<string name="user_new_user_name" msgid="2019166282704195789">"Novo utilizador"</string>
- <string name="guest_exit_guest_dialog_title" msgid="5015697561580641422">"Pretende remover o convidado?"</string>
+ <string name="guest_exit_guest_dialog_title" msgid="5015697561580641422">"Remover o convidado?"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todas as aplicações e dados desta sessão serão eliminados."</string>
<string name="guest_exit_guest_dialog_remove" msgid="7505817591242703757">"Remover"</string>
<string name="guest_wipe_session_title" msgid="7147965814683990944">"Bem-vindo de volta, caro(a) convidado(a)!"</string>
@@ -493,7 +493,7 @@
<item quantity="other">Pode adicionar até <xliff:g id="COUNT">%d</xliff:g> utilizadores.</item>
<item quantity="one">Apenas é possível criar um utilizador.</item>
</plurals>
- <string name="user_remove_user_title" msgid="9124124694835811874">"Pretende remover o utilizador?"</string>
+ <string name="user_remove_user_title" msgid="9124124694835811874">"Remover o utilizador?"</string>
<string name="user_remove_user_message" msgid="6702834122128031833">"Serão eliminados todos os dados e todas as aplicações deste utilizador."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"Remover"</string>
<string name="battery_saver_notification_title" msgid="8419266546034372562">"Poupança de bateria ativada"</string>
@@ -664,7 +664,7 @@
<string name="got_it" msgid="477119182261892069">"OK"</string>
<string name="tuner_toast" msgid="3812684836514766951">"Parabéns! O Sintonizador da interface do sistema foi adicionado às Definições"</string>
<string name="remove_from_settings" msgid="633775561782209994">"Remover das Definições"</string>
- <string name="remove_from_settings_prompt" msgid="551565437265615426">"Pretende remover o Sintonizador da interface do sistema das Definições e deixar de utilizar todas as respetivas funcionalidades?"</string>
+ <string name="remove_from_settings_prompt" msgid="551565437265615426">"Remover o Sintonizador da interface do sistema das Definições e deixar de utilizar todas as respetivas funcionalidades?"</string>
<string name="activity_not_found" msgid="8711661533828200293">"A aplicação não está instalada no dispositivo"</string>
<string name="clock_seconds" msgid="8709189470828542071">"Mostrar segundos do relógio"</string>
<string name="clock_seconds_desc" msgid="2415312788902144817">"Mostrar segundos do relógio na barra de estado. Pode afetar a autonomia da bateria."</string>
@@ -708,7 +708,7 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Ajuda-o a focar-se sem som ou vibração."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Chama a sua atenção com som ou vibração."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mantém a sua atenção com um atalho flutuante para este conteúdo."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece na parte superior da secção da conversa e surge como um balão."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece na parte superior da secção de conversas e surge como um balão."</string>
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Todas as conversas da app <xliff:g id="APP_NAME_0">%1$s</xliff:g> aparecem como um balão por predefinição. Faça a gestão na app <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Definições"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string>
@@ -965,7 +965,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Não terá acesso a dados ou à Internet através do operador <xliff:g id="CARRIER">%s</xliff:g>. A Internet estará disponível apenas por Wi-Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"o seu operador"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Uma vez que uma aplicação está a ocultar um pedido de autorização, as Definições não conseguem validar a sua resposta."</string>
- <string name="slice_permission_title" msgid="3262615140094151017">"Pretende permitir que a aplicação <xliff:g id="APP_0">%1$s</xliff:g> mostre partes da aplicação <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
+ <string name="slice_permission_title" msgid="3262615140094151017">"Permitir que a aplicação <xliff:g id="APP_0">%1$s</xliff:g> mostre partes da aplicação <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- Pode ler informações da aplicação <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="slice_permission_text_2" msgid="6758906940360746983">"- Pode realizar ações na aplicação <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="slice_permission_checkbox" msgid="4242888137592298523">"Permitir que a aplicação <xliff:g id="APP">%1$s</xliff:g> mostre partes de qualquer aplicação"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Janela de sobreposição da ampliação"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Controlos da janela de ampliação"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controlos rápidos"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controlos de dispositivos"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Adicione controlos para os seus dispositivos associados."</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configure controlos rápidos"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configure os controlos de dispositivos"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Prima sem soltar o botão ligar/desligar para aceder aos controlos."</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Escolha uma app para adicionar controlos"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controlos"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controlos a que pretende aceder a partir do menu ligar/desligar."</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Toque sem soltar e arraste um controlo para o mover."</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista dos controlos."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Adicione aos controlos rápidos"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Adicione aos controlos de dispositivos"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Adicionar aos favoritos"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"A app <xliff:g id="APP">%s</xliff:g> sugeriu este controlo para adicionar aos seus favoritos."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controlos atualizados"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 6565cd0fdcb0..6e1266bf018e 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Permitir"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Depuração USB não permitida"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"O usuário conectado a este dispositivo não pode ativar a depuração USB. Para usar esse recurso, mude para o usuário principal \"NAME\"."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Permitir a depuração sem fio nesta rede?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Permitir a depuração por Wi-Fi nesta rede?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Nome da rede (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nEndereço do Wi-Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Sempre permitir nesta rede"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Permitir"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Depuração sem fio não permitida"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"O usuário conectado a este dispositivo não pode ativar a depuração sem fio. Para usar esse recurso, conecte-se como o usuário principal."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Depuração por Wi-Fi não permitida"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"O usuário conectado a este dispositivo não pode ativar a depuração por Wi-Fi. Para usar esse recurso, conecte-se como o usuário principal."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Porta USB desativada"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Para proteger seu dispositivo de líquidos e detritos, a porta USB está desativada e não detectará nenhum acessório.\n\nVocê receberá uma notificação quando for seguro usar a porta USB novamente."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Porta USB ativada para detectar carregadores e acessórios"</string>
@@ -500,7 +500,7 @@
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Reduz o desempenho e os dados em segundo plano"</string>
<string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Desativar a Economia de bateria"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"O app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações visíveis na tela ou tocadas no dispositivo, como gravação ou transmissão Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e áudio que você toca."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou tocadas no dispositivo durante uma gravação ou transmissão. Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e áudio que você toca."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou reproduzidas durante uma gravação ou transmissão. Isso inclui senhas, detalhes de pagamento, fotos, mensagens e áudio."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Iniciar gravação ou transmissão?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Iniciar gravação ou transmissão com o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_remember_text" msgid="6896767327140422951">"Não mostrar novamente"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Janela de sobreposição de ampliação"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Controles da janela de ampliação"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Controles rápidos"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Adiciona controles para os dispositivos conectados"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurar controles rápidos"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurar controles do dispositivo"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Toque no botão liga/desliga e mantenha-o pressionado para acessar seus controles"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controles para acessar pelo menu do botão liga/desliga"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Segure e arraste um controle para movê-lo"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista de controles."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Adic. aos controles rápidos"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Adicionar aos controles do dispositivo"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Adicionar aos favoritos"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> sugeriu a adição desse controle aos seus favoritos."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles atualizados"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index a52f402f391b..f7b1f076531f 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Permiteți"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Remedierea erorilor prin USB nu este permisă"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Utilizatorul conectat momentan pe acest dispozitiv nu poate activa remedierea erorilor prin USB. Pentru a folosi această funcție, comutați la utilizatorul principal."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Permiteți remedierea erorilor prin wireless în această rețea?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Permiteți remedierea erorilor wireless în această rețea?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Numele rețelei (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nAdresa Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Permiteți întotdeauna în această rețea"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Permiteți"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Remedierea erorilor prin wireless nu este permisă"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Utilizatorul conectat momentan pe acest dispozitiv nu poate activa remedierea erorilor prin wireless. Pentru a folosi această funcție, comutați la utilizatorul principal."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Remedierea erorilor wireless nu este permisă"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Utilizatorul conectat momentan pe acest dispozitiv nu poate activa remedierea erorilor wireless. Pentru a folosi această funcție, comutați la utilizatorul principal."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Portul USB a fost dezactivat"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Pentru a vă proteja dispozitivul de lichide sau reziduuri, portul USB este dezactivat și nu va detecta niciun accesoriu.\n\nVeți primi o notificare când puteți folosi din nou portul USB."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Portul USB a fost activat pentru a detecta încărcătoarele și accesoriile"</string>
@@ -1010,9 +1010,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Fereastra de suprapunere pentru mărire"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Fereastra de mărire"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Comenzi pentru fereastra de mărire"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Comenzi rapide"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Comenzile dispozitivului"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Adăugați comenzi pentru dispozitivele conectate"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Configurați comenzi rapide"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Configurați comenzile dispozitivului"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Apăsați butonul de pornire pentru a accesa comenzile"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Alegeți aplicația pentru a adăuga comenzi"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1022,10 +1022,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Comenzi"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Alegeți comenzile de accesat din meniul de alimentare"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Țineți apăsat și trageți o comandă pentru a o muta"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Lista cu toate comenzile nu a putut fi încărcată."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altul"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Adăugați la comenzi rapide"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Adăugați la comenzile dispozitivului"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Adăugați la preferate"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> a sugerat adăugarea acestei comenzi la preferate."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"S-au actualizat comenzile"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 27e9dc3c00a6..db37b0363766 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Не удалось сделать скриншот: нет разрешения от приложения или организации."</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Закрыть скриншот"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Открыть скриншот"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Запись видео с экрана"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Создание скриншотов"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Текущее уведомление для записи видео с экрана"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Начать запись?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Во время записи система Android может получить доступ к конфиденциальной информации, которая видна на экране или воспроизводится на устройстве, в том числе к паролям, сведениям о платежах, фотографиям, сообщениям и аудиозаписям."</string>
@@ -515,7 +515,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"История"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Беззвучные уведомления"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"Оповещения"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"Чаты"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"Разговоры"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Отклонить все беззвучные уведомления"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"В режиме \"Не беспокоить\" уведомления заблокированы"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"Начать"</string>
@@ -714,12 +714,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Уведомления приходят без звука и вибрации"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Уведомления приходят со звуком или вибрацией"</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Привлекает ваше внимание к контенту с помощью плавающего ярлыка"</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Появляется в верхней части раздела чатов в виде всплывающего уведомления."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Все сообщения из сервиса \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" по умолчанию появляются в виде всплывающих уведомлений. Изменить настройки можно в приложении \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\"."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Появляется в верхней части списка разговоров и в виде всплывающего чата."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Все разговоры из сервиса \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" по умолчанию появляются в виде всплывающих чатов. Изменить настройки можно в приложении \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\"."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Настройки"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Нет недавних подсказок"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Здесь будут появляться недавние и закрытые всплывающие уведомления."</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Нет недавних всплывающих чатов"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Здесь будут появляться недавние и закрытые всплывающие чаты."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Эти уведомления нельзя изменить."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Эту группу уведомлений нельзя настроить здесь."</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Уведомление отправлено через прокси-сервер."</string>
@@ -747,7 +747,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Уведомления отключены"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Включить звук уведомлений"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Показывать всплывающее уведомление"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Не показывать всплывающие уведомления"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Не показывать всплывающие чаты"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Добавить на главный экран"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g>: <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"настройки уведомлений"</string>
@@ -993,7 +993,7 @@
<string name="device_services" msgid="1549944177856658705">"Сервисы устройства"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Без названия"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Нажмите, чтобы перезапустить приложение и перейти в полноэкранный режим."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Настройки всплывающих уведомлений от приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"."</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Настройки всплывающих чатов от приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"."</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Настроить"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> из приложения \"<xliff:g id="APP_NAME">%2$s</xliff:g>\""</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> от приложения \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" и ещё <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -1003,11 +1003,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Перенести в левый нижний угол"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Перенести в правый нижний угол"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Закрыть"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Не показывать всплывающие уведомления"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Всплывающие уведомления для сообщений"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Новые сообщения будут появляться в виде плавающих значков или всплывающих уведомлений. Чтобы открыть сообщение, нажмите на уведомление. Чтобы переместить уведомление, перетащите его."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Настройки всплывающих уведомлений"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Чтобы отключить всплывающие уведомления от приложения, нажмите \"Настроить\"."</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Не показывать всплывающие чаты для разговоров"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Всплывающие чаты для разговоров"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Новые разговоры будут появляться в виде плавающих значков, или всплывающих чатов. Чтобы открыть чат, нажмите на него, а чтобы переместить – перетащите."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Настройки всплывающих чатов"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Чтобы отключить всплывающие чаты от приложения, нажмите \"Настроить\"."</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"ОК"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Параметры навигации в системе обновлены. Чтобы изменить их, перейдите в настройки."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Чтобы обновить параметры навигации в системе, перейдите в настройки."</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Наложение окна увеличения"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Окно увеличения"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Настройки окна увеличения"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Управление умным домом"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Элементы управления"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Добавьте элементы управления для подключенных устройств"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Настройка элементов управления умным домом"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Настройте элементы управления"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Чтобы перейти к элементам управления, удерживайте кнопку питания."</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Чтобы добавить элементы управления, выберите приложение"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Элементы управления"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Выберите элементы управления, которые будут доступны в меню кнопки питания."</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Чтобы перенести элемент, нажмите на него и удерживайте, а затем перетащите в нужное место."</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Не удалось загрузить список элементов управления."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Другое"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Добавить в быстрое управление"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Добавьте элементы управления"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Добавить в избранное"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" предлагает добавить этот элемент управления в избранное."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Элементы управления обновлены."</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 48461ba1566b..6baa7e1a62e4 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"විශාලන උඩැතිරි කවුළුව"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"විශාලන කවුළුව"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"විශාලනය කිරීමේ කවුළු පාලන"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"ඉක්මන් පාලන"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"උපාංග පාලන"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"ඔබේ සම්බන්ධිත උපාංග සඳහා පාලන එක් කරන්න"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ඉක්මන් පාලන පිහිටුවන්න"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"උපාංග පාලන පිහිටුවන්න"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"ඔබේ පාලන වෙත ප්‍රවේශ වීමට බල බොත්තම අල්ලාගෙන සිටින්න"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"පාලන එක් කිරීමට යෙදුම තෝරා ගන්න"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"පාලන"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"බල මෙනුවෙන් ප්‍රවේශ වීමට පාලන තෝරා ගන්න"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"පාලනයක් එය ගෙන යාමට අල්ලා අදින්න"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"සියලු පාලනවල ලැයිස්තුව පූරණය කළ නොහැකි විය."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"වෙනත්"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"ඉක්මන් පාලන වෙත එක් කරන්න"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"උපාංග පාලන වෙත එක් කරන්න"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ප්‍රියතම වෙත එක් කරන්න"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ඔබේ ප්‍රියතම වෙත එක් කිරීමට මෙම පාලනය යෝජනා කරන ලදී."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"පාලන යාවත්කාලීනයි"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index e742ec0f9a7e..e7c15d436235 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Okno prekrytia priblíženia"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Okno priblíženia"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Ovládacie prvky okna priblíženia"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Rýchle ovládacie prvky"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Ovládacie prvky zariadenia"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Pridajte ovládacie prvky pre svoje pripojené zariadenia"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Nastavenie rýchlych ovládacích prvkov"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Nastavenie ovládacích prvkov zariadenia"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Pridržaním vypínača získate prístup k ovládacím prvkom"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Výberom aplikácie pridajte ovládacie prvky"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládacie prvky"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vyberte si ovládacie prvky, ku ktorým chcete mať prístup v ponuke vypínača"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Ovládací prvok premiestnite pridržaním a presunutím"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Zoznam všetkých ovl. prvkov sa nepodarilo načítať."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Iné"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Pridanie do rýchleho ovládania"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Pridanie do ovládacích prvkov zariadenia"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Pridať do obľúbených"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Aplikácia <xliff:g id="APP">%s</xliff:g> vám odporučila pridať tento ovládací prvok do obľúbených."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Ovládanie bolo aktualizované"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 6620dff79daa..1ab62e753b8f 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -24,19 +24,19 @@
<string name="status_bar_no_notifications_title" msgid="7812479124981107507">"Ni obvestil"</string>
<string name="status_bar_ongoing_events_title" msgid="3986169317496615446">"Trenutno"</string>
<string name="status_bar_latest_events_title" msgid="202755896454005436">"Obvestila"</string>
- <string name="battery_low_title" msgid="6891106956328275225">"Akumulator bo morda kmalu izpraznjen"</string>
+ <string name="battery_low_title" msgid="6891106956328275225">"Baterija bo morda kmalu izpraznjena"</string>
<string name="battery_low_percent_format" msgid="4276661262843170964">"Še <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid" msgid="3985614339605686167">"Še <xliff:g id="PERCENTAGE">%1$s</xliff:g>, glede na način uporabe imate na voljo še približno <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="5917433188456218857">"Še <xliff:g id="PERCENTAGE">%1$s</xliff:g>, na voljo imate še približno <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"Še <xliff:g id="PERCENTAGE">%s</xliff:g>. Vklopljeno je varčevanje z energijo akumulatorja."</string>
+ <string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"Še <xliff:g id="PERCENTAGE">%s</xliff:g>. Vklopljeno je varčevanje z energijo baterije."</string>
<string name="invalid_charger" msgid="4370074072117767416">"Ni mogoče polniti prek USB-ja. Uporabite polnilnik, ki je bil priložen napravi."</string>
<string name="invalid_charger_title" msgid="938685362320735167">"Ni mogoče polniti prek USB-ja"</string>
<string name="invalid_charger_text" msgid="2339310107232691577">"Uporabite polnilnik, ki je bil priložen napravi"</string>
<string name="battery_low_why" msgid="2056750982959359863">"Nastavitve"</string>
- <string name="battery_saver_confirmation_title" msgid="1234998463717398453">"Želite vklopiti varčevanje z energijo akumulatorja?"</string>
- <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"O varčevanju z energijo akumulatorja"</string>
+ <string name="battery_saver_confirmation_title" msgid="1234998463717398453">"Želite vklopiti varčevanje z energijo baterije?"</string>
+ <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"O varčevanju z energijo baterije"</string>
<string name="battery_saver_confirmation_ok" msgid="5042136476802816494">"Vklopi"</string>
- <string name="battery_saver_start_action" msgid="4553256017945469937">"Vklop varčevanja z energijo akumulatorja"</string>
+ <string name="battery_saver_start_action" msgid="4553256017945469937">"Vklop varčevanja z energijo baterije"</string>
<string name="status_bar_settings_settings_button" msgid="534331565185171556">"Nastavitve"</string>
<string name="status_bar_settings_wifi_button" msgid="7243072479837270946">"Wi-Fi"</string>
<string name="status_bar_settings_auto_rotation" msgid="8329080442278431708">"Samodejno zasukaj zaslon"</string>
@@ -237,9 +237,9 @@
<string name="accessibility_vpn_on" msgid="8037549696057288731">"Omrežje VPN je vklopljeno."</string>
<string name="accessibility_no_sims" msgid="5711270400476534667">"Ni kartice SIM."</string>
<string name="carrier_network_change_mode" msgid="5174141476991149918">"Spreminjanje omrežja operaterja"</string>
- <string name="accessibility_battery_details" msgid="6184390274150865789">"Odpiranje podrobnosti o akumulatorju"</string>
+ <string name="accessibility_battery_details" msgid="6184390274150865789">"Odpiranje podrobnosti o bateriji"</string>
<string name="accessibility_battery_level" msgid="5143715405241138822">"Baterija <xliff:g id="NUMBER">%d</xliff:g> odstotkov."</string>
- <string name="accessibility_battery_level_with_estimate" msgid="4843119982547599452">"Napolnjenost akumulatorja je <xliff:g id="PERCENTAGE">%1$s</xliff:g>, glede na način uporabe imate na voljo še približno <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="accessibility_battery_level_with_estimate" msgid="4843119982547599452">"Napolnjenost baterije je <xliff:g id="PERCENTAGE">%1$s</xliff:g>, glede na način uporabe imate na voljo še približno <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="accessibility_battery_level_charging" msgid="8892191177774027364">"Baterija se polni, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> odstotkov."</string>
<string name="accessibility_settings_button" msgid="2197034218538913880">"Sistemske nastavitve."</string>
<string name="accessibility_notifications_button" msgid="3960913924189228831">"Obvestila."</string>
@@ -350,7 +350,7 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="6595808498429809855">"Bluetooth (št. naprav: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="6375098046500790870">"Bluetooth izklopljen"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="5760239584390514322">"Na voljo ni nobene seznanjene naprave"</string>
- <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Akumulator na <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
+ <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Baterija na <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvok"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalke z mikrofonom"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vhodna naprava"</string>
@@ -394,7 +394,7 @@
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Več nastavitev"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Končano"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Povezava je vzpostavljena"</string>
- <string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Povezava je vzpostavljena, raven napolnjenosti akumulatorja je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Povezava je vzpostavljena, raven napolnjenosti baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Vzpostavljanje povezave ..."</string>
<string name="quick_settings_tethering_label" msgid="5257299852322475780">"Internet prek mobilne naprave"</string>
<string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Dostopna točka"</string>
@@ -413,7 +413,7 @@
<string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"Poraba podatkov"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="1136599216568805644">"Preostala količina podatkov"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="4561921367680636235">"Omejitev prekoračena"</string>
- <string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"Porabljeno: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
+ <string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"Preneseno: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="1791389609409211628">"Omejitev: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"Opozorilo – <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="2754212289804324685">"Delovni profil"</string>
@@ -423,7 +423,7 @@
<string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"Vklop ob <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"Do <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="quick_settings_ui_mode_night_label" msgid="1398928270610780470">"Temna tema"</string>
- <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"Varč. z ener. bater."</string>
+ <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"Varčevanje z baterijo"</string>
<string name="quick_settings_dark_mode_secondary_label_on_at_sunset" msgid="6017379738102015710">"Ob sončnem zahodu"</string>
<string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do sončnega vzhoda"</string>
<string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Vklop ob <xliff:g id="TIME">%s</xliff:g>"</string>
@@ -502,9 +502,9 @@
<string name="user_remove_user_title" msgid="9124124694835811874">"Želite odstraniti uporabnika?"</string>
<string name="user_remove_user_message" msgid="6702834122128031833">"Vse aplikacije in podatki tega uporabnika bodo izbrisani."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"Odstrani"</string>
- <string name="battery_saver_notification_title" msgid="8419266546034372562">"Varčevanje z energijo akumulatorja je vklopljeno"</string>
+ <string name="battery_saver_notification_title" msgid="8419266546034372562">"Varčevanje z energijo baterije je vklopljeno"</string>
<string name="battery_saver_notification_text" msgid="2617841636449016951">"Omeji zmogljivost delovanja in prenos podatkov v ozadju"</string>
- <string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Izklop varčevanja z energijo akumulatorja"</string>
+ <string name="battery_saver_notification_action_text" msgid="6022091913807026887">"Izklop varčevanja z energijo baterije"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bo imela dostop do vseh podatkov, ki so med snemanjem ali predvajanjem prikazani na vašem zaslonu ali se predvajajo iz vaše naprave. To vključuje podatke, kot so gesla, podrobnosti o plačilu, fotografije, sporočila in zvok, ki ga predvajate."</string>
<string name="media_projection_dialog_service_text" msgid="958000992162214611">"Storitev, ki zagotavlja to funkcijo, bo imela dostop do vseh podatkov, ki so med snemanjem ali predvajanjem prikazani na vašem zaslonu ali se predvajajo iz vaše naprave. To vključuje podatke, kot so gesla, podrobnosti o plačilu, fotografije, sporočila in zvok, ki ga predvajate."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Želite začeti snemati ali predvajati?"</string>
@@ -643,8 +643,8 @@
<string name="output_service_wifi" msgid="9003667810868222134">"Wi-Fi"</string>
<string name="output_service_bt_wifi" msgid="7186882540475524124">"Bluetooth in Wi-Fi"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Uglaševalnik uporabniškega vmesnika sistema"</string>
- <string name="show_battery_percentage" msgid="6235377891802910455">"Prikaži odstotek napolnjenosti vgraj. akumulatorja"</string>
- <string name="show_battery_percentage_summary" msgid="9053024758304102915">"Prikaz odstotka napolnjenosti akumulatorja znotraj ikone v vrstici stanja, ko se ne polni"</string>
+ <string name="show_battery_percentage" msgid="6235377891802910455">"Prikaži odstotek napolnjenosti vgrajene baterije"</string>
+ <string name="show_battery_percentage_summary" msgid="9053024758304102915">"Prikaz odstotka napolnjenosti baterije znotraj ikone v vrstici stanja, ko se ne polni"</string>
<string name="quick_settings" msgid="6211774484997470203">"Hitre nastavitve"</string>
<string name="status_bar" msgid="4357390266055077437">"Vrstica stanja"</string>
<string name="overview" msgid="3522318590458536816">"Pregled"</string>
@@ -768,9 +768,9 @@
<item quantity="few">%d minute</item>
<item quantity="other">%d minut</item>
</plurals>
- <string name="battery_panel_title" msgid="5931157246673665963">"Poraba akumulatorja"</string>
- <string name="battery_detail_charging_summary" msgid="8821202155297559706">"Varčevanje z energijo akumulatorja med polnjenjem ni na voljo"</string>
- <string name="battery_detail_switch_title" msgid="6940976502957380405">"Varčevanje z energijo akumulatorja"</string>
+ <string name="battery_panel_title" msgid="5931157246673665963">"Poraba baterije"</string>
+ <string name="battery_detail_charging_summary" msgid="8821202155297559706">"Varčevanje z energijo baterije med polnjenjem ni na voljo"</string>
+ <string name="battery_detail_switch_title" msgid="6940976502957380405">"Varčevanje z energijo baterije"</string>
<string name="battery_detail_switch_summary" msgid="3668748557848025990">"Omeji zmogljivost delovanja in prenos podatkov v ozadju"</string>
<string name="keyboard_key_button_template" msgid="8005673627272051429">"Gumb <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="keyboard_key_home" msgid="3734400625170020657">"Začetek"</string>
@@ -818,7 +818,7 @@
<string name="volume_and_do_not_disturb" msgid="502044092739382832">"Ne moti"</string>
<string name="volume_dnd_silent" msgid="4154597281458298093">"Bližnjica z gumboma za glasnost"</string>
<string name="volume_up_silent" msgid="1035180298885717790">"Zapustitev načina »ne moti« pri povečanju glasnosti"</string>
- <string name="battery" msgid="769686279459897127">"Akumulator"</string>
+ <string name="battery" msgid="769686279459897127">"Baterija"</string>
<string name="clock" msgid="8978017607326790204">"Ura"</string>
<string name="headset" msgid="4485892374984466437">"Slušalke z mikrofonom"</string>
<string name="accessibility_long_click_tile" msgid="210472753156768705">"Odpri nastavitve"</string>
@@ -946,7 +946,7 @@
<string name="tuner_menu" msgid="363690665924769420">"Meni"</string>
<string name="tuner_app" msgid="6949280415826686972">"Aplikacija <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="notification_channel_alerts" msgid="3385787053375150046">"Opozorila"</string>
- <string name="notification_channel_battery" msgid="9219995638046695106">"Akumulator"</string>
+ <string name="notification_channel_battery" msgid="9219995638046695106">"Baterija"</string>
<string name="notification_channel_screenshot" msgid="7665814998932211997">"Posnetki zaslona"</string>
<string name="notification_channel_general" msgid="4384774889645929705">"Splošna sporočila"</string>
<string name="notification_channel_storage" msgid="2720725707628094977">"Shramba"</string>
@@ -970,7 +970,7 @@
<string name="qs_dnd_keep" msgid="3829697305432866434">"Obdrži"</string>
<string name="qs_dnd_replace" msgid="7712119051407052689">"Zamenjaj"</string>
<string name="running_foreground_services_title" msgid="5137313173431186685">"Aplikacije, ki se izvajajo v ozadju"</string>
- <string name="running_foreground_services_msg" msgid="3009459259222695385">"Dotaknite se za prikaz podrobnosti porabe akumulatorja in prenosa podatkov"</string>
+ <string name="running_foreground_services_msg" msgid="3009459259222695385">"Dotaknite se za prikaz podrobnosti porabe baterije in prenosa podatkov"</string>
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Želite izklopiti prenos podatkov v mobilnih omrežjih?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Prek operaterja <xliff:g id="CARRIER">%s</xliff:g> ne boste imeli dostopa do podatkovne povezave ali interneta. Internet bo na voljo samo prek povezave Wi-Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"svojega operaterja"</string>
@@ -981,8 +981,8 @@
<string name="slice_permission_checkbox" msgid="4242888137592298523">"Dovoli, da aplikacija <xliff:g id="APP">%1$s</xliff:g> prikaže izreze iz poljubne aplikacije"</string>
<string name="slice_permission_allow" msgid="6340449521277951123">"Dovoli"</string>
<string name="slice_permission_deny" msgid="6870256451658176895">"Zavrni"</string>
- <string name="auto_saver_title" msgid="6873691178754086596">"Dotaknite se za načrtovanje varčevanja z energijo akumulatorja"</string>
- <string name="auto_saver_text" msgid="3214960308353838764">"Vklop, če je verjetno, da se bo akumulator izpraznil"</string>
+ <string name="auto_saver_title" msgid="6873691178754086596">"Dotaknite se za načrtovanje varčevanja z energijo baterije"</string>
+ <string name="auto_saver_text" msgid="3214960308353838764">"Vklop, če je verjetno, da se bo baterija izpraznila"</string>
<string name="no_auto_saver_action" msgid="7467924389609773835">"Ne, hvala"</string>
<string name="auto_saver_enabled_title" msgid="4294726198280286333">"Urnik varčevanja z energijo akumulatorja je vklopljen"</string>
<string name="auto_saver_enabled_text" msgid="7889491183116752719">"Varčevanje z energijo akumulatorja se bo samodejno vklopilo, ko bo energija akumulatorja pod <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Prekrivno povečevalno okno"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Povečevalno okno"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontrolniki povečevalnega okna"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Hitri kontrolniki"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Kontrolniki naprave"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Dodajte kontrolnike za povezane naprave"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Nastavitev hitrih kontrolnikov"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Nastavitev kontrolnikov naprave"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Za dostop do kontrolnikov pridržite gumb za vklop"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Izberite aplikacijo za dodajanje kontrolnikov"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolniki"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izberite kontrolnike, do katerih želite imeti dostop prek menija za vklop/izklop"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Pridržite in povlecite kontrolnik, da ga premaknete"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Seznama vseh kontrolnikov ni bilo mogoče naložiti."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Dodaj med hitre kontrolnike"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajanje med kontrolnike naprave"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Dodaj med priljubljene"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Aplikacija <xliff:g id="APP">%s</xliff:g> je predlagala, da ta kontrolnik dodate med priljubljene."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrolniki so posodobljeni"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 074f63bbd27f..c95232c52d56 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Lejo"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Korrigjimi i USB-së nuk lejohet"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Përdoruesi i identifikuar aktualisht në këtë pajisje nuk mund ta aktivizojë korrigjimin e USB-së. Për ta përdorur këtë funksion, kalo te përdoruesi parësor."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Do ta lejosh korrigjimin me lidhjen pa tel në këtë rrjet?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Do ta lejosh korrigjimin përmes Wi-Fi në këtë rrjet?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Emri i rrjetit (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nAdresa Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Shfaq gjithmonë në këtë rrjet"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Lejo"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Korrigjimi me lidhjen pa tel nuk lejohet"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Përdoruesi i identifikuar aktualisht në këtë pajisje nuk mund ta aktivizojë korrigjimin me lidhjen pa tel. Për ta përdorur këtë veçori, kalo te përdoruesi parësor."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Korrigjimi përmes Wi-Fi nuk lejohet"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Përdoruesi i identifikuar aktualisht në këtë pajisje nuk mund ta aktivizojë korrigjimin përmes Wi-Fi. Për ta përdorur këtë veçori, kalo te përdoruesi parësor."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"Porta e USB-së është çaktivizuar"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Për të mbrojtur pajisjen tënde nga lëngjet apo papastërtitë, porta e USB-së është çaktivizuar dhe nuk do t\'i dallojë aksesorët.\n\nDo të njoftohesh kur të mos jetë problem përdorimi përsëri i portës USB."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Porta USB është aktivizuar për të zbuluar karikuesit dhe aksesorët"</string>
@@ -708,8 +708,8 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Të ndihmon të fokusohesh pa tinguj ose dridhje."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Të tërheq vëmendjen me tinguj ose dridhje."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mban vëmendjen tënde me një shkurtore pluskuese te kjo përmbajtje."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shfaq në krye të seksionit të bashkëbisedimit dhe shfaqe si flluskë."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Të gjitha bashkëbisedimet nga flluska e <xliff:g id="APP_NAME_0">%1$s</xliff:g> si parazgjedhje. Menaxho në <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shfaqet në krye të seksionit të bisedës dhe shfaqet si flluskë."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Të gjitha bisedat nga flluska e <xliff:g id="APP_NAME_0">%1$s</xliff:g> si parazgjedhje. Menaxho në <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Cilësimet"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Përparësia"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nuk ka flluska të fundit"</string>
@@ -993,9 +993,9 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Zhvendos poshtë majtas"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Lëvize poshtë djathtas"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Hiq"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Mos e vendos bashkëbisedimin në flluskë"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Mos e vendos bisedën në flluskë"</string>
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Bisedo duke përdorur flluskat"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Bashkëbisedimet e reja shfaqen si ikona pluskuese ose flluska. Trokit për të hapur flluskën. Zvarrit për ta zhvendosur."</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Bisedat e reja shfaqen si ikona pluskuese ose flluska. Trokit për të hapur flluskën. Zvarrit për ta zhvendosur."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Kontrollo flluskat në çdo moment"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Trokit \"Menaxho\" për të çaktivizuar flluskat nga ky aplikacion"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"E kuptova"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Dritarja e mbivendosjes së zmadhimit"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Dritarja e zmadhimit"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kontrollet e dritares së zmadhimit"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Kontrollet e shpejta"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Kontrollet e pajisjes"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Shto kontrolle për pajisjet e tua të lidhura"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Konfiguro kontrollet e shpejta"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Konfiguro kontrollet e pajisjes"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Mbaj shtypur butonin e energjisë për të pasur qasje te kontrollet e tua"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Zgjidh aplikacionin për të shtuar kontrollet"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrollet"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Zgjidh kontrollet për të pasur qasje nga menyja e energjisë"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Mbaj dhe zvarrit një kontroll për ta zhvendosur"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Lista e të gjitha kontrolleve nuk mund të ngarkohej."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Tjetër"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Shto te kontrollet e shpejta"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Shto te kontrollet e pajisjes"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Shto te të preferuarat"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> sugjeroi këtë kontroll për ta shtuar te të preferuarat e tua."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrollet u përditësuan"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 38d2c75281bc..3e2482df5f63 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -1010,9 +1010,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Преклопни прозор за увећање"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Прозор за увећање"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Контроле прозора за увећање"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Брзе контроле"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Контроле уређаја"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Додајте контроле за повезане уређаје"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Подесите брзе контроле"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Подесите контроле уређаја"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Задржите дугме за укључивање да бисте приступили контролама"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Одаберите апликацију за додавање контрола"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1022,10 +1022,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Контроле"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Одаберите контроле којима ћете приступати из менија напајања"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Задржите и превуците контролу да бисте је преместили"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Учитавање листе свих контрола није успело."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друго"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Додајте у брзе контроле"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Додајте у контроле уређаја"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Додајте у омиљене"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> предлаже да додате ову контролу у омиљене."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Контроле су ажуриране"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 089910ce3cdf..509b97c4c8f3 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Alla konversationer från <xliff:g id="APP_NAME_0">%1$s</xliff:g> visas i bubblor som standard. Hantera detta i <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Inställningar"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Inga senaste bubblor"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Inga nya bubblor"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"De senaste bubblorna och ignorerade bubblor visas här"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Det går inte att ändra de här aviseringarna."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Den här aviseringsgruppen kan inte konfigureras här"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Överlagrat förstoringsfönster"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Förstoringsfönster"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Inställningar för förstoringsfönster"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Snabbinställningar"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Enhetsinställningar"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Lägg till snabbkontroller för anslutna enheter"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Konfigurera snabbinställningar"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Konfigurera enhetsinställningar"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Håll strömbrytaren nedtryckt för att få åtkomst till snabbkontrollerna"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Välj en app om du vill lägga till snabbkontroller"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Välj snabbkontroller som ska visas i strömbrytarmenyn"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Dra en snabbkontroll om du vill flytta den"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Listan med alla kontroller kunde inte läsas in."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Övrigt"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Lägg till snabbkontroll"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Lägg till i enhetsinställningar"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Lägg till i Favoriter"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> föreslår att du lägger till kontrollen i dina favoriter."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Snabbkontroller uppdaterade"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 6beb752bc71e..a23e390c25ef 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -713,7 +713,7 @@
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Mipangilio"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Kipaumbele"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Hakuna viputo vya hivi majuzi"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viputo vya hivi karibuni na viputo vilivyoondolewa vitaonekana hapa"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viputo vya hivi karibuni na vile vilivyoondolewa vitaonekana hapa"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Arifa hizi haziwezi kubadilishwa."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Kikundi hiki cha arifa hakiwezi kuwekewa mipangilio hapa"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Arifa wakilishi"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Dirisha la Kuwekelea Linalokuza"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Dirisha la Ukuzaji"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Vidhibiti vya Dirisha la Ukuzaji"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Vidhibiti vya haraka"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Vidhibiti vya kifaa"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Weka vidhibiti vya vifaa vyako vilivyounganishwa"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Weka mipangilio ya vidhibiti vya haraka"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Weka mipangilio ya vidhibiti vya kifaa"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Shikilia Kitufe cha kuwasha/kuzima ili ufikie vidhibiti vyako"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Chagua programu ili uweke vidhibiti"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Vidhibiti"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Chagua vidhibiti vya kufikia ukitumia menyu ya kuwasha/kuzima"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Shikilia na uburute kidhibiti ili ukisogeze"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Shikilia na uburute ili upange upya vidhibiti"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"Umeondoa vidhibiti vyote"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Imeshindwa kupakia orodha ya vidhibiti vyote."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Nyingine"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Weka kwenye vidhibiti vya haraka"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Weka kwenye vidhibiti vya kifaa"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Ongeza kwenye vipendwa"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> imependekeza kidhibiti hiki ili ukiongeze kwenye vipendwa vyako."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Umesasisha vidhibiti"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 2d904e7e4ebe..420706605c7e 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"அனுமதி"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB பிழைதிருத்தம் அனுமதிக்கப்படவில்லை"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"தற்போது இந்தச் சாதனத்தில் உள்நுழைந்துள்ள பயனரால் USB பிழைதிருத்தத்தை இயக்க முடியாது. இந்த அம்சத்தை இயக்க, முதன்மைப் பயனருக்கு மாறவும்."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"இந்த நெட்வொர்க்கில் வயர்லெஸ் பிழைதிருத்தத்தை அனுமதிக்கவா?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"இந்த நெட்வொர்க்கில் வைஃபை பிழைதிருத்தத்தை அனுமதிக்கவா?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"நெட்வொர்க் பெயர் (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nவைஃபை முகவரி (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"இந்த நெட்வொர்க்கில் எப்போதும் அனுமதி"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"அனுமதி"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"வயர்லெஸ் பிழைதிருத்தம் அனுமதிக்கப்படவில்லை"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"தற்போது இந்தச் சாதனத்தில் உள்நுழைந்துள்ள பயனரால் வயர்லெஸ் பிழைதிருத்தத்தை இயக்க முடியாது. இந்த அம்சத்தை இயக்க முதன்மைப் பயனருக்கு மாறவும்."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"வைஃபை பிழைதிருத்தம் அனுமதிக்கப்படவில்லை"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"தற்போது இந்தச் சாதனத்தில் உள்நுழைந்துள்ள பயனரால் வைஃபை பிழைதிருத்தத்தை இயக்க முடியாது. இந்த அம்சத்தை இயக்க முதன்மைப் பயனருக்கு மாறவும்."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB போர்ட் முடக்கப்பட்டது"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"தேவையற்றவையில் இருந்து உங்கள் சாதனத்தைப் பாதுகாக்க USB போர்ட் முடக்கப்பட்டுள்ளது. மேலும் எந்தத் துணைக் கருவிகளையும் அது கண்டறியாது.\n\nUSB போர்ட்டை மீண்டும் எப்போது பயன்படுத்தலாம் என்பதைப் பற்றி உங்களுக்குத் தெரிவிக்கப்படும்."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"சார்ஜர்களையும் துணைக்கருவிகளையும் கண்டறிவதற்காக USB போர்ட் இயக்கப்பட்டுள்ளது"</string>
@@ -154,36 +154,21 @@
<string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"தவறான பேட்டர்ன்"</string>
<string name="biometric_dialog_wrong_password" msgid="69477929306843790">"தவறான கடவுச்சொல்"</string>
<string name="biometric_dialog_credential_too_many_attempts" msgid="3083141271737748716">"பல தவறான முயற்சிகள்.\n<xliff:g id="NUMBER">%d</xliff:g> வினாடிகளில் மீண்டும் முயலவும்."</string>
- <!-- no translation found for biometric_dialog_credential_attempts_before_wipe (6751859711975516999) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_attempt_before_wipe_dialog_title (2874250099278693477) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_pattern_attempt_before_wipe_device (6562299244825817598) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_pin_attempt_before_wipe_device (9151756675698215723) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_password_attempt_before_wipe_device (2363778585575998317) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_pattern_attempt_before_wipe_user (8400180746043407270) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_pin_attempt_before_wipe_user (4159878829962411168) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_password_attempt_before_wipe_user (4695682515465063885) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_pattern_attempt_before_wipe_profile (6045224069529284686) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_pin_attempt_before_wipe_profile (545567685899091757) -->
- <skip />
- <!-- no translation found for biometric_dialog_last_password_attempt_before_wipe_profile (8538032972389729253) -->
- <skip />
- <!-- no translation found for biometric_dialog_failed_attempts_now_wiping_device (6585503524026243042) -->
- <skip />
- <!-- no translation found for biometric_dialog_failed_attempts_now_wiping_user (7015008539146949115) -->
- <skip />
- <!-- no translation found for biometric_dialog_failed_attempts_now_wiping_profile (5239378521440749682) -->
- <skip />
- <!-- no translation found for biometric_dialog_now_wiping_dialog_dismiss (7189432882125106154) -->
- <skip />
+ <string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"மீண்டும் முயலவும். <xliff:g id="ATTEMPTS_0">%1$d</xliff:g>/<xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g> முறை முயன்றுவிட்டீர்கள்."</string>
+ <string name="biometric_dialog_last_attempt_before_wipe_dialog_title" msgid="2874250099278693477">"உங்கள் தரவு நீக்கப்படும்"</string>
+ <string name="biometric_dialog_last_pattern_attempt_before_wipe_device" msgid="6562299244825817598">"அடுத்த முறை தவறான பேட்டர்னை வரைந்தால் இந்தச் சாதனத்தின் தரவு நீக்கப்படும்."</string>
+ <string name="biometric_dialog_last_pin_attempt_before_wipe_device" msgid="9151756675698215723">"அடுத்த முறை தவறான பின்னை உள்ளிட்டால் இந்தச் சாதனத்தின் தரவு நீக்கப்படும்."</string>
+ <string name="biometric_dialog_last_password_attempt_before_wipe_device" msgid="2363778585575998317">"அடுத்த முறை தவறான கடவுச்சொல்லை உள்ளிட்டால் இந்தச் சாதனத்தின் தரவு நீக்கப்படும்."</string>
+ <string name="biometric_dialog_last_pattern_attempt_before_wipe_user" msgid="8400180746043407270">"அடுத்த முறை தவறான பேட்டர்னை வரைந்தால் இந்தப் பயனர் நீக்கப்படுவார்."</string>
+ <string name="biometric_dialog_last_pin_attempt_before_wipe_user" msgid="4159878829962411168">"அடுத்த முறை தவறான பின்னை உள்ளிட்டால் இந்தப் பயனர் நீக்கப்படுவார்."</string>
+ <string name="biometric_dialog_last_password_attempt_before_wipe_user" msgid="4695682515465063885">"அடுத்த முறை தவறான கடவுச்சொல்லை உள்ளிட்டால் இந்தப் பயனர் நீக்கப்படுவார்."</string>
+ <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"அடுத்த முறை தவறான பேட்டர்னை வரைந்தால் உங்கள் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
+ <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"அடுத்த முறை தவறான பின்னை உள்ளிட்டால் உங்கள் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
+ <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"அடுத்த முறை தவறான கடவுச்சொல்லை உள்ளிட்டால் உங்கள் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
+ <string name="biometric_dialog_failed_attempts_now_wiping_device" msgid="6585503524026243042">"பலமுறை தவறாக முயன்ற காரணத்தால் இந்தச் சாதனத்தின் தரவு நீக்கப்படும்."</string>
+ <string name="biometric_dialog_failed_attempts_now_wiping_user" msgid="7015008539146949115">"பலமுறை தவறாக முயன்ற காரணத்தால் இந்தப் பயனர் நீக்கப்படுவார்."</string>
+ <string name="biometric_dialog_failed_attempts_now_wiping_profile" msgid="5239378521440749682">"பலமுறை தவறாக முயன்ற காரணத்தால் இந்தப் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
+ <string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"நிராகரி"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"கைரேகை சென்சாரைத் தொடவும்"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"கைரேகை ஐகான்"</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"உங்கள் முகத்தைத் தேடுகிறது…"</string>
@@ -723,17 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"ஒலியோ அதிர்வோ இல்லாமல் முழு கவனம் செலுத்த உதவும்."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"ஒலியோ அதிர்வோ ஏற்படுத்தி உங்கள் கவனத்தை ஈர்க்கும்."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"இந்த உள்ளடக்கத்திற்கான மிதக்கும் ஷார்ட்கட் மூலம் உங்கள் கவனத்தைப் பெற்றிருக்கும்."</string>
- <!-- no translation found for notification_channel_summary_priority (7415770044553264622) -->
- <skip />
- <!-- no translation found for notification_conversation_channel_all_bubble (5389290797101635297) -->
- <skip />
- <!-- no translation found for notification_conversation_channel_settings (2409977688430606835) -->
- <skip />
- <!-- no translation found for notification_priority_title (2079708866333537093) -->
- <skip />
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"உரையாடல் பிரிவின் மேற்பகுதியில் ஒரு குமிழாகக் காட்டப்படும்."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ஆப்ஸில் இருக்கும் அனைத்து உரையாடல்களும் இயல்பாகக் குமிழாகவே இருக்கும். <xliff:g id="APP_NAME_1">%2$s</xliff:g> ஆப்ஸில் நிர்வகிக்கலாம்."</string>
+ <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"அமைப்புகள்"</string>
+ <string name="notification_priority_title" msgid="2079708866333537093">"முன்னுரிமை"</string>
<string name="bubble_overflow_empty_title" msgid="3120029421991510842">"சமீபத்திய குமிழ்கள் இல்லை"</string>
- <!-- no translation found for bubble_overflow_empty_subtitle (2030874469510497397) -->
- <skip />
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"சமீபத்திய குமிழ்களும் நிராகரிக்கப்பட்ட குமிழ்களும் இங்கே தோன்றும்"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"இந்த அறிவிப்புகளை மாற்ற இயலாது."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"இந்த அறிவுப்புக் குழுக்களை இங்கே உள்ளமைக்க இயலாது"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"ப்ராக்ஸியான அறிவிப்பு"</string>
@@ -1013,77 +993,53 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"கீழே இடப்புறமாக நகர்த்து"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"கீழே வலதுபுறமாக நகர்த்து"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"மூடுக"</string>
- <!-- no translation found for bubbles_dont_bubble_conversation (1033040343437428822) -->
- <skip />
- <!-- no translation found for bubbles_user_education_title (5547017089271445797) -->
- <skip />
- <!-- no translation found for bubbles_user_education_description (1160281719576715211) -->
- <skip />
- <!-- no translation found for bubbles_user_education_manage_title (2848511858160342320) -->
- <skip />
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"உரையாடலைக் குமிழாக்காதே"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"குமிழ்களைப் பயன்படுத்தி அரட்டையடியுங்கள்"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"புதிய உரையாடல்கள் மிதக்கும் ஐகான்களாகவோ குமிழ்களாகவோ தோன்றும். குமிழைத் திறக்க தட்டவும். நகர்த்த இழுக்கவும்."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"குமிழ்களை எப்போது வேண்டுமானாலும் கட்டுப்படுத்தலாம்"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"இந்த ஆப்ஸிலிருந்து வரும் குமிழ்களை முடக்க, நிர்வகி என்பதைத் தட்டவும்"</string>
- <!-- no translation found for bubbles_user_education_got_it (8282812431953161143) -->
- <skip />
+ <string name="bubbles_user_education_got_it" msgid="8282812431953161143">"சரி"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"சிஸ்டம் நேவிகேஷன் மாற்றப்பட்டது. மாற்றங்களைச் செய்ய ‘அமைப்புகளுக்குச்’ செல்லவும்."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"சிஸ்டம் நேவிகேஷனை மாற்ற ’அமைப்புகளுக்குச்’ செல்லவும்"</string>
<string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"இயக்க நேரம்"</string>
<string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification Overlay Window"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"பெரிதாக்கல் சாளரம்"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"பெரிதாக்கல் சாளரக் கட்டுப்பாடுகள்"</string>
- <!-- no translation found for quick_controls_title (1686913115679255053) -->
- <skip />
- <!-- no translation found for quick_controls_subtitle (1667408093326318053) -->
- <skip />
- <!-- no translation found for quick_controls_setup_title (9079435969373471268) -->
- <skip />
- <!-- no translation found for quick_controls_setup_subtitle (1681506617879773824) -->
- <skip />
- <!-- no translation found for controls_providers_title (6879775889857085056) -->
- <skip />
+ <string name="quick_controls_title" msgid="6839108006171302273">"சாதனக் கட்டுப்பாடுகள்"</string>
+ <string name="quick_controls_subtitle" msgid="1667408093326318053">"இணைக்கப்பட்ட சாதனங்களில் கட்டுப்பாடுகளைச் சேர்க்கலாம்"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"சாதனக் கட்டுப்பாடுகளை அமைத்தல்"</string>
+ <string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"கட்டுப்பாடுகளை அணுக பவர் பட்டனை அழுத்திப் பிடித்திருக்கவும்"</string>
+ <string name="controls_providers_title" msgid="6879775889857085056">"கட்டுப்பாடுகளைச் சேர்க்க உதவும் ஆப்ஸைத் தேர்ந்தெடுங்கள்"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
<item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> கட்டுப்பாடுகள் சேர்க்கப்பட்டன.</item>
<item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> கட்டுப்பாடு சேர்க்கப்பட்டது.</item>
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"கட்டுப்பாடுகள்"</string>
- <!-- no translation found for controls_favorite_subtitle (6604402232298443956) -->
+ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"பவர் மெனுவில் இருந்து அணுகுவதற்கான கட்டுப்பாடுகளைத் தேர்ந்தெடுக்கலாம்"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
<skip />
- <!-- no translation found for controls_favorite_rearrange (7364147066539766260) -->
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
<skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"எல்லா கட்டுப்பாடுகளின் பட்டியலை ஏற்ற முடியவில்லை."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"பிற"</string>
- <!-- no translation found for controls_dialog_title (3475025327938684220) -->
- <skip />
+ <string name="controls_dialog_title" msgid="2343565267424406202">"சாதனக் கட்டுப்பாடுகளில் சேர்த்தல்"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"விருப்பமானவையில் சேர்"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"இந்தக் கட்டுப்பாட்டை உங்களுக்கு விருப்பமானவையில் சேர்க்கும்படி <xliff:g id="APP">%s</xliff:g> பரிந்துரைக்கிறார்."</string>
- <!-- no translation found for controls_dialog_confirmation (586517302736263447) -->
- <skip />
+ <string name="controls_dialog_confirmation" msgid="586517302736263447">"கட்டுப்பாடுகள் மாற்றப்பட்டன"</string>
<string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"பின்னில் எழுத்துகள் அல்லது குறிகள் உள்ளன"</string>
- <!-- no translation found for controls_pin_verify (3452778292918877662) -->
- <skip />
- <!-- no translation found for controls_pin_verifying (3755045989392131746) -->
- <skip />
+ <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ஐச் சரிபார்த்தல்"</string>
+ <string name="controls_pin_verifying" msgid="3755045989392131746">"சரிபார்க்கிறது…"</string>
<string name="controls_pin_instructions" msgid="6363309783822475238">"பின்னை உள்ளிடுக"</string>
- <!-- no translation found for controls_pin_instructions_retry (1566667581012131046) -->
- <skip />
- <!-- no translation found for controls_confirmation_confirming (2596071302617310665) -->
- <skip />
- <!-- no translation found for controls_confirmation_message (7744104992609594859) -->
- <skip />
- <!-- no translation found for controls_structure_tooltip (4355922222944447867) -->
- <skip />
+ <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"வேறு பின்னைப் பயன்படுத்தவும்"</string>
+ <string name="controls_confirmation_confirming" msgid="2596071302617310665">"உறுதிப்படுத்துகிறது…"</string>
+ <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> ஐ மாற்றுவதை உறுதிப்படுத்தவும்"</string>
+ <string name="controls_structure_tooltip" msgid="4355922222944447867">"மேலும் பார்க்க ஸ்வைப் செய்யவும்"</string>
<string name="controls_seeding_in_progress" msgid="3033855341410264148">"பரிந்துரைகளை ஏற்றுகிறது"</string>
- <!-- no translation found for controls_media_close_session (9023534788828414585) -->
- <skip />
- <!-- no translation found for controls_error_timeout (794197289772728958) -->
- <skip />
- <!-- no translation found for controls_error_failed (960228639198558525) -->
- <skip />
- <!-- no translation found for controls_in_progress (4421080500238215939) -->
- <skip />
- <!-- no translation found for controls_added_tooltip (4842812921719153085) -->
- <skip />
- <!-- no translation found for controls_menu_add (4447246119229920050) -->
- <skip />
- <!-- no translation found for controls_menu_edit (890623986951347062) -->
- <skip />
+ <string name="controls_media_close_session" msgid="9023534788828414585">"இந்த மீடியா அமர்வை மூடுக"</string>
+ <string name="controls_error_timeout" msgid="794197289772728958">"செயலில் இல்லை , சரிபார்க்கவும்"</string>
+ <string name="controls_error_failed" msgid="960228639198558525">"பிழை, மீண்டும் முயலவும்"</string>
+ <string name="controls_in_progress" msgid="4421080500238215939">"செயல்பாட்டிலுள்ளது"</string>
+ <string name="controls_added_tooltip" msgid="4842812921719153085">"புதிய கட்டுப்பாடுகளைப் பார்க்க பவர் பட்டனைப் பிடித்திருக்கவும்"</string>
+ <string name="controls_menu_add" msgid="4447246119229920050">"கட்டுப்பாடுகளைச் சேர்த்தல்"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"கட்டுப்பாடுகளை மாற்றுதல்"</string>
</resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 92162aeea3a2..2fd229d553f6 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -712,8 +712,8 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> నుండి అన్ని సంభాషణలు డిఫాల్ట్‌గా బబుల్‌గా ఉంటాయి. <xliff:g id="APP_NAME_1">%2$s</xliff:g>లో మేనేజ్ చేయండి"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"సెట్టింగ్‌లు"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ప్రాధాన్యత"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ఇటీవల బబుల్‌లు ఏవీ లేవు"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ఇటీవలి బబుల్‌లు, తీసివేసిన బబుల్‌లు ఇక్కడ కనిపిస్తాయి"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ఇటీవలి బబుల్స్ ఏవీ లేవు"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ఇటీవలి బబుల్స్, తీసివేసిన బబుల్స్ ఇక్కడ కనిపిస్తాయి"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ఈ నోటిఫికేషన్‌లను సవరించడం వీలుపడదు."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ఈ నోటిఫికేషన్‌ల సమూహాన్ని ఇక్కడ కాన్ఫిగర్ చేయలేము"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"ప్రాక్సీ చేయబడిన నోటిఫికేషన్"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"నిశ్శబ్దం చేయబడింది"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"అలర్ట్ చేయడం"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"బబుల్‌ను చూపించు"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"బబుల్‌ను తీసివేయి"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"బబుల్స్ తీసివేయి"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"హోమ్ స్క్రీన్‌కు జోడించు"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"నోటిఫికేషన్ నియంత్రణలు"</string>
@@ -798,7 +798,7 @@
<string name="keyboard_shortcut_group_applications" msgid="7386239431100651266">"అప్లికేషన్‌లు"</string>
<string name="keyboard_shortcut_group_applications_assist" msgid="771606231466098742">"సహాయకం"</string>
<string name="keyboard_shortcut_group_applications_browser" msgid="2776211137869809251">"బ్రౌజర్"</string>
- <string name="keyboard_shortcut_group_applications_contacts" msgid="2807268086386201060">"పరిచయాలు"</string>
+ <string name="keyboard_shortcut_group_applications_contacts" msgid="2807268086386201060">"కాంటాక్ట్‌లు"</string>
<string name="keyboard_shortcut_group_applications_email" msgid="7852376788894975192">"ఇమెయిల్"</string>
<string name="keyboard_shortcut_group_applications_sms" msgid="6912633831752843566">"SMS"</string>
<string name="keyboard_shortcut_group_applications_music" msgid="9032078456666204025">"సంగీతం"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"పరికర సేవలు"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"శీర్షిక లేదు"</string>
<string name="restart_button_description" msgid="6916116576177456480">"ఈ యాప్‌ను పునఃప్రారంభించేలా నొక్కి, ఆపై పూర్తి స్క్రీన్‌‍లోకి వెళ్లండి."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> బబుల్‌ల సెట్టింగ్‌లు"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> బబుల్స్ సెట్టింగ్‌లు"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"నిర్వహించండి"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g> నుండి <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> నుండి <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> మరియు మరో <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
@@ -994,10 +994,10 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"దిగవు కుడివైపునకు జరుపు"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"విస్మరించు"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"సంభాషణను బబుల్ చేయవద్దు"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"బబుల్‌లను ఉపయోగించి చాట్ చేయండి"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"కొత్త సంభాషణలు తేలియాడే చిహ్నాలుగా లేదా బబుల్‌లు లాగా కనిపిస్తాయి. బబుల్‌ని తెరవడానికి నొక్కండి. తరలించడానికి లాగండి."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"బబుల్‌లను ఎప్పుడైనా నియంత్రించండి"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ఈ యాప్ నుండి వచ్చే బబుల్‌లను ఆఫ్ చేయడానికి మేనేజ్ బటన్‌ను ట్యాప్ చేయండి"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"బబుల్స్‌ను ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"కొత్త సంభాషణలు తేలియాడే చిహ్నాలుగా లేదా బబుల్స్ లాగా కనిపిస్తాయి. బబుల్‌ని తెరవడానికి నొక్కండి. తరలించడానికి లాగండి."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"బబుల్స్‌ను ఎప్పుడైనా నియంత్రించండి"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"ఈ యాప్ నుండి వచ్చే బబుల్స్‌ను ఆఫ్ చేయడానికి మేనేజ్ బటన్‌ను ట్యాప్ చేయండి"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"అర్థమైంది"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"సిస్టమ్ నావిగేషన్ అప్‌డేట్ చేయబడింది. మార్పులు చేయడానికి, సెట్టింగ్‌లకు వెళ్లండి."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"సిస్టమ్ నావిగేషన్‌ను అప్‌డేట్ చేయడానికి సెట్టింగ్‌లకు వెళ్లండి"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"మాగ్నిఫికేషన్ ఓవర్‌లే విండో"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"మాగ్నిఫికేషన్ విండో"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"మాగ్నిఫికేషన్ నియంత్రణల విండో"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"త్వరిత నియంత్రణలు"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"పరికర నియంత్రణలు"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"మీ కనెక్ట్ అయిన పరికరాలకు నియంత్రణలను జోడించండి"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"త్వరిత నియంత్రణలను సెటప్ చేయండి"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"పరికర నియంత్రణలను సెటప్ చేయడం"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"మీ నియంత్రణలను యాక్సెస్ చేయడానికి పవర్ బటన్‌ను నొక్కి పట్టుకోండి"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"నియంత్రణలను యాడ్ చేయడానికి యాప్‌ను ఎంచుకోండి"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"నియంత్రణలు"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"పవర్ మెనూ నుండి యాక్సెస్ చేయడానికి నియంత్రణలను ఎంచుకోండి"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"తరలించడానికి నియంత్రణను పట్టుకొని, లాగండి"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"అన్ని నియంత్రణలు గల జాబితాను లోడ్ చేయలేకపోయాము."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ఇతరం"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"త్వరిత నియంత్రణలకు జోడించండి"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"పరికర నియంత్రణలకు జోడించడం"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"ఇష్టమైనవాటికి జోడించు"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"మీ ఇష్టమైనవాటికి జోడించడానికి <xliff:g id="APP">%s</xliff:g> ఈ కంట్రోల్‌ను సూచించింది."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"నియంత్రణలు అప్‌డేట్ అయ్యాయి"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 87bbec580555..1604d1555683 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"แอปหรือองค์กรของคุณไม่อนุญาตให้จับภาพหน้าจอ"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"ปิดภาพหน้าจอ"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"เปิดภาพหน้าจอ"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"โปรแกรมบันทึกหน้าจอ"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"โปรแกรมอัดหน้าจอ"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"การแจ้งเตือนต่อเนื่องสำหรับเซสชันการบันทึกหน้าจอ"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"เริ่มบันทึกเลยไหม"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"ขณะบันทึก ระบบ Android จะบันทึกข้อมูลที่ละเอียดอ่อนที่ปรากฏบนหน้าจอหรือเล่นในอุปกรณ์ได้ ซึ่งรวมถึงรหัสผ่าน ข้อมูลการชำระเงิน รูปภาพ ข้อความ และเสียง"</string>
@@ -961,7 +961,7 @@
<string name="qs_dnd_replace" msgid="7712119051407052689">"แทนที่"</string>
<string name="running_foreground_services_title" msgid="5137313173431186685">"แอปที่กำลังทำงานในเบื้องหลัง"</string>
<string name="running_foreground_services_msg" msgid="3009459259222695385">"แตะเพื่อดูรายละเอียดเกี่ยวกับแบตเตอรี่และปริมาณการใช้อินเทอร์เน็ต"</string>
- <string name="mobile_data_disable_title" msgid="5366476131671617790">"ปิดเน็ตมือถือไหม"</string>
+ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ปิดอินเทอร์เน็ตมือถือไหม"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"คุณจะใช้เน็ตมือถือหรืออินเทอร์เน็ตผ่าน <xliff:g id="CARRIER">%s</xliff:g> ไม่ได้ แต่จะใช้ผ่าน Wi-Fi ได้เท่านั้น"</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ผู้ให้บริการของคุณ"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"เนื่องจากแอปหนึ่งได้บดบังคำขอสิทธิ์ ระบบจึงไม่สามารถยืนยันคำตอบของคุณสำหรับการตั้งค่าได้"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"บริการของอุปกรณ์"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"ไม่มีชื่อ"</string>
<string name="restart_button_description" msgid="6916116576177456480">"แตะเพื่อรีสตาร์ทแอปนี้และแสดงแบบเต็มหน้าจอ"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"การตั้งค่าลูกโป่ง <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"การตั้งค่าบับเบิล <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"จัดการ"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> จาก <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> จาก <xliff:g id="APP_NAME">%2$s</xliff:g> และอีก <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> รายการ"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"หน้าต่างการขยายที่วางซ้อน"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"หน้าต่างการขยาย"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"การควบคุมหน้าต่างการขยาย"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"การควบคุมด่วน"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"การควบคุมอุปกรณ์"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"เพิ่มตัวควบคุมของอุปกรณ์ที่เชื่อมต่อ"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"ตั้งค่าการควบคุมด่วน"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"ตั้งค่าการควบคุมอุปกรณ์"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"กดปุ่มเปิด/ปิดค้างไว้เพื่อเข้าถึงการควบคุม"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"เลือกแอปเพื่อเพิ่มตัวควบคุม"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"การควบคุม"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"เลือกตัวควบคุมที่ต้องการให้เข้าถึงได้จากเมนูเปิด/ปิด"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"กดตัวควบคุมค้างไว้แล้วลากเพื่อย้ายที่"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"โหลดรายการตัวควบคุมทั้งหมดไม่ได้"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"อื่นๆ"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"เพิ่มไปยังตัวควบคุมด่วน"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"เพิ่มไปยังการควบคุมอุปกรณ์"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"เพิ่มในรายการโปรด"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> แนะนำให้เพิ่มการควบคุมนี้ในรายการโปรด"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"อัปเดตตัวควบคุมแล้ว"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 83e1d68d27f2..d5c20996e9ad 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Hindi pinahihintulutan ng app o ng iyong organisasyon ang pagkuha ng mga screenshot"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"I-dismiss ang screenshot"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Buksan ang screenshot"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Recorder ng Screen"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Kasalukuyang notification para sa session ng pag-record ng screen"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Simulang Mag-record?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Habang nagre-record, puwedeng ma-capture ng Android System ang anumang sensitibong impormasyong nakikita sa iyong screen o nagpe-play sa device mo. Kasama dito ang mga password, impormasyon sa pagbabayad, mga larawan, mensahe, at audio."</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Window ng Overlay sa Pag-magnify"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Window ng Pag-magnify"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Mga Kontrol sa Pag-magnify ng Window"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Mga mabilisang kontrol"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Mga kontrol ng device"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Magdagdag ng mga kontrol para sa iyong mga nakakonektang device"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Mag-set up ng mga mabilisang kontrol"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"I-set up ang mga kontrol ng device"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Pindutin nang matagal ang Power button para ma-access ang iyong mga kontrol"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Pumili ng app para magdagdag ng mga kontrol"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Mga Kontrol"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pumili ng mga kontrol na maa-access mula sa power menu"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Pindutin nang matagal at i-drag ang isang kontrol para ilipat ito"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Hindi ma-load ang listahan ng lahat ng control."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Iba pa"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Idagdag sa mabilisang kontrol"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Idagdag sa mga kontrol ng device"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Idagdag sa mga paborito"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"Iminungkahi ng <xliff:g id="APP">%s</xliff:g> ang kontrol na ito na idagdag sa iyong mga paborito."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Na-update na ang mga kontrol"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 2f46f8b19d61..5f5968ec635c 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -68,7 +68,7 @@
<string name="wifi_debugging_always" msgid="2968383799517975155">"Bu ağda her zaman izin ver"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"İzin ver"</string>
<string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Kablosuz hata ayıklamaya izin verilmiyor"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Bu cihazda geçerli olarak oturum açmış olan kullanıcı, kablosuz hata ayıklama özelliğini açamaz. Bu özelliği kullanmak için birincil kullanıcıya geçin."</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Bu cihazda şu anda oturum açmış olan kullanıcı, kablosuz hata ayıklama özelliğini açamaz. Bu özelliği kullanmak için birincil kullanıcıya geçin."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB bağlantı noktası devre dışı bırakıldı"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Cihazınızı sıvılardan veya tozlardan korumak için USB bağlantı noktası devre dışı bırakıldı ve aksesuarları algılamayacak.\n\nUSB bağlantı noktasını tekrar sorunsuz kullanabileceğiniz zaman bilgilendirileceksiniz."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"USB bağlantı noktası, şarj cihazlarını ve aksesuarları algılamak üzere etkinleştirildi"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Uygulama veya kuruluşunuz, ekran görüntüsü alınmasına izin vermiyor."</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Ekran görüntüsünü kapat"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Ekran görüntüsünü aç"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Ekran Kaydedici"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Ekran Kaydedicisi"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekran kaydı oturumu için devam eden bildirim"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Kayıt Başlatılsın mı?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Kayıt sırasında Android Sistemi, ekranınızda görünen veya cihazınızda oynatılan hassas bilgileri yakalayabilir. Buna şifreler, ödeme bilgileri, fotoğraflar, mesajlar ve sesler dahildir."</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Sesi kapatıldı"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Uyarı"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Balon olarak göster"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Balonları kaldır"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Baloncukları kaldır"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ana ekrana ekle"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"Bildirim kontrolleri"</string>
@@ -997,7 +997,7 @@
<string name="bubbles_user_education_title" msgid="5547017089271445797">"Baloncukları kullanarak sohbet edin"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Yeni görüşmeler kayan simgeler veya baloncuk olarak görünür. Açmak için baloncuğa dokunun. Baloncuğu taşımak için sürükleyin."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Baloncukları istediğiniz zaman kontrol edin"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Bu uygulamanın balonlarını kapatmak için Yönet\'e dokunun"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Bu uygulamanın baloncuklarını kapatmak için Yönet\'e dokunun"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Anladım"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Sistemde gezinme yöntemi güncellendi. Değişiklik yapmak için Ayarlar\'a gidin."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Sistemde gezinme yöntemini güncellemek için Ayarlar\'a gidin"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Yer Paylaşımlı Büyütme Penceresi"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Büyütme Penceresi"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Büyütme Penceresi Kontrolleri"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Hızlı denetimler"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Cihaz kontrolleri"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Bağlı cihazlarınız için denetimler ekleyin"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Hızlı denetimleri kurun"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Cihaz kontrollerini kur"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Denetimlerinize erişmek için Güç düğmesini basılı tutun"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Denetim eklemek için uygulama seçin"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Güç menüsünden erişmek için denetimleri seçin"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Bir denetimi taşımak için basılı tutup sürükleyin"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Kontrolleri yeniden düzenlemek için basılı tutup sürükleyin"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"Tüm kontroller kaldırıldı"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Tüm kontrollerin listesi yüklenemedi."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Diğer"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Hızlı denetimlere ekle"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Cihaz kontrollerine ekle"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Favorilere ekle"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g>, bu kontrolü favorilerinize eklemenizi önerdi."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Denetimler güncellendi"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 1a3cf65a51d9..15658f330327 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Дозволити"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Ви не можете вмикати налагодження USB"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Користувач поточного облікового запису не може вмикати налагодження USB. Щоб увімкнути цю функцію, увійдіть в обліковий запис основного користувача."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Дозволити бездротове налагодження в цій мережі?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Дозволити налагодження через Wi-Fi у цій мережі?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Ім\'я мережі (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nАдреса Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Завжди дозволяти в цій мережі"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Дозволити"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Бездротове налагодження заборонено"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Користувач поточного облікового запису не може вмикати бездротове налагодження. Щоб активувати цю функцію, увійдіть в обліковий запис основного користувача."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Налагодження через Wi-Fi заборонене"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Користувач поточного облікового запису не може вмикати налагодження через Wi-Fi. Щоб активувати цю функцію, увійдіть в обліковий запис основного користувача."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB-порт вимкнено"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Щоб захистити ваш пристрій від рідини та сміття, USB-порт вимкнено. Він не виявлятиме жодних аксесуарів.\n\nКоли USB-порт можна буде використовувати, ви отримаєте сповіщення."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Порт USB виявлятиме зарядні пристрої та аксесуари"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Додаток або адміністратор вашої організації не дозволяють робити знімки екрана"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Закрити знімок екрана"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Відкрити знімок екрана"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Засіб запису екрана"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Створення знімків екрана"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Сповіщення про сеанс запису екрана"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Почати запис?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Під час запису система Android може фіксувати будь-яку конфіденційну інформацію, яка з\'являється на екрані або відтворюється на пристрої, зокрема паролі, платіжну інформацію, фотографії, повідомлення та звуки."</string>
@@ -515,7 +515,7 @@
<string name="manage_notifications_history_text" msgid="57055985396576230">"Історія"</string>
<string name="notification_section_header_gentle" msgid="3044910806569985386">"Беззвучні сповіщення"</string>
<string name="notification_section_header_alerting" msgid="3168140660646863240">"Сповіщення зі звуком чи вібрацією"</string>
- <string name="notification_section_header_conversations" msgid="821834744538345661">"Чати"</string>
+ <string name="notification_section_header_conversations" msgid="821834744538345661">"Розмови"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Очистити всі беззвучні сповіщення"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"Режим \"Не турбувати\" призупинив сповіщення"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"Почати зараз"</string>
@@ -714,12 +714,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"Не відволікає увагу звуковим сигналом або вібрацією."</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"Привертає увагу звуковим сигналом або вібрацією."</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Привертає увагу до контенту плаваючим ярликом."</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"З\'являється вгорі розділу з чатами у вигляді спливаючого сповіщення."</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Усі чати з додатка <xliff:g id="APP_NAME_0">%1$s</xliff:g> за умовчанням з\'являються у вигляді спливаючих сповіщень. Керувати в додатку <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"З\'являється вгорі розділу з розмовами у вигляді спливаючого чату."</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Усі чати з додатка <xliff:g id="APP_NAME_0">%1$s</xliff:g> за умовчанням з\'являються у вигляді спливаючих сповіщень. Налаштувати їх можна в додатку <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Налаштування"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Пріоритет"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Немає нещодавніх спливаючих сповіщень"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Тут з\'являтимуться нещодавні й закриті спливаючі сповіщення"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Немає нещодавніх спливаючих чатів"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Тут з\'являтимуться нещодавні й закриті спливаючі чати"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Цю групу сповіщень не можна налаштувати тут"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"Проксі-сповіщення"</string>
@@ -747,7 +747,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"Сповіщення вимкнено"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"Увімкнути сповіщення"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"Показувати як спливаюче сповіщення"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Вимкнути спливаючі сповіщення"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Вимкнути спливаючі чати"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"Додати на головний екран"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"елементи керування сповіщеннями"</string>
@@ -993,8 +993,8 @@
<string name="device_services" msgid="1549944177856658705">"Сервіси на пристрої"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Без назви"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Натисніть, щоб перезапустити додаток і перейти в повноекранний режим."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Налаштування спливаючих підказок від додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="manage_bubbles_text" msgid="6856830436329494850">"Керувати"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"Налаштування спливаючих чатів від додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="manage_bubbles_text" msgid="6856830436329494850">"Налаштувати"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"Cповіщення \"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>\" від додатка <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"Сповіщення \"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>\" від додатка <xliff:g id="APP_NAME">%2$s</xliff:g> (і ще <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>)"</string>
<string name="bubble_accessibility_action_move" msgid="3185080443743819178">"Перемістити"</string>
@@ -1003,11 +1003,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Перемістити ліворуч униз"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Перемістити праворуч униз"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Закрити"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Заборонити спливаючі сповіщення в чатах"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Чат у вигляді спливаючих сповіщень"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"Нові повідомлення чату з\'являються у вигляді плаваючих значків або спливаючих сповіщень. Натисніть, щоб відкрити спливаюче сповіщення. Перетягніть його, щоб перемістити."</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Керуйте спливаючими сповіщеннями будь-коли"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Натисніть \"Керувати\", щоб вимкнути спливаючі сповіщення для цього додатка"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Не показувати спливаючі чати для розмов"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Чат зі спливаючими сповіщеннями"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"Нові повідомлення чату з\'являються у вигляді спливаючих значків. Щоб відкрити чат, натисніть його, а щоб перемістити – перетягніть."</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Налаштовуйте спливаючі чати будь-коли"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"Натисніть \"Налаштувати\", щоб вимкнути спливаючі чати від цього додатка"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"Зрозуміло"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Навігацію в системі оновлено. Щоб внести зміни, перейдіть у налаштування."</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Перейдіть у налаштування, щоб оновити навігацію в системі"</string>
@@ -1015,9 +1015,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Вікно збільшення з накладанням"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Вікно збільшення"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Елементи керування вікна збільшення"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Елементи швидкого керування"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Елементи керування пристроєм"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Додайте елементи керування для підключених пристроїв"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Налаштування елементів швидкого керування"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Налаштувати елементи керування пристроєм"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Щоб відкрити елементи керування, утримуйте кнопку живлення"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Виберіть, для якого додатка налаштувати елементи керування"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1028,10 +1028,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Елементи керування"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Виберіть, які елементи керування будуть у меню \"Живлення\""</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Щоб перемістити елемент керування, перетягніть його"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Не вдалося завантажити список усіх елементів керування."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Інше"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Додати в елем. швидк. керув."</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Додати до елементів керування пристроєм"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Додати у вибране"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> пропонує додати цей елемент керування у вибране."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Елементи керування оновлено"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 3cf00dd4390a..08a400f9ee89 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"میگنیفیکیشن اوورلے ونڈو"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"میگنیفکیشن ونڈو"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"میگنیفکیشن ونڈو کنٹرولز"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"فوری کنٹرولز"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"آلہ کے کنٹرولز"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"اپنے منسلک آلات کے لیے کنٹرولز شامل کریں"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"فوری کنٹرولز سیٹ اپ کریں"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"آلہ کے کنٹرولز سیٹ اپ کریں"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"اپنے کنٹرول تک رسائی حاصل کرنے کے ليے پاور بٹن کو دبائیں رکھیں"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"کنٹرولز شامل کرنے کے لیے ایپ منتخب کریں"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"کنٹرولز"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"پاور مینو سے رسائی حاصل کرنے کے لیے کنٹرولز کو منتخب کریں"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"اسے منتقل کرنے کے لیے کنٹرول کو پکڑیں اور گھسیٹیں"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"تمام کنٹرولز کی فہرست لوڈ نہیں کی جا سکی۔"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"دیگر"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"فوری کنٹرولز میں شامل کریں"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"آلہ کے کنٹرولز میں شامل کریں"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"پسندیدگیوں میں شامل کریں"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> نے آپ کی پسندیدگیوں میں شامل کرنے کے ليے یہ کنٹرول تجویز کیا۔"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"کنٹرولز اپ ڈیٹ کیے گئے"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index b88c874bfd82..de2656072cf9 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -63,12 +63,12 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"Ruxsat berish"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB orqali nosozliklarni tuzatishga ruxsat berilmagan"</string>
<string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Ayni paytda ushbu qurilmaga o‘z hisobi bilan kirgan foydalanuvchi USB orqali nosozliklarni aniqlash funksiyasini yoqa olmaydi. Bu funksiyadan foydalanish uchun asosiy foydalanuvchi profiliga o‘ting."</string>
- <string name="wifi_debugging_title" msgid="7300007687492186076">"Bu tarmoqdagi nosozliklar aniqlanishiga ruxsat berilsinmi?"</string>
+ <string name="wifi_debugging_title" msgid="7300007687492186076">"Bu tarmoqda Wi-Fi orqali debagging uchun ruxsat berilsinmi?"</string>
<string name="wifi_debugging_message" msgid="5461204211731802995">"Tarmoq nomi (SSID):\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi Manzil (BSSID):\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string>
<string name="wifi_debugging_always" msgid="2968383799517975155">"Bu tarmoqda doim ruxsat etilsin"</string>
<string name="wifi_debugging_allow" msgid="4573224609684957886">"Ruxsat"</string>
- <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Simsiz tarmoqdagi nosozliklar aniqlanishiga ruxsat berilmagan"</string>
- <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Ayni paytda ushbu qurilmaga oʻz hisobi bilan kirgan foydalanuvchi simsiz tarmoqdagi nosozliklarni aniqlanish funksiyasini yoqa olmaydi. Bu funksiyadan foydalanish uchun asosiy foydalanuvchi profiliga oʻting."</string>
+ <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Wi-Fi orqali debagging taqiqlandi"</string>
+ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Ayni paytda ushbu qurilmaga oʻz hisobi bilan kirgan foydalanuvchi Wi-Fi orqali debagging funksiyasini yoqa olmaydi. Bu funksiyadan foydalanish uchun asosiy foydalanuvchi profiliga oʻting."</string>
<string name="usb_contaminant_title" msgid="894052515034594113">"USB port faolsizlashtirildi"</string>
<string name="usb_contaminant_message" msgid="7730476585174719805">"Qurilmangizni suyuqlik va turli parchalardan himoya qilish uchun USB port faolsizlashtiriladi va hech qanday aksessuarni aniqlay olmaydi.\n\nUSB portdan xavfsiz foydalanish mumkin boʻlganda, sizga xabar beriladi."</string>
<string name="usb_port_enabled" msgid="531823867664717018">"Quvvatlash moslamalari va aksessuarlarni aniqlash uchun USB port yoqildi"</string>
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ilova yoki tashkilotingiz skrinshot olishni taqiqlagan"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"Skrinshotni yopish"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"Skrinshotni ochish"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"Ekranni yozib olish vositasi"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"Ekrandan yozib olish"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekrandan yozib olish seansi uchun joriy bildirishnoma"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Yozib olish boshlansinmi?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Yozib olishda Android tizimi ekraningizda koʻringan yoki qurilmangizda ijro etilgan maxfiy axborotni ham yozib olishi mumkin. Bunga parollar, toʻlovga oid axborot, suratlar, xabarlar va audio kiradi."</string>
@@ -712,7 +712,7 @@
<string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"Barcha <xliff:g id="APP_NAME_0">%1$s</xliff:g> xabarlari bulutcha shaklida chiqadi. Sozlamalarni <xliff:g id="APP_NAME_1">%2$s</xliff:g> orqali oʻzgartirish mumkin."</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Sozlamalar"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Muhimligi"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Avvalgi pufakchalar topilmadi"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Avvalgi bulutchalar topilmadi"</string>
<string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Bu yerda oxirgi va yopilgan bulutcha shaklidagi bildirishnomalar chiqadi"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirishnomalarni tahrirlash imkonsiz."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ushbu bildirishnomalar guruhi bu yerda sozlanmaydi"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"Qurilma xizmatlari"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Nomsiz"</string>
<string name="restart_button_description" msgid="6916116576177456480">"Bu ilovani qaytadan ishga tushirish va butun ekranga ochish uchun bosing."</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> pufakchalari uchun sozlamalar"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"<xliff:g id="APP_NAME">%1$s</xliff:g> bulutchalari uchun sozlamalar"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"Boshqarish"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>, <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"<xliff:g id="APP_NAME">%2$s</xliff:g> ilovasidan <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> va yana <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> ta bildirishnoma"</string>
@@ -994,7 +994,7 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Quyi oʻngga surish"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"Yopish"</string>
<string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"Suhbatlar bulutchalar shaklida chiqmasin"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"Bulutcha shaklidagi bildirishnomalar yordamida subhatlashish"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"Bulutchalar yordamida subhatlashish"</string>
<string name="bubbles_user_education_description" msgid="1160281719576715211">"Yangi xabarlar qalqib chiquvchi belgilar yoki bulutchalar kabi chiqadi. Xabarni ochish uchun bildirishnoma ustiga bosing. Xabarni qayta joylash uchun bildirishnomani suring."</string>
<string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"Bulutcha shaklidagi bildirishnomalarni sozlash"</string>
<string name="bubbles_user_education_manage" msgid="1391639189507036423">"Bu ilova bulutchalarini faolsizlantirish uchun Boshqarish tugmasini bosing"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Kattalashtirish oynasining ustidan ochilishi"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Kattalashtirish oynasi"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Kattalashtirish oynasi sozlamalari"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Tezkor sozlamalar"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Qurilma boshqaruv elementlari"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Ulangan qurilmalarga boshqaruv elementlarini kiriting"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Tezkor sozlamalarni sozlash"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Qurilma boshqaruv elementlarini sozlash"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Boshqaruv elementlariga kirish uchun oʻchirib-yoqish tugmasini bosib turing"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Boshqaruv elementlarini kiritish uchun ilovani tanlang"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,11 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Boshqaruv elementlari"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Quvvat tugmasi menyusida chiqadigan boshqaruv elementlarini tanlang"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Elementni surish uchun uni bosib turib, kerakli joyga suring"</string>
+ <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Boshqaruv elementlarini qayta tartiblash uchun ushlab torting"</string>
+ <string name="controls_favorite_removed" msgid="5276978408529217272">"Barcha boshqaruv elementlari olib tashlandi"</string>
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Boshqaruv elementlarining barchasi yuklanmadi."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Boshqa"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Tezkor sozlamalarga kiriting"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Qurilma boshqaruv elementlariga kiritish"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Saralanganlarga kiritish"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> ilovasi bu sozlamani saralanganlarga kiritishni taklif qildi."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Boshqaruv elementlari yangilandi"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 957bbd676367..b12ea2ff6df2 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -151,7 +151,7 @@
<string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Dùng hình mở khóa"</string>
<string name="biometric_dialog_use_password" msgid="3445033859393474779">"Dùng mật khẩu"</string>
<string name="biometric_dialog_wrong_pin" msgid="1878539073972762803">"Mã PIN sai"</string>
- <string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"Hình mở khóa sai"</string>
+ <string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"Hình mở khóa không chính xác"</string>
<string name="biometric_dialog_wrong_password" msgid="69477929306843790">"Mật khẩu sai"</string>
<string name="biometric_dialog_credential_too_many_attempts" msgid="3083141271737748716">"Bạn đã nhập sai quá nhiều lần.\nHãy thử lại sau <xliff:g id="NUMBER">%d</xliff:g> giây."</string>
<string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"Thử lại. Lần thử <xliff:g id="ATTEMPTS_0">%1$d</xliff:g>/<xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g>."</string>
@@ -232,7 +232,7 @@
<string name="cell_data_off_content_description" msgid="9165555931499878044">"Đã tắt dữ liệu di động"</string>
<string name="not_default_data_content_description" msgid="6757881730711522517">"Chưa được đặt để sử dụng dữ liệu"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Tắt"</string>
- <string name="accessibility_bluetooth_tether" msgid="6327291292208790599">"Chia sẻ kết nối Internet qua Bluetooth"</string>
+ <string name="accessibility_bluetooth_tether" msgid="6327291292208790599">"Chia sẻ Internet qua Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="1899529214045998505">"Chế độ trên máy bay."</string>
<string name="accessibility_vpn_on" msgid="8037549696057288731">"VPN đang bật."</string>
<string name="accessibility_no_sims" msgid="5711270400476534667">"Không có thẻ SIM nào."</string>
@@ -394,7 +394,7 @@
<string name="quick_settings_connected" msgid="3873605509184830379">"Đã kết nối"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Đã kết nối, mức pin <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Đang kết nối..."</string>
- <string name="quick_settings_tethering_label" msgid="5257299852322475780">"Đang dùng làm điểm truy cập Internet"</string>
+ <string name="quick_settings_tethering_label" msgid="5257299852322475780">"Chia sẻ Internet"</string>
<string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Điểm phát sóng"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Đang bật…"</string>
<string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Trình tiết kiệm dữ liệu đang bật"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Cửa sổ lớp phủ phóng to"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Cửa sổ phóng to"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Các tùy chọn điều khiển cửa sổ phóng to"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Tùy chọn điều khiển nhanh"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Điều khiển thiết bị"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Thêm các tùy chọn điều khiển cho các thiết bị đã kết nối của bạn"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Thiết lập các tùy chọn điều khiển nhanh"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Thiết lập các tùy chọn điều khiển thiết bị"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Giữ nút Nguồn để truy cập vào các tùy chọn điều khiển"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Chọn ứng dụng để thêm các tùy chọn điều khiển"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Các tùy chọn điều khiển"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Chọn các tùy chọn điều khiển để truy cập từ trình đơn nguồn"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Giữ và kéo một tùy chọn điều khiển để di chuyển tùy chọn đó"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Không thể tải danh sách tất cả tùy chọn điều khiển."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Khác"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Thêm vào mục điều khiển nhanh"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Thêm vào mục điều khiển thiết bị"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Thêm vào mục yêu thích"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g> đã đề xuất thêm tùy chọn điều khiển này vào mục yêu thích của bạn."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Đã cập nhật các tùy chọn điều khiển"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 791fe8dd74b2..b3c513d9c90e 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -582,7 +582,7 @@
<string name="accessibility_volume_settings" msgid="1458961116951564784">"声音设置"</string>
<string name="accessibility_volume_expand" msgid="7653070939304433603">"展开"</string>
<string name="accessibility_volume_collapse" msgid="2746845391013829996">"收起"</string>
- <string name="volume_odi_captions_tip" msgid="8825655463280990941">"自动字幕媒体"</string>
+ <string name="volume_odi_captions_tip" msgid="8825655463280990941">"自动生成媒体字幕"</string>
<string name="accessibility_volume_close_odi_captions_tip" msgid="8924753283621160480">"关闭字幕提示"</string>
<string name="volume_odi_captions_content_description" msgid="4172765742046013630">"字幕重叠显示"</string>
<string name="volume_odi_captions_hint_enable" msgid="2073091194012843195">"启用"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"放大叠加窗口"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"放大窗口"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"放大窗口控件"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"快捷控件"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"设备控件"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"为您所连接的设备添加控件"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"设置快捷控件"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"设置设备控件"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"按住电源按钮即可访问您的控件"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"选择应用以添加控件"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"控件"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"选择要从电源菜单访问的控件"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"按住并拖动即可移动控件"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"无法加载所有控件的列表。"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"添加到快捷控件"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"添加到设备控件"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"添加到收藏夹"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"<xliff:g id="APP">%s</xliff:g>建议将此控件添加到您的收藏夹。"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"控件已更新"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index d6a8546b2386..69a8da6dfe9a 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"放大重疊視窗"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"放大視窗"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"放大視窗控制項"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"快速控制項"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"裝置控制項"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"為已連接的裝置新增控制項"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"設定快速控制項"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"設定裝置控制項"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"按住「開關」按鈕便可存取控制項"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"選擇應用程式以新增控制項"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"從電源選單選擇要存取的控制項"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"按住並拖曳控制項即可移動"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"無法載入完整控制項清單。"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"加入至快速控制介面"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"加到裝置控制項"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"加入至常用項目"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"「<xliff:g id="APP">%s</xliff:g>」建議將此控制項加入至常用項目。"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"已更新控制項"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index c1f668d2bc91..4ea11d786fba 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -88,7 +88,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"這個應用程式或貴機構不允許擷取螢幕畫面"</string>
<string name="screenshot_dismiss_ui_description" msgid="934736855340147968">"關閉螢幕截圖"</string>
<string name="screenshot_preview_description" msgid="669177537416980449">"開啟螢幕截圖"</string>
- <string name="screenrecord_name" msgid="2596401223859996572">"螢幕畫面錄製工具"</string>
+ <string name="screenrecord_name" msgid="2596401223859996572">"螢幕錄影器"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"持續顯示螢幕畫面錄製工作階段通知"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"要開始錄製嗎?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"錄製螢幕畫面時,Android 系統可擷取螢幕上顯示或裝置播放的任何機密資訊,包括密碼、付款資訊、相片、訊息和音訊。"</string>
@@ -708,12 +708,12 @@
<string name="notification_channel_summary_low" msgid="7300447764759926720">"協助你不受音效或震動干擾。"</string>
<string name="notification_channel_summary_default" msgid="3539949463907902037">"發出音效或震動吸引你的注意力。"</string>
<string name="notification_channel_summary_bubble" msgid="7235935211580860537">"利用浮動式捷徑快速存取這項內容。"</string>
- <string name="notification_channel_summary_priority" msgid="7415770044553264622">"以泡泡形式顯示在對話部分的頂端。"</string>
- <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」的所有對話預設會以泡泡形式顯示。你可以在「<xliff:g id="APP_NAME_1">%2$s</xliff:g>」中調整相關設定。"</string>
+ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"以對話框形式顯示在對話部分的頂端。"</string>
+ <string name="notification_conversation_channel_all_bubble" msgid="5389290797101635297">"「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」的所有對話預設會以對話框形式顯示。你可以在「<xliff:g id="APP_NAME_1">%2$s</xliff:g>」中調整相關設定。"</string>
<string name="notification_conversation_channel_settings" msgid="2409977688430606835">"設定"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"優先"</string>
- <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近沒有任何泡泡"</string>
- <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近的泡泡和已關閉的泡泡會顯示在這裡"</string>
+ <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近沒有任何對話框"</string>
+ <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近的對話框和已關閉的對話框會顯示在這裡"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"無法在這裡設定這個通知群組"</string>
<string name="notification_delegate_header" msgid="1264510071031479920">"經過 Proxy 處理的通知"</string>
@@ -741,7 +741,7 @@
<string name="notification_conversation_mute" msgid="268951550222925548">"已設為靜音"</string>
<string name="notification_conversation_unmute" msgid="2692255619510896710">"解除略過"</string>
<string name="notification_conversation_bubble" msgid="2242180995373949022">"以泡泡形式顯示"</string>
- <string name="notification_conversation_unbubble" msgid="6908427185031099868">"移除泡泡"</string>
+ <string name="notification_conversation_unbubble" msgid="6908427185031099868">"移除對話框"</string>
<string name="notification_conversation_home_screen" msgid="8347136037958438935">"新增至主螢幕"</string>
<string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="6429668976593634862">"通知控制項"</string>
@@ -983,7 +983,7 @@
<string name="device_services" msgid="1549944177856658705">"裝置服務"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"無標題"</string>
<string name="restart_button_description" msgid="6916116576177456480">"輕觸即可重新啟動這個應用程式並進入全螢幕模式。"</string>
- <string name="bubbles_settings_button_description" msgid="7324245408859877545">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」泡泡的設定"</string>
+ <string name="bubbles_settings_button_description" msgid="7324245408859877545">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」對話框的設定"</string>
<string name="manage_bubbles_text" msgid="6856830436329494850">"管理"</string>
<string name="bubble_content_description_single" msgid="5175160674436546329">"<xliff:g id="APP_NAME">%2$s</xliff:g>:<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="7907610717462651870">"「<xliff:g id="APP_NAME">%2$s</xliff:g>」和其他 <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> 個應用程式:<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
@@ -993,11 +993,11 @@
<string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"移至左下方"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"移至右下方"</string>
<string name="bubble_dismiss_text" msgid="7071770411580452911">"關閉"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"不要以泡泡形式顯示對話"</string>
- <string name="bubbles_user_education_title" msgid="5547017089271445797">"使用泡泡進行即時通訊"</string>
- <string name="bubbles_user_education_description" msgid="1160281719576715211">"新的對話會以浮動圖示或泡泡形式顯示。輕觸即可開啟泡泡,拖曳則可移動泡泡。"</string>
- <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"你隨時可以控管泡泡的各項設定"</string>
- <string name="bubbles_user_education_manage" msgid="1391639189507036423">"輕觸 [管理] 即可關閉來自這個應用程式的泡泡"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="1033040343437428822">"不要以對話框形式顯示對話"</string>
+ <string name="bubbles_user_education_title" msgid="5547017089271445797">"使用對話框進行即時通訊"</string>
+ <string name="bubbles_user_education_description" msgid="1160281719576715211">"新的對話會以浮動圖示或對話框形式顯示。輕觸即可開啟對話框,拖曳則可移動對話框。"</string>
+ <string name="bubbles_user_education_manage_title" msgid="2848511858160342320">"你隨時可以控管對話框的各項設定"</string>
+ <string name="bubbles_user_education_manage" msgid="1391639189507036423">"輕觸 [管理] 即可關閉來自這個應用程式的對話框"</string>
<string name="bubbles_user_education_got_it" msgid="8282812431953161143">"我知道了"</string>
<string name="notification_content_system_nav_changed" msgid="5077913144844684544">"系統操作機制已更新。如要進行變更,請前往「設定」。"</string>
<string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"請前往「設定」更新系統操作機制"</string>
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"放大重疊視窗"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"放大視窗"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"放大視窗控制項"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"快速控制項"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"裝置控制項"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"新增已連結裝置的控制項"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"設定快速控制項"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"設定裝置控制項"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"按住電源按鈕即可存取控制項"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"選擇應用程式以新增控制項"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"選擇要從電源選單存取的控制項"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"按住並拖曳即可移動控制項"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"無法載入完整的控制項清單。"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"新增至快速控制項"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"新增至裝置控制項"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"新增至常用控制項"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"「<xliff:g id="APP">%s</xliff:g>」建議你將這個控制項新增至常用控制項。"</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"已更新控制項"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index b5fd68deaa94..6d455df22a44 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -1005,9 +1005,9 @@
<string name="magnification_overlay_title" msgid="6584179429612427958">"Iwindi Lembondela Lesikhulisi"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Iwindi Lesikhulisi"</string>
<string name="magnification_controls_title" msgid="8421106606708891519">"Izilawuli Zewindi Lesikhulisi"</string>
- <string name="quick_controls_title" msgid="1686913115679255053">"Izilawuli ezisheshayo"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Izilawuli zedivayisi"</string>
<string name="quick_controls_subtitle" msgid="1667408093326318053">"Engeza izilawuli zedivayisi yakho exhunyiwe"</string>
- <string name="quick_controls_setup_title" msgid="9079435969373471268">"Setha izilawuli ezisheshayo"</string>
+ <string name="quick_controls_setup_title" msgid="8901436655997849822">"Setha izilawuli zedivayisi"</string>
<string name="quick_controls_setup_subtitle" msgid="1681506617879773824">"Bamba inkinobho yamandla ukufinyelela kwizilawuli"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Khetha uhlelo lokusebenza ukwengeza izilawuli"</string>
<plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
@@ -1016,10 +1016,13 @@
</plurals>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Izilawuli"</string>
<string name="controls_favorite_subtitle" msgid="6604402232298443956">"Khetha izilawuli ukuze ufinyelele kusuka kumenyu yamandla"</string>
- <string name="controls_favorite_rearrange" msgid="7364147066539766260">"Bamba futhi uhudule isilawuli ukuze usihambise"</string>
+ <!-- no translation found for controls_favorite_rearrange (5616952398043063519) -->
+ <skip />
+ <!-- no translation found for controls_favorite_removed (5276978408529217272) -->
+ <skip />
<string name="controls_favorite_load_error" msgid="2533215155804455348">"Uhlu lwazo zonke izilawuli alilayishekanga."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Okunye"</string>
- <string name="controls_dialog_title" msgid="3475025327938684220">"Engeza kuzilawuli ezisheshayo"</string>
+ <string name="controls_dialog_title" msgid="2343565267424406202">"Engeza kuzilawuli zedivayisi"</string>
<string name="controls_dialog_ok" msgid="7011816381344485651">"Engeza kuzintandokazi"</string>
<string name="controls_dialog_message" msgid="6292099631702047540">"I-<xliff:g id="APP">%s</xliff:g> iphakamise lokhu kulawula ukwengeza kuzintandokazi zakho."</string>
<string name="controls_dialog_confirmation" msgid="586517302736263447">"Izilawuli zibuyekeziwe"</string>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 2a4d5ef921f7..e7ef8ccf4eba 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -16,6 +16,9 @@
*/
-->
<resources>
+ <!-- Recommended minimum clickable element dimension -->
+ <dimen name="min_clickable_item_size">48dp</dimen>
+
<!-- Amount to offset bottom of notification peek window from top of status bar. -->
<dimen name="peek_window_y_offset">-12dp</dimen>
diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp
index fe6e44b5de0a..592f6c2a0dff 100644
--- a/packages/SystemUI/shared/Android.bp
+++ b/packages/SystemUI/shared/Android.bp
@@ -36,7 +36,6 @@ android_library {
static_libs: [
"PluginCoreLib",
- "SystemUI-statsd",
],
// Enforce that the library is built against java 7 so that there are
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index 03ccc1c91487..6a90d00c1e75 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -114,6 +114,11 @@ public interface KeyguardViewController {
void keyguardGoingAway();
/**
+ * Sets the system state depending on whether the keyguard is going away or not.
+ */
+ void setKeyguardGoingAwayState(boolean isKeyguardGoingAway);
+
+ /**
* @return Whether window animation for unlock should be disabled.
*/
boolean shouldDisableWindowAnimationsForUnlock();
diff --git a/packages/SystemUI/src/com/android/systemui/Interpolators.java b/packages/SystemUI/src/com/android/systemui/Interpolators.java
index 13d6a9bef266..6923079dd5c4 100644
--- a/packages/SystemUI/src/com/android/systemui/Interpolators.java
+++ b/packages/SystemUI/src/com/android/systemui/Interpolators.java
@@ -49,8 +49,6 @@ public class Interpolators {
public static final Interpolator CUSTOM_40_40 = new PathInterpolator(0.4f, 0f, 0.6f, 1f);
public static final Interpolator HEADS_UP_APPEAR = new HeadsUpAppearInterpolator();
public static final Interpolator ICON_OVERSHOT = new PathInterpolator(0.4f, 0f, 0.2f, 1.4f);
- public static final Interpolator SHADE_ANIMATION =
- new PathInterpolator(0.6f, 0.02f, 0.4f, 0.98f);
public static final Interpolator ICON_OVERSHOT_LESS
= new PathInterpolator(0.4f, 0f, 0.2f, 1.1f);
public static final Interpolator PANEL_CLOSE_ACCELERATED
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index 669a86b8a742..da5c2968c6ac 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -17,6 +17,8 @@
package com.android.systemui.bubbles;
import static android.app.Notification.FLAG_BUBBLE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL_ALL;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;
@@ -30,7 +32,6 @@ import static android.view.View.VISIBLE;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static com.android.systemui.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER;
-import static com.android.systemui.bubbles.BubbleDebugConfig.DEBUG_EXPERIMENTS;
import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
@@ -43,6 +44,9 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.UserIdInt;
import android.app.ActivityManager.RunningTaskInfo;
+import android.app.INotificationManager;
+import android.app.Notification;
+import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
@@ -83,6 +87,7 @@ import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationRemoveInterceptor;
+import com.android.systemui.statusbar.notification.NotificationChannelHelper;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
@@ -169,6 +174,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
private final NotificationShadeWindowController mNotificationShadeWindowController;
private final ZenModeController mZenModeController;
private StatusBarStateListener mStatusBarStateListener;
+ private INotificationManager mINotificationManager;
// Callback that updates BubbleOverflowActivity on data change.
@Nullable private Runnable mOverflowCallback = null;
@@ -293,11 +299,13 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
FeatureFlags featureFlags,
DumpManager dumpManager,
FloatingContentCoordinator floatingContentCoordinator,
- SysUiState sysUiState) {
+ SysUiState sysUiState,
+ INotificationManager notificationManager) {
this(context, notificationShadeWindowController, statusBarStateController, shadeController,
data, null /* synchronizer */, configurationController, interruptionStateProvider,
zenModeController, notifUserManager, groupManager, entryManager,
- notifPipeline, featureFlags, dumpManager, floatingContentCoordinator, sysUiState);
+ notifPipeline, featureFlags, dumpManager, floatingContentCoordinator, sysUiState,
+ notificationManager);
}
/**
@@ -319,7 +327,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
FeatureFlags featureFlags,
DumpManager dumpManager,
FloatingContentCoordinator floatingContentCoordinator,
- SysUiState sysUiState) {
+ SysUiState sysUiState,
+ INotificationManager notificationManager) {
dumpManager.registerDumpable(TAG, this);
mContext = context;
mShadeController = shadeController;
@@ -327,6 +336,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
mNotifUserManager = notifUserManager;
mZenModeController = zenModeController;
mFloatingContentCoordinator = floatingContentCoordinator;
+ mINotificationManager = notificationManager;
mZenModeController.addCallback(new ZenModeController.Callback() {
@Override
public void onZenChanged(int zen) {
@@ -809,37 +819,43 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
* This method will collapse the shade, create the bubble without a flyout or dot, and suppress
* the notification from appearing in the shade.
*
- * @param entry the notification to show as a bubble.
+ * @param entry the notification to change bubble state for.
+ * @param shouldBubble whether the notification should show as a bubble or not.
*/
- public void onUserCreatedBubbleFromNotification(NotificationEntry entry) {
- if (DEBUG_EXPERIMENTS || DEBUG_BUBBLE_CONTROLLER) {
- Log.d(TAG, "onUserCreatedBubble: " + entry.getKey());
+ public void onUserChangedBubble(NotificationEntry entry, boolean shouldBubble) {
+ NotificationChannel channel = entry.getChannel();
+ final String appPkg = entry.getSbn().getPackageName();
+ final int appUid = entry.getSbn().getUid();
+ if (channel == null || appPkg == null) {
+ return;
}
- mShadeController.collapsePanel(true);
- entry.setFlagBubble(true);
- updateBubble(entry, true /* suppressFlyout */, false /* showInShade */);
- mUserCreatedBubbles.add(entry.getKey());
- mUserBlockedBubbles.remove(entry.getKey());
- }
- /**
- * Called when a user has indicated that an active notification appearing as a bubble should
- * no longer be shown as a bubble.
- *
- * @param entry the notification to no longer show as a bubble.
- */
- public void onUserDemotedBubbleFromNotification(NotificationEntry entry) {
- if (DEBUG_EXPERIMENTS || DEBUG_BUBBLE_CONTROLLER) {
- Log.d(TAG, "onUserDemotedBubble: " + entry.getKey());
+ // Update the state in NotificationManagerService
+ try {
+ int flags = Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION;
+ mBarService.onNotificationBubbleChanged(entry.getKey(), shouldBubble, flags);
+ } catch (RemoteException e) {
}
- entry.setFlagBubble(false);
- removeBubble(entry, DISMISS_BLOCKED);
- mUserCreatedBubbles.remove(entry.getKey());
- if (BubbleExperimentConfig.isPackageWhitelistedToAutoBubble(
- mContext, entry.getSbn().getPackageName())) {
- // This package is whitelist but user demoted the bubble, let's save it so we don't
- // auto-bubble for the whitelist again.
- mUserBlockedBubbles.add(entry.getKey());
+
+ // Change the settings
+ channel = NotificationChannelHelper.createConversationChannelIfNeeded(mContext,
+ mINotificationManager, entry, channel);
+ channel.setAllowBubbles(shouldBubble);
+ try {
+ int currentPref = mINotificationManager.getBubblePreferenceForPackage(appPkg, appUid);
+ if (shouldBubble && currentPref == BUBBLE_PREFERENCE_NONE) {
+ mINotificationManager.setBubblesAllowed(appPkg, appUid, BUBBLE_PREFERENCE_SELECTED);
+ }
+ mINotificationManager.updateNotificationChannelForPackage(appPkg, appUid, channel);
+ } catch (RemoteException e) {
+ Log.e(TAG, e.getMessage());
+ }
+
+ if (shouldBubble) {
+ mShadeController.collapsePanel(true);
+ if (entry.getRow() != null) {
+ entry.getRow().updateBubbleButton();
+ }
}
}
@@ -987,14 +1003,15 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
} else {
// Update the flag for SysUI
bubble.getEntry().getSbn().getNotification().flags &= ~FLAG_BUBBLE;
+ if (bubble.getEntry().getRow() != null) {
+ bubble.getEntry().getRow().updateBubbleButton();
+ }
- // Make sure NoMan knows it's not a bubble anymore so anyone querying it
- // will get right result back
+ // Update the state in NotificationManagerService
try {
mBarService.onNotificationBubbleChanged(bubble.getKey(),
- false /* isBubble */);
+ false /* isBubble */, 0 /* flags */);
} catch (RemoteException e) {
- // Bad things have happened
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java
index 4c149ddd3939..a1393cddc9f6 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java
@@ -120,6 +120,7 @@ public class BubbleData {
/** Bubbles that are being loaded but haven't been added to the stack just yet. */
private final List<Bubble> mPendingBubbles;
private Bubble mSelectedBubble;
+ private boolean mShowingOverflow;
private boolean mExpanded;
private final int mMaxBubbles;
private final int mMaxOverflowBubbles;
@@ -215,6 +216,10 @@ public class BubbleData {
dispatchPendingChanges();
}
+ void setShowingOverflow(boolean showingOverflow) {
+ mShowingOverflow = showingOverflow;
+ }
+
private void moveOverflowBubbleToPending(Bubble b) {
// Preserve new order for next repack, which sorts by last updated time.
b.markUpdatedAt(mTimeSource.currentTimeMillis());
@@ -513,9 +518,11 @@ public class BubbleData {
if (DEBUG_BUBBLE_DATA) {
Log.d(TAG, "setSelectedBubbleInternal: " + bubble);
}
- if (Objects.equals(bubble, mSelectedBubble)) {
+ if (!mShowingOverflow && Objects.equals(bubble, mSelectedBubble)) {
return;
}
+ // Otherwise, if we are showing the overflow menu, return to the previously selected bubble.
+
if (bubble != null && !mBubbles.contains(bubble) && !mOverflowBubbles.contains(bubble)) {
Log.e(TAG, "Cannot select bubble which doesn't exist!"
+ " (" + bubble + ") bubbles=" + mBubbles);
@@ -559,6 +566,10 @@ public class BubbleData {
mStateChange.orderChanged |= repackAll();
// Save the state which should be returned to when expanded (with no other changes)
+ if (mShowingOverflow) {
+ // Show previously selected bubble instead of overflow menu on next expansion.
+ setSelectedBubbleInternal(mSelectedBubble);
+ }
if (mBubbles.indexOf(mSelectedBubble) > 0) {
// Move the selected bubble to the top while collapsed.
if (!mSelectedBubble.isOngoing() && mBubbles.get(0).isOngoing()) {
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 71dbbbc9da50..1cabe221bef1 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -442,8 +442,8 @@ public class BubbleStackView extends FrameLayout {
// that means overflow was previously expanded. Set the selected bubble
// internally without going through BubbleData (which would ignore it since it's
// already selected).
+ mBubbleData.setShowingOverflow(true);
setSelectedBubble(clickedBubble);
-
}
} else {
// Otherwise, we either tapped the stack (which means we're collapsed
@@ -1232,8 +1232,12 @@ public class BubbleStackView extends FrameLayout {
if (mExpandedBubble != null && mExpandedBubble.equals(bubbleToSelect)) {
return;
}
+ if (bubbleToSelect == null || bubbleToSelect.getKey() != BubbleOverflow.KEY) {
+ mBubbleData.setShowingOverflow(false);
+ }
final BubbleViewProvider previouslySelected = mExpandedBubble;
mExpandedBubble = bubbleToSelect;
+ updatePointerPosition();
if (mIsExpanded) {
// Make the container of the expanded view transparent before removing the expanded view
@@ -1243,7 +1247,6 @@ public class BubbleStackView extends FrameLayout {
mSurfaceSynchronizer.syncSurfaceAndRun(() -> {
previouslySelected.setContentVisibility(false);
updateExpandedBubble();
- updatePointerPosition();
requestUpdate();
logBubbleEvent(previouslySelected,
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java b/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java
index e84e932c9e61..72d646e0554d 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java
@@ -16,6 +16,7 @@
package com.android.systemui.bubbles.dagger;
+import android.app.INotificationManager;
import android.content.Context;
import com.android.systemui.bubbles.BubbleController;
@@ -64,14 +65,15 @@ public interface BubbleModule {
FeatureFlags featureFlags,
DumpManager dumpManager,
FloatingContentCoordinator floatingContentCoordinator,
- SysUiState sysUiState) {
+ SysUiState sysUiState,
+ INotificationManager notifManager) {
return new BubbleController(
context,
notificationShadeWindowController,
statusBarStateController,
shadeController,
data,
- /* synchronizer */null,
+ null /* synchronizer */,
configurationController,
interruptionStateProvider,
zenModeController,
@@ -82,6 +84,7 @@ public interface BubbleModule {
featureFlags,
dumpManager,
floatingContentCoordinator,
- sysUiState);
+ sysUiState,
+ notifManager);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt
index 607934c3bae7..03ca3931e68c 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt
@@ -81,7 +81,7 @@ class ControlAdapter(
}
TYPE_DIVIDER -> {
DividerHolder(layoutInflater.inflate(
- R.layout.controls_horizontal_divider_withEmpty, parent, false))
+ R.layout.controls_horizontal_divider_with_empty, parent, false))
}
else -> throw IllegalStateException("Wrong viewType: $viewType")
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 3f095dc0510e..4db5374cd566 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -1638,7 +1638,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private static final int MESSAGE_REFRESH = 1;
private static final int MESSAGE_SHOW = 2;
private static final int DIALOG_DISMISS_DELAY = 300; // ms
- private static final int DIALOG_PRESS_DELAY = 500; // ms
+ private static final int DIALOG_PRESS_DELAY = 850; // ms
@VisibleForTesting void setZeroDialogPressDelayForTesting() {
mDialogPressDelay = 0; // ms
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 226ac16cf1f2..1012a5213a58 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -96,7 +96,6 @@ import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.NavigationModeController;
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.InjectionInflationController;
@@ -216,7 +215,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
private AlarmManager mAlarmManager;
private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
- private final NotificationShadeWindowController mNotificationShadeWindowController;
private final Executor mUiBgExecutor;
private boolean mSystemReady;
@@ -628,7 +626,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
@Override
public void keyguardGone() {
Trace.beginSection("KeyguardViewMediator.mViewMediatorCallback#keyguardGone");
- mNotificationShadeWindowController.setKeyguardGoingAway(false);
+ mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(false);
mKeyguardDisplayManager.hide();
Trace.endSection();
}
@@ -717,7 +715,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
FalsingManager falsingManager,
LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
- NotificationShadeWindowController notificationShadeWindowController,
Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy,
DismissCallbackRegistry dismissCallbackRegistry,
KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager,
@@ -729,7 +726,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
mFalsingManager = falsingManager;
mLockPatternUtils = lockPatternUtils;
mBroadcastDispatcher = broadcastDispatcher;
- mNotificationShadeWindowController = notificationShadeWindowController;
mKeyguardViewControllerLazy = statusBarKeyguardViewManagerLazy;
mDismissCallbackRegistry = dismissCallbackRegistry;
mUiBgExecutor = uiBgExecutor;
@@ -877,7 +873,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
mGoingToSleep = true;
// Reset keyguard going away state so we can start listening for fingerprint. We
- // explicitly DO NOT want to call mStatusBarWindowController.setKeyguardGoingAway(false)
+ // explicitly DO NOT want to call
+ // mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(false)
// here, since that will mess with the device lock state.
mUpdateMonitor.setKeyguardGoingAway(false);
@@ -1861,7 +1858,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
adjustStatusBarLocked();
userActivity();
mUpdateMonitor.setKeyguardGoingAway(false);
- mNotificationShadeWindowController.setKeyguardGoingAway(false);
+ mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(false);
mShowKeyguardWakeLock.release();
}
mKeyguardDisplayManager.show();
@@ -1901,7 +1898,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
}
mUpdateMonitor.setKeyguardGoingAway(true);
- mNotificationShadeWindowController.setKeyguardGoingAway(true);
+ mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(true);
// Don't actually hide the Keyguard at the moment, wait for window
// manager until it tells us it's safe to do so with
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 7a63a5e406f6..83c95b77b716 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -30,7 +30,6 @@ import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.phone.NavigationModeController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.DeviceConfigProxy;
@@ -57,7 +56,6 @@ public class KeyguardModule {
FalsingManager falsingManager,
LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
- NotificationShadeWindowController notificationShadeWindowController,
Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy,
DismissCallbackRegistry dismissCallbackRegistry,
KeyguardUpdateMonitor updateMonitor,
@@ -72,7 +70,6 @@ public class KeyguardModule {
falsingManager,
lockPatternUtils,
broadcastDispatcher,
- notificationShadeWindowController,
statusBarKeyguardViewManagerLazy,
dismissCallbackRegistry,
updateMonitor,
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
index a95d6b7a73cd..0125153542c1 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
@@ -126,7 +126,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
};
@SuppressWarnings("unchecked")
- private Handler.Callback mUpdateCallbacks = (msg) -> {
+ private final Handler.Callback mUpdateCallbacks = (msg) -> {
SomeArgs args = (SomeArgs) msg.obj;
Consumer<Rect> updateBoundsCallback = (Consumer<Rect>) args.arg1;
switch (msg.what) {
@@ -282,7 +282,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
*/
@Override
public void onTaskVanished(ActivityManager.RunningTaskInfo info) {
- WindowContainerToken token = info.token;
+ final WindowContainerToken token = info.token;
Objects.requireNonNull(token, "Requires valid WindowContainerToken");
if (token.asBinder() != mToken.asBinder()) {
Log.wtf(TAG, "Unrecognized token: " + token);
@@ -297,6 +297,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
@Override
public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
+ Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken");
final PictureInPictureParams newParams = info.pictureInPictureParams;
if (!shouldUpdateDestinationBounds(newParams)) {
Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams);
@@ -321,13 +322,19 @@ public class PipTaskOrganizer extends TaskOrganizer {
* @param destinationBoundsOut the current destination bounds will be populated to this param
*/
@SuppressWarnings("unchecked")
- public void onMovementBoundsChanged(Rect destinationBoundsOut,
+ public void onMovementBoundsChanged(Rect destinationBoundsOut, boolean fromRotation,
boolean fromImeAdjustment, boolean fromShelfAdjustment) {
final PipAnimationController.PipTransitionAnimator animator =
mPipAnimationController.getCurrentAnimator();
- destinationBoundsOut.set(mLastReportedBounds);
if (animator == null || !animator.isRunning()
|| animator.getTransitionDirection() != TRANSITION_DIRECTION_TO_PIP) {
+ if (mInPip && fromRotation) {
+ // this could happen if rotation finishes before the animation
+ mLastReportedBounds.set(destinationBoundsOut);
+ scheduleFinishResizePip(mLastReportedBounds);
+ } else if (!mLastReportedBounds.isEmpty()) {
+ destinationBoundsOut.set(mLastReportedBounds);
+ }
return;
}
@@ -375,7 +382,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
@PipAnimationController.TransitionDirection int direction, int durationMs,
Consumer<Rect> updateBoundsCallback) {
if (!mInPip) {
- // Ignore animation when we are no longer in PIP
+ // can be initiated in other component, ignore if we are no longer in PIP
return;
}
SomeArgs args = SomeArgs.obtain();
@@ -427,6 +434,10 @@ public class PipTaskOrganizer extends TaskOrganizer {
private void scheduleFinishResizePip(SurfaceControl.Transaction tx,
Rect destinationBounds, @PipAnimationController.TransitionDirection int direction,
Consumer<Rect> updateBoundsCallback) {
+ if (!mInPip) {
+ // can be initiated in other component, ignore if we are no longer in PIP
+ return;
+ }
SomeArgs args = SomeArgs.obtain();
args.arg1 = updateBoundsCallback;
args.arg2 = tx;
@@ -441,7 +452,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
public void scheduleOffsetPip(Rect originalBounds, int offset, int duration,
Consumer<Rect> updateBoundsCallback) {
if (!mInPip) {
- // Ignore offsets when we are no longer in PIP
+ // can be initiated in other component, ignore if we are no longer in PIP
return;
}
SomeArgs args = SomeArgs.obtain();
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
index a2667d9a4c74..c3779efcf4b2 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
@@ -97,8 +97,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
final boolean changed = mPipBoundsHandler.onDisplayRotationChanged(mTmpNormalBounds,
displayId, fromRotation, toRotation, t);
if (changed) {
- updateMovementBounds(mTmpNormalBounds, false /* fromImeAdjustment */,
- false /* fromShelfAdjustment */);
+ updateMovementBounds(mTmpNormalBounds, true /* fromRotation */,
+ false /* fromImeAdjustment */, false /* fromShelfAdjustment */);
}
};
@@ -163,7 +163,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
@Override
public void onMovementBoundsChanged(boolean fromImeAdjustment) {
mHandler.post(() -> updateMovementBounds(null /* toBounds */,
- fromImeAdjustment, false /* fromShelfAdjustment */));
+ false /* fromRotation */, fromImeAdjustment, false /* fromShelfAdjustment */));
}
@Override
@@ -294,7 +294,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
if (changed) {
mTouchHandler.onShelfVisibilityChanged(visible, height);
updateMovementBounds(mPipBoundsHandler.getLastDestinationBounds(),
- false /* fromImeAdjustment */, true /* fromShelfAdjustment */);
+ false /* fromRotation */, false /* fromImeAdjustment */,
+ true /* fromShelfAdjustment */);
}
});
}
@@ -353,7 +354,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
mMenuController.onPinnedStackAnimationEnded();
}
- private void updateMovementBounds(@Nullable Rect toBounds,
+ private void updateMovementBounds(@Nullable Rect toBounds, boolean fromRotation,
boolean fromImeAdjustment, boolean fromShelfAdjustment) {
// Populate inset / normal bounds and DisplayInfo from mPipBoundsHandler before
// passing to mTouchHandler/mPipTaskOrganizer
@@ -361,7 +362,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
mPipBoundsHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds,
outBounds, mTmpDisplayInfo);
// mTouchHandler would rely on the bounds populated from mPipTaskOrganizer
- mPipTaskOrganizer.onMovementBoundsChanged(outBounds,
+ mPipTaskOrganizer.onMovementBoundsChanged(outBounds, fromRotation,
fromImeAdjustment, fromShelfAdjustment);
mTouchHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds,
outBounds, fromImeAdjustment, fromShelfAdjustment,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
index bc1c1e12203e..2f582727c766 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -38,6 +38,7 @@ import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.tileimpl.QSTileImpl;
+import com.android.systemui.statusbar.policy.LocationController;
import java.text.DateFormat;
import java.time.LocalTime;
@@ -60,12 +61,14 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> implements
private static final String PATTERN_HOUR_NINUTE_24 = "HH:mm";
private final ColorDisplayManager mManager;
+ private final LocationController mLocationController;
private NightDisplayListener mListener;
private boolean mIsListening;
@Inject
- public NightDisplayTile(QSHost host) {
+ public NightDisplayTile(QSHost host, LocationController locationController) {
super(host);
+ mLocationController = locationController;
mManager = mContext.getSystemService(ColorDisplayManager.class);
mListener = new NightDisplayListener(mContext, new Handler(Looper.myLooper()));
}
@@ -132,6 +135,7 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> implements
private String getSecondaryLabel(boolean isNightLightActivated) {
switch (mManager.getNightDisplayAutoMode()) {
case ColorDisplayManager.AUTO_MODE_TWILIGHT:
+ if (!mLocationController.isLocationEnabled()) return null;
// Auto mode related to sunrise & sunset. If the light is on, it's guaranteed to be
// turned off at sunrise. If it's off, it's guaranteed to be turned on at sunset.
return isNightLightActivated
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
index b90ca01df481..7b83c20d4b86 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
@@ -31,6 +31,7 @@ import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.LocationController;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
@@ -51,13 +52,15 @@ public class UiModeNightTile extends QSTileImpl<QSTile.BooleanState> implements
com.android.internal.R.drawable.ic_qs_ui_mode_night);
private final UiModeManager mUiModeManager;
private final BatteryController mBatteryController;
+ private final LocationController mLocationController;
@Inject
public UiModeNightTile(QSHost host, ConfigurationController configurationController,
- BatteryController batteryController) {
+ BatteryController batteryController, LocationController locationController) {
super(host);
mBatteryController = batteryController;
mUiModeManager = mContext.getSystemService(UiModeManager.class);
+ mLocationController = locationController;
configurationController.observe(getLifecycle(), this);
batteryController.observe(getLifecycle(), this);
}
@@ -97,7 +100,8 @@ public class UiModeNightTile extends QSTileImpl<QSTile.BooleanState> implements
if (powerSave) {
state.secondaryLabel = mContext.getResources().getString(
R.string.quick_settings_dark_mode_secondary_label_battery_saver);
- } else if (uiMode == UiModeManager.MODE_NIGHT_AUTO) {
+ } else if (uiMode == UiModeManager.MODE_NIGHT_AUTO
+ && mLocationController.isLocationEnabled()) {
state.secondaryLabel = mContext.getResources().getString(nightMode
? R.string.quick_settings_dark_mode_secondary_label_until_sunrise
: R.string.quick_settings_dark_mode_secondary_label_on_at_sunset);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java
index 5bf44c6a3003..8051998e2530 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java
@@ -71,12 +71,13 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
boolean homeTaskVisible, boolean clearedTask) {
if (task.configuration.windowConfiguration.getWindowingMode()
- != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
+ != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY || !mDividerOptional.isPresent()) {
return;
}
- if (homeTaskVisible) {
- showRecentApps(false /* triggeredFromAltTab */);
+ final Divider divider = mDividerOptional.get();
+ if (divider.isMinimized()) {
+ divider.onUndockingTask();
}
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
index 91d638e70677..a4b1310687aa 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
@@ -105,10 +105,6 @@ class SplitScreenTaskOrganizer extends TaskOrganizer {
mDivider.getHandler().post(() -> handleTaskInfoChanged(taskInfo));
}
- @Override
- public void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) {
- }
-
/**
* This is effectively a finite state machine which moves between the various split-screen
* presentations based on the contents of the split regions.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index 729f934937da..0d7715958995 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -21,7 +21,6 @@ import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.app.WallpaperManager
import android.util.Log
-import android.util.MathUtils
import android.view.Choreographer
import android.view.View
import androidx.annotation.VisibleForTesting
@@ -252,10 +251,7 @@ class NotificationShadeDepthController @Inject constructor(
var newBlur = 0
val state = statusBarStateController.state
if (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) {
- val animatedBlur =
- Interpolators.SHADE_ANIMATION.getInterpolation(
- MathUtils.constrain(shadeExpansion / 0.15f, 0f, 1f))
- newBlur = blurUtils.blurRadiusOfRatio(0.35f * animatedBlur + 0.65f * shadeExpansion)
+ newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion)
}
shadeSpring.animateTo(newBlur)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationChannelHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationChannelHelper.java
new file mode 100644
index 000000000000..ff945d15a4ed
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationChannelHelper.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification;
+
+import android.app.INotificationManager;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.Slog;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+
+/**
+ * Helps SystemUI create notification channels.
+ */
+public class NotificationChannelHelper {
+ private static final String TAG = "NotificationChannelHelper";
+
+ /** Creates a conversation channel based on the shortcut info or notification title. */
+ public static NotificationChannel createConversationChannelIfNeeded(
+ Context context,
+ INotificationManager notificationManager,
+ NotificationEntry entry,
+ NotificationChannel channel) {
+ if (!TextUtils.isEmpty(channel.getConversationId())) {
+ return channel;
+ }
+ final String conversationId = entry.getSbn().getShortcutId(context);
+ final String pkg = entry.getSbn().getPackageName();
+ final int appUid = entry.getSbn().getUid();
+ if (TextUtils.isEmpty(conversationId) || TextUtils.isEmpty(pkg)) {
+ return channel;
+ }
+
+ String name;
+ if (entry.getRanking().getShortcutInfo() != null) {
+ name = entry.getRanking().getShortcutInfo().getShortLabel().toString();
+ } else {
+ Bundle extras = entry.getSbn().getNotification().extras;
+ String nameString = extras.getString(Notification.EXTRA_CONVERSATION_TITLE);
+ if (TextUtils.isEmpty(nameString)) {
+ nameString = extras.getString(Notification.EXTRA_TITLE);
+ }
+ name = nameString;
+ }
+
+ // If this channel is not already a customized conversation channel, create
+ // a custom channel
+ try {
+ // TODO: When shortcuts are enforced remove this and use the shortcut label for naming
+ channel.setName(context.getString(
+ R.string.notification_summary_message_format,
+ name, channel.getName()));
+ notificationManager.createConversationNotificationChannelForPackage(
+ pkg, appUid, entry.getSbn().getKey(), channel,
+ conversationId);
+ channel = notificationManager.getConversationNotificationChannel(
+ context.getOpPackageName(), UserHandle.getUserId(appUid), pkg,
+ channel.getId(), false, conversationId);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Could not create conversation channel", e);
+ }
+ return channel;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index 9324b14bf211..d37e16b17620 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -88,14 +88,11 @@ import dagger.Lazy;
* @see #getActiveNotificationUnfiltered(String) to check if a key exists
* @see #getPendingNotificationsIterator() for an iterator over the pending notifications
* @see #getPendingOrActiveNotif(String) to find a notification exists for that key in any list
- * @see #getPendingAndActiveNotifications() to get the entire set of Notifications that we're
- * aware of
* @see #getActiveNotificationsForCurrentUser() to see every notification that the current user owns
*/
public class NotificationEntryManager implements
CommonNotifCollection,
Dumpable,
- InflationCallback,
VisualStabilityManager.Callback {
private static final String TAG = "NotificationEntryMgr";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -309,12 +306,7 @@ public class NotificationEntryManager implements
*
* WARNING: this will call back into us. Don't hold any locks.
*/
- @Override
- public void handleInflationException(NotificationEntry n, Exception e) {
- handleInflationException(n.getSbn(), e);
- }
-
- public void handleInflationException(StatusBarNotification n, Exception e) {
+ private void handleInflationException(StatusBarNotification n, Exception e) {
removeNotificationInternal(
n.getKey(), null, null, true /* forceRemove */, false /* removedByUser */,
REASON_ERROR);
@@ -323,30 +315,37 @@ public class NotificationEntryManager implements
}
}
- @Override
- public void onAsyncInflationFinished(NotificationEntry entry) {
- mPendingNotifications.remove(entry.getKey());
- // If there was an async task started after the removal, we don't want to add it back to
- // the list, otherwise we might get leaks.
- if (!entry.isRowRemoved()) {
- boolean isNew = getActiveNotificationUnfiltered(entry.getKey()) == null;
- mLogger.logNotifInflated(entry.getKey(), isNew);
- if (isNew) {
- for (NotificationEntryListener listener : mNotificationEntryListeners) {
- listener.onEntryInflated(entry);
- }
- addActiveNotification(entry);
- updateNotifications("onAsyncInflationFinished");
- for (NotificationEntryListener listener : mNotificationEntryListeners) {
- listener.onNotificationAdded(entry);
- }
- } else {
- for (NotificationEntryListener listener : mNotificationEntryListeners) {
- listener.onEntryReinflated(entry);
+ private final InflationCallback mInflationCallback = new InflationCallback() {
+ @Override
+ public void handleInflationException(NotificationEntry entry, Exception e) {
+ NotificationEntryManager.this.handleInflationException(entry.getSbn(), e);
+ }
+
+ @Override
+ public void onAsyncInflationFinished(NotificationEntry entry) {
+ mPendingNotifications.remove(entry.getKey());
+ // If there was an async task started after the removal, we don't want to add it back to
+ // the list, otherwise we might get leaks.
+ if (!entry.isRowRemoved()) {
+ boolean isNew = getActiveNotificationUnfiltered(entry.getKey()) == null;
+ mLogger.logNotifInflated(entry.getKey(), isNew);
+ if (isNew) {
+ for (NotificationEntryListener listener : mNotificationEntryListeners) {
+ listener.onEntryInflated(entry);
+ }
+ addActiveNotification(entry);
+ updateNotifications("onAsyncInflationFinished");
+ for (NotificationEntryListener listener : mNotificationEntryListeners) {
+ listener.onNotificationAdded(entry);
+ }
+ } else {
+ for (NotificationEntryListener listener : mNotificationEntryListeners) {
+ listener.onEntryReinflated(entry);
+ }
}
}
}
- }
+ };
private final NotificationHandler mNotifListener = new NotificationHandler() {
@Override
@@ -558,6 +557,10 @@ public class NotificationEntryManager implements
ranking,
mFgsFeatureController.isForegroundServiceDismissalEnabled(),
SystemClock.uptimeMillis());
+ for (NotifCollectionListener listener : mNotifCollectionListeners) {
+ listener.onEntryBind(entry, notification);
+ }
+ mAllNotifications.add(entry);
mLeakDetector.trackInstance(entry);
@@ -568,8 +571,10 @@ public class NotificationEntryManager implements
// Construct the expanded view.
if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
mNotificationRowBinderLazy.get()
- .inflateViews(entry, () -> performRemoveNotification(notification,
- REASON_CANCEL));
+ .inflateViews(
+ entry,
+ () -> performRemoveNotification(notification, REASON_CANCEL),
+ mInflationCallback);
}
abortExistingInflation(key, "addNotification");
@@ -612,7 +617,9 @@ public class NotificationEntryManager implements
updateRankingAndSort(ranking, "updateNotificationInternal");
StatusBarNotification oldSbn = entry.getSbn();
entry.setSbn(notification);
- mGroupManager.onEntryUpdated(entry, oldSbn);
+ for (NotifCollectionListener listener : mNotifCollectionListeners) {
+ listener.onEntryBind(entry, notification);
+ } mGroupManager.onEntryUpdated(entry, oldSbn);
mLogger.logNotifUpdated(entry.getKey());
for (NotificationEntryListener listener : mNotificationEntryListeners) {
@@ -624,8 +631,10 @@ public class NotificationEntryManager implements
if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
mNotificationRowBinderLazy.get()
- .inflateViews(entry, () -> performRemoveNotification(notification,
- REASON_CANCEL));
+ .inflateViews(
+ entry,
+ () -> performRemoveNotification(notification, REASON_CANCEL),
+ mInflationCallback);
}
updateNotifications("updateNotificationInternal");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
index 365862bef871..a3621b6cabf6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
@@ -65,6 +65,7 @@ import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.notification.collection.coalescer.CoalescedEvent;
import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer;
import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer.BatchableNotificationHandler;
+import com.android.systemui.statusbar.notification.collection.notifcollection.BindEntryEvent;
import com.android.systemui.statusbar.notification.collection.notifcollection.CleanUpEntryEvent;
import com.android.systemui.statusbar.notification.collection.notifcollection.CollectionReadyForBuildListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
@@ -389,6 +390,7 @@ public class NotifCollection implements Dumpable {
if (entry == null) {
// A new notification!
entry = new NotificationEntry(sbn, ranking, SystemClock.uptimeMillis());
+ mEventQueue.add(new BindEntryEvent(entry, sbn));
mNotificationSet.put(sbn.getKey(), entry);
mLogger.logNotifPosted(sbn.getKey());
@@ -409,6 +411,7 @@ public class NotifCollection implements Dumpable {
entry.mCancellationReason = REASON_NOT_CANCELED;
entry.setSbn(sbn);
+ mEventQueue.add(new BindEntryEvent(entry, sbn));
mLogger.logNotifUpdated(sbn.getKey());
mEventQueue.add(new EntryUpdatedEvent(entry));
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
index 1f6413b525cb..d081e114855e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
@@ -47,7 +47,6 @@ public class NotifInflaterImpl implements NotifInflater {
private final NotifPipeline mNotifPipeline;
private NotificationRowBinderImpl mNotificationRowBinder;
- private InflationCallback mExternalInflationCallback;
@Inject
public NotifInflaterImpl(
@@ -66,17 +65,11 @@ public class NotifInflaterImpl implements NotifInflater {
*/
public void setRowBinder(NotificationRowBinderImpl rowBinder) {
mNotificationRowBinder = rowBinder;
- mNotificationRowBinder.setInflationCallback(mInflationCallback);
}
@Override
- public void setInflationCallback(InflationCallback callback) {
- mExternalInflationCallback = callback;
- }
-
- @Override
- public void rebindViews(NotificationEntry entry) {
- inflateViews(entry);
+ public void rebindViews(NotificationEntry entry, InflationCallback callback) {
+ inflateViews(entry, callback);
}
/**
@@ -84,11 +77,14 @@ public class NotifInflaterImpl implements NotifInflater {
* views are bound.
*/
@Override
- public void inflateViews(NotificationEntry entry) {
+ public void inflateViews(NotificationEntry entry, InflationCallback callback) {
try {
- requireBinder().inflateViews(entry, getDismissCallback(entry));
+ requireBinder().inflateViews(
+ entry,
+ getDismissCallback(entry),
+ wrapInflationCallback(callback));
} catch (InflationException e) {
- // logged in mInflationCallback.handleInflationException
+ mNotifErrorManager.setInflationError(entry, e);
}
}
@@ -121,6 +117,26 @@ public class NotifInflaterImpl implements NotifInflater {
};
}
+ private NotificationContentInflater.InflationCallback wrapInflationCallback(
+ InflationCallback callback) {
+ return new NotificationContentInflater.InflationCallback() {
+ @Override
+ public void handleInflationException(
+ NotificationEntry entry,
+ Exception e) {
+ mNotifErrorManager.setInflationError(entry, e);
+ }
+
+ @Override
+ public void onAsyncInflationFinished(NotificationEntry entry) {
+ mNotifErrorManager.clearInflationError(entry);
+ if (callback != null) {
+ callback.onInflationFinished(entry);
+ }
+ }
+ };
+ }
+
private NotificationRowBinderImpl requireBinder() {
if (mNotificationRowBinder == null) {
throw new RuntimeException("NotificationRowBinder must be attached before using "
@@ -128,22 +144,4 @@ public class NotifInflaterImpl implements NotifInflater {
}
return mNotificationRowBinder;
}
-
- private final NotificationContentInflater.InflationCallback mInflationCallback =
- new NotificationContentInflater.InflationCallback() {
- @Override
- public void handleInflationException(
- NotificationEntry entry,
- Exception e) {
- mNotifErrorManager.setInflationError(entry, e);
- }
-
- @Override
- public void onAsyncInflationFinished(NotificationEntry entry) {
- mNotifErrorManager.clearInflationError(entry);
- if (mExternalInflationCallback != null) {
- mExternalInflationCallback.onInflationFinished(entry);
- }
- }
- };
}
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 68ec34e90760..749c3e4c9d0d 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
@@ -408,15 +408,6 @@ public final class NotificationEntry extends ListEntry {
return wasBubble != isBubble();
}
- /**
- * Resets the notification entry to be re-used.
- */
- public void reset() {
- if (row != null) {
- row.reset();
- }
- }
-
@NotificationSectionsManager.PriorityBucket
public int getBucket() {
return mBucket;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/TargetSdkResolver.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/TargetSdkResolver.kt
new file mode 100644
index 000000000000..1c1b2bb087f0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/TargetSdkResolver.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection
+
+import android.content.Context
+import android.content.pm.PackageManager
+import android.service.notification.StatusBarNotification
+import android.util.Log
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
+import com.android.systemui.statusbar.phone.StatusBar
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class TargetSdkResolver @Inject constructor(
+ private val context: Context,
+ private val collection: CommonNotifCollection
+) {
+ init {
+ collection.addCollectionListener(object : NotifCollectionListener {
+ override fun onEntryBind(entry: NotificationEntry, sbn: StatusBarNotification) {
+ entry.targetSdk = resolveNotificationSdk(sbn)
+ }
+ })
+ }
+
+ private fun resolveNotificationSdk(sbn: StatusBarNotification): Int {
+ val pmUser = StatusBar.getPackageManagerForUser(context, sbn.user.identifier)
+ var targetSdk = 0
+ // Extract target SDK version.
+ try {
+ val info = pmUser.getApplicationInfo(sbn.packageName, 0)
+ targetSdk = info.targetSdkVersion
+ } catch (ex: PackageManager.NameNotFoundException) {
+ Log.e(TAG, "Failed looking up ApplicationInfo for " + sbn.packageName, ex)
+ }
+ return targetSdk
+ }
+
+ private val TAG = "TargetSdkResolver"
+} \ No newline at end of file
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 9973ef9ae14e..0e8dd5e24e91 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
@@ -72,7 +72,6 @@ public class PreparationCoordinator implements Coordinator {
) {
mLogger = logger;
mNotifInflater = notifInflater;
- mNotifInflater.setInflationCallback(mInflationCallback);
mNotifErrorManager = errorManager;
mNotifErrorManager.addInflationErrorListener(mInflationErrorListener);
mViewBarn = viewBarn;
@@ -218,11 +217,11 @@ public class PreparationCoordinator implements Coordinator {
private void inflateEntry(NotificationEntry entry, String reason) {
abortInflation(entry, reason);
- mNotifInflater.inflateViews(entry);
+ mNotifInflater.inflateViews(entry, mInflationCallback);
}
private void rebind(NotificationEntry entry, String reason) {
- mNotifInflater.rebindViews(entry);
+ mNotifInflater.rebindViews(entry, mInflationCallback);
}
private void abortInflation(NotificationEntry entry, String reason) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.java
index ea0ece444a67..e3d76113d537 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.java
@@ -24,22 +24,20 @@ import com.android.systemui.statusbar.notification.collection.coordinator.Prepar
* main thread. When the inflation is finished, NotifInflater will trigger its InflationCallback.
*/
public interface NotifInflater {
-
- /**
- * Callback used when inflation is finished.
- */
- void setInflationCallback(InflationCallback callback);
-
/**
* Called to rebind the entry's views.
+ *
+ * @param callback callback called after inflation finishes
*/
- void rebindViews(NotificationEntry entry);
+ void rebindViews(NotificationEntry entry, InflationCallback callback);
/**
* Called to inflate the views of an entry. Views are not considered inflated until all of its
* views are bound. Once all views are inflated, the InflationCallback is triggered.
+ *
+ * @param callback callback called after inflation finishes
*/
- void inflateViews(NotificationEntry entry);
+ void inflateViews(NotificationEntry entry, InflationCallback callback);
/**
* Request to stop the inflation of an entry. For example, called when a notification is
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java
index 3f500644b184..f4c4924b4b9a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java
@@ -22,6 +22,7 @@ import com.android.systemui.statusbar.NotificationUiAdjustment;
import com.android.systemui.statusbar.notification.InflationException;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder;
/**
* Used by the {@link NotificationEntryManager}. When notifications are added or updated, the binder
@@ -37,7 +38,8 @@ public interface NotificationRowBinder {
*/
void inflateViews(
NotificationEntry entry,
- Runnable onDismissRunnable)
+ Runnable onDismissRunnable,
+ NotificationRowContentBinder.InflationCallback callback)
throws InflationException;
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
index 32f1822804f8..73f12f86e52e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
@@ -16,13 +16,11 @@
package com.android.systemui.statusbar.notification.collection.inflation;
+import static java.util.Objects.requireNonNull;
+
import android.annotation.Nullable;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.os.Build;
-import android.service.notification.StatusBarNotification;
-import android.util.Log;
import android.view.ViewGroup;
import com.android.internal.util.NotificationMessagingUtil;
@@ -44,9 +42,6 @@ import com.android.systemui.statusbar.notification.row.RowContentBindStage;
import com.android.systemui.statusbar.notification.row.RowInflaterTask;
import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.statusbar.phone.StatusBar;
-
-import java.util.Objects;
import javax.inject.Inject;
import javax.inject.Provider;
@@ -72,7 +67,6 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
private NotificationPresenter mPresenter;
private NotificationListContainer mListContainer;
- private NotificationRowContentBinder.InflationCallback mInflationCallback;
private BindRowCallback mBindRowCallback;
private NotificationClicker mNotificationClicker;
@@ -113,10 +107,6 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
mIconManager.attach();
}
- public void setInflationCallback(NotificationRowContentBinder.InflationCallback callback) {
- mInflationCallback = callback;
- }
-
public void setNotificationClicker(NotificationClicker clicker) {
mNotificationClicker = clicker;
}
@@ -125,17 +115,19 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
* Inflates the views for the given entry (possibly asynchronously).
*/
@Override
- public void inflateViews(NotificationEntry entry, Runnable onDismissRunnable)
+ public void inflateViews(
+ NotificationEntry entry,
+ Runnable onDismissRunnable,
+ NotificationRowContentBinder.InflationCallback callback)
throws InflationException {
ViewGroup parent = mListContainer.getViewParentForNotification(entry);
- PackageManager pmUser = StatusBar.getPackageManagerForUser(mContext,
- entry.getSbn().getUser().getIdentifier());
- final StatusBarNotification sbn = entry.getSbn();
if (entry.rowExists()) {
mIconManager.updateIcons(entry);
- entry.reset();
- updateNotification(entry, pmUser, sbn, entry.getRow());
+ ExpandableNotificationRow row = entry.getRow();
+ row.reset();
+ updateRow(entry, row);
+ inflateContentViews(entry, row, callback);
entry.getRowController().setOnDismissRunnable(onDismissRunnable);
} else {
mIconManager.createIcons(entry);
@@ -147,7 +139,6 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
.expandableNotificationRow(row)
.notificationEntry(entry)
.onDismissRunnable(onDismissRunnable)
- .inflationCallback(mInflationCallback)
.rowContentBindStage(mRowContentBindStage)
.onExpandClickListener(mPresenter)
.build();
@@ -155,26 +146,34 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
component.getExpandableNotificationRowController();
rowController.init();
entry.setRowController(rowController);
- bindRow(entry, pmUser, sbn, row);
- updateNotification(entry, pmUser, sbn, row);
+ bindRow(entry, row);
+ updateRow(entry, row);
+ inflateContentViews(entry, row, callback);
});
}
}
- //TODO: This method associates a row with an entry, but eventually needs to not do that
- private void bindRow(NotificationEntry entry, PackageManager pmUser,
- StatusBarNotification sbn, ExpandableNotificationRow row) {
+ /**
+ * Bind row to various controllers and managers. This is only called when the row is first
+ * created.
+ *
+ * TODO: This method associates a row with an entry, but eventually needs to not do that
+ */
+ private void bindRow(NotificationEntry entry, ExpandableNotificationRow row) {
mListContainer.bindRow(row);
mNotificationRemoteInputManager.bindRow(row);
+ row.setOnActivatedListener(mPresenter);
entry.setRow(row);
row.setEntry(entry);
mNotifBindPipeline.manageRow(entry, row);
- mBindRowCallback.onBindRow(entry, pmUser, sbn, row);
+ mBindRowCallback.onBindRow(row);
}
/**
* Updates the views bound to an entry when the entry's ranking changes, either in-place or by
* reinflating them.
+ *
+ * TODO: Should this method be in this class?
*/
@Override
public void onNotificationRankingUpdated(
@@ -184,11 +183,10 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
NotificationUiAdjustment newAdjustment) {
if (NotificationUiAdjustment.needReinflate(oldAdjustment, newAdjustment)) {
if (entry.rowExists()) {
- entry.reset();
- PackageManager pmUser = StatusBar.getPackageManagerForUser(
- mContext,
- entry.getSbn().getUser().getIdentifier());
- updateNotification(entry, pmUser, entry.getSbn(), entry.getRow());
+ ExpandableNotificationRow row = entry.getRow();
+ row.reset();
+ updateRow(entry, row);
+ inflateContentViews(entry, row, null /* callback */);
} else {
// Once the RowInflaterTask is done, it will pick up the updated entry, so
// no-op here.
@@ -202,59 +200,53 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
}
}
- private void updateNotification(
+ /**
+ * Update row after the notification has updated.
+ *
+ * @param entry notification that has updated
+ */
+ private void updateRow(
NotificationEntry entry,
- PackageManager pmUser,
- StatusBarNotification sbn,
ExpandableNotificationRow row) {
-
- // Extract target SDK version.
- try {
- ApplicationInfo info = pmUser.getApplicationInfo(sbn.getPackageName(), 0);
- entry.targetSdk = info.targetSdkVersion;
- } catch (PackageManager.NameNotFoundException ex) {
- Log.e(TAG, "Failed looking up ApplicationInfo for " + sbn.getPackageName(), ex);
- }
row.setLegacy(entry.targetSdk >= Build.VERSION_CODES.GINGERBREAD
&& entry.targetSdk < Build.VERSION_CODES.LOLLIPOP);
- // TODO: should this be happening somewhere else?
- mIconManager.updateIconTags(entry, entry.targetSdk);
-
- row.setOnActivatedListener(mPresenter);
+ // bind the click event to the content area
+ requireNonNull(mNotificationClicker).register(row, entry.getSbn());
+ }
+ /**
+ * Inflate the row's basic content views.
+ */
+ private void inflateContentViews(
+ NotificationEntry entry,
+ ExpandableNotificationRow row,
+ NotificationRowContentBinder.InflationCallback inflationCallback) {
final boolean useIncreasedCollapsedHeight =
- mMessagingUtil.isImportantMessaging(sbn, entry.getImportance());
+ mMessagingUtil.isImportantMessaging(entry.getSbn(), entry.getImportance());
final boolean isLowPriority = entry.isAmbient();
RowContentBindParams params = mRowContentBindStage.getStageParams(entry);
params.setUseIncreasedCollapsedHeight(useIncreasedCollapsedHeight);
params.setUseLowPriority(entry.isAmbient());
- //TODO: Replace this API with RowContentBindParams directly
+ // TODO: Replace this API with RowContentBindParams directly. Also move to a separate
+ // redaction controller.
row.setNeedsRedaction(mNotificationLockscreenUserManager.needsRedaction(entry));
+
params.rebindAllContentViews();
mRowContentBindStage.requestRebind(entry, en -> {
row.setUsesIncreasedCollapsedHeight(useIncreasedCollapsedHeight);
row.setIsLowPriority(isLowPriority);
- mInflationCallback.onAsyncInflationFinished(en);
+ inflationCallback.onAsyncInflationFinished(en);
});
-
- // bind the click event to the content area
- Objects.requireNonNull(mNotificationClicker).register(row, sbn);
}
/** Callback for when a row is bound to an entry. */
public interface BindRowCallback {
/**
- * Called when a new notification and row is created.
- *
- * @param entry entry for the notification
- * @param pmUser package manager for user
- * @param sbn notification
- * @param row row for the notification
+ * Called when a new row is created and bound to a notification.
*/
- void onBindRow(NotificationEntry entry, PackageManager pmUser,
- StatusBarNotification sbn, ExpandableNotificationRow row);
+ void onBindRow(ExpandableNotificationRow row);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
index 41ca52d5a626..59f119e987b4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.collection.notifcollection;
import android.service.notification.NotificationListenerService;
+import android.service.notification.StatusBarNotification;
import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -25,6 +26,15 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
* Listener interface for {@link NotificationEntry} events.
*/
public interface NotifCollectionListener {
+
+ /**
+ * Called when the entry is having a new status bar notification bound to it. This should
+ * be used to initialize any derivative state on the entry that needs to update when the
+ * notification is updated.
+ */
+ default void onEntryBind(NotificationEntry entry, StatusBarNotification sbn) {
+ }
+
/**
* Called whenever a new {@link NotificationEntry} is initialized. This should be used for
* initializing any decorated state tied to the notification.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt
index 2ef0368061ba..2810b891373f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.collection.notifcollection
import android.service.notification.NotificationListenerService.RankingMap
+import android.service.notification.StatusBarNotification
import com.android.systemui.statusbar.notification.collection.NotifCollection
import com.android.systemui.statusbar.notification.collection.NotificationEntry
@@ -37,6 +38,15 @@ sealed class NotifEvent {
abstract fun dispatchToListener(listener: NotifCollectionListener)
}
+data class BindEntryEvent(
+ val entry: NotificationEntry,
+ val sbn: StatusBarNotification
+) : NotifEvent() {
+ override fun dispatchToListener(listener: NotifCollectionListener) {
+ listener.onEntryBind(entry, sbn)
+ }
+}
+
data class InitEntryEvent(
val entry: NotificationEntry
) : NotifEvent() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt
index da8ad2da5c87..08be4f872415 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt
@@ -172,18 +172,6 @@ class IconManager @Inject constructor(
}
}
- /**
- * Updates tags on the icon views to match the posting app's target SDK level
- *
- * Note that this method MUST be called after both [createIcons] and [updateIcons].
- */
- fun updateIconTags(entry: NotificationEntry, targetSdk: Int) {
- setTagOnIconViews(
- entry.icons,
- R.id.icon_is_pre_L,
- targetSdk < Build.VERSION_CODES.LOLLIPOP)
- }
-
private fun updateIconsSafe(entry: NotificationEntry) {
try {
updateIcons(entry)
@@ -259,6 +247,7 @@ class IconManager @Inject constructor(
iconView: StatusBarIconView
) {
iconView.setShowsConversation(showsConversation(entry, iconView, iconDescriptor))
+ iconView.setTag(R.id.icon_is_pre_L, entry.targetSdk < Build.VERSION_CODES.LOLLIPOP)
if (!iconView.set(iconDescriptor)) {
throw InflationException("Couldn't create icon $iconDescriptor")
}
@@ -326,20 +315,13 @@ class IconManager @Inject constructor(
val usedInSensitiveContext =
iconView === entry.icons.shelfIcon || iconView === entry.icons.aodIcon
val isSmallIcon = iconDescriptor.icon.equals(entry.sbn.notification.smallIcon)
- return isImportantConversation(entry) && !isSmallIcon
- && (!usedInSensitiveContext || !entry.isSensitive)
+ return isImportantConversation(entry) && !isSmallIcon &&
+ (!usedInSensitiveContext || !entry.isSensitive)
}
private fun isImportantConversation(entry: NotificationEntry): Boolean {
return entry.ranking.channel != null && entry.ranking.channel.isImportantConversation
}
-
- private fun setTagOnIconViews(icons: IconPack, key: Int, tag: Any) {
- icons.statusBarIcon?.setTag(key, tag)
- icons.shelfIcon?.setTag(key, tag)
- icons.aodIcon?.setTag(key, tag)
- icons.centeredIcon?.setTag(key, tag)
- }
}
private const val TAG = "IconManager" \ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
index d1cceaeb6dd5..5fac5b1cf159 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
@@ -108,8 +108,6 @@ class NotificationsControllerImpl @Inject constructor(
if (featureFlags.isNewNotifPipelineRenderingEnabled) {
// TODO
} else {
- notificationRowBinder.setInflationCallback(entryManager)
-
remoteInputUriController.attach(entryManager)
groupAlertTransferHelper.bind(entryManager, groupManager)
headsUpManager.addListener(groupManager)
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 5c578dfc5744..85090dcbf748 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
@@ -70,6 +70,7 @@ import com.android.internal.widget.CachingIconView;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
+import com.android.systemui.bubbles.BubbleController;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
@@ -579,6 +580,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
}
}
+ /** Call when bubble state has changed and the button on the notification should be updated. */
+ public void updateBubbleButton() {
+ for (NotificationContentView l : mLayouts) {
+ l.updateBubbleButton(mEntry);
+ }
+ }
+
@VisibleForTesting
void updateShelfIconColor() {
StatusBarIconView expandedIcon = mEntry.getIcons().getShelfIcon();
@@ -1086,6 +1094,18 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
updateClickAndFocus();
}
+ /** The click listener for the bubble button. */
+ public View.OnClickListener getBubbleClickListener() {
+ return new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Dependency.get(BubbleController.class)
+ .onUserChangedBubble(mEntry, !mEntry.isBubble() /* createBubble */);
+ mHeadsUpManager.removeNotification(mEntry.getKey(), true /* releaseImmediately */);
+ }
+ };
+ }
+
private void updateClickAndFocus() {
boolean normalChild = !isChildInGroup() || isGroupExpanded();
boolean clickable = mOnClickListener != null && normalChild;
@@ -1267,7 +1287,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
return mNotificationColor;
}
- private void updateNotificationColor() {
+ public void updateNotificationColor() {
Configuration currentConfig = getResources().getConfiguration();
boolean nightMode = (currentConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK)
== Configuration.UI_MODE_NIGHT_YES;
@@ -1613,6 +1633,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
mFalsingManager = falsingManager;
mStatusbarStateController = statusBarStateController;
mPeopleNotificationIdentifier = peopleNotificationIdentifier;
+ for (NotificationContentView l : mLayouts) {
+ l.setPeopleNotificationIdentifier(mPeopleNotificationIdentifier);
+ }
}
private void initDimens() {
@@ -3001,9 +3024,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
default:
if (action == R.id.action_snooze) {
NotificationMenuRowPlugin provider = getProvider();
- if (provider == null && mMenuRow != null) {
- provider = createMenu();
- } else {
+ if (provider == null) {
return false;
}
MenuItem snoozeMenu = provider.getSnoozeMenuItem(getContext());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
index 8b3d06b97882..f8d9c4648ac9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
@@ -60,7 +60,6 @@ public class ExpandableNotificationRowController {
private final HeadsUpManager mHeadsUpManager;
private final ExpandableNotificationRow.OnExpandClickListener mOnExpandClickListener;
private final StatusBarStateController mStatusBarStateController;
- private final NotificationRowContentBinder.InflationCallback mInflationCallback;
private final ExpandableNotificationRow.ExpansionLogger mExpansionLogger =
this::logNotificationExpansion;
@@ -82,7 +81,6 @@ public class ExpandableNotificationRowController {
NotificationLogger notificationLogger, HeadsUpManager headsUpManager,
ExpandableNotificationRow.OnExpandClickListener onExpandClickListener,
StatusBarStateController statusBarStateController,
- NotificationRowContentBinder.InflationCallback inflationCallback,
NotificationGutsManager notificationGutsManager,
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowLongPress,
@DismissRunnable Runnable onDismissRunnable, FalsingManager falsingManager,
@@ -101,7 +99,6 @@ public class ExpandableNotificationRowController {
mHeadsUpManager = headsUpManager;
mOnExpandClickListener = onExpandClickListener;
mStatusBarStateController = statusBarStateController;
- mInflationCallback = inflationCallback;
mNotificationGutsManager = notificationGutsManager;
mOnDismissRunnable = onDismissRunnable;
mOnAppOpsClickListener = mNotificationGutsManager::openGuts;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index 3c3f1b21fb3c..bd1745eaa028 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -16,13 +16,18 @@
package com.android.systemui.statusbar.notification.row;
+
+import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.provider.Settings;
import android.service.notification.StatusBarNotification;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -47,6 +52,7 @@ import com.android.systemui.statusbar.SmartReplyController;
import com.android.systemui.statusbar.TransformableView;
import com.android.systemui.statusbar.notification.NotificationUtils;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationCustomViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
@@ -118,6 +124,7 @@ public class NotificationContentView extends FrameLayout {
private NotificationGroupManager mGroupManager;
private RemoteInputController mRemoteInputController;
private Runnable mExpandedVisibleListener;
+ private PeopleNotificationIdentifier mPeopleIdentifier;
/**
* List of listeners for when content views become inactive (i.e. not the showing view).
*/
@@ -454,6 +461,9 @@ public class NotificationContentView extends FrameLayout {
mExpandedChild = child;
mExpandedWrapper = NotificationViewWrapper.wrap(getContext(), child,
mContainingNotification);
+ if (mContainingNotification != null) {
+ applyBubbleAction(mExpandedChild, mContainingNotification.getEntry());
+ }
}
/**
@@ -493,6 +503,9 @@ public class NotificationContentView extends FrameLayout {
mHeadsUpChild = child;
mHeadsUpWrapper = NotificationViewWrapper.wrap(getContext(), child,
mContainingNotification);
+ if (mContainingNotification != null) {
+ applyBubbleAction(mHeadsUpChild, mContainingNotification.getEntry());
+ }
}
@Override
@@ -1138,6 +1151,8 @@ public class NotificationContentView extends FrameLayout {
mForceSelectNextLayout = true;
mPreviousExpandedRemoteInputIntent = null;
mPreviousHeadsUpRemoteInputIntent = null;
+ applyBubbleAction(mExpandedChild, entry);
+ applyBubbleAction(mHeadsUpChild, entry);
}
private void updateAllSingleLineViews() {
@@ -1308,6 +1323,58 @@ public class NotificationContentView extends FrameLayout {
return null;
}
+ /**
+ * Call to update state of the bubble button (i.e. does it show bubble or unbubble or no
+ * icon at all).
+ *
+ * @param entry the new entry to use.
+ */
+ public void updateBubbleButton(NotificationEntry entry) {
+ applyBubbleAction(mExpandedChild, entry);
+ }
+
+ private boolean isBubblesEnabled() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ NOTIFICATION_BUBBLES, 0) == 1;
+ }
+
+ private void applyBubbleAction(View layout, NotificationEntry entry) {
+ if (layout == null || mContainingNotification == null || mPeopleIdentifier == null) {
+ return;
+ }
+ ImageView bubbleButton = layout.findViewById(com.android.internal.R.id.bubble_button);
+ View actionContainer = layout.findViewById(com.android.internal.R.id.actions_container);
+ if (bubbleButton == null || actionContainer == null) {
+ return;
+ }
+ boolean isPerson =
+ mPeopleIdentifier.getPeopleNotificationType(entry.getSbn(), entry.getRanking())
+ != PeopleNotificationIdentifier.TYPE_NON_PERSON;
+ boolean showButton = isBubblesEnabled()
+ && isPerson
+ && entry.getBubbleMetadata() != null;
+ if (showButton) {
+ Drawable d = mContext.getResources().getDrawable(entry.isBubble()
+ ? R.drawable.ic_stop_bubble
+ : R.drawable.ic_create_bubble);
+ mContainingNotification.updateNotificationColor();
+ final int tint = mContainingNotification.getNotificationColor();
+ d.setTint(tint);
+
+ String contentDescription = mContext.getResources().getString(entry.isBubble()
+ ? R.string.notification_conversation_unbubble
+ : R.string.notification_conversation_bubble);
+
+ bubbleButton.setContentDescription(contentDescription);
+ bubbleButton.setImageDrawable(d);
+ bubbleButton.setOnClickListener(mContainingNotification.getBubbleClickListener());
+ bubbleButton.setVisibility(VISIBLE);
+ actionContainer.setVisibility(VISIBLE);
+ } else {
+ bubbleButton.setVisibility(GONE);
+ }
+ }
+
private void applySmartReplyView(
SmartRepliesAndActions smartRepliesAndActions,
NotificationEntry entry) {
@@ -1512,6 +1579,10 @@ public class NotificationContentView extends FrameLayout {
mContainingNotification = containingNotification;
}
+ public void setPeopleNotificationIdentifier(PeopleNotificationIdentifier peopleIdentifier) {
+ mPeopleIdentifier = peopleIdentifier;
+ }
+
public void requestSelectLayout(boolean needsAnimation) {
selectLayout(needsAnimation, false);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
index 6fc1264d69e2..a27199370b16 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
@@ -17,6 +17,8 @@
package com.android.systemui.statusbar.notification.row;
import static android.app.Notification.EXTRA_IS_GROUP_CONVERSATION;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
@@ -38,11 +40,9 @@ import android.content.pm.PackageManager;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon;
-import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.os.RemoteException;
-import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.text.TextUtils;
import android.transition.ChangeBounds;
@@ -51,7 +51,6 @@ import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.util.AttributeSet;
import android.util.Log;
-import android.util.Slog;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.widget.ImageView;
@@ -62,6 +61,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.notification.ConversationIconFactory;
import com.android.systemui.Dependency;
import com.android.systemui.R;
+import com.android.systemui.statusbar.notification.NotificationChannelHelper;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -203,7 +203,8 @@ public class NotificationConversationInfo extends LinearLayout implements
}
mShortcutInfo = entry.getRanking().getShortcutInfo();
- createConversationChannelIfNeeded();
+ mNotificationChannel = NotificationChannelHelper.createConversationChannelIfNeeded(
+ getContext(), mINotificationManager, entry, mNotificationChannel);
bindHeader();
bindActions();
@@ -212,27 +213,6 @@ public class NotificationConversationInfo extends LinearLayout implements
done.setOnClickListener(mOnDone);
}
- void createConversationChannelIfNeeded() {
- // If this channel is not already a customized conversation channel, create
- // a custom channel
- if (TextUtils.isEmpty(mNotificationChannel.getConversationId())) {
- try {
- // TODO: remove
- mNotificationChannel.setName(mContext.getString(
- R.string.notification_summary_message_format,
- getName(), mNotificationChannel.getName()));
- mINotificationManager.createConversationNotificationChannelForPackage(
- mPackageName, mAppUid, mSbn.getKey(), mNotificationChannel,
- mConversationId);
- mNotificationChannel = mINotificationManager.getConversationNotificationChannel(
- mContext.getOpPackageName(), UserHandle.getUserId(mAppUid), mPackageName,
- mNotificationChannel.getId(), false, mConversationId);
- } catch (RemoteException e) {
- Slog.e(TAG, "Could not create conversation channel", e);
- }
- }
- }
-
private void bindActions() {
// TODO: b/152050825
@@ -316,24 +296,6 @@ public class NotificationConversationInfo extends LinearLayout implements
}
}
- private void bindName() {
- TextView name = findViewById(R.id.name);
- name.setText(getName());
- }
-
- private String getName() {
- if (mShortcutInfo != null) {
- return mShortcutInfo.getShortLabel().toString();
- } else {
- Bundle extras = mSbn.getNotification().extras;
- String nameString = extras.getString(Notification.EXTRA_CONVERSATION_TITLE);
- if (TextUtils.isEmpty(nameString)) {
- nameString = extras.getString(Notification.EXTRA_TITLE);
- }
- return nameString;
- }
- }
-
private void bindPackage() {
ApplicationInfo info;
try {
@@ -598,6 +560,13 @@ public class NotificationConversationInfo extends LinearLayout implements
!mChannelToUpdate.isImportantConversation());
if (mChannelToUpdate.isImportantConversation()) {
mChannelToUpdate.setAllowBubbles(true);
+ int currentPref =
+ mINotificationManager.getBubblePreferenceForPackage(
+ mAppPkg, mAppUid);
+ if (currentPref == BUBBLE_PREFERENCE_NONE) {
+ mINotificationManager.setBubblesAllowed(mAppPkg, mAppUid,
+ BUBBLE_PREFERENCE_SELECTED);
+ }
}
mChannelToUpdate.setImportance(Math.max(
mChannelToUpdate.getOriginalImportance(), IMPORTANCE_DEFAULT));
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
index d65f2c53598c..e56771c62bb5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
@@ -79,6 +79,7 @@ public class NotificationSnooze extends LinearLayout
private NotificationSwipeActionHelper mSnoozeListener;
private StatusBarNotification mSbn;
+ private View mSnoozeView;
private TextView mSelectedOptionText;
private TextView mUndoButton;
private ImageView mExpandButton;
@@ -122,7 +123,8 @@ public class NotificationSnooze extends LinearLayout
protected void onFinishInflate() {
super.onFinishInflate();
mCollapsedHeight = getResources().getDimensionPixelSize(R.dimen.snooze_snackbar_min_height);
- findViewById(R.id.notification_snooze).setOnClickListener(this);
+ mSnoozeView = findViewById(R.id.notification_snooze);
+ mSnoozeView.setOnClickListener(this);
mSelectedOptionText = (TextView) findViewById(R.id.snooze_option_default);
mUndoButton = (TextView) findViewById(R.id.undo);
mUndoButton.setOnClickListener(this);
@@ -147,16 +149,6 @@ public class NotificationSnooze extends LinearLayout
}
@Override
- public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(event);
- if (mGutsContainer != null && mGutsContainer.isExposed()) {
- if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
- event.getText().add(mSelectedOptionText.getText());
- }
- }
- }
-
- @Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.addAction(new AccessibilityAction(R.id.action_snooze_undo,
@@ -341,12 +333,22 @@ public class NotificationSnooze extends LinearLayout
mSelectedOptionText.setText(option.getConfirmation());
showSnoozeOptions(false);
hideSelectedOption();
- sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
if (userAction) {
+ mSnoozeView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
logOptionSelection(MetricsEvent.NOTIFICATION_SELECT_SNOOZE, option);
}
}
+ @Override
+ public boolean requestAccessibilityFocus() {
+ if (mExpanded) {
+ return super.requestAccessibilityFocus();
+ } else {
+ mSnoozeView.requestAccessibilityFocus();
+ return false;
+ }
+ }
+
private void logOptionSelection(int category, SnoozeOption option) {
int index = mSnoozeOptions.indexOf(option);
long duration = TimeUnit.MINUTES.toMillis(option.getMinutesToSnoozeFor());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java
index 6d6d3e446f53..9846f2dcd170 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java
@@ -25,7 +25,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
-import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder;
import com.android.systemui.statusbar.notification.row.RowContentBindStage;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -60,8 +59,6 @@ public interface ExpandableNotificationRowComponent {
@BindsInstance
Builder rowContentBindStage(RowContentBindStage rowContentBindStage);
@BindsInstance
- Builder inflationCallback(NotificationRowContentBinder.InflationCallback inflationCallback);
- @BindsInstance
Builder onExpandClickListener(ExpandableNotificationRow.OnExpandClickListener presenter);
ExpandableNotificationRowComponent build();
}
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 03021c2744f4..ed25db40fea6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -916,6 +916,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
@Override
+ public void setKeyguardGoingAwayState(boolean isKeyguardGoingAway) {
+ mNotificationShadeWindowController.setKeyguardGoingAway(isKeyguardGoingAway);
+ }
+
+ @Override
public void onCancelClicked() {
// No-op
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
index 79cea91b8612..aecbb9097c7a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
@@ -22,7 +22,6 @@ import static com.android.systemui.statusbar.phone.StatusBar.SPEW;
import android.annotation.Nullable;
import android.app.KeyguardManager;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.service.notification.StatusBarNotification;
@@ -355,8 +354,7 @@ public class StatusBarNotificationPresenter implements NotificationPresenter,
}
@Override
- public void onBindRow(NotificationEntry entry, PackageManager pmUser,
- StatusBarNotification sbn, ExpandableNotificationRow row) {
+ public void onBindRow(ExpandableNotificationRow row) {
row.setAboveShelfChangedListener(mAboveShelfObserver);
row.setSecureStateProvider(mKeyguardStateController::canDismissLockScreen);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
index e472de349466..2f5ef00056fb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
@@ -42,6 +42,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.IActivityManager;
+import android.app.INotificationManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.res.Resources;
@@ -273,7 +274,8 @@ public class BubbleControllerTest extends SysuiTestCase {
mFeatureFlagsOldPipeline,
mDumpManager,
mFloatingContentCoordinator,
- mSysUiState);
+ mSysUiState,
+ mock(INotificationManager.class));
mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);
mBubbleController.setExpandListener(mBubbleExpandListener);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
index 5f4f2ef04c1d..9da160c3820c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.IActivityManager;
+import android.app.INotificationManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.res.Resources;
@@ -250,7 +251,8 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
mFeatureFlagsNewPipeline,
mDumpManager,
mFloatingContentCoordinator,
- mSysUiState);
+ mSysUiState,
+ mock(INotificationManager.class));
mBubbleController.addNotifCallback(mNotifCallback);
mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);
mBubbleController.setExpandListener(mBubbleExpandListener);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java
index f4861028e81a..7815ae78823a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java
@@ -16,6 +16,7 @@
package com.android.systemui.bubbles;
+import android.app.INotificationManager;
import android.content.Context;
import com.android.systemui.dump.DumpManager;
@@ -54,12 +55,14 @@ public class TestableBubbleController extends BubbleController {
FeatureFlags featureFlags,
DumpManager dumpManager,
FloatingContentCoordinator floatingContentCoordinator,
- SysUiState sysUiState) {
+ SysUiState sysUiState,
+ INotificationManager notificationManager) {
super(context,
notificationShadeWindowController, statusBarStateController, shadeController,
data, Runnable::run, configurationController, interruptionStateProvider,
zenModeController, lockscreenUserManager, groupManager, entryManager,
- notifPipeline, featureFlags, dumpManager, floatingContentCoordinator, sysUiState);
+ notifPipeline, featureFlags, dumpManager, floatingContentCoordinator, sysUiState,
+ notificationManager);
setInflateSynchronously(true);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index 6871aad0ea98..24b128af9fbd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -43,7 +43,6 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.classifier.FalsingManagerFake;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.statusbar.phone.NavigationModeController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxyFake;
@@ -66,7 +65,6 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock LockPatternUtils mLockPatternUtils;
private @Mock KeyguardUpdateMonitor mUpdateMonitor;
private @Mock StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
- private @Mock NotificationShadeWindowController mNotificationShadeWindowController;
private @Mock BroadcastDispatcher mBroadcastDispatcher;
private @Mock DismissCallbackRegistry mDismissCallbackRegistry;
private @Mock DumpManager mDumpManager;
@@ -88,7 +86,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mViewMediator = new KeyguardViewMediator(
mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher,
- mNotificationShadeWindowController, () -> mStatusBarKeyguardViewManager,
+ () -> mStatusBarKeyguardViewManager,
mDismissCallbackRegistry, mUpdateMonitor, mDumpManager, mUiBgExecutor,
mPowerManager, mTrustManager, mDeviceConfig, mNavigationModeController);
mViewMediator.start();
@@ -98,18 +96,18 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
public void testOnGoingToSleep_UpdatesKeyguardGoingAway() {
mViewMediator.onStartedGoingToSleep(OFF_BECAUSE_OF_USER);
verify(mUpdateMonitor).setKeyguardGoingAway(false);
- verify(mNotificationShadeWindowController, never()).setKeyguardGoingAway(anyBoolean());
+ verify(mStatusBarKeyguardViewManager, never()).setKeyguardGoingAwayState(anyBoolean());
}
@Test
public void testRegisterDumpable() {
verify(mDumpManager).registerDumpable(KeyguardViewMediator.class.getName(), mViewMediator);
- verify(mNotificationShadeWindowController, never()).setKeyguardGoingAway(anyBoolean());
+ verify(mStatusBarKeyguardViewManager, never()).setKeyguardGoingAwayState(anyBoolean());
}
@Test
public void testKeyguardGone_notGoingaway() {
mViewMediator.mViewMediatorCallback.keyguardGone();
- verify(mNotificationShadeWindowController).setKeyguardGoingAway(eq(false));
+ verify(mStatusBarKeyguardViewManager).setKeyguardGoingAwayState(eq(false));
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt
deleted file mode 100644
index d522f903c83a..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.notification
-
-import com.android.systemui.statusbar.FeatureFlags
-import com.android.systemui.statusbar.NotificationPresenter
-import com.android.systemui.statusbar.NotificationRemoteInputManager
-import com.android.systemui.statusbar.notification.collection.NotificationEntry
-import com.android.systemui.statusbar.notification.collection.NotificationRankingManager
-import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder
-import com.android.systemui.statusbar.phone.NotificationGroupManager
-import com.android.systemui.util.leak.LeakDetector
-import java.util.concurrent.CountDownLatch
-
-/**
- * Enable some test capabilities for NEM without making everything public on the base class
- */
-class TestableNotificationEntryManager(
- logger: NotificationEntryManagerLogger,
- gm: NotificationGroupManager,
- rm: NotificationRankingManager,
- ke: KeyguardEnvironment,
- ff: FeatureFlags,
- rb: dagger.Lazy<NotificationRowBinder>,
- notificationRemoteInputManagerLazy: dagger.Lazy<NotificationRemoteInputManager>,
- leakDetector: LeakDetector,
- fgsFeatureController: ForegroundServiceDismissalFeatureController
-) : NotificationEntryManager(logger, gm, rm, ke, ff, rb,
- notificationRemoteInputManagerLazy, leakDetector, fgsFeatureController) {
-
- public var countDownLatch: CountDownLatch = CountDownLatch(1)
-
- override fun onAsyncInflationFinished(entry: NotificationEntry) {
- super.onAsyncInflationFinished(entry)
- countDownLatch.countDown()
- }
-
- fun setUpForTest(
- presenter: NotificationPresenter?
- ) {
- super.setUpWithPresenter(presenter)
- }
-
- fun setActiveNotificationList(activeList: List<NotificationEntry>) {
- mSortedAndFiltered.clear()
- mSortedAndFiltered.addAll(activeList)
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
index 6b9e43bcb290..35b31c01fd9c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -62,7 +63,6 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
private OnBeforeFinalizeFilterListener mBeforeFilterListener;
private NotifFilter mUninflatedFilter;
private NotifFilter mInflationErrorFilter;
- private NotifInflaterImpl.InflationCallback mCallback;
private NotifInflationErrorManager mErrorManager;
private NotificationEntry mEntry;
private Exception mInflationError;
@@ -104,9 +104,6 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
mBeforeFilterListenerCaptor.capture());
mBeforeFilterListener = mBeforeFilterListenerCaptor.getValue();
- verify(mNotifInflater).setInflationCallback(mCallbackCaptor.capture());
- mCallback = mCallbackCaptor.getValue();
-
mCollectionListener.onEntryInit(mEntry);
}
@@ -142,7 +139,7 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
mBeforeFilterListener.onBeforeFinalizeFilter(List.of(mEntry));
// THEN we inflate it
- verify(mNotifInflater).inflateViews(mEntry);
+ verify(mNotifInflater).inflateViews(eq(mEntry), any());
// THEN we filter it out until it's done inflating.
assertTrue(mUninflatedFilter.shouldFilterOut(mEntry, 0));
@@ -151,14 +148,17 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
@Test
public void testRebindsInflatedNotificationsOnUpdate() {
// GIVEN an inflated notification
- mCallback.onInflationFinished(mEntry);
+ mCollectionListener.onEntryAdded(mEntry);
+ mBeforeFilterListener.onBeforeFinalizeFilter(List.of(mEntry));
+ verify(mNotifInflater).inflateViews(eq(mEntry), mCallbackCaptor.capture());
+ mCallbackCaptor.getValue().onInflationFinished(mEntry);
// WHEN notification is updated
mCollectionListener.onEntryUpdated(mEntry);
mBeforeFilterListener.onBeforeFinalizeFilter(List.of(mEntry));
// THEN we rebind it
- verify(mNotifInflater).rebindViews(mEntry);
+ verify(mNotifInflater).rebindViews(eq(mEntry), any());
// THEN we do not filter it because it's not the first inflation.
assertFalse(mUninflatedFilter.shouldFilterOut(mEntry, 0));
@@ -166,8 +166,11 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
@Test
public void testDoesntFilterInflatedNotifs() {
- // WHEN a notification is inflated
- mCallback.onInflationFinished(mEntry);
+ // GIVEN an inflated notification
+ mCollectionListener.onEntryAdded(mEntry);
+ mBeforeFilterListener.onBeforeFinalizeFilter(List.of(mEntry));
+ verify(mNotifInflater).inflateViews(eq(mEntry), mCallbackCaptor.capture());
+ mCallbackCaptor.getValue().onInflationFinished(mEntry);
// THEN it isn't filtered from shade list
assertFalse(mUninflatedFilter.shouldFilterOut(mEntry, 0));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
index 1c6e5a36bd8a..855f524db3f8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
@@ -23,7 +23,6 @@ import static com.android.systemui.statusbar.notification.row.NotificationRowCon
import static junit.framework.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -216,9 +215,6 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
.onDismissRunnable(any()))
.thenReturn(mExpandableNotificationRowComponentBuilder);
when(mExpandableNotificationRowComponentBuilder
- .inflationCallback(any()))
- .thenReturn(mExpandableNotificationRowComponentBuilder);
- when(mExpandableNotificationRowComponentBuilder
.rowContentBindStage(any()))
.thenReturn(mExpandableNotificationRowComponentBuilder);
when(mExpandableNotificationRowComponentBuilder
@@ -243,7 +239,6 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
mHeadsUpManager,
mPresenter,
mStatusBarStateController,
- mEntryManager,
mGutsManager,
true,
null,
@@ -275,7 +270,6 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
mEntryManager.addNotificationEntryListener(mEntryListener);
mRowBinder.setUpWithPresenter(mPresenter, mListContainer, mBindCallback);
- mRowBinder.setInflationCallback(mEntryManager);
mRowBinder.setNotificationClicker(mock(NotificationClicker.class));
Ranking ranking = new Ranking();
@@ -330,7 +324,7 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
assertNotNull(entry.getRow().getPrivateLayout().getContractedChild());
// THEN inflation callbacks are called
- verify(mBindCallback).onBindRow(eq(entry), any(), eq(mSbn), any());
+ verify(mBindCallback).onBindRow(entry.getRow());
verify(mEntryListener, never()).onInflationError(any(), any());
verify(mEntryListener).onEntryInflated(entry);
verify(mEntryListener).onNotificationAdded(entry);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index ef2071ef090e..657bc8d614cf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -69,7 +69,6 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
import com.android.systemui.statusbar.notification.NotificationFilter;
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager;
-import com.android.systemui.statusbar.notification.TestableNotificationEntryManager;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -138,7 +137,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
@Mock private NotificationLockscreenUserManager mLockscreenUserManager;
@Mock private FeatureFlags mFeatureFlags;
private UserChangedListener mUserChangedListener;
- private TestableNotificationEntryManager mEntryManager;
+ private NotificationEntryManager mEntryManager;
private int mOriginalInterruptionModelSetting;
private UiEventLoggerFake mUiEventLoggerFake = new UiEventLoggerFake();
@@ -167,7 +166,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
ArgumentCaptor<UserChangedListener> userChangedCaptor = ArgumentCaptor
.forClass(UserChangedListener.class);
- mEntryManager = new TestableNotificationEntryManager(
+ mEntryManager = new NotificationEntryManager(
mock(NotificationEntryManagerLogger.class),
mock(NotificationGroupManager.class),
new NotificationRankingManager(
@@ -187,7 +186,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
mock(LeakDetector.class),
mock(ForegroundServiceDismissalFeatureController.class)
);
- mEntryManager.setUpForTest(mock(NotificationPresenter.class));
+ mEntryManager.setUpWithPresenter(mock(NotificationPresenter.class));
when(mFeatureFlags.isNewNotifPipelineRenderingEnabled()).thenReturn(false);
NotificationShelf notificationShelf = mock(NotificationShelf.class);
diff --git a/packages/Tethering/AndroidManifest.xml b/packages/Tethering/AndroidManifest.xml
index 9328611f5d3f..1dc8227e81f4 100644
--- a/packages/Tethering/AndroidManifest.xml
+++ b/packages/Tethering/AndroidManifest.xml
@@ -43,8 +43,9 @@
android:process="com.android.networkstack.process"
android:extractNativeLibs="false"
android:persistent="true">
- <service android:name="com.android.server.connectivity.tethering.TetheringService"
- android:permission="android.permission.MAINLINE_NETWORK_STACK">
+ <service android:name="com.android.networkstack.tethering.TetheringService"
+ android:permission="android.permission.MAINLINE_NETWORK_STACK"
+ android:exported="true">
<intent-filter>
<action android:name="android.net.ITetheringConnector"/>
</intent-filter>
diff --git a/packages/Tethering/AndroidManifest_InProcess.xml b/packages/Tethering/AndroidManifest_InProcess.xml
index 02ea551254b9..b1f124097c79 100644
--- a/packages/Tethering/AndroidManifest_InProcess.xml
+++ b/packages/Tethering/AndroidManifest_InProcess.xml
@@ -22,9 +22,10 @@
android:process="system">
<uses-sdk android:minSdkVersion="29" android:targetSdkVersion="29" />
<application>
- <service android:name="com.android.server.connectivity.tethering.TetheringService"
+ <service android:name="com.android.networkstack.tethering.TetheringService"
android:process="system"
- android:permission="android.permission.MAINLINE_NETWORK_STACK">
+ android:permission="android.permission.MAINLINE_NETWORK_STACK"
+ android:exported="true">
<intent-filter>
<action android:name="android.net.ITetheringConnector.InProcess"/>
</intent-filter>
diff --git a/packages/Tethering/proguard.flags b/packages/Tethering/proguard.flags
index 1f83a663827c..051fbd19fc6c 100644
--- a/packages/Tethering/proguard.flags
+++ b/packages/Tethering/proguard.flags
@@ -1,5 +1,5 @@
# Keep class's integer static field for MessageUtils to parsing their name.
--keep class com.android.server.connectivity.tethering.Tethering$TetherMasterSM {
+-keep class com.android.networkstack.tethering.Tethering$TetherMasterSM {
static final int CMD_*;
static final int EVENT_*;
}
diff --git a/packages/Tethering/res/values/config.xml b/packages/Tethering/res/values/config.xml
index 04d6215dce96..430fdc42284d 100644
--- a/packages/Tethering/res/values/config.xml
+++ b/packages/Tethering/res/values/config.xml
@@ -89,7 +89,7 @@
TYPE_MOBILE_HIPRI is appended.
For other changes applied to this list, now and in the future, see
- com.android.server.connectivity.tethering.TetheringConfiguration.
+ com.android.networkstack.tethering.TetheringConfiguration.
Note also: the order of this is important. The first upstream type
for which a satisfying network exists is used.
diff --git a/packages/Tethering/src/android/net/ip/IpServer.java b/packages/Tethering/src/android/net/ip/IpServer.java
index 1dac5b784649..83727bcdc67e 100644
--- a/packages/Tethering/src/android/net/ip/IpServer.java
+++ b/packages/Tethering/src/android/net/ip/IpServer.java
@@ -122,6 +122,8 @@ public class IpServer extends StateMachine {
// TODO: have this configurable
private static final int DHCP_LEASE_TIME_SECS = 3600;
+ private static final MacAddress NULL_MAC_ADDRESS = MacAddress.fromString("00:00:00:00:00:00");
+
private static final String TAG = "IpServer";
private static final boolean DBG = false;
private static final boolean VDBG = false;
@@ -902,9 +904,12 @@ public class IpServer extends StateMachine {
return;
}
+ // When deleting rules, we still need to pass a non-null MAC, even though it's ignored.
+ // Do this here instead of in the Ipv6ForwardingRule constructor to ensure that we never
+ // add rules with a null MAC, only delete them.
+ MacAddress dstMac = e.isValid() ? e.macAddr : NULL_MAC_ADDRESS;
Ipv6ForwardingRule rule = new Ipv6ForwardingRule(upstreamIfindex,
- mInterfaceParams.index, (Inet6Address) e.ip, mInterfaceParams.macAddr,
- e.macAddr);
+ mInterfaceParams.index, (Inet6Address) e.ip, mInterfaceParams.macAddr, dstMac);
if (e.isValid()) {
addIpv6ForwardingRule(rule);
} else {
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/ConnectedClientsTracker.java b/packages/Tethering/src/com/android/networkstack/tethering/ConnectedClientsTracker.java
index cdd1a5d97823..8a96988ae1d1 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/ConnectedClientsTracker.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/ConnectedClientsTracker.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.TetheringManager.TETHERING_WIFI;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/EntitlementManager.java b/packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java
index 639cf65d7936..4c7b2d49ee9a 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/EntitlementManager.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.TetheringConstants.EXTRA_ADD_TETHER_TYPE;
import static android.net.TetheringConstants.EXTRA_PROVISION_CALLBACK;
@@ -52,7 +52,6 @@ import android.util.SparseIntArray;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.StateMachine;
-import com.android.networkstack.tethering.R;
import java.io.PrintWriter;
@@ -71,7 +70,7 @@ public class EntitlementManager {
@VisibleForTesting
protected static final String DISABLE_PROVISIONING_SYSPROP_KEY = "net.tethering.noprovisioning";
private static final String ACTION_PROVISIONING_ALARM =
- "com.android.server.connectivity.tethering.PROVISIONING_RECHECK_ALARM";
+ "com.android.networkstack.tethering.PROVISIONING_RECHECK_ALARM";
private static final String EXTRA_SUBID = "subId";
private final ComponentName mSilentProvisioningService;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java b/packages/Tethering/src/com/android/networkstack/tethering/IPv6TetheringCoordinator.java
index 66b9ade81019..d450c46de718 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/IPv6TetheringCoordinator.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import android.net.IpPrefix;
import android.net.LinkAddress;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadController.java b/packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java
index 15cdb6ad7a8e..c007c174fe4f 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadController.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
import static android.net.NetworkStats.METERED_NO;
@@ -50,7 +50,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.IndentingPrintWriter;
-import com.android.server.connectivity.tethering.OffloadHardwareInterface.ForwardedStats;
+import com.android.networkstack.tethering.OffloadHardwareInterface.ForwardedStats;
import java.net.Inet4Address;
import java.net.Inet6Address;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java b/packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java
index b54571720857..85a23fb83fb2 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.util.TetheringUtils.uint16;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java b/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java
index 4b2c9215f7b7..f3cead92be7e 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.Manifest.permission.NETWORK_SETTINGS;
import static android.Manifest.permission.NETWORK_STACK;
@@ -60,7 +60,7 @@ import static android.net.wifi.WifiManager.WIFI_AP_STATE_DISABLED;
import static android.telephony.CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-import static com.android.server.connectivity.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE;
+import static com.android.networkstack.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE;
import android.app.usage.NetworkStatsManager;
import android.bluetooth.BluetoothAdapter;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringConfiguration.java b/packages/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java
index 7e9e26f5af40..aeac437e24e3 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringConfiguration.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.content.Context.TELEPHONY_SERVICE;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
@@ -33,7 +33,6 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.networkstack.tethering.R;
import java.io.PrintWriter;
import java.util.ArrayList;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringDependencies.java b/packages/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java
index 0330dad6a1ae..893c5823dce1 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringDependencies.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringInterfaceUtils.java b/packages/Tethering/src/com/android/networkstack/tethering/TetheringInterfaceUtils.java
index 4dd68301f9fa..ff38f717a121 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringInterfaceUtils.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/TetheringInterfaceUtils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import android.annotation.Nullable;
import android.net.LinkProperties;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringNotificationUpdater.java b/packages/Tethering/src/com/android/networkstack/tethering/TetheringNotificationUpdater.java
index 992cdd8de6a7..42870560cb5e 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringNotificationUpdater.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/TetheringNotificationUpdater.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.TetheringManager.TETHERING_BLUETOOTH;
import static android.net.TetheringManager.TETHERING_USB;
@@ -41,7 +41,6 @@ import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.networkstack.tethering.R;
/**
* A class to display tethering-related notifications.
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringService.java b/packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java
index c30be25dbd22..3ed211520db6 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/TetheringService.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.net.TetheringManager.TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/packages/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java
index 45bb4ab6e5f7..25ddce4404e4 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.ConnectivityManager.TYPE_BLUETOOTH;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/UpstreamNetworkState.java b/packages/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkState.java
index 68bb83759368..bab9f84cf762 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/UpstreamNetworkState.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkState.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import android.net.LinkProperties;
import android.net.Network;
diff --git a/packages/Tethering/tests/unit/AndroidManifest.xml b/packages/Tethering/tests/unit/AndroidManifest.xml
index 4ff1d3777f25..55640db69324 100644
--- a/packages/Tethering/tests/unit/AndroidManifest.xml
+++ b/packages/Tethering/tests/unit/AndroidManifest.xml
@@ -21,11 +21,11 @@
<application android:debuggable="true">
<uses-library android:name="android.test.runner" />
<service
- android:name="com.android.server.connectivity.tethering.MockTetheringService"
+ android:name="com.android.networkstack.tethering.MockTetheringService"
android:permission="android.permission.TETHER_PRIVILEGED"
android:exported="true">
<intent-filter>
- <action android:name="com.android.server.connectivity.tethering.TetheringService"/>
+ <action android:name="com.android.networkstack.tethering.TetheringService"/>
</intent-filter>
</service>
</application>
diff --git a/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java b/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java
index fdfdae837d51..f9be7b9d3664 100644
--- a/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java
+++ b/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java
@@ -587,6 +587,7 @@ public class IpServerTest {
final InetAddress neighB = InetAddresses.parseNumericAddress("2001:db8::2");
final InetAddress neighLL = InetAddresses.parseNumericAddress("fe80::1");
final InetAddress neighMC = InetAddresses.parseNumericAddress("ff02::1234");
+ final MacAddress macNull = MacAddress.fromString("00:00:00:00:00:00");
final MacAddress macA = MacAddress.fromString("00:00:00:00:00:0a");
final MacAddress macB = MacAddress.fromString("11:22:33:00:00:0b");
@@ -612,13 +613,14 @@ public class IpServerTest {
verifyNoMoreInteractions(mNetd);
// A neighbor that is no longer valid causes the rule to be removed.
- recvNewNeigh(myIfindex, neighA, NUD_FAILED, macA);
- verify(mNetd).tetherOffloadRuleRemove(matches(UPSTREAM_IFINDEX, neighA, macA));
+ // NUD_FAILED events do not have a MAC address.
+ recvNewNeigh(myIfindex, neighA, NUD_FAILED, null);
+ verify(mNetd).tetherOffloadRuleRemove(matches(UPSTREAM_IFINDEX, neighA, macNull));
reset(mNetd);
// A neighbor that is deleted causes the rule to be removed.
recvDelNeigh(myIfindex, neighB, NUD_STALE, macB);
- verify(mNetd).tetherOffloadRuleRemove(matches(UPSTREAM_IFINDEX, neighB, macB));
+ verify(mNetd).tetherOffloadRuleRemove(matches(UPSTREAM_IFINDEX, neighB, macNull));
reset(mNetd);
// Upstream changes result in deleting and re-adding the rules.
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/ConnectedClientsTrackerTest.kt b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/ConnectedClientsTrackerTest.kt
index 1cdc3bbb9933..d915354b0c37 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/ConnectedClientsTrackerTest.kt
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/ConnectedClientsTrackerTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering
+package com.android.networkstack.tethering
import android.net.LinkAddress
import android.net.MacAddress
@@ -159,4 +159,4 @@ class ConnectedClientsTrackerTest {
return time
}
}
-} \ No newline at end of file
+}
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/EntitlementManagerTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
index 6695eed0ff65..8bd0edc2490d 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/EntitlementManagerTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.TetheringManager.TETHERING_BLUETOOTH;
import static android.net.TetheringManager.TETHERING_ETHERNET;
@@ -59,7 +59,6 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.internal.util.test.BroadcastInterceptingContext;
-import com.android.networkstack.tethering.R;
import org.junit.After;
import org.junit.Before;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/IPv6TetheringCoordinatorTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/IPv6TetheringCoordinatorTest.java
index 912124357ca8..820f25514532 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/IPv6TetheringCoordinatorTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/IPv6TetheringCoordinatorTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.RouteInfo.RTN_UNICAST;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/MockTetheringService.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/MockTetheringService.java
index 355ece9a44a1..1c81c1247ded 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/MockTetheringService.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/MockTetheringService.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static org.mockito.Mockito.mock;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/OffloadControllerTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java
index fe840864fb99..65797200fa92 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/OffloadControllerTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
import static android.net.NetworkStats.METERED_NO;
@@ -26,9 +26,9 @@ import static android.net.NetworkStats.UID_TETHERING;
import static android.net.RouteInfo.RTN_UNICAST;
import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED;
-import static com.android.server.connectivity.tethering.OffloadController.StatsType.STATS_PER_IFACE;
-import static com.android.server.connectivity.tethering.OffloadController.StatsType.STATS_PER_UID;
-import static com.android.server.connectivity.tethering.OffloadHardwareInterface.ForwardedStats;
+import static com.android.networkstack.tethering.OffloadController.StatsType.STATS_PER_IFACE;
+import static com.android.networkstack.tethering.OffloadController.StatsType.STATS_PER_UID;
+import static com.android.networkstack.tethering.OffloadHardwareInterface.ForwardedStats;
import static com.android.testutils.MiscAssertsKt.assertContainsAll;
import static com.android.testutils.MiscAssertsKt.assertThrows;
import static com.android.testutils.NetworkStatsUtilsKt.orderInsensitiveEquals;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringConfigurationTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java
index 3635964dd6a6..07ddea43f4e8 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringConfigurationTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_MOBILE;
@@ -44,7 +44,6 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.test.BroadcastInterceptingContext;
-import com.android.networkstack.tethering.R;
import org.junit.After;
import org.junit.Before;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringNotificationUpdaterTest.kt b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringNotificationUpdaterTest.kt
index b86949185c69..7bff74b25d94 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringNotificationUpdaterTest.kt
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringNotificationUpdaterTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering
+package com.android.networkstack.tethering
import android.app.Notification
import android.app.NotificationManager
@@ -29,8 +29,7 @@ import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.android.internal.util.test.BroadcastInterceptingContext
-import com.android.networkstack.tethering.R
-import com.android.server.connectivity.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE
+import com.android.networkstack.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
@@ -259,4 +258,4 @@ class TetheringNotificationUpdaterTest {
notificationUpdater.notifyTetheringDisabledByRestriction()
verifyNotification(R.drawable.stat_sys_tether_general, disallowTitle, disallowMessage)
}
-} \ No newline at end of file
+}
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringServiceTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringServiceTest.java
index d9d3e73eb4e3..51bad9af23ef 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringServiceTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringServiceTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.TetheringManager.TETHERING_WIFI;
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
@@ -37,7 +37,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.rule.ServiceTestRule;
import androidx.test.runner.AndroidJUnit4;
-import com.android.server.connectivity.tethering.MockTetheringService.MockTetheringConnector;
+import com.android.networkstack.tethering.MockTetheringService.MockTetheringConnector;
import org.junit.After;
import org.junit.Before;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java
index 2955903c84f5..d4be3a26d958 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.hardware.usb.UsbManager.USB_CONFIGURED;
import static android.hardware.usb.UsbManager.USB_CONNECTED;
@@ -47,7 +47,7 @@ import static android.net.wifi.WifiManager.IFACE_IP_MODE_TETHERED;
import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-import static com.android.server.connectivity.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE;
+import static com.android.networkstack.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
@@ -137,7 +137,6 @@ import com.android.internal.util.ArrayUtils;
import com.android.internal.util.StateMachine;
import com.android.internal.util.test.BroadcastInterceptingContext;
import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.networkstack.tethering.R;
import com.android.testutils.MiscAssertsKt;
import org.junit.After;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java
index 7c98f626a4d2..232588c7eec0 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.connectivity.tethering;
+package com.android.networkstack.tethering;
import static android.net.ConnectivityManager.TYPE_MOBILE_DUN;
import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI;
@@ -24,7 +24,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
-import static com.android.server.connectivity.tethering.UpstreamNetworkMonitor.TYPE_NONE;
+import static com.android.networkstack.tethering.UpstreamNetworkMonitor.TYPE_NONE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
diff --git a/packages/VpnDialogs/res/values-my/strings.xml b/packages/VpnDialogs/res/values-my/strings.xml
index 9d60ff42a7cd..a949fae1f74e 100644
--- a/packages/VpnDialogs/res/values-my/strings.xml
+++ b/packages/VpnDialogs/res/values-my/strings.xml
@@ -30,7 +30,7 @@
<string name="always_on_disconnected_message_separator" msgid="3310614409322581371">" "</string>
<string name="always_on_disconnected_message_settings_link" msgid="6172280302829992412">"VPN ဆက်တင်များ ပြောင်းရန်"</string>
<string name="configure" msgid="4905518375574791375">"ပုံပေါ်စေသည်"</string>
- <string name="disconnect" msgid="971412338304200056">"ချိတ်ဆက်ခြင်းရပ်ရန်"</string>
+ <string name="disconnect" msgid="971412338304200056">"ချိတ်ဆက်မှုဖြုတ်ရန်"</string>
<string name="open_app" msgid="3717639178595958667">"အက်ပ်ကို ဖွင့်ရန်"</string>
<string name="dismiss" msgid="6192859333764711227">"ပယ်ရန်"</string>
</resources>
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index d1805d96cad8..1bc026cd3b19 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -815,26 +815,27 @@ final class AutofillManagerServiceImpl
}
}
- void logAugmentedAutofillSelected(int sessionId, @Nullable String suggestionId) {
+ void logAugmentedAutofillSelected(int sessionId, @Nullable String suggestionId,
+ @Nullable Bundle clientState) {
synchronized (mLock) {
if (mAugmentedAutofillEventHistory == null
|| mAugmentedAutofillEventHistory.getSessionId() != sessionId) {
return;
}
mAugmentedAutofillEventHistory.addEvent(
- new Event(Event.TYPE_DATASET_SELECTED, suggestionId, null, null, null,
+ new Event(Event.TYPE_DATASET_SELECTED, suggestionId, clientState, null, null,
null, null, null, null, null, null));
}
}
- void logAugmentedAutofillShown(int sessionId) {
+ void logAugmentedAutofillShown(int sessionId, @Nullable Bundle clientState) {
synchronized (mLock) {
if (mAugmentedAutofillEventHistory == null
|| mAugmentedAutofillEventHistory.getSessionId() != sessionId) {
return;
}
mAugmentedAutofillEventHistory.addEvent(
- new Event(Event.TYPE_DATASETS_SHOWN, null, null, null, null, null,
+ new Event(Event.TYPE_DATASETS_SHOWN, null, clientState, null, null, null,
null, null, null, null, null));
}
@@ -1185,15 +1186,16 @@ final class AutofillManagerServiceImpl
}
@Override
- public void logAugmentedAutofillShown(int sessionId) {
- AutofillManagerServiceImpl.this.logAugmentedAutofillShown(sessionId);
+ public void logAugmentedAutofillShown(int sessionId, Bundle clientState) {
+ AutofillManagerServiceImpl.this.logAugmentedAutofillShown(sessionId,
+ clientState);
}
@Override
public void logAugmentedAutofillSelected(int sessionId,
- String suggestionId) {
+ String suggestionId, Bundle clientState) {
AutofillManagerServiceImpl.this.logAugmentedAutofillSelected(sessionId,
- suggestionId);
+ suggestionId, clientState);
}
@Override
diff --git a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
index b6bc7c5646a5..6cec8d82f9d4 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
@@ -168,12 +168,12 @@ final class RemoteAugmentedAutofillService
focusedId, focusedValue, requestTime, inlineSuggestionsRequest,
new IFillCallback.Stub() {
@Override
- public void onSuccess(
- @Nullable List<Dataset> inlineSuggestionsData) {
+ public void onSuccess(@Nullable List<Dataset> inlineSuggestionsData,
+ @Nullable Bundle clientState) {
mCallbacks.resetLastResponse();
maybeRequestShowInlineSuggestions(sessionId,
inlineSuggestionsRequest, inlineSuggestionsData,
- focusedId, inlineSuggestionsCallback,
+ clientState, focusedId, inlineSuggestionsCallback,
client, onErrorCallback, remoteRenderService);
requestAutofill.complete(null);
}
@@ -238,7 +238,8 @@ final class RemoteAugmentedAutofillService
private void maybeRequestShowInlineSuggestions(int sessionId,
@Nullable InlineSuggestionsRequest request,
- @Nullable List<Dataset> inlineSuggestionsData, @NonNull AutofillId focusedId,
+ @Nullable List<Dataset> inlineSuggestionsData, @Nullable Bundle clientState,
+ @NonNull AutofillId focusedId,
@Nullable Function<InlineSuggestionsResponse, Boolean> inlineSuggestionsCallback,
@NonNull IAutoFillManagerClient client, @NonNull Runnable onErrorCallback,
@Nullable RemoteInlineSuggestionRenderService remoteRenderService) {
@@ -256,7 +257,7 @@ final class RemoteAugmentedAutofillService
@Override
public void autofill(Dataset dataset) {
mCallbacks.logAugmentedAutofillSelected(sessionId,
- dataset.getId());
+ dataset.getId(), clientState);
try {
final ArrayList<AutofillId> fieldIds = dataset.getFieldIds();
final int size = fieldIds.size();
@@ -287,7 +288,7 @@ final class RemoteAugmentedAutofillService
return;
}
if (inlineSuggestionsCallback.apply(inlineSuggestionsResponse)) {
- mCallbacks.logAugmentedAutofillShown(sessionId);
+ mCallbacks.logAugmentedAutofillShown(sessionId, clientState);
}
}
@@ -310,8 +311,9 @@ final class RemoteAugmentedAutofillService
void setLastResponse(int sessionId);
- void logAugmentedAutofillShown(int sessionId);
+ void logAugmentedAutofillShown(int sessionId, @Nullable Bundle clientState);
- void logAugmentedAutofillSelected(int sessionId, @Nullable String suggestionId);
+ void logAugmentedAutofillSelected(int sessionId, @Nullable String suggestionId,
+ @Nullable Bundle clientState);
}
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 51427c191aa7..1a58d6047bd7 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -2151,7 +2151,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
private boolean checkNetworkSignalStrengthWakeupPermission(int pid, int uid) {
return checkAnyPermissionOf(pid, uid,
android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP,
- NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
+ NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
+ android.Manifest.permission.NETWORK_SETTINGS);
}
private void enforceConnectivityRestrictedNetworksPermission() {
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index b0a586d122ea..14fe0c5e3c22 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -3215,10 +3215,14 @@ class StorageManagerService extends IStorageManager.Stub
@Override
public void unlockUserKey(int userId, int serialNumber, byte[] token, byte[] secret) {
- Slog.d(TAG, "unlockUserKey: " + userId);
+ boolean isFsEncrypted = StorageManager.isFileEncryptedNativeOrEmulated();
+ Slog.d(TAG, "unlockUserKey: " + userId
+ + " isFileEncryptedNativeOrEmulated: " + isFsEncrypted
+ + " hasToken: " + (token != null)
+ + " hasSecret: " + (secret != null));
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
- if (StorageManager.isFileEncryptedNativeOrEmulated()) {
+ if (isFsEncrypted) {
try {
mVold.unlockUserKey(userId, serialNumber, encodeBytes(token),
encodeBytes(secret));
diff --git a/services/core/java/com/android/server/attention/AttentionManagerService.java b/services/core/java/com/android/server/attention/AttentionManagerService.java
index 50ec0400a729..e8acbd493180 100644
--- a/services/core/java/com/android/server/attention/AttentionManagerService.java
+++ b/services/core/java/com/android/server/attention/AttentionManagerService.java
@@ -165,7 +165,7 @@ public class AttentionManagerService extends SystemService {
* Returns {@code true} if attention service is supported on this device.
*/
private boolean isAttentionServiceSupported() {
- return isServiceEnabled() && isServiceAvailable();
+ return isServiceEnabled() && isServiceConfigured(mContext);
}
@VisibleForTesting
@@ -210,6 +210,11 @@ public class AttentionManagerService extends SystemService {
return false;
}
+ if (!isServiceAvailable()) {
+ Slog.w(LOG_TAG, "Service is not available at this moment.");
+ return false;
+ }
+
// don't allow attention check in screen off state
if (!mPowerManager.isInteractive()) {
return false;
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 02d8571c2dcd..ae22e69f5b1b 100644..100755
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -8419,6 +8419,23 @@ public class AudioService extends IAudioService.Stub
}
//======================
+ // Multi Audio Focus
+ //======================
+ public void setMultiAudioFocusEnabled(boolean enabled) {
+ enforceModifyAudioRoutingPermission();
+ if (mMediaFocusControl != null) {
+ boolean mafEnabled = mMediaFocusControl.getMultiAudioFocusEnabled();
+ if (mafEnabled != enabled) {
+ mMediaFocusControl.updateMultiAudioFocus(enabled);
+ if (!enabled) {
+ mDeviceBroker.postBroadcastBecomingNoisy();
+ }
+ }
+ }
+ }
+
+
+ //======================
// misc
//======================
private final HashMap<IBinder, AudioPolicyProxy> mAudioPolicies =
diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java
index 7bf2bc842176..bfab9919258c 100644..100755
--- a/services/core/java/com/android/server/audio/MediaFocusControl.java
+++ b/services/core/java/com/android/server/audio/MediaFocusControl.java
@@ -30,6 +30,7 @@ import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
+import android.provider.Settings;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
@@ -80,6 +81,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
private final Context mContext;
private final AppOpsManager mAppOps;
private PlayerFocusEnforcer mFocusEnforcer; // never null
+ private boolean mMultiAudioFocusEnabled = false;
private boolean mRingOrCallActive = false;
@@ -91,6 +93,8 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
mContext = cntxt;
mAppOps = (AppOpsManager)mContext.getSystemService(Context.APP_OPS_SERVICE);
mFocusEnforcer = pfe;
+ mMultiAudioFocusEnabled = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.MULTI_AUDIO_FOCUS_ENABLED, 0) != 0;
}
protected void dump(PrintWriter pw) {
@@ -100,6 +104,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
pw.println("\n");
// log
mEventLogger.dump(pw);
+ dumpMultiAudioFocus(pw);
}
//=================================================================
@@ -194,6 +199,14 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
mFocusStack.peek().handleFocusGain(AudioManager.AUDIOFOCUS_GAIN);
}
}
+
+ if (mMultiAudioFocusEnabled && !mMultiAudioFocusList.isEmpty()) {
+ for (FocusRequester multifr : mMultiAudioFocusList) {
+ if (isLockedFocusOwner(multifr)) {
+ multifr.handleFocusGain(AudioManager.AUDIOFOCUS_GAIN);
+ }
+ }
+ }
}
/**
@@ -203,17 +216,30 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
*/
@GuardedBy("mAudioFocusLock")
private void propagateFocusLossFromGain_syncAf(int focusGain, final FocusRequester fr,
- boolean forceDuck) {
+ boolean forceDuck) {
final List<String> clientsToRemove = new LinkedList<String>();
// going through the audio focus stack to signal new focus, traversing order doesn't
// matter as all entries respond to the same external focus gain
- for (FocusRequester focusLoser : mFocusStack) {
- final boolean isDefinitiveLoss =
- focusLoser.handleFocusLossFromGain(focusGain, fr, forceDuck);
- if (isDefinitiveLoss) {
- clientsToRemove.add(focusLoser.getClientId());
+ if (!mFocusStack.empty()) {
+ for (FocusRequester focusLoser : mFocusStack) {
+ final boolean isDefinitiveLoss =
+ focusLoser.handleFocusLossFromGain(focusGain, fr, forceDuck);
+ if (isDefinitiveLoss) {
+ clientsToRemove.add(focusLoser.getClientId());
+ }
}
}
+
+ if (mMultiAudioFocusEnabled && !mMultiAudioFocusList.isEmpty()) {
+ for (FocusRequester multifocusLoser : mMultiAudioFocusList) {
+ final boolean isDefinitiveLoss =
+ multifocusLoser.handleFocusLossFromGain(focusGain, fr, forceDuck);
+ if (isDefinitiveLoss) {
+ clientsToRemove.add(multifocusLoser.getClientId());
+ }
+ }
+ }
+
for (String clientToRemove : clientsToRemove) {
removeFocusStackEntry(clientToRemove, false /*signal*/,
true /*notifyFocusFollowers*/);
@@ -222,6 +248,8 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
private final Stack<FocusRequester> mFocusStack = new Stack<FocusRequester>();
+ ArrayList<FocusRequester> mMultiAudioFocusList = new ArrayList<FocusRequester>();
+
/**
* Helper function:
* Display in the log the current entries in the audio focus stack
@@ -287,6 +315,22 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
}
}
}
+
+ if (mMultiAudioFocusEnabled && !mMultiAudioFocusList.isEmpty()) {
+ Iterator<FocusRequester> listIterator = mMultiAudioFocusList.iterator();
+ while (listIterator.hasNext()) {
+ FocusRequester fr = listIterator.next();
+ if (fr.hasSameClient(clientToRemove)) {
+ listIterator.remove();
+ fr.release();
+ }
+ }
+
+ if (signal) {
+ // notify the new top of the stack it gained focus
+ notifyTopOfAudioFocusStack();
+ }
+ }
}
/**
@@ -410,6 +454,16 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
removeFocusEntryForExtPolicy(mCb);
} else {
removeFocusStackEntryOnDeath(mCb);
+ if (mMultiAudioFocusEnabled && !mMultiAudioFocusList.isEmpty()) {
+ Iterator<FocusRequester> listIterator = mMultiAudioFocusList.iterator();
+ while (listIterator.hasNext()) {
+ FocusRequester fr = listIterator.next();
+ if (fr.hasSameBinder(mCb)) {
+ listIterator.remove();
+ fr.release();
+ }
+ }
+ }
}
}
}
@@ -867,6 +921,35 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
final FocusRequester nfr = new FocusRequester(aa, focusChangeHint, flags, fd, cb,
clientId, afdh, callingPackageName, Binder.getCallingUid(), this, sdk);
+
+ if (mMultiAudioFocusEnabled
+ && (focusChangeHint == AudioManager.AUDIOFOCUS_GAIN)) {
+ if (enteringRingOrCall) {
+ if (!mMultiAudioFocusList.isEmpty()) {
+ for (FocusRequester multifr : mMultiAudioFocusList) {
+ multifr.handleFocusLossFromGain(focusChangeHint, nfr, forceDuck);
+ }
+ }
+ } else {
+ boolean needAdd = true;
+ if (!mMultiAudioFocusList.isEmpty()) {
+ for (FocusRequester multifr : mMultiAudioFocusList) {
+ if (multifr.getClientUid() == Binder.getCallingUid()) {
+ needAdd = false;
+ break;
+ }
+ }
+ }
+ if (needAdd) {
+ mMultiAudioFocusList.add(nfr);
+ }
+ nfr.handleFocusGainFromRequest(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
+ notifyExtPolicyFocusGrant_syncAf(nfr.toAudioFocusInfo(),
+ AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
+ return AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+ }
+ }
+
if (focusGrantDelayed) {
// focusGrantDelayed being true implies we can't reassign focus right now
// which implies the focus stack is not empty.
@@ -877,9 +960,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
return requestResult;
} else {
// propagate the focus change through the stack
- if (!mFocusStack.empty()) {
- propagateFocusLossFromGain_syncAf(focusChangeHint, nfr, forceDuck);
- }
+ propagateFocusLossFromGain_syncAf(focusChangeHint, nfr, forceDuck);
// push focus requester at the top of the audio focus stack
mFocusStack.push(nfr);
@@ -970,4 +1051,39 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
}
}.start();
}
+
+ public void updateMultiAudioFocus(boolean enabled) {
+ Log.d(TAG, "updateMultiAudioFocus( " + enabled + " )");
+ mMultiAudioFocusEnabled = enabled;
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.MULTI_AUDIO_FOCUS_ENABLED, enabled ? 1 : 0);
+ if (!mFocusStack.isEmpty()) {
+ final FocusRequester fr = mFocusStack.peek();
+ fr.handleFocusLoss(AudioManager.AUDIOFOCUS_LOSS, null, false);
+ }
+ if (!enabled) {
+ if (!mMultiAudioFocusList.isEmpty()) {
+ for (FocusRequester multifr : mMultiAudioFocusList) {
+ multifr.handleFocusLoss(AudioManager.AUDIOFOCUS_LOSS, null, false);
+ }
+ mMultiAudioFocusList.clear();
+ }
+ }
+ }
+
+ public boolean getMultiAudioFocusEnabled() {
+ return mMultiAudioFocusEnabled;
+ }
+
+ private void dumpMultiAudioFocus(PrintWriter pw) {
+ pw.println("Multi Audio Focus enabled :" + mMultiAudioFocusEnabled);
+ if (!mMultiAudioFocusList.isEmpty()) {
+ pw.println("Multi Audio Focus List:");
+ pw.println("------------------------------");
+ for (FocusRequester multifr : mMultiAudioFocusList) {
+ multifr.dump(pw);
+ }
+ pw.println("------------------------------");
+ }
+ }
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessage.java b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
index f8b39627f236..ff7da11340eb 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
@@ -115,8 +115,12 @@ public final class HdmiCecMessage {
s.append(String.format("<%s> %X%X:%02X",
opcodeToString(mOpcode), mSource, mDestination, mOpcode));
if (mParams.length > 0) {
- for (byte data : mParams) {
- s.append(String.format(":%02X", data));
+ if (filterMessageParameters(mOpcode)) {
+ s.append(String.format(" <Redacted len=%d>", mParams.length));
+ } else {
+ for (byte data : mParams) {
+ s.append(String.format(":%02X", data));
+ }
}
}
return s.toString();
@@ -270,5 +274,21 @@ public final class HdmiCecMessage {
return String.format("Opcode: %02X", opcode);
}
}
+
+ private static boolean filterMessageParameters(int opcode) {
+ switch (opcode) {
+ case Constants.MESSAGE_USER_CONTROL_PRESSED:
+ case Constants.MESSAGE_USER_CONTROL_RELEASED:
+ case Constants.MESSAGE_SET_OSD_NAME:
+ case Constants.MESSAGE_SET_OSD_STRING:
+ case Constants.MESSAGE_VENDOR_COMMAND:
+ case Constants.MESSAGE_VENDOR_REMOTE_BUTTON_DOWN:
+ case Constants.MESSAGE_VENDOR_REMOTE_BUTTON_UP:
+ case Constants.MESSAGE_VENDOR_COMMAND_WITH_ID:
+ return true;
+ default:
+ return false;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index c3413e8d2934..0d899974cf93 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -622,6 +622,16 @@ class MediaRouter2ServiceImpl {
return;
}
+ if (route.isSystemRoute() && !routerRecord.mHasModifyAudioRoutingPermission
+ && !TextUtils.equals(route.getId(),
+ routerRecord.mUserRecord.mHandler.mSystemProvider.getDefaultRoute().getId())) {
+ Slog.w(TAG, "MODIFY_AUDIO_ROUTING permission is required to transfer to"
+ + route);
+ routerRecord.mUserRecord.mHandler.notifySessionCreationFailedToRouter(
+ routerRecord, requestId);
+ return;
+ }
+
long uniqueRequestId = toUniqueRequestId(routerRecord.mRouterId, requestId);
routerRecord.mUserRecord.mHandler.sendMessage(
obtainMessage(UserHandler::requestCreateSessionOnHandler,
@@ -915,9 +925,6 @@ class MediaRouter2ServiceImpl {
RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
.findRouterforSessionLocked(uniqueSessionId);
- if (routerRecord == null) {
- return;
- }
long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId);
managerRecord.mUserRecord.mHandler.sendMessage(
@@ -1272,15 +1279,6 @@ class MediaRouter2ServiceImpl {
toOriginalRequestId(uniqueRequestId));
return;
}
- if (route.isSystemRoute() && !routerRecord.mHasModifyAudioRoutingPermission
- && !TextUtils.equals(route.getId(),
- mSystemProvider.getDefaultRoute().getId())) {
- Slog.w(TAG, "MODIFY_AUDIO_ROUTING permission is required to transfer to"
- + route);
- notifySessionCreationFailedToRouter(routerRecord,
- toOriginalRequestId(uniqueRequestId));
- return;
- }
SessionCreationRequest request =
new SessionCreationRequest(routerRecord, uniqueRequestId, route, managerRecord);
@@ -1404,11 +1402,11 @@ class MediaRouter2ServiceImpl {
}
private void releaseSessionOnHandler(long uniqueRequestId,
- @NonNull RouterRecord routerRecord, @NonNull String uniqueSessionId) {
+ @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId) {
final RouterRecord matchingRecord = mSessionToRouterMap.get(uniqueSessionId);
if (matchingRecord != routerRecord) {
- Slog.w(TAG, "Ignoring releasing session from non-matching router."
- + " packageName=" + routerRecord.mPackageName
+ Slog.w(TAG, "Ignoring releasing session from non-matching router. packageName="
+ + (routerRecord == null ? null : routerRecord.mPackageName)
+ " uniqueSessionId=" + uniqueSessionId);
return;
}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 173dfc244fe5..ec941c8aea59 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -800,7 +800,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
enableFirewallChainUL(FIREWALL_CHAIN_STANDBY, true);
- setRestrictBackgroundUL(mLoadedRestrictBackground);
+ setRestrictBackgroundUL(mLoadedRestrictBackground, "init_service");
updateRulesForGlobalChangeAL(false);
updateNotificationsNL();
}
@@ -2877,10 +2877,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "setRestrictBackground");
try {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+ final int callingUid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
try {
synchronized (mUidRulesFirstLock) {
- setRestrictBackgroundUL(restrictBackground);
+ setRestrictBackgroundUL(restrictBackground, "uid:" + callingUid);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -2891,7 +2892,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
@GuardedBy("mUidRulesFirstLock")
- private void setRestrictBackgroundUL(boolean restrictBackground) {
+ private void setRestrictBackgroundUL(boolean restrictBackground, String reason) {
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "setRestrictBackgroundUL");
try {
if (restrictBackground == mRestrictBackground) {
@@ -2899,7 +2900,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
Slog.w(TAG, "setRestrictBackgroundUL: already " + restrictBackground);
return;
}
- Slog.d(TAG, "setRestrictBackgroundUL(): " + restrictBackground);
+ Slog.d(TAG, "setRestrictBackgroundUL(): " + restrictBackground + "; reason: " + reason);
final boolean oldRestrictBackground = mRestrictBackground;
mRestrictBackground = restrictBackground;
// Must whitelist foreground apps before turning data saver mode on.
@@ -3425,7 +3426,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
fout.print("Restrict background: "); fout.println(mRestrictBackground);
fout.print("Restrict power: "); fout.println(mRestrictPower);
fout.print("Device idle: "); fout.println(mDeviceIdleMode);
- fout.print("Metered ifaces: "); fout.println(String.valueOf(mMeteredIfaces));
+ fout.print("Metered ifaces: "); fout.println(mMeteredIfaces);
+
+ fout.println();
+ fout.print("mRestrictBackgroundLowPowerMode: " + mRestrictBackgroundLowPowerMode);
+ fout.print("mRestrictBackgroundBeforeBsm: " + mRestrictBackgroundBeforeBsm);
+ fout.print("mLoadedRestrictBackground: " + mLoadedRestrictBackground);
+ fout.print("mRestrictBackgroundChangedInBsm: " + mRestrictBackgroundChangedInBsm);
fout.println();
fout.println("Network policies:");
@@ -5020,7 +5027,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
if (shouldInvokeRestrictBackground) {
- setRestrictBackgroundUL(restrictBackground);
+ setRestrictBackgroundUL(restrictBackground, "low_power");
}
// Change it at last so setRestrictBackground() won't affect this variable
diff --git a/services/core/java/com/android/server/notification/BubbleExtractor.java b/services/core/java/com/android/server/notification/BubbleExtractor.java
index 2fa80cd8e4e4..27802ffc013d 100644
--- a/services/core/java/com/android/server/notification/BubbleExtractor.java
+++ b/services/core/java/com/android/server/notification/BubbleExtractor.java
@@ -16,12 +16,18 @@
package com.android.server.notification;
import static android.app.Notification.FLAG_BUBBLE;
+import static android.app.Notification.FLAG_FOREGROUND_SERVICE;
+import static android.app.NotificationChannel.USER_LOCKED_ALLOW_BUBBLE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
import static com.android.internal.util.FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_MISSING;
import static com.android.internal.util.FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_NOT_RESIZABLE;
import android.app.ActivityManager;
import android.app.Notification;
+import android.app.NotificationChannel;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
@@ -32,13 +38,13 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FrameworkStatsLog;
/**
- * Determines whether a bubble can be shown for this notification
+ * Determines whether a bubble can be shown for this notification.
*/
public class BubbleExtractor implements NotificationSignalExtractor {
private static final String TAG = "BubbleExtractor";
private static final boolean DBG = false;
- private BubbleChecker mBubbleChecker;
+ private ShortcutHelper mShortcutHelper;
private RankingConfig mConfig;
private ActivityManager mActivityManager;
private Context mContext;
@@ -60,24 +66,35 @@ public class BubbleExtractor implements NotificationSignalExtractor {
return null;
}
- if (mBubbleChecker == null) {
- if (DBG) Slog.d(TAG, "missing bubble checker");
+ if (mShortcutHelper == null) {
+ if (DBG) Slog.d(TAG, "missing shortcut helper");
return null;
}
- boolean appCanShowBubble =
- mConfig.areBubblesAllowed(record.getSbn().getPackageName(), record.getSbn().getUid());
- if (!mConfig.bubblesEnabled() || !appCanShowBubble) {
+ int bubblePreference =
+ mConfig.getBubblePreference(
+ record.getSbn().getPackageName(), record.getSbn().getUid());
+ NotificationChannel recordChannel = record.getChannel();
+
+ if (!mConfig.bubblesEnabled() || bubblePreference == BUBBLE_PREFERENCE_NONE) {
record.setAllowBubble(false);
- } else {
- if (record.getChannel() != null) {
- record.setAllowBubble(record.getChannel().canBubble() && appCanShowBubble);
- } else {
- record.setAllowBubble(appCanShowBubble);
- }
+ } else if (recordChannel == null) {
+ // the app is allowed but there's no channel to check
+ record.setAllowBubble(true);
+ } else if (bubblePreference == BUBBLE_PREFERENCE_ALL) {
+ // by default the channel is not allowed, only don't bubble if the user specified
+ boolean userLockedNoBubbles = !recordChannel.canBubble()
+ && (recordChannel.getUserLockedFields() & USER_LOCKED_ALLOW_BUBBLE) != 0;
+ record.setAllowBubble(!userLockedNoBubbles);
+ } else if (bubblePreference == BUBBLE_PREFERENCE_SELECTED) {
+ record.setAllowBubble(recordChannel.canBubble());
}
- final boolean applyFlag = mBubbleChecker.isNotificationAppropriateToBubble(record)
- && !record.isFlagBubbleRemoved();
+
+ final boolean fulfillsPolicy = record.canBubble()
+ && record.isConversation()
+ && !mActivityManager.isLowRamDevice()
+ && (record.getNotification().flags & FLAG_FOREGROUND_SERVICE) == 0;
+ final boolean applyFlag = fulfillsPolicy && canPresentAsBubble(record);
if (applyFlag) {
record.getNotification().flags |= FLAG_BUBBLE;
} else {
@@ -95,165 +112,95 @@ public class BubbleExtractor implements NotificationSignalExtractor {
public void setZenHelper(ZenModeHelper helper) {
}
- /**
- * Expected to be called after {@link #setConfig(RankingConfig)} has occurred.
- */
- void setShortcutHelper(ShortcutHelper helper) {
- if (mConfig == null) {
- if (DBG) Slog.d(TAG, "setting shortcut helper prior to setConfig");
- return;
- }
- mBubbleChecker = new BubbleChecker(mContext, helper, mConfig, mActivityManager);
+ public void setShortcutHelper(ShortcutHelper helper) {
+ mShortcutHelper = helper;
}
@VisibleForTesting
- void setBubbleChecker(BubbleChecker checker) {
- mBubbleChecker = checker;
+ public void setActivityManager(ActivityManager manager) {
+ mActivityManager = manager;
}
/**
- * Encapsulates special checks to see if a notification can be flagged as a bubble. This
- * makes testing a bit easier.
+ * @return whether there is valid information for the notification to bubble.
*/
- public static class BubbleChecker {
-
- private ActivityManager mActivityManager;
- private RankingConfig mRankingConfig;
- private Context mContext;
- private ShortcutHelper mShortcutHelper;
-
- BubbleChecker(Context context, ShortcutHelper helper, RankingConfig config,
- ActivityManager activityManager) {
- mContext = context;
- mActivityManager = activityManager;
- mShortcutHelper = helper;
- mRankingConfig = config;
+ @VisibleForTesting
+ boolean canPresentAsBubble(NotificationRecord r) {
+ Notification notification = r.getNotification();
+ Notification.BubbleMetadata metadata = notification.getBubbleMetadata();
+ String pkg = r.getSbn().getPackageName();
+ if (metadata == null) {
+ return false;
}
- /**
- * @return whether the provided notification record is allowed to be represented as a
- * bubble, accounting for user choice & policy.
- */
- public boolean isNotificationAppropriateToBubble(NotificationRecord r) {
- final String pkg = r.getSbn().getPackageName();
- final int userId = r.getSbn().getUser().getIdentifier();
- Notification notification = r.getNotification();
- if (!canBubble(r, pkg, userId)) {
- // no log: canBubble has its own
- return false;
- }
-
- if (mActivityManager.isLowRamDevice()) {
- logBubbleError(r.getKey(), "low ram device");
- return false;
- }
-
- boolean isMessageStyle = Notification.MessagingStyle.class.equals(
- notification.getNotificationStyle());
- if (!isMessageStyle) {
- logBubbleError(r.getKey(), "must be Notification.MessageStyle");
- return false;
- }
+ String shortcutId = metadata.getShortcutId();
+ String notificationShortcutId = r.getShortcutInfo() != null
+ ? r.getShortcutInfo().getId()
+ : null;
+ boolean shortcutValid = false;
+ if (notificationShortcutId != null && shortcutId != null) {
+ // NoMan already checks validity of shortcut, just check if they match.
+ shortcutValid = shortcutId.equals(notificationShortcutId);
+ } else if (shortcutId != null) {
+ shortcutValid =
+ mShortcutHelper.getValidShortcutInfo(shortcutId, pkg, r.getUser()) != null;
+ }
+ if (metadata.getIntent() == null && !shortcutValid) {
+ // Should have a shortcut if intent is null
+ logBubbleError(r.getKey(),
+ "couldn't find valid shortcut for bubble with shortcutId: " + shortcutId);
+ return false;
+ }
+ if (shortcutValid) {
+ // TODO: check the shortcut intent / ensure it can show in activity view
return true;
}
+ return canLaunchInActivityView(mContext, metadata.getIntent(), pkg);
+ }
- /**
- * @return whether the user has enabled the provided notification to bubble, and if the
- * developer has provided valid information for the notification to bubble.
- */
- @VisibleForTesting
- boolean canBubble(NotificationRecord r, String pkg, int userId) {
- Notification notification = r.getNotification();
- Notification.BubbleMetadata metadata = notification.getBubbleMetadata();
- if (metadata == null) {
- // no log: no need to inform dev if they didn't attach bubble metadata
- return false;
- }
- if (!mRankingConfig.bubblesEnabled()) {
- logBubbleError(r.getKey(), "bubbles disabled for user: " + userId);
- return false;
- }
- if (!mRankingConfig.areBubblesAllowed(pkg, userId)) {
- logBubbleError(r.getKey(),
- "bubbles for package: " + pkg + " disabled for user: " + userId);
- return false;
- }
- if (!r.getChannel().canBubble()) {
- logBubbleError(r.getKey(),
- "bubbles for channel " + r.getChannel().getId() + " disabled");
- return false;
- }
-
- String shortcutId = metadata.getShortcutId();
- String notificationShortcutId = r.getShortcutInfo() != null
- ? r.getShortcutInfo().getId()
- : null;
- boolean shortcutValid = false;
- if (notificationShortcutId != null && shortcutId != null) {
- // NoMan already checks validity of shortcut, just check if they match.
- shortcutValid = shortcutId.equals(notificationShortcutId);
- } else if (shortcutId != null) {
- shortcutValid =
- mShortcutHelper.getValidShortcutInfo(shortcutId, pkg, r.getUser()) != null;
- }
- if (metadata.getIntent() == null && !shortcutValid) {
- // Should have a shortcut if intent is null
- logBubbleError(r.getKey(),
- "couldn't find valid shortcut for bubble with shortcutId: " + shortcutId);
- return false;
- }
- if (shortcutValid) {
- return true;
- }
- // no log: canLaunch method has the failure log
- return canLaunchInActivityView(mContext, metadata.getIntent(), pkg);
+ /**
+ * Whether an intent is properly configured to display in an {@link
+ * android.app.ActivityView} for bubbling.
+ *
+ * @param context the context to use.
+ * @param pendingIntent the pending intent of the bubble.
+ * @param packageName the notification package name for this bubble.
+ */
+ // Keep checks in sync with BubbleController#canLaunchInActivityView.
+ @VisibleForTesting
+ protected boolean canLaunchInActivityView(Context context, PendingIntent pendingIntent,
+ String packageName) {
+ if (pendingIntent == null) {
+ Slog.w(TAG, "Unable to create bubble -- no intent");
+ return false;
}
- /**
- * Whether an intent is properly configured to display in an {@link
- * android.app.ActivityView}.
- *
- * @param context the context to use.
- * @param pendingIntent the pending intent of the bubble.
- * @param packageName the notification package name for this bubble.
- */
- // Keep checks in sync with BubbleController#canLaunchInActivityView.
- @VisibleForTesting
- protected boolean canLaunchInActivityView(Context context, PendingIntent pendingIntent,
- String packageName) {
- if (pendingIntent == null) {
- Slog.w(TAG, "Unable to create bubble -- no intent");
- return false;
- }
-
- Intent intent = pendingIntent.getIntent();
-
- ActivityInfo info = intent != null
- ? intent.resolveActivityInfo(context.getPackageManager(), 0)
- : null;
- if (info == null) {
- FrameworkStatsLog.write(FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED,
- packageName,
- BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_MISSING);
- Slog.w(TAG, "Unable to send as bubble -- couldn't find activity info for intent: "
- + intent);
- return false;
- }
- if (!ActivityInfo.isResizeableMode(info.resizeMode)) {
- FrameworkStatsLog.write(FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED,
- packageName,
- BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_NOT_RESIZABLE);
- Slog.w(TAG, "Unable to send as bubble -- activity is not resizable for intent: "
- + intent);
- return false;
- }
- return true;
+ Intent intent = pendingIntent.getIntent();
+ ActivityInfo info = intent != null
+ ? intent.resolveActivityInfo(context.getPackageManager(), 0)
+ : null;
+ if (info == null) {
+ FrameworkStatsLog.write(FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED,
+ packageName,
+ BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_MISSING);
+ Slog.w(TAG, "Unable to send as bubble -- couldn't find activity info for intent: "
+ + intent);
+ return false;
+ }
+ if (!ActivityInfo.isResizeableMode(info.resizeMode)) {
+ FrameworkStatsLog.write(FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED,
+ packageName,
+ BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_NOT_RESIZABLE);
+ Slog.w(TAG, "Unable to send as bubble -- activity is not resizable for intent: "
+ + intent);
+ return false;
}
+ return true;
+ }
- private void logBubbleError(String key, String failureMessage) {
- if (DBG) {
- Slog.w(TAG, "Bubble notification: " + key + " failed: " + failureMessage);
- }
+ private void logBubbleError(String key, String failureMessage) {
+ if (DBG) {
+ Slog.w(TAG, "Bubble notification: " + key + " failed: " + failureMessage);
}
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationDelegate.java b/services/core/java/com/android/server/notification/NotificationDelegate.java
index b8140be2e266..1051423ea17f 100644
--- a/services/core/java/com/android/server/notification/NotificationDelegate.java
+++ b/services/core/java/com/android/server/notification/NotificationDelegate.java
@@ -51,7 +51,7 @@ public interface NotificationDelegate {
/**
* Called when the state of {@link Notification#FLAG_BUBBLE} is changed.
*/
- void onNotificationBubbleChanged(String key, boolean isBubble);
+ void onNotificationBubbleChanged(String key, boolean isBubble, int flags);
/**
* Called when the state of {@link Notification.BubbleMetadata#FLAG_SUPPRESS_NOTIFICATION}
* changes.
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index f9fc82bf05b1..54efe543a29f 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -32,6 +32,7 @@ import static android.app.NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED
import static android.app.NotificationManager.ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED;
import static android.app.NotificationManager.ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED;
import static android.app.NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
import static android.app.NotificationManager.EXTRA_AUTOMATIC_ZEN_RULE_ID;
import static android.app.NotificationManager.EXTRA_AUTOMATIC_ZEN_RULE_STATUS;
import static android.app.NotificationManager.IMPORTANCE_LOW;
@@ -1195,14 +1196,7 @@ public class NotificationManagerService extends SystemService {
}
@Override
- public void onNotificationBubbleChanged(String key, boolean isBubble) {
- String pkg;
- synchronized (mNotificationLock) {
- NotificationRecord r = mNotificationsByKey.get(key);
- pkg = r != null && r.getSbn() != null ? r.getSbn().getPackageName() : null;
- }
- boolean isAppForeground = pkg != null
- && mActivityManager.getPackageImportance(pkg) == IMPORTANCE_FOREGROUND;
+ public void onNotificationBubbleChanged(String key, boolean isBubble, int flags) {
synchronized (mNotificationLock) {
NotificationRecord r = mNotificationsByKey.get(key);
if (r != null) {
@@ -1219,8 +1213,13 @@ public class NotificationManagerService extends SystemService {
// be applied there.
r.getNotification().flags |= FLAG_ONLY_ALERT_ONCE;
r.setFlagBubbleRemoved(false);
+ if (r.getNotification().getBubbleMetadata() != null) {
+ r.getNotification().getBubbleMetadata().setFlags(flags);
+ }
+ // Force isAppForeground true here, because for sysui's purposes we
+ // want to adjust the flag behaviour.
mHandler.post(new EnqueueNotificationRunnable(r.getUser().getIdentifier(),
- r, isAppForeground));
+ r, true /* isAppForeground*/));
}
}
}
@@ -3079,40 +3078,37 @@ public class NotificationManagerService extends SystemService {
return mPreferencesHelper.getImportance(pkg, uid) != IMPORTANCE_NONE;
}
+ /**
+ * @return true if and only if "all" bubbles are allowed from the provided package.
+ */
@Override
public boolean areBubblesAllowed(String pkg) {
- return areBubblesAllowedForPackage(pkg, Binder.getCallingUid());
+ return getBubblePreferenceForPackage(pkg, Binder.getCallingUid())
+ == BUBBLE_PREFERENCE_ALL;
}
@Override
- public boolean areBubblesAllowedForPackage(String pkg, int uid) {
+ public int getBubblePreferenceForPackage(String pkg, int uid) {
enforceSystemOrSystemUIOrSamePackage(pkg,
"Caller not system or systemui or same package");
if (UserHandle.getCallingUserId() != UserHandle.getUserId(uid)) {
getContext().enforceCallingPermission(
android.Manifest.permission.INTERACT_ACROSS_USERS,
- "canNotifyAsPackage for uid " + uid);
+ "getBubblePreferenceForPackage for uid " + uid);
}
- return mPreferencesHelper.areBubblesAllowed(pkg, uid);
+ return mPreferencesHelper.getBubblePreference(pkg, uid);
}
@Override
- public void setBubblesAllowed(String pkg, int uid, boolean allowed) {
- enforceSystemOrSystemUI("Caller not system or systemui");
- mPreferencesHelper.setBubblesAllowed(pkg, uid, allowed);
+ public void setBubblesAllowed(String pkg, int uid, int bubblePreference) {
+ checkCallerIsSystemOrSystemUiOrShell("Caller not system or sysui or shell");
+ mPreferencesHelper.setBubblesAllowed(pkg, uid, bubblePreference);
handleSavePolicyFile();
}
@Override
- public boolean hasUserApprovedBubblesForPackage(String pkg, int uid) {
- enforceSystemOrSystemUI("Caller not system or systemui");
- int lockedFields = mPreferencesHelper.getAppLockedFields(pkg, uid);
- return (lockedFields & PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE) != 0;
- }
-
- @Override
public boolean shouldHideSilentStatusIcons(String callingPkg) {
checkCallerIsSameApp(callingPkg);
@@ -3308,7 +3304,7 @@ public class NotificationManagerService extends SystemService {
String targetPkg, String channelId, boolean returnParentIfNoConversationChannel,
String conversationId) {
if (canNotifyAsPackage(callingPkg, targetPkg, userId)
- || isCallerIsSystemOrSystemUi()) {
+ || isCallerIsSystemOrSysemUiOrShell()) {
int targetUid = -1;
try {
targetUid = mPackageManagerClient.getPackageUidAsUser(targetPkg, userId);
@@ -3418,7 +3414,7 @@ public class NotificationManagerService extends SystemService {
@Override
public void updateNotificationChannelForPackage(String pkg, int uid,
NotificationChannel channel) {
- enforceSystemOrSystemUI("Caller not system or systemui");
+ checkCallerIsSystemOrSystemUiOrShell("Caller not system or sysui or shell");
Objects.requireNonNull(channel);
updateNotificationChannelInt(pkg, uid, channel, false);
}
@@ -5848,6 +5844,7 @@ public class NotificationManagerService extends SystemService {
synchronized (mNotificationLock) {
NotificationRecord r = mNotificationsByKey.get(key);
if (r != null) {
+ r.setShortcutInfo(null);
// Enqueue will trigger resort & flag is updated that way.
r.getNotification().flags |= FLAG_ONLY_ALERT_ONCE;
mHandler.post(
@@ -7210,7 +7207,10 @@ public class NotificationManagerService extends SystemService {
boolean interruptiveChanged =
record.canBubble() && (interruptiveBefore != record.isInterruptive());
- changed = indexChanged || interceptChanged || visibilityChanged || interruptiveChanged;
+ changed = indexChanged
+ || interceptChanged
+ || visibilityChanged
+ || interruptiveChanged;
if (interceptBefore && !record.isIntercepted()
&& record.isNewEnoughForAlerting(System.currentTimeMillis())) {
buzzBeepBlinkLocked(record);
@@ -8248,6 +8248,14 @@ public class NotificationManagerService extends SystemService {
== PERMISSION_GRANTED;
}
+ private boolean isCallerIsSystemOrSysemUiOrShell() {
+ int callingUid = Binder.getCallingUid();
+ if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID) {
+ return true;
+ }
+ return isCallerIsSystemOrSystemUi();
+ }
+
private void checkCallerIsSystemOrShell() {
int callingUid = Binder.getCallingUid();
if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID) {
@@ -8264,6 +8272,10 @@ public class NotificationManagerService extends SystemService {
}
private void checkCallerIsSystemOrSystemUiOrShell() {
+ checkCallerIsSystemOrSystemUiOrShell(null);
+ }
+
+ private void checkCallerIsSystemOrSystemUiOrShell(String message) {
int callingUid = Binder.getCallingUid();
if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID) {
return;
@@ -8271,7 +8283,8 @@ public class NotificationManagerService extends SystemService {
if (isCallerSystemOrPhone()) {
return;
}
- getContext().enforceCallingPermission(android.Manifest.permission.STATUS_BAR_SERVICE, null);
+ getContext().enforceCallingPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
+ message);
}
private void checkCallerIsSystemOrSameApp(String pkg) {
diff --git a/services/core/java/com/android/server/notification/NotificationShellCmd.java b/services/core/java/com/android/server/notification/NotificationShellCmd.java
index 2b5ba2528429..e4a17740b0b7 100644
--- a/services/core/java/com/android/server/notification/NotificationShellCmd.java
+++ b/services/core/java/com/android/server/notification/NotificationShellCmd.java
@@ -38,7 +38,6 @@ import android.content.res.Resources;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
-import android.media.IRingtonePlayer;
import android.net.Uri;
import android.os.Binder;
import android.os.Process;
@@ -48,8 +47,6 @@ import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Slog;
-import com.android.internal.util.FunctionalUtils;
-
import java.io.PrintWriter;
import java.net.URISyntaxException;
import java.util.Collections;
@@ -72,7 +69,11 @@ public class NotificationShellCmd extends ShellCommand {
+ " unsuspend_package PACKAGE\n"
+ " reset_assistant_user_set [user_id (current user if not specified)]\n"
+ " get_approved_assistant [user_id (current user if not specified)]\n"
- + " post [--help | flags] TAG TEXT";
+ + " post [--help | flags] TAG TEXT\n"
+ + " set_bubbles PACKAGE PREFERENCE (0=none 1=all 2=selected) "
+ + "[user_id (current user if not specified)]\n"
+ + " set_bubbles_channel PACKAGE CHANNEL_ID ALLOW "
+ + "[user_id (current user if not specified)]\n";
private static final String NOTIFY_USAGE =
"usage: cmd notification post [flags] <tag> <text>\n\n"
@@ -109,6 +110,7 @@ public class NotificationShellCmd extends ShellCommand {
private final NotificationManagerService mDirectService;
private final INotificationManager mBinderService;
private final PackageManager mPm;
+ private NotificationChannel mChannel;
public NotificationShellCmd(NotificationManagerService service) {
mDirectService = service;
@@ -276,6 +278,40 @@ public class NotificationShellCmd extends ShellCommand {
}
break;
}
+ case "set_bubbles": {
+ // only use for testing
+ String packageName = getNextArgRequired();
+ int preference = Integer.parseInt(getNextArgRequired());
+ if (preference > 3 || preference < 0) {
+ pw.println("Invalid preference - must be between 0-3 "
+ + "(0=none 1=all 2=selected)");
+ return -1;
+ }
+ int userId = ActivityManager.getCurrentUser();
+ if (peekNextArg() != null) {
+ userId = Integer.parseInt(getNextArgRequired());
+ }
+ int appUid = UserHandle.getUid(userId, mPm.getPackageUid(packageName, 0));
+ mBinderService.setBubblesAllowed(packageName, appUid, preference);
+ break;
+ }
+ case "set_bubbles_channel": {
+ // only use for testing
+ String packageName = getNextArgRequired();
+ String channelId = getNextArgRequired();
+ boolean allow = Boolean.parseBoolean(getNextArgRequired());
+ int userId = ActivityManager.getCurrentUser();
+ if (peekNextArg() != null) {
+ userId = Integer.parseInt(getNextArgRequired());
+ }
+ NotificationChannel channel = mBinderService.getNotificationChannel(
+ callingPackage, userId, packageName, channelId);
+ channel.setAllowBubbles(allow);
+ int appUid = UserHandle.getUid(userId, mPm.getPackageUid(packageName, 0));
+ mBinderService.updateNotificationChannelForPackage(packageName, appUid,
+ channel);
+ break;
+ }
case "post":
case "notify":
doNotify(pw, callingPackage, callingUid);
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index 8154988a4917..b3d373ffab3a 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -17,6 +17,7 @@
package com.android.server.notification;
import static android.app.NotificationChannel.PLACEHOLDER_CONVERSATION_ID;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
@@ -117,10 +118,14 @@ public class PreferencesHelper implements RankingConfig {
@VisibleForTesting
static final boolean DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS = false;
private static final boolean DEFAULT_SHOW_BADGE = true;
- static final boolean DEFAULT_ALLOW_BUBBLE = true;
+
private static final boolean DEFAULT_OEM_LOCKED_IMPORTANCE = false;
private static final boolean DEFAULT_APP_LOCKED_IMPORTANCE = false;
+ static final boolean DEFAULT_GLOBAL_ALLOW_BUBBLE = true;
+ @VisibleForTesting
+ static final int DEFAULT_BUBBLE_PREFERENCE = BUBBLE_PREFERENCE_NONE;
+
/**
* Default value for what fields are user locked. See {@link LockableAppFields} for all lockable
* fields.
@@ -148,7 +153,7 @@ public class PreferencesHelper implements RankingConfig {
private final NotificationChannelLogger mNotificationChannelLogger;
private SparseBooleanArray mBadgingEnabled;
- private boolean mBubblesEnabled = DEFAULT_ALLOW_BUBBLE;
+ private boolean mBubblesEnabledGlobally = DEFAULT_GLOBAL_ALLOW_BUBBLE;
private boolean mAreChannelsBypassingDnd;
private boolean mHideSilentStatusBarIcons = DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS;
@@ -226,8 +231,8 @@ public class PreferencesHelper implements RankingConfig {
parser, ATT_VISIBILITY, DEFAULT_VISIBILITY),
XmlUtils.readBooleanAttribute(
parser, ATT_SHOW_BADGE, DEFAULT_SHOW_BADGE),
- XmlUtils.readBooleanAttribute(
- parser, ATT_ALLOW_BUBBLE, DEFAULT_ALLOW_BUBBLE));
+ XmlUtils.readIntAttribute(
+ parser, ATT_ALLOW_BUBBLE, DEFAULT_BUBBLE_PREFERENCE));
r.importance = XmlUtils.readIntAttribute(
parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
r.priority = XmlUtils.readIntAttribute(
@@ -339,19 +344,19 @@ public class PreferencesHelper implements RankingConfig {
int uid) {
return getOrCreatePackagePreferencesLocked(pkg, UserHandle.getUserId(uid), uid,
DEFAULT_IMPORTANCE, DEFAULT_PRIORITY, DEFAULT_VISIBILITY, DEFAULT_SHOW_BADGE,
- DEFAULT_ALLOW_BUBBLE);
+ DEFAULT_BUBBLE_PREFERENCE);
}
private PackagePreferences getOrCreatePackagePreferencesLocked(String pkg,
@UserIdInt int userId, int uid) {
return getOrCreatePackagePreferencesLocked(pkg, userId, uid,
DEFAULT_IMPORTANCE, DEFAULT_PRIORITY, DEFAULT_VISIBILITY, DEFAULT_SHOW_BADGE,
- DEFAULT_ALLOW_BUBBLE);
+ DEFAULT_BUBBLE_PREFERENCE);
}
private PackagePreferences getOrCreatePackagePreferencesLocked(String pkg,
@UserIdInt int userId, int uid, int importance, int priority, int visibility,
- boolean showBadge, boolean allowBubble) {
+ boolean showBadge, int bubblePreference) {
final String key = packagePreferencesKey(pkg, uid);
PackagePreferences
r = (uid == UNKNOWN_UID)
@@ -365,7 +370,7 @@ public class PreferencesHelper implements RankingConfig {
r.priority = priority;
r.visibility = visibility;
r.showBadge = showBadge;
- r.allowBubble = allowBubble;
+ r.bubblePreference = bubblePreference;
try {
createDefaultChannelIfNeededLocked(r);
@@ -479,7 +484,7 @@ public class PreferencesHelper implements RankingConfig {
|| r.channels.size() > 0
|| r.groups.size() > 0
|| r.delegate != null
- || r.allowBubble != DEFAULT_ALLOW_BUBBLE;
+ || r.bubblePreference != DEFAULT_BUBBLE_PREFERENCE;
if (hasNonDefaultSettings) {
out.startTag(null, TAG_PACKAGE);
out.attribute(null, ATT_NAME, r.pkg);
@@ -492,8 +497,8 @@ public class PreferencesHelper implements RankingConfig {
if (r.visibility != DEFAULT_VISIBILITY) {
out.attribute(null, ATT_VISIBILITY, Integer.toString(r.visibility));
}
- if (r.allowBubble != DEFAULT_ALLOW_BUBBLE) {
- out.attribute(null, ATT_ALLOW_BUBBLE, Boolean.toString(r.allowBubble));
+ if (r.bubblePreference != DEFAULT_BUBBLE_PREFERENCE) {
+ out.attribute(null, ATT_ALLOW_BUBBLE, Integer.toString(r.bubblePreference));
}
out.attribute(null, ATT_SHOW_BADGE, Boolean.toString(r.showBadge));
out.attribute(null, ATT_APP_USER_LOCKED_FIELDS,
@@ -544,14 +549,14 @@ public class PreferencesHelper implements RankingConfig {
*
* @param pkg the package to allow or not allow bubbles for.
* @param uid the uid to allow or not allow bubbles for.
- * @param allowed whether bubbles are allowed.
+ * @param bubblePreference whether bubbles are allowed.
*/
- public void setBubblesAllowed(String pkg, int uid, boolean allowed) {
+ public void setBubblesAllowed(String pkg, int uid, int bubblePreference) {
boolean changed = false;
synchronized (mPackagePreferences) {
PackagePreferences p = getOrCreatePackagePreferencesLocked(pkg, uid);
- changed = p.allowBubble != allowed;
- p.allowBubble = allowed;
+ changed = p.bubblePreference != bubblePreference;
+ p.bubblePreference = bubblePreference;
p.lockedAppFields = p.lockedAppFields | LockableAppFields.USER_LOCKED_BUBBLE;
}
if (changed) {
@@ -567,9 +572,9 @@ public class PreferencesHelper implements RankingConfig {
* @return whether bubbles are allowed.
*/
@Override
- public boolean areBubblesAllowed(String pkg, int uid) {
+ public int getBubblePreference(String pkg, int uid) {
synchronized (mPackagePreferences) {
- return getOrCreatePackagePreferencesLocked(pkg, uid).allowBubble;
+ return getOrCreatePackagePreferencesLocked(pkg, uid).bubblePreference;
}
}
@@ -788,6 +793,7 @@ public class PreferencesHelper implements RankingConfig {
}
if (fromTargetApp) {
channel.setLockscreenVisibility(r.visibility);
+ channel.setAllowBubbles(existing != null && existing.canBubble());
}
clearLockedFieldsLocked(channel);
channel.setImportanceLockedByOEM(r.oemLockedImportance);
@@ -2125,7 +2131,7 @@ public class PreferencesHelper implements RankingConfig {
p.groups = new ArrayMap<>();
p.delegate = null;
p.lockedAppFields = DEFAULT_LOCKED_APP_FIELDS;
- p.allowBubble = DEFAULT_ALLOW_BUBBLE;
+ p.bubblePreference = DEFAULT_BUBBLE_PREFERENCE;
p.importance = DEFAULT_IMPORTANCE;
p.priority = DEFAULT_PRIORITY;
p.visibility = DEFAULT_VISIBILITY;
@@ -2165,15 +2171,15 @@ public class PreferencesHelper implements RankingConfig {
public void updateBubblesEnabled() {
final boolean newValue = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.NOTIFICATION_BUBBLES,
- DEFAULT_ALLOW_BUBBLE ? 1 : 0) == 1;
- if (newValue != mBubblesEnabled) {
- mBubblesEnabled = newValue;
+ DEFAULT_GLOBAL_ALLOW_BUBBLE ? 1 : 0) == 1;
+ if (newValue != mBubblesEnabledGlobally) {
+ mBubblesEnabledGlobally = newValue;
updateConfig();
}
}
public boolean bubblesEnabled() {
- return mBubblesEnabled;
+ return mBubblesEnabledGlobally;
}
public void updateBadgingEnabled() {
@@ -2229,7 +2235,7 @@ public class PreferencesHelper implements RankingConfig {
int priority = DEFAULT_PRIORITY;
int visibility = DEFAULT_VISIBILITY;
boolean showBadge = DEFAULT_SHOW_BADGE;
- boolean allowBubble = DEFAULT_ALLOW_BUBBLE;
+ int bubblePreference = DEFAULT_BUBBLE_PREFERENCE;
int lockedAppFields = DEFAULT_LOCKED_APP_FIELDS;
// these fields are loaded on boot from a different source of truth and so are not
// written to notification policy xml
diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java
index 7e98be7fe065..7fc79e6a9bf7 100644
--- a/services/core/java/com/android/server/notification/RankingConfig.java
+++ b/services/core/java/com/android/server/notification/RankingConfig.java
@@ -29,7 +29,7 @@ public interface RankingConfig {
void setShowBadge(String packageName, int uid, boolean showBadge);
boolean canShowBadge(String packageName, int uid);
boolean badgingEnabled(UserHandle userHandle);
- boolean areBubblesAllowed(String packageName, int uid);
+ int getBubblePreference(String packageName, int uid);
boolean bubblesEnabled();
boolean isGroupBlocked(String packageName, int uid, String groupId);
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index 09b782d768d2..7c47cf0450d4 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -113,6 +113,7 @@ public class AppsFilter {
private final OverlayReferenceMapper mOverlayReferenceMapper;
private PackageParser.SigningDetails mSystemSigningDetails;
+ private Set<String> mProtectedBroadcasts = new ArraySet<>();
AppsFilter(FeatureConfig featureConfig, String[] forceQueryableWhitelist,
boolean systemAppsQueryable,
@@ -298,10 +299,10 @@ public class AppsFilter {
/** Returns true if the querying package may query for the potential target package */
private static boolean canQueryViaComponents(AndroidPackage querying,
- AndroidPackage potentialTarget) {
+ AndroidPackage potentialTarget, Set<String> protectedBroadcasts) {
if (!querying.getQueriesIntents().isEmpty()) {
for (Intent intent : querying.getQueriesIntents()) {
- if (matchesIntentFilters(intent, potentialTarget)) {
+ if (matchesIntentFilters(intent, potentialTarget, protectedBroadcasts)) {
return true;
}
}
@@ -353,13 +354,14 @@ public class AppsFilter {
return false;
}
- private static boolean matchesIntentFilters(Intent intent, AndroidPackage potentialTarget) {
+ private static boolean matchesIntentFilters(Intent intent, AndroidPackage potentialTarget,
+ Set<String> protectedBroadcasts) {
for (int s = ArrayUtils.size(potentialTarget.getServices()) - 1; s >= 0; s--) {
ParsedService service = potentialTarget.getServices().get(s);
if (!service.isExported()) {
continue;
}
- if (matchesAnyFilter(intent, service)) {
+ if (matchesAnyFilter(intent, service, null /*protectedBroadcasts*/)) {
return true;
}
}
@@ -368,7 +370,8 @@ public class AppsFilter {
if (!activity.isExported()) {
continue;
}
- if (matchesAnyFilter(intent, activity)) {
+
+ if (matchesAnyFilter(intent, activity, null /*protectedBroadcasts*/)) {
return true;
}
}
@@ -377,25 +380,32 @@ public class AppsFilter {
if (!receiver.isExported()) {
continue;
}
- if (matchesAnyFilter(intent, receiver)) {
+ if (matchesAnyFilter(intent, receiver, protectedBroadcasts)) {
return true;
}
}
return false;
}
- private static boolean matchesAnyFilter(Intent intent, ParsedComponent component) {
+ private static boolean matchesAnyFilter(Intent intent, ParsedComponent component,
+ Set<String> protectedBroadcasts) {
List<ParsedIntentInfo> intents = component.getIntents();
for (int i = ArrayUtils.size(intents) - 1; i >= 0; i--) {
IntentFilter intentFilter = intents.get(i);
- if (intentFilter.match(intent.getAction(), intent.getType(), intent.getScheme(),
- intent.getData(), intent.getCategories(), "AppsFilter", true) > 0) {
+ if (matchesIntentFilter(intent, intentFilter, protectedBroadcasts)) {
return true;
}
}
return false;
}
+ private static boolean matchesIntentFilter(Intent intent, IntentFilter intentFilter,
+ @Nullable Set<String> protectedBroadcasts) {
+ return intentFilter.match(intent.getAction(), intent.getType(), intent.getScheme(),
+ intent.getData(), intent.getCategories(), "AppsFilter", true, protectedBroadcasts)
+ > 0;
+ }
+
/**
* Grants access based on an interaction between a calling and target package, granting
* visibility of the caller from the target.
@@ -434,6 +444,12 @@ public class AppsFilter {
}
}
}
+
+ if (!newPkgSetting.pkg.getProtectedBroadcasts().isEmpty()) {
+ mProtectedBroadcasts.addAll(newPkgSetting.pkg.getProtectedBroadcasts());
+ recomputeComponentVisibility(existingSettings, newPkgSetting.pkg.getPackageName());
+ }
+
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "filter.addPackage");
try {
final AndroidPackage newPkg = newPkgSetting.pkg;
@@ -464,7 +480,7 @@ public class AppsFilter {
final AndroidPackage existingPkg = existingSetting.pkg;
// let's evaluate the ability of already added packages to see this new package
if (!newIsForceQueryable) {
- if (canQueryViaComponents(existingPkg, newPkg)) {
+ if (canQueryViaComponents(existingPkg, newPkg, mProtectedBroadcasts)) {
mQueriesViaComponent.add(existingSetting.appId, newPkgSetting.appId);
}
if (canQueryViaPackage(existingPkg, newPkg)
@@ -474,7 +490,7 @@ public class AppsFilter {
}
// now we'll evaluate our new package's ability to see existing packages
if (!mForceQueryable.contains(existingSetting.appId)) {
- if (canQueryViaComponents(newPkg, existingPkg)) {
+ if (canQueryViaComponents(newPkg, existingPkg, mProtectedBroadcasts)) {
mQueriesViaComponent.add(newPkgSetting.appId, existingSetting.appId);
}
if (canQueryViaPackage(newPkg, existingPkg)
@@ -511,10 +527,47 @@ public class AppsFilter {
&& pkgSetting.signatures.mSigningDetails.signaturesMatchExactly(sysSigningDetails);
}
- private static void sort(int[] uids, int nextUidIndex) {
- Arrays.sort(uids, 0, nextUidIndex);
+ private ArraySet<String> collectProtectedBroadcasts(
+ ArrayMap<String, PackageSetting> existingSettings, @Nullable String excludePackage) {
+ ArraySet<String> ret = new ArraySet<>();
+ for (int i = existingSettings.size() - 1; i >= 0; i--) {
+ PackageSetting setting = existingSettings.valueAt(i);
+ if (setting.pkg == null || setting.pkg.getPackageName().equals(excludePackage)) {
+ continue;
+ }
+ final List<String> protectedBroadcasts = setting.pkg.getProtectedBroadcasts();
+ if (!protectedBroadcasts.isEmpty()) {
+ ret.addAll(protectedBroadcasts);
+ }
+ }
+ return ret;
}
+ private void recomputeComponentVisibility(ArrayMap<String, PackageSetting> existingSettings,
+ @Nullable String excludePackage) {
+ mQueriesViaComponent.clear();
+ for (int i = existingSettings.size() - 1; i >= 0; i--) {
+ PackageSetting setting = existingSettings.valueAt(i);
+ if (setting.pkg == null
+ || setting.pkg.getPackageName().equals(excludePackage)
+ || mForceQueryable.contains(setting.appId)) {
+ continue;
+ }
+ for (int j = existingSettings.size() - 1; j >= 0; j--) {
+ if (i == j) {
+ continue;
+ }
+ final PackageSetting otherSetting = existingSettings.valueAt(j);
+ if (otherSetting.pkg == null
+ || otherSetting.pkg.getPackageName().equals(excludePackage)) {
+ continue;
+ }
+ if (canQueryViaComponents(setting.pkg, otherSetting.pkg, mProtectedBroadcasts)) {
+ mQueriesViaComponent.add(setting.appId, otherSetting.appId);
+ }
+ }
+ }
+ }
/**
* Fetches all app Ids that a given setting is currently visible to, per provided user. This
* only includes UIDs >= {@link Process#FIRST_APPLICATION_UID} as all other UIDs can already see
@@ -608,6 +661,14 @@ public class AppsFilter {
}
}
+ if (!setting.pkg.getProtectedBroadcasts().isEmpty()) {
+ final String removingPackageName = setting.pkg.getPackageName();
+ mProtectedBroadcasts.clear();
+ mProtectedBroadcasts.addAll(
+ collectProtectedBroadcasts(existingSettings, removingPackageName));
+ recomputeComponentVisibility(existingSettings, removingPackageName);
+ }
+
mOverlayReferenceMapper.removePkg(setting.name);
mFeatureConfig.updatePackageState(setting, true /*removed*/);
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 57908f3a4dac..4cfd1ab73c9e 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -82,6 +82,7 @@ import com.android.internal.util.ImageUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.IoThread;
import com.android.server.LocalServices;
+import com.android.server.SystemConfig;
import com.android.server.pm.parsing.PackageParser2;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
@@ -151,6 +152,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
private final Callbacks mCallbacks;
private volatile boolean mOkToSendBroadcasts = false;
+ private volatile boolean mBypassNextStagedInstallerCheck = false;
/**
* File storing persisted {@link #mSessions} metadata.
@@ -541,7 +543,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
}
}
- if (Build.IS_DEBUGGABLE || isDowngradeAllowedForCaller(callingUid)) {
+ if (Build.IS_DEBUGGABLE || isCalledBySystemOrShell(callingUid)) {
params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
} else {
params.installFlags &= ~PackageManager.INSTALL_ALLOW_DOWNGRADE;
@@ -571,6 +573,14 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
}
}
+ if (mBypassNextStagedInstallerCheck) {
+ mBypassNextStagedInstallerCheck = false;
+ } else if (params.isStaged
+ && !isCalledBySystemOrShell(callingUid)
+ && !isWhitelistedStagedInstaller(requestedInstallerPackageName)) {
+ throw new SecurityException("Installer not allowed to commit staged install");
+ }
+
if (!params.isMultiPackage) {
// Only system components can circumvent runtime permissions when installing.
if ((params.installFlags & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0
@@ -683,11 +693,15 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
return sessionId;
}
- private boolean isDowngradeAllowedForCaller(int callingUid) {
+ private boolean isCalledBySystemOrShell(int callingUid) {
return callingUid == Process.SYSTEM_UID || callingUid == Process.ROOT_UID
|| callingUid == Process.SHELL_UID;
}
+ private boolean isWhitelistedStagedInstaller(String installerName) {
+ return SystemConfig.getInstance().getWhitelistedStagedInstallers().contains(installerName);
+ }
+
@Override
public void updateSessionAppIcon(int sessionId, Bitmap appIcon) {
synchronized (mSessions) {
@@ -963,6 +977,11 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
}
}
+ @Override
+ public void bypassNextStagedInstallerCheck(boolean value) {
+ mBypassNextStagedInstallerCheck = value;
+ }
+
private static int getSessionCount(SparseArray<PackageInstallerSession> sessions,
int installerUid) {
int count = 0;
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index b4eacf6226ce..88f442c7b6a0 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -297,6 +297,8 @@ class PackageManagerShellCommand extends ShellCommand {
return runGetModuleInfo();
case "log-visibility":
return runLogVisibility();
+ case "bypass-staged-installer-check":
+ return runBypassStagedInstallerCheck();
default: {
String nextArg = getNextArg();
if (nextArg == null) {
@@ -392,6 +394,20 @@ class PackageManagerShellCommand extends ShellCommand {
return 1;
}
+ private int runBypassStagedInstallerCheck() {
+ final PrintWriter pw = getOutPrintWriter();
+ try {
+ mInterface.getPackageInstaller()
+ .bypassNextStagedInstallerCheck(Boolean.parseBoolean(getNextArg()));
+ return 0;
+ } catch (RemoteException e) {
+ pw.println("Failure ["
+ + e.getClass().getName() + " - "
+ + e.getMessage() + "]");
+ return -1;
+ }
+ }
+
private int uninstallSystemUpdates() {
final PrintWriter pw = getOutPrintWriter();
List<String> failedUninstalls = new LinkedList<>();
diff --git a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
index 976ce1f3dde0..1c4568095ce3 100644
--- a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
+++ b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
@@ -21,9 +21,14 @@ import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHE
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.AlarmManager;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.os.Handler;
import android.permission.PermissionControllerManager;
+import android.provider.DeviceConfig;
import android.util.Log;
import android.util.SparseArray;
@@ -36,7 +41,10 @@ public class OneTimePermissionUserManager {
private static final String LOG_TAG = OneTimePermissionUserManager.class.getSimpleName();
- private static final boolean DEBUG = true;
+ private static final boolean DEBUG = false;
+ private static final long DEFAULT_KILLED_DELAY_MILLIS = 5000;
+ public static final String PROPERTY_KILLED_DELAY_CONFIG_KEY =
+ "one_time_permissions_killed_delay_millis";
private final @NonNull Context mContext;
private final @NonNull ActivityManager mActivityManager;
@@ -45,15 +53,37 @@ public class OneTimePermissionUserManager {
private final Object mLock = new Object();
+ private final BroadcastReceiver mUninstallListener = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_UID_REMOVED.equals(intent.getAction())) {
+ int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
+ PackageInactivityListener listener = mListeners.get(uid);
+ if (listener != null) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Removing the inactivity listener for " + uid);
+ }
+ listener.cancel();
+ mListeners.remove(uid);
+ }
+ }
+ }
+ };
+
/** Maps the uid to the PackageInactivityListener */
@GuardedBy("mLock")
private final SparseArray<PackageInactivityListener> mListeners = new SparseArray<>();
+ private final Handler mHandler;
OneTimePermissionUserManager(@NonNull Context context) {
mContext = context;
mActivityManager = context.getSystemService(ActivityManager.class);
mAlarmManager = context.getSystemService(AlarmManager.class);
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
+ mHandler = context.getMainThreadHandler();
+
+ // Listen for tracked uid being uninstalled
+ context.registerReceiver(mUninstallListener, new IntentFilter(Intent.ACTION_UID_REMOVED));
}
/**
@@ -132,6 +162,15 @@ public class OneTimePermissionUserManager {
}
/**
+ * The delay to wait before revoking on the event an app is terminated. Recommended to be long
+ * enough so that apps don't lose permission on an immediate restart
+ */
+ private static long getKilledDelayMillis() {
+ return DeviceConfig.getLong(DeviceConfig.NAMESPACE_PERMISSIONS,
+ PROPERTY_KILLED_DELAY_CONFIG_KEY, DEFAULT_KILLED_DELAY_MILLIS);
+ }
+
+ /**
* A class which watches a package for inactivity and notifies the permission controller when
* the package becomes inactive
*/
@@ -155,16 +194,15 @@ public class OneTimePermissionUserManager {
private final ActivityManager.OnUidImportanceListener mGoneListener;
private final Object mInnerLock = new Object();
+ private final Object mToken = new Object();
private PackageInactivityListener(int uid, @NonNull String packageName, long timeout,
int importanceToResetTimer, int importanceToKeepSessionAlive) {
- if (DEBUG) {
- Log.d(LOG_TAG,
- "Start tracking " + packageName + ". uid=" + uid + " timeout=" + timeout
- + " importanceToResetTimer=" + importanceToResetTimer
- + " importanceToKeepSessionAlive=" + importanceToKeepSessionAlive);
- }
+ Log.i(LOG_TAG,
+ "Start tracking " + packageName + ". uid=" + uid + " timeout=" + timeout
+ + " importanceToResetTimer=" + importanceToResetTimer
+ + " importanceToKeepSessionAlive=" + importanceToKeepSessionAlive);
mUid = uid;
mPackageName = packageName;
@@ -193,18 +231,34 @@ public class OneTimePermissionUserManager {
return;
}
-
- if (DEBUG) {
- Log.d(LOG_TAG, "Importance changed for " + mPackageName + " (" + mUid + ")."
- + " importance=" + importance);
- }
+ Log.v(LOG_TAG, "Importance changed for " + mPackageName + " (" + mUid + ")."
+ + " importance=" + importance);
synchronized (mInnerLock) {
+ // Remove any pending inactivity callback
+ mHandler.removeCallbacksAndMessages(mToken);
+
if (importance > IMPORTANCE_CACHED) {
- onPackageInactiveLocked();
+ // Delay revocation in case app is restarting
+ mHandler.postDelayed(() -> {
+ int imp = mActivityManager.getUidImportance(mUid);
+ if (imp > IMPORTANCE_CACHED) {
+ onPackageInactiveLocked();
+ } else {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "No longer gone after delayed revocation. "
+ + "Rechecking for " + mPackageName + " (" + mUid + ").");
+ }
+ onImportanceChanged(mUid, imp);
+ }
+ }, mToken, getKilledDelayMillis());
return;
}
if (importance > mImportanceToResetTimer) {
if (mTimerStart == TIMER_INACTIVE) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Start the timer for "
+ + mPackageName + " (" + mUid + ").");
+ }
mTimerStart = System.currentTimeMillis();
}
} else {
@@ -240,10 +294,13 @@ public class OneTimePermissionUserManager {
return;
}
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Scheduling alarm for " + mPackageName + " (" + mUid + ").");
+ }
long revokeTime = mTimerStart + mTimeout;
if (revokeTime > System.currentTimeMillis()) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, revokeTime, LOG_TAG, this,
- mContext.getMainThreadHandler());
+ mHandler);
mIsAlarmSet = true;
} else {
mIsAlarmSet = true;
@@ -257,6 +314,9 @@ public class OneTimePermissionUserManager {
@GuardedBy("mInnerLock")
private void cancelAlarmLocked() {
if (mIsAlarmSet) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Canceling alarm for " + mPackageName + " (" + mUid + ").");
+ }
mAlarmManager.cancel(this);
mIsAlarmSet = false;
}
@@ -270,14 +330,16 @@ public class OneTimePermissionUserManager {
if (mIsFinished) {
return;
}
+ if (DEBUG) {
+ Log.d(LOG_TAG, "onPackageInactiveLocked stack trace for "
+ + mPackageName + " (" + mUid + ").", new RuntimeException());
+ }
mIsFinished = true;
cancelAlarmLocked();
- mContext.getMainThreadHandler().post(
+ mHandler.post(
() -> {
- if (DEBUG) {
- Log.d(LOG_TAG, "One time session expired for "
- + mPackageName + " (" + mUid + ").");
- }
+ Log.i(LOG_TAG, "One time session expired for "
+ + mPackageName + " (" + mUid + ").");
mPermissionControllerManager.notifyOneTimePermissionSessionTimeout(
mPackageName);
@@ -292,6 +354,9 @@ public class OneTimePermissionUserManager {
@Override
public void onAlarm() {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Alarm received for " + mPackageName + " (" + mUid + ").");
+ }
synchronized (mInnerLock) {
if (!mIsAlarmSet) {
return;
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 b7c9ecb604f8..ccc749232dc3 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -2519,7 +2519,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
pkg.getTargetSdkVersion() >= Build.VERSION_CODES.M;
String upgradedActivityRecognitionPermission = null;
- if (DEBUG_INSTALL) {
+ if (DEBUG_INSTALL && bp != null) {
Log.i(TAG, "Package " + pkg.getPackageName()
+ " checking " + permName + ": " + bp);
}
@@ -3881,8 +3881,10 @@ public class PermissionManagerService extends IPermissionManager.Stub {
*/
private void updatePermissions(@NonNull String packageName, @Nullable AndroidPackage pkg,
@NonNull PermissionCallback callback) {
+ // If the package is being deleted, update the permissions of all the apps
final int flags =
- (pkg != null ? UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG : 0);
+ (pkg == null ? UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG
+ : UPDATE_PERMISSIONS_REPLACE_PKG);
updatePermissions(
packageName, pkg, getVolumeUuidForPackage(pkg), flags, callback);
}
@@ -4007,6 +4009,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
if (permissionTreesSourcePackageChanged | permissionSourcePackageChanged) {
// Permission ownership has changed. This e.g. changes which packages can get signature
// permissions
+ Slog.i(TAG, "Permission ownership changed. Updating all permissions.");
flags |= UPDATE_PERMISSIONS_ALL;
}
@@ -4057,8 +4060,12 @@ public class PermissionManagerService extends IPermissionManager.Stub {
private boolean updatePermissionSourcePackage(@Nullable String packageName,
@Nullable AndroidPackage pkg,
final @Nullable PermissionCallback callback) {
- boolean changed = false;
+ // Always need update if packageName is null
+ if (packageName == null) {
+ return true;
+ }
+ boolean changed = false;
Set<BasePermission> needsUpdate = null;
synchronized (mLock) {
final Iterator<BasePermission> it = mSettings.mPermissions.values().iterator();
@@ -4067,54 +4074,29 @@ public class PermissionManagerService extends IPermissionManager.Stub {
if (bp.isDynamic()) {
bp.updateDynamicPermission(mSettings.mPermissionTrees.values());
}
- if (bp.getSourcePackageSetting() != null) {
- if (packageName != null && packageName.equals(bp.getSourcePackageName())
- && (pkg == null || !hasPermission(pkg, bp.getName()))) {
- Slog.i(TAG, "Removing permission " + bp.getName()
- + " that used to be declared by " + bp.getSourcePackageName());
- if (bp.isRuntime()) {
- final int[] userIds = mUserManagerInt.getUserIds();
- final int numUserIds = userIds.length;
- for (int userIdNum = 0; userIdNum < numUserIds; userIdNum++) {
- final int userId = userIds[userIdNum];
-
- mPackageManagerInt.forEachPackage((AndroidPackage p) -> {
- final String pName = p.getPackageName();
- final ApplicationInfo appInfo =
- mPackageManagerInt.getApplicationInfo(pName, 0,
- Process.SYSTEM_UID, UserHandle.USER_SYSTEM);
- if (appInfo != null
- && appInfo.targetSdkVersion < Build.VERSION_CODES.M) {
- return;
- }
-
- final String permissionName = bp.getName();
- if (checkPermissionImpl(permissionName, pName, userId)
- == PackageManager.PERMISSION_GRANTED) {
- try {
- revokeRuntimePermissionInternal(
- permissionName,
- pName,
- false,
- Process.SYSTEM_UID,
- userId,
- callback);
- } catch (IllegalArgumentException e) {
- Slog.e(TAG,
- "Failed to revoke "
- + permissionName
- + " from "
- + pName,
- e);
- }
- }
- });
- }
+ if (bp.getSourcePackageSetting() == null
+ || !packageName.equals(bp.getSourcePackageName())) {
+ continue;
+ }
+ // The target package is the source of the current permission
+ // Set to changed for either install or uninstall
+ changed = true;
+ // If the target package is being uninstalled, we need to revoke this permission
+ // From all other packages
+ if (pkg == null || !hasPermission(pkg, bp.getName())) {
+ Slog.i(TAG, "Removing permission " + bp.getName()
+ + " that used to be declared by " + bp.getSourcePackageName());
+ if (bp.isRuntime()) {
+ final int[] userIds = mUserManagerInt.getUserIds();
+ final int numUserIds = userIds.length;
+ for (int userIdNum = 0; userIdNum < numUserIds; userIdNum++) {
+ final int userId = userIds[userIdNum];
+ mPackageManagerInt.forEachPackage((AndroidPackage p) ->
+ revokePermissionFromPackageForUser(p.getPackageName(),
+ bp.getName(), userId, callback));
}
- changed = true;
- it.remove();
}
- continue;
+ it.remove();
}
if (needsUpdate == null) {
needsUpdate = new ArraySet<>(mSettings.mPermissions.size());
@@ -4146,6 +4128,39 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
/**
+ * Revoke a runtime permission from a package for a given user ID.
+ */
+ private void revokePermissionFromPackageForUser(@NonNull String pName,
+ @NonNull String permissionName, int userId, @Nullable PermissionCallback callback) {
+ final ApplicationInfo appInfo =
+ mPackageManagerInt.getApplicationInfo(pName, 0,
+ Process.SYSTEM_UID, UserHandle.USER_SYSTEM);
+ if (appInfo != null
+ && appInfo.targetSdkVersion < Build.VERSION_CODES.M) {
+ return;
+ }
+
+ if (checkPermissionImpl(permissionName, pName, userId)
+ == PackageManager.PERMISSION_GRANTED) {
+ try {
+ revokeRuntimePermissionInternal(
+ permissionName,
+ pName,
+ false,
+ Process.SYSTEM_UID,
+ userId,
+ callback);
+ } catch (IllegalArgumentException e) {
+ Slog.e(TAG,
+ "Failed to revoke "
+ + permissionName
+ + " from "
+ + pName,
+ e);
+ }
+ }
+ }
+ /**
* Update which app owns a permission trees.
*
* <p>Possible parameter combinations
@@ -4164,6 +4179,10 @@ public class PermissionManagerService extends IPermissionManager.Stub {
*/
private boolean updatePermissionTreeSourcePackage(@Nullable String packageName,
@Nullable AndroidPackage pkg) {
+ // Always need update if packageName is null
+ if (packageName == null) {
+ return true;
+ }
boolean changed = false;
Set<BasePermission> needsUpdate = null;
@@ -4171,16 +4190,18 @@ public class PermissionManagerService extends IPermissionManager.Stub {
final Iterator<BasePermission> it = mSettings.mPermissionTrees.values().iterator();
while (it.hasNext()) {
final BasePermission bp = it.next();
- if (bp.getSourcePackageSetting() != null) {
- if (packageName != null && packageName.equals(bp.getSourcePackageName())
- && (pkg == null || !hasPermission(pkg, bp.getName()))) {
- Slog.i(TAG, "Removing permission tree " + bp.getName()
- + " that used to be declared by " + bp.getSourcePackageName());
- changed = true;
- it.remove();
- }
+ if (bp.getSourcePackageSetting() == null
+ || !packageName.equals(bp.getSourcePackageName())) {
continue;
}
+ // The target package is the source of the current permission tree
+ // Set to changed for either install or uninstall
+ changed = true;
+ if (pkg == null || !hasPermission(pkg, bp.getName())) {
+ Slog.i(TAG, "Removing permission tree " + bp.getName()
+ + " that used to be declared by " + bp.getSourcePackageName());
+ it.remove();
+ }
if (needsUpdate == null) {
needsUpdate = new ArraySet<>(mSettings.mPermissionTrees.size());
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index c9736401f680..4624e9ea0209 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -4468,12 +4468,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private void wakeUpFromPowerKey(long eventTime) {
wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey,
PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER");
-
- // Turn on the connected TV and switch HDMI input if we're a HDMI playback device.
- final HdmiControl hdmiControl = getHdmiControl();
- if (hdmiControl != null) {
- hdmiControl.turnOnTv();
- }
}
private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode, @WakeReason int reason,
@@ -4489,6 +4483,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
mPowerManager.wakeUp(wakeTime, reason, details);
+
+ // Turn on the connected TV and switch HDMI input if we're a HDMI playback device.
+ final HdmiControl hdmiControl = getHdmiControl();
+ if (hdmiControl != null) {
+ hdmiControl.turnOnTv();
+ }
return true;
}
diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java
index 929d92f56c44..635cb613b934 100644
--- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java
+++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java
@@ -27,7 +27,9 @@ import android.media.soundtrigger_middleware.PhraseSoundModel;
import android.media.soundtrigger_middleware.RecognitionConfig;
import android.media.soundtrigger_middleware.SoundModel;
import android.media.soundtrigger_middleware.SoundTriggerModuleDescriptor;
+import android.os.Parcel;
import android.os.RemoteException;
+import android.os.SystemProperties;
import android.util.Log;
import com.android.server.SystemService;
@@ -99,6 +101,28 @@ public class SoundTriggerMiddlewareService extends ISoundTriggerMiddlewareServic
}
}
+ @Override
+ public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
+ throws RemoteException {
+ try {
+ return super.onTransact(code, data, reply, flags);
+ } catch (InternalServerError e) {
+ if (e.getCause() instanceof HalException) {
+ // We recover from any sort of HAL failure by rebooting the HAL process.
+ // This will likely reboot more than just the sound trigger HAL.
+ // The rest of the system should be able to tolerate that.
+ rebootHal();
+ }
+ throw e;
+ }
+ }
+
+ private static void rebootHal() {
+ Log.i(TAG, "Rebooting the sound trigger HAL");
+ // This property needs to be defined in an init.rc script and trigger a HAL reboot.
+ SystemProperties.set("sys.audio.restart.hal", "1");
+ }
+
private final static class ModuleService extends ISoundTriggerModule.Stub {
private final ISoundTriggerModule mDelegate;
@@ -119,7 +143,6 @@ public class SoundTriggerMiddlewareService extends ISoundTriggerMiddlewareServic
@Override
public void unloadModel(int modelHandle) throws RemoteException {
mDelegate.unloadModel(modelHandle);
- ;
}
@Override
@@ -159,6 +182,22 @@ public class SoundTriggerMiddlewareService extends ISoundTriggerMiddlewareServic
public void detach() throws RemoteException {
mDelegate.detach();
}
+
+ @Override
+ public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
+ throws RemoteException {
+ try {
+ return super.onTransact(code, data, reply, flags);
+ } catch (InternalServerError e) {
+ if (e.getCause() instanceof HalException) {
+ // We recover from any sort of HAL failure by rebooting the HAL process.
+ // This will likely reboot more than just the sound trigger HAL.
+ // The rest of the system should be able to tolerate that.
+ rebootHal();
+ }
+ throw e;
+ }
+ }
}
/**
diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java
index da1b7f3113c4..23259558eeb7 100644
--- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java
+++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java
@@ -149,13 +149,7 @@ public class SoundTriggerMiddlewareValidation implements ISoundTriggerMiddleware
e.getMessage());
}
- /* Throwing an exception is not enough in this case. When the HAL behaves unexpectedly, the
- system service and the HAL must be reset and the client must be notified. Without a full
- reset in this catastrophic case, the state of the HAL and the system service cannot be
- guaranteed to the client.
- */
- Log.wtf(TAG, "Crashing system server due to unrecoverable exception", e);
- Process.killProcess(Process.myPid());
+ Log.wtf(TAG, "Unexpected exception", e);
throw new InternalServerError(e);
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index d7a0c9871b48..289bf66e1add 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -1380,11 +1380,11 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
@Override
- public void onNotificationBubbleChanged(String key, boolean isBubble) {
+ public void onNotificationBubbleChanged(String key, boolean isBubble, int flags) {
enforceStatusBarService();
long identity = Binder.clearCallingIdentity();
try {
- mNotificationDelegate.onNotificationBubbleChanged(key, isBubble);
+ mNotificationDelegate.onNotificationBubbleChanged(key, isBubble, flags);
} finally {
Binder.restoreCallingIdentity(identity);
}
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 68224b59a287..75d6a090bd3d 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -16,6 +16,7 @@
package com.android.server.wm;
+import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY;
@@ -48,6 +49,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.util.TypedValue;
import android.view.Display;
+import android.view.InsetsState;
import android.view.MagnificationSpec;
import android.view.Surface;
import android.view.Surface.OutOfResourcesException;
@@ -1203,6 +1205,17 @@ final class AccessibilityController {
updateUnaccountedSpace(windowState, regionInScreen, unaccountedSpace,
skipRemainingWindowsForTasks);
focusedWindowAdded |= windowState.isFocused();
+ } else if (isUntouchableNavigationBar(windowState)) {
+ // If this widow is navigation bar without touchable region, accounting the
+ // region of navigation bar inset because all touch events from this region
+ // would be received by launcher, i.e. this region is a un-touchable one
+ // for the application.
+ final InsetsState insetsState =
+ dc.getInsetsStateController().getRawInsetsState();
+ final Rect displayFrame =
+ insetsState.getSource(ITYPE_NAVIGATION_BAR).getFrame();
+ unaccountedSpace.op(displayFrame, unaccountedSpace,
+ Region.Op.REVERSE_DIFFERENCE);
}
if (unaccountedSpace.isEmpty() && focusedWindowAdded) {
@@ -1281,6 +1294,18 @@ final class AccessibilityController {
return false;
}
+ private boolean isUntouchableNavigationBar(WindowState windowState) {
+ if (windowState.mAttrs.type != WindowManager.LayoutParams.TYPE_NAVIGATION_BAR) {
+ return false;
+ }
+
+ // Gets the touchable region.
+ Region touchableRegion = mTempRegion1;
+ windowState.getTouchableRegion(touchableRegion);
+
+ return touchableRegion.isEmpty();
+ }
+
private void updateUnaccountedSpace(WindowState windowState, Region regionInScreen,
Region unaccountedSpace, HashSet<Integer> skipRemainingWindowsForTasks) {
if (windowState.mAttrs.type
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index ed9b01916657..e79b804f76f9 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -1298,6 +1298,19 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (newTask != null && isState(RESUMED)) {
newTask.setResumedActivity(this, "onParentChanged");
}
+
+ if (stack != null && stack.topRunningActivity() == this) {
+ // carry over the PictureInPictureParams to the parent stack without calling
+ // TaskOrganizerController#dispatchTaskInfoChanged.
+ // this is to ensure the stack holding up-to-dated pinned stack information
+ // when activity is re-parented to enter pip mode, see also
+ // RootWindowContainer#moveActivityToPinnedStack
+ stack.mPictureInPictureParams.copyOnlySet(pictureInPictureArgs);
+ // make ensure the TaskOrganizer still works after re-parenting
+ if (firstWindowDrawn) {
+ stack.setHasBeenVisible(true);
+ }
+ }
}
private void updateColorTransform() {
@@ -2656,6 +2669,17 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return this;
}
+ // Ensure activity visibilities and update lockscreen occluded/dismiss state when
+ // finishing the top activity that occluded keyguard. So that, the
+ // ActivityStack#mTopActivityOccludesKeyguard can be updated and the activity below won't
+ // be resumed.
+ if (isState(PAUSED)
+ && mStackSupervisor.getKeyguardController().isKeyguardLocked()
+ && getStack().topActivityOccludesKeyguard()) {
+ getStack().ensureActivitiesVisible(null /* starting */, 0 /* configChanges */,
+ false /* preserveWindows */, false /* notifyClients */);
+ }
+
boolean activityRemoved = false;
// If this activity is currently visible, and the resumed activity is not yet visible, then
@@ -5112,26 +5136,48 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
void startFreezingScreen() {
+ startFreezingScreen(ROTATION_UNDEFINED /* overrideOriginalDisplayRotation */);
+ }
+
+ void startFreezingScreen(int overrideOriginalDisplayRotation) {
ProtoLog.i(WM_DEBUG_ORIENTATION,
"Set freezing of %s: visible=%b freezing=%b visibleRequested=%b. %s",
appToken, isVisible(), mFreezingScreen, mVisibleRequested,
new RuntimeException().fillInStackTrace());
- if (mVisibleRequested) {
- if (!mFreezingScreen) {
- mFreezingScreen = true;
- mWmService.registerAppFreezeListener(this);
- mWmService.mAppsFreezingScreen++;
- if (mWmService.mAppsFreezingScreen == 1) {
- mWmService.startFreezingDisplayLocked(0, 0, getDisplayContent());
- mWmService.mH.removeMessages(H.APP_FREEZE_TIMEOUT);
- mWmService.mH.sendEmptyMessageDelayed(H.APP_FREEZE_TIMEOUT, 2000);
+ if (!mVisibleRequested) {
+ return;
+ }
+
+ // If the override is given, the rotation of display doesn't change but we still want to
+ // cover the activity whose configuration is changing by freezing the display and running
+ // the rotation animation.
+ final boolean forceRotation = overrideOriginalDisplayRotation != ROTATION_UNDEFINED;
+ if (!mFreezingScreen) {
+ mFreezingScreen = true;
+ mWmService.registerAppFreezeListener(this);
+ mWmService.mAppsFreezingScreen++;
+ if (mWmService.mAppsFreezingScreen == 1) {
+ if (forceRotation) {
+ // Make sure normal rotation animation will be applied.
+ mDisplayContent.getDisplayRotation().cancelSeamlessRotation();
}
+ mWmService.startFreezingDisplay(0 /* exitAnim */, 0 /* enterAnim */,
+ mDisplayContent, overrideOriginalDisplayRotation);
+ mWmService.mH.removeMessages(H.APP_FREEZE_TIMEOUT);
+ mWmService.mH.sendEmptyMessageDelayed(H.APP_FREEZE_TIMEOUT, 2000);
}
- final int count = mChildren.size();
- for (int i = 0; i < count; i++) {
- final WindowState w = mChildren.get(i);
- w.onStartFreezingScreen();
- }
+ }
+ if (forceRotation) {
+ // The rotation of the real display won't change, so in order to unfreeze the screen
+ // via {@link #checkAppWindowsReadyToShow}, the windows have to be able to call
+ // {@link WindowState#reportResized} (it is skipped if the window is freezing) to update
+ // the drawn state.
+ return;
+ }
+ final int count = mChildren.size();
+ for (int i = 0; i < count; i++) {
+ final WindowState w = mChildren.get(i);
+ w.onStartFreezingScreen();
}
}
@@ -5592,6 +5638,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
_taskDescription.setIconFilename(iconFilePath);
}
taskDescription = _taskDescription;
+ getTask().updateTaskDescription();
}
void setVoiceSessionLocked(IVoiceInteractionSession session) {
@@ -6145,6 +6192,21 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
}
+ @Override
+ void onCancelFixedRotationTransform(int originalDisplayRotation) {
+ if (this != mDisplayContent.getLastOrientationSource()
+ || getRequestedConfigurationOrientation() != ORIENTATION_UNDEFINED) {
+ // Only need to handle the activity that should be rotated with display.
+ return;
+ }
+
+ // Perform rotation animation according to the rotation of this activity.
+ startFreezingScreen(originalDisplayRotation);
+ // This activity may relaunch or perform configuration change so once it has reported drawn,
+ // the screen can be unfrozen.
+ ensureActivityConfiguration(0 /* globalChanges */, !PRESERVE_WINDOWS);
+ }
+
void setRequestedOrientation(int requestedOrientation) {
setOrientation(requestedOrientation, mayFreezeScreenLocked());
mAtmService.getTaskChangeNotificationController().notifyActivityRequestedOrientationChanged(
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index bcad7586b918..8bf46bc7c2e8 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -783,6 +783,11 @@ class ActivityStack extends Task {
if (currentMode == WINDOWING_MODE_PINNED) {
mAtmService.getTaskChangeNotificationController().notifyActivityUnpinned();
}
+ if (likelyResolvedMode == WINDOWING_MODE_PINNED
+ && taskDisplayArea.getRootPinnedTask() != null) {
+ // Can only have 1 pip at a time, so replace an existing pip
+ taskDisplayArea.getRootPinnedTask().dismissPip();
+ }
if (likelyResolvedMode != WINDOWING_MODE_FULLSCREEN
&& topActivity != null && !topActivity.noDisplay
&& topActivity.isNonResizableOrForcedResizable(likelyResolvedMode)) {
@@ -1049,6 +1054,9 @@ class ActivityStack extends Task {
}
/**
+ * This moves 'task' to the back of this task and also recursively moves this task to the back
+ * of its parents (if applicable).
+ *
* @param reason The reason for moving the stack to the back.
* @param task If non-null, the task will be moved to the bottom of the stack.
**/
@@ -1056,18 +1064,41 @@ class ActivityStack extends Task {
if (!isAttached()) {
return;
}
-
- getDisplayArea().positionStackAtBottom(this, reason);
- if (task != null && task != this) {
- positionChildAtBottom(task);
+ final TaskDisplayArea displayArea = getDisplayArea();
+ if (!mCreatedByOrganizer) {
+ // If this is just a normal task, so move to back of parent and then move 'task' to
+ // back of this.
+ final WindowContainer parent = getParent();
+ final Task parentTask = parent != null ? parent.asTask() : null;
+ if (parentTask != null) {
+ ((ActivityStack) parentTask).moveToBack(reason, this);
+ } else {
+ displayArea.positionStackAtBottom(this, reason);
+ }
+ if (task != null && task != this) {
+ positionChildAtBottom(task);
+ }
+ return;
}
-
- /**
- * The intent behind moving a primary split screen stack to the back is usually to hide
- * behind the home stack. Exit split screen in this case.
- */
- if (getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- setWindowingMode(WINDOWING_MODE_UNDEFINED);
+ if (task == null || task == this) {
+ return;
+ }
+ // This is a created-by-organizer task. In this case, let the organizer deal with this
+ // task's ordering. However, we still need to move 'task' to back. The intention is that
+ // this ends up behind the home-task so that it is made invisible; so, if the home task
+ // is not a child of this, reparent 'task' to the back of the home task's actual parent.
+ final ActivityStack home = displayArea.getOrCreateRootHomeTask();
+ final WindowContainer homeParent = home.getParent();
+ final Task homeParentTask = homeParent != null ? homeParent.asTask() : null;
+ if (homeParentTask == null) {
+ ((ActivityStack) task).reparent(displayArea, false /* onTop */);
+ } else if (homeParentTask == this) {
+ // Apparently reparent early-outs if same stack, so we have to explicitly reorder.
+ positionChildAtBottom(task);
+ } else {
+ task.reparent((ActivityStack) homeParentTask, false /* toTop */,
+ REPARENT_LEAVE_STACK_IN_PLACE, false /* animate */, false /* deferResume */,
+ "moveToBack");
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index c253cd2c3297..7a04894523f5 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -3061,8 +3061,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
ActivityRecord r = ActivityRecord.isInStackLocked(token);
if (r != null) {
r.setTaskDescription(td);
- final Task task = r.getTask();
- task.updateTaskDescription();
}
}
}
@@ -4095,11 +4093,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
r.setPictureInPictureParams(params);
final float aspectRatio = r.pictureInPictureArgs.getAspectRatio();
final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
- // Adjust the source bounds by the insets for the transition down
- final Rect sourceBounds = new Rect(
- r.pictureInPictureArgs.getSourceRectHint());
mRootWindowContainer.moveActivityToPinnedStack(
- r, sourceBounds, aspectRatio, "enterPictureInPictureMode");
+ r, "enterPictureInPictureMode");
final ActivityStack stack = r.getRootTask();
stack.setPictureInPictureAspectRatio(aspectRatio);
stack.setPictureInPictureActions(actions);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 80a1a4592ff3..36d558312c2f 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -25,6 +25,7 @@ import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
@@ -494,6 +495,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
* The launching activity which is using fixed rotation transformation.
*
* @see #handleTopActivityLaunchingInDifferentOrientation
+ * @see DisplayRotation#shouldRotateSeamlessly
*/
ActivityRecord mFixedRotationLaunchingApp;
@@ -1237,7 +1239,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
if (configChanged) {
mWaitingForConfig = true;
- mWmService.startFreezingDisplayLocked(0 /* exitAnim */, 0 /* enterAnim */, this);
+ mWmService.startFreezingDisplay(0 /* exitAnim */, 0 /* enterAnim */, this);
sendNewConfiguration();
}
@@ -1475,6 +1477,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
sendNewConfiguration();
return true;
}
+ // The display won't rotate (e.g. the orientation from sensor has updated again before
+ // applying rotation to display), so clear it to stop using seamless rotation.
+ mFixedRotationLaunchingApp = null;
return false;
}
@@ -5028,6 +5033,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
return activityType == ACTIVITY_TYPE_STANDARD
&& (windowingMode == WINDOWING_MODE_FULLSCREEN
|| windowingMode == WINDOWING_MODE_FREEFORM
+ || windowingMode == WINDOWING_MODE_PINNED
|| windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
|| windowingMode == WINDOWING_MODE_MULTI_WINDOW);
}
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index bef80f0a230a..ebfe70c0c371 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -537,8 +537,29 @@ public class DisplayRotation {
}
void prepareNormalRotationAnimation() {
+ cancelSeamlessRotation();
final RotationAnimationPair anim = selectRotationAnimation();
- mService.startFreezingDisplayLocked(anim.mExit, anim.mEnter, mDisplayContent);
+ mService.startFreezingDisplay(anim.mExit, anim.mEnter, mDisplayContent);
+ }
+
+ /**
+ * This ensures that normal rotation animation is used. E.g. {@link #mRotatingSeamlessly} was
+ * set by previous {@link #updateRotationUnchecked}, but another orientation change happens
+ * before calling {@link DisplayContent#sendNewConfiguration} (remote rotation hasn't finished)
+ * and it doesn't choose seamless rotation.
+ */
+ void cancelSeamlessRotation() {
+ if (!mRotatingSeamlessly) {
+ return;
+ }
+ mDisplayContent.forAllWindows(w -> {
+ if (w.mSeamlesslyRotated) {
+ w.finishSeamlessRotation(false /* timeout */);
+ w.mSeamlesslyRotated = false;
+ }
+ }, true /* traverseTopToBottom */);
+ mSeamlessRotationCount = 0;
+ mRotatingSeamlessly = false;
}
private void prepareSeamlessRotation() {
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 1a70de71df4f..e8f7ba550bd8 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -2147,13 +2147,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return false;
}
- moveActivityToPinnedStack(r, null /* sourceBounds */, 0f /* aspectRatio */,
- "moveTopActivityToPinnedStack");
+ moveActivityToPinnedStack(r, "moveTopActivityToPinnedStack");
return true;
}
- void moveActivityToPinnedStack(ActivityRecord r, Rect sourceHintBounds, float aspectRatio,
- String reason) {
+ void moveActivityToPinnedStack(ActivityRecord r, String reason) {
mService.deferWindowLayout();
final TaskDisplayArea taskDisplayArea = r.getDisplayArea();
@@ -2176,17 +2174,19 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
final ActivityStack stack;
if (singleActivity) {
stack = r.getRootTask();
- stack.setWindowingMode(WINDOWING_MODE_PINNED);
} else {
// In the case of multiple activities, we will create a new task for it and then
// move the PIP activity into the task.
- stack = taskDisplayArea.createStack(WINDOWING_MODE_PINNED, r.getActivityType(),
+ stack = taskDisplayArea.createStack(WINDOWING_MODE_UNDEFINED, r.getActivityType(),
ON_TOP, r.info, r.intent, false /* createdByOrganizer */);
// There are multiple activities in the task and moving the top activity should
// reveal/leave the other activities in their original task.
- r.reparent(stack, MAX_VALUE, "moveActivityToStack");
+ // On the other hand, ActivityRecord#onParentChanged takes care of setting the
+ // up-to-dated pinned stack information on this newly created stack.
+ r.reparent(stack, MAX_VALUE, reason);
}
+ stack.setWindowingMode(WINDOWING_MODE_PINNED);
// Reset the state that indicates it can enter PiP while pausing after we've moved it
// to the pinned stack
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index b92ead1a0531..5f33ea170923 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -41,7 +41,6 @@ import android.graphics.Rect;
import android.os.Trace;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
-import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
import android.view.Surface.OutOfResourcesException;
@@ -117,8 +116,9 @@ class ScreenRotationAnimation {
private BlackFrame mEnteringBlackFrame;
private int mWidth, mHeight;
- private int mOriginalRotation;
- private int mOriginalWidth, mOriginalHeight;
+ private final int mOriginalRotation;
+ private final int mOriginalWidth;
+ private final int mOriginalHeight;
private int mCurRotation;
private Rect mOriginalDisplayRect = new Rect();
@@ -140,20 +140,18 @@ class ScreenRotationAnimation {
/** Intensity of light/whiteness of the layout after rotation occurs. */
private float mEndLuma;
- public ScreenRotationAnimation(Context context, DisplayContent displayContent,
- boolean fixedToUserRotation, boolean isSecure, WindowManagerService service) {
- mService = service;
- mContext = context;
+ ScreenRotationAnimation(DisplayContent displayContent, @Surface.Rotation int originalRotation) {
+ mService = displayContent.mWmService;
+ mContext = mService.mContext;
mDisplayContent = displayContent;
displayContent.getBounds(mOriginalDisplayRect);
// Screenshot does NOT include rotation!
- final Display display = displayContent.getDisplay();
- int originalRotation = display.getRotation();
+ final DisplayInfo displayInfo = displayContent.getDisplayInfo();
+ final int realOriginalRotation = displayInfo.rotation;
final int originalWidth;
final int originalHeight;
- DisplayInfo displayInfo = displayContent.getDisplayInfo();
- if (fixedToUserRotation) {
+ if (displayContent.getDisplayRotation().isFixedToUserRotation()) {
// Emulated orientation.
mForceDefaultOrientation = true;
originalWidth = displayContent.mBaseDisplayWidth;
@@ -163,8 +161,8 @@ class ScreenRotationAnimation {
originalWidth = displayInfo.logicalWidth;
originalHeight = displayInfo.logicalHeight;
}
- if (originalRotation == Surface.ROTATION_90
- || originalRotation == Surface.ROTATION_270) {
+ if (realOriginalRotation == Surface.ROTATION_90
+ || realOriginalRotation == Surface.ROTATION_270) {
mWidth = originalHeight;
mHeight = originalWidth;
} else {
@@ -173,10 +171,18 @@ class ScreenRotationAnimation {
}
mOriginalRotation = originalRotation;
- mOriginalWidth = originalWidth;
- mOriginalHeight = originalHeight;
+ // If the delta is not zero, the rotation of display may not change, but we still want to
+ // apply rotation animation because there should be a top app shown as rotated. So the
+ // specified original rotation customizes the direction of animation to have better look
+ // when restoring the rotated app to the same rotation as current display.
+ final int delta = DisplayContent.deltaRotation(originalRotation, realOriginalRotation);
+ final boolean flipped = delta == Surface.ROTATION_90 || delta == Surface.ROTATION_270;
+ mOriginalWidth = flipped ? originalHeight : originalWidth;
+ mOriginalHeight = flipped ? originalWidth : originalHeight;
mSurfaceRotationAnimationController = new SurfaceRotationAnimationController();
+ // Check whether the current screen contains any secure content.
+ final boolean isSecure = displayContent.hasSecureWindowOnScreen();
final SurfaceControl.Transaction t = mService.mTransactionFactory.get();
try {
mBackColorSurface = displayContent.makeChildSurface(null)
@@ -202,7 +208,7 @@ class ScreenRotationAnimation {
t2.apply(true /* sync */);
// Capture a screenshot into the surface we just created.
- final int displayId = display.getDisplayId();
+ final int displayId = displayContent.getDisplayId();
final Surface surface = mService.mSurfaceFactory.get();
surface.copyFrom(mScreenshotLayer);
SurfaceControl.ScreenshotGraphicBuffer gb =
@@ -242,7 +248,7 @@ class ScreenRotationAnimation {
ProtoLog.i(WM_SHOW_SURFACE_ALLOC,
" FREEZE %s: CREATE", mScreenshotLayer);
- setRotation(t, originalRotation);
+ setRotation(t, realOriginalRotation);
t.apply();
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 373abfef6470..ee6cc9aa5290 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -1769,6 +1769,10 @@ class Task extends WindowContainer<WindowContainer> {
t.updateTaskDescription();
}
}
+
+ if (isOrganized()) {
+ mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, true /* force */);
+ }
}
private static boolean setTaskDescriptionFromActivityAboveRoot(
@@ -1964,7 +1968,7 @@ class Task extends WindowContainer<WindowContainer> {
final boolean taskOrgChanged = updateTaskOrganizerState(false /* forceUpdate */);
// If the task organizer has changed, then it will already be receiving taskAppeared with
// the latest task-info thus the task-info won't have changed.
- if (!taskOrgChanged && mTaskOrganizer != null) {
+ if (!taskOrgChanged && isOrganized()) {
mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, false /* force */);
}
}
@@ -3068,6 +3072,7 @@ class Task extends WindowContainer<WindowContainer> {
mForceShowForAllUsers = forceShowForAllUsers;
}
+ @Override
public boolean isAttached() {
final TaskDisplayArea taskDisplayArea = getDisplayArea();
return taskDisplayArea != null && !taskDisplayArea.isRemoved();
@@ -4173,8 +4178,6 @@ class Task extends WindowContainer<WindowContainer> {
// Let the old organizer know it has lost control.
sendTaskVanished();
mTaskOrganizer = organizer;
-
-
sendTaskAppeared();
onTaskOrganizerChanged();
return true;
@@ -4311,8 +4314,9 @@ class Task extends WindowContainer<WindowContainer> {
void setPictureInPictureParams(PictureInPictureParams p) {
mPictureInPictureParams.copyOnlySet(p);
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(
- this, true /* force */);
+ if (isOrganized()) {
+ mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, true /* force */);
+ }
}
/**
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index ea9a3629a40f..d71e56106e18 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -879,6 +879,11 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
+ windowingMode);
}
+ if (windowingMode == WINDOWING_MODE_PINNED && getRootPinnedTask() != null) {
+ // Only 1 stack can be PINNED at a time, so dismiss the existing one
+ getRootPinnedTask().dismissPip();
+ }
+
final int stackId = getNextStackId();
return createStackUnchecked(windowingMode, activityType, stackId, onTop, info, intent,
createdByOrganizer);
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 9873031e0138..adc50bf70446 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -27,6 +27,7 @@ import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_WINDO
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
+import android.app.ActivityManager.TaskDescription;
import android.app.WindowConfiguration;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -439,7 +440,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
boolean changed = lastInfo == null
|| mTmpTaskInfo.topActivityType != lastInfo.topActivityType
|| mTmpTaskInfo.isResizable() != lastInfo.isResizable()
- || mTmpTaskInfo.pictureInPictureParams != lastInfo.pictureInPictureParams;
+ || mTmpTaskInfo.pictureInPictureParams != lastInfo.pictureInPictureParams
+ || !TaskDescription.equals(mTmpTaskInfo.taskDescription, lastInfo.taskDescription);
if (!changed) {
int cfgChanges = mTmpTaskInfo.configuration.diff(lastInfo.configuration);
final int winCfgChanges = (cfgChanges & ActivityInfo.CONFIG_WINDOW_CONFIGURATION) != 0
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index fba22dd4e9df..7219164ad2f1 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -737,6 +737,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
return parent != null ? parent.getDisplayArea() : null;
}
+ boolean isAttached() {
+ return getDisplayArea() != null;
+ }
+
void setWaitingForDrawnIfResizingChanged() {
for (int i = mChildren.size() - 1; i >= 0; --i) {
final WindowContainer wc = mChildren.get(i);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 9d879765f8df..5c7d37baef37 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -29,6 +29,7 @@ import static android.app.ActivityManagerInternal.ALLOW_NON_FULL;
import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
import static android.app.StatusBarManager.DISABLE_MASK;
+import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED;
import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
import static android.content.pm.PackageManager.FEATURE_PC;
@@ -2941,7 +2942,7 @@ public class WindowManagerService extends IWindowManager.Stub
mClientFreezingScreen = true;
final long origId = Binder.clearCallingIdentity();
try {
- startFreezingDisplayLocked(exitAnim, enterAnim);
+ startFreezingDisplay(exitAnim, enterAnim);
mH.removeMessages(H.CLIENT_FREEZE_TIMEOUT);
mH.sendEmptyMessageDelayed(H.CLIENT_FREEZE_TIMEOUT, 5000);
} finally {
@@ -5479,13 +5480,17 @@ public class WindowManagerService extends IWindowManager.Stub
return changed;
}
- void startFreezingDisplayLocked(int exitAnim, int enterAnim) {
- startFreezingDisplayLocked(exitAnim, enterAnim,
- getDefaultDisplayContentLocked());
+ void startFreezingDisplay(int exitAnim, int enterAnim) {
+ startFreezingDisplay(exitAnim, enterAnim, getDefaultDisplayContentLocked());
}
- void startFreezingDisplayLocked(int exitAnim, int enterAnim,
- DisplayContent displayContent) {
+ void startFreezingDisplay(int exitAnim, int enterAnim, DisplayContent displayContent) {
+ startFreezingDisplay(exitAnim, enterAnim, displayContent,
+ ROTATION_UNDEFINED /* overrideOriginalRotation */);
+ }
+
+ void startFreezingDisplay(int exitAnim, int enterAnim, DisplayContent displayContent,
+ int overrideOriginalRotation) {
if (mDisplayFrozen || displayContent.getDisplayRotation().isRotatingSeamlessly()) {
return;
}
@@ -5529,14 +5534,12 @@ public class WindowManagerService extends IWindowManager.Stub
screenRotationAnimation.kill();
}
- // Check whether the current screen contains any secure content.
- boolean isSecure = displayContent.hasSecureWindowOnScreen();
-
displayContent.updateDisplayInfo();
- screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent,
- displayContent.getDisplayRotation().isFixedToUserRotation(), isSecure,
- this);
- displayContent.setRotationAnimation(screenRotationAnimation);
+ final int originalRotation = overrideOriginalRotation != ROTATION_UNDEFINED
+ ? overrideOriginalRotation
+ : displayContent.getDisplayInfo().rotation;
+ displayContent.setRotationAnimation(new ScreenRotationAnimation(displayContent,
+ originalRotation));
}
void stopFreezingDisplayLocked() {
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 86bc013e3638..d9c0219c4779 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -129,6 +129,10 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
final Map.Entry<IBinder, WindowContainerTransaction.Change> entry =
entries.next();
final WindowContainer wc = WindowContainer.fromBinder(entry.getKey());
+ if (!wc.isAttached()) {
+ Slog.e(TAG, "Attempt to operate on detached container: " + wc);
+ continue;
+ }
int containerEffect = applyWindowContainerChange(wc, entry.getValue());
effects |= containerEffect;
@@ -146,6 +150,10 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
for (int i = 0, n = hops.size(); i < n; ++i) {
final WindowContainerTransaction.HierarchyOp hop = hops.get(i);
final WindowContainer wc = WindowContainer.fromBinder(hop.getContainer());
+ if (!wc.isAttached()) {
+ Slog.e(TAG, "Attempt to operate on detached container: " + wc);
+ continue;
+ }
effects |= sanitizeAndApplyHierarchyOp(wc, hop);
}
if ((effects & TRANSACT_EFFECTS_LIFECYCLE) != 0) {
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index e34b81654c72..2d5c4c1c3b7c 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -595,7 +595,17 @@ class WindowToken extends WindowContainer<WindowState> {
// The window may be detached or detaching.
return;
}
+ final int originalRotation = getWindowConfiguration().getRotation();
onConfigurationChanged(parent.getConfiguration());
+ onCancelFixedRotationTransform(originalRotation);
+ }
+
+ /**
+ * It is called when the window is using fixed rotation transform, and before display applies
+ * the same rotation, the rotation change for display is canceled, e.g. the orientation from
+ * sensor is updated to previous direction.
+ */
+ void onCancelFixedRotationTransform(int originalDisplayRotation) {
}
@Override
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index 2c6bf0a80fe0..149dfa6be6c4 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -353,10 +353,14 @@ void IncrementalService::onSystemReady() {
}
}
- /* TODO(b/151241369): restore data loaders on reboot.
+ if (mounts.empty()) {
+ return;
+ }
+
std::thread([this, mounts = std::move(mounts)]() {
+ mJni->initializeForCurrentThread();
for (auto&& ifs : mounts) {
- if (prepareDataLoader(*ifs)) {
+ if (ifs->dataLoaderStub->create()) {
LOG(INFO) << "Successfully started data loader for mount " << ifs->mountId;
} else {
// TODO(b/133435829): handle data loader start failures
@@ -364,7 +368,6 @@ void IncrementalService::onSystemReady() {
}
}
}).detach();
- */
}
auto IncrementalService::getStorageSlotLocked() -> MountMap::iterator {
@@ -1068,6 +1071,9 @@ bool IncrementalService::mountExistingImage(std::string_view root) {
dataLoaderParams.arguments = loader.arguments();
}
+ prepareDataLoader(*ifs, std::move(dataLoaderParams), nullptr);
+ CHECK(ifs->dataLoaderStub);
+
std::vector<std::pair<std::string, metadata::BindPoint>> bindPoints;
auto d = openDir(path::c_str(mountTarget));
while (auto e = ::readdir(d.get())) {
@@ -1273,7 +1279,7 @@ bool IncrementalService::configureNativeBinaries(StorageId storage, std::string_
{
std::lock_guard lock(mJobMutex);
if (mRunning) {
- auto& existingJobs = mJobQueue[storage];
+ auto& existingJobs = mJobQueue[ifs->mountId];
if (existingJobs.empty()) {
existingJobs = std::move(jobQueue);
} else {
@@ -1363,12 +1369,32 @@ void IncrementalService::extractZipFile(const IfsMountPtr& ifs, ZipArchiveHandle
}
bool IncrementalService::waitForNativeBinariesExtraction(StorageId storage) {
+ struct WaitPrinter {
+ const Clock::time_point startTs = Clock::now();
+ ~WaitPrinter() noexcept {
+ if (sEnablePerfLogging) {
+ const auto endTs = Clock::now();
+ LOG(INFO) << "incfs: waitForNativeBinariesExtraction() complete in "
+ << elapsedMcs(startTs, endTs) << "mcs";
+ }
+ }
+ } waitPrinter;
+
+ MountId mount;
+ {
+ auto ifs = getIfs(storage);
+ if (!ifs) {
+ return true;
+ }
+ mount = ifs->mountId;
+ }
+
std::unique_lock lock(mJobMutex);
- mJobCondition.wait(lock, [this, storage] {
+ mJobCondition.wait(lock, [this, mount] {
return !mRunning ||
- (mPendingJobsStorage != storage && mJobQueue.find(storage) == mJobQueue.end());
+ (mPendingJobsMount != mount && mJobQueue.find(mount) == mJobQueue.end());
});
- return mPendingJobsStorage != storage && mJobQueue.find(storage) == mJobQueue.end();
+ return mRunning;
}
void IncrementalService::runJobProcessing() {
@@ -1380,7 +1406,7 @@ void IncrementalService::runJobProcessing() {
}
auto it = mJobQueue.begin();
- mPendingJobsStorage = it->first;
+ mPendingJobsMount = it->first;
auto queue = std::move(it->second);
mJobQueue.erase(it);
lock.unlock();
@@ -1390,7 +1416,7 @@ void IncrementalService::runJobProcessing() {
}
lock.lock();
- mPendingJobsStorage = kInvalidStorageId;
+ mPendingJobsMount = kInvalidStorageId;
lock.unlock();
mJobCondition.notify_all();
}
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index e7705df633d1..c016bab067be 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -308,8 +308,8 @@ private:
StorageId mNextId = 0;
using Job = std::function<void()>;
- std::unordered_map<StorageId, std::vector<Job>> mJobQueue;
- StorageId mPendingJobsStorage = kInvalidStorageId;
+ std::unordered_map<MountId, std::vector<Job>> mJobQueue;
+ MountId mPendingJobsMount = kInvalidStorageId;
std::condition_variable mJobCondition;
std::mutex mJobMutex;
std::thread mJobProcessor;
diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
index b60e99363706..f205fde88c0d 100644
--- a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
@@ -117,6 +117,16 @@ public class AppsFilterTest {
}
private static ParsingPackage pkg(String packageName, IntentFilter... filters) {
+ ParsedActivity activity = createActivity(packageName, filters);
+ return pkg(packageName).addActivity(activity);
+ }
+
+ private static ParsingPackage pkgWithReceiver(String packageName, IntentFilter... filters) {
+ ParsedActivity receiver = createActivity(packageName, filters);
+ return pkg(packageName).addReceiver(receiver);
+ }
+
+ private static ParsedActivity createActivity(String packageName, IntentFilter[] filters) {
ParsedActivity activity = new ParsedActivity();
activity.setPackageName(packageName);
for (IntentFilter filter : filters) {
@@ -136,9 +146,7 @@ public class AppsFilterTest {
activity.addIntent(info);
activity.setExported(true);
}
-
- return pkg(packageName)
- .addActivity(activity);
+ return activity;
}
private static ParsingPackage pkgWithInstrumentation(
@@ -176,9 +184,10 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesAction_FilterMatches() {
+ public void testQueriesAction_FilterMatches() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -190,9 +199,46 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesProvider_FilterMatches() {
+ public void testQueriesProtectedAction_FilterDoesNotMatch() throws Exception {
+ final AppsFilter appsFilter =
+ new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ final Signature frameworkSignature = Mockito.mock(Signature.class);
+ final PackageParser.SigningDetails frameworkSigningDetails =
+ new PackageParser.SigningDetails(new Signature[]{frameworkSignature}, 1);
+ final ParsingPackage android = pkg("android");
+ android.addProtectedBroadcast("TEST_ACTION");
+ simulateAddPackage(appsFilter, android, 1000,
+ b -> b.setSigningDetails(frameworkSigningDetails));
+ appsFilter.onSystemReady();
+
+ final int activityUid = DUMMY_TARGET_UID;
+ PackageSetting targetActivity = simulateAddPackage(appsFilter,
+ pkg("com.target.activity", new IntentFilter("TEST_ACTION")), activityUid);
+ final int receiverUid = DUMMY_TARGET_UID + 1;
+ PackageSetting targetReceiver = simulateAddPackage(appsFilter,
+ pkgWithReceiver("com.target.receiver", new IntentFilter("TEST_ACTION")),
+ receiverUid);
+ final int callingUid = DUMMY_CALLING_UID;
+ PackageSetting calling = simulateAddPackage(appsFilter,
+ pkg("com.calling.action", new Intent("TEST_ACTION")), callingUid);
+ final int wildcardUid = DUMMY_CALLING_UID + 1;
+ PackageSetting callingWildCard = simulateAddPackage(appsFilter,
+ pkg("com.calling.wildcard", new Intent("*")), wildcardUid);
+
+ assertFalse(appsFilter.shouldFilterApplication(callingUid, calling, targetActivity, 0));
+ assertTrue(appsFilter.shouldFilterApplication(callingUid, calling, targetReceiver, 0));
+
+ assertFalse(appsFilter.shouldFilterApplication(
+ wildcardUid, callingWildCard, targetActivity, 0));
+ assertTrue(appsFilter.shouldFilterApplication(
+ wildcardUid, callingWildCard, targetReceiver, 0));
+ }
+
+ @Test
+ public void testQueriesProvider_FilterMatches() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -205,9 +251,10 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesDifferentProvider_Filters() {
+ public void testQueriesDifferentProvider_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -220,9 +267,10 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesProviderWithSemiColon_FilterMatches() {
+ public void testQueriesProviderWithSemiColon_FilterMatches() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -236,9 +284,10 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesAction_NoMatchingAction_Filters() {
+ public void testQueriesAction_NoMatchingAction_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -250,9 +299,10 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesAction_NoMatchingActionFilterLowSdk_DoesntFilter() {
+ public void testQueriesAction_NoMatchingActionFilterLowSdk_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -269,9 +319,10 @@ public class AppsFilterTest {
}
@Test
- public void testNoQueries_Filters() {
+ public void testNoQueries_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -283,9 +334,10 @@ public class AppsFilterTest {
}
@Test
- public void testForceQueryable_DoesntFilter() {
+ public void testForceQueryable_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -297,9 +349,10 @@ public class AppsFilterTest {
}
@Test
- public void testForceQueryableByDevice_SystemCaller_DoesntFilter() {
+ public void testForceQueryableByDevice_SystemCaller_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{"com.some.package"}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -340,9 +393,10 @@ public class AppsFilterTest {
}
@Test
- public void testForceQueryableByDevice_NonSystemCaller_Filters() {
+ public void testForceQueryableByDevice_NonSystemCaller_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{"com.some.package"}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -355,10 +409,11 @@ public class AppsFilterTest {
@Test
- public void testSystemQueryable_DoesntFilter() {
+ public void testSystemQueryable_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{},
true /* system force queryable */, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -371,9 +426,10 @@ public class AppsFilterTest {
}
@Test
- public void testQueriesPackage_DoesntFilter() {
+ public void testQueriesPackage_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -385,11 +441,12 @@ public class AppsFilterTest {
}
@Test
- public void testNoQueries_FeatureOff_DoesntFilter() {
+ public void testNoQueries_FeatureOff_DoesntFilter() throws Exception {
when(mFeatureConfigMock.packageIsEnabled(any(AndroidPackage.class)))
.thenReturn(false);
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(
@@ -401,9 +458,10 @@ public class AppsFilterTest {
}
@Test
- public void testSystemUid_DoesntFilter() {
+ public void testSystemUid_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -415,9 +473,10 @@ public class AppsFilterTest {
}
@Test
- public void testNonSystemUid_NoCallingSetting_Filters() {
+ public void testNonSystemUid_NoCallingSetting_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter,
@@ -427,9 +486,10 @@ public class AppsFilterTest {
}
@Test
- public void testNoTargetPackage_filters() {
+ public void testNoTargetPackage_filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = new PackageSettingBuilder()
@@ -445,7 +505,7 @@ public class AppsFilterTest {
}
@Test
- public void testActsOnTargetOfOverlay() {
+ public void testActsOnTargetOfOverlay() throws Exception {
final String actorName = "overlay://test/actorName";
ParsingPackage target = pkg("com.some.package.target")
@@ -481,6 +541,7 @@ public class AppsFilterTest {
return Collections.emptyMap();
}
});
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting targetSetting = simulateAddPackage(appsFilter, target, DUMMY_TARGET_UID);
@@ -507,7 +568,7 @@ public class AppsFilterTest {
}
@Test
- public void testActsOnTargetOfOverlayThroughSharedUser() {
+ public void testActsOnTargetOfOverlayThroughSharedUser() throws Exception {
final String actorName = "overlay://test/actorName";
ParsingPackage target = pkg("com.some.package.target")
@@ -545,6 +606,7 @@ public class AppsFilterTest {
return Collections.emptyMap();
}
});
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting targetSetting = simulateAddPackage(appsFilter, target, DUMMY_TARGET_UID);
@@ -566,9 +628,10 @@ public class AppsFilterTest {
}
@Test
- public void testInitiatingApp_DoesntFilter() {
+ public void testInitiatingApp_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter, pkg("com.some.package"),
@@ -580,9 +643,10 @@ public class AppsFilterTest {
}
@Test
- public void testUninstalledInitiatingApp_Filters() {
+ public void testUninstalledInitiatingApp_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter, pkg("com.some.package"),
@@ -594,9 +658,10 @@ public class AppsFilterTest {
}
@Test
- public void testOriginatingApp_Filters() {
+ public void testOriginatingApp_Filters() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter, pkg("com.some.package"),
@@ -608,9 +673,10 @@ public class AppsFilterTest {
}
@Test
- public void testInstallingApp_DoesntFilter() {
+ public void testInstallingApp_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
PackageSetting target = simulateAddPackage(appsFilter, pkg("com.some.package"),
@@ -622,9 +688,10 @@ public class AppsFilterTest {
}
@Test
- public void testInstrumentation_DoesntFilter() {
+ public void testInstrumentation_DoesntFilter() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
@@ -644,6 +711,7 @@ public class AppsFilterTest {
public void testWhoCanSee() throws Exception {
final AppsFilter appsFilter =
new AppsFilter(mFeatureConfigMock, new String[]{}, false, null);
+ simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady();
final int systemAppId = Process.FIRST_APPLICATION_UID - 1;
@@ -700,6 +768,15 @@ public class AppsFilterTest {
PackageSettingBuilder withBuilder(PackageSettingBuilder builder);
}
+ private void simulateAddBasicAndroid(AppsFilter appsFilter) throws Exception {
+ final Signature frameworkSignature = Mockito.mock(Signature.class);
+ final PackageParser.SigningDetails frameworkSigningDetails =
+ new PackageParser.SigningDetails(new Signature[]{frameworkSignature}, 1);
+ final ParsingPackage android = pkg("android");
+ simulateAddPackage(appsFilter, android, 1000,
+ b -> b.setSigningDetails(frameworkSigningDetails));
+ }
+
private PackageSetting simulateAddPackage(AppsFilter filter,
ParsingPackage newPkgBuilder, int appId) {
return simulateAddPackage(filter, newPkgBuilder, appId, null);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BubbleCheckerTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BubbleCheckerTest.java
deleted file mode 100644
index 2578ca892520..000000000000
--- a/services/tests/uiservicestests/src/com/android/server/notification/BubbleCheckerTest.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.notification;
-
-import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
-
-import static junit.framework.Assert.assertTrue;
-
-import static org.junit.Assert.assertFalse;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager;
-import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.PendingIntent;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ShortcutInfo;
-import android.os.UserHandle;
-import android.service.notification.StatusBarNotification;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.server.UiServiceTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class BubbleCheckerTest extends UiServiceTestCase {
-
- private static final String SHORTCUT_ID = "shortcut";
- private static final String PKG = "pkg";
- private static final String KEY = "key";
- private static final int USER_ID = 1;
-
- @Mock
- ActivityManager mActivityManager;
- @Mock
- RankingConfig mRankingConfig;
- @Mock
- ShortcutHelper mShortcutHelper;
-
- @Mock
- NotificationRecord mNr;
- @Mock
- UserHandle mUserHandle;
- @Mock
- Notification mNotif;
- @Mock
- StatusBarNotification mSbn;
- @Mock
- NotificationChannel mChannel;
- @Mock
- Notification.BubbleMetadata mBubbleMetadata;
- @Mock
- PendingIntent mPendingIntent;
- @Mock
- Intent mIntent;
-
- BubbleExtractor.BubbleChecker mBubbleChecker;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- when(mNr.getKey()).thenReturn(KEY);
- when(mNr.getSbn()).thenReturn(mSbn);
- when(mNr.getUser()).thenReturn(mUserHandle);
- when(mUserHandle.getIdentifier()).thenReturn(USER_ID);
- when(mNr.getChannel()).thenReturn(mChannel);
- when(mSbn.getPackageName()).thenReturn(PKG);
- when(mSbn.getUser()).thenReturn(mUserHandle);
- when(mNr.getNotification()).thenReturn(mNotif);
- when(mNotif.getBubbleMetadata()).thenReturn(mBubbleMetadata);
-
- mBubbleChecker = new BubbleExtractor.BubbleChecker(mContext,
- mShortcutHelper,
- mRankingConfig,
- mActivityManager);
- }
-
- void setUpIntentBubble() {
- when(mPendingIntent.getIntent()).thenReturn(mIntent);
- when(mBubbleMetadata.getIntent()).thenReturn(mPendingIntent);
- when(mBubbleMetadata.getShortcutId()).thenReturn(null);
- }
-
- void setUpShortcutBubble(boolean isValid) {
- when(mBubbleMetadata.getShortcutId()).thenReturn(SHORTCUT_ID);
- ShortcutInfo info = mock(ShortcutInfo.class);
- when(info.getId()).thenReturn(SHORTCUT_ID);
- when(mShortcutHelper.getValidShortcutInfo(SHORTCUT_ID, PKG, mUserHandle))
- .thenReturn(isValid ? info : null);
- when(mBubbleMetadata.getIntent()).thenReturn(null);
- }
-
- void setUpBubblesEnabled(boolean feature, boolean app, boolean channel) {
- when(mRankingConfig.bubblesEnabled()).thenReturn(feature);
- when(mRankingConfig.areBubblesAllowed(PKG, USER_ID)).thenReturn(app);
- when(mChannel.canBubble()).thenReturn(channel);
- }
-
- void setUpActivityIntent(boolean isResizable) {
- when(mPendingIntent.getIntent()).thenReturn(mIntent);
- ActivityInfo info = new ActivityInfo();
- info.resizeMode = isResizable
- ? RESIZE_MODE_RESIZEABLE
- : RESIZE_MODE_UNRESIZEABLE;
- when(mIntent.resolveActivityInfo(any(), anyInt())).thenReturn(info);
- }
-
- //
- // canBubble
- //
-
- @Test
- public void testCanBubble_true_intentBubble() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- setUpIntentBubble();
- setUpActivityIntent(true /* isResizable */);
- when(mActivityManager.isLowRamDevice()).thenReturn(false);
- assertTrue(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubble_true_shortcutBubble() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- setUpShortcutBubble(true /* isValid */);
- assertTrue(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubble_false_noIntentInvalidShortcut() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- setUpShortcutBubble(false /* isValid */);
- assertFalse(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubble_false_noIntentNoShortcut() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- when(mBubbleMetadata.getIntent()).thenReturn(null);
- when(mBubbleMetadata.getShortcutId()).thenReturn(null);
- assertFalse(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubbble_false_noMetadata() {
- setUpBubblesEnabled(true/* feature */, true /* app */, true /* channel */);
- when(mNotif.getBubbleMetadata()).thenReturn(null);
- assertFalse(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubble_false_bubblesNotEnabled() {
- setUpBubblesEnabled(false /* feature */, true /* app */, true /* channel */);
- assertFalse(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubble_false_packageNotAllowed() {
- setUpBubblesEnabled(true /* feature */, false /* app */, true /* channel */);
- assertFalse(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- @Test
- public void testCanBubble_false_channelNotAllowed() {
- setUpBubblesEnabled(true /* feature */, true /* app */, false /* channel */);
- assertFalse(mBubbleChecker.canBubble(mNr, PKG, USER_ID));
- }
-
- //
- // canLaunchInActivityView
- //
-
- @Test
- public void testCanLaunchInActivityView_true() {
- setUpActivityIntent(true /* resizable */);
- assertTrue(mBubbleChecker.canLaunchInActivityView(mContext, mPendingIntent, PKG));
- }
-
- @Test
- public void testCanLaunchInActivityView_false_noIntent() {
- when(mPendingIntent.getIntent()).thenReturn(null);
- assertFalse(mBubbleChecker.canLaunchInActivityView(mContext, mPendingIntent, PKG));
- }
-
- @Test
- public void testCanLaunchInActivityView_false_noInfo() {
- when(mPendingIntent.getIntent()).thenReturn(mIntent);
- when(mIntent.resolveActivityInfo(any(), anyInt())).thenReturn(null);
- assertFalse(mBubbleChecker.canLaunchInActivityView(mContext, mPendingIntent, PKG));
- }
-
- @Test
- public void testCanLaunchInActivityView_false_notResizable() {
- setUpActivityIntent(false /* resizable */);
- assertFalse(mBubbleChecker.canLaunchInActivityView(mContext, mPendingIntent, PKG));
- }
-
- //
- // isNotificationAppropriateToBubble
- //
-
- @Test
- public void testIsNotifAppropriateToBubble_true() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- setUpIntentBubble();
- when(mActivityManager.isLowRamDevice()).thenReturn(false);
- setUpActivityIntent(true /* resizable */);
- doReturn(Notification.MessagingStyle.class).when(mNotif).getNotificationStyle();
-
- assertTrue(mBubbleChecker.isNotificationAppropriateToBubble(mNr));
- }
-
- @Test
- public void testIsNotifAppropriateToBubble_false_lowRam() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- when(mActivityManager.isLowRamDevice()).thenReturn(true);
- setUpActivityIntent(true /* resizable */);
- doReturn(Notification.MessagingStyle.class).when(mNotif).getNotificationStyle();
-
- assertFalse(mBubbleChecker.isNotificationAppropriateToBubble(mNr));
- }
-
- @Test
- public void testIsNotifAppropriateToBubble_false_notMessageStyle() {
- setUpBubblesEnabled(true /* feature */, true /* app */, true /* channel */);
- when(mActivityManager.isLowRamDevice()).thenReturn(false);
- setUpActivityIntent(true /* resizable */);
- doReturn(Notification.BigPictureStyle.class).when(mNotif).getNotificationStyle();
-
- assertFalse(mBubbleChecker.isNotificationAppropriateToBubble(mNr));
- }
-
-}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
index 0dbbbaa9cdd6..3c376c9972ac 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
@@ -15,12 +15,19 @@
*/
package com.android.server.notification;
-import static android.app.NotificationManager.IMPORTANCE_HIGH;
-import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
+import static android.app.NotificationChannel.USER_LOCKED_ALLOW_BUBBLE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -28,6 +35,12 @@ import android.app.ActivityManager;
import android.app.Notification;
import android.app.Notification.Builder;
import android.app.NotificationChannel;
+import android.app.PendingIntent;
+import android.app.Person;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ShortcutInfo;
+import android.os.SystemClock;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.test.suitebuilder.annotation.SmallTest;
@@ -46,16 +59,32 @@ import org.mockito.MockitoAnnotations;
@RunWith(AndroidJUnit4.class)
public class BubbleExtractorTest extends UiServiceTestCase {
- @Mock RankingConfig mConfig;
- @Mock BubbleExtractor.BubbleChecker mBubbleChecker;
+ private static final String SHORTCUT_ID = "shortcut";
+ private static final String PKG = "com.android.server.notification";
+ private static final String TAG = null;
+ private static final int ID = 1001;
+ private static final int UID = 1000;
+ private static final int PID = 2000;
+ UserHandle mUser = UserHandle.of(ActivityManager.getCurrentUser());
+
BubbleExtractor mBubbleExtractor;
- private String mPkg = "com.android.server.notification";
- private int mId = 1001;
- private String mTag = null;
- private int mUid = 1000;
- private int mPid = 2000;
- private UserHandle mUser = UserHandle.of(ActivityManager.getCurrentUser());
+ @Mock
+ RankingConfig mConfig;
+ @Mock
+ NotificationChannel mChannel;
+ @Mock
+ Notification.BubbleMetadata mBubbleMetadata;
+ @Mock
+ PendingIntent mPendingIntent;
+ @Mock
+ Intent mIntent;
+ @Mock
+ ShortcutInfo mShortcutInfo;
+ @Mock
+ ShortcutHelper mShortcutHelper;
+ @Mock
+ ActivityManager mActivityManager;
@Before
public void setUp() {
@@ -63,58 +92,103 @@ public class BubbleExtractorTest extends UiServiceTestCase {
mBubbleExtractor = new BubbleExtractor();
mBubbleExtractor.initialize(mContext, mock(NotificationUsageStats.class));
mBubbleExtractor.setConfig(mConfig);
- mBubbleExtractor.setShortcutHelper(mock(ShortcutHelper.class));
- }
+ mBubbleExtractor.setShortcutHelper(mShortcutHelper);
+ mBubbleExtractor.setActivityManager(mActivityManager);
- private NotificationRecord getNotificationRecord(boolean allow, int importanceHigh) {
- NotificationChannel channel = new NotificationChannel("a", "a", importanceHigh);
- channel.setAllowBubbles(allow);
- when(mConfig.getNotificationChannel(mPkg, mUid, "a", false)).thenReturn(channel);
+ when(mConfig.getNotificationChannel(PKG, UID, "a", false)).thenReturn(mChannel);
+ when(mShortcutInfo.getId()).thenReturn(SHORTCUT_ID);
+ }
+ /* NotificationRecord that fulfills conversation requirements (message style + shortcut) */
+ private NotificationRecord getNotificationRecord(boolean addBubble) {
final Builder builder = new Builder(getContext())
.setContentTitle("foo")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
.setPriority(Notification.PRIORITY_HIGH)
.setDefaults(Notification.DEFAULT_SOUND);
-
+ Person person = new Person.Builder()
+ .setName("bubblebot")
+ .build();
+ builder.setShortcutId(SHORTCUT_ID);
+ builder.setStyle(new Notification.MessagingStyle(person)
+ .setConversationTitle("Bubble Chat")
+ .addMessage("Hello?",
+ SystemClock.currentThreadTimeMillis() - 300000, person)
+ .addMessage("Is it me you're looking for?",
+ SystemClock.currentThreadTimeMillis(), person));
Notification n = builder.build();
- StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, mId, mTag, mUid,
- mPid, n, mUser, null, System.currentTimeMillis());
- NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+ if (addBubble) {
+ n.setBubbleMetadata(mBubbleMetadata);
+ }
+ StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, ID, TAG, UID,
+ PID, n, mUser, null, System.currentTimeMillis());
+ NotificationRecord r = new NotificationRecord(getContext(), sbn, mChannel);
+ r.setShortcutInfo(mShortcutInfo);
return r;
}
+ void setUpIntentBubble(boolean isValid) {
+ when(mPendingIntent.getIntent()).thenReturn(mIntent);
+ when(mBubbleMetadata.getIntent()).thenReturn(mPendingIntent);
+ when(mBubbleMetadata.getShortcutId()).thenReturn(null);
+
+ when(mPendingIntent.getIntent()).thenReturn(mIntent);
+ ActivityInfo info = new ActivityInfo();
+ info.resizeMode = isValid
+ ? RESIZE_MODE_RESIZEABLE
+ : RESIZE_MODE_UNRESIZEABLE;
+ when(mIntent.resolveActivityInfo(any(), anyInt())).thenReturn(info);
+ }
+
+ void setUpShortcutBubble(boolean isValid) {
+ when(mBubbleMetadata.getShortcutId()).thenReturn(SHORTCUT_ID);
+ when(mBubbleMetadata.getIntent()).thenReturn(null);
+ ShortcutInfo answer = isValid ? mShortcutInfo : null;
+ when(mShortcutHelper.getValidShortcutInfo(SHORTCUT_ID, PKG, mUser)).thenReturn(answer);
+ }
+
+ void setUpBubblesEnabled(boolean feature, int app, boolean channel) {
+ when(mConfig.bubblesEnabled()).thenReturn(feature);
+ when(mConfig.getBubblePreference(anyString(), anyInt())).thenReturn(app);
+ when(mChannel.canBubble()).thenReturn(channel);
+ }
+
//
- // Tests
+ // Tests for the record being allowed to bubble.
//
@Test
public void testAppYesChannelNo() {
- when(mConfig.bubblesEnabled()).thenReturn(true);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
- NotificationRecord r = getNotificationRecord(false, IMPORTANCE_UNSPECIFIED);
-
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ false /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ when(mChannel.getUserLockedFields()).thenReturn(USER_LOCKED_ALLOW_BUBBLE);
mBubbleExtractor.process(r);
assertFalse(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
}
@Test
public void testAppNoChannelYes() throws Exception {
- when(mConfig.bubblesEnabled()).thenReturn(true);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(false);
- NotificationRecord r = getNotificationRecord(true, IMPORTANCE_HIGH);
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_NONE /* app */,
+ true /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
mBubbleExtractor.process(r);
assertFalse(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
}
@Test
public void testAppYesChannelYes() {
- when(mConfig.bubblesEnabled()).thenReturn(true);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
- NotificationRecord r = getNotificationRecord(true, IMPORTANCE_UNSPECIFIED);
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
mBubbleExtractor.process(r);
@@ -123,49 +197,228 @@ public class BubbleExtractorTest extends UiServiceTestCase {
@Test
public void testAppNoChannelNo() {
- when(mConfig.bubblesEnabled()).thenReturn(true);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(false);
- NotificationRecord r = getNotificationRecord(false, IMPORTANCE_UNSPECIFIED);
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_NONE /* app */,
+ false /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
mBubbleExtractor.process(r);
assertFalse(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
}
@Test
public void testAppYesChannelYesUserNo() {
- when(mConfig.bubblesEnabled()).thenReturn(false);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
- NotificationRecord r = getNotificationRecord(true, IMPORTANCE_HIGH);
+ setUpBubblesEnabled(false /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+
+ mBubbleExtractor.process(r);
+
+ assertFalse(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testAppSelectedChannelNo() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_SELECTED /* app */,
+ false /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
mBubbleExtractor.process(r);
assertFalse(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
}
@Test
- public void testFlagBubble_true() {
- when(mConfig.bubblesEnabled()).thenReturn(true);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
- NotificationRecord r = getNotificationRecord(true, IMPORTANCE_UNSPECIFIED);
+ public void testAppSeletedChannelYes() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_SELECTED /* app */,
+ true /* channel */);
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ when(mChannel.getUserLockedFields()).thenReturn(USER_LOCKED_ALLOW_BUBBLE);
- mBubbleExtractor.setBubbleChecker(mBubbleChecker);
- when(mBubbleChecker.isNotificationAppropriateToBubble(r)).thenReturn(true);
mBubbleExtractor.process(r);
assertTrue(r.canBubble());
- assertTrue(r.getNotification().isBubbleNotification());
}
+ //
+ // Tests for flagging it as a bubble.
+ //
+
@Test
- public void testFlagBubble_noFlag_previouslyRemoved() {
- when(mConfig.bubblesEnabled()).thenReturn(true);
- when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
- NotificationRecord r = getNotificationRecord(true, IMPORTANCE_UNSPECIFIED);
+ public void testFlagBubble_false_previouslyRemoved() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
r.setFlagBubbleRemoved(true);
- mBubbleExtractor.setBubbleChecker(mBubbleChecker);
- when(mBubbleChecker.isNotificationAppropriateToBubble(r)).thenReturn(true);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_true_shortcutBubble() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+ setUpShortcutBubble(true /* isValid */);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertTrue(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_true_intentBubble() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+ setUpIntentBubble(true /* isValid */);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertTrue(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_noIntentInvalidShortcut() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+ setUpShortcutBubble(false /* isValid */);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ r.setShortcutInfo(null);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_invalidIntentNoShortcut() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+ setUpIntentBubble(false /* isValid */);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ r.setShortcutInfo(null);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_noIntentNoShortcut() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+
+ // Shortcut here is for the notification not the bubble
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_noMetadata() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+
+ NotificationRecord r = getNotificationRecord(false /* bubble */);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_notConversation() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(false);
+ setUpIntentBubble(true /* isValid */);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ // No longer a conversation:
+ r.setShortcutInfo(null);
+ r.getNotification().extras.putString(Notification.EXTRA_TEMPLATE, null);
+
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_lowRamDevice() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(true);
+ setUpIntentBubble(true /* isValid */);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_noIntent() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(true);
+ setUpIntentBubble(true /* isValid */);
+ when(mPendingIntent.getIntent()).thenReturn(null);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
+ mBubbleExtractor.process(r);
+
+ assertTrue(r.canBubble());
+ assertFalse(r.getNotification().isBubbleNotification());
+ }
+
+ @Test
+ public void testFlagBubble_false_noActivityInfo() {
+ setUpBubblesEnabled(true /* feature */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+ when(mActivityManager.isLowRamDevice()).thenReturn(true);
+ setUpIntentBubble(true /* isValid */);
+ when(mPendingIntent.getIntent()).thenReturn(mIntent);
+ when(mIntent.resolveActivityInfo(any(), anyInt())).thenReturn(null);
+
+ NotificationRecord r = getNotificationRecord(true /* bubble */);
mBubbleExtractor.process(r);
assertTrue(r.canBubble());
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 15220e1ff54a..3cd0e92964ec 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -21,6 +21,10 @@ import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIB
import static android.app.Notification.FLAG_AUTO_CANCEL;
import static android.app.Notification.FLAG_BUBBLE;
import static android.app.Notification.FLAG_FOREGROUND_SERVICE;
+import static android.app.NotificationChannel.USER_LOCKED_ALLOW_BUBBLE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
import static android.app.NotificationManager.EXTRA_BLOCKED_STATE;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
@@ -39,6 +43,7 @@ import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_OFF;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.PackageManager.FEATURE_WATCH;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -101,6 +106,7 @@ import android.content.ComponentName;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.LauncherApps;
@@ -204,7 +210,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
private TestableNotificationManagerService mService;
private INotificationManager mBinderService;
private NotificationManagerInternal mInternalService;
- private TestableBubbleChecker mTestableBubbleChecker;
private ShortcutHelper mShortcutHelper;
@Mock
private IPackageManager mPackageManager;
@@ -347,21 +352,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
}
}
- private class TestableBubbleChecker extends BubbleExtractor.BubbleChecker {
-
- TestableBubbleChecker(Context context, ShortcutHelper helper, RankingConfig config,
- ActivityManager manager) {
- super(context, helper, config, manager);
- }
-
- @Override
- protected boolean canLaunchInActivityView(Context context, PendingIntent pendingIntent,
- String packageName) {
- // Tests for this not being true are in CTS NotificationManagerTest
- return true;
- }
- }
-
private class TestableToastCallback extends ITransientNotification.Stub {
@Override
public void show(IBinder windowToken) {
@@ -480,9 +470,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
// Set the testable bubble extractor
RankingHelper rankingHelper = mService.getRankingHelper();
BubbleExtractor extractor = rankingHelper.findExtractor(BubbleExtractor.class);
- mTestableBubbleChecker = new TestableBubbleChecker(mContext, mShortcutHelper,
- mService.mPreferencesHelper, mActivityManager);
- extractor.setBubbleChecker(mTestableBubbleChecker);
+ extractor.setActivityManager(mActivityManager);
// Tests call directly into the Binder.
mBinderService = mService.getBinderService();
@@ -544,13 +532,13 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
}
private void setUpPrefsForBubbles(String pkg, int uid, boolean globalEnabled,
- boolean pkgEnabled, boolean channelEnabled) {
+ int pkgPref, boolean channelEnabled) {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.NOTIFICATION_BUBBLES, globalEnabled ? 1 : 0);
mService.mPreferencesHelper.updateBubblesEnabled();
assertEquals(globalEnabled, mService.mPreferencesHelper.bubblesEnabled());
try {
- mBinderService.setBubblesAllowed(pkg, uid, pkgEnabled);
+ mBinderService.setBubblesAllowed(pkg, uid, pkgPref);
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -687,19 +675,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
false);
}
- private Notification.BubbleMetadata.Builder getBubbleMetadataBuilder() {
- PendingIntent pi = PendingIntent.getActivity(mContext, 0, new Intent(), 0);
- return new Notification.BubbleMetadata.Builder(pi,
- Icon.createWithResource(mContext, android.R.drawable.sym_def_app_icon));
- }
-
private Notification.Builder getMessageStyleNotifBuilder(boolean addBubbleMetadata,
String groupKey, boolean isSummary) {
// Give it a person
Person person = new Person.Builder()
.setName("bubblebot")
.build();
- // It needs remote input to be bubble-able
RemoteInput remoteInput = new RemoteInput.Builder("reply_key").setLabel("reply").build();
PendingIntent inputIntent = PendingIntent.getActivity(mContext, 0, new Intent(), 0);
Icon icon = Icon.createWithResource(mContext, android.R.drawable.sym_def_app_icon);
@@ -724,11 +705,26 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
nb.setGroup(groupKey);
}
if (addBubbleMetadata) {
- nb.setBubbleMetadata(getBubbleMetadataBuilder().build());
+ nb.setBubbleMetadata(getBubbleMetadata());
}
return nb;
}
+ private Notification.BubbleMetadata getBubbleMetadata() {
+ PendingIntent pendingIntent = mock(PendingIntent.class);
+ Intent intent = mock(Intent.class);
+ when(pendingIntent.getIntent()).thenReturn(intent);
+
+ ActivityInfo info = new ActivityInfo();
+ info.resizeMode = RESIZE_MODE_RESIZEABLE;
+ when(intent.resolveActivityInfo(any(), anyInt())).thenReturn(info);
+
+ return new Notification.BubbleMetadata.Builder(
+ pendingIntent,
+ Icon.createWithResource(mContext, android.R.drawable.sym_def_app_icon))
+ .build();
+ }
+
private NotificationRecord addGroupWithBubblesAndValidateAdded(boolean summaryAutoCancel)
throws RemoteException {
@@ -4483,24 +4479,31 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testBubble() throws Exception {
- mBinderService.setBubblesAllowed(PKG, mUid, false);
- assertFalse(mBinderService.areBubblesAllowedForPackage(PKG, mUid));
+ mBinderService.setBubblesAllowed(PKG, mUid, BUBBLE_PREFERENCE_NONE);
+ assertFalse(mBinderService.areBubblesAllowed(PKG));
+ assertEquals(mBinderService.getBubblePreferenceForPackage(PKG, mUid),
+ BUBBLE_PREFERENCE_NONE);
+ }
+
+ @Test
+ public void testUserApprovedBubblesForPackageSelected() throws Exception {
+ mBinderService.setBubblesAllowed(PKG, mUid, BUBBLE_PREFERENCE_SELECTED);
+ assertEquals(mBinderService.getBubblePreferenceForPackage(PKG, mUid),
+ BUBBLE_PREFERENCE_SELECTED);
}
@Test
- public void testUserApprovedBubblesForPackage() throws Exception {
- assertFalse(mBinderService.hasUserApprovedBubblesForPackage(PKG, mUid));
- mBinderService.setBubblesAllowed(PKG, mUid, true);
- assertTrue(mBinderService.hasUserApprovedBubblesForPackage(PKG, mUid));
- assertTrue(mBinderService.areBubblesAllowedForPackage(PKG, mUid));
+ public void testUserApprovedBubblesForPackageAll() throws Exception {
+ mBinderService.setBubblesAllowed(PKG, mUid, BUBBLE_PREFERENCE_ALL);
+ assertTrue(mBinderService.areBubblesAllowed(PKG));
+ assertEquals(mBinderService.getBubblePreferenceForPackage(PKG, mUid),
+ BUBBLE_PREFERENCE_ALL);
}
@Test
public void testUserRejectsBubblesForPackage() throws Exception {
- assertFalse(mBinderService.hasUserApprovedBubblesForPackage(PKG, mUid));
- mBinderService.setBubblesAllowed(PKG, mUid, false);
- assertTrue(mBinderService.hasUserApprovedBubblesForPackage(PKG, mUid));
- assertFalse(mBinderService.areBubblesAllowedForPackage(PKG, mUid));
+ mBinderService.setBubblesAllowed(PKG, mUid, BUBBLE_PREFERENCE_NONE);
+ assertFalse(mBinderService.areBubblesAllowed(PKG));
}
@Test
@@ -5166,8 +5169,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubble() throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
NotificationRecord nr =
generateMessageBubbleNotifRecord(mTestNotificationChannel, "testFlagBubble");
@@ -5185,8 +5190,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubble_noFlag_appNotAllowed() throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, false /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_NONE /* app */,
+ true /* channel */);
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testFlagBubble_noFlag_appNotAllowed");
@@ -5204,15 +5211,17 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubbleNotifs_noFlag_whenAppForeground() throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// Notif with bubble metadata but not our other misc requirements
Notification.Builder nb = new Notification.Builder(mContext,
mTestNotificationChannel.getId())
.setContentTitle("foo")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
- .setBubbleMetadata(getBubbleMetadataBuilder().build());
+ .setBubbleMetadata(getBubbleMetadata());
StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, "tag", mUid, 0,
nb.build(), new UserHandle(mUid), null, 0);
NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel);
@@ -5232,8 +5241,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubbleNotifs_flag_messaging() throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testFlagBubbleNotifs_flag_messaging");
@@ -5249,8 +5260,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubbleNotifs_noFlag_messaging_appNotAllowed() throws RemoteException {
- // Bubbles are NOT allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, false /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_NONE /* app */,
+ true /* channel */);
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testFlagBubbleNotifs_noFlag_messaging_appNotAllowed");
@@ -5267,8 +5280,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubbleNotifs_noFlag_notBubble() throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// Messaging notif WITHOUT bubble metadata
Notification.Builder nb = getMessageStyleNotifBuilder(false /* addBubbleMetadata */,
@@ -5291,11 +5306,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testFlagBubbleNotifs_noFlag_messaging_channelNotAllowed() throws RemoteException {
- // Bubbles are allowed except on this channel
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, false /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ false /* channel */);
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testFlagBubbleNotifs_noFlag_messaging_channelNotAllowed");
+ nr.getChannel().lockFields(USER_LOCKED_ALLOW_BUBBLE);
// Post the notification
mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(),
@@ -5488,7 +5506,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testAreBubblesAllowedForPackage_crossUser() throws Exception {
try {
- mBinderService.areBubblesAllowedForPackage(mContext.getPackageName(),
+ mBinderService.getBubblePreferenceForPackage(mContext.getPackageName(),
mUid + UserHandle.PER_USER_RANGE);
fail("Cannot call cross user without permission");
} catch (SecurityException e) {
@@ -5497,7 +5515,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
// cross user, with permission, no problem
enableInteractAcrossUsers();
- mBinderService.areBubblesAllowedForPackage(mContext.getPackageName(),
+ mBinderService.getBubblePreferenceForPackage(mContext.getPackageName(),
mUid + UserHandle.PER_USER_RANGE);
}
@@ -5508,8 +5526,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbleChanged_false() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// Notif with bubble metadata
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
@@ -5528,7 +5548,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
assertTrue((notifsBefore[0].getNotification().flags & FLAG_BUBBLE) != 0);
// Notify we're not a bubble
- mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), false);
+ mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), false, 0);
waitForIdle();
// Make sure we are not a bubble
@@ -5539,8 +5559,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbleChanged_true() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// Notif that is not a bubble
NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel,
@@ -5565,7 +5587,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
reset(mListeners);
// Notify we are now a bubble
- mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), true);
+ mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), true, 0);
waitForIdle();
// Make sure we are a bubble
@@ -5576,8 +5598,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbleChanged_true_notAllowed() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// Notif that is not a bubble
NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel);
@@ -5594,7 +5618,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
assertEquals((notifsBefore[0].getNotification().flags & FLAG_BUBBLE), 0);
// Notify we are now a bubble
- mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), true);
+ mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), true, 0);
waitForIdle();
// We still wouldn't be a bubble because the notification didn't meet requirements
@@ -5605,8 +5629,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbleIsFlagRemoved_resetOnUpdate() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+
// Notif with bubble metadata
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testNotificationBubbleIsFlagRemoved_resetOnUpdate");
@@ -5619,7 +5646,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
assertFalse(recordToCheck.isFlagBubbleRemoved());
// Notify we're not a bubble
- mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), false);
+ mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), false, 0);
waitForIdle();
// Flag should be modified
recordToCheck = mService.getNotificationRecord(nr.getSbn().getKey());
@@ -5637,8 +5664,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbleIsFlagRemoved_resetOnBubbleChangedTrue() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+
// Notif with bubble metadata
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testNotificationBubbleIsFlagRemoved_trueOnBubbleChangedTrue");
@@ -5651,14 +5681,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
assertFalse(recordToCheck.isFlagBubbleRemoved());
// Notify we're not a bubble
- mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), false);
+ mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), false, 0);
waitForIdle();
// Flag should be modified
recordToCheck = mService.getNotificationRecord(nr.getSbn().getKey());
assertTrue(recordToCheck.isFlagBubbleRemoved());
// Notify we are a bubble
- mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), true);
+ mService.mNotificationDelegate.onNotificationBubbleChanged(nr.getKey(), true, 0);
waitForIdle();
// And the flag is reset
assertFalse(recordToCheck.isFlagBubbleRemoved());
@@ -5666,16 +5696,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testOnBubbleNotificationSuppressionChanged() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// Bubble notification
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel, "tag");
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, nr.getSbn().getUserId(), true /* global */,
- true /* app */, true /* channel */);
-
mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(),
nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId());
waitForIdle();
@@ -5888,8 +5916,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_disabled_lowRamDevice() throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
// And we are low ram
when(mActivityManager.isLowRamDevice()).thenReturn(true);
@@ -5972,8 +6002,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_flagAutoExpandForeground_fails_notForeground()
throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testNotificationBubbles_flagAutoExpandForeground_fails_notForeground");
@@ -6002,8 +6034,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_flagAutoExpandForeground_succeeds_foreground()
throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
NotificationRecord nr = generateMessageBubbleNotifRecord(mTestNotificationChannel,
"testNotificationBubbles_flagAutoExpandForeground_succeeds_foreground");
@@ -6032,8 +6066,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_flagRemoved_whenShortcutRemoved()
throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
ArgumentCaptor<LauncherApps.Callback> launcherAppsCallback =
ArgumentCaptor.forClass(LauncherApps.Callback.class);
@@ -6090,8 +6126,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_shortcut_stopListeningWhenNotifRemoved()
throws RemoteException {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
ArgumentCaptor<LauncherApps.Callback> launcherAppsCallback =
ArgumentCaptor.forClass(LauncherApps.Callback.class);
@@ -6141,8 +6179,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_bubbleChildrenStay_whenGroupSummaryDismissed()
throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
NotificationRecord nrSummary = addGroupWithBubblesAndValidateAdded(
true /* summaryAutoCancel */);
@@ -6165,8 +6205,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_bubbleChildrenStay_whenGroupSummaryClicked()
throws Exception {
- // Bubbles are allowed!
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
NotificationRecord nrSummary = addGroupWithBubblesAndValidateAdded(
true /* summaryAutoCancel */);
@@ -6197,8 +6239,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testNotificationBubbles_bubbleStays_whenClicked()
throws Exception {
+ setUpPrefsForBubbles(PKG, mUid,
+ true /* global */,
+ BUBBLE_PREFERENCE_ALL /* app */,
+ true /* channel */);
+
// GIVEN a notification that has the auto cancels flag (cancel on click) and is a bubble
- setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
final NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel);
nr.getSbn().getNotification().flags |= FLAG_BUBBLE | FLAG_AUTO_CANCEL;
mService.addNotification(nr);
@@ -6332,7 +6378,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
assertEquals("friend", friendChannel.getConversationId());
assertEquals(null, original.getConversationId());
assertEquals(original.canShowBadge(), friendChannel.canShowBadge());
- assertEquals(original.canBubble(), friendChannel.canBubble());
+ assertFalse(friendChannel.canBubble()); // can't be modified by app
assertFalse(original.getId().equals(friendChannel.getId()));
assertNotNull(friendChannel.getId());
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index ed5ec6ac785b..427237c4be0f 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -16,6 +16,9 @@
package com.android.server.notification;
import static android.app.NotificationChannel.CONVERSATION_CHANNEL_ID_FORMAT;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
+import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_LOW;
@@ -23,6 +26,7 @@ import static android.app.NotificationManager.IMPORTANCE_MAX;
import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
+import static com.android.server.notification.PreferencesHelper.DEFAULT_BUBBLE_PREFERENCE;
import static com.android.server.notification.PreferencesHelper.NOTIFICATION_CHANNEL_COUNT_LIMIT;
import static com.google.common.truth.Truth.assertThat;
@@ -1094,7 +1098,7 @@ public class PreferencesHelperTest extends UiServiceTestCase {
.getUserLockedFields());
final NotificationChannel update = getChannel();
- update.setAllowBubbles(false);
+ update.setAllowBubbles(true);
mHelper.updateNotificationChannel(PKG_N_MR1, UID_N_MR1, update, true);
assertEquals(NotificationChannel.USER_LOCKED_ALLOW_BUBBLE,
mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, update.getId(), false)
@@ -1734,14 +1738,14 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.updateDefaultApps(UserHandle.getUserId(UID_O), null, pkgPair);
mHelper.setNotificationDelegate(PKG_O, UID_O, "", 1);
mHelper.setImportance(PKG_O, UID_O, IMPORTANCE_NONE);
- mHelper.setBubblesAllowed(PKG_O, UID_O, false);
+ mHelper.setBubblesAllowed(PKG_O, UID_O, DEFAULT_BUBBLE_PREFERENCE);
mHelper.setShowBadge(PKG_O, UID_O, false);
mHelper.setAppImportanceLocked(PKG_O, UID_O);
mHelper.clearData(PKG_O, UID_O);
assertEquals(IMPORTANCE_UNSPECIFIED, mHelper.getImportance(PKG_O, UID_O));
- assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O));
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), DEFAULT_BUBBLE_PREFERENCE);
assertTrue(mHelper.canShowBadge(PKG_O, UID_O));
assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O));
assertEquals(0, mHelper.getAppLockedFields(PKG_O, UID_O));
@@ -2412,21 +2416,21 @@ public class PreferencesHelperTest extends UiServiceTestCase {
}
@Test
- public void testAllowBubbles_defaults() throws Exception {
- assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O));
+ public void testBubblePreference_defaults() throws Exception {
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_NONE);
ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, mLogger);
loadStreamXml(baos, false, UserHandle.USER_ALL);
- assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O));
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_NONE);
assertEquals(0, mHelper.getAppLockedFields(PKG_O, UID_O));
}
@Test
- public void testAllowBubbles_xml() throws Exception {
- mHelper.setBubblesAllowed(PKG_O, UID_O, false);
- assertFalse(mHelper.areBubblesAllowed(PKG_O, UID_O));
+ public void testBubblePreference_xml() throws Exception {
+ mHelper.setBubblesAllowed(PKG_O, UID_O, BUBBLE_PREFERENCE_NONE);
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_NONE);
assertEquals(PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE,
mHelper.getAppLockedFields(PKG_O, UID_O));
@@ -2434,7 +2438,7 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, mLogger);
loadStreamXml(baos, false, UserHandle.USER_ALL);
- assertFalse(mHelper.areBubblesAllowed(PKG_O, UID_O));
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_NONE);
assertEquals(PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE,
mHelper.getAppLockedFields(PKG_O, UID_O));
}
@@ -2766,9 +2770,29 @@ public class PreferencesHelperTest extends UiServiceTestCase {
}
@Test
- public void testSetBubblesAllowed_false() {
- mHelper.setBubblesAllowed(PKG_O, UID_O, false);
- assertFalse(mHelper.areBubblesAllowed(PKG_O, UID_O));
+ public void testSetBubblesAllowed_none() {
+ // Change it to non-default first
+ mHelper.setBubblesAllowed(PKG_O, UID_O, BUBBLE_PREFERENCE_ALL);
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_ALL);
+ verify(mHandler, times(1)).requestSort();
+ reset(mHandler);
+ // Now test
+ mHelper.setBubblesAllowed(PKG_O, UID_O, BUBBLE_PREFERENCE_NONE);
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_NONE);
+ verify(mHandler, times(1)).requestSort();
+ }
+
+ @Test
+ public void testSetBubblesAllowed_all() {
+ mHelper.setBubblesAllowed(PKG_O, UID_O, BUBBLE_PREFERENCE_ALL);
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_ALL);
+ verify(mHandler, times(1)).requestSort();
+ }
+
+ @Test
+ public void testSetBubblesAllowed_selected() {
+ mHelper.setBubblesAllowed(PKG_O, UID_O, BUBBLE_PREFERENCE_SELECTED);
+ assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_SELECTED);
verify(mHandler, times(1)).requestSort();
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index 08f6409cb902..bc66fa7ff48d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -32,6 +32,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyBoolean;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doCallRealMethod;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.reset;
@@ -63,6 +64,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.never;
@@ -1024,6 +1026,38 @@ public class ActivityRecordTests extends ActivityTestsBase {
}
/**
+ * Verify that complete finish request for a show-when-locked activity must ensure the
+ * keyguard occluded state being updated.
+ */
+ @Test
+ public void testCompleteFinishing_showWhenLocked() {
+ // Make keyguard locked and set the top activity show-when-locked.
+ KeyguardController keyguardController = mActivity.mStackSupervisor.getKeyguardController();
+ doReturn(true).when(keyguardController).isKeyguardLocked();
+ final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build();
+ topActivity.mVisibleRequested = true;
+ topActivity.nowVisible = true;
+ topActivity.setState(RESUMED, "true");
+ doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible(
+ any() /* starting */, anyInt() /* configChanges */,
+ anyBoolean() /* preserveWindows */, anyBoolean() /* notifyClients */);
+ topActivity.setShowWhenLocked(true);
+
+ // Verify the stack-top activity is occluded keyguard.
+ assertEquals(topActivity, mStack.topRunningActivity());
+ assertTrue(mStack.topActivityOccludesKeyguard());
+
+ // Finish the top activity
+ topActivity.setState(PAUSED, "true");
+ topActivity.finishing = true;
+ topActivity.completeFinishing("test");
+
+ // Verify new top activity does not occlude keyguard.
+ assertEquals(mActivity, mStack.topRunningActivity());
+ assertFalse(mStack.topActivityOccludesKeyguard());
+ }
+
+ /**
* Verify destroy activity request completes successfully.
*/
@Test
@@ -1273,6 +1307,48 @@ public class ActivityRecordTests extends ActivityTestsBase {
}
@Test
+ public void testActivityOnCancelFixedRotationTransform() {
+ mService.mWindowManager.mIsFixedRotationTransformEnabled = true;
+ final DisplayRotation displayRotation = mActivity.mDisplayContent.getDisplayRotation();
+ spyOn(displayRotation);
+
+ final DisplayContent display = mActivity.mDisplayContent;
+ final int originalRotation = display.getRotation();
+
+ // Make {@link DisplayContent#sendNewConfiguration} not apply rotation immediately.
+ doReturn(true).when(displayRotation).isWaitingForRemoteRotation();
+ doReturn((originalRotation + 1) % 4).when(displayRotation).rotationForOrientation(
+ anyInt() /* orientation */, anyInt() /* lastRotation */);
+ // Set to visible so the activity can freeze the screen.
+ mActivity.setVisibility(true);
+
+ display.rotateInDifferentOrientationIfNeeded(mActivity);
+ display.mFixedRotationLaunchingApp = mActivity;
+ displayRotation.updateRotationUnchecked(false /* forceUpdate */);
+
+ assertTrue(displayRotation.isRotatingSeamlessly());
+
+ // Simulate the rotation has been updated to previous one, e.g. sensor updates before the
+ // remote rotation is completed.
+ doReturn(originalRotation).when(displayRotation).rotationForOrientation(
+ anyInt() /* orientation */, anyInt() /* lastRotation */);
+ display.updateOrientation();
+
+ final DisplayInfo rotatedInfo = mActivity.getFixedRotationTransformDisplayInfo();
+ mActivity.finishFixedRotationTransform();
+ final ScreenRotationAnimation rotationAnim = display.getRotationAnimation();
+ rotationAnim.setRotation(display.getPendingTransaction(), originalRotation);
+
+ // Because the display doesn't rotate, the rotated activity needs to cancel the fixed
+ // rotation. There should be a rotation animation to cover the change of activity.
+ verify(mActivity).onCancelFixedRotationTransform(rotatedInfo.rotation);
+ assertTrue(mActivity.isFreezingScreen());
+ assertFalse(displayRotation.isRotatingSeamlessly());
+ assertNotNull(rotationAnim);
+ assertTrue(rotationAnim.isRotating());
+ }
+
+ @Test
public void testActivityOnDifferentDisplayUpdatesProcessOverride() {
final ActivityRecord secondaryDisplayActivity =
createActivityOnDisplay(false /* defaultDisplay */, null /* process */);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
index 3d15401cdfb9..3bed05f383a8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
@@ -46,6 +46,7 @@ import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_F
import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_WINDOWING_MODE_RESIZE;
import static com.android.server.wm.Task.REPARENT_MOVE_STACK_TO_FRONT;
import static com.android.server.wm.TaskDisplayArea.getStackAbove;
+import static com.android.server.wm.WindowContainer.POSITION_TOP;
import static com.google.common.truth.Truth.assertThat;
@@ -140,9 +141,12 @@ public class ActivityStackTests extends ActivityTestsBase {
}
@Test
- public void testPrimarySplitScreenRestoresWhenMovedToBack() {
- // Create primary splitscreen stack. This will create secondary stacks and places the
- // existing fullscreen stack on the bottom.
+ public void testPrimarySplitScreenMoveToBack() {
+ TestSplitOrganizer organizer = new TestSplitOrganizer(mService);
+ // We're testing an edge case here where we have primary + fullscreen rather than secondary.
+ organizer.setMoveToSecondaryOnEnter(false);
+
+ // Create primary splitscreen stack.
final ActivityStack primarySplitScreen = mDefaultTaskDisplayArea.createStack(
WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
@@ -165,12 +169,14 @@ public class ActivityStackTests extends ActivityTestsBase {
}
@Test
- public void testPrimarySplitScreenRestoresPreviousWhenMovedToBack() {
+ public void testMoveToPrimarySplitScreenThenMoveToBack() {
+ TestSplitOrganizer organizer = new TestSplitOrganizer(mService);
// This time, start with a fullscreen activitystack
final ActivityStack primarySplitScreen = mDefaultTaskDisplayArea.createStack(
- WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
+ WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- primarySplitScreen.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+ primarySplitScreen.reparent((ActivityStack) organizer.mPrimary, POSITION_TOP,
+ false /*moveParents*/, "test");
// Assert windowing mode.
assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, primarySplitScreen.getWindowingMode());
@@ -180,14 +186,52 @@ public class ActivityStackTests extends ActivityTestsBase {
null /* task */);
// Assert that stack is at the bottom.
- assertEquals(0, mDefaultTaskDisplayArea.getIndexOf(primarySplitScreen));
+ assertEquals(primarySplitScreen, organizer.mSecondary.getChildAt(0));
// Ensure that the override mode is restored to what it was (fullscreen)
- assertEquals(WINDOWING_MODE_FULLSCREEN,
+ assertEquals(WINDOWING_MODE_UNDEFINED,
primarySplitScreen.getRequestedOverrideWindowingMode());
}
@Test
+ public void testSplitScreenMoveToBack() {
+ TestSplitOrganizer organizer = new TestSplitOrganizer(mService);
+ // Set up split-screen with primary on top and secondary containing the home task below
+ // another stack.
+ final ActivityStack primaryTask = mDefaultTaskDisplayArea.createStack(
+ WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
+ final ActivityStack homeRoot = mDefaultTaskDisplayArea.getStack(
+ WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME);
+ final ActivityStack secondaryTask = mDefaultTaskDisplayArea.createStack(
+ WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
+ mDefaultTaskDisplayArea.positionStackAtTop((ActivityStack) organizer.mPrimary,
+ false /* includingParents */);
+
+ // Move primary to back.
+ primaryTask.moveToBack("test", null /* task */);
+
+ // Assert that the primaryTask is now below home in its parent but primary is left alone.
+ assertEquals(0, organizer.mPrimary.getChildCount());
+ assertEquals(primaryTask, organizer.mSecondary.getChildAt(0));
+ assertEquals(1, organizer.mPrimary.compareTo(organizer.mSecondary));
+ assertEquals(1, homeRoot.compareTo(primaryTask));
+ assertEquals(homeRoot.getParent(), primaryTask.getParent());
+
+ // Make sure windowing modes are correct
+ assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, organizer.mPrimary.getWindowingMode());
+ assertEquals(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, primaryTask.getWindowingMode());
+
+ // Move secondary to back via parent (should be equivalent)
+ ((ActivityStack) organizer.mSecondary).moveToBack("test", secondaryTask);
+
+ // Assert that it is now in back but still in secondary split
+ assertEquals(1, homeRoot.compareTo(primaryTask));
+ assertEquals(secondaryTask, organizer.mSecondary.getChildAt(0));
+ assertEquals(1, primaryTask.compareTo(secondaryTask));
+ assertEquals(homeRoot.getParent(), secondaryTask.getParent());
+ }
+
+ @Test
public void testStackInheritsDisplayWindowingMode() {
final ActivityStack primarySplitScreen = mDefaultTaskDisplayArea.createStack(
WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index bdba4b6c8ac8..97734ff32de2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -30,7 +30,6 @@ import static android.app.ActivityManager.START_SUCCESS;
import static android.app.ActivityManager.START_SWITCHES_CANCELED;
import static android.app.ActivityManager.START_TASK_TO_FRONT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
@@ -64,10 +63,8 @@ import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
-import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.IApplicationThread;
-import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -82,8 +79,6 @@ import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.service.voice.IVoiceInteractionSession;
import android.view.Gravity;
-import android.window.ITaskOrganizer;
-import android.window.WindowContainerToken;
import androidx.test.filters.SmallTest;
@@ -1004,62 +999,4 @@ public class ActivityStarterTests extends ActivityTestsBase {
verify(recentTasks, times(1)).add(any());
}
-
- static class TestSplitOrganizer extends ITaskOrganizer.Stub {
- final ActivityTaskManagerService mService;
- Task mPrimary;
- Task mSecondary;
- boolean mInSplit = false;
- int mDisplayId;
- TestSplitOrganizer(ActivityTaskManagerService service, int displayId) {
- mService = service;
- mDisplayId = displayId;
- mService.mTaskOrganizerController.registerTaskOrganizer(this,
- WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
- mService.mTaskOrganizerController.registerTaskOrganizer(this,
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
- WindowContainerToken primary = mService.mTaskOrganizerController.createRootTask(
- displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token;
- mPrimary = WindowContainer.fromBinder(primary.asBinder()).asTask();
- WindowContainerToken secondary = mService.mTaskOrganizerController.createRootTask(
- displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token;
- mSecondary = WindowContainer.fromBinder(secondary.asBinder()).asTask();
- }
- @Override
- public void onTaskAppeared(ActivityManager.RunningTaskInfo info) {
- }
- @Override
- public void onTaskVanished(ActivityManager.RunningTaskInfo info) {
- }
- @Override
- public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
- if (mInSplit) {
- return;
- }
- if (info.topActivityType != ACTIVITY_TYPE_UNDEFINED) {
- if (info.configuration.windowConfiguration.getWindowingMode()
- == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- mInSplit = true;
- mService.mTaskOrganizerController.setLaunchRoot(mDisplayId,
- mSecondary.mRemoteToken.toWindowContainerToken());
- // move everything to secondary because test expects this but usually sysui
- // does it.
- DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(mDisplayId);
- for (int tdaNdx = dc.getTaskDisplayAreaCount() - 1; tdaNdx >= 0; --tdaNdx) {
- final TaskDisplayArea taskDisplayArea = dc.getTaskDisplayAreaAt(tdaNdx);
- for (int sNdx = taskDisplayArea.getStackCount() - 1; sNdx >= 0; --sNdx) {
- final ActivityStack stack = taskDisplayArea.getStackAt(sNdx);
- if (!WindowConfiguration.isSplitScreenWindowingMode(
- stack.getWindowingMode())) {
- stack.reparent(mSecondary, POSITION_BOTTOM);
- }
- }
- }
- }
- }
- }
- @Override
- public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) {
- }
- };
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
index 67d4769522b0..6ae8313e39dd 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
@@ -17,7 +17,10 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
+import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
@@ -30,9 +33,12 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
+import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.IApplicationThread;
+import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -43,6 +49,8 @@ import android.os.Build;
import android.os.Bundle;
import android.os.UserHandle;
import android.service.voice.IVoiceInteractionSession;
+import android.window.ITaskOrganizer;
+import android.window.WindowContainerToken;
import com.android.server.AttributeCache;
@@ -505,4 +513,74 @@ class ActivityTestsBase extends SystemServiceTestsBase {
}
}
+
+ static class TestSplitOrganizer extends ITaskOrganizer.Stub {
+ final ActivityTaskManagerService mService;
+ Task mPrimary;
+ Task mSecondary;
+ boolean mInSplit = false;
+ // moves everything to secondary. Most tests expect this since sysui usually does it.
+ boolean mMoveToSecondaryOnEnter = true;
+ int mDisplayId;
+ TestSplitOrganizer(ActivityTaskManagerService service, int displayId) {
+ mService = service;
+ mDisplayId = displayId;
+ mService.mTaskOrganizerController.registerTaskOrganizer(this,
+ WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+ mService.mTaskOrganizerController.registerTaskOrganizer(this,
+ WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+ WindowContainerToken primary = mService.mTaskOrganizerController.createRootTask(
+ displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token;
+ mPrimary = WindowContainer.fromBinder(primary.asBinder()).asTask();
+ WindowContainerToken secondary = mService.mTaskOrganizerController.createRootTask(
+ displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token;
+ mSecondary = WindowContainer.fromBinder(secondary.asBinder()).asTask();
+ }
+ TestSplitOrganizer(ActivityTaskManagerService service) {
+ this(service,
+ service.mStackSupervisor.mRootWindowContainer.getDefaultDisplay().mDisplayId);
+ }
+ public void setMoveToSecondaryOnEnter(boolean move) {
+ mMoveToSecondaryOnEnter = move;
+ }
+ @Override
+ public void onTaskAppeared(ActivityManager.RunningTaskInfo info) {
+ }
+ @Override
+ public void onTaskVanished(ActivityManager.RunningTaskInfo info) {
+ }
+ @Override
+ public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
+ if (mInSplit) {
+ return;
+ }
+ if (info.topActivityType == ACTIVITY_TYPE_UNDEFINED) {
+ // Not populated
+ return;
+ }
+ if (info.configuration.windowConfiguration.getWindowingMode()
+ != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
+ return;
+ }
+ mInSplit = true;
+ if (!mMoveToSecondaryOnEnter) {
+ return;
+ }
+ mService.mTaskOrganizerController.setLaunchRoot(mDisplayId,
+ mSecondary.mRemoteToken.toWindowContainerToken());
+ DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(mDisplayId);
+ for (int tdaNdx = dc.getTaskDisplayAreaCount() - 1; tdaNdx >= 0; --tdaNdx) {
+ final TaskDisplayArea taskDisplayArea = dc.getTaskDisplayAreaAt(tdaNdx);
+ for (int sNdx = taskDisplayArea.getStackCount() - 1; sNdx >= 0; --sNdx) {
+ final ActivityStack stack = taskDisplayArea.getStackAt(sNdx);
+ if (!WindowConfiguration.isSplitScreenWindowingMode(stack.getWindowingMode())) {
+ stack.reparent(mSecondary, POSITION_BOTTOM);
+ }
+ }
+ }
+ }
+ @Override
+ public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) {
+ }
+ };
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
index 7613655e9f35..3c9051547eed 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
@@ -58,7 +58,6 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
import android.util.Pair;
@@ -126,9 +125,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
ensureStackPlacement(mFullscreenStack, firstActivity, secondActivity);
// Move first activity to pinned stack.
- final Rect sourceBounds = new Rect();
- mRootWindowContainer.moveActivityToPinnedStack(firstActivity, sourceBounds,
- 0f /*aspectRatio*/, "initialMove");
+ mRootWindowContainer.moveActivityToPinnedStack(firstActivity, "initialMove");
final TaskDisplayArea taskDisplayArea = mFullscreenStack.getDisplayArea();
ActivityStack pinnedStack = taskDisplayArea.getRootPinnedTask();
@@ -137,8 +134,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
ensureStackPlacement(mFullscreenStack, secondActivity);
// Move second activity to pinned stack.
- mRootWindowContainer.moveActivityToPinnedStack(secondActivity, sourceBounds,
- 0f /*aspectRatio*/, "secondMove");
+ mRootWindowContainer.moveActivityToPinnedStack(secondActivity, "secondMove");
// Need to get stacks again as a new instance might have been created.
pinnedStack = taskDisplayArea.getRootPinnedTask();
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java
index a7085334bece..52a51875427f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java
@@ -172,7 +172,7 @@ public class TaskDisplayAreaTests extends WindowTestsBase {
assertGetOrCreateStack(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, type, candidateTask,
false /* reuseCandidate */);
assertGetOrCreateStack(WINDOWING_MODE_PINNED, type, candidateTask,
- false /* reuseCandidate */);
+ true /* reuseCandidate */);
final int windowingMode = WINDOWING_MODE_FULLSCREEN;
assertGetOrCreateStack(windowingMode, ACTIVITY_TYPE_HOME, candidateTask,
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
index f275e378ed26..e41d4dcdb186 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
@@ -50,6 +50,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
+import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityManager.StackInfo;
import android.app.IRequestFinishCallback;
@@ -856,6 +857,30 @@ public class TaskOrganizerTests extends WindowTestsBase {
}
@Test
+ public void testChangeTaskDescription() {
+ class ChangeSavingOrganizer extends StubOrganizer {
+ RunningTaskInfo mChangedInfo;
+ @Override
+ public void onTaskInfoChanged(RunningTaskInfo info) {
+ mChangedInfo = info;
+ }
+ }
+ ChangeSavingOrganizer o = new ChangeSavingOrganizer();
+ mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(o,
+ WINDOWING_MODE_MULTI_WINDOW);
+
+ final ActivityStack stack = createStack();
+ final Task task = createTask(stack);
+ final ActivityRecord record = WindowTestUtils.createActivityRecordInTask(
+ stack.mDisplayContent, task);
+
+ stack.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
+ record.setTaskDescription(new ActivityManager.TaskDescription("TestDescription"));
+ waitUntilHandlersIdle();
+ assertEquals("TestDescription", o.mChangedInfo.taskDescription.getLabel());
+ }
+
+ @Test
public void testPreventDuplicateAppear() throws RemoteException {
final ActivityStack stack = createStack();
final Task task = createTask(stack);
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
index b8de3ca4ea1c..ee210b6eeaee 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
@@ -18,6 +18,7 @@ package com.android.server.wm;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
+import static org.mockito.ArgumentMatchers.any;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -49,6 +50,7 @@ public class WindowContainerThumbnailTest extends WindowTestsBase {
GraphicBuffer.USAGE_SW_READ_RARELY | GraphicBuffer.USAGE_SW_WRITE_NEVER);
final ActivityRecord mockAr = mock(ActivityRecord.class);
when(mockAr.getPendingTransaction()).thenReturn(new StubTransaction());
+ when(mockAr.makeChildSurface(any())).thenReturn(new MockSurfaceControlBuilder());
when(mockAr.makeSurface()).thenReturn(new MockSurfaceControlBuilder());
return new WindowContainerThumbnail(new StubTransaction(), mockAr,
buffer, false, mock(Surface.class), mock(SurfaceAnimator.class));
diff --git a/startop/iorap/src/com/google/android/startop/iorap/DexOptEvent.java b/startop/iorap/src/com/google/android/startop/iorap/DexOptEvent.java
new file mode 100644
index 000000000000..72c5eaa84c96
--- /dev/null
+++ b/startop/iorap/src/com/google/android/startop/iorap/DexOptEvent.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.startop.iorap;
+
+import android.annotation.NonNull;
+import android.os.Parcelable;
+import android.os.Parcel;
+
+import android.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
+
+/**
+ * Notifications for iorapd specifying when a package is updated by dexopt service.<br /><br />
+ *
+ * @hide
+ */
+public class DexOptEvent implements Parcelable {
+ public static final int TYPE_PACKAGE_UPDATE = 0;
+ private static final int TYPE_MAX = 0;
+
+ /** @hide */
+ @IntDef(flag = true, prefix = { "TYPE_" }, value = {
+ TYPE_PACKAGE_UPDATE,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Type {}
+
+ @Type public final int type;
+ public final String packageName;
+
+ @NonNull
+ public static DexOptEvent createPackageUpdate(String packageName) {
+ return new DexOptEvent(TYPE_PACKAGE_UPDATE, packageName);
+ }
+
+ private DexOptEvent(@Type int type, String packageName) {
+ this.type = type;
+ this.packageName = packageName;
+
+ checkConstructorArguments();
+ }
+
+ private void checkConstructorArguments() {
+ CheckHelpers.checkTypeInRange(type, TYPE_MAX);
+ Objects.requireNonNull(packageName, "packageName");
+ }
+
+ @Override
+ public String toString() {
+ return String.format("{DexOptEvent: packageName: %s}", packageName);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ } else if (other instanceof DexOptEvent) {
+ return equals((DexOptEvent) other);
+ }
+ return false;
+ }
+
+ private boolean equals(DexOptEvent other) {
+ return packageName.equals(other.packageName);
+ }
+
+ //<editor-fold desc="Binder boilerplate">
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(type);
+ out.writeString(packageName);
+ }
+
+ private DexOptEvent(Parcel in) {
+ this.type = in.readInt();
+ this.packageName = in.readString();
+
+ checkConstructorArguments();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Parcelable.Creator<DexOptEvent> CREATOR
+ = new Parcelable.Creator<DexOptEvent>() {
+ public DexOptEvent createFromParcel(Parcel in) {
+ return new DexOptEvent(in);
+ }
+
+ public DexOptEvent[] newArray(int size) {
+ return new DexOptEvent[size];
+ }
+ };
+ //</editor-fold>
+}
diff --git a/startop/iorap/src/com/google/android/startop/iorap/IorapForwardingService.java b/startop/iorap/src/com/google/android/startop/iorap/IorapForwardingService.java
index 0c25cfb968fd..8f1d0addbcd8 100644
--- a/startop/iorap/src/com/google/android/startop/iorap/IorapForwardingService.java
+++ b/startop/iorap/src/com/google/android/startop/iorap/IorapForwardingService.java
@@ -324,6 +324,11 @@ public class IorapForwardingService extends SystemService {
String[] updated = updatedPackages.toArray(new String[0]);
for (String packageName : updated) {
Log.d(TAG, "onPackagesUpdated: " + packageName);
+ invokeRemote(mIorapRemote,
+ (IIorap remote) ->
+ remote.onDexOptEvent(RequestId.nextValueForSequence(),
+ DexOptEvent.createPackageUpdate(packageName))
+ );
}
}
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 7f6e123ce69e..545c8a35058f 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -2529,6 +2529,16 @@ public class CarrierConfigManager {
"parameters_use_for_5g_nr_signal_bar_int";
/**
+ * There are two signal strengths, NR and LTE signal strength, during NR (non-standalone).
+ * Boolean indicating whether to use LTE signal strength as primary during NR (non-standalone).
+ * By default this value is true.
+ *
+ * @hide
+ */
+ public static final String KEY_SIGNAL_STRENGTH_NR_NSA_USE_LTE_AS_PRIMARY_BOOL =
+ "signal_strength_nr_nsa_use_lte_as_primary_bool";
+
+ /**
* String array of default bandwidth values per network type.
* The entries should be of form "network_name:downstream,upstream", with values in Kbps.
* @hide
@@ -4095,6 +4105,7 @@ public class CarrierConfigManager {
});
sDefaults.putInt(KEY_PARAMETERS_USE_FOR_5G_NR_SIGNAL_BAR_INT,
CellSignalStrengthNr.USE_SSRSRP);
+ sDefaults.putBoolean(KEY_SIGNAL_STRENGTH_NR_NSA_USE_LTE_AS_PRIMARY_BOOL, true);
sDefaults.putStringArray(KEY_BANDWIDTH_STRING_ARRAY, new String[]{
"GPRS:24,24", "EDGE:70,18", "UMTS:115,115", "CDMA-IS95A:14,14", "CDMA-IS95B:14,14",
"1xRTT:30,30", "EvDo-rev.0:750,48", "EvDo-rev.A:950,550", "HSDPA:4300,620",
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index 2bb4eb1538bd..1376cddbc41f 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -82,6 +82,8 @@ public class SignalStrength implements Parcelable {
// Effectively final. Timestamp is set during construction of SignalStrength
private long mTimestampMillis;
+ private boolean mLteAsPrimaryInNrNsa = true;
+
CellSignalStrengthCdma mCdma;
CellSignalStrengthGsm mGsm;
CellSignalStrengthWcdma mWcdma;
@@ -188,6 +190,10 @@ public class SignalStrength implements Parcelable {
private CellSignalStrength getPrimary() {
// This behavior is intended to replicate the legacy behavior of getLevel() by prioritizing
// newer faster RATs for default/for display purposes.
+
+ if (mLteAsPrimaryInNrNsa) {
+ if (mLte.isValid()) return mLte;
+ }
if (mNr.isValid()) return mNr;
if (mLte.isValid()) return mLte;
if (mCdma.isValid()) return mCdma;
@@ -268,6 +274,10 @@ public class SignalStrength implements Parcelable {
/** @hide */
public void updateLevel(PersistableBundle cc, ServiceState ss) {
+ if (cc != null) {
+ mLteAsPrimaryInNrNsa = cc.getBoolean(
+ CarrierConfigManager.KEY_SIGNAL_STRENGTH_NR_NSA_USE_LTE_AS_PRIMARY_BOOL, true);
+ }
mCdma.updateLevel(cc, ss);
mGsm.updateLevel(cc, ss);
mWcdma.updateLevel(cc, ss);
diff --git a/tests/RollbackTest/MultiUserRollbackTest/src/com/android/tests/rollback/host/MultiUserRollbackTest.java b/tests/RollbackTest/MultiUserRollbackTest/src/com/android/tests/rollback/host/MultiUserRollbackTest.java
index 4c29e72ec713..a4c81d577522 100644
--- a/tests/RollbackTest/MultiUserRollbackTest/src/com/android/tests/rollback/host/MultiUserRollbackTest.java
+++ b/tests/RollbackTest/MultiUserRollbackTest/src/com/android/tests/rollback/host/MultiUserRollbackTest.java
@@ -56,8 +56,7 @@ public class MultiUserRollbackTest extends BaseHostJUnit4Test {
cleanUp();
mOriginalUserId = getDevice().getCurrentUser();
createAndStartSecondaryUser();
- // TODO(b/149733368): Remove the '-g' workaround when the bug is fixed.
- installPackage("RollbackTest.apk", "-g --user all");
+ installPackage("RollbackTest.apk", "--user all");
}
@Test
diff --git a/tests/net/java/android/net/CaptivePortalDataTest.kt b/tests/net/common/java/android/net/CaptivePortalDataTest.kt
index 00714382684f..bd1847b7c440 100644
--- a/tests/net/java/android/net/CaptivePortalDataTest.kt
+++ b/tests/net/common/java/android/net/CaptivePortalDataTest.kt
@@ -16,17 +16,22 @@
package android.net
+import android.os.Build
import androidx.test.filters.SmallTest
-import androidx.test.runner.AndroidJUnit4
import com.android.testutils.assertParcelSane
import com.android.testutils.assertParcelingIsLossless
+import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
+import com.android.testutils.DevSdkIgnoreRunner
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
@SmallTest
-@RunWith(AndroidJUnit4::class)
+@RunWith(DevSdkIgnoreRunner::class)
+@IgnoreUpTo(Build.VERSION_CODES.Q)
class CaptivePortalDataTest {
private val data = CaptivePortalData.Builder()
.setRefreshTime(123L)
@@ -63,6 +68,46 @@ class CaptivePortalDataTest {
assertNotEqualsAfterChange { it.setCaptive(false) }
}
+ @Test
+ fun testUserPortalUrl() {
+ assertEquals(Uri.parse("https://portal.example.com/test"), data.userPortalUrl)
+ }
+
+ @Test
+ fun testVenueInfoUrl() {
+ assertEquals(Uri.parse("https://venue.example.com/test"), data.venueInfoUrl)
+ }
+
+ @Test
+ fun testIsSessionExtendable() {
+ assertTrue(data.isSessionExtendable)
+ }
+
+ @Test
+ fun testByteLimit() {
+ assertEquals(456L, data.byteLimit)
+ // Test byteLimit unset.
+ assertEquals(-1L, CaptivePortalData.Builder(null).build().byteLimit)
+ }
+
+ @Test
+ fun testRefreshTimeMillis() {
+ assertEquals(123L, data.refreshTimeMillis)
+ }
+
+ @Test
+ fun testExpiryTimeMillis() {
+ assertEquals(789L, data.expiryTimeMillis)
+ // Test expiryTimeMillis unset.
+ assertEquals(-1L, CaptivePortalData.Builder(null).build().expiryTimeMillis)
+ }
+
+ @Test
+ fun testIsCaptive() {
+ assertTrue(data.isCaptive)
+ assertFalse(makeBuilder().setCaptive(false).build().isCaptive)
+ }
+
private fun CaptivePortalData.mutate(mutator: (CaptivePortalData.Builder) -> Unit) =
CaptivePortalData.Builder(this).apply { mutator(this) }.build()
diff --git a/wifi/jarjar-rules.txt b/wifi/jarjar-rules.txt
index f85231114f96..2ecf3092035d 100644
--- a/wifi/jarjar-rules.txt
+++ b/wifi/jarjar-rules.txt
@@ -6,90 +6,90 @@
# Note: This rule is needed to ensure the rule below does not rename a Parcelable (see TODO above).
rule android.net.DhcpResultsParcelable* @0
-rule android.net.DhcpResults* com.android.server.x.wifi.net.DhcpResults@1
+rule android.net.DhcpResults* com.android.wifi.x.@0
# Note: This rule is needed to ensure the rule below does not rename a Parcelable (see TODO above).
rule android.net.InterfaceConfigurationParcel* @0
-rule android.net.InterfaceConfiguration* com.android.server.x.wifi.net.InterfaceConfiguration@1
-rule android.net.IpMemoryStore* com.android.server.x.wifi.net.IpMemoryStore@1
-rule android.net.NetworkMonitorManager* com.android.server.x.wifi.net.NetworkMonitorManager@1
-rule android.net.TcpKeepalivePacketData* com.android.server.x.wifi.net.TcpKeepalivePacketData@1
-rule android.net.NetworkFactory* com.android.server.x.wifi.net.NetworkFactory@1
-rule android.net.ip.IpClientCallbacks* com.android.server.x.wifi.net.ip.IpClientCallbacks@1
-rule android.net.ip.IpClientManager* com.android.server.x.wifi.net.ip.IpClientManager@1
-rule android.net.ip.IpClientUtil* com.android.server.x.wifi.net.ip.IpClientUtil@1
-rule android.net.ipmemorystore.OnBlobRetrievedListener* com.android.server.x.wifi.net.ipmemorystore.OnBlobRetrievedListener@1
-rule android.net.ipmemorystore.OnStatusListener* com.android.server.x.wifi.net.ipmemorystore.OnStatusListener@1
+rule android.net.InterfaceConfiguration* com.android.wifi.x.@0
+rule android.net.IpMemoryStore* com.android.wifi.x.@0
+rule android.net.NetworkMonitorManager* com.android.wifi.x.@0
+rule android.net.TcpKeepalivePacketData* com.android.wifi.x.@0
+rule android.net.NetworkFactory* com.android.wifi.x.@0
+rule android.net.ip.IpClientCallbacks* com.android.wifi.x.@0
+rule android.net.ip.IpClientManager* com.android.wifi.x.@0
+rule android.net.ip.IpClientUtil* com.android.wifi.x.@0
+rule android.net.ipmemorystore.OnBlobRetrievedListener* com.android.wifi.x.@0
+rule android.net.ipmemorystore.OnStatusListener* com.android.wifi.x.@0
# Note: This rule is needed to ensure the rule below does not rename a Parcelable (see TODO above).
rule android.net.ipmemorystore.StatusParcelable* @0
-rule android.net.ipmemorystore.Status* com.android.server.x.wifi.net.ipmemorystore.Status@1
-rule android.net.networkstack.ModuleNetworkStackClient* com.android.server.x.wifi.net.networkstack.ModuleNetworkStackClient@1
-rule android.net.networkstack.NetworkStackClientBase* com.android.server.x.wifi.net.networkstack.NetworkStackClientBase@1
-rule android.net.shared.InetAddressUtils* com.android.server.x.wifi.net.shared.InetAddressUtils@1
-rule android.net.shared.InitialConfiguration* com.android.server.x.wifi.net.shared.InitialConfiguration@1
-rule android.net.shared.IpConfigurationParcelableUtil* com.android.server.x.wifi.net.shared.IpConfigurationParcelableUtil@1
-rule android.net.shared.Layer2Information* com.android.server.x.wifi.net.shared.Layer2Information@1
-rule android.net.shared.LinkPropertiesParcelableUtil* com.android.server.x.wifi.net.shared.LinkPropertiesParcelableUtil@1
-rule android.net.shared.NetdUtils* com.android.server.x.wifi.net.shared.NetdUtils@1
-rule android.net.shared.NetworkMonitorUtils* com.android.server.x.wifi.net.shared.NetworkMonitorUtils@1
-rule android.net.shared.ParcelableUtil* com.android.server.x.wifi.net.shared.ParcelableUtil@1
-rule android.net.shared.PrivateDnsConfig* com.android.server.x.wifi.net.shared.PrivateDnsConfig@1
-rule android.net.shared.ProvisioningConfiguration* com.android.server.x.wifi.net.shared.ProvisioningConfiguration@1
-rule android.net.shared.RouteUtils* com.android.server.x.wifi.net.shared.RouteUtils@1
-rule android.net.util.KeepalivePacketDataUtil* com.android.server.x.wifi.net.util.KeepalivePacketDataUtil@1
-rule android.net.util.NetworkConstants* com.android.server.x.wifi.net.util.NetworkConstants@1
-rule android.net.util.InterfaceParams* com.android.server.x.wifi.net.util.InterfaceParams@1
-rule android.net.util.SharedLog* com.android.server.x.wifi.net.util.SharedLog@1
-rule android.net.util.NetUtils* com.android.server.x.wifi.net.util.NetUtils@1
-rule android.net.util.IpUtils* com.android.server.x.wifi.net.util.IpUtils@1
+rule android.net.ipmemorystore.Status* com.android.wifi.x.@0
+rule android.net.networkstack.ModuleNetworkStackClient* com.android.wifi.x.@0
+rule android.net.networkstack.NetworkStackClientBase* com.android.wifi.x.@0
+rule android.net.shared.InetAddressUtils* com.android.wifi.x.@0
+rule android.net.shared.InitialConfiguration* com.android.wifi.x.@0
+rule android.net.shared.IpConfigurationParcelableUtil* com.android.wifi.x.@0
+rule android.net.shared.Layer2Information* com.android.wifi.x.@0
+rule android.net.shared.LinkPropertiesParcelableUtil* com.android.wifi.x.@0
+rule android.net.shared.NetdUtils* com.android.wifi.x.@0
+rule android.net.shared.NetworkMonitorUtils* com.android.wifi.x.@0
+rule android.net.shared.ParcelableUtil* com.android.wifi.x.@0
+rule android.net.shared.PrivateDnsConfig* com.android.wifi.x.@0
+rule android.net.shared.ProvisioningConfiguration* com.android.wifi.x.@0
+rule android.net.shared.RouteUtils* com.android.wifi.x.@0
+rule android.net.util.KeepalivePacketDataUtil* com.android.wifi.x.@0
+rule android.net.util.NetworkConstants* com.android.wifi.x.@0
+rule android.net.util.InterfaceParams* com.android.wifi.x.@0
+rule android.net.util.SharedLog* com.android.wifi.x.@0
+rule android.net.util.NetUtils* com.android.wifi.x.@0
+rule android.net.util.IpUtils* com.android.wifi.x.@0
-rule androidx.annotation.** com.android.server.x.wifi.androidx.annotation.@1
+rule androidx.annotation.** com.android.wifi.x.@0
# We don't jar-jar the entire package because, we still use some classes (like
# AsyncChannel in com.android.internal.util) from these packages which are not
# inside our jar (currently in framework.jar, but will be in wifisdk.jar in the future).
-rule com.android.internal.util.FastXmlSerializer* com.android.server.x.wifi.util.FastXmlSerializer@1
-rule com.android.internal.util.HexDump* com.android.server.x.wifi.util.HexDump@1
-rule com.android.internal.util.IState* com.android.server.x.wifi.util.IState@1
-rule com.android.internal.util.MessageUtils* com.android.server.x.wifi.util.MessageUtils@1
-rule com.android.internal.util.State* com.android.server.x.wifi.util.State@1
-rule com.android.internal.util.StateMachine* com.android.server.x.wifi.util.StateMachine@1
-rule com.android.internal.util.WakeupMessage* com.android.server.x.wifi.util.WakeupMessage@1
+rule com.android.internal.util.FastXmlSerializer* com.android.wifi.x.@0
+rule com.android.internal.util.HexDump* com.android.wifi.x.@0
+rule com.android.internal.util.IState* com.android.wifi.x.@0
+rule com.android.internal.util.MessageUtils* com.android.wifi.x.@0
+rule com.android.internal.util.State* com.android.wifi.x.@0
+rule com.android.internal.util.StateMachine* com.android.wifi.x.@0
+rule com.android.internal.util.WakeupMessage* com.android.wifi.x.@0
-rule android.util.BackupUtils* com.android.server.x.wifi.util.BackupUtils@1
-rule android.util.LocalLog* com.android.server.x.wifi.util.LocalLog@1
-rule android.util.Rational* com.android.server.x.wifi.util.Rational@1
+rule android.util.BackupUtils* com.android.wifi.x.@0
+rule android.util.LocalLog* com.android.wifi.x.@0
+rule android.util.Rational* com.android.wifi.x.@0
-rule android.os.BasicShellCommandHandler* com.android.server.x.wifi.os.BasicShellCommandHandler@1
+rule android.os.BasicShellCommandHandler* com.android.wifi.x.@0
# Use our statically linked bouncy castle library
-rule org.bouncycastle.** com.android.server.x.wifi.bouncycastle.@1
+rule org.bouncycastle.** com.android.wifi.x.@0
# Use our statically linked protobuf library
-rule com.google.protobuf.** com.android.server.x.wifi.protobuf.@1
+rule com.google.protobuf.** com.android.wifi.x.@0
# use statically linked SystemMessageProto
-rule com.android.internal.messages.SystemMessageProto* com.android.server.x.wifi.messages.SystemMessageProto@1
+rule com.android.internal.messages.SystemMessageProto* com.android.wifi.x.@0
# Use our statically linked PlatformProperties library
-rule android.sysprop.** com.android.server.x.wifi.sysprop.@1
+rule android.sysprop.** com.android.wifi.x.@0
# Use our statically linked HIDL stubs
# Note: android.hardware.wifi.** is used by various wifi feature flags. This unfortunately is also the namespace
# used by vendor HAL stubs. So, this rule is intentionally weird to try and filter the vendor HAL stubs only.
-rule android.hardware.wifi.V** com.android.server.x.wifi.hardware.wifi.V@1
-rule android.hardware.wifi.supplicant.** com.android.server.x.wifi.hardware.wifi.supplicant.@1
-rule android.hardware.wifi.hostapd.** com.android.server.x.wifi.hardware.wifi.hostapd.@1
-rule android.hidl.** com.android.server.x.wifi.hidl.@1
+rule android.hardware.wifi.V** com.android.wifi.x.@0
+rule android.hardware.wifi.supplicant.** com.android.wifi.x.@0
+rule android.hardware.wifi.hostapd.** com.android.wifi.x.@0
+rule android.hidl.** com.android.wifi.x.@0
# Use our statically linked ksoap2
-rule org.ksoap2.** com.android.server.x.wifi.ksoap2.@1
+rule org.ksoap2.** com.android.wifi.x.@0
# Use our statically linked nanohttpd
-rule fi.iki.elonen.** com.android.server.x.wifi.elonen.@1
+rule fi.iki.elonen.** com.android.wifi.x.@0
# used by both framework-wifi and wifi-service
-rule android.content.pm.BaseParceledListSlice* android.x.net.wifi.util.BaseParceledListSlice@1
-rule android.content.pm.ParceledListSlice* android.x.net.wifi.util.ParceledListSlice@1
-rule android.net.shared.Inet4AddressUtils* android.x.net.wifi.util.Inet4AddressUtils@1
-rule android.net.util.MacAddressUtils* android.x.net.wifi.util.MacAddressUtils@1
-rule android.net.util.nsd.DnsSdTxtRecord* android.x.net.wifi.util.nsd.DnsSdTxtRecord@1
-rule android.os.HandlerExecutor* android.x.net.wifi.util.HandlerExecutor@1
-rule android.telephony.Annotation* android.x.net.wifi.util.TelephonyAnnotation@1
-rule com.android.internal.util.AsyncChannel* android.x.net.wifi.util.AsyncChannel@1
-rule com.android.internal.util.AsyncService* android.x.net.wifi.util.AsyncService@1
-rule com.android.internal.util.Preconditions* android.x.net.wifi.util.Preconditions@1
-rule com.android.internal.util.Protocol* android.x.net.wifi.util.Protocol@1
+rule android.content.pm.BaseParceledListSlice* com.android.wifi.x.@0
+rule android.content.pm.ParceledListSlice* com.android.wifi.x.@0
+rule android.net.shared.Inet4AddressUtils* com.android.wifi.x.@0
+rule android.net.util.MacAddressUtils* com.android.wifi.x.@0
+rule android.net.util.nsd.DnsSdTxtRecord* com.android.wifi.x.@0
+rule android.os.HandlerExecutor* com.android.wifi.x.@0
+rule android.telephony.Annotation* com.android.wifi.x.@0
+rule com.android.internal.util.AsyncChannel* com.android.wifi.x.@0
+rule com.android.internal.util.AsyncService* com.android.wifi.x.@0
+rule com.android.internal.util.Preconditions* com.android.wifi.x.@0
+rule com.android.internal.util.Protocol* com.android.wifi.x.@0