summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk7
-rw-r--r--api/current.txt196
-rw-r--r--api/removed.txt5
-rw-r--r--api/system-current.txt214
-rw-r--r--api/system-removed.txt5
-rw-r--r--api/test-current.txt196
-rw-r--r--api/test-removed.txt5
-rw-r--r--core/java/android/accessibilityservice/AccessibilityServiceInfo.java31
-rw-r--r--core/java/android/accounts/AccountManager.java8
-rw-r--r--core/java/android/app/Activity.java96
-rw-r--r--core/java/android/app/ActivityManager.java12
-rw-r--r--core/java/android/app/ActivityThread.java4
-rw-r--r--core/java/android/app/IActivityManager.aidl7
-rw-r--r--core/java/android/app/Notification.java77
-rw-r--r--core/java/android/app/PictureInPictureArgs.java238
-rw-r--r--core/java/android/app/PictureInPictureParams.aidl (renamed from core/java/android/app/PictureInPictureArgs.aidl)2
-rw-r--r--core/java/android/app/PictureInPictureParams.java333
-rw-r--r--core/java/android/app/WallpaperManager.java3
-rw-r--r--core/java/android/app/admin/DeviceAdminService.java15
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java13
-rw-r--r--core/java/android/app/admin/SystemUpdateInfo.java5
-rw-r--r--core/java/android/app/assist/AssistStructure.java11
-rw-r--r--core/java/android/appwidget/AppWidgetManager.java18
-rw-r--r--core/java/android/bluetooth/BluetoothDevice.java61
-rw-r--r--core/java/android/bluetooth/BluetoothGatt.java168
-rw-r--r--core/java/android/bluetooth/BluetoothGattCallback.java6
-rw-r--r--core/java/android/bluetooth/BluetoothGattServerCallback.java6
-rw-r--r--core/java/android/bluetooth/IBluetoothGatt.aidl1
-rw-r--r--core/java/android/bluetooth/le/BluetoothLeAdvertiser.java1
-rw-r--r--core/java/android/bluetooth/le/IAdvertiserCallback.aidl29
-rw-r--r--core/java/android/companion/CompanionDeviceManager.java15
-rw-r--r--core/java/android/content/Context.java6
-rw-r--r--core/java/android/content/Intent.java4
-rw-r--r--core/java/android/content/IntentFilter.java44
-rw-r--r--core/java/android/content/pm/ActivityInfo.java23
-rw-r--r--core/java/android/content/pm/PackageManager.java10
-rw-r--r--core/java/android/content/pm/PackageParser.java86
-rw-r--r--core/java/android/content/pm/ProviderInfo.java2
-rw-r--r--core/java/android/content/pm/ServiceInfo.java2
-rw-r--r--core/java/android/hardware/SystemSensorManager.java21
-rw-r--r--core/java/android/hardware/camera2/CameraDevice.java16
-rw-r--r--core/java/android/hardware/camera2/CaptureFailure.java4
-rw-r--r--core/java/android/hardware/usb/UsbManager.java10
-rw-r--r--core/java/android/net/INetworkRecommendationProvider.aidl16
-rw-r--r--core/java/android/net/INetworkScoreService.aidl25
-rw-r--r--core/java/android/net/IpSecAlgorithm.java2
-rw-r--r--core/java/android/net/IpSecManager.java2
-rw-r--r--core/java/android/net/IpSecTransform.java2
-rw-r--r--core/java/android/net/NetworkRecommendationProvider.java31
-rw-r--r--core/java/android/net/NetworkScoreManager.java46
-rw-r--r--core/java/android/net/RecommendationRequest.aidl19
-rw-r--r--core/java/android/net/RecommendationRequest.java2
-rw-r--r--core/java/android/net/RecommendationResult.aidl19
-rw-r--r--core/java/android/net/RecommendationResult.java1
-rw-r--r--core/java/android/os/DropBoxManager.java3
-rw-r--r--core/java/android/preference/Preference.java10
-rw-r--r--core/java/android/provider/Contacts.java3
-rw-r--r--core/java/android/provider/ContactsContract.java4
-rw-r--r--core/java/android/provider/FontRequest.java (renamed from graphics/java/android/graphics/fonts/FontRequest.java)42
-rw-r--r--core/java/android/provider/FontsContract.java251
-rw-r--r--core/java/android/provider/MediaStore.java1
-rwxr-xr-xcore/java/android/provider/Settings.java105
-rw-r--r--core/java/android/service/autofill/AutofillService.java55
-rw-r--r--core/java/android/service/autofill/FillCallback.java7
-rw-r--r--core/java/android/service/autofill/FillContext.java11
-rw-r--r--core/java/android/service/autofill/FillRequest.java34
-rw-r--r--core/java/android/service/autofill/FillResponse.java33
-rw-r--r--core/java/android/service/autofill/IFillCallback.aidl2
-rw-r--r--core/java/android/service/autofill/SaveInfo.java85
-rw-r--r--core/java/android/util/ArrayMap.java114
-rw-r--r--core/java/android/util/MergedConfiguration.java46
-rw-r--r--core/java/android/view/SurfaceView.java4
-rw-r--r--core/java/android/view/View.java64
-rw-r--r--core/java/android/view/ViewGroup.java28
-rw-r--r--core/java/android/view/ViewOverlay.java24
-rw-r--r--core/java/android/view/ViewRootImpl.java11
-rw-r--r--core/java/android/view/ViewStructure.java27
-rw-r--r--core/java/android/view/accessibility/AccessibilityManager.java226
-rw-r--r--core/java/android/view/autofill/AutofillManager.java42
-rw-r--r--core/java/android/view/autofill/IAutoFillManager.aidl2
-rw-r--r--core/java/android/webkit/WebViewZygote.java26
-rw-r--r--core/java/android/widget/ArrayAdapter.java45
-rw-r--r--core/java/android/widget/DatePicker.java1
-rw-r--r--core/java/android/widget/ListView.java74
-rw-r--r--core/java/android/widget/RemoteViews.java39
-rw-r--r--core/java/android/widget/TimePicker.java1
-rw-r--r--core/java/com/android/internal/util/ArrayUtils.java7
-rw-r--r--core/jni/Android.mk1
-rw-r--r--core/jni/android_hardware_HardwareBuffer.cpp3
-rw-r--r--core/jni/android_hardware_SensorManager.cpp5
-rw-r--r--core/jni/com_android_internal_os_Zygote.cpp3
-rw-r--r--core/res/res/layout/notification_template_material_ambient.xml3
-rw-r--r--core/res/res/values/attrs.xml24
-rw-r--r--core/res/res/values/strings.xml7
-rw-r--r--core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java91
-rw-r--r--core/tests/coretests/src/android/net/RecommendationRequestTest.java116
-rw-r--r--core/tests/coretests/src/android/preference/PreferenceIconSpaceTest.java100
-rw-r--r--core/tests/coretests/src/android/provider/FontsContractE2ETest.java53
-rw-r--r--core/tests/coretests/src/android/provider/FontsContractTest.java1
-rw-r--r--core/tests/coretests/src/android/provider/MockFontProvider.java82
-rw-r--r--core/tests/coretests/src/android/provider/SettingsBackupTest.java12
-rw-r--r--core/tests/coretests/src/android/util/ArrayMapTest.java108
-rw-r--r--data/etc/platform.xml3
-rw-r--r--graphics/java/android/graphics/Typeface.java242
-rw-r--r--graphics/java/android/graphics/fonts/FontResult.java115
-rw-r--r--graphics/java/android/graphics/fonts/FontSpec.aidl18
-rw-r--r--keystore/java/android/security/KeyChain.java6
-rw-r--r--keystore/java/android/security/KeyStore.java10
-rw-r--r--keystore/java/android/security/keystore/AndroidKeyStoreSpi.java9
-rw-r--r--keystore/java/android/security/keystore/KeyProtection.java33
-rw-r--r--libs/hwui/Texture.h1
-rw-r--r--media/java/android/media/AudioFocusInfo.java14
-rw-r--r--media/java/android/media/AudioManager.java13
-rw-r--r--media/java/android/media/IAudioService.aidl2
-rw-r--r--media/java/android/media/VolumeShaper.java25
-rw-r--r--media/java/android/media/tv/TvContract.java24
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java21
-rw-r--r--packages/CompanionDeviceManager/res/values/strings.xml4
-rw-r--r--packages/PrintSpooler/res/values-ky/strings.xml4
-rw-r--r--packages/PrintSpooler/res/values-zh-rTW/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-af/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-am/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ar/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-az/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-b+sr+Latn/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-be/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-bg/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-bn/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-bs/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ca/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-cs/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-da/arrays.xml4
-rw-r--r--packages/SettingsLib/res/values-da/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-de/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-el/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-en-rAU/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-en-rGB/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-en-rIN/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-es-rUS/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-es/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-et/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-eu/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-fa/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-fi/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-fr/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-gl/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-gu/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-hi/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-hr/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-hu/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-hy/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-in/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-is/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-it/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-iw/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ja/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ka/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-kk/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-km/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-kn/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ko/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ky/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-lo/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-lt/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-lv/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-mk/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ml/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-mn/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-mr/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ms/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-my/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-nb/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ne/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-nl/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-pa/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-pl/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/strings.xml10
-rw-r--r--packages/SettingsLib/res/values-pt-rPT/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-pt/strings.xml10
-rw-r--r--packages/SettingsLib/res/values-ro/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ru/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-si/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-sk/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sl/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-sq/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-sr/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-sv/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-sw/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ta/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-te/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-th/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-tl/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-tr/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-uk/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ur/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-uz/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-vi/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/strings.xml26
-rw-r--r--packages/SettingsLib/res/values-zu/strings.xml4
-rw-r--r--packages/SettingsLib/res/values/strings.xml6
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java21
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java316
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/WifiTrackerFactory.java4
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java18
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java3
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java103
-rw-r--r--packages/SettingsProvider/res/values/defaults.xml40
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java57
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java9
-rw-r--r--packages/Shell/src/com/android/shell/BugreportProgressService.java14
-rw-r--r--packages/SystemUI/AndroidManifest.xml3
-rw-r--r--packages/SystemUI/res/values-af/strings.xml24
-rw-r--r--packages/SystemUI/res/values-am/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml24
-rw-r--r--packages/SystemUI/res/values-az/strings.xml24
-rw-r--r--packages/SystemUI/res/values-b+sr+Latn/strings.xml24
-rw-r--r--packages/SystemUI/res/values-be/strings.xml24
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml63
-rw-r--r--packages/SystemUI/res/values-bn/strings.xml63
-rw-r--r--packages/SystemUI/res/values-bs/strings.xml32
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml28
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml24
-rw-r--r--packages/SystemUI/res/values-da/strings.xml63
-rw-r--r--packages/SystemUI/res/values-de/strings.xml30
-rw-r--r--packages/SystemUI/res/values-el/strings.xml24
-rw-r--r--packages/SystemUI/res/values-en-rAU/strings.xml24
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml24
-rw-r--r--packages/SystemUI/res/values-en-rIN/strings.xml24
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml28
-rw-r--r--packages/SystemUI/res/values-es/strings.xml26
-rw-r--r--packages/SystemUI/res/values-et/strings.xml24
-rw-r--r--packages/SystemUI/res/values-eu/strings.xml26
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml63
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml24
-rw-r--r--packages/SystemUI/res/values-fr-rCA/strings.xml26
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml24
-rw-r--r--packages/SystemUI/res/values-gl/strings.xml28
-rw-r--r--packages/SystemUI/res/values-gu/strings.xml63
-rw-r--r--packages/SystemUI/res/values-hi/strings.xml26
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml24
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml63
-rw-r--r--packages/SystemUI/res/values-hy/strings.xml24
-rw-r--r--packages/SystemUI/res/values-in/strings.xml24
-rw-r--r--packages/SystemUI/res/values-is/strings.xml24
-rw-r--r--packages/SystemUI/res/values-it/strings.xml24
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml63
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ka/strings.xml63
-rw-r--r--packages/SystemUI/res/values-kk/strings.xml24
-rw-r--r--packages/SystemUI/res/values-km/strings.xml65
-rw-r--r--packages/SystemUI/res/values-kn/strings.xml81
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml63
-rw-r--r--packages/SystemUI/res/values-ky/strings.xml77
-rw-r--r--packages/SystemUI/res/values-lo/strings.xml63
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml63
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml63
-rw-r--r--packages/SystemUI/res/values-mk/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ml/strings.xml63
-rw-r--r--packages/SystemUI/res/values-mn/strings.xml63
-rw-r--r--packages/SystemUI/res/values-mr/strings.xml63
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml63
-rw-r--r--packages/SystemUI/res/values-my/strings.xml24
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml30
-rw-r--r--packages/SystemUI/res/values-ne/strings.xml63
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml65
-rw-r--r--packages/SystemUI/res/values-pa/strings.xml63
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml63
-rw-r--r--packages/SystemUI/res/values-pt-rBR/strings.xml24
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml24
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml24
-rw-r--r--packages/SystemUI/res/values-si/strings.xml63
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml26
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml63
-rw-r--r--packages/SystemUI/res/values-sq/strings.xml24
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml24
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml24
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ta/strings.xml24
-rw-r--r--packages/SystemUI/res/values-te/strings.xml63
-rw-r--r--packages/SystemUI/res/values-th/strings.xml63
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml63
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml63
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ur/strings.xml63
-rw-r--r--packages/SystemUI/res/values-uz/strings.xml34
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml63
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml73
-rw-r--r--packages/SystemUI/res/values-zh-rHK/strings.xml63
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml97
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml24
-rw-r--r--packages/SystemUI/res/values/strings.xml10
-rw-r--r--packages/SystemUI/res/xml/tuner_prefs.xml11
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java72
-rw-r--r--packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java168
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java158
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java1
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java7
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java64
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillManagerService.java35
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java86
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java11
-rw-r--r--services/autofill/java/com/android/server/autofill/Helper.java38
-rw-r--r--services/autofill/java/com/android/server/autofill/RemoteFillService.java39
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java496
-rw-r--r--services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java10
-rw-r--r--services/autofill/java/com/android/server/autofill/ui/SaveUi.java13
-rw-r--r--services/backup/java/com/android/server/backup/BackupManagerService.java22
-rw-r--r--services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java45
-rw-r--r--services/core/java/com/android/server/NetworkScoreService.java226
-rw-r--r--services/core/java/com/android/server/SyntheticPasswordCrypto.java4
-rw-r--r--services/core/java/com/android/server/accounts/AccountManagerService.java104
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java96
-rw-r--r--services/core/java/com/android/server/am/ActivityMetricsLogger.java4
-rw-r--r--services/core/java/com/android/server/am/ActivityRecord.java117
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java9
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java16
-rw-r--r--services/core/java/com/android/server/am/BroadcastQueue.java2
-rw-r--r--services/core/java/com/android/server/am/TaskRecord.java5
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java8
-rw-r--r--services/core/java/com/android/server/audio/FocusRequester.java13
-rw-r--r--services/core/java/com/android/server/audio/MediaFocusControl.java21
-rw-r--r--services/core/java/com/android/server/audio/PlaybackActivityMonitor.java9
-rw-r--r--services/core/java/com/android/server/job/controllers/JobStatus.java12
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java23
-rw-r--r--services/core/java/com/android/server/notification/RankingHelper.java19
-rw-r--r--services/core/java/com/android/server/os/SchedulingPolicyService.java20
-rw-r--r--services/core/java/com/android/server/pm/PackageDexOptimizer.java108
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java97
-rw-r--r--services/core/java/com/android/server/pm/Settings.java6
-rw-r--r--services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java1
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java13
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java2
-rw-r--r--services/core/java/com/android/server/wm/Task.java4
-rw-r--r--services/core/java/com/android/server/wm/TaskStack.java15
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java12
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java7
-rw-r--r--services/core/java/com/android/server/wm/WindowStateAnimator.java2
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DeviceAdminServiceController.java9
-rw-r--r--services/net/java/android/net/apf/ApfCapabilities.java2
-rw-r--r--services/net/java/android/net/ip/IpManager.java39
-rw-r--r--services/net/java/android/net/util/ConnectivityPacketSummary.java4
-rw-r--r--services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java86
-rw-r--r--services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java45
-rw-r--r--services/tests/notification/src/com/android/server/notification/RankingHelperTest.java52
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java198
-rw-r--r--services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java92
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java17
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java27
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java23
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java162
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java15
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java11
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java24
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java14
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java3
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java1
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java3
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowLayersControllerTests.java108
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java19
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java125
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java18
-rw-r--r--services/usb/java/com/android/server/usb/UsbDeviceManager.java6
-rw-r--r--telecomm/java/android/telecom/Connection.java1
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java355
-rw-r--r--telephony/java/android/telephony/VisualVoicemailService.java14
-rw-r--r--telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java2
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephony.aidl2
-rw-r--r--tests/testables/src/android/testing/AndroidTestingRunner.java48
-rw-r--r--tests/testables/src/android/testing/TestableLooper.java219
-rw-r--r--tests/testables/tests/src/android/testing/TestableLooperTest.java60
-rw-r--r--tools/aapt2/cmd/Compile.cpp23
-rw-r--r--tools/aapt2/link/ManifestFixer.cpp2
-rwxr-xr-xtools/fonts/fontchain_lint.py3
-rw-r--r--wifi/java/android/net/wifi/aware/DiscoverySession.java9
-rw-r--r--wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java2
-rw-r--r--wifi/java/android/net/wifi/aware/PublishConfig.java2
-rw-r--r--wifi/java/android/net/wifi/aware/SubscribeConfig.java2
-rw-r--r--wifi/java/android/net/wifi/aware/WifiAwareManager.java8
-rw-r--r--wifi/java/android/net/wifi/aware/WifiAwareSession.java10
-rw-r--r--wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java6
403 files changed, 6973 insertions, 6473 deletions
diff --git a/Android.mk b/Android.mk
index 991d18513be8..e58f30661fbc 100644
--- a/Android.mk
+++ b/Android.mk
@@ -143,7 +143,6 @@ LOCAL_SRC_FILES += \
core/java/android/bluetooth/IBluetoothGatt.aidl \
core/java/android/bluetooth/IBluetoothGattCallback.aidl \
core/java/android/bluetooth/IBluetoothGattServerCallback.aidl \
- core/java/android/bluetooth/le/IAdvertiserCallback.aidl \
core/java/android/bluetooth/le/IAdvertisingSetCallback.aidl \
core/java/android/bluetooth/le/IPeriodicAdvertisingCallback.aidl \
core/java/android/bluetooth/le/IScannerCallback.aidl \
@@ -908,7 +907,6 @@ framework_docs_LOCAL_API_CHECK_JAVA_LIBRARIES := \
ext \
icu4j \
framework \
- telephony-common \
voip-common
framework_docs_LOCAL_JAVA_LIBRARIES := \
@@ -923,6 +921,7 @@ framework_docs_LOCAL_DROIDDOC_HTML_DIR := docs/html
# Conscrypt (com.android.org.conscrypt) is an implementation detail and should
# not be referenced in the documentation.
framework_docs_LOCAL_DROIDDOC_OPTIONS := \
+ -android \
-knowntags ./frameworks/base/docs/knowntags.txt \
-knowntags ./libcore/known_oj_tags.txt \
-hidePackage com.android.org.conscrypt \
@@ -952,8 +951,8 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS := \
-since $(SRC_API_DIR)/24.txt 24 \
-since $(SRC_API_DIR)/25.txt 25 \
-since ./frameworks/base/api/current.txt O \
- -werror -hide 111 -hide 113 \
- -overview $(LOCAL_PATH)/core/java/overview.html
+ -werror -hide 111 -hide 113 -hide 121 \
+ -overview $(LOCAL_PATH)/core/java/overview.html \
# Allow the support library to add its own droiddoc options.
include $(LOCAL_PATH)/../support/droiddoc.mk
diff --git a/api/current.txt b/api/current.txt
index 2316d41fa559..4c22a6d3631d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -362,7 +362,7 @@ package android {
field public static final int canControlMagnification = 16844039; // 0x1010507
field public static final int canPerformGestures = 16844045; // 0x101050d
field public static final int canRecord = 16844060; // 0x101051c
- field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
+ field public static final deprecated int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9
field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7
field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
@@ -2837,7 +2837,7 @@ package android.accessibilityservice {
field public static final int CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES = 64; // 0x40
field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10
field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20
- field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final deprecated int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8
field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
@@ -2855,7 +2855,7 @@ package android.accessibilityservice {
field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
field public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 256; // 0x100
- field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final deprecated int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
@@ -3584,8 +3584,9 @@ package android.app {
method public boolean dispatchTouchEvent(android.view.MotionEvent);
method public boolean dispatchTrackballEvent(android.view.MotionEvent);
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
- method public void enterPictureInPictureMode();
- method public boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
+ method public deprecated void enterPictureInPictureMode();
+ method public deprecated boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
+ method public boolean enterPictureInPictureMode(android.app.PictureInPictureParams);
method public <T extends android.view.View> T findViewById(int);
method public void finish();
method public void finishActivity(int);
@@ -3609,6 +3610,7 @@ package android.app {
method public android.view.LayoutInflater getLayoutInflater();
method public android.app.LoaderManager getLoaderManager();
method public java.lang.String getLocalClassName();
+ method public int getMaxNumPictureInPictureActions();
method public final android.media.session.MediaController getMediaController();
method public android.view.MenuInflater getMenuInflater();
method public final android.app.Activity getParent();
@@ -3635,7 +3637,6 @@ package android.app {
method public boolean isInMultiWindowMode();
method public boolean isInPictureInPictureMode();
method public boolean isLocalVoiceInteractionSupported();
- method public boolean isOverlayWithDecorCaptionEnabled();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3760,8 +3761,8 @@ package android.app {
method public void setImmersive(boolean);
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
- method public void setOverlayWithDecorCaptionEnabled(boolean);
method public void setPictureInPictureArgs(android.app.PictureInPictureArgs);
+ method public void setPictureInPictureParams(android.app.PictureInPictureParams);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -3840,7 +3841,7 @@ package android.app {
method public int getLauncherLargeIconDensity();
method public int getLauncherLargeIconSize();
method public int getLockTaskModeState();
- method public static int getMaxNumPictureInPictureActions();
+ method public static deprecated int getMaxNumPictureInPictureActions();
method public int getMemoryClass();
method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo);
method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo);
@@ -5125,6 +5126,7 @@ package android.app {
method public int getBadgeIconType();
method public java.lang.String getChannel();
method public java.lang.String getGroup();
+ method public int getGroupAlertBehavior();
method public android.graphics.drawable.Icon getLargeIcon();
method public java.lang.CharSequence getSettingsText();
method public java.lang.String getShortcutId();
@@ -5200,6 +5202,9 @@ package android.app {
field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
field public static final deprecated int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final deprecated int PRIORITY_DEFAULT = 0; // 0x0
field public static final deprecated int PRIORITY_HIGH = 1; // 0x1
@@ -5346,6 +5351,7 @@ package android.app {
method public android.app.Notification.Builder setExtras(android.os.Bundle);
method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
method public android.app.Notification.Builder setGroup(java.lang.String);
+ method public android.app.Notification.Builder setGroupAlertBehavior(int);
method public android.app.Notification.Builder setGroupSummary(boolean);
method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
@@ -5692,16 +5698,29 @@ package android.app {
method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle);
}
- public final class PictureInPictureArgs implements android.os.Parcelable {
- ctor public PictureInPictureArgs();
- ctor public PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
- method public android.app.PictureInPictureArgs clone();
+ public final deprecated class PictureInPictureArgs extends android.app.PictureInPictureParams {
+ ctor public deprecated PictureInPictureArgs();
+ ctor public deprecated PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
+ method public deprecated void setActions(java.util.List<android.app.RemoteAction>);
+ method public deprecated void setAspectRatio(float);
+ method public deprecated void setSourceRectHint(android.graphics.Rect);
+ }
+
+ public class PictureInPictureParams implements android.os.Parcelable {
method public int describeContents();
- method public void setActions(java.util.List<android.app.RemoteAction>);
- method public void setAspectRatio(float);
- method public void setSourceRectHint(android.graphics.Rect);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
+ field public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
+ field protected android.util.Rational mAspectRatio;
+ field protected android.graphics.Rect mSourceRectHint;
+ field protected java.util.List<android.app.RemoteAction> mUserActions;
+ }
+
+ public static class PictureInPictureParams.Builder {
+ ctor public PictureInPictureParams.Builder();
+ method public android.app.PictureInPictureParams build();
+ method public android.app.PictureInPictureParams.Builder setActions(java.util.List<android.app.RemoteAction>);
+ method public android.app.PictureInPictureParams.Builder setAspectRatio(android.util.Rational);
+ method public android.app.PictureInPictureParams.Builder setSourceRectHint(android.graphics.Rect);
}
public class Presentation extends android.app.Dialog {
@@ -7597,6 +7616,7 @@ package android.bluetooth {
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback);
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int);
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int);
+ method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int, android.os.Handler);
method public boolean createBond();
method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
@@ -8934,7 +8954,7 @@ package android.content {
field public static final java.lang.String CAPTIONING_SERVICE = "captioning";
field public static final java.lang.String CARRIER_CONFIG_SERVICE = "carrier_config";
field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard";
- field public static final java.lang.String COMPANION_DEVICE_SERVICE = "companion_device";
+ field public static final java.lang.String COMPANION_DEVICE_SERVICE = "companiondevice";
field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity";
field public static final java.lang.String CONSUMER_IR_SERVICE = "consumer_ir";
field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2
@@ -8948,7 +8968,6 @@ package android.content {
field public static final java.lang.String HARDWARE_PROPERTIES_SERVICE = "hardware_properties";
field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method";
field public static final java.lang.String INPUT_SERVICE = "input";
- field public static final java.lang.String IPSEC_SERVICE = "ipsec";
field public static final java.lang.String JOB_SCHEDULER_SERVICE = "jobscheduler";
field public static final java.lang.String KEYGUARD_SERVICE = "keyguard";
field public static final java.lang.String LAUNCHER_APPS_SERVICE = "launcherapps";
@@ -13779,7 +13798,6 @@ package android.graphics {
}
public class Typeface {
- method public static deprecated void create(android.graphics.fonts.FontRequest, android.graphics.Typeface.FontRequestCallback);
method public static android.graphics.Typeface create(java.lang.String, int);
method public static android.graphics.Typeface create(android.graphics.Typeface, int);
method public static android.graphics.Typeface createFromAsset(android.content.res.AssetManager, java.lang.String);
@@ -13814,17 +13832,6 @@ package android.graphics {
method public android.graphics.Typeface.Builder setWeight(int);
}
- public static abstract deprecated interface Typeface.FontRequestCallback {
- method public abstract void onTypefaceRequestFailed(int);
- method public abstract void onTypefaceRetrieved(android.graphics.Typeface);
- field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
- field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
- field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
- field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
- field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
- }
-
public class Xfermode {
ctor public Xfermode();
}
@@ -14401,18 +14408,6 @@ package android.graphics.drawable.shapes {
package android.graphics.fonts {
- public final class FontRequest implements android.os.Parcelable {
- ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String);
- ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
- method public int describeContents();
- method public java.util.List<java.util.List<byte[]>> getCertificates();
- method public java.lang.String getProviderAuthority();
- method public java.lang.String getProviderPackage();
- method public java.lang.String getQuery();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.graphics.fonts.FontRequest> CREATOR;
- }
-
public final class FontVariationAxis {
ctor public FontVariationAxis(java.lang.String, float) throws android.graphics.fonts.FontVariationAxis.InvalidFormatException;
method public static android.graphics.fonts.FontVariationAxis[] fromFontVariationSettings(java.lang.String) throws android.graphics.fonts.FontVariationAxis.InvalidFormatException;
@@ -23646,7 +23641,7 @@ package android.media {
public static final class VolumeShaper.Configuration implements android.os.Parcelable {
method public int describeContents();
- method public double getDurationMillis();
+ method public long getDuration();
method public int getInterpolatorType();
method public static int getMaximumCurvePoints();
method public float[] getTimes();
@@ -23672,7 +23667,7 @@ package android.media {
method public android.media.VolumeShaper.Configuration.Builder scaleToEndVolume(float);
method public android.media.VolumeShaper.Configuration.Builder scaleToStartVolume(float);
method public android.media.VolumeShaper.Configuration.Builder setCurve(float[], float[]);
- method public android.media.VolumeShaper.Configuration.Builder setDurationMillis(double);
+ method public android.media.VolumeShaper.Configuration.Builder setDuration(long);
method public android.media.VolumeShaper.Configuration.Builder setInterpolatorType(int);
}
@@ -24787,7 +24782,6 @@ package android.media.tv {
}
public static final class TvContract.WatchNextPrograms implements android.media.tv.TvContract.BaseTvColumns {
- ctor public TvContract.WatchNextPrograms();
field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
@@ -25503,66 +25497,6 @@ package android.net {
field public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
}
- public final class IpSecAlgorithm implements android.os.Parcelable {
- ctor public IpSecAlgorithm(java.lang.String, byte[]);
- ctor public IpSecAlgorithm(java.lang.String, byte[], int);
- method public int describeContents();
- method public byte[] getKey();
- method public java.lang.String getName();
- method public int getTruncationLengthBits();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final java.lang.String AUTH_HMAC_MD5 = "hmac(md5)";
- field public static final java.lang.String AUTH_HMAC_SHA1 = "hmac(sha1)";
- field public static final java.lang.String AUTH_HMAC_SHA256 = "hmac(sha256)";
- field public static final java.lang.String AUTH_HMAC_SHA384 = "hmac(sha384)";
- field public static final java.lang.String AUTH_HMAC_SHA512 = "hmac(sha512)";
- field public static final android.os.Parcelable.Creator<android.net.IpSecAlgorithm> CREATOR;
- field public static final java.lang.String CRYPT_AES_CBC = "cbc(aes)";
- }
-
- public final class IpSecManager {
- method public void applyTransportModeTransform(java.io.FileDescriptor, android.net.IpSecTransform) throws java.io.IOException;
- method public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket(int) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
- method public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket() throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
- method public void removeTransportModeTransform(java.io.FileDescriptor, android.net.IpSecTransform) throws java.io.IOException;
- method public android.net.IpSecManager.SecurityParameterIndex reserveSecurityParameterIndex(int, java.net.InetAddress) throws android.net.IpSecManager.ResourceUnavailableException;
- method public android.net.IpSecManager.SecurityParameterIndex reserveSecurityParameterIndex(int, java.net.InetAddress, int) throws android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
- field public static final int INVALID_SECURITY_PARAMETER_INDEX = 0; // 0x0
- }
-
- public static final class IpSecManager.ResourceUnavailableException extends android.util.AndroidException {
- }
-
- public static final class IpSecManager.SecurityParameterIndex implements java.lang.AutoCloseable {
- method public void close();
- method public int getSpi();
- }
-
- public static final class IpSecManager.SpiUnavailableException extends android.util.AndroidException {
- method public int getSpi();
- }
-
- public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
- method public void close() throws java.io.IOException;
- method public int getPort();
- method public java.io.FileDescriptor getSocket();
- }
-
- public final class IpSecTransform implements java.lang.AutoCloseable {
- method public void close();
- field public static final int DIRECTION_IN = 0; // 0x0
- field public static final int DIRECTION_OUT = 1; // 0x1
- }
-
- public static class IpSecTransform.Builder {
- ctor public IpSecTransform.Builder(android.content.Context);
- method public android.net.IpSecTransform buildTransportModeTransform(java.net.InetAddress) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
- method public android.net.IpSecTransform.Builder setAuthentication(int, android.net.IpSecAlgorithm);
- method public android.net.IpSecTransform.Builder setEncryption(int, android.net.IpSecAlgorithm);
- method public android.net.IpSecTransform.Builder setIpv4Encapsulation(android.net.IpSecManager.UdpEncapsulationSocket, int);
- method public android.net.IpSecTransform.Builder setSpi(int, android.net.IpSecManager.SecurityParameterIndex);
- }
-
public class LinkAddress implements android.os.Parcelable {
method public int describeContents();
method public java.net.InetAddress getAddress();
@@ -26740,10 +26674,10 @@ package android.net.wifi.aware {
field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
}
- public class DiscoverySession {
+ public class DiscoverySession implements java.lang.AutoCloseable {
+ method public void close();
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(android.net.wifi.aware.PeerHandle);
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(android.net.wifi.aware.PeerHandle, java.lang.String);
- method public void destroy();
method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
}
@@ -26824,10 +26758,10 @@ package android.net.wifi.aware {
field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
}
- public class WifiAwareSession {
+ public class WifiAwareSession implements java.lang.AutoCloseable {
+ method public void close();
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(int, byte[]);
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(int, byte[], java.lang.String);
- method public void destroy();
method public void publish(android.net.wifi.aware.PublishConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
method public void subscribe(android.net.wifi.aware.SubscribeConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
}
@@ -34493,11 +34427,20 @@ package android.provider {
method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
}
+ public final class FontRequest {
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String);
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
+ method public java.util.List<java.util.List<byte[]>> getCertificates();
+ method public java.lang.String getProviderAuthority();
+ method public java.lang.String getProviderPackage();
+ method public java.lang.String getQuery();
+ }
+
public class FontsContract {
method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.provider.FontsContract.FontInfo[], int, boolean, java.lang.String);
method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.provider.FontsContract.FontInfo[]);
- method public static android.provider.FontsContract.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.graphics.fonts.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static void requestFont(android.content.Context, android.graphics.fonts.FontRequest, android.provider.FontsContract.FontRequestCallback, android.os.Handler);
+ method public static android.provider.FontsContract.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFonts(android.content.Context, android.provider.FontRequest, android.os.Handler, android.os.CancellationSignal, android.provider.FontsContract.FontRequestCallback);
}
public static final class FontsContract.Columns implements android.provider.BaseColumns {
@@ -34942,6 +34885,7 @@ package android.provider {
field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
field public static final java.lang.String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+ field public static final java.lang.String ACTION_REQUEST_SET_AUTOFILL_SERVICE = "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
field public static final java.lang.String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
field public static final java.lang.String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS";
field public static final java.lang.String ACTION_SETTINGS = "android.settings.SETTINGS";
@@ -37033,15 +36977,12 @@ package android.service.autofill {
public abstract class AutofillService extends android.app.Service {
ctor public AutofillService();
- method public final deprecated void disableSelf();
method public final android.service.autofill.FillEventHistory getFillEventHistory();
method public final android.os.IBinder onBind(android.content.Intent);
method public void onConnected();
method public void onDisconnected();
- method public void onFillRequest(android.service.autofill.FillRequest, android.os.CancellationSignal, android.service.autofill.FillCallback);
- method public abstract deprecated void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, int, android.os.CancellationSignal, android.service.autofill.FillCallback);
- method public void onSaveRequest(android.service.autofill.SaveRequest, android.service.autofill.SaveCallback);
- method public abstract deprecated void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.service.autofill.SaveCallback);
+ method public abstract void onFillRequest(android.service.autofill.FillRequest, android.os.CancellationSignal, android.service.autofill.FillCallback);
+ method public abstract void onSaveRequest(android.service.autofill.SaveRequest, android.service.autofill.SaveCallback);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutofillService";
field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
}
@@ -37095,9 +37036,9 @@ package android.service.autofill {
public final class FillRequest implements android.os.Parcelable {
method public int describeContents();
method public android.os.Bundle getClientState();
+ method public java.util.ArrayList<android.service.autofill.FillContext> getFillContexts();
method public int getFlags();
method public int getId();
- method public android.app.assist.AssistStructure getStructure();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
@@ -37115,7 +37056,6 @@ package android.service.autofill {
method public android.service.autofill.FillResponse build();
method public android.service.autofill.FillResponse.Builder setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.widget.RemoteViews);
method public android.service.autofill.FillResponse.Builder setClientState(android.os.Bundle);
- method public deprecated android.service.autofill.FillResponse.Builder setExtras(android.os.Bundle);
method public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...);
method public android.service.autofill.FillResponse.Builder setSaveInfo(android.service.autofill.SaveInfo);
}
@@ -37130,6 +37070,8 @@ package android.service.autofill {
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.SaveInfo> CREATOR;
field public static final int FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE = 1; // 0x1
+ field public static final int NEGATIVE_BUTTON_STYLE_CANCEL = 0; // 0x0
+ field public static final int NEGATIVE_BUTTON_STYLE_REJECT = 1; // 0x1
field public static final int SAVE_DATA_TYPE_ADDRESS = 2; // 0x2
field public static final int SAVE_DATA_TYPE_CREDIT_CARD = 4; // 0x4
field public static final int SAVE_DATA_TYPE_EMAIL_ADDRESS = 16; // 0x10
@@ -37143,7 +37085,7 @@ package android.service.autofill {
method public android.service.autofill.SaveInfo build();
method public android.service.autofill.SaveInfo.Builder setDescription(java.lang.CharSequence);
method public android.service.autofill.SaveInfo.Builder setFlags(int);
- method public android.service.autofill.SaveInfo.Builder setNegativeAction(java.lang.CharSequence, android.content.IntentSender);
+ method public android.service.autofill.SaveInfo.Builder setNegativeAction(int, android.content.IntentSender);
method public android.service.autofill.SaveInfo.Builder setOptionalIds(android.view.autofill.AutofillId[]);
}
@@ -39087,7 +39029,6 @@ package android.telecom {
}
public static final class Connection.RttModifyStatus {
- ctor public Connection.RttModifyStatus();
field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
@@ -40237,10 +40178,12 @@ package android.telephony {
method public void sendDialerSpecialCode(java.lang.String);
method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler);
+ method public void sendVisualVoicemailSms(java.lang.String, int, java.lang.String, android.app.PendingIntent);
method public void setDataEnabled(boolean);
method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String);
method public boolean setOperatorBrandOverride(java.lang.String);
method public boolean setPreferredNetworkTypeToGlobal();
+ method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings);
method public boolean setVoiceMailNumber(java.lang.String, java.lang.String);
method public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri);
method public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
@@ -40331,8 +40274,6 @@ package android.telephony {
method public abstract void onSimRemoved(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle);
method public abstract void onSmsReceived(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telephony.VisualVoicemailSms);
method public abstract void onStopped(android.telephony.VisualVoicemailService.VisualVoicemailTask);
- method public static final void sendVisualVoicemailSms(android.content.Context, android.telecom.PhoneAccountHandle, java.lang.String, short, java.lang.String, android.app.PendingIntent);
- method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings);
field public static final java.lang.String SERVICE_INTERFACE = "android.telephony.VisualVoicemailService";
}
@@ -45424,6 +45365,7 @@ package android.view {
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
method public java.lang.String[] getAutofillHints();
+ method public final android.view.autofill.AutofillId getAutofillId();
method public int getAutofillType();
method public android.view.autofill.AutofillValue getAutofillValue();
method public android.graphics.drawable.Drawable getBackground();
@@ -46546,6 +46488,7 @@ package android.view {
method public abstract int addChildCount(int);
method public abstract void asyncCommit();
method public abstract android.view.ViewStructure asyncNewChild(int);
+ method public abstract android.view.autofill.AutofillId getAutofillId();
method public abstract int getChildCount();
method public abstract android.os.Bundle getExtras();
method public abstract java.lang.CharSequence getHint();
@@ -46559,7 +46502,8 @@ package android.view {
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
method public abstract void setAutofillHints(java.lang.String[]);
- method public abstract void setAutofillId(android.view.ViewStructure, int);
+ method public abstract void setAutofillId(android.view.autofill.AutofillId);
+ method public abstract void setAutofillId(android.view.autofill.AutofillId, int);
method public abstract void setAutofillOptions(java.lang.CharSequence[]);
method public abstract void setAutofillType(int);
method public abstract void setAutofillValue(android.view.autofill.AutofillValue);
@@ -46589,7 +46533,6 @@ package android.view {
method public abstract void setTextLines(int[], int[]);
method public abstract void setTextStyle(float, int, int, int);
method public abstract void setTransformation(android.graphics.Matrix);
- method public abstract deprecated void setUrl(java.lang.String);
method public abstract void setVisibility(int);
method public abstract void setWebDomain(java.lang.String);
}
@@ -47154,7 +47097,9 @@ package android.view.accessibility {
public final class AccessibilityManager {
method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+ method public void addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, android.os.Handler);
method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+ method public void addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, android.os.Handler);
method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
@@ -47835,6 +47780,8 @@ package android.view.autofill {
method public void cancel();
method public void commit();
method public void disableOwnedAutofillServices();
+ method public boolean hasEnabledAutofillServices();
+ method public boolean isAutofillSupported();
method public boolean isEnabled();
method public void notifyValueChanged(android.view.View);
method public void notifyValueChanged(android.view.View, int, android.view.autofill.AutofillValue);
@@ -47849,7 +47796,6 @@ package android.view.autofill {
field public static final java.lang.String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
field public static final java.lang.String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
field public static final java.lang.String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
- field public static final deprecated int FLAG_MANUAL_REQUEST = 1; // 0x1
}
public static abstract class AutofillManager.AutofillCallback {
diff --git a/api/removed.txt b/api/removed.txt
index dc9c54e8b1cd..c132385f1631 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -1,7 +1,6 @@
package android.app {
public class Notification implements android.os.Parcelable {
- method public deprecated int getBadgeIcon();
method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent);
}
@@ -351,10 +350,6 @@ package android.provider {
field public static final deprecated java.lang.String TIMESTAMP = "timestamp";
}
- public static final class FontsContract.Columns implements android.provider.BaseColumns {
- field public static final java.lang.String STYLE = "font_style";
- }
-
public static final class Settings.Global extends android.provider.Settings.NameValueTable {
field public static final deprecated java.lang.String CONTACT_METADATA_SYNC = "contact_metadata_sync";
}
diff --git a/api/system-current.txt b/api/system-current.txt
index 3e42e8395cb3..b731f5c5cb8b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -481,7 +481,7 @@ package android {
field public static final int canControlMagnification = 16844039; // 0x1010507
field public static final int canPerformGestures = 16844045; // 0x101050d
field public static final int canRecord = 16844060; // 0x101051c
- field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
+ field public static final deprecated int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9
field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7
field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
@@ -2965,7 +2965,7 @@ package android.accessibilityservice {
field public static final int CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES = 64; // 0x40
field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10
field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20
- field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final deprecated int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8
field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
@@ -2983,7 +2983,7 @@ package android.accessibilityservice {
field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
field public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 256; // 0x100
- field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final deprecated int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
@@ -3715,8 +3715,9 @@ package android.app {
method public boolean dispatchTouchEvent(android.view.MotionEvent);
method public boolean dispatchTrackballEvent(android.view.MotionEvent);
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
- method public void enterPictureInPictureMode();
- method public boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
+ method public deprecated void enterPictureInPictureMode();
+ method public deprecated boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
+ method public boolean enterPictureInPictureMode(android.app.PictureInPictureParams);
method public <T extends android.view.View> T findViewById(int);
method public void finish();
method public void finishActivity(int);
@@ -3740,6 +3741,7 @@ package android.app {
method public android.view.LayoutInflater getLayoutInflater();
method public android.app.LoaderManager getLoaderManager();
method public java.lang.String getLocalClassName();
+ method public int getMaxNumPictureInPictureActions();
method public final android.media.session.MediaController getMediaController();
method public android.view.MenuInflater getMenuInflater();
method public final android.app.Activity getParent();
@@ -3767,7 +3769,6 @@ package android.app {
method public boolean isInMultiWindowMode();
method public boolean isInPictureInPictureMode();
method public boolean isLocalVoiceInteractionSupported();
- method public boolean isOverlayWithDecorCaptionEnabled();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3894,8 +3895,8 @@ package android.app {
method public void setImmersive(boolean);
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
- method public void setOverlayWithDecorCaptionEnabled(boolean);
method public void setPictureInPictureArgs(android.app.PictureInPictureArgs);
+ method public void setPictureInPictureParams(android.app.PictureInPictureParams);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -3981,7 +3982,7 @@ package android.app {
method public int getLauncherLargeIconDensity();
method public int getLauncherLargeIconSize();
method public int getLockTaskModeState();
- method public static int getMaxNumPictureInPictureActions();
+ method public static deprecated int getMaxNumPictureInPictureActions();
method public int getMemoryClass();
method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo);
method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo);
@@ -5305,6 +5306,7 @@ package android.app {
method public int getBadgeIconType();
method public java.lang.String getChannel();
method public java.lang.String getGroup();
+ method public int getGroupAlertBehavior();
method public android.graphics.drawable.Icon getLargeIcon();
method public static java.lang.Class<? extends android.app.Notification.Style> getNotificationStyleClass(java.lang.String);
method public java.lang.CharSequence getSettingsText();
@@ -5384,6 +5386,9 @@ package android.app {
field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
field public static final deprecated int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final deprecated int PRIORITY_DEFAULT = 0; // 0x0
field public static final deprecated int PRIORITY_HIGH = 1; // 0x1
@@ -5530,6 +5535,7 @@ package android.app {
method public android.app.Notification.Builder setExtras(android.os.Bundle);
method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
method public android.app.Notification.Builder setGroup(java.lang.String);
+ method public android.app.Notification.Builder setGroupAlertBehavior(int);
method public android.app.Notification.Builder setGroupSummary(boolean);
method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
@@ -5895,16 +5901,29 @@ package android.app {
method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle);
}
- public final class PictureInPictureArgs implements android.os.Parcelable {
- ctor public PictureInPictureArgs();
- ctor public PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
- method public android.app.PictureInPictureArgs clone();
+ public final deprecated class PictureInPictureArgs extends android.app.PictureInPictureParams {
+ ctor public deprecated PictureInPictureArgs();
+ ctor public deprecated PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
+ method public deprecated void setActions(java.util.List<android.app.RemoteAction>);
+ method public deprecated void setAspectRatio(float);
+ method public deprecated void setSourceRectHint(android.graphics.Rect);
+ }
+
+ public class PictureInPictureParams implements android.os.Parcelable {
method public int describeContents();
- method public void setActions(java.util.List<android.app.RemoteAction>);
- method public void setAspectRatio(float);
- method public void setSourceRectHint(android.graphics.Rect);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
+ field public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
+ field protected android.util.Rational mAspectRatio;
+ field protected android.graphics.Rect mSourceRectHint;
+ field protected java.util.List<android.app.RemoteAction> mUserActions;
+ }
+
+ public static class PictureInPictureParams.Builder {
+ ctor public PictureInPictureParams.Builder();
+ method public android.app.PictureInPictureParams build();
+ method public android.app.PictureInPictureParams.Builder setActions(java.util.List<android.app.RemoteAction>);
+ method public android.app.PictureInPictureParams.Builder setAspectRatio(android.util.Rational);
+ method public android.app.PictureInPictureParams.Builder setSourceRectHint(android.graphics.Rect);
}
public class Presentation extends android.app.Dialog {
@@ -8070,6 +8089,7 @@ package android.bluetooth {
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback);
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int);
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int);
+ method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int, android.os.Handler);
method public boolean createBond();
method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
@@ -9439,7 +9459,7 @@ package android.content {
field public static final java.lang.String CAPTIONING_SERVICE = "captioning";
field public static final java.lang.String CARRIER_CONFIG_SERVICE = "carrier_config";
field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard";
- field public static final java.lang.String COMPANION_DEVICE_SERVICE = "companion_device";
+ field public static final java.lang.String COMPANION_DEVICE_SERVICE = "companiondevice";
field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity";
field public static final java.lang.String CONSUMER_IR_SERVICE = "consumer_ir";
field public static final java.lang.String CONTEXTHUB_SERVICE = "contexthub";
@@ -9455,7 +9475,6 @@ package android.content {
field public static final java.lang.String HDMI_CONTROL_SERVICE = "hdmi_control";
field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method";
field public static final java.lang.String INPUT_SERVICE = "input";
- field public static final java.lang.String IPSEC_SERVICE = "ipsec";
field public static final java.lang.String JOB_SCHEDULER_SERVICE = "jobscheduler";
field public static final java.lang.String KEYGUARD_SERVICE = "keyguard";
field public static final java.lang.String LAUNCHER_APPS_SERVICE = "launcherapps";
@@ -14554,7 +14573,6 @@ package android.graphics {
}
public class Typeface {
- method public static deprecated void create(android.graphics.fonts.FontRequest, android.graphics.Typeface.FontRequestCallback);
method public static android.graphics.Typeface create(java.lang.String, int);
method public static android.graphics.Typeface create(android.graphics.Typeface, int);
method public static android.graphics.Typeface createFromAsset(android.content.res.AssetManager, java.lang.String);
@@ -14589,17 +14607,6 @@ package android.graphics {
method public android.graphics.Typeface.Builder setWeight(int);
}
- public static abstract deprecated interface Typeface.FontRequestCallback {
- method public abstract void onTypefaceRequestFailed(int);
- method public abstract void onTypefaceRetrieved(android.graphics.Typeface);
- field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
- field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
- field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
- field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
- field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
- }
-
public class Xfermode {
ctor public Xfermode();
}
@@ -15176,18 +15183,6 @@ package android.graphics.drawable.shapes {
package android.graphics.fonts {
- public final class FontRequest implements android.os.Parcelable {
- ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String);
- ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
- method public int describeContents();
- method public java.util.List<java.util.List<byte[]>> getCertificates();
- method public java.lang.String getProviderAuthority();
- method public java.lang.String getProviderPackage();
- method public java.lang.String getQuery();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.graphics.fonts.FontRequest> CREATOR;
- }
-
public final class FontVariationAxis {
ctor public FontVariationAxis(java.lang.String, float) throws android.graphics.fonts.FontVariationAxis.InvalidFormatException;
method public static android.graphics.fonts.FontVariationAxis[] fromFontVariationSettings(java.lang.String) throws android.graphics.fonts.FontVariationAxis.InvalidFormatException;
@@ -25494,7 +25489,7 @@ package android.media {
public static final class VolumeShaper.Configuration implements android.os.Parcelable {
method public int describeContents();
- method public double getDurationMillis();
+ method public long getDuration();
method public int getInterpolatorType();
method public static int getMaximumCurvePoints();
method public float[] getTimes();
@@ -25520,7 +25515,7 @@ package android.media {
method public android.media.VolumeShaper.Configuration.Builder scaleToEndVolume(float);
method public android.media.VolumeShaper.Configuration.Builder scaleToStartVolume(float);
method public android.media.VolumeShaper.Configuration.Builder setCurve(float[], float[]);
- method public android.media.VolumeShaper.Configuration.Builder setDurationMillis(double);
+ method public android.media.VolumeShaper.Configuration.Builder setDuration(long);
method public android.media.VolumeShaper.Configuration.Builder setInterpolatorType(int);
}
@@ -26785,7 +26780,6 @@ package android.media.tv {
}
public static final class TvContract.WatchNextPrograms implements android.media.tv.TvContract.BaseTvColumns {
- ctor public TvContract.WatchNextPrograms();
field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
@@ -27693,68 +27687,6 @@ package android.net {
field public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
}
- public final class IpSecAlgorithm implements android.os.Parcelable {
- ctor public IpSecAlgorithm(java.lang.String, byte[]);
- ctor public IpSecAlgorithm(java.lang.String, byte[], int);
- method public int describeContents();
- method public byte[] getKey();
- method public java.lang.String getName();
- method public int getTruncationLengthBits();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final java.lang.String AUTH_HMAC_MD5 = "hmac(md5)";
- field public static final java.lang.String AUTH_HMAC_SHA1 = "hmac(sha1)";
- field public static final java.lang.String AUTH_HMAC_SHA256 = "hmac(sha256)";
- field public static final java.lang.String AUTH_HMAC_SHA384 = "hmac(sha384)";
- field public static final java.lang.String AUTH_HMAC_SHA512 = "hmac(sha512)";
- field public static final android.os.Parcelable.Creator<android.net.IpSecAlgorithm> CREATOR;
- field public static final java.lang.String CRYPT_AES_CBC = "cbc(aes)";
- }
-
- public final class IpSecManager {
- method public void applyTransportModeTransform(java.io.FileDescriptor, android.net.IpSecTransform) throws java.io.IOException;
- method public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket(int) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
- method public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket() throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
- method public void removeTransportModeTransform(java.io.FileDescriptor, android.net.IpSecTransform) throws java.io.IOException;
- method public android.net.IpSecManager.SecurityParameterIndex reserveSecurityParameterIndex(int, java.net.InetAddress) throws android.net.IpSecManager.ResourceUnavailableException;
- method public android.net.IpSecManager.SecurityParameterIndex reserveSecurityParameterIndex(int, java.net.InetAddress, int) throws android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
- field public static final int INVALID_SECURITY_PARAMETER_INDEX = 0; // 0x0
- }
-
- public static final class IpSecManager.ResourceUnavailableException extends android.util.AndroidException {
- }
-
- public static final class IpSecManager.SecurityParameterIndex implements java.lang.AutoCloseable {
- method public void close();
- method public int getSpi();
- }
-
- public static final class IpSecManager.SpiUnavailableException extends android.util.AndroidException {
- method public int getSpi();
- }
-
- public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
- method public void close() throws java.io.IOException;
- method public int getPort();
- method public java.io.FileDescriptor getSocket();
- }
-
- public final class IpSecTransform implements java.lang.AutoCloseable {
- method public void close();
- field public static final int DIRECTION_IN = 0; // 0x0
- field public static final int DIRECTION_OUT = 1; // 0x1
- }
-
- public static class IpSecTransform.Builder {
- ctor public IpSecTransform.Builder(android.content.Context);
- method public android.net.IpSecTransform buildTransportModeTransform(java.net.InetAddress) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
- method public android.net.IpSecTransform.Builder setAuthentication(int, android.net.IpSecAlgorithm);
- method public android.net.IpSecTransform.Builder setEncryption(int, android.net.IpSecAlgorithm);
- method public android.net.IpSecTransform.Builder setIpv4Encapsulation(android.net.IpSecManager.UdpEncapsulationSocket, int);
- method public android.net.IpSecTransform.Builder setNattKeepalive(int);
- method public android.net.IpSecTransform.Builder setSpi(int, android.net.IpSecManager.SecurityParameterIndex);
- method public android.net.IpSecTransform.Builder setUnderlyingNetwork(android.net.Network);
- }
-
public class LinkAddress implements android.os.Parcelable {
method public int describeContents();
method public java.net.InetAddress getAddress();
@@ -27968,13 +27900,13 @@ package android.net {
ctor public deprecated NetworkRecommendationProvider(android.os.Handler);
ctor public NetworkRecommendationProvider(android.content.Context, java.util.concurrent.Executor);
method public final android.os.IBinder getBinder();
- method public abstract void onRequestRecommendation(android.net.RecommendationRequest, android.net.NetworkRecommendationProvider.ResultCallback);
+ method public deprecated void onRequestRecommendation(android.net.RecommendationRequest, android.net.NetworkRecommendationProvider.ResultCallback);
method public abstract void onRequestScores(android.net.NetworkKey[]);
- field public static final java.lang.String EXTRA_RECOMMENDATION_RESULT = "android.net.extra.RECOMMENDATION_RESULT";
- field public static final java.lang.String EXTRA_SEQUENCE = "android.net.extra.SEQUENCE";
+ field public static final deprecated java.lang.String EXTRA_RECOMMENDATION_RESULT = "android.net.extra.RECOMMENDATION_RESULT";
+ field public static final deprecated java.lang.String EXTRA_SEQUENCE = "android.net.extra.SEQUENCE";
}
- public static class NetworkRecommendationProvider.ResultCallback {
+ public static deprecated class NetworkRecommendationProvider.ResultCallback {
method public void onResult(android.net.RecommendationResult);
}
@@ -28041,7 +27973,7 @@ package android.net {
field public static final android.os.Parcelable.Creator<android.net.ProxyInfo> CREATOR;
}
- public final class RecommendationRequest implements android.os.Parcelable {
+ public final deprecated class RecommendationRequest implements android.os.Parcelable {
ctor protected RecommendationRequest(android.os.Parcel);
method public int describeContents();
method public android.net.wifi.WifiConfiguration[] getConnectableConfigs();
@@ -28056,7 +27988,7 @@ package android.net {
field public static final android.os.Parcelable.Creator<android.net.RecommendationRequest> CREATOR;
}
- public static final class RecommendationRequest.Builder {
+ public static final deprecated class RecommendationRequest.Builder {
ctor public RecommendationRequest.Builder();
method public android.net.RecommendationRequest build();
method public android.net.RecommendationRequest.Builder setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
@@ -28066,7 +27998,7 @@ package android.net {
method public android.net.RecommendationRequest.Builder setScanResults(android.net.wifi.ScanResult[]);
}
- public final class RecommendationResult implements android.os.Parcelable {
+ public final deprecated class RecommendationResult implements android.os.Parcelable {
method public static android.net.RecommendationResult createConnectRecommendation(android.net.wifi.WifiConfiguration);
method public static android.net.RecommendationResult createDoNotConnectRecommendation();
method public int describeContents();
@@ -29484,11 +29416,11 @@ package android.net.wifi.aware {
field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
}
- public class DiscoverySession {
+ public class DiscoverySession implements java.lang.AutoCloseable {
+ method public void close();
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(android.net.wifi.aware.PeerHandle);
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(android.net.wifi.aware.PeerHandle, java.lang.String);
method public android.net.NetworkSpecifier createNetworkSpecifierPmk(android.net.wifi.aware.PeerHandle, byte[]);
- method public void destroy();
method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
}
@@ -29569,11 +29501,11 @@ package android.net.wifi.aware {
field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
}
- public class WifiAwareSession {
+ public class WifiAwareSession implements java.lang.AutoCloseable {
+ method public void close();
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(int, byte[]);
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(int, byte[], java.lang.String);
method public android.net.NetworkSpecifier createNetworkSpecifierPmk(int, byte[], byte[]);
- method public void destroy();
method public void publish(android.net.wifi.aware.PublishConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
method public void subscribe(android.net.wifi.aware.SubscribeConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
}
@@ -37483,11 +37415,20 @@ package android.provider {
method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
}
+ public final class FontRequest {
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String);
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
+ method public java.util.List<java.util.List<byte[]>> getCertificates();
+ method public java.lang.String getProviderAuthority();
+ method public java.lang.String getProviderPackage();
+ method public java.lang.String getQuery();
+ }
+
public class FontsContract {
method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.provider.FontsContract.FontInfo[], int, boolean, java.lang.String);
method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.provider.FontsContract.FontInfo[]);
- method public static android.provider.FontsContract.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.graphics.fonts.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static void requestFont(android.content.Context, android.graphics.fonts.FontRequest, android.provider.FontsContract.FontRequestCallback, android.os.Handler);
+ method public static android.provider.FontsContract.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFonts(android.content.Context, android.provider.FontRequest, android.os.Handler, android.os.CancellationSignal, android.provider.FontsContract.FontRequestCallback);
}
public static final class FontsContract.Columns implements android.provider.BaseColumns {
@@ -38035,6 +37976,7 @@ package android.provider {
field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
field public static final java.lang.String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+ field public static final java.lang.String ACTION_REQUEST_SET_AUTOFILL_SERVICE = "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
field public static final java.lang.String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
field public static final java.lang.String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS";
field public static final java.lang.String ACTION_SETTINGS = "android.settings.SETTINGS";
@@ -38095,7 +38037,6 @@ package android.provider {
field public static final java.lang.String BOOT_COUNT = "boot_count";
field public static final java.lang.String CONTACT_METADATA_SYNC_ENABLED = "contact_metadata_sync_enabled";
field public static final android.net.Uri CONTENT_URI;
- field public static final java.lang.String CURATE_SAVED_OPEN_NETWORKS = "curate_saved_open_networks";
field public static final java.lang.String DATA_ROAMING = "data_roaming";
field public static final java.lang.String DEBUG_APP = "debug_app";
field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
@@ -40149,15 +40090,12 @@ package android.service.autofill {
public abstract class AutofillService extends android.app.Service {
ctor public AutofillService();
- method public final deprecated void disableSelf();
method public final android.service.autofill.FillEventHistory getFillEventHistory();
method public final android.os.IBinder onBind(android.content.Intent);
method public void onConnected();
method public void onDisconnected();
- method public void onFillRequest(android.service.autofill.FillRequest, android.os.CancellationSignal, android.service.autofill.FillCallback);
- method public abstract deprecated void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, int, android.os.CancellationSignal, android.service.autofill.FillCallback);
- method public void onSaveRequest(android.service.autofill.SaveRequest, android.service.autofill.SaveCallback);
- method public abstract deprecated void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.service.autofill.SaveCallback);
+ method public abstract void onFillRequest(android.service.autofill.FillRequest, android.os.CancellationSignal, android.service.autofill.FillCallback);
+ method public abstract void onSaveRequest(android.service.autofill.SaveRequest, android.service.autofill.SaveCallback);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutofillService";
field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
}
@@ -40211,9 +40149,9 @@ package android.service.autofill {
public final class FillRequest implements android.os.Parcelable {
method public int describeContents();
method public android.os.Bundle getClientState();
+ method public java.util.ArrayList<android.service.autofill.FillContext> getFillContexts();
method public int getFlags();
method public int getId();
- method public android.app.assist.AssistStructure getStructure();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
@@ -40231,7 +40169,6 @@ package android.service.autofill {
method public android.service.autofill.FillResponse build();
method public android.service.autofill.FillResponse.Builder setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.widget.RemoteViews);
method public android.service.autofill.FillResponse.Builder setClientState(android.os.Bundle);
- method public deprecated android.service.autofill.FillResponse.Builder setExtras(android.os.Bundle);
method public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...);
method public android.service.autofill.FillResponse.Builder setSaveInfo(android.service.autofill.SaveInfo);
}
@@ -40246,6 +40183,8 @@ package android.service.autofill {
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.SaveInfo> CREATOR;
field public static final int FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE = 1; // 0x1
+ field public static final int NEGATIVE_BUTTON_STYLE_CANCEL = 0; // 0x0
+ field public static final int NEGATIVE_BUTTON_STYLE_REJECT = 1; // 0x1
field public static final int SAVE_DATA_TYPE_ADDRESS = 2; // 0x2
field public static final int SAVE_DATA_TYPE_CREDIT_CARD = 4; // 0x4
field public static final int SAVE_DATA_TYPE_EMAIL_ADDRESS = 16; // 0x10
@@ -40259,7 +40198,7 @@ package android.service.autofill {
method public android.service.autofill.SaveInfo build();
method public android.service.autofill.SaveInfo.Builder setDescription(java.lang.CharSequence);
method public android.service.autofill.SaveInfo.Builder setFlags(int);
- method public android.service.autofill.SaveInfo.Builder setNegativeAction(java.lang.CharSequence, android.content.IntentSender);
+ method public android.service.autofill.SaveInfo.Builder setNegativeAction(int, android.content.IntentSender);
method public android.service.autofill.SaveInfo.Builder setOptionalIds(android.view.autofill.AutofillId[]);
}
@@ -42378,7 +42317,6 @@ package android.telecom {
}
public static final class Connection.RttModifyStatus {
- ctor public Connection.RttModifyStatus();
field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
@@ -43732,6 +43670,7 @@ package android.telephony {
method public java.lang.String getSubscriberId();
method public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();
method public java.lang.String getVisualVoicemailPackageName();
+ method public android.os.Bundle getVisualVoicemailSettings();
method public java.lang.String getVoiceMailAlphaTag();
method public java.lang.String getVoiceMailNumber();
method public int getVoiceNetworkType();
@@ -43767,6 +43706,7 @@ package android.telephony {
method public void sendDialerSpecialCode(java.lang.String);
method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler);
+ method public void sendVisualVoicemailSms(java.lang.String, int, java.lang.String, android.app.PendingIntent);
method public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
method public void setDataEnabled(boolean);
method public void setDataEnabled(int, boolean);
@@ -43776,6 +43716,7 @@ package android.telephony {
method public boolean setRadio(boolean);
method public boolean setRadioPower(boolean);
method public deprecated void setVisualVoicemailEnabled(android.telecom.PhoneAccountHandle, boolean);
+ method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings);
method public boolean setVoiceMailNumber(java.lang.String, java.lang.String);
method public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri);
method public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
@@ -43823,7 +43764,9 @@ package android.telephony {
field public static final java.lang.String EXTRA_STATE_IDLE;
field public static final java.lang.String EXTRA_STATE_OFFHOOK;
field public static final java.lang.String EXTRA_STATE_RINGING;
+ field public static final java.lang.String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
field public static final java.lang.String EXTRA_VOICEMAIL_NUMBER = "android.telephony.extra.VOICEMAIL_NUMBER";
+ field public static final java.lang.String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
field public static final java.lang.String METADATA_HIDE_VOICEMAIL_SETTINGS_MENU = "android.telephony.HIDE_VOICEMAIL_SETTINGS_MENU";
field public static final int NETWORK_TYPE_1xRTT = 7; // 0x7
field public static final int NETWORK_TYPE_CDMA = 4; // 0x4
@@ -49004,6 +48947,7 @@ package android.view {
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
method public java.lang.String[] getAutofillHints();
+ method public final android.view.autofill.AutofillId getAutofillId();
method public int getAutofillType();
method public android.view.autofill.AutofillValue getAutofillValue();
method public android.graphics.drawable.Drawable getBackground();
@@ -50126,6 +50070,7 @@ package android.view {
method public abstract int addChildCount(int);
method public abstract void asyncCommit();
method public abstract android.view.ViewStructure asyncNewChild(int);
+ method public abstract android.view.autofill.AutofillId getAutofillId();
method public abstract int getChildCount();
method public abstract android.os.Bundle getExtras();
method public abstract java.lang.CharSequence getHint();
@@ -50139,7 +50084,8 @@ package android.view {
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
method public abstract void setAutofillHints(java.lang.String[]);
- method public abstract void setAutofillId(android.view.ViewStructure, int);
+ method public abstract void setAutofillId(android.view.autofill.AutofillId);
+ method public abstract void setAutofillId(android.view.autofill.AutofillId, int);
method public abstract void setAutofillOptions(java.lang.CharSequence[]);
method public abstract void setAutofillType(int);
method public abstract void setAutofillValue(android.view.autofill.AutofillValue);
@@ -50169,7 +50115,6 @@ package android.view {
method public abstract void setTextLines(int[], int[]);
method public abstract void setTextStyle(float, int, int, int);
method public abstract void setTransformation(android.graphics.Matrix);
- method public abstract deprecated void setUrl(java.lang.String);
method public abstract void setVisibility(int);
method public abstract void setWebDomain(java.lang.String);
}
@@ -50737,7 +50682,9 @@ package android.view.accessibility {
public final class AccessibilityManager {
method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+ method public void addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, android.os.Handler);
method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+ method public void addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, android.os.Handler);
method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
@@ -51418,6 +51365,8 @@ package android.view.autofill {
method public void cancel();
method public void commit();
method public void disableOwnedAutofillServices();
+ method public boolean hasEnabledAutofillServices();
+ method public boolean isAutofillSupported();
method public boolean isEnabled();
method public void notifyValueChanged(android.view.View);
method public void notifyValueChanged(android.view.View, int, android.view.autofill.AutofillValue);
@@ -51432,7 +51381,6 @@ package android.view.autofill {
field public static final java.lang.String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
field public static final java.lang.String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
field public static final java.lang.String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
- field public static final deprecated int FLAG_MANUAL_REQUEST = 1; // 0x1
}
public static abstract class AutofillManager.AutofillCallback {
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 4862bb76f0c2..039cd74e982d 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -1,7 +1,6 @@
package android.app {
public class Notification implements android.os.Parcelable {
- method public deprecated int getBadgeIcon();
method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent);
}
@@ -345,10 +344,6 @@ package android.provider {
field public static final deprecated java.lang.String TIMESTAMP = "timestamp";
}
- public static final class FontsContract.Columns implements android.provider.BaseColumns {
- field public static final java.lang.String STYLE = "font_style";
- }
-
public static final class Settings.Global extends android.provider.Settings.NameValueTable {
field public static final deprecated java.lang.String CONTACT_METADATA_SYNC = "contact_metadata_sync";
}
diff --git a/api/test-current.txt b/api/test-current.txt
index e1ad7ac3a1f2..967a232996f5 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -362,7 +362,7 @@ package android {
field public static final int canControlMagnification = 16844039; // 0x1010507
field public static final int canPerformGestures = 16844045; // 0x101050d
field public static final int canRecord = 16844060; // 0x101051c
- field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
+ field public static final deprecated int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9
field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7
field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
@@ -2837,7 +2837,7 @@ package android.accessibilityservice {
field public static final int CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES = 64; // 0x40
field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10
field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20
- field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final deprecated int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8
field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
@@ -2855,7 +2855,7 @@ package android.accessibilityservice {
field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
field public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 256; // 0x100
- field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final deprecated int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
@@ -3586,8 +3586,9 @@ package android.app {
method public boolean dispatchTouchEvent(android.view.MotionEvent);
method public boolean dispatchTrackballEvent(android.view.MotionEvent);
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
- method public void enterPictureInPictureMode();
- method public boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
+ method public deprecated void enterPictureInPictureMode();
+ method public deprecated boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
+ method public boolean enterPictureInPictureMode(android.app.PictureInPictureParams);
method public <T extends android.view.View> T findViewById(int);
method public void finish();
method public void finishActivity(int);
@@ -3611,6 +3612,7 @@ package android.app {
method public android.view.LayoutInflater getLayoutInflater();
method public android.app.LoaderManager getLoaderManager();
method public java.lang.String getLocalClassName();
+ method public int getMaxNumPictureInPictureActions();
method public final android.media.session.MediaController getMediaController();
method public android.view.MenuInflater getMenuInflater();
method public final android.app.Activity getParent();
@@ -3637,7 +3639,6 @@ package android.app {
method public boolean isInMultiWindowMode();
method public boolean isInPictureInPictureMode();
method public boolean isLocalVoiceInteractionSupported();
- method public boolean isOverlayWithDecorCaptionEnabled();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3762,8 +3763,8 @@ package android.app {
method public void setImmersive(boolean);
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
- method public void setOverlayWithDecorCaptionEnabled(boolean);
method public void setPictureInPictureArgs(android.app.PictureInPictureArgs);
+ method public void setPictureInPictureParams(android.app.PictureInPictureParams);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -3843,7 +3844,7 @@ package android.app {
method public int getLauncherLargeIconDensity();
method public int getLauncherLargeIconSize();
method public int getLockTaskModeState();
- method public static int getMaxNumPictureInPictureActions();
+ method public static deprecated int getMaxNumPictureInPictureActions();
method public int getMemoryClass();
method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo);
method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo);
@@ -5138,6 +5139,7 @@ package android.app {
method public int getBadgeIconType();
method public java.lang.String getChannel();
method public java.lang.String getGroup();
+ method public int getGroupAlertBehavior();
method public android.graphics.drawable.Icon getLargeIcon();
method public java.lang.CharSequence getSettingsText();
method public java.lang.String getShortcutId();
@@ -5213,6 +5215,9 @@ package android.app {
field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
field public static final deprecated int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final deprecated int PRIORITY_DEFAULT = 0; // 0x0
field public static final deprecated int PRIORITY_HIGH = 1; // 0x1
@@ -5359,6 +5364,7 @@ package android.app {
method public android.app.Notification.Builder setExtras(android.os.Bundle);
method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
method public android.app.Notification.Builder setGroup(java.lang.String);
+ method public android.app.Notification.Builder setGroupAlertBehavior(int);
method public android.app.Notification.Builder setGroupSummary(boolean);
method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
@@ -5706,16 +5712,29 @@ package android.app {
method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle);
}
- public final class PictureInPictureArgs implements android.os.Parcelable {
- ctor public PictureInPictureArgs();
- ctor public PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
- method public android.app.PictureInPictureArgs clone();
+ public final deprecated class PictureInPictureArgs extends android.app.PictureInPictureParams {
+ ctor public deprecated PictureInPictureArgs();
+ ctor public deprecated PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
+ method public deprecated void setActions(java.util.List<android.app.RemoteAction>);
+ method public deprecated void setAspectRatio(float);
+ method public deprecated void setSourceRectHint(android.graphics.Rect);
+ }
+
+ public class PictureInPictureParams implements android.os.Parcelable {
method public int describeContents();
- method public void setActions(java.util.List<android.app.RemoteAction>);
- method public void setAspectRatio(float);
- method public void setSourceRectHint(android.graphics.Rect);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
+ field public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
+ field protected android.util.Rational mAspectRatio;
+ field protected android.graphics.Rect mSourceRectHint;
+ field protected java.util.List<android.app.RemoteAction> mUserActions;
+ }
+
+ public static class PictureInPictureParams.Builder {
+ ctor public PictureInPictureParams.Builder();
+ method public android.app.PictureInPictureParams build();
+ method public android.app.PictureInPictureParams.Builder setActions(java.util.List<android.app.RemoteAction>);
+ method public android.app.PictureInPictureParams.Builder setAspectRatio(android.util.Rational);
+ method public android.app.PictureInPictureParams.Builder setSourceRectHint(android.graphics.Rect);
}
public class Presentation extends android.app.Dialog {
@@ -7628,6 +7647,7 @@ package android.bluetooth {
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback);
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int);
method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int);
+ method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int, android.os.Handler);
method public boolean createBond();
method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
@@ -8967,7 +8987,7 @@ package android.content {
field public static final java.lang.String CAPTIONING_SERVICE = "captioning";
field public static final java.lang.String CARRIER_CONFIG_SERVICE = "carrier_config";
field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard";
- field public static final java.lang.String COMPANION_DEVICE_SERVICE = "companion_device";
+ field public static final java.lang.String COMPANION_DEVICE_SERVICE = "companiondevice";
field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity";
field public static final java.lang.String CONSUMER_IR_SERVICE = "consumer_ir";
field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2
@@ -8981,7 +9001,6 @@ package android.content {
field public static final java.lang.String HARDWARE_PROPERTIES_SERVICE = "hardware_properties";
field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method";
field public static final java.lang.String INPUT_SERVICE = "input";
- field public static final java.lang.String IPSEC_SERVICE = "ipsec";
field public static final java.lang.String JOB_SCHEDULER_SERVICE = "jobscheduler";
field public static final java.lang.String KEYGUARD_SERVICE = "keyguard";
field public static final java.lang.String LAUNCHER_APPS_SERVICE = "launcherapps";
@@ -13821,7 +13840,6 @@ package android.graphics {
}
public class Typeface {
- method public static deprecated void create(android.graphics.fonts.FontRequest, android.graphics.Typeface.FontRequestCallback);
method public static android.graphics.Typeface create(java.lang.String, int);
method public static android.graphics.Typeface create(android.graphics.Typeface, int);
method public static android.graphics.Typeface createFromAsset(android.content.res.AssetManager, java.lang.String);
@@ -13856,17 +13874,6 @@ package android.graphics {
method public android.graphics.Typeface.Builder setWeight(int);
}
- public static abstract deprecated interface Typeface.FontRequestCallback {
- method public abstract void onTypefaceRequestFailed(int);
- method public abstract void onTypefaceRetrieved(android.graphics.Typeface);
- field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
- field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
- field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
- field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
- field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
- }
-
public class Xfermode {
ctor public Xfermode();
}
@@ -14447,18 +14454,6 @@ package android.graphics.drawable.shapes {
package android.graphics.fonts {
- public final class FontRequest implements android.os.Parcelable {
- ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String);
- ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
- method public int describeContents();
- method public java.util.List<java.util.List<byte[]>> getCertificates();
- method public java.lang.String getProviderAuthority();
- method public java.lang.String getProviderPackage();
- method public java.lang.String getQuery();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.graphics.fonts.FontRequest> CREATOR;
- }
-
public final class FontVariationAxis {
ctor public FontVariationAxis(java.lang.String, float) throws android.graphics.fonts.FontVariationAxis.InvalidFormatException;
method public static android.graphics.fonts.FontVariationAxis[] fromFontVariationSettings(java.lang.String) throws android.graphics.fonts.FontVariationAxis.InvalidFormatException;
@@ -23754,7 +23749,7 @@ package android.media {
public static final class VolumeShaper.Configuration implements android.os.Parcelable {
method public int describeContents();
- method public double getDurationMillis();
+ method public long getDuration();
method public int getInterpolatorType();
method public static int getMaximumCurvePoints();
method public float[] getTimes();
@@ -23780,7 +23775,7 @@ package android.media {
method public android.media.VolumeShaper.Configuration.Builder scaleToEndVolume(float);
method public android.media.VolumeShaper.Configuration.Builder scaleToStartVolume(float);
method public android.media.VolumeShaper.Configuration.Builder setCurve(float[], float[]);
- method public android.media.VolumeShaper.Configuration.Builder setDurationMillis(double);
+ method public android.media.VolumeShaper.Configuration.Builder setDuration(long);
method public android.media.VolumeShaper.Configuration.Builder setInterpolatorType(int);
}
@@ -24895,7 +24890,6 @@ package android.media.tv {
}
public static final class TvContract.WatchNextPrograms implements android.media.tv.TvContract.BaseTvColumns {
- ctor public TvContract.WatchNextPrograms();
field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
@@ -25611,66 +25605,6 @@ package android.net {
field public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
}
- public final class IpSecAlgorithm implements android.os.Parcelable {
- ctor public IpSecAlgorithm(java.lang.String, byte[]);
- ctor public IpSecAlgorithm(java.lang.String, byte[], int);
- method public int describeContents();
- method public byte[] getKey();
- method public java.lang.String getName();
- method public int getTruncationLengthBits();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final java.lang.String AUTH_HMAC_MD5 = "hmac(md5)";
- field public static final java.lang.String AUTH_HMAC_SHA1 = "hmac(sha1)";
- field public static final java.lang.String AUTH_HMAC_SHA256 = "hmac(sha256)";
- field public static final java.lang.String AUTH_HMAC_SHA384 = "hmac(sha384)";
- field public static final java.lang.String AUTH_HMAC_SHA512 = "hmac(sha512)";
- field public static final android.os.Parcelable.Creator<android.net.IpSecAlgorithm> CREATOR;
- field public static final java.lang.String CRYPT_AES_CBC = "cbc(aes)";
- }
-
- public final class IpSecManager {
- method public void applyTransportModeTransform(java.io.FileDescriptor, android.net.IpSecTransform) throws java.io.IOException;
- method public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket(int) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
- method public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket() throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
- method public void removeTransportModeTransform(java.io.FileDescriptor, android.net.IpSecTransform) throws java.io.IOException;
- method public android.net.IpSecManager.SecurityParameterIndex reserveSecurityParameterIndex(int, java.net.InetAddress) throws android.net.IpSecManager.ResourceUnavailableException;
- method public android.net.IpSecManager.SecurityParameterIndex reserveSecurityParameterIndex(int, java.net.InetAddress, int) throws android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
- field public static final int INVALID_SECURITY_PARAMETER_INDEX = 0; // 0x0
- }
-
- public static final class IpSecManager.ResourceUnavailableException extends android.util.AndroidException {
- }
-
- public static final class IpSecManager.SecurityParameterIndex implements java.lang.AutoCloseable {
- method public void close();
- method public int getSpi();
- }
-
- public static final class IpSecManager.SpiUnavailableException extends android.util.AndroidException {
- method public int getSpi();
- }
-
- public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
- method public void close() throws java.io.IOException;
- method public int getPort();
- method public java.io.FileDescriptor getSocket();
- }
-
- public final class IpSecTransform implements java.lang.AutoCloseable {
- method public void close();
- field public static final int DIRECTION_IN = 0; // 0x0
- field public static final int DIRECTION_OUT = 1; // 0x1
- }
-
- public static class IpSecTransform.Builder {
- ctor public IpSecTransform.Builder(android.content.Context);
- method public android.net.IpSecTransform buildTransportModeTransform(java.net.InetAddress) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
- method public android.net.IpSecTransform.Builder setAuthentication(int, android.net.IpSecAlgorithm);
- method public android.net.IpSecTransform.Builder setEncryption(int, android.net.IpSecAlgorithm);
- method public android.net.IpSecTransform.Builder setIpv4Encapsulation(android.net.IpSecManager.UdpEncapsulationSocket, int);
- method public android.net.IpSecTransform.Builder setSpi(int, android.net.IpSecManager.SecurityParameterIndex);
- }
-
public class LinkAddress implements android.os.Parcelable {
method public int describeContents();
method public java.net.InetAddress getAddress();
@@ -26848,10 +26782,10 @@ package android.net.wifi.aware {
field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
}
- public class DiscoverySession {
+ public class DiscoverySession implements java.lang.AutoCloseable {
+ method public void close();
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(android.net.wifi.aware.PeerHandle);
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(android.net.wifi.aware.PeerHandle, java.lang.String);
- method public void destroy();
method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
}
@@ -26932,10 +26866,10 @@ package android.net.wifi.aware {
field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
}
- public class WifiAwareSession {
+ public class WifiAwareSession implements java.lang.AutoCloseable {
+ method public void close();
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(int, byte[]);
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(int, byte[], java.lang.String);
- method public void destroy();
method public void publish(android.net.wifi.aware.PublishConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
method public void subscribe(android.net.wifi.aware.SubscribeConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
}
@@ -34629,11 +34563,20 @@ package android.provider {
method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
}
+ public final class FontRequest {
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String);
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
+ method public java.util.List<java.util.List<byte[]>> getCertificates();
+ method public java.lang.String getProviderAuthority();
+ method public java.lang.String getProviderPackage();
+ method public java.lang.String getQuery();
+ }
+
public class FontsContract {
method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.provider.FontsContract.FontInfo[], int, boolean, java.lang.String);
method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.provider.FontsContract.FontInfo[]);
- method public static android.provider.FontsContract.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.graphics.fonts.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static void requestFont(android.content.Context, android.graphics.fonts.FontRequest, android.provider.FontsContract.FontRequestCallback, android.os.Handler);
+ method public static android.provider.FontsContract.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFonts(android.content.Context, android.provider.FontRequest, android.os.Handler, android.os.CancellationSignal, android.provider.FontsContract.FontRequestCallback);
}
public static final class FontsContract.Columns implements android.provider.BaseColumns {
@@ -35079,6 +35022,7 @@ package android.provider {
field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
field public static final java.lang.String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+ field public static final java.lang.String ACTION_REQUEST_SET_AUTOFILL_SERVICE = "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
field public static final java.lang.String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
field public static final java.lang.String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS";
field public static final java.lang.String ACTION_SETTINGS = "android.settings.SETTINGS";
@@ -37187,15 +37131,12 @@ package android.service.autofill {
public abstract class AutofillService extends android.app.Service {
ctor public AutofillService();
- method public final deprecated void disableSelf();
method public final android.service.autofill.FillEventHistory getFillEventHistory();
method public final android.os.IBinder onBind(android.content.Intent);
method public void onConnected();
method public void onDisconnected();
- method public void onFillRequest(android.service.autofill.FillRequest, android.os.CancellationSignal, android.service.autofill.FillCallback);
- method public abstract deprecated void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, int, android.os.CancellationSignal, android.service.autofill.FillCallback);
- method public void onSaveRequest(android.service.autofill.SaveRequest, android.service.autofill.SaveCallback);
- method public abstract deprecated void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.service.autofill.SaveCallback);
+ method public abstract void onFillRequest(android.service.autofill.FillRequest, android.os.CancellationSignal, android.service.autofill.FillCallback);
+ method public abstract void onSaveRequest(android.service.autofill.SaveRequest, android.service.autofill.SaveCallback);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutofillService";
field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
}
@@ -37249,9 +37190,9 @@ package android.service.autofill {
public final class FillRequest implements android.os.Parcelable {
method public int describeContents();
method public android.os.Bundle getClientState();
+ method public java.util.ArrayList<android.service.autofill.FillContext> getFillContexts();
method public int getFlags();
method public int getId();
- method public android.app.assist.AssistStructure getStructure();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
@@ -37269,7 +37210,6 @@ package android.service.autofill {
method public android.service.autofill.FillResponse build();
method public android.service.autofill.FillResponse.Builder setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.widget.RemoteViews);
method public android.service.autofill.FillResponse.Builder setClientState(android.os.Bundle);
- method public deprecated android.service.autofill.FillResponse.Builder setExtras(android.os.Bundle);
method public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...);
method public android.service.autofill.FillResponse.Builder setSaveInfo(android.service.autofill.SaveInfo);
}
@@ -37284,6 +37224,8 @@ package android.service.autofill {
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.SaveInfo> CREATOR;
field public static final int FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE = 1; // 0x1
+ field public static final int NEGATIVE_BUTTON_STYLE_CANCEL = 0; // 0x0
+ field public static final int NEGATIVE_BUTTON_STYLE_REJECT = 1; // 0x1
field public static final int SAVE_DATA_TYPE_ADDRESS = 2; // 0x2
field public static final int SAVE_DATA_TYPE_CREDIT_CARD = 4; // 0x4
field public static final int SAVE_DATA_TYPE_EMAIL_ADDRESS = 16; // 0x10
@@ -37297,7 +37239,7 @@ package android.service.autofill {
method public android.service.autofill.SaveInfo build();
method public android.service.autofill.SaveInfo.Builder setDescription(java.lang.CharSequence);
method public android.service.autofill.SaveInfo.Builder setFlags(int);
- method public android.service.autofill.SaveInfo.Builder setNegativeAction(java.lang.CharSequence, android.content.IntentSender);
+ method public android.service.autofill.SaveInfo.Builder setNegativeAction(int, android.content.IntentSender);
method public android.service.autofill.SaveInfo.Builder setOptionalIds(android.view.autofill.AutofillId[]);
}
@@ -39282,7 +39224,6 @@ package android.telecom {
}
public static final class Connection.RttModifyStatus {
- ctor public Connection.RttModifyStatus();
field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
@@ -40432,10 +40373,12 @@ package android.telephony {
method public void sendDialerSpecialCode(java.lang.String);
method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler);
+ method public void sendVisualVoicemailSms(java.lang.String, int, java.lang.String, android.app.PendingIntent);
method public void setDataEnabled(boolean);
method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String);
method public boolean setOperatorBrandOverride(java.lang.String);
method public boolean setPreferredNetworkTypeToGlobal();
+ method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings);
method public boolean setVoiceMailNumber(java.lang.String, java.lang.String);
method public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri);
method public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
@@ -40526,8 +40469,6 @@ package android.telephony {
method public abstract void onSimRemoved(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle);
method public abstract void onSmsReceived(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telephony.VisualVoicemailSms);
method public abstract void onStopped(android.telephony.VisualVoicemailService.VisualVoicemailTask);
- method public static final void sendVisualVoicemailSms(android.content.Context, android.telecom.PhoneAccountHandle, java.lang.String, short, java.lang.String, android.app.PendingIntent);
- method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings);
field public static final java.lang.String SERVICE_INTERFACE = "android.telephony.VisualVoicemailService";
}
@@ -45791,6 +45732,7 @@ package android.view {
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
method public java.lang.String[] getAutofillHints();
+ method public final android.view.autofill.AutofillId getAutofillId();
method public int getAutofillType();
method public android.view.autofill.AutofillValue getAutofillValue();
method public android.graphics.drawable.Drawable getBackground();
@@ -46921,6 +46863,7 @@ package android.view {
method public abstract int addChildCount(int);
method public abstract void asyncCommit();
method public abstract android.view.ViewStructure asyncNewChild(int);
+ method public abstract android.view.autofill.AutofillId getAutofillId();
method public abstract int getChildCount();
method public abstract android.os.Bundle getExtras();
method public abstract java.lang.CharSequence getHint();
@@ -46934,7 +46877,8 @@ package android.view {
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
method public abstract void setAutofillHints(java.lang.String[]);
- method public abstract void setAutofillId(android.view.ViewStructure, int);
+ method public abstract void setAutofillId(android.view.autofill.AutofillId);
+ method public abstract void setAutofillId(android.view.autofill.AutofillId, int);
method public abstract void setAutofillOptions(java.lang.CharSequence[]);
method public abstract void setAutofillType(int);
method public abstract void setAutofillValue(android.view.autofill.AutofillValue);
@@ -46964,7 +46908,6 @@ package android.view {
method public abstract void setTextLines(int[], int[]);
method public abstract void setTextStyle(float, int, int, int);
method public abstract void setTransformation(android.graphics.Matrix);
- method public abstract deprecated void setUrl(java.lang.String);
method public abstract void setVisibility(int);
method public abstract void setWebDomain(java.lang.String);
}
@@ -47531,7 +47474,9 @@ package android.view.accessibility {
public final class AccessibilityManager {
method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+ method public void addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, android.os.Handler);
method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+ method public void addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, android.os.Handler);
method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
@@ -48214,6 +48159,8 @@ package android.view.autofill {
method public void cancel();
method public void commit();
method public void disableOwnedAutofillServices();
+ method public boolean hasEnabledAutofillServices();
+ method public boolean isAutofillSupported();
method public boolean isEnabled();
method public void notifyValueChanged(android.view.View);
method public void notifyValueChanged(android.view.View, int, android.view.autofill.AutofillValue);
@@ -48228,7 +48175,6 @@ package android.view.autofill {
field public static final java.lang.String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
field public static final java.lang.String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
field public static final java.lang.String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
- field public static final deprecated int FLAG_MANUAL_REQUEST = 1; // 0x1
}
public static abstract class AutofillManager.AutofillCallback {
diff --git a/api/test-removed.txt b/api/test-removed.txt
index dc9c54e8b1cd..c132385f1631 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -1,7 +1,6 @@
package android.app {
public class Notification implements android.os.Parcelable {
- method public deprecated int getBadgeIcon();
method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent);
}
@@ -351,10 +350,6 @@ package android.provider {
field public static final deprecated java.lang.String TIMESTAMP = "timestamp";
}
- public static final class FontsContract.Columns implements android.provider.BaseColumns {
- field public static final java.lang.String STYLE = "font_style";
- }
-
public static final class Settings.Global extends android.provider.Settings.NameValueTable {
field public static final deprecated java.lang.String CONTACT_METADATA_SYNC = "contact_metadata_sync";
}
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 5937dd951dc4..3cda489c5005 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -95,9 +95,7 @@ public class AccessibilityServiceInfo implements Parcelable {
public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 0x00000002;
/**
- * Capability: This accessibility service can request enhanced web accessibility
- * enhancements. For example, installing scripts to make app content more accessible.
- * @see android.R.styleable#AccessibilityService_canRequestEnhancedWebAccessibility
+ * @deprecated No longer used
*/
public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000004;
@@ -237,22 +235,7 @@ public class AccessibilityServiceInfo implements Parcelable {
public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 0x0000004;
/**
- * This flag requests from the system to enable web accessibility enhancing
- * extensions. Such extensions aim to provide improved accessibility support
- * for content presented in a {@link android.webkit.WebView}. An example of such
- * an extension is injecting JavaScript from a secure source. The system will enable
- * enhanced web accessibility if there is at least one accessibility service
- * that has this flag set. Hence, clearing this flag does not guarantee that the
- * device will not have enhanced web accessibility enabled since there may be
- * another enabled service that requested it.
- * <p>
- * Services that want to set this flag have to declare this capability
- * in their meta-data by setting the attribute {@link android.R.attr
- * #canRequestEnhancedWebAccessibility canRequestEnhancedWebAccessibility} to
- * true, otherwise this flag will be ignored. For how to declare the meta-data
- * of a service refer to {@value AccessibilityService#SERVICE_META_DATA}.
- * </p>
- * @see android.R.styleable#AccessibilityService_canRequestEnhancedWebAccessibility
+ * @deprecated No longer used
*/
public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000008;
@@ -526,10 +509,6 @@ public class AccessibilityServiceInfo implements Parcelable {
mCapabilities |= CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION;
}
if (asAttributes.getBoolean(com.android.internal.R.styleable
- .AccessibilityService_canRequestEnhancedWebAccessibility, false)) {
- mCapabilities |= CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY;
- }
- if (asAttributes.getBoolean(com.android.internal.R.styleable
.AccessibilityService_canRequestFilterKeyEvents, false)) {
mCapabilities |= CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS;
}
@@ -659,7 +638,6 @@ public class AccessibilityServiceInfo implements Parcelable {
*
* @see #CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT
* @see #CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION
- * @see #CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY
* @see #CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS
* @see #CAPABILITY_CAN_CONTROL_MAGNIFICATION
* @see #CAPABILITY_CAN_PERFORM_GESTURES
@@ -676,7 +654,6 @@ public class AccessibilityServiceInfo implements Parcelable {
*
* @see #CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT
* @see #CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION
- * @see #CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY
* @see #CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS
* @see #CAPABILITY_CAN_CONTROL_MAGNIFICATION
* @see #CAPABILITY_CAN_PERFORM_GESTURES
@@ -1074,10 +1051,6 @@ public class AccessibilityServiceInfo implements Parcelable {
new CapabilityInfo(CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION,
R.string.capability_title_canRequestTouchExploration,
R.string.capability_desc_canRequestTouchExploration));
- sAvailableCapabilityInfos.put(CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY,
- new CapabilityInfo(CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY,
- R.string.capability_title_canRequestEnhancedWebAccessibility,
- R.string.capability_desc_canRequestEnhancedWebAccessibility));
sAvailableCapabilityInfos.put(CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS,
new CapabilityInfo(CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS,
R.string.capability_title_canRequestFilterKeyEvents,
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index b320d5d83cc7..06b09c041f1f 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -345,7 +345,13 @@ public class AccountManager {
"android.accounts.LOGIN_ACCOUNTS_CHANGED";
/**
- * Action sent as a broadcast Intent by the AccountsService when any account is removed.
+ * Action sent as a broadcast Intent by the AccountsService when any account is removed
+ * or renamed. Only applications which were able to see the account will receive the intent.
+ * Intent extra will include the following fields:
+ * <ul>
+ * <li> {@link #KEY_ACCOUNT_NAME} - the name of the removed account
+ * <li> {@link #KEY_ACCOUNT_TYPE} - the type of the account
+ * </ul>
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
@BroadcastBehavior(includeBackground = true)
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 2843dc226416..e621c01748f9 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2039,70 +2039,112 @@ public class Activity extends ContextThemeWrapper
/**
* Puts the activity in picture-in-picture mode if possible in the current system state. Any
- * prior calls to {@link #setPictureInPictureArgs(PictureInPictureArgs)} will still apply when
- * entering picture-in-picture through this call.
+ * prior calls to {@link #setPictureInPictureParams(PictureInPictureParams)} will still apply
+ * when entering picture-in-picture through this call.
*
- * @see #enterPictureInPictureMode(PictureInPictureArgs)
+ * @see #enterPictureInPictureMode(PictureInPictureParams)
* @see android.R.attr#supportsPictureInPicture
*/
+ @Deprecated
public void enterPictureInPictureMode() {
- enterPictureInPictureMode(new PictureInPictureArgs());
+ enterPictureInPictureMode(new PictureInPictureParams.Builder().build());
}
/**
- * Puts the activity in picture-in-picture mode if possible in the current system state with
- * explicit given arguments. Only the set parameters in {@param args} will override prior calls
- * {@link #setPictureInPictureArgs(PictureInPictureArgs)}.
+ * TO BE REMOVED
+ */
+ @Deprecated
+ public boolean enterPictureInPictureMode(@NonNull PictureInPictureArgs args) {
+ try {
+ if (args == null) {
+ throw new IllegalArgumentException("Expected non-null picture-in-picture args");
+ }
+ updatePictureInPictureParamsForContentInsets(args);
+ return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, args);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Puts the activity in picture-in-picture mode if possible in the current system state. The
+ * set parameters in {@param params} will be combined with the parameters from prior calls to
+ * {@link #setPictureInPictureParams(PictureInPictureParams)}.
*
* The system may disallow entering picture-in-picture in various cases, including when the
- * activity is not visible.
+ * activity is not visible, if the screen is locked or if the user has an activity pinned.
*
* @see android.R.attr#supportsPictureInPicture
+ * @see PictureInPictureParams
*
- * @param args the explicit non-null arguments to use when entering picture-in-picture.
- * @return whether the system successfully entered picture-in-picture.
+ * @param params non-null parameters to be combined with previously set parameters when entering
+ * picture-in-picture.
+ *
+ * @return true if the system puts this activity into picture-in-picture mode or was already
+ * in picture-in-picture mode (@see {@link #isInPictureInPictureMode())
*/
- public boolean enterPictureInPictureMode(@NonNull PictureInPictureArgs args) {
+ public boolean enterPictureInPictureMode(@NonNull PictureInPictureParams params) {
try {
- if (args == null) {
- throw new IllegalArgumentException("Expected non-null picture-in-picture args");
+ if (params == null) {
+ throw new IllegalArgumentException("Expected non-null picture-in-picture params");
}
- updatePictureInPictureArgsForContentInsets(args);
- return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, args);
+ updatePictureInPictureParamsForContentInsets(params);
+ return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, params);
} catch (RemoteException e) {
return false;
}
}
/**
+ * TO BE REMOVED
+ */
+ public void setPictureInPictureArgs(@NonNull PictureInPictureArgs args) {
+ setPictureInPictureParams(args);
+ }
+
+ /**
* Updates the properties of the picture-in-picture activity, or sets it to be used later when
* {@link #enterPictureInPictureMode()} is called.
*
- * @param args the new properties of the picture-in-picture.
+ * @param params the new parameters for the picture-in-picture.
*/
- public void setPictureInPictureArgs(@NonNull PictureInPictureArgs args) {
+ public void setPictureInPictureParams(@NonNull PictureInPictureParams params) {
try {
- if (args == null) {
- throw new IllegalArgumentException("Expected non-null picture-in-picture args");
+ if (params == null) {
+ throw new IllegalArgumentException("Expected non-null picture-in-picture params");
}
- updatePictureInPictureArgsForContentInsets(args);
- ActivityManagerNative.getDefault().setPictureInPictureArgs(mToken, args);
+ updatePictureInPictureParamsForContentInsets(params);
+ ActivityManagerNative.getDefault().setPictureInPictureParams(mToken, params);
} catch (RemoteException e) {
}
}
/**
- * Updates the provided {@param args} with the last known content insets for this activity, to
+ * Return the number of actions that will be displayed in the picture-in-picture UI when the
+ * user interacts with the activity currently in picture-in-picture mode. This number may change
+ * if the global configuration changes (ie. if the device is plugged into an external display),
+ * but will always be larger than three.
+ */
+ public int getMaxNumPictureInPictureActions() {
+ try {
+ return ActivityManagerNative.getDefault().getMaxNumPictureInPictureActions(mToken);
+ } catch (RemoteException e) {
+ return 0;
+ }
+ }
+
+ /**
+ * Updates the provided {@param params} with the last known content insets for this activity, to
* be used with the source hint rect for the transition into PiP.
*/
- private void updatePictureInPictureArgsForContentInsets(PictureInPictureArgs args) {
- if (args != null && args.hasSourceBoundsHint() && getWindow() != null &&
+ private void updatePictureInPictureParamsForContentInsets(PictureInPictureParams params) {
+ if (params != null && params.hasSourceBoundsHint() && getWindow() != null &&
getWindow().peekDecorView() != null &&
getWindow().peekDecorView().getViewRootImpl() != null) {
- args.setSourceRectHintInsets(
+ params.setSourceRectHintInsets(
getWindow().peekDecorView().getViewRootImpl().getLastContentInsets());
} else {
- args.setSourceRectHintInsets(null);
+ params.setSourceRectHintInsets(null);
}
}
@@ -7320,6 +7362,7 @@ public class Activity extends ContextThemeWrapper
* @return True if caption is displayed on content, false if it pushes the content down.
*
* @see #setOverlayWithDecorCaptionEnabled(boolean)
+ * @hide
*/
public boolean isOverlayWithDecorCaptionEnabled() {
return mWindow.isOverlayWithDecorCaptionEnabled();
@@ -7331,6 +7374,7 @@ public class Activity extends ContextThemeWrapper
* This affects only freeform windows since they display the caption and only the main
* window of the activity. The caption is used to drag the window around and also shows
* maximize and close action buttons.
+ * @hide
*/
public void setOverlayWithDecorCaptionEnabled(boolean enabled) {
mWindow.setOverlayWithDecorCaptionEnabled(enabled);
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 1ab45b56e5ca..6e7b7504d4f3 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -122,8 +122,6 @@ public class ActivityManager {
private static int gMaxRecentTasks = -1;
- private static final int NUM_ALLOWED_PIP_ACTIONS = 3;
-
private final Context mContext;
private static volatile boolean sSystemReady = false;
@@ -1127,11 +1125,15 @@ public class ActivityManager {
}
/**
- * Return the maximum number of actions that will be displayed in the picture-in-picture UI when
- * the user interacts with the activity currently in picture-in-picture mode.
+ * Return the number of actions that will be displayed in the picture-in-picture UI when the
+ * user interacts with the activity currently in picture-in-picture mode. This number may change
+ * if the global configuration changes (ie. if the device is plugged into an external display).
+ *
+ * TO BE REMOVED
*/
+ @Deprecated
public static int getMaxNumPictureInPictureActions() {
- return NUM_ALLOWED_PIP_ACTIONS;
+ return 3;
}
/**
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 46ce94f36341..195ba247896e 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -51,7 +51,6 @@ import android.database.sqlite.SQLiteDebug;
import android.database.sqlite.SQLiteDebug.DbStats;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.graphics.Typeface;
import android.hardware.display.DisplayManagerGlobal;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
@@ -90,6 +89,7 @@ import android.provider.CalendarContract;
import android.provider.CallLog;
import android.provider.ContactsContract;
import android.provider.Downloads;
+import android.provider.FontsContract;
import android.provider.Settings;
import android.security.NetworkSecurityPolicy;
import android.security.net.config.NetworkSecurityConfigProvider;
@@ -5793,7 +5793,7 @@ public final class ActivityThread {
}
// Preload fonts resources
- Typeface.setApplicationContext(appContext);
+ FontsContract.setApplicationContextForResources(appContext);
try {
final ApplicationInfo info =
getPackageManager().getApplicationInfo(
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index d1eea3bdfb69..5ee8e0c258f7 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -34,7 +34,7 @@ import android.app.IUidObserver;
import android.app.IUserSwitchObserver;
import android.app.Notification;
import android.app.PendingIntent;
-import android.app.PictureInPictureArgs;
+import android.app.PictureInPictureParams;
import android.app.ProfilerInfo;
import android.app.WaitResult;
import android.app.assist.AssistContent;
@@ -500,8 +500,9 @@ interface IActivityManager {
boolean isInMultiWindowMode(in IBinder token);
boolean isInPictureInPictureMode(in IBinder token);
void killPackageDependents(in String packageName, int userId);
- boolean enterPictureInPictureMode(in IBinder token, in PictureInPictureArgs args);
- void setPictureInPictureArgs(in IBinder token, in PictureInPictureArgs args);
+ boolean enterPictureInPictureMode(in IBinder token, in PictureInPictureParams params);
+ void setPictureInPictureParams(in IBinder token, in PictureInPictureParams params);
+ int getMaxNumPictureInPictureActions(in IBinder token);
void activityRelaunched(in IBinder token);
IBinder getUriPermissionOwnerForActivity(in IBinder activityToken);
/**
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 2b4fb1956c42..e53e3da4d216 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -1106,6 +1106,45 @@ public class Notification implements Parcelable
private String mShortcutId;
private CharSequence mSettingsText;
+ /** @hide */
+ @IntDef(prefix = { "GROUP_ALERT_" }, value = {
+ GROUP_ALERT_ALL, GROUP_ALERT_CHILDREN, GROUP_ALERT_SUMMARY
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface GroupAlertBehavior {}
+
+ /**
+ * Constant for {@link Builder#setGroupAlertBehavior(int)}, meaning that all notifications in a
+ * group with sound or vibration ought to make sound or vibrate (respectively), so this
+ * notification will not be muted when it is in a group.
+ */
+ public static final int GROUP_ALERT_ALL = 0;
+
+ /**
+ * Constant for {@link Builder#setGroupAlertBehavior(int)}, meaning that all children
+ * notification in a group should be silenced (no sound or vibration) even if they are posted
+ * to a {@link NotificationChannel} that has sound and/or vibration. Use this constant to
+ * mute this notification if this notification is a group child.
+ *
+ * <p> For example, you might want to use this constant if you post a number of children
+ * notifications at once (say, after a periodic sync), and only need to notify the user
+ * audibly once.
+ */
+ public static final int GROUP_ALERT_SUMMARY = 1;
+
+ /**
+ * Constant for {@link Builder#setGroupAlertBehavior(int)}, meaning that the summary
+ * notification in a group should be silenced (no sound or vibration) even if they are
+ * posted to a {@link NotificationChannel} that has sound and/or vibration. Use this constant
+ * to mute this notification if this notification is a group summary.
+ *
+ * <p>For example, you might want to use this constant if only the children notifications
+ * in your group have content and the summary is only used to visually group notifications.
+ */
+ public static final int GROUP_ALERT_CHILDREN = 2;
+
+ private int mGroupAlertBehavior = GROUP_ALERT_ALL;
+
/**
* If this notification is being shown as a badge, always show as a number.
*/
@@ -1878,6 +1917,8 @@ public class Notification implements Parcelable
if (parcel.readInt() != 0) {
mSettingsText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
}
+
+ mGroupAlertBehavior = parcel.readInt();
}
@Override
@@ -1990,6 +2031,7 @@ public class Notification implements Parcelable
that.mShortcutId = this.mShortcutId;
that.mBadgeIcon = this.mBadgeIcon;
that.mSettingsText = this.mSettingsText;
+ that.mGroupAlertBehavior = this.mGroupAlertBehavior;
if (!heavy) {
that.lightenPayload(); // will clean out extras
@@ -2266,6 +2308,8 @@ public class Notification implements Parcelable
} else {
parcel.writeInt(0);
}
+
+ parcel.writeInt(mGroupAlertBehavior);
}
/**
@@ -2471,17 +2515,6 @@ public class Notification implements Parcelable
}
/**
- * @removed
- * Returns what icon should be shown for this notification if it is being displayed in a
- * Launcher that supports badging. Will be one of {@link #BADGE_ICON_NONE},
- * {@link #BADGE_ICON_SMALL}, or {@link #BADGE_ICON_LARGE}.
- */
- @Deprecated
- public int getBadgeIcon() {
- return mBadgeIcon;
- }
-
- /**
* Returns what icon should be shown for this notification if it is being displayed in a
* Launcher that supports badging. Will be one of {@link #BADGE_ICON_NONE},
* {@link #BADGE_ICON_SMALL}, or {@link #BADGE_ICON_LARGE}.
@@ -2506,6 +2539,15 @@ public class Notification implements Parcelable
}
/**
+ * Returns which type of notifications in a group are responsible for audibly alerting the
+ * user. See {@link #GROUP_ALERT_ALL}, {@link #GROUP_ALERT_CHILDREN},
+ * {@link #GROUP_ALERT_SUMMARY}.
+ */
+ public @GroupAlertBehavior int getGroupAlertBehavior() {
+ return mGroupAlertBehavior;
+ }
+
+ /**
* The small icon representing this notification in the status bar and content view.
*
* @return the small icon representing this notification.
@@ -2753,6 +2795,19 @@ public class Notification implements Parcelable
}
/**
+ * Sets the group alert behavior for this notification. Use this method to mute this
+ * notification if alerts for this notification's group should be handled by a different
+ * notification. This is only applicable for notifications that belong to a
+ * {@link #setGroup(String) group}.
+ *
+ * <p> The default value is {@link #GROUP_ALERT_ALL}.</p>
+ */
+ public Builder setGroupAlertBehavior(@GroupAlertBehavior int groupAlertBehavior) {
+ mN.mGroupAlertBehavior = groupAlertBehavior;
+ return this;
+ }
+
+ /**
* Specifies the channel the notification should be delivered on.
*/
public Builder setChannel(String channelId) {
diff --git a/core/java/android/app/PictureInPictureArgs.java b/core/java/android/app/PictureInPictureArgs.java
index 2fa636046901..63db86aac9a8 100644
--- a/core/java/android/app/PictureInPictureArgs.java
+++ b/core/java/android/app/PictureInPictureArgs.java
@@ -16,65 +16,24 @@
package android.app;
-import android.annotation.Nullable;
import android.graphics.Rect;
-import android.os.Parcel;
-import android.os.Parcelable;
+import android.util.Rational;
import java.util.ArrayList;
import java.util.List;
/**
- * Represents a set of arguments used to initialize the picture-in-picture mode.
+ * TO BE REMOVED
*/
-public final class PictureInPictureArgs implements Parcelable {
-
- /**
- * The expected aspect ratio of the picture-in-picture.
- */
- @Nullable
- private Float mAspectRatio;
-
- /**
- * The set of actions that are associated with this activity when in picture-in-picture.
- */
- @Nullable
- private List<RemoteAction> mUserActions;
-
- /**
- * The source bounds hint used when entering picture-in-picture, relative to the window bounds.
- * We can use this internally for the transition into picture-in-picture to ensure that a
- * particular source rect is visible throughout the whole transition.
- */
- @Nullable
- private Rect mSourceRectHint;
-
- /**
- * The content insets that are used with the source hint rect for the transition into PiP where
- * the insets are removed at the beginning of the transition.
- */
- @Nullable
- private Rect mSourceRectHintInsets;
-
- PictureInPictureArgs(Parcel in) {
- if (in.readInt() != 0) {
- mAspectRatio = in.readFloat();
- }
- if (in.readInt() != 0) {
- mUserActions = new ArrayList<>();
- in.readParcelableList(mUserActions, RemoteAction.class.getClassLoader());
- }
- if (in.readInt() != 0) {
- mSourceRectHint = Rect.CREATOR.createFromParcel(in);
- }
- if (in.readInt() != 0) {
- mSourceRectHintInsets = Rect.CREATOR.createFromParcel(in);
- }
- }
+@Deprecated
+public final class PictureInPictureArgs extends PictureInPictureParams {
/**
* Creates a new set of picture-in-picture arguments.
+ *
+ * TODO: Remove once we remove PictureInPictureArgs.
*/
+ @Deprecated
public PictureInPictureArgs() {
// Empty constructor
}
@@ -82,64 +41,43 @@ public final class PictureInPictureArgs implements Parcelable {
/**
* Creates a new set of picture-in-picture arguments from the given {@param aspectRatio} and
* {@param actions}.
+ *
+ * TODO: Remove once we remove PictureInPictureArgs.
*/
+ @Deprecated
public PictureInPictureArgs(float aspectRatio, List<RemoteAction> actions) {
- mAspectRatio = aspectRatio;
+ setAspectRatio(aspectRatio);
if (actions != null) {
- mUserActions = new ArrayList<>(actions);
- }
- }
-
- /**
- * Copies the set parameters from the other picture-in-picture args.
- * @hide
- */
- public void copyOnlySet(PictureInPictureArgs otherArgs) {
- if (otherArgs.hasSetAspectRatio()) {
- mAspectRatio = otherArgs.mAspectRatio;
- }
- if (otherArgs.hasSetActions()) {
- mUserActions = otherArgs.mUserActions;
- }
- if (otherArgs.hasSourceBoundsHint()) {
- mSourceRectHint = new Rect(otherArgs.getSourceRectHint());
- }
- if (otherArgs.hasSourceBoundsHintInsets()) {
- mSourceRectHintInsets = new Rect(otherArgs.getSourceRectHintInsets());
+ setActions(actions);
}
}
/**
* Sets the aspect ratio.
- * @param aspectRatio the new aspect ratio for picture-in-picture.
+ *
+ * @param aspectRatio the new aspect ratio for picture-in-picture, must be within 2.39:1 and
+ * 1:2.39.
+ *
+ * TODO: Remove once we remove PictureInPictureArgs.
*/
+ @Deprecated
public void setAspectRatio(float aspectRatio) {
- mAspectRatio = aspectRatio;
- }
-
- /**
- * @return the aspect ratio. If none is set, return 0.
- * @hide
- */
- public float getAspectRatio() {
- if (mAspectRatio != null) {
- return mAspectRatio;
- }
- return 0f;
+ // Temporary workaround
+ mAspectRatio = new Rational((int) (aspectRatio * 1000000000), 1000000000);
}
/**
- * @return whether the aspect ratio is set.
- * @hide
- */
- public boolean hasSetAspectRatio() {
- return mAspectRatio != null;
- }
-
- /**
- * Sets the user actions.
+ * Sets the user actions. If there are more than
+ * {@link ActivityManager#getMaxNumPictureInPictureActions()} actions, then the input will be
+ * truncated to that number.
+ *
* @param actions the new actions to show in the picture-in-picture menu.
+ *
+ * @see RemoteAction
+ *
+ * TODO: Remove once we remove PictureInPictureArgs.
*/
+ @Deprecated
public void setActions(List<RemoteAction> actions) {
if (mUserActions != null) {
mUserActions = null;
@@ -150,27 +88,14 @@ public final class PictureInPictureArgs implements Parcelable {
}
/**
- * @return the set of user actions.
- * @hide
- */
- public List<RemoteAction> getActions() {
- return mUserActions;
- }
-
- /**
- * @return whether the user actions are set.
- * @hide
- */
- public boolean hasSetActions() {
- return mUserActions != null;
- }
-
- /**
* Sets the source bounds hint. These bounds are only used when an activity first enters
* picture-in-picture, and describe the bounds in window coordinates of activity entering
* picture-in-picture that will be visible following the transition. For the best effect, these
* bounds should also match the aspect ratio in the arguments.
+ *
+ * TODO: Remove once we remove PictureInPictureArgs.
*/
+ @Deprecated
public void setSourceRectHint(Rect launchBounds) {
if (launchBounds == null) {
mSourceRectHint = null;
@@ -178,103 +103,4 @@ public final class PictureInPictureArgs implements Parcelable {
mSourceRectHint = new Rect(launchBounds);
}
}
-
- /**
- * Sets the insets to be used with the source rect hint bounds.
- * @hide
- */
- public void setSourceRectHintInsets(Rect insets) {
- if (insets == null) {
- mSourceRectHintInsets = null;
- } else {
- mSourceRectHintInsets = new Rect(insets);
- }
- }
-
- /**
- * @return the source rect hint
- * @hide
- */
- public Rect getSourceRectHint() {
- return mSourceRectHint;
- }
-
- /**
- * @return the source rect hint insets.
- * @hide
- */
- public Rect getSourceRectHintInsets() {
- return mSourceRectHintInsets;
- }
-
- /**
- * @return whether there are launch bounds set
- * @hide
- */
- public boolean hasSourceBoundsHint() {
- return mSourceRectHint != null && !mSourceRectHint.isEmpty();
- }
-
- /**
- * @return whether there are source rect hint insets set
- * @hide
- */
- public boolean hasSourceBoundsHintInsets() {
- return mSourceRectHintInsets != null;
- }
-
- @Override
- public PictureInPictureArgs clone() {
- PictureInPictureArgs args = new PictureInPictureArgs(mAspectRatio, mUserActions);
- if (mSourceRectHint != null) {
- args.setSourceRectHint(mSourceRectHint);
- }
- if (mSourceRectHintInsets != null) {
- args.setSourceRectHintInsets(mSourceRectHintInsets);
- }
- return args;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel out, int flags) {
- if (mAspectRatio != null) {
- out.writeInt(1);
- out.writeFloat(mAspectRatio);
- } else {
- out.writeInt(0);
- }
- if (mUserActions != null) {
- out.writeInt(1);
- out.writeParcelableList(mUserActions, 0);
- } else {
- out.writeInt(0);
- }
- if (mSourceRectHint != null) {
- out.writeInt(1);
- mSourceRectHint.writeToParcel(out, 0);
- } else {
- out.writeInt(0);
- }
- if (mSourceRectHintInsets != null) {
- out.writeInt(1);
- mSourceRectHintInsets.writeToParcel(out, 0);
- } else {
- out.writeInt(0);
- }
- }
-
- public static final Creator<PictureInPictureArgs> CREATOR =
- new Creator<PictureInPictureArgs>() {
- public PictureInPictureArgs createFromParcel(Parcel in) {
- return new PictureInPictureArgs(in);
- }
- public PictureInPictureArgs[] newArray(int size) {
- return new PictureInPictureArgs[size];
- }
- };
} \ No newline at end of file
diff --git a/core/java/android/app/PictureInPictureArgs.aidl b/core/java/android/app/PictureInPictureParams.aidl
index 49df39a73a7d..eaf5f06825f5 100644
--- a/core/java/android/app/PictureInPictureArgs.aidl
+++ b/core/java/android/app/PictureInPictureParams.aidl
@@ -16,4 +16,4 @@
package android.app;
-parcelable PictureInPictureArgs;
+parcelable PictureInPictureParams;
diff --git a/core/java/android/app/PictureInPictureParams.java b/core/java/android/app/PictureInPictureParams.java
new file mode 100644
index 000000000000..875d59272267
--- /dev/null
+++ b/core/java/android/app/PictureInPictureParams.java
@@ -0,0 +1,333 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+import android.annotation.Nullable;
+import android.graphics.Rect;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Rational;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents a set of parameters used to initialize and update an Activity in picture-in-picture
+ * mode.
+ *
+ * TODO: Make this final after we remove PictureInPictureArgs
+ */
+public class PictureInPictureParams implements Parcelable {
+
+ /**
+ * Builder class for {@link PictureInPictureParams} objects.
+ */
+ public static class Builder {
+
+ @Nullable
+ private Rational mAspectRatio;
+
+ @Nullable
+ private List<RemoteAction> mUserActions;
+
+ @Nullable
+ private Rect mSourceRectHint;
+
+ /**
+ * Sets the aspect ratio. This aspect ratio is defined as the desired width / height, and
+ * does not change upon device rotation.
+ *
+ * @param aspectRatio the new aspect ratio for the activity in picture-in-picture, must be
+ * between 2.39:1 and 1:2.39 (inclusive).
+ *
+ * @return this builder instance.
+ */
+ public Builder setAspectRatio(Rational aspectRatio) {
+ mAspectRatio = aspectRatio;
+ return this;
+ }
+
+ /**
+ * Sets the user actions. If there are more than
+ * {@link ActivityManager#getMaxNumPictureInPictureActions()} actions, then the input list
+ * will be truncated to that number.
+ *
+ * @param actions the new actions to show in the picture-in-picture menu.
+ *
+ * @return this builder instance.
+ *
+ * @see RemoteAction
+ */
+ public Builder setActions(List<RemoteAction> actions) {
+ if (mUserActions != null) {
+ mUserActions = null;
+ }
+ if (actions != null) {
+ mUserActions = new ArrayList<>(actions);
+ }
+ return this;
+ }
+
+ /**
+ * Sets the source bounds hint. These bounds are only used when an activity first enters
+ * picture-in-picture, and describe the bounds in window coordinates of activity entering
+ * picture-in-picture that will be visible following the transition. For the best effect,
+ * these bounds should also match the aspect ratio in the arguments.
+ *
+ * @param launchBounds window-coordinate bounds indicating the area of the activity that
+ * will still be visible following the transition into picture-in-picture (eg. the video
+ * view bounds in a video player)
+ *
+ * @return this builder instance.
+ */
+ public Builder setSourceRectHint(Rect launchBounds) {
+ if (launchBounds == null) {
+ mSourceRectHint = null;
+ } else {
+ mSourceRectHint = new Rect(launchBounds);
+ }
+ return this;
+ }
+
+ /**
+ * @return an immutable {@link PictureInPictureParams} to be used when entering or updating
+ * the activity in picture-in-picture.
+ *
+ * @see Activity#enterPictureInPictureMode(PictureInPictureParams)
+ * @see Activity#setPictureInPictureParams(PictureInPictureParams)
+ */
+ public PictureInPictureParams build() {
+ PictureInPictureParams params = new PictureInPictureParams(mAspectRatio, mUserActions,
+ mSourceRectHint);
+ return params;
+ }
+ }
+
+ /**
+ * The expected aspect ratio of the picture-in-picture.
+ */
+ // TODO: Make private once we removed PictureInPictureArgs
+ @Nullable
+ protected Rational mAspectRatio;
+
+ /**
+ * The set of actions that are associated with this activity when in picture-in-picture.
+ */
+ // TODO: Make private once we removed PictureInPictureArgs
+ @Nullable
+ protected List<RemoteAction> mUserActions;
+
+ /**
+ * The source bounds hint used when entering picture-in-picture, relative to the window bounds.
+ * We can use this internally for the transition into picture-in-picture to ensure that a
+ * particular source rect is visible throughout the whole transition.
+ */
+ // TODO: Make private once we removed PictureInPictureArgs
+ @Nullable
+ protected Rect mSourceRectHint;
+
+ /**
+ * The content insets that are used with the source hint rect for the transition into PiP where
+ * the insets are removed at the beginning of the transition.
+ */
+ @Nullable
+ private Rect mSourceRectHintInsets;
+
+ /**
+ * TO BE REMOVED
+ */
+ @Deprecated
+ PictureInPictureParams() {
+ // TODO: Remove once we remove PictureInPictureArgs
+ }
+
+ private PictureInPictureParams(Parcel in) {
+ if (in.readInt() != 0) {
+ mAspectRatio = new Rational(in.readInt(), in.readInt());
+ }
+ if (in.readInt() != 0) {
+ mUserActions = new ArrayList<>();
+ in.readParcelableList(mUserActions, RemoteAction.class.getClassLoader());
+ }
+ if (in.readInt() != 0) {
+ mSourceRectHint = Rect.CREATOR.createFromParcel(in);
+ }
+ if (in.readInt() != 0) {
+ mSourceRectHintInsets = Rect.CREATOR.createFromParcel(in);
+ }
+ }
+
+ private PictureInPictureParams(Rational aspectRatio, List<RemoteAction> actions,
+ Rect sourceRectHint) {
+ mAspectRatio = aspectRatio;
+ mUserActions = actions;
+ mSourceRectHint = sourceRectHint;
+ }
+
+ /**
+ * Copies the set parameters from the other picture-in-picture args.
+ * @hide
+ */
+ public void copyOnlySet(PictureInPictureParams otherArgs) {
+ if (otherArgs.hasSetAspectRatio()) {
+ mAspectRatio = otherArgs.mAspectRatio;
+ }
+ if (otherArgs.hasSetActions()) {
+ mUserActions = otherArgs.mUserActions;
+ }
+ if (otherArgs.hasSourceBoundsHint()) {
+ mSourceRectHint = new Rect(otherArgs.getSourceRectHint());
+ }
+ if (otherArgs.hasSourceBoundsHintInsets()) {
+ mSourceRectHintInsets = new Rect(otherArgs.getSourceRectHintInsets());
+ }
+ }
+
+ /**
+ * @return the aspect ratio. If none is set, return 0.
+ * @hide
+ */
+ public float getAspectRatio() {
+ if (mAspectRatio != null) {
+ return mAspectRatio.floatValue();
+ }
+ return 0f;
+ }
+
+ /**
+ * @return whether the aspect ratio is set.
+ * @hide
+ */
+ public boolean hasSetAspectRatio() {
+ return mAspectRatio != null;
+ }
+
+ /**
+ * @return the set of user actions.
+ * @hide
+ */
+ public List<RemoteAction> getActions() {
+ return mUserActions;
+ }
+
+ /**
+ * @return whether the user actions are set.
+ * @hide
+ */
+ public boolean hasSetActions() {
+ return mUserActions != null;
+ }
+
+ /**
+ * Truncates the set of actions to the given {@param size}.
+ * @hide
+ */
+ public void truncateActions(int size) {
+ if (hasSetActions()) {
+ mUserActions = mUserActions.subList(0, size);
+ }
+ }
+
+ /**
+ * Sets the insets to be used with the source rect hint bounds.
+ * @hide
+ */
+ @Deprecated
+ public void setSourceRectHintInsets(Rect insets) {
+ if (insets == null) {
+ mSourceRectHintInsets = null;
+ } else {
+ mSourceRectHintInsets = new Rect(insets);
+ }
+ }
+
+ /**
+ * @return the source rect hint
+ * @hide
+ */
+ public Rect getSourceRectHint() {
+ return mSourceRectHint;
+ }
+
+ /**
+ * @return the source rect hint insets.
+ * @hide
+ */
+ public Rect getSourceRectHintInsets() {
+ return mSourceRectHintInsets;
+ }
+
+ /**
+ * @return whether there are launch bounds set
+ * @hide
+ */
+ public boolean hasSourceBoundsHint() {
+ return mSourceRectHint != null && !mSourceRectHint.isEmpty();
+ }
+
+ /**
+ * @return whether there are source rect hint insets set
+ * @hide
+ */
+ public boolean hasSourceBoundsHintInsets() {
+ return mSourceRectHintInsets != null;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ if (mAspectRatio != null) {
+ out.writeInt(1);
+ out.writeInt(mAspectRatio.getNumerator());
+ out.writeInt(mAspectRatio.getDenominator());
+ } else {
+ out.writeInt(0);
+ }
+ if (mUserActions != null) {
+ out.writeInt(1);
+ out.writeParcelableList(mUserActions, 0);
+ } else {
+ out.writeInt(0);
+ }
+ if (mSourceRectHint != null) {
+ out.writeInt(1);
+ mSourceRectHint.writeToParcel(out, 0);
+ } else {
+ out.writeInt(0);
+ }
+ if (mSourceRectHintInsets != null) {
+ out.writeInt(1);
+ mSourceRectHintInsets.writeToParcel(out, 0);
+ } else {
+ out.writeInt(0);
+ }
+ }
+
+ public static final Creator<PictureInPictureParams> CREATOR =
+ new Creator<PictureInPictureParams>() {
+ public PictureInPictureParams createFromParcel(Parcel in) {
+ return new PictureInPictureParams(in);
+ }
+ public PictureInPictureParams[] newArray(int size) {
+ return new PictureInPictureParams[size];
+ }
+ };
+} \ No newline at end of file
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 0676bca0e796..6d87de8e3001 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -20,7 +20,9 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RawRes;
+import android.annotation.SdkConstant;
import android.annotation.SystemApi;
+import android.annotation.SdkConstant.SdkConstantType;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -103,6 +105,7 @@ public class WallpaperManager {
* <p>Output: RESULT_OK if user decided to crop/set the wallpaper, RESULT_CANCEL otherwise
* Activities that support this intent should specify a MIME filter of "image/*"
*/
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_CROP_AND_SET_WALLPAPER =
"android.service.wallpaper.CROP_AND_SET_WALLPAPER";
diff --git a/core/java/android/app/admin/DeviceAdminService.java b/core/java/android/app/admin/DeviceAdminService.java
index cd0b1bf3d0a8..04fff0497cb2 100644
--- a/core/java/android/app/admin/DeviceAdminService.java
+++ b/core/java/android/app/admin/DeviceAdminService.java
@@ -26,16 +26,25 @@ import android.os.IBinder;
* <p>The system searches for it with an intent filter with the
* {@link DevicePolicyManager#ACTION_DEVICE_ADMIN_SERVICE} action, and tries to keep a bound
* connection as long as the hosting user is running, so that the device/profile owner is always
- * considered to be in the foreground.
+ * considered to be in the foreground. This is useful to receive implicit broadcasts that
+ * can no longer be received by manifest receivers by apps targeting Android version
+ * {@link android.os.Build.VERSION_CODES#O}. Device/profile owners can use a runtime-registered
+ * broadcast receiver instead, and have a {@link DeviceAdminService} so that the process is always
+ * running.
*
* <p>Device/profile owners can use
* {@link android.content.pm.PackageManager#setComponentEnabledSetting(ComponentName, int, int)}
* to disable/enable its own service. For example, when a device/profile owner no longer needs
* to be in the foreground, it can (and should) disable its service.
*
- * <p>The service must not be exported.
+ * <p>The service must be protected with the permission
+ * {@link android.Manifest.permission#BIND_DEVICE_ADMIN}. Otherwise the system would ignore it.
*
- * <p>TODO: Describe how the system handles crashes in DO/PO.
+ * <p>When the owner process crashes, the service will be re-bound automatically after a
+ * back-off.
+ *
+ * <p>Note the process may still be killed if the system is under heavy memory pressure, in which
+ * case the process will be re-started later.
*/
public class DeviceAdminService extends Service {
private final IDeviceAdminServiceImpl mImpl;
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 82ad8252c5a9..7855b927d313 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1518,7 +1518,8 @@ public class DevicePolicyManager {
* Service action: Action for a service that device owner and profile owner can optionally
* own. If a device owner or a profile owner has such a service, the system tries to keep
* a bound connection to it, in order to keep their process always running.
- * The service must not be exported.
+ * The service must be protected with the {@link android.Manifest.permission#BIND_DEVICE_ADMIN}
+ * permission.
*/
@SdkConstant(SdkConstantType.SERVICE_ACTION)
public static final String ACTION_DEVICE_ADMIN_SERVICE
@@ -2972,9 +2973,9 @@ public class DevicePolicyManager {
* profile.
*
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
- * @param timeoutMs The new timeout, after which the user will have to unlock with strong
- * authentication method. A value of 0 means the admin is not participating in
- * controlling the timeout.
+ * @param timeoutMs The new timeout in milliseconds, after which the user will have to unlock
+ * with strong authentication method. A value of 0 means the admin is not participating
+ * in controlling the timeout.
* The minimum and maximum timeouts are platform-defined and are typically 1 hour and
* 72 hours, respectively. Though discouraged, the admin may choose to require strong
* auth at all times using {@link #KEYGUARD_DISABLE_FINGERPRINT} and/or
@@ -3004,7 +3005,7 @@ public class DevicePolicyManager {
*
* @param admin The name of the admin component to check, or {@code null} to aggregate
* accross all participating admins.
- * @return The timeout or 0 if not configured for the provided admin.
+ * @return The timeout in milliseconds or 0 if not configured for the provided admin.
*/
public long getRequiredStrongAuthTimeout(@Nullable ComponentName admin) {
return getRequiredStrongAuthTimeout(admin, myUserId());
@@ -7681,6 +7682,8 @@ public class DevicePolicyManager {
*
* <p> Backup service is off by default when device owner is present.
*
+ * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+ * @param enabled {@code true} to enable the backup service, {@code false} to disable it.
* @throws SecurityException if {@code admin} is not a device owner.
*/
public void setBackupServiceEnabled(@NonNull ComponentName admin, boolean enabled) {
diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java
index 6bb9f2d0ea22..fa31273eff7b 100644
--- a/core/java/android/app/admin/SystemUpdateInfo.java
+++ b/core/java/android/app/admin/SystemUpdateInfo.java
@@ -89,8 +89,9 @@ public final class SystemUpdateInfo implements Parcelable {
}
/**
- * Gets time when the update was first available.
- * @return Time as given by {@link System#currentTimeMillis()}
+ * Gets time when the update was first available in milliseconds since midnight, January 1,
+ * 1970 UTC.
+ * @return Time in milliseconds as given by {@link System#currentTimeMillis()}
*/
public long getReceivedTime() {
return mReceivedTime;
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index d757f3edd892..d6b89a17c624 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -1644,7 +1644,7 @@ public class AssistStructure implements Parcelable {
@Override
public void setAutofillId(@NonNull ViewStructure parent, int virtualId) {
- mNode.mAutofillId = new AutofillId(parent.getAutofillId(), virtualId);
+ setAutofillId(parent.getAutofillId(), virtualId);
}
@Override
@@ -1685,8 +1685,13 @@ public class AssistStructure implements Parcelable {
}
@Override
- public void setAutofillId(int viewId) {
- mNode.mAutofillId = new AutofillId(viewId);
+ public void setAutofillId(@NonNull AutofillId id) {
+ mNode.mAutofillId = id;
+ }
+
+ @Override
+ public void setAutofillId(@NonNull AutofillId parentId, int virtualId) {
+ mNode.mAutofillId = new AutofillId(parentId, virtualId);
}
@Override
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 9f35e85b0665..6327f34ebd5e 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -712,12 +712,13 @@ public class AppWidgetManager {
*
* @param profile The profile for which to get providers. Passing null is equivalent
* to querying for only the calling user.
- * @return The installed providers.
+ * @return The installed providers, or an empty list if none are found for the given user.
*
* @see android.os.Process#myUserHandle()
* @see android.os.UserManager#getUserProfiles()
*/
- public List<AppWidgetProviderInfo> getInstalledProvidersForProfile(@Nullable UserHandle profile) {
+ public @NonNull List<AppWidgetProviderInfo> getInstalledProvidersForProfile(
+ @Nullable UserHandle profile) {
if (mService == null) {
return Collections.emptyList();
}
@@ -735,13 +736,20 @@ public class AppWidgetManager {
* equivalent to {@link #getInstalledProvidersForProfile(UserHandle)}.
* @param profile The profile for which to get providers. Passing null is equivalent
* to querying for only the calling user.
- * @return The installed providers.
+ * @return The installed providers, or an empty list if none are found for the given
+ * package and user.
+ * @throws NullPointerException if the provided package name is null
*
* @see android.os.Process#myUserHandle()
* @see android.os.UserManager#getUserProfiles()
*/
- public List<AppWidgetProviderInfo> getInstalledProvidersForPackage(@Nullable String packageName,
- @Nullable UserHandle profile) {
+ public @NonNull List<AppWidgetProviderInfo> getInstalledProvidersForPackage(
+ @NonNull String packageName, @Nullable UserHandle profile) {
+ if (packageName == null) {
+ throw new NullPointerException("A non-null package must be passed to this method. " +
+ "If you want all widgets regardless of package, see " +
+ "getInstalledProvidersForProfile(UserHandle)");
+ }
if (mService == null) {
return Collections.emptyList();
}
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 639e05622334..c4272688cb40 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -22,6 +22,8 @@ import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.ParcelUuid;
@@ -593,32 +595,38 @@ public final class BluetoothDevice implements Parcelable {
public static final int TRANSPORT_LE = 2;
/**
- * Bluetooth LE 1M PHY.
+ * Bluetooth LE 1M PHY. Used to refer to LE 1M Physical Channel for advertising, scanning or
+ * connection.
*/
public static final int PHY_LE_1M = 1;
/**
- * Bluetooth LE 2M PHY.
+ * Bluetooth LE 2M PHY. Used to refer to LE 2M Physical Channel for advertising, scanning or
+ * connection.
*/
public static final int PHY_LE_2M = 2;
/**
- * Bluetooth LE Coded PHY.
+ * Bluetooth LE Coded PHY. Used to refer to LE Coded Physical Channel for advertising, scanning
+ * or connection.
*/
public static final int PHY_LE_CODED = 3;
/**
- * Bluetooth LE 1M PHY mask.
+ * Bluetooth LE 1M PHY mask. Used to specify LE 1M Physical Channel as one of many available
+ * options in a bitmask.
*/
public static final int PHY_LE_1M_MASK = 1;
/**
- * Bluetooth LE 2M PHY mask.
+ * Bluetooth LE 2M PHY mask. Used to specify LE 2M Physical Channel as one of many available
+ * options in a bitmask.
*/
public static final int PHY_LE_2M_MASK = 2;
/**
- * Bluetooth LE Coded PHY mask.
+ * Bluetooth LE Coded PHY mask. Used to specify LE Coded Physical Channel as one of many
+ * available options in a bitmask.
*/
public static final int PHY_LE_CODED_MASK = 4;
@@ -1668,12 +1676,45 @@ public final class BluetoothDevice implements Parcelable {
* {@link BluetoothDevice#TRANSPORT_BREDR} or {@link BluetoothDevice#TRANSPORT_LE}
* @param phy preferred PHY for connections to remote LE device. Bitwise OR of any of
* {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
- * and {@link BluetoothDevice#PHY_LE_CODED_MASK}. This option does not take effect if
- * {@code autoConnect} is set to true.
- * @throws IllegalArgumentException if callback is null
+ * and {@link BluetoothDevice#PHY_LE_CODED_MASK}. This option does not take effect
+ * if {@code autoConnect} is set to true.
+ * @throws NullPointerException if callback is null
*/
public BluetoothGatt connectGatt(Context context, boolean autoConnect,
BluetoothGattCallback callback, int transport, int phy) {
+ return connectGatt(context, autoConnect,callback, TRANSPORT_AUTO, PHY_LE_1M_MASK, null);
+ }
+
+ /**
+ * Connect to GATT Server hosted by this device. Caller acts as GATT client.
+ * The callback is used to deliver results to Caller, such as connection status as well
+ * as any further GATT client operations.
+ * The method returns a BluetoothGatt instance. You can use BluetoothGatt to conduct
+ * GATT client operations.
+ * @param callback GATT callback handler that will receive asynchronous callbacks.
+ * @param autoConnect Whether to directly connect to the remote device (false)
+ * or to automatically connect as soon as the remote
+ * device becomes available (true).
+ * @param transport preferred transport for GATT connections to remote dual-mode devices
+ * {@link BluetoothDevice#TRANSPORT_AUTO} or
+ * {@link BluetoothDevice#TRANSPORT_BREDR} or {@link BluetoothDevice#TRANSPORT_LE}
+ * @param phy preferred PHY for connections to remote LE device. Bitwise OR of any of
+ * {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
+ * an d{@link BluetoothDevice#PHY_LE_CODED_MASK}. This option does not take effect
+ * if {@code autoConnect} is set to true.
+ * @param handler The handler to use for the callback. If {@code null}, callbacks will happen
+ * on the service's main thread.
+ * @throws NullPointerException if callback is null
+ */
+ public BluetoothGatt connectGatt(Context context, boolean autoConnect,
+ BluetoothGattCallback callback, int transport, int phy,
+ Handler handler) {
+ if (callback == null)
+ throw new NullPointerException("callback is null");
+
+ if (handler == null)
+ handler = new Handler(Looper.getMainLooper());
+
// TODO(Bluetooth) check whether platform support BLE
// Do the check here or in GattServer?
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
@@ -1685,7 +1726,7 @@ public final class BluetoothDevice implements Parcelable {
return null;
}
BluetoothGatt gatt = new BluetoothGatt(iGatt, this, transport, phy);
- gatt.connect(autoConnect, callback);
+ gatt.connect(autoConnect, callback, handler);
return gatt;
} catch (RemoteException e) {Log.e(TAG, "", e);}
return null;
diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java
index 4aaf6bd3eb17..713dbf43d331 100644
--- a/core/java/android/bluetooth/BluetoothGatt.java
+++ b/core/java/android/bluetooth/BluetoothGatt.java
@@ -17,6 +17,7 @@
package android.bluetooth;
import android.content.Context;
+import android.os.Handler;
import android.os.ParcelUuid;
import android.os.RemoteException;
import android.util.Log;
@@ -43,6 +44,7 @@ public final class BluetoothGatt implements BluetoothProfile {
private IBluetoothGatt mService;
private BluetoothGattCallback mCallback;
+ private Handler mHandler;
private int mClientIf;
private BluetoothDevice mDevice;
private boolean mAutoConnect;
@@ -154,8 +156,14 @@ public final class BluetoothGatt implements BluetoothProfile {
}
mClientIf = clientIf;
if (status != GATT_SUCCESS) {
- mCallback.onConnectionStateChange(BluetoothGatt.this, GATT_FAILURE,
- BluetoothProfile.STATE_DISCONNECTED);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onConnectionStateChange(BluetoothGatt.this, GATT_FAILURE,
+ BluetoothProfile.STATE_DISCONNECTED);
+ }
+ });
+
synchronized(mStateLock) {
mConnState = CONN_STATE_IDLE;
}
@@ -181,11 +189,12 @@ public final class BluetoothGatt implements BluetoothProfile {
return;
}
- try {
- mCallback.onPhyUpdate(BluetoothGatt.this, txPhy, rxPhy, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onPhyUpdate(BluetoothGatt.this, txPhy, rxPhy, status);
+ }
+ });
}
/**
@@ -200,11 +209,12 @@ public final class BluetoothGatt implements BluetoothProfile {
return;
}
- try {
- mCallback.onPhyRead(BluetoothGatt.this, txPhy, rxPhy, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onPhyRead(BluetoothGatt.this, txPhy, rxPhy, status);
+ }
+ });
}
/**
@@ -221,11 +231,13 @@ public final class BluetoothGatt implements BluetoothProfile {
}
int profileState = connected ? BluetoothProfile.STATE_CONNECTED :
BluetoothProfile.STATE_DISCONNECTED;
- try {
- mCallback.onConnectionStateChange(BluetoothGatt.this, status, profileState);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onConnectionStateChange(BluetoothGatt.this, status, profileState);
+ }
+ });
synchronized(mStateLock) {
if (connected) {
@@ -279,11 +291,12 @@ public final class BluetoothGatt implements BluetoothProfile {
}
}
- try {
- mCallback.onServicesDiscovered(BluetoothGatt.this, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onServicesDiscovered(BluetoothGatt.this, status);
+ }
+ });
}
/**
@@ -328,11 +341,12 @@ public final class BluetoothGatt implements BluetoothProfile {
if (status == 0) characteristic.setValue(value);
- try {
- mCallback.onCharacteristicRead(BluetoothGatt.this, characteristic, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onCharacteristicRead(BluetoothGatt.this, characteristic, status);
+ }
+ });
}
/**
@@ -373,11 +387,12 @@ public final class BluetoothGatt implements BluetoothProfile {
mAuthRetryState = AUTH_RETRY_STATE_IDLE;
- try {
- mCallback.onCharacteristicWrite(BluetoothGatt.this, characteristic, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onCharacteristicWrite(BluetoothGatt.this, characteristic, status);
+ }
+ });
}
/**
@@ -398,11 +413,12 @@ public final class BluetoothGatt implements BluetoothProfile {
characteristic.setValue(value);
- try {
- mCallback.onCharacteristicChanged(BluetoothGatt.this, characteristic);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onCharacteristicChanged(BluetoothGatt.this, characteristic);
+ }
+ });
}
/**
@@ -442,11 +458,12 @@ public final class BluetoothGatt implements BluetoothProfile {
mAuthRetryState = AUTH_RETRY_STATE_IDLE;
- try {
- mCallback.onDescriptorRead(BluetoothGatt.this, descriptor, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onDescriptorRead(BluetoothGatt.this, descriptor, status);
+ }
+ });
}
/**
@@ -485,11 +502,12 @@ public final class BluetoothGatt implements BluetoothProfile {
mAuthRetryState = AUTH_RETRY_STATE_IDLE;
- try {
- mCallback.onDescriptorWrite(BluetoothGatt.this, descriptor, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onDescriptorWrite(BluetoothGatt.this, descriptor, status);
+ }
+ });
}
/**
@@ -508,11 +526,12 @@ public final class BluetoothGatt implements BluetoothProfile {
mDeviceBusy = false;
}
- try {
- mCallback.onReliableWriteCompleted(BluetoothGatt.this, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onReliableWriteCompleted(BluetoothGatt.this, status);
+ }
+ });
}
/**
@@ -526,11 +545,12 @@ public final class BluetoothGatt implements BluetoothProfile {
if (!address.equals(mDevice.getAddress())) {
return;
}
- try {
- mCallback.onReadRemoteRssi(BluetoothGatt.this, rssi, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onReadRemoteRssi(BluetoothGatt.this, rssi, status);
+ }
+ });
}
/**
@@ -544,11 +564,13 @@ public final class BluetoothGatt implements BluetoothProfile {
if (!address.equals(mDevice.getAddress())) {
return;
}
- try {
- mCallback.onMtuChanged(BluetoothGatt.this, mtu, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onMtuChanged(BluetoothGatt.this, mtu, status);
+ }
+ });
}
/**
@@ -564,12 +586,14 @@ public final class BluetoothGatt implements BluetoothProfile {
if (!address.equals(mDevice.getAddress())) {
return;
}
- try {
- mCallback.onConnectionUpdated(BluetoothGatt.this, interval, latency,
- timeout, status);
- } catch (Exception ex) {
- Log.w(TAG, "Unhandled exception in callback", ex);
- }
+
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onConnectionUpdated(BluetoothGatt.this, interval, latency,
+ timeout, status);
+ }
+ });
}
};
@@ -659,11 +683,12 @@ public final class BluetoothGatt implements BluetoothProfile {
* @return If true, the callback will be called to notify success or failure,
* false on immediate error
*/
- private boolean registerApp(BluetoothGattCallback callback) {
+ private boolean registerApp(BluetoothGattCallback callback, Handler handler) {
if (DBG) Log.d(TAG, "registerApp()");
if (mService == null) return false;
mCallback = callback;
+ mHandler = handler;
UUID uuid = UUID.randomUUID();
if (DBG) Log.d(TAG, "registerApp() - UUID=" + uuid);
@@ -716,7 +741,8 @@ public final class BluetoothGatt implements BluetoothProfile {
* device becomes available (true).
* @return true, if the connection attempt was initiated successfully
*/
- /*package*/ boolean connect(Boolean autoConnect, BluetoothGattCallback callback) {
+ /*package*/ boolean connect(Boolean autoConnect, BluetoothGattCallback callback,
+ Handler handler) {
if (DBG) Log.d(TAG, "connect() - device: " + mDevice.getAddress() + ", auto: " + autoConnect);
synchronized(mStateLock) {
if (mConnState != CONN_STATE_IDLE) {
@@ -727,7 +753,7 @@ public final class BluetoothGatt implements BluetoothProfile {
mAutoConnect = autoConnect;
- if (!registerApp(callback)) {
+ if (!registerApp(callback, handler)) {
synchronized(mStateLock) {
mConnState = CONN_STATE_IDLE;
}
diff --git a/core/java/android/bluetooth/BluetoothGattCallback.java b/core/java/android/bluetooth/BluetoothGattCallback.java
index 11a15c66385a..c6f82ffb7ae4 100644
--- a/core/java/android/bluetooth/BluetoothGattCallback.java
+++ b/core/java/android/bluetooth/BluetoothGattCallback.java
@@ -30,7 +30,8 @@ public abstract class BluetoothGattCallback{
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}.
* @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M},
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}.
- * @param status status of the operation
+ * @param status Status of the PHY update operation.
+ * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds.
*/
public void onPhyUpdate(BluetoothGatt gatt, int txPhy, int rxPhy, int status) {
}
@@ -43,7 +44,8 @@ public abstract class BluetoothGattCallback{
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}.
* @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M},
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}.
- * @param status status of the operation
+ * @param status Status of the PHY read operation.
+ * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds.
*/
public void onPhyRead(BluetoothGatt gatt, int txPhy, int rxPhy, int status) {
}
diff --git a/core/java/android/bluetooth/BluetoothGattServerCallback.java b/core/java/android/bluetooth/BluetoothGattServerCallback.java
index 3b8f962bf73e..02307bd9ef9f 100644
--- a/core/java/android/bluetooth/BluetoothGattServerCallback.java
+++ b/core/java/android/bluetooth/BluetoothGattServerCallback.java
@@ -167,7 +167,8 @@ public abstract class BluetoothGattServerCallback {
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}
* @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M},
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}
- * @param status status of the operation
+ * @param status Status of the PHY update operation.
+ * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds.
*/
public void onPhyUpdate(BluetoothDevice device, int txPhy, int rxPhy, int status) {
}
@@ -180,7 +181,8 @@ public abstract class BluetoothGattServerCallback {
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}
* @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M},
* {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}
- * @param status status of the operation
+ * @param status Status of the PHY read operation.
+ * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds.
*/
public void onPhyRead(BluetoothDevice device, int txPhy, int rxPhy, int status) {
}
diff --git a/core/java/android/bluetooth/IBluetoothGatt.aidl b/core/java/android/bluetooth/IBluetoothGatt.aidl
index 582709c3ba47..12e9baaded91 100644
--- a/core/java/android/bluetooth/IBluetoothGatt.aidl
+++ b/core/java/android/bluetooth/IBluetoothGatt.aidl
@@ -32,7 +32,6 @@ import android.os.WorkSource;
import android.bluetooth.IBluetoothGattCallback;
import android.bluetooth.IBluetoothGattServerCallback;
-import android.bluetooth.le.IAdvertiserCallback;
import android.bluetooth.le.IAdvertisingSetCallback;
import android.bluetooth.le.IPeriodicAdvertisingCallback;
import android.bluetooth.le.IScannerCallback;
diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
index ea3031b20177..0c7958dc9a3c 100644
--- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
+++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
@@ -22,7 +22,6 @@ import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothUuid;
import android.bluetooth.IBluetoothGatt;
import android.bluetooth.IBluetoothManager;
-import android.bluetooth.le.IAdvertiserCallback;
import android.os.Handler;
import android.os.Looper;
import android.os.ParcelUuid;
diff --git a/core/java/android/bluetooth/le/IAdvertiserCallback.aidl b/core/java/android/bluetooth/le/IAdvertiserCallback.aidl
deleted file mode 100644
index c58b1dfec965..000000000000
--- a/core/java/android/bluetooth/le/IAdvertiserCallback.aidl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.bluetooth.le;
-
-import android.bluetooth.le.AdvertiseSettings;
-
-/**
- * Callback definitions for interacting with Advertiser
- * @hide
- */
-oneway interface IAdvertiserCallback {
- void onAdvertiserRegistered(in int status, in int advertiserId);
-
- void onMultiAdvertiseCallback(in int status, boolean isStart,
- in AdvertiseSettings advertiseSettings);
-}
diff --git a/core/java/android/companion/CompanionDeviceManager.java b/core/java/android/companion/CompanionDeviceManager.java
index e50b2a97c2d2..fac9e13db322 100644
--- a/core/java/android/companion/CompanionDeviceManager.java
+++ b/core/java/android/companion/CompanionDeviceManager.java
@@ -118,6 +118,9 @@ public final class CompanionDeviceManager {
* association is no longer relevant to avoid unnecessary battery and/or data drain resulting
* from special privileges that the association provides</p>
*
+ * <p>Calling this API requires a uses-feature
+ * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p>
+ *
* @param request specific details about this request
* @param callback will be called once there's at least one device found for user to choose from
* @param handler A handler to control which thread the callback will be delivered on, or null,
@@ -160,6 +163,9 @@ public final class CompanionDeviceManager {
}
/**
+ * <p>Calling this API requires a uses-feature
+ * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p>
+ *
* @return a list of MAC addresses of devices that have been previously associated with the
* current app. You can use these with {@link #disassociate}
*/
@@ -184,6 +190,9 @@ public final class CompanionDeviceManager {
* association is no longer relevant to avoid unnecessary battery and/or data drain resulting
* from special privileges that the association provides</p>
*
+ * <p>Calling this API requires a uses-feature
+ * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p>
+ *
* @param deviceMacAddress the MAC address of device to disassociate from this app
*/
public void disassociate(@NonNull String deviceMacAddress) {
@@ -206,6 +215,9 @@ public final class CompanionDeviceManager {
* are allowed.
*
* Your app must have an association with a device before calling this API
+ *
+ * <p>Calling this API requires a uses-feature
+ * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p>
*/
public void requestNotificationAccess(ComponentName component) {
if (!checkFeaturePresent()) {
@@ -226,6 +238,9 @@ public final class CompanionDeviceManager {
*
* Your app must have an association with a device before calling this API
*
+ * <p>Calling this API requires a uses-feature
+ * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p>
+ *
* @param component the name of the component
* @return whether the given component has the notification listener permission
*/
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 42ef871ef3ba..2e2d444d3f14 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -2967,9 +2967,6 @@ public abstract class Context {
* <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
* <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
* handling management of network connections.
- * <dt> {@link #IPSEC_SERVICE} ("ipsec")
- * <dd> A {@link android.net.IpSecManager IpSecManager} for managing IPSec on
- * sockets and networks.
* <dt> {@link #WIFI_SERVICE} ("wifi")
* <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of Wi-Fi
* connectivity. On releases before NYC, it should only be obtained from an application
@@ -3314,6 +3311,7 @@ public abstract class Context {
* {@link android.net.IpSecManager} for encrypting Sockets or Networks with
* IPSec.
*
+ * @hide
* @see #getSystemService
*/
public static final String IPSEC_SERVICE = "ipsec";
@@ -3769,7 +3767,7 @@ public abstract class Context {
* @see #getSystemService
* @see android.companion.CompanionDeviceManager
*/
- public static final String COMPANION_DEVICE_SERVICE = "companion_device";
+ public static final String COMPANION_DEVICE_SERVICE = "companiondevice";
/**
* Use with {@link #getSystemService} to retrieve a
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 9c87ff27caaf..da43fecdfc9e 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1399,6 +1399,7 @@ public class Intent implements Parcelable, Cloneable {
* <p>Input: nothing
* <p>Output: nothing
*/
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST";
/**
@@ -2061,6 +2062,7 @@ public class Intent implements Parcelable, Cloneable {
* temporary system dialog to dismiss. Some examples of temporary system
* dialogs are the notification window-shade and the recent tasks dialog.
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";
/**
* Broadcast Action: Trigger the download and eventual installation
@@ -2590,6 +2592,7 @@ public class Intent implements Parcelable, Cloneable {
* @deprecated replaced by android.os.storage.StorageEventListener
*/
@Deprecated
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
/**
@@ -2600,6 +2603,7 @@ public class Intent implements Parcelable, Cloneable {
* @deprecated replaced by android.os.storage.StorageEventListener
*/
@Deprecated
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
/**
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index d64f018c3f2e..c9bce530be3e 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -16,6 +16,7 @@
package android.content;
+import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.net.Uri;
import android.os.Parcel;
@@ -33,6 +34,8 @@ import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
@@ -283,9 +286,22 @@ public class IntentFilter implements Parcelable {
private static final int STATE_VERIFIED = 0x00001000;
private int mVerifyState;
-
+ /** @hide */
+ public static final int VISIBILITY_NONE = 0;
+ /** @hide */
+ public static final int VISIBILITY_EXPLICIT = 1;
+ /** @hide */
+ public static final int VISIBILITY_IMPLICIT = 2;
+ /** @hide */
+ @IntDef(prefix = { "VISIBILITY_" }, value = {
+ VISIBILITY_NONE,
+ VISIBILITY_EXPLICIT,
+ VISIBILITY_IMPLICIT,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface InstantAppVisibility {}
/** Whether or not the intent filter is visible to instant apps. */
- private boolean mVisibleToInstantApp;
+ private @InstantAppVisibility int mInstantAppVisibility;
// These functions are the start of more optimized code for managing
// the string sets... not yet implemented.
@@ -452,7 +468,7 @@ public class IntentFilter implements Parcelable {
}
mHasPartialTypes = o.mHasPartialTypes;
mVerifyState = o.mVerifyState;
- mVisibleToInstantApp = o.mVisibleToInstantApp;
+ mInstantAppVisibility = o.mInstantAppVisibility;
}
/**
@@ -655,12 +671,24 @@ public class IntentFilter implements Parcelable {
}
/** @hide */
- public void setVisibleToInstantApp(boolean visibleToInstantApp) {
- mVisibleToInstantApp = visibleToInstantApp;
+ public void setVisibilityToInstantApp(@InstantAppVisibility int visibility) {
+ mInstantAppVisibility = visibility;
+ }
+ /** @hide */
+ public @InstantAppVisibility int getVisibilityToInstantApp() {
+ return mInstantAppVisibility;
}
/** @hide */
public boolean isVisibleToInstantApp() {
- return mVisibleToInstantApp;
+ return mInstantAppVisibility != VISIBILITY_NONE;
+ }
+ /** @hide */
+ public boolean isExplicitlyVisibleToInstantApp() {
+ return mInstantAppVisibility == VISIBILITY_EXPLICIT;
+ }
+ /** @hide */
+ public boolean isImplicitlyVisibleToInstantApp() {
+ return mInstantAppVisibility == VISIBILITY_IMPLICIT;
}
/**
@@ -1859,7 +1887,7 @@ public class IntentFilter implements Parcelable {
dest.writeInt(mPriority);
dest.writeInt(mHasPartialTypes ? 1 : 0);
dest.writeInt(getAutoVerify() ? 1 : 0);
- dest.writeInt(isVisibleToInstantApp() ? 1 : 0);
+ dest.writeInt(mInstantAppVisibility);
}
/**
@@ -1928,7 +1956,7 @@ public class IntentFilter implements Parcelable {
mPriority = source.readInt();
mHasPartialTypes = source.readInt() > 0;
setAutoVerify(source.readInt() > 0);
- setVisibleToInstantApp(source.readInt() > 0);
+ setVisibilityToInstantApp(source.readInt());
}
private final boolean findMimeType(String type) {
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index b01e6a156f95..0be0885c5bdc 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -17,6 +17,7 @@
package android.content.pm;
import android.annotation.IntDef;
+import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Configuration.NativeConfig;
import android.os.Parcel;
@@ -412,17 +413,33 @@ public class ActivityInfo extends ComponentInfo
public static final int FLAG_ALWAYS_FOCUSABLE = 0x40000;
/**
- * Bit in {@link #flags} indicating if the activity is visible to ephemeral applications.
+ * Bit in {@link #flags} indicating if the activity is visible to instant
+ * applications. The activity is visible if it's either implicitly or
+ * explicitly exposed.
* @hide
*/
- public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000;
+ public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000;
+
+ /**
+ * Bit in {@link #flags} indicating if the activity is implicitly visible
+ * to instant applications. Implicitly visible activities are those that
+ * implement certain intent-filters:
+ * <ul>
+ * <li>action {@link Intent#CATEGORY_BROWSABLE}</li>
+ * <li>action {@link Intent#ACTION_SEND}</li>
+ * <li>action {@link Intent#ACTION_SENDTO}</li>
+ * <li>action {@link Intent#ACTION_SEND_MULTIPLE}</li>
+ * </ul>
+ * @hide
+ */
+ public static final int FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP = 0x200000;
/**
* Bit in {@link #flags} indicating if the activity supports picture-in-picture mode.
* See {@link android.R.attr#supportsPictureInPicture}.
* @hide
*/
- public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x200000;
+ public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x400000;
/**
* @hide Bit in {@link #flags}: If set, this component will only be seen
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index ecaf7ebe07d2..d2468d97fdca 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -461,12 +461,20 @@ public abstract class PackageManager {
/**
* Internal {@link PackageInfo} flag: include only components that are exposed to
- * ephemeral apps.
+ * instant apps. Matched components may have been either explicitly or implicitly
+ * exposed.
* @hide
*/
public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000;
/**
+ * Internal {@link PackageInfo} flag: include only components that have been
+ * explicitly exposed to instant apps.
+ * @hide
+ */
+ public static final int MATCH_EXPLICITLY_VISIBLE_ONLY = 0x02000000;
+
+ /**
* Internal flag used to indicate that a system component has done their
* homework and verified that they correctly handle packages and components
* that come and go over time. In particular:
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 1f78bff9e1a7..e4db0f07b801 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -145,7 +145,12 @@ public class PackageParser {
private static final boolean DEBUG_PARSER = false;
private static final boolean DEBUG_BACKUP = false;
- private static final boolean MULTI_PACKAGE_APK_ENABLED = false;
+ private static final String PROPERTY_CHILD_PACKAGES_ENABLED =
+ "persist.sys.child_packages_enabled";
+
+ private static final boolean MULTI_PACKAGE_APK_ENABLED =
+ SystemProperties.getBoolean(PROPERTY_CHILD_PACKAGES_ENABLED, false);
+
private static final int MAX_PACKAGES_PER_APK = 5;
public static final int APK_SIGNING_UNKNOWN = 0;
@@ -4266,7 +4271,7 @@ public class PackageParser {
boolean visibleToEphemeral =
sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false);
if (visibleToEphemeral) {
- a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
owner.visibleToInstantApps = true;
}
@@ -4308,9 +4313,17 @@ public class PackageParser {
a.intents.add(intent);
}
// adjust activity flags when we implicitly expose it via a browsable filter
- intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent));
+ final int visibility = visibleToEphemeral
+ ? IntentFilter.VISIBILITY_EXPLICIT
+ : !receiver && isImplicitlyExposedIntent(intent)
+ ? IntentFilter.VISIBILITY_IMPLICIT
+ : IntentFilter.VISIBILITY_NONE;
+ intent.setVisibilityToInstantApp(visibility);
if (intent.isVisibleToInstantApp()) {
- a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+ }
+ if (intent.isImplicitlyVisibleToInstantApp()) {
+ a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
}
if (LOG_UNSAFE_BROADCASTS && receiver
&& (owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O)) {
@@ -4341,9 +4354,17 @@ public class PackageParser {
owner.preferredActivityFilters.add(intent);
}
// adjust activity flags when we implicitly expose it via a browsable filter
- intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent));
+ final int visibility = visibleToEphemeral
+ ? IntentFilter.VISIBILITY_EXPLICIT
+ : !receiver && isImplicitlyExposedIntent(intent)
+ ? IntentFilter.VISIBILITY_IMPLICIT
+ : IntentFilter.VISIBILITY_NONE;
+ intent.setVisibilityToInstantApp(visibility);
if (intent.isVisibleToInstantApp()) {
- a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+ }
+ if (intent.isImplicitlyVisibleToInstantApp()) {
+ a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
}
} else if (parser.getName().equals("meta-data")) {
if ((a.metaData = parseMetaData(res, parser, a.metaData,
@@ -4353,16 +4374,18 @@ public class PackageParser {
// we don't have an attribute [or it's false], but, we have meta-data
if (!visibleToEphemeral && a.metaData.getBoolean(META_DATA_INSTANT_APPS)) {
visibleToEphemeral = true; // set in case there are more intent filters
- a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+ a.info.flags &= ~ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
owner.visibleToInstantApps = true;
// cycle through any filters already seen
for (int i = a.intents.size() - 1; i >= 0; --i) {
- a.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/);
+ a.intents.get(i)
+ .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
}
if (owner.preferredActivityFilters != null) {
for (int i = owner.preferredActivityFilters.size() - 1; i >= 0; --i) {
owner.preferredActivityFilters.get(i)
- .setVisibleToInstantApp(true /*visibleToInstantApp*/);
+ .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
}
}
}
@@ -4640,7 +4663,7 @@ public class PackageParser {
// TODO add visibleToInstantApps attribute to activity alias
final boolean visibleToEphemeral =
- ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0);
+ ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0);
sa.recycle();
@@ -4668,13 +4691,20 @@ public class PackageParser {
+ mArchiveSourcePath + " "
+ parser.getPositionDescription());
} else {
- intent.setVisibleToInstantApp(
- visibleToEphemeral || isImplicitlyExposedIntent(intent));
a.intents.add(intent);
}
// adjust activity flags when we implicitly expose it via a browsable filter
+ final int visibility = visibleToEphemeral
+ ? IntentFilter.VISIBILITY_EXPLICIT
+ : isImplicitlyExposedIntent(intent)
+ ? IntentFilter.VISIBILITY_IMPLICIT
+ : IntentFilter.VISIBILITY_NONE;
+ intent.setVisibilityToInstantApp(visibility);
if (intent.isVisibleToInstantApp()) {
- a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+ }
+ if (intent.isImplicitlyVisibleToInstantApp()) {
+ a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
}
} else if (parser.getName().equals("meta-data")) {
if ((a.metaData=parseMetaData(res, parser, a.metaData,
@@ -4817,7 +4847,7 @@ public class PackageParser {
final boolean visibleToEphemeral =
sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false);
if (visibleToEphemeral) {
- p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP;
owner.visibleToInstantApps = true;
}
@@ -4869,12 +4899,11 @@ public class PackageParser {
intent, outError)) {
return false;
}
- outInfo.intents.add(intent);
- // adjust provider flags when we implicitly expose it via a browsable filter
- intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent));
- if (intent.isVisibleToInstantApp()) {
- outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ if (visibleToEphemeral) {
+ intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
+ outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP;
}
+ outInfo.intents.add(intent);
} else if (parser.getName().equals("meta-data")) {
if ((outInfo.metaData=parseMetaData(res, parser,
@@ -4884,11 +4913,12 @@ public class PackageParser {
// we don't have an attribute [or it's false], but, we have meta-data
if (!visibleToEphemeral && outInfo.metaData.getBoolean(META_DATA_INSTANT_APPS)) {
visibleToEphemeral = true; // set in case there are more intent filters
- outInfo.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP;
owner.visibleToInstantApps = true;
// cycle through any filters already seen
for (int i = outInfo.intents.size() - 1; i >= 0; --i) {
- outInfo.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/);
+ outInfo.intents.get(i)
+ .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
}
}
@@ -5144,7 +5174,7 @@ public class PackageParser {
boolean visibleToEphemeral =
sa.getBoolean(R.styleable.AndroidManifestService_visibleToInstantApps, false);
if (visibleToEphemeral) {
- s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP;
owner.visibleToInstantApps = true;
}
@@ -5175,10 +5205,9 @@ public class PackageParser {
intent, outError)) {
return null;
}
- // adjust activity flags when we implicitly expose it via a browsable filter
- intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent));
- if (intent.isVisibleToInstantApp()) {
- s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ if (visibleToEphemeral) {
+ intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
+ s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP;
}
s.intents.add(intent);
} else if (parser.getName().equals("meta-data")) {
@@ -5189,11 +5218,12 @@ public class PackageParser {
// we don't have an attribute [or it's false], but, we have meta-data
if (!visibleToEphemeral && s.metaData.getBoolean(META_DATA_INSTANT_APPS)) {
visibleToEphemeral = true; // set in case there are more intent filters
- s.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
+ s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP;
owner.visibleToInstantApps = true;
// cycle through any filters already seen
for (int i = s.intents.size() - 1; i >= 0; --i) {
- s.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/);
+ s.intents.get(i)
+ .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
}
}
} else {
diff --git a/core/java/android/content/pm/ProviderInfo.java b/core/java/android/content/pm/ProviderInfo.java
index 8c21563198ab..91dc06e12138 100644
--- a/core/java/android/content/pm/ProviderInfo.java
+++ b/core/java/android/content/pm/ProviderInfo.java
@@ -79,7 +79,7 @@ public final class ProviderInfo extends ComponentInfo
* Bit in {@link #flags} indicating if the provider is visible to ephemeral applications.
* @hide
*/
- public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000;
+ public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000;
/**
* Bit in {@link #flags}: If set, a single instance of the provider will
diff --git a/core/java/android/content/pm/ServiceInfo.java b/core/java/android/content/pm/ServiceInfo.java
index f0766beb5d3f..c683ea5d9739 100644
--- a/core/java/android/content/pm/ServiceInfo.java
+++ b/core/java/android/content/pm/ServiceInfo.java
@@ -59,7 +59,7 @@ public class ServiceInfo extends ComponentInfo
* Bit in {@link #flags} indicating if the service is visible to ephemeral applications.
* @hide
*/
- public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000;
+ public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000;
/**
* Bit in {@link #flags}: If set, a single instance of the service will
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 10c4cb3df89c..51506b00b892 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -285,17 +285,22 @@ public class SystemSensorManager extends SensorManager {
}
// Initialize a client for data_injection.
if (sInjectEventQueue == null) {
- sInjectEventQueue = new InjectEventQueue(mMainLooper, this,
- mContext.getPackageName());
+ try {
+ sInjectEventQueue = new InjectEventQueue(
+ mMainLooper, this, mContext.getPackageName());
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Cannot create InjectEventQueue: " + e);
+ }
}
+ return sInjectEventQueue != null;
} else {
// If data injection is being disabled clean up the native resources.
if (sInjectEventQueue != null) {
sInjectEventQueue.dispose();
sInjectEventQueue = null;
}
+ return true;
}
- return true;
}
}
@@ -322,7 +327,10 @@ public class SystemSensorManager extends SensorManager {
if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) {
synchronized(mTriggerListeners) {
- for (TriggerEventListener l: mTriggerListeners.keySet()) {
+ HashMap<TriggerEventListener, TriggerEventQueue> triggerListeners =
+ new HashMap<TriggerEventListener, TriggerEventQueue>(mTriggerListeners);
+
+ for (TriggerEventListener l: triggerListeners.keySet()) {
if (DEBUG_DYNAMIC_SENSOR){
Log.i(TAG, "removed trigger listener" + l.toString() +
" due to sensor disconnection");
@@ -332,7 +340,10 @@ public class SystemSensorManager extends SensorManager {
}
} else {
synchronized(mSensorListeners) {
- for (SensorEventListener l: mSensorListeners.keySet()) {
+ HashMap<SensorEventListener, SensorEventQueue> sensorListeners =
+ new HashMap<SensorEventListener, SensorEventQueue>(mSensorListeners);
+
+ for (SensorEventListener l: sensorListeners.keySet()) {
if (DEBUG_DYNAMIC_SENSOR){
Log.i(TAG, "removed event listener" + l.toString() +
" due to sensor disconnection");
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index 7bfb5d08df7b..211d54d1673f 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -135,7 +135,7 @@ public abstract class CameraDevice implements AutoCloseable {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
- @IntDef(
+ @IntDef(prefix = {"TEMPLATE_"}, value =
{TEMPLATE_PREVIEW,
TEMPLATE_STILL_CAPTURE,
TEMPLATE_RECORD,
@@ -757,7 +757,7 @@ public abstract class CameraDevice implements AutoCloseable {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
- @IntDef(
+ @IntDef(prefix = {"SESSION_OPERATION_MODE"}, value =
{SESSION_OPERATION_MODE_NORMAL,
SESSION_OPERATION_MODE_CONSTRAINED_HIGH_SPEED,
SESSION_OPERATION_MODE_VENDOR_START})
@@ -808,10 +808,9 @@ public abstract class CameraDevice implements AutoCloseable {
* create a builder specific for that device and template and override the
* settings as desired, instead.</p>
*
- * @param templateType An enumeration selecting the use case for this
- * request; one of the CameraDevice.TEMPLATE_ values. Not all template
- * types are supported on every device. See the documentation for each
- * template type for details.
+ * @param templateType An enumeration selecting the use case for this request. Not all template
+ * types are supported on every device. See the documentation for each template type for
+ * details.
* @return a builder for a capture request, initialized with default
* settings for that template, and no output streams
*
@@ -969,7 +968,7 @@ public abstract class CameraDevice implements AutoCloseable {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
- @IntDef(
+ @IntDef(prefix = {"ERROR_"}, value =
{ERROR_CAMERA_IN_USE,
ERROR_MAX_CAMERAS_IN_USE,
ERROR_CAMERA_DISABLED,
@@ -1052,8 +1051,7 @@ public abstract class CameraDevice implements AutoCloseable {
* this happens. Further attempts at recovery are error-code specific.</p>
*
* @param camera The device reporting the error
- * @param error The error code, one of the
- * {@code StateCallback.ERROR_*} values.
+ * @param error The error code.
*
* @see #ERROR_CAMERA_IN_USE
* @see #ERROR_MAX_CAMERAS_IN_USE
diff --git a/core/java/android/hardware/camera2/CaptureFailure.java b/core/java/android/hardware/camera2/CaptureFailure.java
index 8bb33f1af44c..fbe0839ddc37 100644
--- a/core/java/android/hardware/camera2/CaptureFailure.java
+++ b/core/java/android/hardware/camera2/CaptureFailure.java
@@ -51,7 +51,7 @@ public class CaptureFailure {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
- @IntDef(
+ @IntDef(prefix = {"REASON_"}, value =
{REASON_ERROR,
REASON_FLUSHED })
public @interface FailureReason {};
@@ -119,7 +119,7 @@ public class CaptureFailure {
* Determine why the request was dropped, whether due to an error or to a user
* action.
*
- * @return int One of {@code REASON_*} integer constants.
+ * @return int The reason code.
*
* @see #REASON_ERROR
* @see #REASON_FLUSHED
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index ae92457b6dd2..b2a2aafac6da 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -17,9 +17,9 @@
package android.hardware.usb;
-import com.android.internal.util.Preconditions;
-
import android.annotation.Nullable;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
@@ -30,6 +30,8 @@ import android.os.Process;
import android.os.RemoteException;
import android.util.Log;
+import com.android.internal.util.Preconditions;
+
import java.util.HashMap;
/**
@@ -109,6 +111,7 @@ public class UsbManager {
* for the attached device
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_USB_DEVICE_ATTACHED =
"android.hardware.usb.action.USB_DEVICE_ATTACHED";
@@ -121,6 +124,7 @@ public class UsbManager {
* for the detached device
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_USB_DEVICE_DETACHED =
"android.hardware.usb.action.USB_DEVICE_DETACHED";
@@ -133,6 +137,7 @@ public class UsbManager {
* for the attached accessory
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_USB_ACCESSORY_ATTACHED =
"android.hardware.usb.action.USB_ACCESSORY_ATTACHED";
@@ -145,6 +150,7 @@ public class UsbManager {
* for the attached accessory that was detached
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_USB_ACCESSORY_DETACHED =
"android.hardware.usb.action.USB_ACCESSORY_DETACHED";
diff --git a/core/java/android/net/INetworkRecommendationProvider.aidl b/core/java/android/net/INetworkRecommendationProvider.aidl
index 052c92c0309f..cde0185d2288 100644
--- a/core/java/android/net/INetworkRecommendationProvider.aidl
+++ b/core/java/android/net/INetworkRecommendationProvider.aidl
@@ -17,8 +17,6 @@
package android.net;
import android.net.NetworkKey;
-import android.net.RecommendationRequest;
-import android.os.IRemoteCallback;
/**
* The service responsible for answering network recommendation requests.
@@ -27,20 +25,6 @@ import android.os.IRemoteCallback;
oneway interface INetworkRecommendationProvider {
/**
- * Request a recommendation for the best network to connect to
- * taking into account the inputs from the {@link RecommendationRequest}.
- *
- * @param request a {@link RecommendationRequest} instance containing the details of the request
- * @param callback a {@link IRemoteCallback} instance to invoke when the recommendation
- * is available
- * @param sequence an internal number used for tracking the request
- * @hide
- */
- void requestRecommendation(in RecommendationRequest request,
- in IRemoteCallback callback,
- int sequence);
-
- /**
* Request scoring for networks.
*
* Implementations should use {@link NetworkScoreManager#updateScores(ScoredNetwork[])} to
diff --git a/core/java/android/net/INetworkScoreService.aidl b/core/java/android/net/INetworkScoreService.aidl
index 362ea9d6bc54..73e52c89dcc4 100644
--- a/core/java/android/net/INetworkScoreService.aidl
+++ b/core/java/android/net/INetworkScoreService.aidl
@@ -19,10 +19,7 @@ package android.net;
import android.net.INetworkScoreCache;
import android.net.NetworkKey;
import android.net.NetworkScorerAppData;
-import android.net.RecommendationRequest;
-import android.net.RecommendationResult;
import android.net.ScoredNetwork;
-import android.os.RemoteCallback;
/**
* A service for updating network scores from a network scorer application.
@@ -81,16 +78,6 @@ interface INetworkScoreService
void unregisterNetworkScoreCache(int networkType, INetworkScoreCache scoreCache);
/**
- * Request a recommendation for the best network to connect to
- * taking into account the inputs from the {@link RecommendationRequest}.
- *
- * @param request a {@link RecommendationRequest} instance containing the details of the request
- * @return a {@link RecommendationResult} containing the recommended network to connect to
- * @throws SecurityException if the caller is not the system
- */
- RecommendationResult requestRecommendation(in RecommendationRequest request);
-
- /**
* Request scoring for networks.
*
* Implementations should delegate to the registered network recommendation provider or
@@ -119,18 +106,6 @@ interface INetworkScoreService
* scorer.
*/
String getActiveScorerPackage();
-
- /**
- * Request a recommendation for the best network to connect to
- * taking into account the inputs from the {@link RecommendationRequest}.
- *
- * @param request a {@link RecommendationRequest} instance containing the details of the request
- * @param remoteCallback a {@link RemoteCallback} instance to invoke when the recommendation
- * is available.
- * @throws SecurityException if the caller is not the system
- */
- oneway void requestRecommendationAsync(in RecommendationRequest request,
- in RemoteCallback remoteCallback);
/**
* Returns metadata about the active scorer or <code>null</code> if there is no active scorer.
diff --git a/core/java/android/net/IpSecAlgorithm.java b/core/java/android/net/IpSecAlgorithm.java
index ce7894fb3ba1..48b095d9b77b 100644
--- a/core/java/android/net/IpSecAlgorithm.java
+++ b/core/java/android/net/IpSecAlgorithm.java
@@ -24,6 +24,8 @@ import java.lang.annotation.RetentionPolicy;
/**
* IpSecAlgorithm specifies a single algorithm that can be applied to an IpSec Transform. Refer to
* RFC 4301.
+ *
+ * @hide
*/
public final class IpSecAlgorithm implements Parcelable {
diff --git a/core/java/android/net/IpSecManager.java b/core/java/android/net/IpSecManager.java
index 375b7eeb013a..114e46e54fe7 100644
--- a/core/java/android/net/IpSecManager.java
+++ b/core/java/android/net/IpSecManager.java
@@ -37,6 +37,8 @@ import java.net.Socket;
* <p>An IpSecManager may be obtained by calling {@link
* android.content.Context#getSystemService(String) Context#getSystemService(String)} with {@link
* android.content.Context#IPSEC_SERVICE Context#IPSEC_SERVICE}
+ *
+ * @hide
*/
public final class IpSecManager {
private static final String TAG = "IpSecManager";
diff --git a/core/java/android/net/IpSecTransform.java b/core/java/android/net/IpSecTransform.java
index 801e98c7b138..639d1f2689f4 100644
--- a/core/java/android/net/IpSecTransform.java
+++ b/core/java/android/net/IpSecTransform.java
@@ -45,6 +45,8 @@ import java.net.InetAddress;
*
* <p>An IpSecTransform may either represent a tunnel mode transform that operates on a wide array
* of traffic or may represent a transport mode transform operating on a Socket or Sockets.
+ *
+ * @hide
*/
public final class IpSecTransform implements AutoCloseable {
private static final String TAG = "IpSecTransform";
diff --git a/core/java/android/net/NetworkRecommendationProvider.java b/core/java/android/net/NetworkRecommendationProvider.java
index af0459d63718..1eaa1f90d64c 100644
--- a/core/java/android/net/NetworkRecommendationProvider.java
+++ b/core/java/android/net/NetworkRecommendationProvider.java
@@ -39,10 +39,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
public abstract class NetworkRecommendationProvider {
private static final String TAG = "NetworkRecProvider";
private static final boolean VERBOSE = Build.IS_DEBUGGABLE && Log.isLoggable(TAG, Log.VERBOSE);
- /** The key into the callback Bundle where the RecommendationResult will be found. */
+ /** The key into the callback Bundle where the RecommendationResult will be found.
+ * @deprecated to be removed.
+ */
public static final String EXTRA_RECOMMENDATION_RESULT =
"android.net.extra.RECOMMENDATION_RESULT";
- /** The key into the callback Bundle where the sequence will be found. */
+ /** The key into the callback Bundle where the sequence will be found.
+ * @deprecated to be removed.
+ */
public static final String EXTRA_SEQUENCE = "android.net.extra.SEQUENCE";
private final IBinder mService;
@@ -77,9 +81,9 @@ public abstract class NetworkRecommendationProvider {
* @param callback a {@link ResultCallback} instance. When a {@link RecommendationResult} is
* available it must be passed into
* {@link ResultCallback#onResult(RecommendationResult)}.
+ * @deprecated to be removed.
*/
- public abstract void onRequestRecommendation(RecommendationRequest request,
- ResultCallback callback);
+ public void onRequestRecommendation(RecommendationRequest request, ResultCallback callback) {}
/**
* Invoked when network scores have been requested.
@@ -101,6 +105,8 @@ public abstract class NetworkRecommendationProvider {
/**
* A callback implementing applications should invoke when a {@link RecommendationResult}
* is available.
+ *
+ * @deprecated to be removed.
*/
public static class ResultCallback {
private final IRemoteCallback mCallback;
@@ -176,23 +182,6 @@ public abstract class NetworkRecommendationProvider {
}
@Override
- public void requestRecommendation(final RecommendationRequest request,
- final IRemoteCallback callback, final int sequence) throws RemoteException {
- enforceCallingPermission();
- if (VERBOSE) Log.v(TAG, "requestRecommendation(seq=" + sequence + ")");
- execute(new Runnable() {
- @Override
- public void run() {
- if (VERBOSE) {
- Log.v(TAG, "requestRecommendation(seq=" + sequence + ") running...");
- }
- ResultCallback resultCallback = new ResultCallback(callback, sequence);
- onRequestRecommendation(request, resultCallback);
- }
- });
- }
-
- @Override
public void requestScores(final NetworkKey[] networks) throws RemoteException {
enforceCallingPermission();
if (networks != null && networks.length > 0) {
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
index 29483cd98bd1..eeb426a4bcf9 100644
--- a/core/java/android/net/NetworkScoreManager.java
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -428,14 +428,11 @@ public class NetworkScoreManager {
* @throws SecurityException if the caller does not hold the
* {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} permission.
* @hide
+ * @deprecated to be removed.
*/
public RecommendationResult requestRecommendation(RecommendationRequest request)
throws SecurityException {
- try {
- return mService.requestRecommendation(request);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ return null;
}
/**
@@ -452,43 +449,4 @@ public class NetworkScoreManager {
throw e.rethrowFromSystemServer();
}
}
-
- /**
- * Request a recommendation for which network to connect to.
- *
- * <p>The callback will be run on the thread associated with provided {@link Handler}.
- *
- * @param request a {@link RecommendationRequest} instance containing additional
- * request details
- * @param handler a {@link Handler} instance representing the thread to complete the future on.
- * If null the responding binder thread will be used.
- * @return a {@link CompletableFuture} instance that will eventually receive the
- * {@link RecommendationResult}.
- * @throws SecurityException
- * @hide
- */
- public CompletableFuture<RecommendationResult> requestRecommendation(
- final @NonNull RecommendationRequest request,
- final @Nullable Handler handler) {
- Preconditions.checkNotNull(request, "RecommendationRequest cannot be null.");
-
- final CompletableFuture<RecommendationResult> futureResult =
- new CompletableFuture<>();
-
- RemoteCallback remoteCallback = new RemoteCallback(new RemoteCallback.OnResultListener() {
- @Override
- public void onResult(Bundle data) {
- RecommendationResult result = data.getParcelable(EXTRA_RECOMMENDATION_RESULT);
- futureResult.complete(result);
- }
- }, handler);
-
- try {
- mService.requestRecommendationAsync(request, remoteCallback);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
-
- return futureResult;
- }
}
diff --git a/core/java/android/net/RecommendationRequest.aidl b/core/java/android/net/RecommendationRequest.aidl
deleted file mode 100644
index 76497b8a2270..000000000000
--- a/core/java/android/net/RecommendationRequest.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Copyright (c) 2016, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-parcelable RecommendationRequest;
diff --git a/core/java/android/net/RecommendationRequest.java b/core/java/android/net/RecommendationRequest.java
index 9f97c5a79506..45ee3a5283dd 100644
--- a/core/java/android/net/RecommendationRequest.java
+++ b/core/java/android/net/RecommendationRequest.java
@@ -30,6 +30,7 @@ import com.android.internal.annotations.VisibleForTesting;
*
* @see {@link NetworkScoreManager#requestRecommendation(RecommendationRequest)}.
* @hide
+ * @deprecated to be removed.
*/
@SystemApi
public final class RecommendationRequest implements Parcelable {
@@ -43,6 +44,7 @@ public final class RecommendationRequest implements Parcelable {
/**
* Builder class for constructing {@link RecommendationRequest} instances.
* @hide
+ * @deprecated to be removed.
*/
@SystemApi
public static final class Builder {
diff --git a/core/java/android/net/RecommendationResult.aidl b/core/java/android/net/RecommendationResult.aidl
deleted file mode 100644
index f36995b8cc68..000000000000
--- a/core/java/android/net/RecommendationResult.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Copyright (c) 2016, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-parcelable RecommendationResult;
diff --git a/core/java/android/net/RecommendationResult.java b/core/java/android/net/RecommendationResult.java
index 70cf09c7df5b..ce4d83af3f01 100644
--- a/core/java/android/net/RecommendationResult.java
+++ b/core/java/android/net/RecommendationResult.java
@@ -31,6 +31,7 @@ import com.android.internal.util.Preconditions;
*
* @see {@link NetworkScoreManager#requestRecommendation(RecommendationRequest)}.
* @hide
+ * @deprecated to be removed.
*/
@SystemApi
public final class RecommendationResult implements Parcelable {
diff --git a/core/java/android/os/DropBoxManager.java b/core/java/android/os/DropBoxManager.java
index cb85eef5724f..db84b6fbf3c5 100644
--- a/core/java/android/os/DropBoxManager.java
+++ b/core/java/android/os/DropBoxManager.java
@@ -16,6 +16,8 @@
package android.os;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.content.Context;
import android.util.Log;
@@ -67,6 +69,7 @@ public class DropBoxManager {
* <p class="note">This is a protected intent that can only be sent
* by the system.
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_DROPBOX_ENTRY_ADDED =
"android.intent.action.DROPBOX_ENTRY_ADDED";
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index 7496cb28f046..2179bd45e303 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -17,8 +17,6 @@
package android.preference;
import android.annotation.CallSuper;
-import com.android.internal.util.CharSequences;
-
import android.annotation.DrawableRes;
import android.annotation.LayoutRes;
import android.annotation.Nullable;
@@ -42,6 +40,8 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
+import com.android.internal.util.CharSequences;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -650,7 +650,11 @@ public class Preference implements Comparable<Preference> {
final View imageFrame = view.findViewById(com.android.internal.R.id.icon_frame);
if (imageFrame != null) {
- imageFrame.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
+ if (mIcon != null) {
+ imageFrame.setVisibility(View.VISIBLE);
+ } else {
+ imageFrame.setVisibility(mIconSpaceReserved ? View.INVISIBLE : View.GONE);
+ }
}
if (mShouldDisableView) {
diff --git a/core/java/android/provider/Contacts.java b/core/java/android/provider/Contacts.java
index b31b2950f597..42d5ce168fa9 100644
--- a/core/java/android/provider/Contacts.java
+++ b/core/java/android/provider/Contacts.java
@@ -18,6 +18,8 @@ package android.provider;
import com.android.internal.R;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
@@ -2164,6 +2166,7 @@ public class Contacts {
* @deprecated Do not use. This is not supported.
*/
@Deprecated
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String FILTER_CONTACTS_ACTION =
"com.android.contacts.action.FILTER_CONTACTS";
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index b4f19d897b59..5408e1319e36 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -17,6 +17,8 @@
package android.provider;
import android.accounts.Account;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.app.Activity;
import android.content.BroadcastReceiver;
@@ -8401,6 +8403,7 @@ public final class ContactsContract {
* Action used to launch the system contacts application and bring up a QuickContact dialog
* for the provided {@link Contacts} entry.
*/
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_QUICK_CONTACT =
"android.provider.action.QUICK_CONTACT";
@@ -8924,6 +8927,7 @@ public final class ContactsContract {
* @see #METADATA_ACCOUNT_TYPE
* @see #METADATA_MIMETYPE
*/
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_VOICE_SEND_MESSAGE_TO_CONTACTS =
"android.provider.action.VOICE_SEND_MESSAGE_TO_CONTACTS";
diff --git a/graphics/java/android/graphics/fonts/FontRequest.java b/core/java/android/provider/FontRequest.java
index df3951c80b8e..34114bcce195 100644
--- a/graphics/java/android/graphics/fonts/FontRequest.java
+++ b/core/java/android/provider/FontRequest.java
@@ -13,11 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.graphics.fonts;
+package android.provider;
import android.annotation.NonNull;
-import android.os.Parcel;
-import android.os.Parcelable;
import android.util.Base64;
import com.android.internal.util.Preconditions;
@@ -29,7 +27,7 @@ import java.util.List;
/**
* Information about a font request that may be sent to a Font Provider.
*/
-public final class FontRequest implements Parcelable {
+public final class FontRequest {
private final String mProviderAuthority;
private final String mProviderPackage;
private final String mQuery;
@@ -115,42 +113,6 @@ public final class FontRequest implements Parcelable {
}
@Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(mProviderAuthority);
- dest.writeString(mProviderPackage);
- dest.writeString(mQuery);
- dest.writeList(mCertificates);
- }
-
- private FontRequest(Parcel in) {
- mProviderAuthority = in.readString();
- mProviderPackage = in.readString();
- mQuery = in.readString();
- mCertificates = new ArrayList<>();
- in.readList(mCertificates, null);
- mIdentifier = new StringBuilder(mProviderAuthority).append("-").append(mProviderPackage)
- .append("-").append(mQuery).toString();
- }
-
- public static final Parcelable.Creator<FontRequest> CREATOR =
- new Parcelable.Creator<FontRequest>() {
- @Override
- public FontRequest createFromParcel(Parcel in) {
- return new FontRequest(in);
- }
-
- @Override
- public FontRequest[] newArray(int size) {
- return new FontRequest[size];
- }
- };
-
- @Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("FontRequest {"
diff --git a/core/java/android/provider/FontsContract.java b/core/java/android/provider/FontsContract.java
index 068628a6a783..6c038c787d59 100644
--- a/core/java/android/provider/FontsContract.java
+++ b/core/java/android/provider/FontsContract.java
@@ -32,8 +32,6 @@ import android.content.pm.ProviderInfo;
import android.content.pm.Signature;
import android.database.Cursor;
import android.graphics.Typeface;
-import android.graphics.fonts.FontRequest;
-import android.graphics.fonts.FontResult;
import android.graphics.fonts.FontVariationAxis;
import android.net.Uri;
import android.os.Bundle;
@@ -43,6 +41,7 @@ import android.os.HandlerThread;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.ResultReceiver;
+import android.util.ArraySet;
import android.util.Log;
import android.util.LruCache;
@@ -64,6 +63,13 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
/**
* Utility class to deal with Font ContentProviders.
@@ -104,14 +110,6 @@ public class FontsContract {
*/
public static final String VARIATION_SETTINGS = "font_variation_settings";
/**
- * DO NOT USE THIS COLUMN.
- * This column is kept for preventing demo apps.
- * TODO: Remove once nobody uses this column.
- * @hide
- * @removed
- */
- public static final String STYLE = "font_style";
- /**
* Constant used to request data from a font provider. The cursor returned from the query
* should have this column populated with the int weight for the resulting font. This value
* should be between 100 and 900. The most common values are 400 for regular weight and 700
@@ -158,36 +156,24 @@ public class FontsContract {
public static final int RESULT_CODE_MALFORMED_QUERY = 3;
}
- /**
- * Constant used to identify the List of {@link ParcelFileDescriptor} item in the Bundle
- * returned to the ResultReceiver in getFont.
- * @hide
- */
- public static final String PARCEL_FONT_RESULTS = "font_results";
- // Error codes internal to the system, which can not come from a provider. To keep the number
- // space open for new provider codes, these should all be negative numbers.
- /** @hide */
- public static final int RESULT_CODE_PROVIDER_NOT_FOUND = -1;
- /** @hide */
- public static final int RESULT_CODE_WRONG_CERTIFICATES = -2;
- // Note -3 is used by Typeface to indicate the font failed to load.
+ private static final Object sLock = new Object();
+ @GuardedBy("sLock")
+ private static Handler sHandler;
+ @GuardedBy("sLock")
+ private static HandlerThread sThread;
+ @GuardedBy("sLock")
+ private static Set<String> sInQueueSet;
- private static final int THREAD_RENEWAL_THRESHOLD_MS = 10000;
-
- private final Context mContext;
- private final PackageManager mPackageManager;
- private final Object mLock = new Object();
- @GuardedBy("mLock")
- private Handler mHandler;
- @GuardedBy("mLock")
- private HandlerThread mThread;
+ private volatile static Context sContext; // set once in setApplicationContextForResources
private static final LruCache<String, Typeface> sTypefaceCache = new LruCache<>(16);
+ private FontsContract() {
+ }
+
/** @hide */
- public FontsContract(Context context) {
- mContext = context.getApplicationContext();
- mPackageManager = mContext.getPackageManager();
+ public static void setApplicationContextForResources(Context context) {
+ sContext = context.getApplicationContext();
}
/**
@@ -320,90 +306,100 @@ public class FontsContract {
}
}
+ private static final int THREAD_RENEWAL_THRESHOLD_MS = 10000;
+
+ private static final long SYNC_FONT_FETCH_TIMEOUT_MS = 500;
+
// We use a background thread to post the content resolving work for all requests on. This
// thread should be quit/stopped after all requests are done.
- private final Runnable mReplaceDispatcherThreadRunnable = new Runnable() {
+ // TODO: Factor out to other class. Consider to switch MessageQueue.IdleHandler.
+ private static final Runnable sReplaceDispatcherThreadRunnable = new Runnable() {
@Override
public void run() {
- synchronized (mLock) {
- if (mThread != null) {
- mThread.quitSafely();
- mThread = null;
- mHandler = null;
+ synchronized (sLock) {
+ if (sThread != null) {
+ sThread.quitSafely();
+ sThread = null;
+ sHandler = null;
}
}
}
};
/** @hide */
- public void getFont(FontRequest request, ResultReceiver receiver) {
- synchronized (mLock) {
- if (mHandler == null) {
- mThread = new HandlerThread("fonts", Process.THREAD_PRIORITY_BACKGROUND);
- mThread.start();
- mHandler = new Handler(mThread.getLooper());
+ public static Typeface getFontSync(FontRequest request) {
+ final String id = request.getIdentifier();
+ Typeface cachedTypeface = sTypefaceCache.get(id);
+ if (cachedTypeface != null) {
+ return cachedTypeface;
+ }
+
+ // Unfortunately the typeface is not available at this time, but requesting from the font
+ // provider takes too much time. For now, request the font data to ensure it is in the cache
+ // next time and return.
+ synchronized (sLock) {
+ if (sHandler == null) {
+ sThread = new HandlerThread("fonts", Process.THREAD_PRIORITY_BACKGROUND);
+ sThread.start();
+ sHandler = new Handler(sThread.getLooper());
}
- mHandler.post(() -> {
- ProviderInfo providerInfo;
+ final Lock lock = new ReentrantLock();
+ final Condition cond = lock.newCondition();
+ final AtomicReference<Typeface> holder = new AtomicReference<>();
+ final AtomicBoolean waiting = new AtomicBoolean(true);
+ final AtomicBoolean timeout = new AtomicBoolean(false);
+
+ sHandler.post(() -> {
try {
- providerInfo = getProvider(mPackageManager, request);
- if (providerInfo == null) {
- receiver.send(RESULT_CODE_PROVIDER_NOT_FOUND, null);
- return;
+ FontFamilyResult result = fetchFonts(sContext, null, request);
+ if (result.getStatusCode() == FontFamilyResult.STATUS_OK) {
+ Typeface typeface = buildTypeface(sContext, null, result.getFonts());
+ if (typeface != null) {
+ sTypefaceCache.put(id, typeface);
+ }
+ holder.set(typeface);
}
- } catch (PackageManager.NameNotFoundException e) {
- receiver.send(RESULT_CODE_PROVIDER_NOT_FOUND, null);
- return;
+ } catch (NameNotFoundException e) {
+ // Ignore.
}
- FontInfo[] fonts;
+ lock.lock();
try {
- fonts = getFontFromProvider(mContext, request, providerInfo.authority,
- null /* cancellation signal */);
- } catch (InvalidFormatException e) {
- receiver.send(RESULT_CODE_PROVIDER_NOT_FOUND, null);
- return;
+ if (!timeout.get()) {
+ waiting.set(false);
+ cond.signal();
+ }
+ } finally {
+ lock.unlock();
}
+ });
+ sHandler.removeCallbacks(sReplaceDispatcherThreadRunnable);
+ sHandler.postDelayed(sReplaceDispatcherThreadRunnable, THREAD_RENEWAL_THRESHOLD_MS);
- ArrayList<FontResult> result = new ArrayList<>();
- int resultCode = -1;
- for (FontInfo font : fonts) {
+ long remaining = TimeUnit.MILLISECONDS.toNanos(SYNC_FONT_FETCH_TIMEOUT_MS);
+ lock.lock();
+ try {
+ if (!waiting.get()) {
+ return holder.get();
+ }
+ for (;;) {
try {
- resultCode = font.getResultCode();
- if (resultCode != Columns.RESULT_CODE_OK) {
- if (resultCode < 0) {
- // Negative values are reserved for the internal errors.
- resultCode = Columns.RESULT_CODE_FONT_NOT_FOUND;
- }
- for (int i = 0; i < result.size(); ++i) {
- try {
- result.get(i).getFileDescriptor().close();
- } catch (IOException e) {
- // Ignore, as we are closing fds for cleanup.
- }
- }
- receiver.send(resultCode, null);
- return;
- }
- ParcelFileDescriptor pfd = mContext.getContentResolver().openFileDescriptor(
- font.getUri(), "r");
- result.add(new FontResult(pfd, font.getTtcIndex(),
- FontVariationAxis.toFontVariationSettings(font.getAxes()),
- font.getWeight(), font.isItalic()));
- } catch (FileNotFoundException e) {
- Log.e(TAG, "FileNotFoundException raised when interacting with content "
- + "provider " + providerInfo.authority, e);
+ remaining = cond.awaitNanos(remaining);
+ } catch (InterruptedException e) {
+ // do nothing.
+ }
+ if (!waiting.get()) {
+ return holder.get();
+ }
+ if (remaining <= 0) {
+ timeout.set(true);
+ Log.w(TAG, "Remote font fetch timed out: " +
+ request.getProviderAuthority() + "/" + request.getQuery());
+ return null;
}
}
- if (!result.isEmpty()) {
- Bundle bundle = new Bundle();
- bundle.putParcelableArrayList(PARCEL_FONT_RESULTS, result);
- receiver.send(Columns.RESULT_CODE_OK, bundle);
- return;
- }
- receiver.send(Columns.RESULT_CODE_FONT_NOT_FOUND, null);
- });
- mHandler.removeCallbacks(mReplaceDispatcherThreadRunnable);
- mHandler.postDelayed(mReplaceDispatcherThreadRunnable, THREAD_RENEWAL_THRESHOLD_MS);
+ } finally {
+ lock.unlock();
+ }
}
}
@@ -415,12 +411,12 @@ public class FontsContract {
* Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the given
* provider was not found on the device.
*/
- public static final int FAIL_REASON_PROVIDER_NOT_FOUND = RESULT_CODE_PROVIDER_NOT_FOUND;
+ public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1;
/**
* Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the given
* provider must be authenticated and the given certificates do not match its signature.
*/
- public static final int FAIL_REASON_WRONG_CERTIFICATES = RESULT_CODE_WRONG_CERTIFICATES;
+ public static final int FAIL_REASON_WRONG_CERTIFICATES = -2;
/**
* Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the font
* returned by the provider was not loaded properly.
@@ -452,16 +448,14 @@ public class FontsContract {
public FontRequestCallback() {}
/**
- * Called then a Typeface request done via {@link Typeface#create(FontRequest,
- * FontRequestCallback)} is complete. Note that this method will not be called if
- * {@link #onTypefaceRequestFailed(int)} is called instead.
+ * Called then a Typeface request done via {@link #requestFont} is complete. Note that this
+ * method will not be called if {@link #onTypefaceRequestFailed(int)} is called instead.
* @param typeface The Typeface object retrieved.
*/
public void onTypefaceRetrieved(Typeface typeface) {}
/**
- * Called when a Typeface request done via {@link Typeface#create(FontRequest,
- * FontRequestCallback)} fails.
+ * Called when a Typeface request done via {@link #requestFont}} fails.
* @param reason One of {@link #FAIL_REASON_PROVIDER_NOT_FOUND},
* {@link #FAIL_REASON_FONT_NOT_FOUND},
* {@link #FAIL_REASON_FONT_LOAD_ERROR},
@@ -487,11 +481,15 @@ public class FontsContract {
* @param context A context to be used for fetching from font provider.
* @param request A {@link FontRequest} object that identifies the provider and query for the
* request. May not be null.
- * @param callback A callback that will be triggered when results are obtained. May not be null.
* @param handler A handler to be processed the font fetching.
+ * @param cancellationSignal A signal to cancel the operation in progress, or null if none. If
+ * the operation is canceled, then {@link
+ * android.os.OperationCanceledException} will be thrown.
+ * @param callback A callback that will be triggered when results are obtained. May not be null.
*/
- public static void requestFont(@NonNull Context context, @NonNull FontRequest request,
- @NonNull FontRequestCallback callback, @NonNull Handler handler) {
+ public static void requestFonts(@NonNull Context context, @NonNull FontRequest request,
+ @NonNull Handler handler, @Nullable CancellationSignal cancellationSignal,
+ @NonNull FontRequestCallback callback) {
final Handler callerThreadHandler = new Handler();
final Typeface cachedTypeface = sTypefaceCache.get(request.getIdentifier());
@@ -503,7 +501,7 @@ public class FontsContract {
handler.post(() -> {
FontFamilyResult result;
try {
- result = fetchFonts(context, null /* cancellation signal */, request);
+ result = fetchFonts(context, cancellationSignal, request);
} catch (NameNotFoundException e) {
callerThreadHandler.post(() -> callback.onTypefaceRequestFailed(
FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND));
@@ -558,7 +556,7 @@ public class FontsContract {
}
}
- final Typeface typeface = buildTypeface(context, null /* cancellation signal */, fonts);
+ final Typeface typeface = buildTypeface(context, cancellationSignal, fonts);
if (typeface == null) {
// Something went wrong during reading font files. This happens if the given font
// file is an unsupported font type.
@@ -635,6 +633,9 @@ public class FontsContract {
}
final Map<Uri, ByteBuffer> uriBuffer =
prepareFontData(context, fonts, cancellationSignal);
+ if (uriBuffer.isEmpty()) {
+ return null;
+ }
return new Typeface.Builder(fonts, uriBuffer)
.setFallback(fallbackFontName)
.setWeight(weight)
@@ -662,6 +663,9 @@ public class FontsContract {
}
final Map<Uri, ByteBuffer> uriBuffer =
prepareFontData(context, fonts, cancellationSignal);
+ if (uriBuffer.isEmpty()) {
+ return null;
+ }
return new Typeface.Builder(fonts, uriBuffer).build();
}
@@ -692,11 +696,17 @@ public class FontsContract {
ByteBuffer buffer = null;
try (final ParcelFileDescriptor pfd =
- resolver.openFileDescriptor(uri, "r", cancellationSignal);
- final FileInputStream fis = new FileInputStream(pfd.getFileDescriptor())) {
- final FileChannel fileChannel = fis.getChannel();
- final long size = fileChannel.size();
- buffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+ resolver.openFileDescriptor(uri, "r", cancellationSignal)) {
+ if (pfd != null) {
+ try (final FileInputStream fis =
+ new FileInputStream(pfd.getFileDescriptor())) {
+ final FileChannel fileChannel = fis.getChannel();
+ final long size = fileChannel.size();
+ buffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
} catch (IOException e) {
// ignore
}
@@ -793,7 +803,7 @@ public class FontsContract {
.build();
try (Cursor cursor = context.getContentResolver().query(uri, new String[] { Columns._ID,
Columns.FILE_ID, Columns.TTC_INDEX, Columns.VARIATION_SETTINGS,
- Columns.STYLE, Columns.WEIGHT, Columns.ITALIC, Columns.RESULT_CODE },
+ Columns.WEIGHT, Columns.ITALIC, Columns.RESULT_CODE },
"query = ?", new String[] { request.getQuery() }, null, cancellationSignal);) {
// TODO: Should we restrict the amount of fonts that can be returned?
// TODO: Write documentation explaining that all results should be from the same family.
@@ -806,7 +816,6 @@ public class FontsContract {
final int vsColumnIndex = cursor.getColumnIndex(Columns.VARIATION_SETTINGS);
final int weightColumnIndex = cursor.getColumnIndex(Columns.WEIGHT);
final int italicColumnIndex = cursor.getColumnIndex(Columns.ITALIC);
- final int styleColumnIndex = cursor.getColumnIndex(Columns.STYLE);
while (cursor.moveToNext()) {
int resultCode = resultCodeColumnIndex != -1
? cursor.getInt(resultCodeColumnIndex) : Columns.RESULT_CODE_OK;
@@ -823,17 +832,11 @@ public class FontsContract {
long id = cursor.getLong(fileIdColumnIndex);
fileUri = ContentUris.withAppendedId(fileBaseUri, id);
}
- // TODO: Stop using STYLE column and enforce WEIGHT/ITALIC column.
int weight;
boolean italic;
if (weightColumnIndex != -1 && italicColumnIndex != -1) {
weight = cursor.getInt(weightColumnIndex);
italic = cursor.getInt(italicColumnIndex) == 1;
- } else if (styleColumnIndex != -1) {
- final int style = cursor.getInt(styleColumnIndex);
- weight = (style & Typeface.BOLD) != 0 ?
- Typeface.Builder.BOLD_WEIGHT : Typeface.Builder.NORMAL_WEIGHT;
- italic = (style & Typeface.ITALIC) != 0;
} else {
weight = Typeface.Builder.NORMAL_WEIGHT;
italic = false;
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 93adf83cbea9..13e1e26b51c3 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -1498,6 +1498,7 @@ public final class MediaStore {
* May also contain the extra EXTRA_MAX_BYTES.
* @see #EXTRA_MAX_BYTES
*/
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String RECORD_SOUND_ACTION =
"android.provider.MediaStore.RECORD_SOUND";
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 088448007df2..cbd41c365188 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1398,6 +1398,26 @@ public final class Settings {
public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS
= "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
+ /**
+ * Activity Action: Show screen that let user select its Autofill Service.
+ * <p>
+ * Input: Intent's data URI set with an application name, using the
+ * "package" schema (like "package:com.my.app").
+ *
+ * <p>
+ * Output: {@link android.app.Activity#RESULT_OK} if user selected an Autofill Service belonging
+ * to the caller package.
+ *
+ * <p>
+ * <b>NOTE: </b> applications should call
+ * {@link android.view.autofill.AutofillManager#hasEnabledAutofillServices()} and
+ * {@link android.view.autofill.AutofillManager#isAutofillSupported()} first, and only
+ * broadcast this intent if they return {@code false} and {@code true} respectively.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_REQUEST_SET_AUTOFILL_SERVICE =
+ "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
+
// End of Intent actions for Settings
/**
@@ -5555,76 +5575,6 @@ public final class Settings {
"high_text_contrast_enabled";
/**
- * If injection of accessibility enhancing JavaScript screen-reader
- * is enabled.
- * <p>
- * Note: The JavaScript based screen-reader is served by the
- * Google infrastructure and enable users with disabilities to
- * efficiently navigate in and explore web content.
- * </p>
- * <p>
- * This property represents a boolean value.
- * </p>
- * @hide
- */
- public static final String ACCESSIBILITY_SCRIPT_INJECTION =
- "accessibility_script_injection";
-
- /**
- * The URL for the injected JavaScript based screen-reader used
- * for providing accessibility of content in WebView.
- * <p>
- * Note: The JavaScript based screen-reader is served by the
- * Google infrastructure and enable users with disabilities to
- * efficiently navigate in and explore web content.
- * </p>
- * <p>
- * This property represents a string value.
- * </p>
- * @hide
- */
- public static final String ACCESSIBILITY_SCREEN_READER_URL =
- "accessibility_script_injection_url";
-
- /**
- * Key bindings for navigation in built-in accessibility support for web content.
- * <p>
- * Note: These key bindings are for the built-in accessibility navigation for
- * web content which is used as a fall back solution if JavaScript in a WebView
- * is not enabled or the user has not opted-in script injection from Google.
- * </p>
- * <p>
- * The bindings are separated by semi-colon. A binding is a mapping from
- * a key to a sequence of actions (for more details look at
- * android.webkit.AccessibilityInjector). A key is represented as the hexademical
- * string representation of an integer obtained from a meta state (optional) shifted
- * sixteen times left and bitwise ored with a key code. An action is represented
- * as a hexademical string representation of an integer where the first two digits
- * are navigation action index, the second, the third, and the fourth digit pairs
- * represent the action arguments. The separate actions in a binding are colon
- * separated. The key and the action sequence it maps to are separated by equals.
- * </p>
- * <p>
- * For example, the binding below maps the DPAD right button to traverse the
- * current navigation axis once without firing an accessibility event and to
- * perform the same traversal again but to fire an event:
- * <code>
- * 0x16=0x01000100:0x01000101;
- * </code>
- * </p>
- * <p>
- * The goal of this binding is to enable dynamic rebinding of keys to
- * navigation actions for web content without requiring a framework change.
- * </p>
- * <p>
- * This property represents a string value.
- * </p>
- * @hide
- */
- public static final String ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS =
- "accessibility_web_content_key_bindings";
-
- /**
* Setting that specifies whether the display magnification is enabled via a system-wide
* triple tap gesture. Display magnifications allows the user to zoom in the display content
* and is targeted to low vision users. The current magnification scale is controlled by
@@ -6993,9 +6943,8 @@ public final class Settings {
ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED,
+ AUTOFILL_SERVICE,
ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
- ACCESSIBILITY_SCRIPT_INJECTION,
- ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
ENABLED_ACCESSIBILITY_SERVICES,
ENABLED_NOTIFICATION_LISTENERS,
ENABLED_VR_LISTENERS,
@@ -8352,16 +8301,6 @@ public final class Settings {
"network_recommendations_package";
/**
- * Value to specify if the Wi-Fi Framework should defer to
- * {@link com.android.server.NetworkScoreService} for evaluating saved open networks.
- *
- * Type: int (0 for false, 1 for true)
- * @hide
- */
- @SystemApi
- public static final String CURATE_SAVED_OPEN_NETWORKS = "curate_saved_open_networks";
-
- /**
* The package name of the application that connect and secures high quality open wifi
* networks automatically.
*
@@ -8376,6 +8315,7 @@ public final class Settings {
*
* Type: long
* @hide
+ * @deprecated to be removed
*/
public static final String NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS =
"network_recommendation_request_timeout_ms";
@@ -9877,7 +9817,6 @@ public final class Settings {
CHARGING_SOUNDS_ENABLED,
USB_MASS_STORAGE_ENABLED,
NETWORK_RECOMMENDATIONS_ENABLED,
- CURATE_SAVED_OPEN_NETWORKS,
WIFI_WAKEUP_ENABLED,
WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
USE_OPEN_WIFI_PACKAGE,
diff --git a/core/java/android/service/autofill/AutofillService.java b/core/java/android/service/autofill/AutofillService.java
index 503617803cf0..32b078f67e95 100644
--- a/core/java/android/service/autofill/AutofillService.java
+++ b/core/java/android/service/autofill/AutofillService.java
@@ -34,6 +34,7 @@ import android.view.autofill.AutofillManager;
import com.android.internal.os.SomeArgs;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -66,10 +67,6 @@ public abstract class AutofillService extends Service {
*/
public static final String SERVICE_META_DATA = "android.autofill";
- // Internal extras
- /** @hide */
- public static final String EXTRA_SESSION_ID = "android.service.autofill.extra.SESSION_ID";
-
// Handler messages.
private static final int MSG_CONNECT = 1;
private static final int MSG_DISCONNECT = 2;
@@ -118,7 +115,15 @@ public abstract class AutofillService extends Service {
final IFillCallback callback = (IFillCallback) args.arg3;
final FillCallback fillCallback = new FillCallback(callback, request.getId());
args.recycle();
- onFillRequest(request, cancellation, fillCallback);
+ // TODO(b/37563972): temporary try-catch hack to support old method
+ try {
+ onFillRequest(request, cancellation, fillCallback);
+ } catch (AbstractMethodError e) {
+ final ArrayList<FillContext> contexts = request.getFillContexts();
+ onFillRequest(contexts.get(contexts.size() - 1).getStructure(),
+ request.getClientState(), request.getFlags(), cancellation,
+ fillCallback);
+ }
break;
} case MSG_ON_SAVE_REQUEST: {
final SomeArgs args = (SomeArgs) msg.obj;
@@ -126,7 +131,14 @@ public abstract class AutofillService extends Service {
final ISaveCallback callback = (ISaveCallback) args.arg2;
final SaveCallback saveCallback = new SaveCallback(callback);
args.recycle();
- onSaveRequest(request, saveCallback);
+ // TODO(b/37563972): temporary try-catch hack to support old method
+ try {
+ onSaveRequest(request, saveCallback);
+ } catch (AbstractMethodError e) {
+ final List<FillContext> contexts = request.getFillContexts();
+ onSaveRequest(contexts.get(contexts.size() - 1).getStructure(),
+ request.getClientState(), saveCallback);
+ }
break;
} case MSG_DISCONNECT: {
onDisconnected();
@@ -183,11 +195,8 @@ public abstract class AutofillService extends Service {
* handling this fill request in order to save resources.
* @param callback object used to notify the result of the request.
*/
- public void onFillRequest(@NonNull FillRequest request,
- @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback) {
- onFillRequest(request.getStructure(), request.getClientState(), request.getFlags(),
- cancellationSignal, callback);
- }
+ public abstract void onFillRequest(@NonNull FillRequest request,
+ @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback);
/**
* Called by the Android system do decide if an {@link Activity} can be autofilled by the
@@ -210,11 +219,15 @@ public abstract class AutofillService extends Service {
* this to notify you that the fill result is no longer needed and you should stop
* handling this fill request in order to save resources.
* @param callback object used to notify the result of the request.
+ *
+ * @hide
*/
@Deprecated
- public abstract void onFillRequest(@NonNull AssistStructure structure, @Nullable Bundle data,
+ public void onFillRequest(@NonNull AssistStructure structure, @Nullable Bundle data,
int flags, @NonNull CancellationSignal cancellationSignal,
- @NonNull FillCallback callback);
+ @NonNull FillCallback callback) {
+
+ }
/**
* Called when user requests service to save the fields of an {@link Activity}.
@@ -227,11 +240,8 @@ public abstract class AutofillService extends Service {
* See {@link FillResponse} for examples of multiple-sections requests.
* @param callback object used to notify the result of the request.
*/
- public void onSaveRequest(@NonNull SaveRequest request, @NonNull SaveCallback callback) {
- final List<FillContext> contexts = request.getFillContexts();
- onSaveRequest(contexts.get(contexts.size() - 1).getStructure(),
- request.getClientState(), callback);
- }
+ public abstract void onSaveRequest(@NonNull SaveRequest request,
+ @NonNull SaveCallback callback);
/**
* Called when user requests service to save the fields of an {@link Activity}.
@@ -248,10 +258,14 @@ public abstract class AutofillService extends Service {
* conserve resources.
* See {@link FillResponse} for examples of multiple-sections requests.
* @param callback object used to notify the result of the request.
+ *
+ * @hide
*/
@Deprecated
- public abstract void onSaveRequest(@NonNull AssistStructure structure, @Nullable Bundle data,
- @NonNull SaveCallback callback);
+ public void onSaveRequest(@NonNull AssistStructure structure, @Nullable Bundle data,
+ @NonNull SaveCallback callback) {
+
+ }
/**
* Called when the Android system disconnects from the service.
@@ -261,6 +275,7 @@ public abstract class AutofillService extends Service {
public void onDisconnected() {
}
+ /** @hide */
@Deprecated
public final void disableSelf() {
getSystemService(AutofillManager.class).disableOwnedAutofillServices();
diff --git a/core/java/android/service/autofill/FillCallback.java b/core/java/android/service/autofill/FillCallback.java
index 7774bdd4c410..105cd3867463 100644
--- a/core/java/android/service/autofill/FillCallback.java
+++ b/core/java/android/service/autofill/FillCallback.java
@@ -47,8 +47,13 @@ public final class FillCallback {
public void onSuccess(@Nullable FillResponse response) {
assertNotCalled();
mCalled = true;
+
+ if (response != null) {
+ response.setRequestId(mRequestId);
+ }
+
try {
- mCallback.onSuccess(response, mRequestId);
+ mCallback.onSuccess(response);
} catch (RemoteException e) {
e.rethrowAsRuntimeException();
}
diff --git a/core/java/android/service/autofill/FillContext.java b/core/java/android/service/autofill/FillContext.java
index 2efa08c00969..8a28c45d145f 100644
--- a/core/java/android/service/autofill/FillContext.java
+++ b/core/java/android/service/autofill/FillContext.java
@@ -16,6 +16,8 @@
package android.service.autofill;
+import static android.view.autofill.Helper.DEBUG;
+
import android.annotation.NonNull;
import android.app.assist.AssistStructure;
import android.os.Bundle;
@@ -71,6 +73,15 @@ public final class FillContext implements Parcelable {
}
@Override
+ public String toString() {
+ if (!DEBUG) {
+ return super.toString();
+ } else {
+ return "FillContext [mRequestId=" + mRequestId + "]";
+ }
+ }
+
+ @Override
public int describeContents() {
return 0;
}
diff --git a/core/java/android/service/autofill/FillRequest.java b/core/java/android/service/autofill/FillRequest.java
index aa6db4d092f2..8ac399c776ec 100644
--- a/core/java/android/service/autofill/FillRequest.java
+++ b/core/java/android/service/autofill/FillRequest.java
@@ -19,16 +19,16 @@ package android.service.autofill;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.assist.AssistStructure;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Parcel;
import android.os.Parcelable;
+
import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.ArrayList;
/**
* This class represents a request to an {@link AutofillService autofill provider}
@@ -39,14 +39,15 @@ import java.util.concurrent.atomic.AtomicInteger;
* @see AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback)
*/
public final class FillRequest implements Parcelable {
- private static AtomicInteger sIdCounter = new AtomicInteger();
-
/**
* Indicates autofill was explicitly requested by the user.
*/
public static final int FLAG_MANUAL_REQUEST = 0x1;
/** @hide */
+ public static final int INVALID_REQUEST_ID = Integer.MIN_VALUE;
+
+ /** @hide */
@IntDef(
flag = true,
value = {FLAG_MANUAL_REQUEST})
@@ -55,27 +56,24 @@ public final class FillRequest implements Parcelable {
private final int mId;
private final @RequestFlags int mFlags;
- private final @NonNull AssistStructure mStructure;
+ private final @NonNull ArrayList<FillContext> mContexts;
private final @Nullable Bundle mClientState;
- /** @hide */
- public FillRequest(@NonNull AssistStructure structure,
- @Nullable Bundle clientState, @RequestFlags int flags) {
- this(sIdCounter.incrementAndGet(), structure, clientState, flags);
- }
-
private FillRequest(@NonNull Parcel parcel) {
mId = parcel.readInt();
- mStructure = parcel.readParcelable(null);
+ mContexts = new ArrayList<>();
+ parcel.readParcelableList(mContexts, null);
+
mClientState = parcel.readBundle();
mFlags = parcel.readInt();
}
- private FillRequest(int id, @NonNull AssistStructure structure,
+ /** @hide */
+ public FillRequest(int id, @NonNull ArrayList<FillContext> contexts,
@Nullable Bundle clientState, @RequestFlags int flags) {
mId = id;
mFlags = Preconditions.checkFlagsArgument(flags, FLAG_MANUAL_REQUEST);
- mStructure = Preconditions.checkNotNull(structure, "structure");
+ mContexts = Preconditions.checkCollectionElementsNotNull(contexts, "contexts");
mClientState = clientState;
}
@@ -96,10 +94,10 @@ public final class FillRequest implements Parcelable {
}
/**
- * @return The structure capturing the UI state.
+ * @return The contexts associated with each previous fill request.
*/
- public @NonNull AssistStructure getStructure() {
- return mStructure;
+ public @NonNull ArrayList<FillContext> getFillContexts() {
+ return mContexts;
}
/**
@@ -124,7 +122,7 @@ public final class FillRequest implements Parcelable {
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mId);
- parcel.writeParcelable(mStructure, flags);
+ parcel.writeParcelableList(mContexts, flags);
parcel.writeBundle(mClientState);
parcel.writeInt(mFlags);
}
diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java
index 0e74ca4047e8..5c8f3cec9c59 100644
--- a/core/java/android/service/autofill/FillResponse.java
+++ b/core/java/android/service/autofill/FillResponse.java
@@ -16,6 +16,7 @@
package android.service.autofill;
+import static android.service.autofill.FillRequest.INVALID_REQUEST_ID;
import static android.view.autofill.Helper.DEBUG;
import android.annotation.NonNull;
@@ -138,6 +139,7 @@ public final class FillResponse implements Parcelable {
private final @Nullable IntentSender mAuthentication;
private final @Nullable AutofillId[] mAuthenticationIds;
private final @Nullable AutofillId[] mIgnoredIds;
+ private int mRequestId;
private FillResponse(@NonNull Builder builder) {
mDatasets = builder.mDatasets;
@@ -147,6 +149,7 @@ public final class FillResponse implements Parcelable {
mAuthentication = builder.mAuthentication;
mAuthenticationIds = builder.mAuthenticationIds;
mIgnoredIds = builder.mIgnoredIds;
+ mRequestId = INVALID_REQUEST_ID;
}
/** @hide */
@@ -185,6 +188,24 @@ public final class FillResponse implements Parcelable {
}
/**
+ * Associates a {@link FillResponse} to a request.
+ *
+ * <p>Set inside of the {@link FillCallback} code, not the {@link AutofillService}.
+ *
+ * @param requestId The id of the request to associate the response to.
+ *
+ * @hide
+ */
+ public void setRequestId(int requestId) {
+ mRequestId = requestId;
+ }
+
+ /** @hide */
+ public int getRequestId() {
+ return mRequestId;
+ }
+
+ /**
* Builder for {@link FillResponse} objects. You must to provide at least
* one dataset or set an authentication intent with a presentation view.
*/
@@ -311,6 +332,7 @@ public final class FillResponse implements Parcelable {
/**
* @deprecated Use {@link #setClientState(Bundle)} instead.
+ * @hide
*/
@Deprecated
public Builder setExtras(@Nullable Bundle extras) {
@@ -375,7 +397,8 @@ public final class FillResponse implements Parcelable {
if (!DEBUG) return super.toString();
return new StringBuilder(
- "FillResponse: [datasets=").append(mDatasets)
+ "FillResponse : [mRequestId=" + mRequestId)
+ .append(", datasets=").append(mDatasets)
.append(", saveInfo=").append(mSaveInfo)
.append(", clientState=").append(mClientState != null)
.append(", hasPresentation=").append(mPresentation != null)
@@ -384,6 +407,7 @@ public final class FillResponse implements Parcelable {
? mAuthenticationIds.length : "N/A")
.append(", ignoredIdsSize=").append(mIgnoredIds != null
? mIgnoredIds.length : "N/A")
+ .append("]")
.toString();
}
@@ -405,6 +429,7 @@ public final class FillResponse implements Parcelable {
parcel.writeParcelable(mAuthentication, flags);
parcel.writeParcelable(mPresentation, flags);
parcel.writeParcelableArray(mIgnoredIds, flags);
+ parcel.writeInt(mRequestId);
}
public static final Parcelable.Creator<FillResponse> CREATOR =
@@ -425,7 +450,11 @@ public final class FillResponse implements Parcelable {
builder.setAuthentication(parcel.readParcelableArray(null, AutofillId.class),
parcel.readParcelable(null), parcel.readParcelable(null));
builder.setIgnoredIds(parcel.readParcelableArray(null, AutofillId.class));
- return builder.build();
+ final FillResponse response = builder.build();
+
+ response.setRequestId(parcel.readInt());
+
+ return response;
}
@Override
diff --git a/core/java/android/service/autofill/IFillCallback.aidl b/core/java/android/service/autofill/IFillCallback.aidl
index 688ac84b9cd8..2bb3e9acd3e1 100644
--- a/core/java/android/service/autofill/IFillCallback.aidl
+++ b/core/java/android/service/autofill/IFillCallback.aidl
@@ -27,6 +27,6 @@ import android.service.autofill.FillResponse;
*/
interface IFillCallback {
void onCancellable(in ICancellationSignal cancellation);
- void onSuccess(in FillResponse response, int requestId);
+ void onSuccess(in FillResponse response);
void onFailure(CharSequence message);
}
diff --git a/core/java/android/service/autofill/SaveInfo.java b/core/java/android/service/autofill/SaveInfo.java
index 3a1529f915e4..94e5e3ec0d50 100644
--- a/core/java/android/service/autofill/SaveInfo.java
+++ b/core/java/android/service/autofill/SaveInfo.java
@@ -139,6 +139,33 @@ public final class SaveInfo implements Parcelable {
*/
public static final int SAVE_DATA_TYPE_EMAIL_ADDRESS = 0x10;
+ /**
+ * Style for the negative button of the save UI to cancel the
+ * save operation. In this case, the user tapping the negative
+ * button signals that they would prefer to not save the filled
+ * content.
+ */
+ public static final int NEGATIVE_BUTTON_STYLE_CANCEL = 0;
+
+ /**
+ * Style for the negative button of the save UI to reject the
+ * save operation. This could be useful if the user needs to
+ * opt-in your service and the save prompt is an advertisement
+ * of the potential value you can add to the user. In this
+ * case, the user tapping the negative button sends a strong
+ * signal that the feature may not be useful and you may
+ * consider some backoff strategy.
+ */
+ public static final int NEGATIVE_BUTTON_STYLE_REJECT = 1;
+
+ /** @hide */
+ @IntDef(
+ value = {
+ NEGATIVE_BUTTON_STYLE_CANCEL,
+ NEGATIVE_BUTTON_STYLE_REJECT})
+ @Retention(RetentionPolicy.SOURCE)
+ @interface NegativeButtonStyle{}
+
/** @hide */
@IntDef(
flag = true,
@@ -166,7 +193,7 @@ public final class SaveInfo implements Parcelable {
@interface SaveInfoFlags{}
private final @SaveDataType int mType;
- private final CharSequence mNegativeActionTitle;
+ private final @NegativeButtonStyle int mNegativeButtonStyle;
private final IntentSender mNegativeActionListener;
private final AutofillId[] mRequiredIds;
private final AutofillId[] mOptionalIds;
@@ -175,7 +202,7 @@ public final class SaveInfo implements Parcelable {
private SaveInfo(Builder builder) {
mType = builder.mType;
- mNegativeActionTitle = builder.mNegativeActionTitle;
+ mNegativeButtonStyle = builder.mNegativeButtonStyle;
mNegativeActionListener = builder.mNegativeActionListener;
mRequiredIds = builder.mRequiredIds;
mOptionalIds = builder.mOptionalIds;
@@ -184,8 +211,8 @@ public final class SaveInfo implements Parcelable {
}
/** @hide */
- public @Nullable CharSequence getNegativeActionTitle() {
- return mNegativeActionTitle;
+ public @NegativeButtonStyle int getNegativeActionStyle() {
+ return mNegativeButtonStyle;
}
/** @hide */
@@ -224,7 +251,7 @@ public final class SaveInfo implements Parcelable {
public static final class Builder {
private final @SaveDataType int mType;
- private CharSequence mNegativeActionTitle;
+ private @NegativeButtonStyle int mNegativeButtonStyle = NEGATIVE_BUTTON_STYLE_CANCEL;
private IntentSender mNegativeActionListener;
private final AutofillId[] mRequiredIds;
private AutofillId[] mOptionalIds;
@@ -298,38 +325,42 @@ public final class SaveInfo implements Parcelable {
return this;
}
+ /** @hide */
+ // TODO (b/37563972): Remove when callers migrate
+ public @NonNull Builder setNegativeAction(@Nullable CharSequence title,
+ @Nullable IntentSender listener) {
+ throwIfDestroyed();
+ setNegativeAction(NEGATIVE_BUTTON_STYLE_CANCEL, listener);
+ return this;
+ }
+
/**
- * Sets the title and listener for the negative save action.
+ * Sets the style and listener for the negative save action.
*
- * <p>This allows a fill-provider to customize the text and be
+ * <p>This allows a fill-provider to customize the style and be
* notified when the user selects the negative action in the save
- * UI. Note that selecting the negative action regardless of its text
+ * UI. Note that selecting the negative action regardless of its style
* and listener being customized would dismiss the save UI and if a
* custom listener intent is provided then this intent will be
- * started.</p>
- *
- * <p>This customization could be useful for providing additional
- * semantics to the negative action. For example, a fill-provider
- * can use this mechanism to add a "Disable" function or a "More info"
- * function, etc. Note that the save action is exclusively controlled
- * by the platform to ensure user consent is collected to release
- * data from the filled app to the fill-provider.</p>
+ * started. The default style is {@link #NEGATIVE_BUTTON_STYLE_CANCEL}</p>
*
- * @param title The action title.
+ * @param style The action style.
* @param listener The action listener.
* @return This builder.
*
- * @throws IllegalArgumentException If the title and the listener
- * are not both either null or non-null.
+ * @see #NEGATIVE_BUTTON_STYLE_CANCEL
+ * @see #NEGATIVE_BUTTON_STYLE_REJECT
+ *
+ * @throws IllegalArgumentException If the style is invalid
*/
- public @NonNull Builder setNegativeAction(@Nullable CharSequence title,
+ public @NonNull Builder setNegativeAction(@NegativeButtonStyle int style,
@Nullable IntentSender listener) {
throwIfDestroyed();
- if (title == null ^ listener == null) {
- throw new IllegalArgumentException("title and listener"
- + " must be both non-null or null");
+ if (style != NEGATIVE_BUTTON_STYLE_CANCEL
+ && style != NEGATIVE_BUTTON_STYLE_REJECT) {
+ throw new IllegalArgumentException("Invalid style: " + style);
}
- mNegativeActionTitle = title;
+ mNegativeButtonStyle = style;
mNegativeActionListener = listener;
return this;
}
@@ -363,6 +394,8 @@ public final class SaveInfo implements Parcelable {
.append(", requiredIds=").append(Arrays.toString(mRequiredIds))
.append(", optionalIds=").append(Arrays.toString(mOptionalIds))
.append(", description=").append(mDescription)
+ .append(DebugUtils.flagsToString(SaveInfo.class, "NEGATIVE_BUTTON_STYLE_",
+ mNegativeButtonStyle))
.append(", mFlags=").append(mFlags)
.append("]").toString();
}
@@ -380,7 +413,7 @@ public final class SaveInfo implements Parcelable {
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mType);
parcel.writeParcelableArray(mRequiredIds, flags);
- parcel.writeCharSequence(mNegativeActionTitle);
+ parcel.writeInt(mNegativeButtonStyle);
parcel.writeParcelable(mNegativeActionListener, flags);
parcel.writeParcelableArray(mOptionalIds, flags);
parcel.writeCharSequence(mDescription);
@@ -395,7 +428,7 @@ public final class SaveInfo implements Parcelable {
// using specially crafted parcels.
final Builder builder = new Builder(parcel.readInt(),
parcel.readParcelableArray(null, AutofillId.class));
- builder.setNegativeAction(parcel.readCharSequence(), parcel.readParcelable(null));
+ builder.setNegativeAction(parcel.readInt(), parcel.readParcelable(null));
builder.setOptionalIds(parcel.readParcelableArray(null, AutofillId.class));
builder.setDescription(parcel.readCharSequence());
builder.setFlags(parcel.readInt());
diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java
index 92a5803b5ddb..d51a13f3d119 100644
--- a/core/java/android/util/ArrayMap.java
+++ b/core/java/android/util/ArrayMap.java
@@ -19,6 +19,7 @@ package android.util;
import libcore.util.EmptyArray;
import java.util.Collection;
+import java.util.ConcurrentModificationException;
import java.util.Map;
import java.util.Set;
@@ -49,6 +50,18 @@ public final class ArrayMap<K, V> implements Map<K, V> {
private static final String TAG = "ArrayMap";
/**
+ * Attempt to spot concurrent modifications to this data structure.
+ *
+ * It's best-effort, but any time we can throw something more diagnostic than an
+ * ArrayIndexOutOfBoundsException deep in the ArrayMap internals it's going to
+ * save a lot of development time.
+ *
+ * Good times to look for CME include after any allocArrays() call and at the end of
+ * functions that change mSize (put/remove/clear).
+ */
+ private static final boolean CONCURRENT_MODIFICATION_EXCEPTIONS = true;
+
+ /**
* The minimum amount by which the capacity of a ArrayMap will increase.
* This is tuned to be relatively space-efficient.
*/
@@ -86,6 +99,18 @@ public final class ArrayMap<K, V> implements Map<K, V> {
int mSize;
MapCollections<K, V> mCollections;
+ private static int binarySearchHashes(int[] hashes, int N, int hash) {
+ try {
+ return ContainerHelpers.binarySearch(hashes, N, hash);
+ } catch (ArrayIndexOutOfBoundsException e) {
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS) {
+ throw new ConcurrentModificationException();
+ } else {
+ throw e; // the cache is poisoned at this point, there's not much we can do
+ }
+ }
+ }
+
int indexOf(Object key, int hash) {
final int N = mSize;
@@ -94,7 +119,7 @@ public final class ArrayMap<K, V> implements Map<K, V> {
return ~0;
}
- int index = ContainerHelpers.binarySearch(mHashes, N, hash);
+ int index = binarySearchHashes(mHashes, N, hash);
// If the hash code wasn't found, then we have no entry for this key.
if (index < 0) {
@@ -132,7 +157,7 @@ public final class ArrayMap<K, V> implements Map<K, V> {
return ~0;
}
- int index = ContainerHelpers.binarySearch(mHashes, N, 0);
+ int index = binarySearchHashes(mHashes, N, 0);
// If the hash code wasn't found, then we have no entry for this key.
if (index < 0) {
@@ -282,10 +307,16 @@ public final class ArrayMap<K, V> implements Map<K, V> {
@Override
public void clear() {
if (mSize > 0) {
- freeArrays(mHashes, mArray, mSize);
+ final int[] ohashes = mHashes;
+ final Object[] oarray = mArray;
+ final int osize = mSize;
mHashes = EmptyArray.INT;
mArray = EmptyArray.OBJECT;
mSize = 0;
+ freeArrays(ohashes, oarray, osize);
+ }
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS && mSize > 0) {
+ throw new ConcurrentModificationException();
}
}
@@ -309,15 +340,19 @@ public final class ArrayMap<K, V> implements Map<K, V> {
* items.
*/
public void ensureCapacity(int minimumCapacity) {
+ final int osize = mSize;
if (mHashes.length < minimumCapacity) {
final int[] ohashes = mHashes;
final Object[] oarray = mArray;
allocArrays(minimumCapacity);
if (mSize > 0) {
- System.arraycopy(ohashes, 0, mHashes, 0, mSize);
- System.arraycopy(oarray, 0, mArray, 0, mSize<<1);
+ System.arraycopy(ohashes, 0, mHashes, 0, osize);
+ System.arraycopy(oarray, 0, mArray, 0, osize<<1);
}
- freeArrays(ohashes, oarray, mSize);
+ freeArrays(ohashes, oarray, osize);
+ }
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS && mSize != osize) {
+ throw new ConcurrentModificationException();
}
}
@@ -435,6 +470,7 @@ public final class ArrayMap<K, V> implements Map<K, V> {
*/
@Override
public V put(K key, V value) {
+ final int osize = mSize;
final int hash;
int index;
if (key == null) {
@@ -452,9 +488,9 @@ public final class ArrayMap<K, V> implements Map<K, V> {
}
index = ~index;
- if (mSize >= mHashes.length) {
- final int n = mSize >= (BASE_SIZE*2) ? (mSize+(mSize>>1))
- : (mSize >= BASE_SIZE ? (BASE_SIZE*2) : BASE_SIZE);
+ if (osize >= mHashes.length) {
+ final int n = osize >= (BASE_SIZE*2) ? (osize+(osize>>1))
+ : (osize >= BASE_SIZE ? (BASE_SIZE*2) : BASE_SIZE);
if (DEBUG) Log.d(TAG, "put: grow from " + mHashes.length + " to " + n);
@@ -462,22 +498,31 @@ public final class ArrayMap<K, V> implements Map<K, V> {
final Object[] oarray = mArray;
allocArrays(n);
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS && osize != mSize) {
+ throw new ConcurrentModificationException();
+ }
+
if (mHashes.length > 0) {
- if (DEBUG) Log.d(TAG, "put: copy 0-" + mSize + " to 0");
+ if (DEBUG) Log.d(TAG, "put: copy 0-" + osize + " to 0");
System.arraycopy(ohashes, 0, mHashes, 0, ohashes.length);
System.arraycopy(oarray, 0, mArray, 0, oarray.length);
}
- freeArrays(ohashes, oarray, mSize);
+ freeArrays(ohashes, oarray, osize);
}
- if (index < mSize) {
- if (DEBUG) Log.d(TAG, "put: move " + index + "-" + (mSize-index)
+ if (index < osize) {
+ if (DEBUG) Log.d(TAG, "put: move " + index + "-" + (osize-index)
+ " to " + (index+1));
- System.arraycopy(mHashes, index, mHashes, index + 1, mSize - index);
+ System.arraycopy(mHashes, index, mHashes, index + 1, osize - index);
System.arraycopy(mArray, index << 1, mArray, (index + 1) << 1, (mSize - index) << 1);
}
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS) {
+ if (osize != mSize || index >= mHashes.length) {
+ throw new ConcurrentModificationException();
+ }
+ }
mHashes[index] = hash;
mArray[index<<1] = key;
mArray[(index<<1)+1] = value;
@@ -594,19 +639,22 @@ public final class ArrayMap<K, V> implements Map<K, V> {
*/
public V removeAt(int index) {
final Object old = mArray[(index << 1) + 1];
- if (mSize <= 1) {
+ final int osize = mSize;
+ final int nsize;
+ if (osize <= 1) {
// Now empty.
if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to 0");
- freeArrays(mHashes, mArray, mSize);
+ freeArrays(mHashes, mArray, osize);
mHashes = EmptyArray.INT;
mArray = EmptyArray.OBJECT;
- mSize = 0;
+ nsize = 0;
} else {
+ nsize = osize - 1;
if (mHashes.length > (BASE_SIZE*2) && mSize < mHashes.length/3) {
// Shrunk enough to reduce size of arrays. We don't allow it to
// shrink smaller than (BASE_SIZE*2) to avoid flapping between
// that and BASE_SIZE.
- final int n = mSize > (BASE_SIZE*2) ? (mSize + (mSize>>1)) : (BASE_SIZE*2);
+ final int n = osize > (BASE_SIZE*2) ? (osize + (osize>>1)) : (BASE_SIZE*2);
if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to " + n);
@@ -614,32 +662,38 @@ public final class ArrayMap<K, V> implements Map<K, V> {
final Object[] oarray = mArray;
allocArrays(n);
- mSize--;
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS && osize != mSize) {
+ throw new ConcurrentModificationException();
+ }
+
if (index > 0) {
if (DEBUG) Log.d(TAG, "remove: copy from 0-" + index + " to 0");
System.arraycopy(ohashes, 0, mHashes, 0, index);
System.arraycopy(oarray, 0, mArray, 0, index << 1);
}
- if (index < mSize) {
- if (DEBUG) Log.d(TAG, "remove: copy from " + (index+1) + "-" + mSize
+ if (index < nsize) {
+ if (DEBUG) Log.d(TAG, "remove: copy from " + (index+1) + "-" + nsize
+ " to " + index);
- System.arraycopy(ohashes, index + 1, mHashes, index, mSize - index);
+ System.arraycopy(ohashes, index + 1, mHashes, index, nsize - index);
System.arraycopy(oarray, (index + 1) << 1, mArray, index << 1,
- (mSize - index) << 1);
+ (nsize - index) << 1);
}
} else {
- mSize--;
- if (index < mSize) {
- if (DEBUG) Log.d(TAG, "remove: move " + (index+1) + "-" + mSize
+ if (index < nsize) {
+ if (DEBUG) Log.d(TAG, "remove: move " + (index+1) + "-" + nsize
+ " to " + index);
- System.arraycopy(mHashes, index + 1, mHashes, index, mSize - index);
+ System.arraycopy(mHashes, index + 1, mHashes, index, nsize - index);
System.arraycopy(mArray, (index + 1) << 1, mArray, index << 1,
- (mSize - index) << 1);
+ (nsize - index) << 1);
}
- mArray[mSize << 1] = null;
- mArray[(mSize << 1) + 1] = null;
+ mArray[nsize << 1] = null;
+ mArray[(nsize << 1) + 1] = null;
}
}
+ if (CONCURRENT_MODIFICATION_EXCEPTIONS && osize != mSize) {
+ throw new ConcurrentModificationException();
+ }
+ mSize = nsize;
return (V)old;
}
diff --git a/core/java/android/util/MergedConfiguration.java b/core/java/android/util/MergedConfiguration.java
index d94af8a68fc1..68d0309cfc9e 100644
--- a/core/java/android/util/MergedConfiguration.java
+++ b/core/java/android/util/MergedConfiguration.java
@@ -21,6 +21,8 @@ import android.content.res.Configuration;
import android.os.Parcel;
import android.os.Parcelable;
+import java.io.PrintWriter;
+
/**
* Container that holds global and override config and their merge product.
* Merged configuration updates automatically whenever global or override configs are updated via
@@ -41,6 +43,10 @@ public class MergedConfiguration implements Parcelable {
setConfiguration(globalConfig, overrideConfig);
}
+ public MergedConfiguration(Configuration globalConfig) {
+ setGlobalConfiguration(globalConfig);
+ }
+
public MergedConfiguration(MergedConfiguration mergedConfiguration) {
setConfiguration(mergedConfiguration.getGlobalConfiguration(),
mergedConfiguration.getOverrideConfiguration());
@@ -93,6 +99,36 @@ public class MergedConfiguration implements Parcelable {
}
/**
+ * Update global configurations.
+ * Merged configuration will automatically be updated.
+ * @param globalConfig New global configuration.
+ */
+ public void setGlobalConfiguration(Configuration globalConfig) {
+ mGlobalConfig.setTo(globalConfig);
+ updateMergedConfig();
+ }
+
+ /**
+ * Update override configurations.
+ * Merged configuration will automatically be updated.
+ * @param overrideConfig New override configuration.
+ */
+ public void setOverrideConfiguration(Configuration overrideConfig) {
+ mOverrideConfig.setTo(overrideConfig);
+ updateMergedConfig();
+ }
+
+ public void setTo(MergedConfiguration config) {
+ setConfiguration(config.mGlobalConfig, config.mOverrideConfig);
+ }
+
+ public void unset() {
+ mGlobalConfig.unset();
+ mOverrideConfig.unset();
+ updateMergedConfig();
+ }
+
+ /**
* @return Stored global configuration value.
*/
@NonNull
@@ -119,4 +155,14 @@ public class MergedConfiguration implements Parcelable {
mMergedConfig.setTo(mGlobalConfig);
mMergedConfig.updateFrom(mOverrideConfig);
}
+
+ @Override
+ public String toString() {
+ return "{mGlobalConfig=" + mGlobalConfig + " mOverrideConfig=" + mOverrideConfig + "}";
+ }
+
+ public void dump(PrintWriter pw, String prefix) {
+ pw.println(prefix + "mGlobalConfig=" + mGlobalConfig);
+ pw.println(prefix + "mOverrideConfig=" + mOverrideConfig);
+ }
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 9d40895f6ad9..f53975239e4a 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -711,6 +711,10 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
mTranslator.translateRectInAppWindowToScreen(mScreenRect);
}
+ if (mSurfaceControl == null) {
+ return;
+ }
+
if (!isHardwareAccelerated() || !mRtHandlingPositionUpdates) {
try {
if (DEBUG) Log.d(TAG, String.format("%d updateSurfacePosition UI, " +
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index d42c6db106fd..34aecdc88bac 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -100,6 +100,7 @@ import android.view.accessibility.AccessibilityWindowInfo;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;
+import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillValue;
import android.view.inputmethod.EditorInfo;
@@ -1068,10 +1069,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
/**
- * Hintd for the autofill services that describes the content of the view.
+ * Hints for the autofill services that describes the content of the view.
*/
private @Nullable String[] mAutofillHints;
+ /**
+ * Autofill id, lazily created on calls to {@link #getAutofillId()}.
+ */
+ private AutofillId mAutofillId;
+
/** @hide */
@IntDef({
AUTOFILL_TYPE_NONE,
@@ -1153,7 +1159,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
public static final int IMPORTANT_FOR_AUTOFILL_YES = 0x1;
/**
- * The view is not important for autofill, and its children (if any) will be traversed.
+ * The view is not important for autofill, but its children (if any) will be traversed.
*/
public static final int IMPORTANT_FOR_AUTOFILL_NO = 0x2;
@@ -7276,13 +7282,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* <p>This method already provides most of what's needed for autofill, but should be overridden
* when:
- * <ol>
- * <li>The view contents does not include PII (Personally Identifiable Information), so it
+ * <ul>
+ * <li>The view contents does not include PII (Personally Identifiable Information), so it
* can call {@link ViewStructure#setDataIsSensitive(boolean)} passing {@code false}.
- * <li>It must set fields such {@link ViewStructure#setText(CharSequence)},
+ * <li>It must set fields such {@link ViewStructure#setText(CharSequence)},
* {@link ViewStructure#setAutofillOptions(CharSequence[])},
- * or {@link ViewStructure#setUrl(String)}.
- * </ol>
+ * or {@link ViewStructure#setWebDomain(String)}.
+ * </ul>
*
* @param structure Fill in with structured view data. The default implementation
* fills in all data that can be inferred from the view itself.
@@ -7292,12 +7298,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
onProvideStructureForAssistOrAutofill(structure, true);
}
- private void setAutofillId(ViewStructure structure) {
- // The autofill id needs to be unique, but its value doesn't matter,
- // so it's better to reuse the accessibility id to save space.
- structure.setAutofillId(getAccessibilityViewId());
- }
-
private void onProvideStructureForAssistOrAutofill(ViewStructure structure,
boolean forAutofill) {
final int id = mID;
@@ -7317,7 +7317,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
if (forAutofill) {
- setAutofillId(structure);
final @AutofillType int autofillType = getAutofillType();
// Don't need to fill autofill info if view does not support it.
// For example, only TextViews that are editable support autofill
@@ -7418,10 +7417,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param flags optional flags (currently {@code 0}).
*/
public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {
- // TODO(b/36171235): need a way to let apps set the ViewStructure without forcing them
- // to call super() (in case they override both this method and dispatchProvide....
- // Perhaps the best solution would simply make setAutofillId(ViewStructure) public.
- setAutofillId(structure);
}
/**
@@ -7470,6 +7465,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/**
+ * Gets the unique identifier of this view on the screen for Autofill purposes.
+ *
+ * @return The View's Autofill id.
+ */
+ public final AutofillId getAutofillId() {
+ if (mAutofillId == null) {
+ // The autofill id needs to be unique, but its value doesn't matter,
+ // so it's better to reuse the accessibility id to save space.
+ mAutofillId = new AutofillId(getAccessibilityViewId());
+ }
+ return mAutofillId;
+ }
+
+ /**
* Describes the autofill type that should be used on calls to
* {@link #autofill(AutofillValue)} and {@link #autofill(SparseArray)}.
*
@@ -7705,16 +7714,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Dispatch creation of {@link ViewStructure} down the hierarchy.
*
- * <p>The structure must be filled according to the request type, which is set in the
- * {@code flags} parameter - see the documentation on each flag for more details.
+ * <p>The default implementation does the following:
+ *
+ * <ul>
+ * <li>Sets the {@link AutofillId} in the structure.
+ * <li>Calls {@link #onProvideAutofillStructure(ViewStructure, int)}.
+ * <li>Calls {@link #onProvideAutofillVirtualStructure(ViewStructure, int)}.
+ * </ul>
*
- * <p>The default implementation calls {@link #onProvideAutofillStructure(ViewStructure, int)}
- * and {@link #onProvideAutofillVirtualStructure(ViewStructure, int)}.
+ * <p>When overridden, it must either call
+ * {@code super.dispatchProvideAutofillStructure(structure, flags)} or explicitly
+ * set the {@link AutofillId} in the structure (for example, by calling
+ * {@code structure.setAutofillId(getAutofillId())}).
*
* @param structure Fill in with structured view data.
* @param flags optional flags (currently {@code 0}).
*/
- public void dispatchProvideAutofillStructure(ViewStructure structure, int flags) {
+ public void dispatchProvideAutofillStructure(@NonNull ViewStructure structure, int flags) {
dispatchProvideStructureForAssistOrAutofill(structure, true);
}
@@ -7723,7 +7739,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
boolean blocked = forAutofill ? isAutofillBlocked() : isAssistBlocked();
if (!blocked) {
if (forAutofill) {
- setAutofillId(structure);
+ structure.setAutofillId(getAutofillId());
// NOTE: flags are not currently supported, hence 0
onProvideAutofillStructure(structure, 0);
onProvideAutofillVirtualStructure(structure, 0);
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 1977ef5ae989..b78348237864 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -5823,34 +5823,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
/**
- * Quick invalidation method that simply transforms the dirty rect into the parent's
- * coordinate system, pruning the invalidation if the parent has already been invalidated.
- *
- * @hide
- */
- protected ViewParent damageChildInParent(int left, int top, final Rect dirty) {
- if ((mPrivateFlags & PFLAG_DRAWN) != 0
- || (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) != 0) {
- dirty.offset(left - mScrollX, top - mScrollY);
- if ((mGroupFlags & FLAG_CLIP_CHILDREN) == 0) {
- dirty.union(0, 0, mRight - mLeft, mBottom - mTop);
- }
-
- if ((mGroupFlags & FLAG_CLIP_CHILDREN) == 0 ||
- dirty.intersect(0, 0, mRight - mLeft, mBottom - mTop)) {
-
- if (!getMatrix().isIdentity()) {
- transformRect(dirty);
- }
-
- return mParent;
- }
- }
-
- return null;
- }
-
- /**
* Offset a rectangle that is in a descendant's coordinate
* space into our coordinate space.
* @param descendant A descendant of this view
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java
index f061370cc581..21123c167792 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -330,20 +330,20 @@ public class ViewOverlay {
@Override
public void onDescendantInvalidated(@NonNull View child, @NonNull View target) {
- if (mHostView != null && mHostView.getParent() != null) {
- mHostView.getParent().onDescendantInvalidated(mHostView, target);
- }
- }
+ if (mHostView != null) {
+ if (mHostView instanceof ViewGroup) {
+ // Propagate invalidate through the host...
+ ((ViewGroup) mHostView).onDescendantInvalidated(mHostView, target);
- /**
- * @hide
- */
- @Override
- protected ViewParent damageChildInParent(int left, int top, Rect dirty) {
- if (mHostView instanceof ViewGroup) {
- return ((ViewGroup) mHostView).damageChildInParent(left, top, dirty);
+ // ...and also this view, since it will hold the descendant, and must later
+ // propagate the calls to update display lists if dirty
+ super.onDescendantInvalidated(child, target);
+ } else {
+ // Can't use onDescendantInvalidated because host isn't a ViewGroup - fall back
+ // to invalidating.
+ invalidate();
+ }
}
- return null;
}
@Override
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 9ecced61c917..1f13220289c2 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -435,8 +435,9 @@ public final class ViewRootImpl implements ViewParent,
AccessibilityInteractionController mAccessibilityInteractionController;
- AccessibilityInteractionConnectionManager mAccessibilityInteractionConnectionManager;
- HighContrastTextManager mHighContrastTextManager;
+ final AccessibilityInteractionConnectionManager mAccessibilityInteractionConnectionManager =
+ new AccessibilityInteractionConnectionManager();
+ final HighContrastTextManager mHighContrastTextManager;
SendWindowContentChangedAccessibilityEvent mSendWindowContentChangedAccessibilityEvent;
@@ -496,13 +497,11 @@ public final class ViewRootImpl implements ViewParent,
mAttachInfo = new View.AttachInfo(mWindowSession, mWindow, display, this, mHandler, this,
context);
mAccessibilityManager = AccessibilityManager.getInstance(context);
- mAccessibilityInteractionConnectionManager =
- new AccessibilityInteractionConnectionManager();
mAccessibilityManager.addAccessibilityStateChangeListener(
- mAccessibilityInteractionConnectionManager);
+ mAccessibilityInteractionConnectionManager, mHandler);
mHighContrastTextManager = new HighContrastTextManager();
mAccessibilityManager.addHighTextContrastStateChangeListener(
- mHighContrastTextManager);
+ mHighContrastTextManager, mHandler);
mViewConfiguration = ViewConfiguration.get(context);
mDensity = context.getResources().getDisplayMetrics().densityDpi;
mNoncompatDensity = context.getResources().getDisplayMetrics().noncompatDensityDpi;
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index 387a9ce41f90..fb910b83e927 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -284,12 +284,30 @@ public abstract class ViewStructure {
public abstract ViewStructure asyncNewChild(int index);
/**
+ * Gets the {@link AutofillId} associated with this node.
+ */
+ @Nullable
+ public abstract AutofillId getAutofillId();
+
+ /**
+ * Sets the {@link AutofillId} associated with this node.
+ */
+ public abstract void setAutofillId(@NonNull AutofillId id);
+
+ /**
* Sets the {@link AutofillId} for this virtual node.
*
- * @param parent parent node.
+ * @param parentId id of the parent node.
* @param virtualId an opaque ID to the Android System; it's the same id used on
* {@link View#autofill(android.util.SparseArray)}.
*/
+ public abstract void setAutofillId(@NonNull AutofillId parentId, int virtualId);
+
+ /**
+ * @deprecated - use {@link #setAutofillId(AutofillId, int)} instead
+ * @hide
+ */
+ @Deprecated
public abstract void setAutofillId(@NonNull ViewStructure parent, int virtualId);
/**
@@ -355,14 +373,9 @@ public abstract class ViewStructure {
/** @hide */
public abstract Rect getTempRect();
- /** @hide */
- public abstract void setAutofillId(int viewId);
-
- /** @hide */
- public abstract AutofillId getAutofillId();
-
/**
* @deprecated - use {@link #setWebDomain(String)} instead.
+ * @hide
*/
@Deprecated
public abstract void setUrl(String url);
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 6c884c400dd8..dfb0095cc0fe 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -37,6 +37,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
+import android.util.ArrayMap;
import android.util.Log;
import android.view.IWindow;
import android.view.View;
@@ -47,7 +48,6 @@ import com.android.internal.util.IntPair;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
/**
* System level service that serves as an event dispatch for {@link AccessibilityEvent}s,
@@ -137,17 +137,18 @@ public final class AccessibilityManager {
boolean mIsHighTextContrastEnabled;
- private final CopyOnWriteArrayList<AccessibilityStateChangeListener>
- mAccessibilityStateChangeListeners = new CopyOnWriteArrayList<>();
+ private final ArrayMap<AccessibilityStateChangeListener, Handler>
+ mAccessibilityStateChangeListeners = new ArrayMap<>();
- private final CopyOnWriteArrayList<TouchExplorationStateChangeListener>
- mTouchExplorationStateChangeListeners = new CopyOnWriteArrayList<>();
+ private final ArrayMap<TouchExplorationStateChangeListener, Handler>
+ mTouchExplorationStateChangeListeners = new ArrayMap<>();
- private final CopyOnWriteArrayList<HighTextContrastChangeListener>
- mHighTextContrastStateChangeListeners = new CopyOnWriteArrayList<>();
+ private final ArrayMap<HighTextContrastChangeListener, Handler>
+ mHighTextContrastStateChangeListeners = new ArrayMap<>();
+
+ private final ArrayMap<AccessibilityServicesStateChangeListener, Handler>
+ mServicesStateChangeListeners = new ArrayMap<>();
- private final CopyOnWriteArrayList<AccessibilityServicesStateChangeListener>
- mServicesStateChangeListeners = new CopyOnWriteArrayList<>();
/**
* Listener for the system accessibility state. To listen for changes to the
* accessibility state on the device, implement this interface and register
@@ -229,7 +230,21 @@ public final class AccessibilityManager {
@Override
public void notifyServicesStateChanged() {
- mHandler.obtainMessage(MyCallback.MSG_NOTIFY_SERVICES_STATE_CHANGED).sendToTarget();
+ final ArrayMap<AccessibilityServicesStateChangeListener, Handler> listeners;
+ synchronized (mLock) {
+ if (mServicesStateChangeListeners.isEmpty()) {
+ return;
+ }
+ listeners = new ArrayMap<>(mServicesStateChangeListeners);
+ }
+
+ int numListeners = listeners.size();
+ for (int i = 0; i < numListeners; i++) {
+ final AccessibilityServicesStateChangeListener listener =
+ mServicesStateChangeListeners.keyAt(i);
+ mServicesStateChangeListeners.valueAt(i).post(() -> listener
+ .onAccessibilityServicesStateChanged(AccessibilityManager.this));
+ }
}
@Override
@@ -565,73 +580,118 @@ public final class AccessibilityManager {
/**
* Registers an {@link AccessibilityStateChangeListener} for changes in
- * the global accessibility state of the system.
+ * the global accessibility state of the system. Equivalent to calling
+ * {@link #addAccessibilityStateChangeListener(AccessibilityStateChangeListener, Handler)}
+ * with a null handler.
*
* @param listener The listener.
- * @return True if successfully registered.
+ * @return Always returns {@code true}.
*/
public boolean addAccessibilityStateChangeListener(
@NonNull AccessibilityStateChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- return mAccessibilityStateChangeListeners.add(listener);
+ addAccessibilityStateChangeListener(listener, null);
+ return true;
+ }
+
+ /**
+ * Registers an {@link AccessibilityStateChangeListener} for changes in
+ * the global accessibility state of the system. If the listener has already been registered,
+ * the handler used to call it back is updated.
+ *
+ * @param listener The listener.
+ * @param handler The handler on which the listener should be called back, or {@code null}
+ * for a callback on the process's main handler.
+ */
+ public void addAccessibilityStateChangeListener(
+ @NonNull AccessibilityStateChangeListener listener, @Nullable Handler handler) {
+ synchronized (mLock) {
+ mAccessibilityStateChangeListeners
+ .put(listener, (handler == null) ? mHandler : handler);
+ }
}
/**
* Unregisters an {@link AccessibilityStateChangeListener}.
*
* @param listener The listener.
- * @return True if successfully unregistered.
+ * @return True if the listener was previously registered.
*/
public boolean removeAccessibilityStateChangeListener(
@NonNull AccessibilityStateChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- return mAccessibilityStateChangeListeners.remove(listener);
+ synchronized (mLock) {
+ int index = mAccessibilityStateChangeListeners.indexOfKey(listener);
+ mAccessibilityStateChangeListeners.remove(listener);
+ return (index >= 0);
+ }
}
/**
* Registers a {@link TouchExplorationStateChangeListener} for changes in
- * the global touch exploration state of the system.
+ * the global touch exploration state of the system. Equivalent to calling
+ * {@link #addTouchExplorationStateChangeListener(TouchExplorationStateChangeListener, Handler)}
+ * with a null handler.
*
* @param listener The listener.
- * @return True if successfully registered.
+ * @return Always returns {@code true}.
*/
public boolean addTouchExplorationStateChangeListener(
@NonNull TouchExplorationStateChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- return mTouchExplorationStateChangeListeners.add(listener);
+ addTouchExplorationStateChangeListener(listener, null);
+ return true;
+ }
+
+ /**
+ * Registers an {@link TouchExplorationStateChangeListener} for changes in
+ * the global touch exploration state of the system. If the listener has already been
+ * registered, the handler used to call it back is updated.
+ *
+ * @param listener The listener.
+ * @param handler The handler on which the listener should be called back, or {@code null}
+ * for a callback on the process's main handler.
+ */
+ public void addTouchExplorationStateChangeListener(
+ @NonNull TouchExplorationStateChangeListener listener, @Nullable Handler handler) {
+ synchronized (mLock) {
+ mTouchExplorationStateChangeListeners
+ .put(listener, (handler == null) ? mHandler : handler);
+ }
}
/**
* Unregisters a {@link TouchExplorationStateChangeListener}.
*
* @param listener The listener.
- * @return True if successfully unregistered.
+ * @return True if listener was previously registered.
*/
public boolean removeTouchExplorationStateChangeListener(
@NonNull TouchExplorationStateChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- return mTouchExplorationStateChangeListeners.remove(listener);
+ synchronized (mLock) {
+ int index = mTouchExplorationStateChangeListeners.indexOfKey(listener);
+ mTouchExplorationStateChangeListeners.remove(listener);
+ return (index >= 0);
+ }
}
/**
* Registers a {@link AccessibilityServicesStateChangeListener}.
*
* @param listener The listener.
- * @return True if successfully registered.
- *
+ * @param handler The handler on which the listener should be called back, or {@code null}
+ * for a callback on the process's main handler.
* @hide
*/
public void addAccessibilityServicesStateChangeListener(
- @NonNull AccessibilityServicesStateChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- mServicesStateChangeListeners.add(listener);
+ @NonNull AccessibilityServicesStateChangeListener listener, @Nullable Handler handler) {
+ synchronized (mLock) {
+ mServicesStateChangeListeners
+ .put(listener, (handler == null) ? mHandler : handler);
+ }
}
/**
* Unregisters a {@link AccessibilityServicesStateChangeListener}.
*
* @param listener The listener.
- * @return True if successfully unregistered.
*
* @hide
*/
@@ -646,28 +706,29 @@ public final class AccessibilityManager {
* the global high text contrast state of the system.
*
* @param listener The listener.
- * @return True if successfully registered.
*
* @hide
*/
- public boolean addHighTextContrastStateChangeListener(
- @NonNull HighTextContrastChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- return mHighTextContrastStateChangeListeners.add(listener);
+ public void addHighTextContrastStateChangeListener(
+ @NonNull HighTextContrastChangeListener listener, @Nullable Handler handler) {
+ synchronized (mLock) {
+ mHighTextContrastStateChangeListeners
+ .put(listener, (handler == null) ? mHandler : handler);
+ }
}
/**
* Unregisters a {@link HighTextContrastChangeListener}.
*
* @param listener The listener.
- * @return True if successfully unregistered.
*
* @hide
*/
- public boolean removeHighTextContrastStateChangeListener(
+ public void removeHighTextContrastStateChangeListener(
@NonNull HighTextContrastChangeListener listener) {
- // Final CopyOnWriteArrayList - no lock needed.
- return mHighTextContrastStateChangeListeners.remove(listener);
+ synchronized (mLock) {
+ mHighTextContrastStateChangeListeners.remove(listener);
+ }
}
/**
@@ -732,15 +793,15 @@ public final class AccessibilityManager {
mIsHighTextContrastEnabled = highTextContrastEnabled;
if (wasEnabled != enabled) {
- mHandler.sendEmptyMessage(MyCallback.MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED);
+ notifyAccessibilityStateChanged();
}
if (wasTouchExplorationEnabled != touchExplorationEnabled) {
- mHandler.sendEmptyMessage(MyCallback.MSG_NOTIFY_EXPLORATION_STATE_CHANGED);
+ notifyTouchExplorationStateChanged();
}
if (wasHighTextContrastEnabled != highTextContrastEnabled) {
- mHandler.sendEmptyMessage(MyCallback.MSG_NOTIFY_HIGH_TEXT_CONTRAST_STATE_CHANGED);
+ notifyHighTextContrastStateChanged();
}
}
@@ -932,81 +993,78 @@ public final class AccessibilityManager {
/**
* Notifies the registered {@link AccessibilityStateChangeListener}s.
*/
- private void handleNotifyAccessibilityStateChanged() {
+ private void notifyAccessibilityStateChanged() {
final boolean isEnabled;
+ final ArrayMap<AccessibilityStateChangeListener, Handler> listeners;
synchronized (mLock) {
+ if (mAccessibilityStateChangeListeners.isEmpty()) {
+ return;
+ }
isEnabled = mIsEnabled;
+ listeners = new ArrayMap<>(mAccessibilityStateChangeListeners);
}
- // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
- for (AccessibilityStateChangeListener listener : mAccessibilityStateChangeListeners) {
- listener.onAccessibilityStateChanged(isEnabled);
+
+ int numListeners = listeners.size();
+ for (int i = 0; i < numListeners; i++) {
+ final AccessibilityStateChangeListener listener =
+ mAccessibilityStateChangeListeners.keyAt(i);
+ mAccessibilityStateChangeListeners.valueAt(i)
+ .post(() -> listener.onAccessibilityStateChanged(isEnabled));
}
}
/**
* Notifies the registered {@link TouchExplorationStateChangeListener}s.
*/
- private void handleNotifyTouchExplorationStateChanged() {
+ private void notifyTouchExplorationStateChanged() {
final boolean isTouchExplorationEnabled;
+ final ArrayMap<TouchExplorationStateChangeListener, Handler> listeners;
synchronized (mLock) {
+ if (mTouchExplorationStateChangeListeners.isEmpty()) {
+ return;
+ }
isTouchExplorationEnabled = mIsTouchExplorationEnabled;
+ listeners = new ArrayMap<>(mTouchExplorationStateChangeListeners);
}
- // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
- for (TouchExplorationStateChangeListener listener :mTouchExplorationStateChangeListeners) {
- listener.onTouchExplorationStateChanged(isTouchExplorationEnabled);
+
+ int numListeners = listeners.size();
+ for (int i = 0; i < numListeners; i++) {
+ final TouchExplorationStateChangeListener listener =
+ mTouchExplorationStateChangeListeners.keyAt(i);
+ mTouchExplorationStateChangeListeners.valueAt(i)
+ .post(() -> listener.onTouchExplorationStateChanged(isTouchExplorationEnabled));
}
}
/**
* Notifies the registered {@link HighTextContrastChangeListener}s.
*/
- private void handleNotifyHighTextContrastStateChanged() {
+ private void notifyHighTextContrastStateChanged() {
final boolean isHighTextContrastEnabled;
+ final ArrayMap<HighTextContrastChangeListener, Handler> listeners;
synchronized (mLock) {
+ if (mHighTextContrastStateChangeListeners.isEmpty()) {
+ return;
+ }
isHighTextContrastEnabled = mIsHighTextContrastEnabled;
+ listeners = new ArrayMap<>(mHighTextContrastStateChangeListeners);
}
- // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
- for (HighTextContrastChangeListener listener : mHighTextContrastStateChangeListeners) {
- listener.onHighTextContrastStateChanged(isHighTextContrastEnabled);
- }
- }
- /**
- * Notifies the registered {@link AccessibilityServicesStateChangeListener}s.
- */
- private void handleNotifyServicesStateChanged() {
- // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
- for (AccessibilityServicesStateChangeListener listener : mServicesStateChangeListeners) {
- listener.onAccessibilityServicesStateChanged(this);
+ int numListeners = listeners.size();
+ for (int i = 0; i < numListeners; i++) {
+ final HighTextContrastChangeListener listener =
+ mHighTextContrastStateChangeListeners.keyAt(i);
+ mHighTextContrastStateChangeListeners.valueAt(i)
+ .post(() -> listener.onHighTextContrastStateChanged(isHighTextContrastEnabled));
}
}
private final class MyCallback implements Handler.Callback {
- public static final int MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED = 1;
- public static final int MSG_NOTIFY_EXPLORATION_STATE_CHANGED = 2;
- public static final int MSG_NOTIFY_HIGH_TEXT_CONTRAST_STATE_CHANGED = 3;
- public static final int MSG_SET_STATE = 4;
- public static final int MSG_NOTIFY_SERVICES_STATE_CHANGED = 5;
+ public static final int MSG_SET_STATE = 1;
@Override
public boolean handleMessage(Message message) {
switch (message.what) {
- case MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED: {
- handleNotifyAccessibilityStateChanged();
- } break;
-
- case MSG_NOTIFY_EXPLORATION_STATE_CHANGED: {
- handleNotifyTouchExplorationStateChanged();
- } break;
-
- case MSG_NOTIFY_HIGH_TEXT_CONTRAST_STATE_CHANGED: {
- handleNotifyHighTextContrastStateChanged();
- } break;
-
- case MSG_NOTIFY_SERVICES_STATE_CHANGED: {
- handleNotifyServicesStateChanged();
- } break;
-
case MSG_SET_STATE: {
// See comment at mClient
final int state = message.arg1;
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index b9d42f68c6d1..6e02a844c022 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -99,17 +99,15 @@ public final class AutofillManager {
static final String SESSION_ID_TAG = "android:sessionId";
static final String LAST_AUTOFILLED_DATA_TAG = "android:lastAutoFilledData";
- // Public flags start from the lowest bit
/**
- * Indicates autofill was explicitly requested by the user.
- *
* @deprecated Use {@link android.service.autofill.FillRequest#FLAG_MANUAL_REQUEST}
+ * @hide
*/
// TODO(b/37563972): remove (and change value of private flags)
@Deprecated
public static final int FLAG_MANUAL_REQUEST = 0x1;
- // Private flags start from the highest bit
+ // TODO(b/37563972): start from 0x1 once FLAG_MANUAL_REQUEST is gone
/** @hide */ public static final int FLAG_START_SESSION = 0x80000000;
/** @hide */ public static final int FLAG_VIEW_ENTERED = 0x40000000;
/** @hide */ public static final int FLAG_VIEW_EXITED = 0x20000000;
@@ -661,6 +659,39 @@ public final class AutofillManager {
}
}
+ /**
+ * Returns {@code true} if the calling application provides a {@link AutofillService} that is
+ * enabled for the current user, or {@code false} otherwise.
+ */
+ public boolean hasEnabledAutofillServices() {
+ if (mService == null) return false;
+
+ try {
+ return mService.isServiceEnabled(mContext.getUserId(), mContext.getPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Returns {@code true} if Autofill is supported for this user.
+ *
+ * <p>Autofill is typically supported, but it could be unsupported in cases like:
+ * <ol>
+ * <li>Low-end devices.
+ * <li>Device policy rules that forbid its usage.
+ * </ol>
+ */
+ public boolean isAutofillSupported() {
+ if (mService == null) return false;
+
+ try {
+ return mService.isServiceSupported(mContext.getUserId());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
private AutofillClient getClientLocked() {
if (mContext instanceof AutofillClient) {
return (AutofillClient) mContext;
@@ -1050,7 +1081,8 @@ public final class AutofillManager {
return view;
}
- private boolean hasAutofillFeature() {
+ /** @hide */
+ public boolean hasAutofillFeature() {
return mService != null;
}
diff --git a/core/java/android/view/autofill/IAutoFillManager.aidl b/core/java/android/view/autofill/IAutoFillManager.aidl
index df777c4a6869..9417bd07a267 100644
--- a/core/java/android/view/autofill/IAutoFillManager.aidl
+++ b/core/java/android/view/autofill/IAutoFillManager.aidl
@@ -44,4 +44,6 @@ interface IAutoFillManager {
void setAuthenticationResult(in Bundle data, int sessionId, int userId);
void setHasCallback(int sessionId, int userId, boolean hasIt);
void disableOwnedAutofillServices(int userId);
+ boolean isServiceSupported(int userId);
+ boolean isServiceEnabled(int userId, String packageName);
}
diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java
index 2123debfeb67..b519ec9c42a2 100644
--- a/core/java/android/webkit/WebViewZygote.java
+++ b/core/java/android/webkit/WebViewZygote.java
@@ -40,6 +40,7 @@ public class WebViewZygote {
private static final String WEBVIEW_ZYGOTE_SERVICE_32 = "webview_zygote32";
private static final String WEBVIEW_ZYGOTE_SERVICE_64 = "webview_zygote64";
+ private static final String WEBVIEW_ZYGOTE_SOCKET = "webview_zygote";
/**
* Lock object that protects all other static members.
@@ -202,7 +203,7 @@ public class WebViewZygote {
}
try {
- sZygote = new ZygoteProcess("webview_zygote", null);
+ sZygote = new ZygoteProcess(WEBVIEW_ZYGOTE_SOCKET, null);
// All the work below is usually done by LoadedApk, but the zygote can't talk to
// PackageManager or construct a LoadedApk since it's single-threaded pre-fork, so
@@ -217,6 +218,8 @@ public class WebViewZygote {
final String zip = (zipPaths.size() == 1) ? zipPaths.get(0) :
TextUtils.join(File.pathSeparator, zipPaths);
+ waitForZygote();
+
Log.d(LOGTAG, "Preloading package " + zip + " " + librarySearchPath);
sZygote.preloadPackageForAbi(zip, librarySearchPath, sPackageCacheKey,
Build.SUPPORTED_ABIS[0]);
@@ -225,4 +228,25 @@ public class WebViewZygote {
sZygote = null;
}
}
+
+ /**
+ * Wait until a connection to the Zygote can be established.
+ */
+ private static void waitForZygote() {
+ while (true) {
+ try {
+ final ZygoteProcess.ZygoteState zs =
+ ZygoteProcess.ZygoteState.connect(WEBVIEW_ZYGOTE_SOCKET);
+ zs.close();
+ break;
+ } catch (IOException ioe) {
+ Log.w(LOGTAG, "Got error connecting to zygote, retrying. msg= " + ioe.getMessage());
+ }
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException ie) {
+ }
+ }
+ }
}
diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java
index 869ef71c0d51..74f22b35e001 100644
--- a/core/java/android/widget/ArrayAdapter.java
+++ b/core/java/android/widget/ArrayAdapter.java
@@ -37,19 +37,38 @@ import java.util.Comparator;
import java.util.List;
/**
- * A concrete BaseAdapter that is backed by an array of arbitrary
- * objects. By default this class expects that the provided resource id references
- * a single TextView. If you want to use a more complex layout, use the constructors that
- * also takes a field id. That field id should reference a TextView in the larger layout
- * resource.
- *
- * <p>However the TextView is referenced, it will be filled with the toString() of each object in
- * the array. You can add lists or arrays of custom objects. Override the toString() method
- * of your objects to determine what text will be displayed for the item in the list.
- *
- * <p>To use something other than TextViews for the array display, for instance, ImageViews,
- * or to have some of data besides toString() results fill the views,
- * override {@link #getView(int, View, ViewGroup)} to return the type of view you want.
+ * You can use this adapter to provide views for an {@link AdapterView},
+ * Returns a view for each object in a collection of data objects you
+ * provide, and can be used with list-based user interface widgets such as
+ * {@link ListView} or {@link Spinner}.
+ * <p>
+ * By default, the array adapter creates a view by calling {@link Object#toString()} on each
+ * data object in the collection you provide, and places the result in a TextView.
+ * You may also customize what type of view is used for the data object in the collection.
+ * To customize what type of view is used for the data object,
+ * override {@link #getView(int, View, ViewGroup)}
+ * and inflate a view resource.
+ * For a code example, see
+ * the <a href="https://developer.android.com/samples/CustomChoiceList/index.html">
+ * CustomChoiceList</a> sample.
+ * </p>
+ * <p>
+ * For an example of using an array adapter with a ListView, see the
+ * <a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">
+ * Adapter Views</a> guide.
+ * </p>
+ * <p>
+ * For an example of using an array adapter with a Spinner, see the
+ * <a href="{@docRoot}guide/topics/ui/controls/spinner.html">Spinners</a> guide.
+ * </p>
+ * <p class="note"><strong>Note:</strong>
+ * If you are considering using array adapter with a ListView, consider using
+ * {@link android.support.v7.widget.RecyclerView} instead.
+ * RecyclerView offers similar features with better performance and more flexibility than
+ * ListView provides.
+ * See the
+ * <a href="https://developer.android.com/guide/topics/ui/layout/recyclerview.html">
+ * Recycler View</a> guide.</p>
*/
public class ArrayAdapter<T> extends BaseAdapter implements Filterable, ThemedSpinnerAdapter {
/**
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index 0dce07936fe5..8094bfc6eeb8 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -769,6 +769,7 @@ public class DatePicker extends FrameLayout {
// This view is self-sufficient for autofill, so it needs to call
// onProvideAutoFillStructure() to fill itself, but it does not need to call
// dispatchProvideAutoFillStructure() to fill its children.
+ structure.setAutofillId(getAutofillId());
onProvideAutofillStructure(structure, flags);
}
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 12e35a14e381..569fe017ac86 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -67,11 +67,77 @@ import java.util.function.Predicate;
/**
- * A view that shows items in a vertically scrolling list. The items
- * come from the {@link ListAdapter} associated with this view.
+ * <p>Displays a vertically-scrollable collection of views, where each view is positioned
+ * immediatelybelow the previous view in the list. For a more modern, flexible, and performant
+ * approach to displaying lists, use {@link android.support.v7.widget.RecyclerView}.</p>
*
- * <p>See the <a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>
- * guide.</p>
+ * <p>To display a list, you can include a list view in your layout XML file:</p>
+ *
+ * <pre>&lt;ListView
+ * android:id="@+id/list_view"
+ * android:layout_width="match_parent"
+ * android:layout_height="match_parent" /&gt;</pre>
+ *
+ * <p>A list view is an <a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">
+ * adapter view</a> that does not know the details, such as type and contents, of the views it
+ * contains. Instead list view requests views on demand from a {@link ListAdapter} as needed,
+ * such as to display new views as the user scrolls up or down.</p>
+ *
+ * <p>In order to display items in the list, call {@link #setAdapter(ListAdapter adapter)}
+ * to associate an adapter with the list. For a simple example, see the discussion of filling an
+ * adapter view with text in the
+ * <a href="{@docRoot}guide/topics/ui/declaring-layout.html#FillingTheLayout">
+ * Layouts</a> guide.</p>
+ *
+ * <p>To display a more custom view for each item in your dataset, implement a ListAdapter.
+ * For example, extend {@link BaseAdapter} and create and configure the view for each data item in
+ * {@code getView(...)}:</p>
+ *
+ * <pre>private class MyAdapter extends BaseAdapter {
+ *
+ * // override other abstract methods here
+ *
+ * &#64;Override
+ * public View getView(int position, View convertView, ViewGroup container) {
+ * if (convertView == null) {
+ * convertView = getLayoutInflater().inflate(R.layout.list_item, container, false);
+ * }
+ *
+ * ((TextView) convertView.findViewById(android.R.id.text1))
+ * .setText(getItem(position));
+ * return convertView;
+ * }
+ * }</pre>
+ *
+ * <p class="note">ListView attempts to reuse view objects in order to improve performance and
+ * avoid a lag in response to user scrolls. To take advantage of this feature, check if the
+ * {@code convertView} provided to {@code getView(...)} is null before creating or inflating a new
+ * view object. See
+ * <a href="{@docRoot}training/improving-layouts/smooth-scrolling.html">
+ * Making ListView Scrolling Smooth</a> for more ways to ensure a smooth user experience.</p>
+ *
+ * <p>For a more complete example of creating a custom adapter, see the
+ * <a href="{@docRoot}samples/CustomChoiceList/index.html">
+ * Custom Choice List</a> sample app.</p>
+ *
+ * <p>To specify an action when a user clicks or taps on a single list item, see
+ * <a href="{@docRoot}guide/topics/ui/declaring-layout.html#HandlingUserSelections">
+ * Handling click events</a>.</p>
+ *
+ * <p>To learn how to populate a list view with a CursorAdapter, see the discussion of filling an
+ * adapter view with text in the
+ * <a href="{@docRoot}guide/topics/ui/declaring-layout.html#FillingTheLayout">
+ * Layouts</a> guide.
+ * See <a href="{@docRoot}guide/topics/ui/layout/listview.html">
+ * Using a Loader</a>
+ * to learn how to avoid blocking the main thread when using a cursor.</p>
+ *
+ * <p class="note">Note, many examples use {@link android.app.ListActivity ListActivity}
+ * or {@link android.app.ListFragment ListFragment}
+ * to display a list view. Instead, favor the more flexible approach when writing your own app:
+ * use a more generic Activity subclass or Fragment subclass and add a list view to the layout
+ * or view hierarchy directly. This approach gives you more direct control of the
+ * list view and adapter.</p>
*
* @attr ref android.R.styleable#ListView_entries
* @attr ref android.R.styleable#ListView_divider
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 036b39100286..e534233432d2 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -413,6 +413,30 @@ public class RemoteViews implements Parcelable, Filter {
recalculateMemoryUsage();
}
+ private static class RemoteViewsContextWrapper extends ContextWrapper {
+ private final Context mContextForResources;
+
+ RemoteViewsContextWrapper(Context context, Context contextForResources) {
+ super(context);
+ mContextForResources = contextForResources;
+ }
+
+ @Override
+ public Resources getResources() {
+ return mContextForResources.getResources();
+ }
+
+ @Override
+ public Resources.Theme getTheme() {
+ return mContextForResources.getTheme();
+ }
+
+ @Override
+ public String getPackageName() {
+ return mContextForResources.getPackageName();
+ }
+ }
+
private class SetEmptyView extends Action {
int viewId;
int emptyViewId;
@@ -3240,20 +3264,7 @@ public class RemoteViews implements Parcelable, Filter {
// still returns the current users userId so settings like data / time formats
// are loaded without requiring cross user persmissions.
final Context contextForResources = getContextForResources(context);
- Context inflationContext = new ContextWrapper(context) {
- @Override
- public Resources getResources() {
- return contextForResources.getResources();
- }
- @Override
- public Resources.Theme getTheme() {
- return contextForResources.getTheme();
- }
- @Override
- public String getPackageName() {
- return contextForResources.getPackageName();
- }
- };
+ Context inflationContext = new RemoteViewsContextWrapper(context, contextForResources);
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index df99fb4dd06b..de289bb9a27a 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -524,6 +524,7 @@ public class TimePicker extends FrameLayout {
// This view is self-sufficient for autofill, so it needs to call
// onProvideAutoFillStructure() to fill itself, but it does not need to call
// dispatchProvideAutoFillStructure() to fill its children.
+ structure.setAutofillId(getAutofillId());
onProvideAutofillStructure(structure, flags);
}
diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java
index 2c8e4e0414b6..73886a700c7f 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -169,6 +169,13 @@ public class ArrayUtils {
}
/**
+ * Length of the given array or 0 if it's null.
+ */
+ public static int size(@Nullable Object[] array) {
+ return array == null ? 0 : array.length;
+ }
+
+ /**
* Checks that value is present as at least one of the elements of the array.
* @param array the array to check in
* @param value the value to check for
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 96285cd4c17d..ceb3cc8b4ef5 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -234,6 +234,7 @@ LOCAL_STATIC_LIBRARIES := \
libseccomp_policy \
libselinux \
libcrypto \
+ libgrallocusage \
LOCAL_SHARED_LIBRARIES := \
libmemtrack \
diff --git a/core/jni/android_hardware_HardwareBuffer.cpp b/core/jni/android_hardware_HardwareBuffer.cpp
index ed0ab6054be7..4b31c91c708c 100644
--- a/core/jni/android_hardware_HardwareBuffer.cpp
+++ b/core/jni/android_hardware_HardwareBuffer.cpp
@@ -34,6 +34,7 @@
#include <private/gui/ComposerService.h>
#include <hardware/gralloc1.h>
+#include <grallocusage/GrallocUsageConversion.h>
#include "core_jni_helpers.h"
@@ -85,7 +86,7 @@ static jlong android_hardware_HardwareBuffer_create(JNIEnv* env, jobject clazz,
&producerUsage, &consumerUsage, usage, 0);
sp<GraphicBuffer> buffer = new GraphicBuffer(width, height, pixelFormat, layers,
- producerUsage, consumerUsage,
+ android_convertGralloc1To0Usage(producerUsage, consumerUsage),
std::string("HardwareBuffer pid [") + std::to_string(getpid()) +"]");
status_t error = buffer->initCheck();
if (error < 0) {
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index d0469961b674..f1b19e174436 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -427,6 +427,11 @@ static jlong nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jlong sensorM
String8 clientName(packageUtf.c_str());
sp<SensorEventQueue> queue(mgr->createEventQueue(clientName, mode));
+ if (queue == NULL) {
+ jniThrowRuntimeException(env, "Cannot construct native SensorEventQueue.");
+ return 0;
+ }
+
sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, msgQ);
if (messageQueue == NULL) {
jniThrowRuntimeException(env, "MessageQueue is not initialized.");
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index b95258bca49c..6000fb56299d 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -685,11 +685,14 @@ static jint com_android_internal_os_Zygote_nativeForkAndSpecialize(
// Grant CAP_WAKE_ALARM to the Bluetooth process.
// Additionally, allow bluetooth to open packet sockets so it can start the DHCP client.
+ // Grant CAP_SYS_NICE to allow Bluetooth to set RT priority for
+ // audio-related threads.
// TODO: consider making such functionality an RPC to netd.
if (multiuser_get_app_id(uid) == AID_BLUETOOTH) {
capabilities |= (1LL << CAP_WAKE_ALARM);
capabilities |= (1LL << CAP_NET_RAW);
capabilities |= (1LL << CAP_NET_BIND_SERVICE);
+ capabilities |= (1LL << CAP_SYS_NICE);
}
// Grant CAP_BLOCK_SUSPEND to processes that belong to GID "wakelock"
diff --git a/core/res/res/layout/notification_template_material_ambient.xml b/core/res/res/layout/notification_template_material_ambient.xml
index 74f0e57c709b..76b3528d26fe 100644
--- a/core/res/res/layout/notification_template_material_ambient.xml
+++ b/core/res/res/layout/notification_template_material_ambient.xml
@@ -33,7 +33,8 @@
android:layout_gravity="top"
android:layout_marginTop="@dimen/notification_content_margin_top"
android:layout_marginBottom="@dimen/notification_action_list_height"
- android:paddingTop="10dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="6dp"
android:clipToPadding="false"
android:orientation="vertical">
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 6e790a70f6a4..3898cae0df07 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2332,10 +2332,18 @@
<attr name="importantForAutofill">
<!-- Let the Android System use its heuristics to determine if the view is important for autofill. -->
<flag name="auto" value="0" />
- <!-- Hint the Android System that this view is important for autofill. -->
+ <!-- Hint the Android System that this view is important for autofill,
+ and its children (if any) will be traversed.. -->
<flag name="yes" value="0x1" />
- <!-- Hint the Android System that this view is *not* important for autofill. -->
+ <!-- Hint the Android System that this view is *not* important for autofill,
+ but its children (if any) will be traversed.. -->
<flag name="no" value="0x2" />
+ <!-- Hint the Android System that this view is important for autofill,
+ but its children (if any) will not be traversed. -->
+ <flag name="yesExcludeDescendants" value="0x4" />
+ <!-- Hint the Android System that this view is *not* important for autofill,
+ and its children (if any) will not be traversed. -->
+ <flag name="noExcludeDescendants" value="0x8" />
</attr>
<!-- Boolean that controls whether a view can take focus while in touch mode.
@@ -3426,7 +3434,9 @@
<flag name="flagIncludeNotImportantViews" value="0x00000002" />
<!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE}. -->
<flag name="flagRequestTouchExplorationMode" value="0x00000004" />
- <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY}. -->
+ <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY}.
+ Not used by the framework.
+ -->
<flag name="flagRequestEnhancedWebAccessibility" value="0x00000008" />
<!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS}. -->
<flag name="flagReportViewIds" value="0x00000010" />
@@ -3457,12 +3467,8 @@
-->
<attr name="canRequestTouchExplorationMode" format="boolean" />
<!-- Attribute whether the accessibility service wants to be able to request enhanced
- web accessibility enhancements. For example, installing scripts to make app
- content more accessible.
- <p>
- Required to allow setting the {@link android.accessibilityservice
- #AccessibilityServiceInfo#FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY} flag.
- </p>
+ web accessibility enhancements.
+ {@deprecated Not used by the framework}
-->
<attr name="canRequestEnhancedWebAccessibility" format="boolean" />
<!-- Attribute whether the accessibility service wants to be able to request to
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index a5181fee1445..35b12ffb5d68 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -713,13 +713,6 @@
<string name="capability_desc_canRequestTouchExploration">Tapped items will be spoken aloud
and the screen can be explored using gestures.</string>
- <!-- Title for the capability of an accessibility service to request enhanced web accessibility. -->
- <string name="capability_title_canRequestEnhancedWebAccessibility">Turn on enhanced web
- accessibility</string>
- <!-- Description for the capability of an accessibility service to request enhanced web accessibility. -->
- <string name="capability_desc_canRequestEnhancedWebAccessibility">Scripts may be installed to
- make app content more accessible.</string>
-
<!-- Title for the capability of an accessibility service to request to filter key events. -->
<string name="capability_title_canRequestFilterKeyEvents">Observe text you type</string>
<!-- Description for the capability of an accessibility service to request to filter key events. -->
diff --git a/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java b/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java
index 497bc5cd900e..ff9816ad090c 100644
--- a/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java
+++ b/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java
@@ -1,26 +1,19 @@
package android.net;
-import static android.net.NetworkRecommendationProvider.EXTRA_RECOMMENDATION_RESULT;
-import static android.net.NetworkRecommendationProvider.EXTRA_SEQUENCE;
-
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.fail;
-import static junit.framework.TestCase.assertEquals;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import android.Manifest.permission;
import android.content.Context;
-import android.os.Bundle;
-import android.os.IRemoteCallback;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
@@ -35,11 +28,9 @@ import java.util.concurrent.TimeUnit;
*/
@RunWith(AndroidJUnit4.class)
public class NetworkRecommendationProviderTest {
- @Mock private IRemoteCallback mMockRemoteCallback;
@Mock private Context mContext;
private NetworkRecProvider mRecProvider;
private INetworkRecommendationProvider mStub;
- private CountDownLatch mRecRequestLatch;
private CountDownLatch mScoreRequestLatch;
private NetworkKey[] mTestNetworkKeys;
@@ -48,10 +39,8 @@ public class NetworkRecommendationProviderTest {
MockitoAnnotations.initMocks(this);
Executor executor = Executors.newSingleThreadExecutor();
- mRecRequestLatch = new CountDownLatch(1);
mScoreRequestLatch = new CountDownLatch(1);
- mRecProvider = new NetworkRecProvider(mContext, executor, mRecRequestLatch,
- mScoreRequestLatch);
+ mRecProvider = new NetworkRecProvider(mContext, executor, mScoreRequestLatch);
mStub = INetworkRecommendationProvider.Stub.asInterface(mRecProvider.getBinder());
mTestNetworkKeys = new NetworkKey[2];
mTestNetworkKeys[0] = new NetworkKey(new WifiKey("\"ssid_01\"", "00:00:00:00:00:11"));
@@ -59,69 +48,6 @@ public class NetworkRecommendationProviderTest {
}
@Test
- public void testRecommendationRequestReceived() throws Exception {
- final RecommendationRequest request = new RecommendationRequest.Builder().build();
- final int sequence = 100;
- mStub.requestRecommendation(request, mMockRemoteCallback, sequence);
-
- // wait for onRequestRecommendation() to be called in our impl below.
- mRecRequestLatch.await(200, TimeUnit.MILLISECONDS);
- NetworkRecommendationProvider.ResultCallback expectedResultCallback =
- new NetworkRecommendationProvider.ResultCallback(mMockRemoteCallback, sequence);
- assertEquals(request, mRecProvider.mCapturedRequest);
- assertEquals(expectedResultCallback, mRecProvider.mCapturedCallback);
- }
-
- @Test
- public void testRecommendationRequest_permissionsEnforced() throws Exception {
- final RecommendationRequest request = new RecommendationRequest.Builder().build();
- final int sequence = 100;
- Mockito.doThrow(new SecurityException())
- .when(mContext)
- .enforceCallingOrSelfPermission(eq(permission.REQUEST_NETWORK_SCORES), anyString());
-
- try {
- mStub.requestRecommendation(request, mMockRemoteCallback, sequence);
- fail("SecurityException expected.");
- } catch (SecurityException e) {
- // expected
- }
- }
-
- @Test
- public void testResultCallbackOnResult() throws Exception {
- final int sequence = 100;
- final NetworkRecommendationProvider.ResultCallback callback =
- new NetworkRecommendationProvider.ResultCallback(mMockRemoteCallback, sequence);
-
- final RecommendationResult result = RecommendationResult.createDoNotConnectRecommendation();
- callback.onResult(result);
-
- final ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
- Mockito.verify(mMockRemoteCallback).sendResult(bundleCaptor.capture());
- Bundle capturedBundle = bundleCaptor.getValue();
- assertEquals(sequence, capturedBundle.getInt(EXTRA_SEQUENCE));
- assertSame(result, capturedBundle.getParcelable(EXTRA_RECOMMENDATION_RESULT));
- }
-
- @Test
- public void testResultCallbackOnResult_runTwice_throwsException() throws Exception {
- final int sequence = 100;
- final NetworkRecommendationProvider.ResultCallback callback =
- new NetworkRecommendationProvider.ResultCallback(mMockRemoteCallback, sequence);
-
- final RecommendationResult result = RecommendationResult.createDoNotConnectRecommendation();
- callback.onResult(result);
-
- try {
- callback.onResult(result);
- fail("Callback ran more than once.");
- } catch (IllegalStateException e) {
- // expected
- }
- }
-
- @Test
public void testScoreRequestReceived() throws Exception {
mStub.requestScores(mTestNetworkKeys);
@@ -162,28 +88,15 @@ public class NetworkRecommendationProviderTest {
}
private static class NetworkRecProvider extends NetworkRecommendationProvider {
- private final CountDownLatch mRecRequestLatch;
private final CountDownLatch mScoreRequestLatch;
- RecommendationRequest mCapturedRequest;
- ResultCallback mCapturedCallback;
NetworkKey[] mCapturedNetworks;
- NetworkRecProvider(Context context, Executor executor, CountDownLatch recRequestLatch,
- CountDownLatch networkRequestLatch) {
+ NetworkRecProvider(Context context, Executor executor, CountDownLatch networkRequestLatch) {
super(context, executor);
- mRecRequestLatch = recRequestLatch;
mScoreRequestLatch = networkRequestLatch;
}
@Override
- public void onRequestRecommendation(RecommendationRequest request,
- ResultCallback callback) {
- mCapturedRequest = request;
- mCapturedCallback = callback;
- mRecRequestLatch.countDown();
- }
-
- @Override
public void onRequestScores(NetworkKey[] networks) {
mCapturedNetworks = networks;
mScoreRequestLatch.countDown();
diff --git a/core/tests/coretests/src/android/net/RecommendationRequestTest.java b/core/tests/coretests/src/android/net/RecommendationRequestTest.java
deleted file mode 100644
index e2e68834de7b..000000000000
--- a/core/tests/coretests/src/android/net/RecommendationRequestTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package android.net;
-
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiConfiguration;
-import android.os.Parcel;
-import android.os.SystemClock;
-import android.test.AndroidTestCase;
-
-public class RecommendationRequestTest extends AndroidTestCase {
- private ScanResult[] mScanResults;
- private WifiConfiguration mDefaultConfig;
- private WifiConfiguration mConnectedConfig;
- private WifiConfiguration[] mConnectableConfigs;
- private int mLastSelectedNetworkId;
- private long mLastSelectedNetworkTimestamp;
-
- @Override
- public void setUp() throws Exception {
- mScanResults = new ScanResult[2];
- mScanResults[0] = new ScanResult();
- mScanResults[1] = new ScanResult(
- "ssid",
- "bssid",
- 0L /*hessid*/,
- 1 /*anqpDominId*/,
- "caps",
- 2 /*level*/,
- 3 /*frequency*/,
- 4L /*tsf*/,
- 5 /*distCm*/,
- 6 /*distSdCm*/,
- 7 /*channelWidth*/,
- 8 /*centerFreq0*/,
- 9 /*centerFreq1*/,
- false /*is80211McRTTResponder*/);
- mDefaultConfig = new WifiConfiguration();
- mDefaultConfig.SSID = "default_config";
- mConnectedConfig = new WifiConfiguration();
- mConnectedConfig.SSID = "connected_config";
- mConnectableConfigs = new WifiConfiguration[] {mDefaultConfig, mConnectedConfig};
- mLastSelectedNetworkId = 5;
- mLastSelectedNetworkTimestamp = SystemClock.elapsedRealtime();
- }
-
- public void testParceling() throws Exception {
- RecommendationRequest request = new RecommendationRequest.Builder()
- .setDefaultWifiConfig(mDefaultConfig)
- .setScanResults(mScanResults)
- .setConnectedWifiConfig(mConnectedConfig)
- .setConnectableConfigs(mConnectableConfigs)
- .setLastSelectedNetwork(mLastSelectedNetworkId, mLastSelectedNetworkTimestamp)
- .build();
-
- RecommendationRequest parceled = passThroughParcel(request);
- assertEquals(request.getDefaultWifiConfig().SSID,
- parceled.getDefaultWifiConfig().SSID);
- assertEquals(request.getConnectedConfig().SSID,
- parceled.getConnectedConfig().SSID);
- ScanResult[] parceledScanResults = parceled.getScanResults();
- assertNotNull(parceledScanResults);
- assertEquals(mScanResults.length, parceledScanResults.length);
- for (int i = 0; i < mScanResults.length; i++) {
- assertEquals(mScanResults[i].SSID, parceledScanResults[i].SSID);
- }
- WifiConfiguration[] parceledConfigs = parceled.getConnectableConfigs();
- for (int i = 0; i < parceledConfigs.length; i++) {
- assertEquals(mConnectableConfigs[i].SSID, parceledConfigs[i].SSID);
- }
- assertEquals(mLastSelectedNetworkId, parceled.getLastSelectedNetworkId());
- assertEquals(mLastSelectedNetworkTimestamp, parceled.getLastSelectedNetworkTimestamp());
- }
-
- public void testParceling_nullScanResults() throws Exception {
- RecommendationRequest request = new RecommendationRequest.Builder()
- .setDefaultWifiConfig(mDefaultConfig)
- .build();
-
- RecommendationRequest parceled = passThroughParcel(request);
- ScanResult[] parceledScanResults = parceled.getScanResults();
- assertNull(parceledScanResults);
- }
-
- public void testParceling_nullWifiConfigArray() throws Exception {
- RecommendationRequest request = new RecommendationRequest.Builder()
- .setDefaultWifiConfig(mDefaultConfig)
- .build();
-
- RecommendationRequest parceled = passThroughParcel(request);
- WifiConfiguration[] parceledConfigs = parceled.getConnectableConfigs();
- assertNull(parceledConfigs);
- }
-
- public void testParceling_unsetLastSelectedNetwork() throws Exception {
- RecommendationRequest request = new RecommendationRequest.Builder()
- .build();
-
- RecommendationRequest parceled = passThroughParcel(request);
-
- assertEquals(-1, parceled.getLastSelectedNetworkId());
- assertEquals(0, parceled.getLastSelectedNetworkTimestamp());
- }
-
- private RecommendationRequest passThroughParcel(RecommendationRequest request) {
- Parcel p = Parcel.obtain();
- RecommendationRequest output = null;
- try {
- request.writeToParcel(p, 0);
- p.setDataPosition(0);
- output = RecommendationRequest.CREATOR.createFromParcel(p);
- } finally {
- p.recycle();
- }
- assertNotNull(output);
- return output;
- }
-}
diff --git a/core/tests/coretests/src/android/preference/PreferenceIconSpaceTest.java b/core/tests/coretests/src/android/preference/PreferenceIconSpaceTest.java
new file mode 100644
index 000000000000..654474cba699
--- /dev/null
+++ b/core/tests/coretests/src/android/preference/PreferenceIconSpaceTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.preference;
+
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class PreferenceIconSpaceTest {
+
+ private TestPreference mPreference;
+
+ @Mock
+ private ViewGroup mViewGroup;
+ @Mock
+ private ImageView mIconView;
+ @Mock
+ private View mImageFrame;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mViewGroup.findViewById(com.android.internal.R.id.icon_frame))
+ .thenReturn(mImageFrame);
+ when(mViewGroup.findViewById(com.android.internal.R.id.icon))
+ .thenReturn(mIconView);
+
+ mPreference = new TestPreference(InstrumentationRegistry.getTargetContext());
+ }
+
+ @Test
+ public void bindView_iconSpaceReserved_shouldReserveIconSpace() {
+ mPreference.setIconSpaceReserved(true);
+ mPreference.bindView(mViewGroup);
+
+ verify(mIconView).setVisibility(View.INVISIBLE);
+ verify(mImageFrame).setVisibility(View.INVISIBLE);
+ }
+
+ @Test
+ public void bindView_iconSpaceNotReserved_shouldNotReserveIconSpace() {
+ mPreference.setIconSpaceReserved(false);
+ mPreference.bindView(mViewGroup);
+
+ verify(mIconView).setVisibility(View.GONE);
+ verify(mImageFrame).setVisibility(View.GONE);
+ }
+
+ @Test
+ public void bindView_hasIcon_shouldDisplayIcon() {
+ mPreference.setIcon(new ColorDrawable(Color.BLACK));
+ mPreference.bindView(mViewGroup);
+
+ verify(mIconView).setVisibility(View.VISIBLE);
+ verify(mImageFrame).setVisibility(View.VISIBLE);
+ }
+
+ private static class TestPreference extends Preference {
+
+ public TestPreference(Context context) {
+ super(context);
+ }
+
+ public void bindView(View view) {
+ onBindView(view);
+ }
+ }
+}
diff --git a/core/tests/coretests/src/android/provider/FontsContractE2ETest.java b/core/tests/coretests/src/android/provider/FontsContractE2ETest.java
index 479f6dd0e495..29558696436d 100644
--- a/core/tests/coretests/src/android/provider/FontsContractE2ETest.java
+++ b/core/tests/coretests/src/android/provider/FontsContractE2ETest.java
@@ -18,27 +18,27 @@ package android.provider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
import android.app.Instrumentation;
-import android.content.pm.Signature;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.PackageInfo;
import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageManager;
+import android.content.pm.Signature;
import android.graphics.Typeface;
-import android.graphics.fonts.FontRequest;
-import android.provider.FontsContract;
+import android.os.Handler;
+import android.provider.FontsContract.Columns;
import android.provider.FontsContract.FontFamilyResult;
import android.provider.FontsContract.FontInfo;
-import android.provider.FontsContract.Columns;
+import android.provider.FontsContract;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
-import android.os.Handler;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -120,7 +120,7 @@ public class FontsContractE2ETest {
inst.runOnMainSync(() -> {
FontRequest request = new FontRequest(
AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE);
- FontsContract.requestFont(ctx, request, callback, new Handler());
+ FontsContract.requestFonts(ctx, request, new Handler(), null, callback);
});
inst.waitForIdleSync();
assertEquals(1, callback.getSuccessCallCount());
@@ -131,7 +131,7 @@ public class FontsContractE2ETest {
inst.runOnMainSync(() -> {
FontRequest request = new FontRequest(
AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE);
- FontsContract.requestFont(ctx, request, callback2, new Handler());
+ FontsContract.requestFonts(ctx, request, new Handler(), null, callback2);
});
inst.waitForIdleSync();
assertEquals(1, callback2.getSuccessCallCount());
@@ -142,7 +142,7 @@ public class FontsContractE2ETest {
inst.runOnMainSync(() -> {
FontRequest request = new FontRequest(
AUTHORITY, PACKAGE, "singleFontFamily2", SIGNATURE);
- FontsContract.requestFont(ctx, request, callback3, new Handler());
+ FontsContract.requestFonts(ctx, request, new Handler(), null, callback3);
});
inst.waitForIdleSync();
assertEquals(1, callback3.getSuccessCallCount());
@@ -172,4 +172,31 @@ public class FontsContractE2ETest {
// Neighter fetchFonts nor buildTypeface should cache the Typeface.
assertNotSame(typeface, typeface2);
}
+
+ @Test
+ public void typefaceNullFdTest() throws NameNotFoundException {
+ Instrumentation inst = InstrumentationRegistry.getInstrumentation();
+ Context ctx = inst.getTargetContext();
+
+ FontRequest request = new FontRequest(
+ AUTHORITY, PACKAGE, MockFontProvider.NULL_FD_QUERY, SIGNATURE);
+ FontFamilyResult result = FontsContract.fetchFonts(
+ ctx, null /* cancellation signal */, request);
+ assertNull(FontsContract.buildTypeface(
+ ctx, null /* cancellation signal */, result.getFonts()));
+ }
+
+ @Test
+ public void getFontSyncTest() {
+ FontRequest request = new FontRequest(AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE);
+ assertNotNull(FontsContract.getFontSync(request));
+ }
+
+ @Test
+ public void getFontSyncTest_timeout() {
+ FontRequest request = new FontRequest(
+ AUTHORITY, PACKAGE, MockFontProvider.BLOCKING_QUERY, SIGNATURE);
+ assertNull(FontsContract.getFontSync(request));
+ MockFontProvider.unblock();
+ }
}
diff --git a/core/tests/coretests/src/android/provider/FontsContractTest.java b/core/tests/coretests/src/android/provider/FontsContractTest.java
index ccc8c184fdf7..56bfbb0a646f 100644
--- a/core/tests/coretests/src/android/provider/FontsContractTest.java
+++ b/core/tests/coretests/src/android/provider/FontsContractTest.java
@@ -32,7 +32,6 @@ import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.Signature;
import android.database.MatrixCursor;
-import android.graphics.fonts.FontRequest;
import android.graphics.fonts.FontVariationAxis.InvalidFormatException;
import android.graphics.fonts.FontVariationAxis;
import android.provider.FontsContract.FontInfo;
diff --git a/core/tests/coretests/src/android/provider/MockFontProvider.java b/core/tests/coretests/src/android/provider/MockFontProvider.java
index 339d5c3f7fa0..ad5b130ca90d 100644
--- a/core/tests/coretests/src/android/provider/MockFontProvider.java
+++ b/core/tests/coretests/src/android/provider/MockFontProvider.java
@@ -29,26 +29,73 @@ import android.graphics.fonts.FontVariationAxis;
import android.net.Uri;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
+import android.util.ArraySet;
import android.util.SparseArray;
-import java.util.Collections;
-import java.util.Map;
-import java.util.HashMap;
import java.io.File;
-import java.nio.file.Files;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.io.FileNotFoundException;
+import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import com.android.internal.annotations.GuardedBy;
public class MockFontProvider extends ContentProvider {
final static String AUTHORITY = "android.provider.fonts.font";
+ private static final long BLOCKING_TIMEOUT_MS = 10000; // 10 sec
+ private static final Lock sLock = new ReentrantLock();
+ private static final Condition sCond = sLock.newCondition();
+ @GuardedBy("sLock")
+ private static boolean sSignaled;
+
+ private static void blockUntilSignal() {
+ long remaining = TimeUnit.MILLISECONDS.toNanos(BLOCKING_TIMEOUT_MS);
+ sLock.lock();
+ try {
+ sSignaled = false;
+ while (!sSignaled) {
+ try {
+ remaining = sCond.awaitNanos(remaining);
+ } catch (InterruptedException e) {
+ // do nothing.
+ }
+ if (sSignaled) {
+ return;
+ }
+ if (remaining <= 0) {
+ // Timed out
+ throw new RuntimeException("Timeout during waiting");
+ }
+ }
+ } finally {
+ sLock.unlock();
+ }
+ }
+
+ public static void unblock() {
+ sLock.lock();
+ try {
+ sSignaled = true;
+ sCond.signal();
+ } finally {
+ sLock.unlock();
+ }
+ }
+
final static String[] FONT_FILES = {
"samplefont1.ttf",
};
+ private static final int NO_FILE_ID = 255;
private static final int SAMPLE_FONT_FILE_0_ID = 0;
- private static final int SAMPLE_FONT_FILE_1_ID = 1;
static class Font {
public Font(int id, int fileId, int ttcIndex, String varSettings, int weight, int italic,
@@ -99,6 +146,9 @@ public class MockFontProvider extends ContentProvider {
private int mResultCode;
};
+ public static final String BLOCKING_QUERY = "queryBlockingQuery";
+ public static final String NULL_FD_QUERY = "nullFdQuery";
+
private static Map<String, Font[]> QUERY_MAP;
static {
HashMap<String, Font[]> map = new HashMap<>();
@@ -112,6 +162,14 @@ public class MockFontProvider extends ContentProvider {
new Font(id++, SAMPLE_FONT_FILE_0_ID, 0, null, 700, 0, Columns.RESULT_CODE_OK),
});
+ map.put(BLOCKING_QUERY, new Font[] {
+ new Font(id++, SAMPLE_FONT_FILE_0_ID, 0, null, 700, 0, Columns.RESULT_CODE_OK),
+ });
+
+ map.put(NULL_FD_QUERY, new Font[] {
+ new Font(id++, NO_FILE_ID, 0, null, 700, 0, Columns.RESULT_CODE_OK),
+ });
+
QUERY_MAP = Collections.unmodifiableMap(map);
}
@@ -160,12 +218,14 @@ public class MockFontProvider extends ContentProvider {
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) {
final int id = (int)ContentUris.parseId(uri);
+ if (id == NO_FILE_ID) {
+ return null;
+ }
final File targetFile = getCopiedFile(getContext(), FONT_FILES[id]);
try {
return ParcelFileDescriptor.open(targetFile, ParcelFileDescriptor.MODE_READ_ONLY);
} catch (FileNotFoundException e) {
- throw new RuntimeException(
- "Failed to found font file. You might forget call prepareFontFiles in setUp");
+ return null;
}
}
@@ -182,7 +242,11 @@ public class MockFontProvider extends ContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
- return buildCursor(QUERY_MAP.get(selectionArgs[0]));
+ final String query = selectionArgs[0];
+ if (query.equals(BLOCKING_QUERY)) {
+ blockUntilSignal();
+ }
+ return buildCursor(QUERY_MAP.get(query));
}
@Override
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index d7887d333095..ad4afaeeefb1 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -37,7 +37,8 @@ import org.junit.runner.RunWith;
/** Tests that ensure appropriate settings are backed up. */
@RunWith(AndroidJUnit4.class)
-@Presubmit
+// TODO(b/37684646): Can re-enable pre-submit once test is fixed.
+//@Presubmit
@SmallTest
public class SettingsBackupTest {
@@ -72,6 +73,8 @@ public class SettingsBackupTest {
Settings.System.USER_ROTATION, // backup candidate?
Settings.System.VIBRATE_IN_SILENT, // deprecated?
Settings.System.VIBRATE_ON, // candidate for backup?
+ Settings.System.VOLUME_ACCESSIBILITY, // used internally, changing value will
+ // not change volume
Settings.System.VOLUME_ALARM, // deprecated since API 2?
Settings.System.VOLUME_BLUETOOTH_SCO, // deprecated since API 2?
Settings.System.VOLUME_MASTER, // candidate for backup?
@@ -121,6 +124,7 @@ public class SettingsBackupTest {
Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
Settings.Global.CAPTIVE_PORTAL_MODE,
+ Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
Settings.Global.CAPTIVE_PORTAL_SERVER,
Settings.Global.CAPTIVE_PORTAL_USE_HTTPS,
Settings.Global.CAPTIVE_PORTAL_USER_AGENT,
@@ -207,6 +211,8 @@ public class SettingsBackupTest {
Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL,
Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL,
Settings.Global.JOB_SCHEDULER_CONSTANTS,
+ Settings.Global.LANG_ID_UPDATE_CONTENT_URL,
+ Settings.Global.LANG_ID_UPDATE_METADATA_URL,
Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS,
Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST,
Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED,
@@ -300,6 +306,8 @@ public class SettingsBackupTest {
Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL,
Settings.Global.SHORTCUT_MANAGER_CONSTANTS,
Settings.Global.SHOW_TEMPERATURE_WARNING,
+ Settings.Global.SMART_SELECTION_UPDATE_CONTENT_URL,
+ Settings.Global.SMART_SELECTION_UPDATE_METADATA_URL,
Settings.Global.SMS_OUTGOING_CHECK_INTERVAL_MS,
Settings.Global.SMS_OUTGOING_CHECK_MAX_COUNT,
Settings.Global.SMS_SHORT_CODE_CONFIRMATION,
@@ -376,7 +384,6 @@ public class SettingsBackupTest {
private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS =
newHashSet(
- Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
Settings.Secure.ACCESSIBILITY_SOFT_KEYBOARD_MODE,
Settings.Secure.ALLOWED_GEOLOCATION_ORIGINS,
Settings.Secure.ALWAYS_ON_VPN_APP,
@@ -387,7 +394,6 @@ public class SettingsBackupTest {
Settings.Secure.ASSIST_DISCLOSURE_ENABLED,
Settings.Secure.ASSIST_SCREENSHOT_ENABLED,
Settings.Secure.ASSIST_STRUCTURE_ENABLED,
- Settings.Secure.AUTOFILL_SERVICE,
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED,
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED,
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_LAST_RUN,
diff --git a/core/tests/coretests/src/android/util/ArrayMapTest.java b/core/tests/coretests/src/android/util/ArrayMapTest.java
new file mode 100644
index 000000000000..32aa29fa3339
--- /dev/null
+++ b/core/tests/coretests/src/android/util/ArrayMapTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package android.util;
+
+import android.util.ArrayMap;
+
+import junit.framework.TestCase;
+import org.junit.Test;
+
+import java.util.ConcurrentModificationException;
+
+/**
+ * Unit tests for ArrayMap that don't belong in CTS.
+ */
+public class ArrayMapTest extends TestCase {
+ private static final String TAG = "ArrayMapTest";
+ ArrayMap<String, String> map = new ArrayMap<>();
+
+ /**
+ * Attempt to generate a ConcurrentModificationException in ArrayMap.
+ * <p>
+ * ArrayMap is explicitly documented to be non-thread-safe, yet it's easy to accidentally screw
+ * this up; ArrayMap should (in the spirit of the core Java collection types) make an effort to
+ * catch this and throw ConcurrentModificationException instead of crashing somewhere in its
+ * internals.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testConcurrentModificationException() throws Exception {
+ final int TEST_LEN_MS = 5000;
+ System.out.println("Starting ArrayMap concurrency test");
+ new Thread(() -> {
+ int i = 0;
+ while (map != null) {
+ try {
+ map.put(String.format("key %d", i++), "B_DONT_DO_THAT");
+ } catch (ArrayIndexOutOfBoundsException e) {
+ Log.e(TAG, "concurrent modification uncaught, causing indexing failure", e);
+ fail();
+ } catch (ClassCastException e) {
+ Log.e(TAG, "concurrent modification uncaught, causing cache corruption", e);
+ fail();
+ } catch (ConcurrentModificationException e) {
+ System.out.println("[successfully caught CME at put #" + i
+ + " size=" + (map == null ? "??" : String.valueOf(map.size())) + "]");
+ }
+ if (i % 200 == 0) {
+ System.out.print(".");
+ }
+ }
+ }).start();
+ for (int i = 0; i < (TEST_LEN_MS / 100); i++) {
+ try {
+ Thread.sleep(100);
+ map.clear();
+ System.out.print("X");
+ } catch (InterruptedException e) {
+ } catch (ArrayIndexOutOfBoundsException e) {
+ Log.e(TAG, "concurrent modification uncaught, causing indexing failure");
+ fail();
+ } catch (ClassCastException e) {
+ Log.e(TAG, "concurrent modification uncaught, causing cache corruption");
+ fail();
+ } catch (ConcurrentModificationException e) {
+ System.out.println(
+ "[successfully caught CME at clear #"
+ + i + " size=" + map.size() + "]");
+ }
+ }
+ map = null; // will stop other thread
+ System.out.println();
+ }
+
+ /**
+ * Check to make sure the same operations behave as expected in a single thread.
+ */
+ @Test
+ public void testNonConcurrentAccesses() throws Exception {
+ for (int i = 0; i < 100000; i++) {
+ try {
+ map.put(String.format("key %d", i++), "B_DONT_DO_THAT");
+ if (i % 200 == 0) {
+ System.out.print(".");
+ }
+ if (i % 500 == 0) {
+ map.clear();
+ System.out.print("X");
+ }
+ } catch (ConcurrentModificationException e) {
+ Log.e(TAG, "concurrent modification caught on single thread", e);
+ fail();
+ }
+ }
+ }
+}
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 86ab3dc227f4..344f3c83ba6c 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -181,9 +181,6 @@
<allow-in-power-save package="com.android.cellbroadcastreceiver" />
<allow-in-power-save package="com.android.shell" />
- <!-- STOPSHIP(b/36856786): Revert this once it is fixed properly -->
- <allow-in-power-save package="com.google.android.apps.enterprise.dmagent" />
-
<!-- These are the packages that are white-listed to be able to run as system user -->
<system-user-whitelisted-app package="com.android.settings" />
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 115c77faf1a8..ba62a08b6fcd 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -27,11 +27,8 @@ import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.FontListParser;
-import android.graphics.fonts.FontRequest;
-import android.graphics.fonts.FontResult;
import android.graphics.fonts.FontVariationAxis;
import android.graphics.fonts.FontVariationAxis.InvalidFormatException;
import android.net.Uri;
@@ -39,6 +36,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.os.ResultReceiver;
+import android.provider.FontRequest;
import android.provider.FontsContract;
import android.text.FontConfig;
import android.util.Base64;
@@ -100,10 +98,6 @@ public class Typeface {
static Typeface[] sDefaults;
private static final LongSparseArray<SparseArray<Typeface>> sTypefaceCache =
new LongSparseArray<>(3);
- @GuardedBy("sLock")
- private static FontsContract sFontsContract;
- @GuardedBy("sLock")
- private static Handler sHandler;
/**
* Cache for Typeface objects dynamically loaded from assets. Currently max size is 16.
@@ -205,16 +199,9 @@ public class Typeface {
public static Typeface createFromResources(
FamilyResourceEntry entry, AssetManager mgr, String path) {
if (sFallbackFonts != null) {
- Typeface typeface = findFromCache(mgr, path);
- if (typeface != null) return typeface;
-
if (entry instanceof ProviderResourceEntry) {
final ProviderResourceEntry providerEntry = (ProviderResourceEntry) entry;
// Downloadable font
- typeface = findFromCache(providerEntry.getAuthority(), providerEntry.getQuery());
- if (typeface != null) {
- return typeface;
- }
List<List<String>> givenCerts = providerEntry.getCerts();
List<List<byte[]>> certs = new ArrayList<>();
if (givenCerts != null) {
@@ -229,11 +216,15 @@ public class Typeface {
}
// Downloaded font and it wasn't cached, request it again and return a
// default font instead (nothing we can do now).
- create(new FontRequest(providerEntry.getAuthority(), providerEntry.getPackage(),
- providerEntry.getQuery(), certs), NO_OP_REQUEST_CALLBACK);
- return DEFAULT;
+ FontRequest request = new FontRequest(providerEntry.getAuthority(),
+ providerEntry.getPackage(), providerEntry.getQuery(), certs);
+ Typeface typeface = FontsContract.getFontSync(request);
+ return typeface == null ? DEFAULT : typeface;
}
+ Typeface typeface = findFromCache(mgr, path);
+ if (typeface != null) return typeface;
+
// family is FontFamilyFilesResourceEntry
final FontFamilyFilesResourceEntry filesEntry =
(FontFamilyFilesResourceEntry) entry;
@@ -283,223 +274,6 @@ public class Typeface {
}
/**
- * Set the application context so we can generate font requests from the provider. This should
- * be called from ActivityThread when the application binds, as we preload fonts.
- * @hide
- */
- public static void setApplicationContext(Context context) {
- synchronized (sLock) {
- if (sFontsContract == null) {
- sFontsContract = new FontsContract(context);
- sHandler = new Handler();
- }
- }
- }
-
- /**
- * Create a typeface object given a font request. The font will be asynchronously fetched,
- * therefore the result is delivered to the given callback. See {@link FontRequest}.
- * Only one of the methods in callback will be invoked, depending on whether the request
- * succeeds or fails. These calls will happen on the main thread.
- * @param request A {@link FontRequest} object that identifies the provider and query for the
- * request. May not be null.
- * @param callback A callback that will be triggered when results are obtained. May not be null.
- */
- @Deprecated
- public static void create(@NonNull FontRequest request, @NonNull FontRequestCallback callback) {
- // Check the cache first
- // TODO: would the developer want to avoid a cache hit and always ask for the freshest
- // result?
- Typeface cachedTypeface = findFromCache(
- request.getProviderAuthority(), request.getQuery());
- if (cachedTypeface != null) {
- sHandler.post(() -> callback.onTypefaceRetrieved(cachedTypeface));
- return;
- }
- synchronized (sLock) {
- if (sFontsContract == null) {
- throw new RuntimeException("Context not initialized, can't query provider");
- }
- final ResultReceiver receiver = new ResultReceiver(null) {
- @Override
- public void onReceiveResult(int resultCode, Bundle resultData) {
- sHandler.post(() -> receiveResult(request, callback, resultCode, resultData));
- }
- };
- sFontsContract.getFont(request, receiver);
- }
- }
-
- private static Typeface findFromCache(String providerAuthority, String query) {
- synchronized (sDynamicTypefaceCache) {
- final String key = createProviderUid(providerAuthority, query);
- Typeface typeface = sDynamicTypefaceCache.get(key);
- if (typeface != null) {
- return typeface;
- }
- }
- return null;
- }
-
- private static void receiveResult(FontRequest request, FontRequestCallback callback,
- int resultCode, Bundle resultData) {
- Typeface cachedTypeface = findFromCache(
- request.getProviderAuthority(), request.getQuery());
- if (cachedTypeface != null) {
- // We already know the result.
- // Probably the requester requests the same font again in a short interval.
- callback.onTypefaceRetrieved(cachedTypeface);
- return;
- }
- if (resultCode != FontsContract.Columns.RESULT_CODE_OK) {
- callback.onTypefaceRequestFailed(resultCode);
- return;
- }
- if (resultData == null) {
- callback.onTypefaceRequestFailed(
- FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND);
- return;
- }
- List<FontResult> resultList =
- resultData.getParcelableArrayList(FontsContract.PARCEL_FONT_RESULTS);
- if (resultList == null || resultList.isEmpty()) {
- callback.onTypefaceRequestFailed(
- FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND);
- return;
- }
- FontFamily fontFamily = new FontFamily();
- for (int i = 0; i < resultList.size(); ++i) {
- FontResult result = resultList.get(i);
- ParcelFileDescriptor fd = result.getFileDescriptor();
- if (fd == null) {
- callback.onTypefaceRequestFailed(
- FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR);
- return;
- }
- try (FileInputStream is = new FileInputStream(fd.getFileDescriptor())) {
- FileChannel fileChannel = is.getChannel();
- long fontSize = fileChannel.size();
- ByteBuffer fontBuffer = fileChannel.map(
- FileChannel.MapMode.READ_ONLY, 0, fontSize);
- int weight = result.getWeight();
- int italic = result.getItalic() ? STYLE_ITALIC : STYLE_NORMAL;
- FontVariationAxis[] axes = null;
- try {
- axes = FontVariationAxis.fromFontVariationSettings(
- result.getFontVariationSettings());
- } catch (FontVariationAxis.InvalidFormatException e) {
- // TODO: Nice to pass FontVariationAxis[] directly instead of string.
- }
- if (!fontFamily.addFontFromBuffer(fontBuffer, result.getTtcIndex(),
- axes, weight, italic)) {
- Log.e(TAG, "Error creating font " + request.getQuery());
- callback.onTypefaceRequestFailed(
- FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR);
- return;
- }
- } catch (IOException e) {
- Log.e(TAG, "Error reading font " + request.getQuery(), e);
- callback.onTypefaceRequestFailed(
- FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR);
- return;
- } finally {
- IoUtils.closeQuietly(fd);
- }
- }
- if (!fontFamily.freeze()) {
- callback.onTypefaceRequestFailed(
- FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR);
- return;
- }
- Typeface typeface = Typeface.createFromFamiliesWithDefault(
- new FontFamily[] { fontFamily },
- RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE);
- synchronized (sDynamicTypefaceCache) {
- String key = createProviderUid(request.getProviderAuthority(), request.getQuery());
- sDynamicTypefaceCache.put(key, typeface);
- }
- callback.onTypefaceRetrieved(typeface);
- }
-
- /**
- * Interface used to receive asynchronously fetched typefaces.
- */
- @Deprecated
- public interface FontRequestCallback {
- /**
- * Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the given
- * provider was not found on the device.
- */
- int FAIL_REASON_PROVIDER_NOT_FOUND = FontsContract.RESULT_CODE_PROVIDER_NOT_FOUND;
- /**
- * Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the given
- * provider must be authenticated and the given certificates do not match its signature.
- */
- int FAIL_REASON_WRONG_CERTIFICATES = FontsContract.RESULT_CODE_WRONG_CERTIFICATES;
- /**
- * Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the font
- * returned by the provider was not loaded properly.
- */
- int FAIL_REASON_FONT_LOAD_ERROR = -3;
- /**
- * Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the font
- * provider did not return any results for the given query.
- */
- int FAIL_REASON_FONT_NOT_FOUND = FontsContract.Columns.RESULT_CODE_FONT_NOT_FOUND;
- /**
- * Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the font
- * provider found the queried font, but it is currently unavailable.
- */
- int FAIL_REASON_FONT_UNAVAILABLE = FontsContract.Columns.RESULT_CODE_FONT_UNAVAILABLE;
- /**
- * Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the given
- * query was not supported by the provider.
- */
- int FAIL_REASON_MALFORMED_QUERY = FontsContract.Columns.RESULT_CODE_MALFORMED_QUERY;
-
- /** @hide */
- @IntDef({ FAIL_REASON_PROVIDER_NOT_FOUND, FAIL_REASON_FONT_LOAD_ERROR,
- FAIL_REASON_FONT_NOT_FOUND, FAIL_REASON_FONT_UNAVAILABLE,
- FAIL_REASON_MALFORMED_QUERY })
- @Retention(RetentionPolicy.SOURCE)
- @interface FontRequestFailReason {}
-
- /**
- * Called then a Typeface request done via {@link Typeface#create(FontRequest,
- * FontRequestCallback)} is complete. Note that this method will not be called if
- * {@link #onTypefaceRequestFailed(int)} is called instead.
- * @param typeface The Typeface object retrieved.
- */
- void onTypefaceRetrieved(Typeface typeface);
-
- /**
- * Called when a Typeface request done via {@link Typeface#create(FontRequest,
- * FontRequestCallback)} fails.
- * @param reason May be one of {@link #FAIL_REASON_PROVIDER_NOT_FOUND},
- * {@link #FAIL_REASON_FONT_NOT_FOUND},
- * {@link #FAIL_REASON_FONT_LOAD_ERROR},
- * {@link #FAIL_REASON_FONT_UNAVAILABLE} or
- * {@link #FAIL_REASON_MALFORMED_QUERY} if returned by the system. May also be
- * a positive value greater than 0 defined by the font provider as an
- * additional error code. Refer to the provider's documentation for more
- * information on possible returned error codes.
- */
- void onTypefaceRequestFailed(@FontRequestFailReason int reason);
- }
-
- private static final FontRequestCallback NO_OP_REQUEST_CALLBACK = new FontRequestCallback() {
- @Override
- public void onTypefaceRetrieved(Typeface typeface) {
- // Do nothing.
- }
-
- @Override
- public void onTypefaceRequestFailed(@FontRequestFailReason int reason) {
- // Do nothing.
- }
- };
-
- /**
* A builder class for creating new Typeface instance.
*
* <p>
diff --git a/graphics/java/android/graphics/fonts/FontResult.java b/graphics/java/android/graphics/fonts/FontResult.java
deleted file mode 100644
index 20e736eb1fc3..000000000000
--- a/graphics/java/android/graphics/fonts/FontResult.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.graphics.fonts;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.graphics.Paint;
-import android.os.Parcel;
-import android.os.ParcelFileDescriptor;
-import android.os.Parcelable;
-
-import com.android.internal.util.Preconditions;
-
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-/**
- * Results returned from a Font Provider to the system.
- * @hide
- */
-public final class FontResult implements Parcelable {
- private final ParcelFileDescriptor mFileDescriptor;
- private final int mTtcIndex;
- private final String mFontVariationSettings;
- private final int mWeight;
- private final boolean mItalic;
-
- /**
- * Creates a FontResult with all the information needed about a provided font.
- * @param fileDescriptor A ParcelFileDescriptor pointing to the font file. This shoult point to
- * a real file or shared memory, as the client will mmap the given file
- * descriptor. Pipes, sockets and other non-mmap-able file descriptors
- * will fail to load in the client application.
- * @param ttcIndex If providing a TTC_INDEX file, the index to point to. Otherwise, 0.
- * @param fontVariationSettings If providing a variation font, the settings for it. May be null.
- * @param weight An integer that indicates the font weight.
- * @param italic A boolean that indicates the font is italic style or not.
- */
- public FontResult(@NonNull ParcelFileDescriptor fileDescriptor, int ttcIndex,
- @Nullable String fontVariationSettings, int weight, boolean italic) {
- mFileDescriptor = Preconditions.checkNotNull(fileDescriptor);
- mTtcIndex = ttcIndex;
- mFontVariationSettings = fontVariationSettings;
- mWeight = weight;
- mItalic = italic;
- }
-
- public ParcelFileDescriptor getFileDescriptor() {
- return mFileDescriptor;
- }
-
- public int getTtcIndex() {
- return mTtcIndex;
- }
-
- public String getFontVariationSettings() {
- return mFontVariationSettings;
- }
-
- public int getWeight() {
- return mWeight;
- }
-
- public boolean getItalic() {
- return mItalic;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeParcelable(mFileDescriptor, flags);
- dest.writeInt(mTtcIndex);
- dest.writeString(mFontVariationSettings);
- dest.writeInt(mWeight);
- dest.writeBoolean(mItalic);
- }
-
- private FontResult(Parcel in) {
- mFileDescriptor = in.readParcelable(null);
- mTtcIndex = in.readInt();
- mFontVariationSettings = in.readString();
- mWeight = in.readInt();
- mItalic = in.readBoolean();
- }
-
- public static final Parcelable.Creator<FontResult> CREATOR =
- new Parcelable.Creator<FontResult>() {
- @Override
- public FontResult createFromParcel(Parcel in) {
- return new FontResult(in);
- }
-
- @Override
- public FontResult[] newArray(int size) {
- return new FontResult[size];
- }
- };
-}
diff --git a/graphics/java/android/graphics/fonts/FontSpec.aidl b/graphics/java/android/graphics/fonts/FontSpec.aidl
deleted file mode 100644
index dddea2560d3d..000000000000
--- a/graphics/java/android/graphics/fonts/FontSpec.aidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2017, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-package android.graphics.fonts;
-
-parcelable FontSpec; \ No newline at end of file
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index 5c64566f7987..ea804d0abea3 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -17,7 +17,9 @@ package android.security;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SdkConstant;
import android.annotation.WorkerThread;
+import android.annotation.SdkConstant.SdkConstantType;
import android.app.Activity;
import android.app.PendingIntent;
import android.app.Service;
@@ -199,12 +201,14 @@ public final class KeyChain {
* {@link Build.VERSION_CODES#N_MR1} will only receive this broadcast if they register for it
* at runtime.
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_STORAGE_CHANGED = "android.security.STORAGE_CHANGED";
/**
* Broadcast Action: Indicates the contents of the keychain has changed. Sent when a KeyChain
* entry is added, modified or removed.
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_KEYCHAIN_CHANGED = "android.security.action.KEYCHAIN_CHANGED";
/**
@@ -216,6 +220,7 @@ public final class KeyChain {
* <li>A CA is added or removed from the trust store</li>
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_TRUST_STORE_CHANGED =
"android.security.action.TRUST_STORE_CHANGED";
@@ -223,6 +228,7 @@ public final class KeyChain {
* Broadcast Action: Indicates that the access permissions for a private key have changed.
*
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_KEY_ACCESS_CHANGED =
"android.security.action.KEY_ACCESS_CHANGED";
diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java
index 00d786a93626..244d6e5be6fd 100644
--- a/keystore/java/android/security/KeyStore.java
+++ b/keystore/java/android/security/KeyStore.java
@@ -93,6 +93,16 @@ public class KeyStore {
*/
public static final int FLAG_ENCRYPTED = 1;
+ /**
+ * A private flag that's only available to system server to indicate that this key is part of
+ * device encryption flow so it receives special treatment from keystore. For example this key
+ * will not be super encrypted, and it will be stored separately under an unique UID instead
+ * of the caller UID i.e. SYSTEM.
+ *
+ * Need to be in sync with KeyStoreFlag in system/security/keystore/include/keystore/keystore.h
+ */
+ public static final int FLAG_CRITICAL_TO_DEVICE_ENCRYPTION = 1 << 3;
+
// States
public enum State { UNLOCKED, LOCKED, UNINITIALIZED };
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java
index 64b10ab6eacb..bab4010b90e8 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java
@@ -351,6 +351,9 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
}
} else if (param instanceof KeyProtection) {
spec = (KeyProtection) param;
+ if (spec.isCriticalToDeviceEncryption()) {
+ flags |= KeyStore.FLAG_CRITICAL_TO_DEVICE_ENCRYPTION;
+ }
} else {
throw new KeyStoreException(
"Unsupported protection parameter class:" + param.getClass().getName()
@@ -719,6 +722,10 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
} catch (IllegalArgumentException | IllegalStateException e) {
throw new KeyStoreException(e);
}
+ int flags = 0;
+ if (params.isCriticalToDeviceEncryption()) {
+ flags |= KeyStore.FLAG_CRITICAL_TO_DEVICE_ENCRYPTION;
+ }
Credentials.deleteAllTypesForAlias(mKeyStore, entryAlias, mUid);
String keyAliasInKeystore = Credentials.USER_SECRET_KEY + entryAlias;
@@ -728,7 +735,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
KeymasterDefs.KM_KEY_FORMAT_RAW,
keyMaterial,
mUid,
- 0, // flags
+ flags,
new KeyCharacteristics());
if (errorCode != KeyStore.NO_ERROR) {
throw new KeyStoreException("Failed to import secret key. Keystore error code: "
diff --git a/keystore/java/android/security/keystore/KeyProtection.java b/keystore/java/android/security/keystore/KeyProtection.java
index 2592a97468d3..2eb06631c228 100644
--- a/keystore/java/android/security/keystore/KeyProtection.java
+++ b/keystore/java/android/security/keystore/KeyProtection.java
@@ -227,6 +227,7 @@ public final class KeyProtection implements ProtectionParameter {
private final boolean mUserAuthenticationValidWhileOnBody;
private final boolean mInvalidatedByBiometricEnrollment;
private final long mBoundToSecureUserId;
+ private final boolean mCriticalToDeviceEncryption;
private KeyProtection(
Date keyValidityStart,
@@ -242,7 +243,8 @@ public final class KeyProtection implements ProtectionParameter {
int userAuthenticationValidityDurationSeconds,
boolean userAuthenticationValidWhileOnBody,
boolean invalidatedByBiometricEnrollment,
- long boundToSecureUserId) {
+ long boundToSecureUserId,
+ boolean criticalToDeviceEncryption) {
mKeyValidityStart = Utils.cloneIfNotNull(keyValidityStart);
mKeyValidityForOriginationEnd = Utils.cloneIfNotNull(keyValidityForOriginationEnd);
mKeyValidityForConsumptionEnd = Utils.cloneIfNotNull(keyValidityForConsumptionEnd);
@@ -259,6 +261,7 @@ public final class KeyProtection implements ProtectionParameter {
mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody;
mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment;
mBoundToSecureUserId = boundToSecureUserId;
+ mCriticalToDeviceEncryption = criticalToDeviceEncryption;
}
/**
@@ -458,6 +461,16 @@ public final class KeyProtection implements ProtectionParameter {
}
/**
+ * Return whether this key is critical to the device encryption flow.
+ *
+ * @see android.security.KeyStore#FLAG_CRITICAL_TO_DEVICE_ENCRYPTION
+ * @hide
+ */
+ public boolean isCriticalToDeviceEncryption() {
+ return mCriticalToDeviceEncryption;
+ }
+
+ /**
* Builder of {@link KeyProtection} instances.
*/
public final static class Builder {
@@ -477,6 +490,7 @@ public final class KeyProtection implements ProtectionParameter {
private boolean mInvalidatedByBiometricEnrollment = true;
private long mBoundToSecureUserId = GateKeeper.INVALID_SECURE_USER_ID;
+ private boolean mCriticalToDeviceEncryption = false;
/**
* Creates a new instance of the {@code Builder}.
*
@@ -817,6 +831,20 @@ public final class KeyProtection implements ProtectionParameter {
}
/**
+ * Set whether this key is critical to the device encryption flow
+ *
+ * This is a special flag only available to system servers to indicate the current key
+ * is part of the device encryption flow.
+ *
+ * @see android.security.KeyStore#FLAG_CRITICAL_TO_DEVICE_ENCRYPTION
+ * @hide
+ */
+ public Builder setCriticalToDeviceEncryption(boolean critical) {
+ mCriticalToDeviceEncryption = critical;
+ return this;
+ }
+
+ /**
* Builds an instance of {@link KeyProtection}.
*
* @throws IllegalArgumentException if a required field is missing
@@ -837,7 +865,8 @@ public final class KeyProtection implements ProtectionParameter {
mUserAuthenticationValidityDurationSeconds,
mUserAuthenticationValidWhileOnBody,
mInvalidatedByBiometricEnrollment,
- mBoundToSecureUserId);
+ mBoundToSecureUserId,
+ mCriticalToDeviceEncryption);
}
}
}
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index 052c01890317..55b74ed9e234 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -28,6 +28,7 @@
#include <ui/ColorSpace.h>
#include <GLES2/gl2.h>
+#include <GLES3/gl3.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <SkBitmap.h>
diff --git a/media/java/android/media/AudioFocusInfo.java b/media/java/android/media/AudioFocusInfo.java
index 60dbe00dcbe0..6d9c5e2ad5fc 100644
--- a/media/java/android/media/AudioFocusInfo.java
+++ b/media/java/android/media/AudioFocusInfo.java
@@ -33,6 +33,7 @@ public final class AudioFocusInfo implements Parcelable {
private final int mClientUid;
private final String mClientId;
private final String mPackageName;
+ private final int mSdkTarget;
private int mGainRequest;
private int mLossReceived;
private int mFlags;
@@ -49,7 +50,7 @@ public final class AudioFocusInfo implements Parcelable {
* @hide
*/
public AudioFocusInfo(AudioAttributes aa, int clientUid, String clientId, String packageName,
- int gainRequest, int lossReceived, int flags) {
+ int gainRequest, int lossReceived, int flags, int sdk) {
mAttributes = aa == null ? new AudioAttributes.Builder().build() : aa;
mClientUid = clientUid;
mClientId = clientId == null ? "" : clientId;
@@ -57,6 +58,7 @@ public final class AudioFocusInfo implements Parcelable {
mGainRequest = gainRequest;
mLossReceived = lossReceived;
mFlags = flags;
+ mSdkTarget = sdk;
}
@@ -97,6 +99,9 @@ public final class AudioFocusInfo implements Parcelable {
public int getLossReceived() { return mLossReceived; }
/** @hide */
+ public int getSdkTarget() { return mSdkTarget; }
+
+ /** @hide */
public void clearLossReceived() { mLossReceived = 0; }
/**
@@ -122,6 +127,7 @@ public final class AudioFocusInfo implements Parcelable {
dest.writeInt(mGainRequest);
dest.writeInt(mLossReceived);
dest.writeInt(mFlags);
+ dest.writeInt(mSdkTarget);
}
@SystemApi
@@ -161,6 +167,9 @@ public final class AudioFocusInfo implements Parcelable {
if (mFlags != other.mFlags) {
return false;
}
+ if (mSdkTarget != other.mSdkTarget) {
+ return false;
+ }
return true;
}
@@ -175,7 +184,8 @@ public final class AudioFocusInfo implements Parcelable {
in.readString(), //String packageName
in.readInt(), //int gainRequest
in.readInt(), //int lossReceived
- in.readInt() //int flags
+ in.readInt(), //int flags
+ in.readInt() //int sdkTarget
);
}
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 4adbf79d562c..ce07c9982623 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -34,6 +34,7 @@ import android.media.session.MediaSession;
import android.media.session.MediaSessionLegacyHelper;
import android.media.session.MediaSessionManager;
import android.os.Binder;
+import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@@ -2483,13 +2484,21 @@ public class AudioManager {
registerAudioFocusRequest(afr);
final IAudioService service = getService();
final int status;
+ int sdk;
+ try {
+ sdk = getContext().getApplicationInfo().targetSdkVersion;
+ } catch (NullPointerException e) {
+ // some tests don't have a Context
+ sdk = Build.VERSION.SDK_INT;
+ }
try {
status = service.requestAudioFocus(afr.getAudioAttributes(),
afr.getFocusGain(), mICallBack,
mAudioFocusDispatcher,
getIdForAudioFocusListener(afr.getOnAudioFocusChangeListener()),
getContext().getOpPackageName() /* package name */, afr.getFlags(),
- ap != null ? ap.cb() : null);
+ ap != null ? ap.cb() : null,
+ sdk);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -2515,7 +2524,7 @@ public class AudioManager {
AudioSystem.IN_VOICE_COMM_FOCUS_ID,
getContext().getOpPackageName(),
AUDIOFOCUS_FLAG_LOCK,
- null /* policy token */);
+ null /* policy token */, 0 /* sdk n/a here*/);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index 884d41e59ada..9c138e30e929 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -121,7 +121,7 @@ interface IAudioService {
int requestAudioFocus(in AudioAttributes aa, int durationHint, IBinder cb,
IAudioFocusDispatcher fd, String clientId, String callingPackageName, int flags,
- IAudioPolicyCallback pcb);
+ IAudioPolicyCallback pcb, int sdk);
int abandonAudioFocus(IAudioFocusDispatcher fd, String clientId, in AudioAttributes aa,
in String callingPackageName);
diff --git a/media/java/android/media/VolumeShaper.java b/media/java/android/media/VolumeShaper.java
index 1dda6a4c77f7..8f4721f94e72 100644
--- a/media/java/android/media/VolumeShaper.java
+++ b/media/java/android/media/VolumeShaper.java
@@ -301,7 +301,7 @@ public final class VolumeShaper implements AutoCloseable {
.setInterpolatorType(INTERPOLATOR_TYPE_LINEAR)
.setCurve(new float[] {0.f, 1.f} /* times */,
new float[] {0.f, 1.f} /* volumes */)
- .setDurationMillis(1000.)
+ .setDuration(1000)
.build();
/**
@@ -314,7 +314,7 @@ public final class VolumeShaper implements AutoCloseable {
.setInterpolatorType(INTERPOLATOR_TYPE_CUBIC)
.setCurve(new float[] {0.f, 1.f} /* times */,
new float[] {0.f, 1.f} /* volumes */)
- .setDurationMillis(1000.)
+ .setDuration(1000)
.build();
/**
@@ -348,12 +348,12 @@ public final class VolumeShaper implements AutoCloseable {
SINE_RAMP = new VolumeShaper.Configuration.Builder()
.setInterpolatorType(INTERPOLATOR_TYPE_CUBIC)
.setCurve(times, sines)
- .setDurationMillis(1000.)
+ .setDuration(1000)
.build();
SCURVE_RAMP = new VolumeShaper.Configuration.Builder()
.setInterpolatorType(INTERPOLATOR_TYPE_CUBIC)
.setCurve(times, scurve)
- .setDurationMillis(1000.)
+ .setDuration(1000)
.build();
}
@@ -569,8 +569,9 @@ public final class VolumeShaper implements AutoCloseable {
/**
* Returns the duration of the volume shape in milliseconds.
*/
- public double getDurationMillis() {
- return mDurationMs;
+ public long getDuration() {
+ // casting is safe here as the duration was set as a long in the Builder
+ return (long) mDurationMs;
}
/**
@@ -700,7 +701,7 @@ public final class VolumeShaper implements AutoCloseable {
* .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR)
* .setCurve(new float[] { 0.f, 1.f }, // times
* new float[] { 0.f, 1.f }) // volumes
- * .setDurationMillis(1000.)
+ * .setDuration(1000)
* .build();
* </pre>
* <p>
@@ -731,7 +732,7 @@ public final class VolumeShaper implements AutoCloseable {
mId = configuration.getId();
mOptionFlags = configuration.getAllOptionFlags();
mInterpolatorType = configuration.getInterpolatorType();
- mDurationMs = configuration.getDurationMillis();
+ mDurationMs = configuration.getDuration();
mTimes = configuration.getTimes().clone();
mVolumes = configuration.getVolumes().clone();
}
@@ -810,12 +811,12 @@ public final class VolumeShaper implements AutoCloseable {
* @throws IllegalArgumentException if {@code durationMillis}
* is not strictly positive.
*/
- public @NonNull Builder setDurationMillis(double durationMillis) {
- if (durationMillis <= 0.) {
+ public @NonNull Builder setDuration(long durationMillis) {
+ if (durationMillis <= 0) {
throw new IllegalArgumentException(
"duration: " + durationMillis + " not positive");
}
- mDurationMs = durationMillis;
+ mDurationMs = (double) durationMillis;
return this;
}
@@ -833,7 +834,7 @@ public final class VolumeShaper implements AutoCloseable {
* time (x) coordinates should be monotonically increasing, from 0.f to 1.f;
* volume (y) coordinates must be within 0.f to 1.f.
* <p>
- * The time scale is set by {@link #setDurationMillis}.
+ * The time scale is set by {@link #setDuration}.
* <p>
* @param times an array of float values representing
* the time line of the volume curve.
diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java
index 71f9ba257aa3..6f4118ecebbb 100644
--- a/media/java/android/media/tv/TvContract.java
+++ b/media/java/android/media/tv/TvContract.java
@@ -19,8 +19,10 @@ package android.media.tv;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SdkConstant;
import android.annotation.StringDef;
import android.annotation.SystemApi;
+import android.annotation.SdkConstant.SdkConstantType;
import android.app.Activity;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -90,6 +92,7 @@ public final class TvContract {
* @hide
*/
@SystemApi
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_CHANNEL_BROWSABLE_REQUESTED =
"android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED";
@@ -105,6 +108,7 @@ public final class TvContract {
* integer.</li>
* </ul>
*/
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_REQUEST_CHANNEL_BROWSABLE =
"android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
@@ -119,6 +123,7 @@ public final class TvContract {
* <li>{@link #EXTRA_PREVIEW_PROGRAM_ID}: the disabled preview program ID.</li>
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED =
"android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
@@ -133,6 +138,7 @@ public final class TvContract {
* <li>{@link #EXTRA_WATCH_NEXT_PROGRAM_ID}: the disabled "watch next" program ID.</li>
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED =
"android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
@@ -146,6 +152,7 @@ public final class TvContract {
* <li>{@link #EXTRA_WATCH_NEXT_PROGRAM_ID}: the ID of the new watch next program.</li>
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT =
"android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
@@ -163,6 +170,7 @@ public final class TvContract {
* <code>AndroidManifest.xml</code>.</li>
* </ul>
*/
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_INITIALIZE_PROGRAMS =
"android.media.tv.action.INITIALIZE_PROGRAMS";
@@ -1480,8 +1488,7 @@ public final class TvContract {
/**
* The URI for the preview video.
*
- * <p>This is only relevant to {@link Channels#TYPE_PREVIEW}. The data in the column must be
- * a URL, or a URI in one of the following formats:
+ * <p>The data in the column must be a URL, or a URI in one of the following formats:
*
* <ul>
* <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
@@ -1497,9 +1504,8 @@ public final class TvContract {
String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
/**
- * The last playback position (in milliseconds) of the preview video.
- *
- * <p>This is only relevant to {@link Channels#TYPE_PREVIEW}.
+ * The last playback position (in milliseconds) of the original content of this preview
+ * program.
*
* <p>Can be empty.
*
@@ -1509,9 +1515,7 @@ public final class TvContract {
"last_playback_position_millis";
/**
- * The duration (in milliseconds) of the preview video.
- *
- * <p>This is only relevant to {@link Channels#TYPE_PREVIEW}.
+ * The duration (in milliseconds) of the original content of this preview program.
*
* <p>Can be empty.
*
@@ -2741,8 +2745,6 @@ public final class TvContract {
*
* <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
*
- * <p>This is a required field.
- *
* <p>Type: INTEGER (long)
*/
public static final String COLUMN_CHANNEL_ID = "channel_id";
@@ -2989,6 +2991,8 @@ public final class TvContract {
*/
public static final String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS =
"last_engagement_time_utc_millis";
+
+ private WatchNextPrograms() {}
}
/**
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java
index 48b2878efd32..4361b96166e3 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java
@@ -25,6 +25,7 @@ import com.android.mediaframeworktest.MediaNames;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.media.MediaCodecInfo;
import android.media.MediaCodecList;
import android.media.MediaExtractor;
import android.media.MediaFormat;
@@ -42,7 +43,9 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.io.FileOutputStream;
+import java.util.HashSet;
import java.util.Random;
+import java.util.Set;
/**
* Junit / Instrumentation test case for the media player api
@@ -69,6 +72,7 @@ public class CodecTest {
public static int mMediaInfoBadInterleavingCount = 0;
public static int mMediaInfoNotSeekableCount = 0;
public static int mMediaInfoMetdataUpdateCount = 0;
+ private static Set<String> mSupportedTypes = new HashSet<>();
public static String printCpuInfo(){
String cm = "dumpsys cpuinfo";
@@ -792,7 +796,7 @@ public class CodecTest {
return playMediaSamples(filePath, 2000, false /* streamingTest */);
}
- // For each media file, forward twice and backward once, then play to the end
+ // For each media file, just play to the end
public static boolean playMediaSamples(String filePath, int buffertime, boolean streamingTest)
throws Exception {
int duration = 0;
@@ -812,7 +816,14 @@ public class CodecTest {
boolean hasSupportedVideo = false;
if (!streamingTest) {
- final MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
+ if (mSupportedTypes.isEmpty()) {
+ final MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
+ for (MediaCodecInfo info : list.getCodecInfos()) {
+ for (String type : info.getSupportedTypes()) {
+ mSupportedTypes.add(type);
+ }
+ }
+ }
final MediaExtractor extractor = new MediaExtractor();
try {
@@ -820,12 +831,12 @@ public class CodecTest {
for (int index = 0; index < extractor.getTrackCount(); ++index) {
MediaFormat format = extractor.getTrackFormat(index);
- String mime = format.getString(MediaFormat.KEY_MIME);
- if (!mime.startsWith("video/")) {
+ String type = format.getString(MediaFormat.KEY_MIME);
+ if (!type.startsWith("video/")) {
continue;
}
- if (list.findDecoderForFormat(format) != null) {
+ if (mSupportedTypes.contains(type)) {
hasSupportedVideo = true;
break;
}
diff --git a/packages/CompanionDeviceManager/res/values/strings.xml b/packages/CompanionDeviceManager/res/values/strings.xml
index 43a92b6020dd..c4372ebef663 100644
--- a/packages/CompanionDeviceManager/res/values/strings.xml
+++ b/packages/CompanionDeviceManager/res/values/strings.xml
@@ -20,9 +20,9 @@
<string name="app_label">Companion Device Manager</string>
<!-- Title of the device selection dialog. -->
- <string name="chooser_title">Link with &lt;strong&gt;<xliff:g id="app_name" example="Android Wear">%1$s</xliff:g>&lt;/strong&gt; via Bluetooth?</string>
+ <string name="chooser_title">Link with &lt;strong&gt;<xliff:g id="app_name" example="Android Wear">%1$s</xliff:g>&lt;/strong&gt;</string>
<!-- Title of the device pairing confirmation dialog. -->
- <string name="confirmation_title">Link &lt;strong&gt;<xliff:g id="app_name" example="Android Wear">%1$s</xliff:g>&lt;/strong&gt; with &lt;strong&gt;<xliff:g id="device_name" example="ASUS ZenWatch 2">%2$s</xliff:g>&lt;/strong&gt; via Bluetooth?</string>
+ <string name="confirmation_title">Link &lt;strong&gt;<xliff:g id="app_name" example="Android Wear">%1$s</xliff:g>&lt;/strong&gt; with &lt;strong&gt;<xliff:g id="device_name" example="ASUS ZenWatch 2">%2$s</xliff:g>&lt;/strong&gt;</string>
</resources>
diff --git a/packages/PrintSpooler/res/values-ky/strings.xml b/packages/PrintSpooler/res/values-ky/strings.xml
index 655201ea6a48..f6948d5ff6f3 100644
--- a/packages/PrintSpooler/res/values-ky/strings.xml
+++ b/packages/PrintSpooler/res/values-ky/strings.xml
@@ -66,7 +66,7 @@
<string name="could_not_create_file" msgid="3425025039427448443">"Файл түзүлбөй койду"</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>
@@ -87,7 +87,7 @@
<string name="restart" msgid="2472034227037808749">"Кайра баштоо"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Принтер менен байланыш жок"</string>
<string name="reason_unknown" msgid="5507940196503246139">"белгисиз"</string>
- <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> колдонулсунбу?"</string>
+ <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> колдоносузбу?"</string>
<string name="print_service_security_warning_summary" msgid="1427434625361692006">"Принтерге жеткиче документиңиз бир же андан көп серверлерден өтүшү мүмкүн."</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Кара-ак"</item>
diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
index f1596050a33e..10932bee6446 100644
--- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
@@ -88,7 +88,7 @@
<string name="no_connection_to_printer" msgid="2159246915977282728">"尚未與印表機建立連線"</string>
<string name="reason_unknown" msgid="5507940196503246139">"不明"</string>
<string name="print_service_security_warning_title" msgid="2160752291246775320">"要使用「<xliff:g id="SERVICE">%1$s</xliff:g>」嗎?"</string>
- <string name="print_service_security_warning_summary" msgid="1427434625361692006">"您的文件可能會透過一或多個伺服器輾轉傳送至印表機。"</string>
+ <string name="print_service_security_warning_summary" msgid="1427434625361692006">"你的文件可能會透過一或多個伺服器輾轉傳送至印表機。"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"黑白"</item>
<item msgid="2762241247228983754">"彩色"</item>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 703a617010d6..f45c2c1b7df9 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deling van internetverbinding"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Boodskaptoegang"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-toegang"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Gekoppel aan media-oudio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Gekoppel aan foonoudio"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Gekoppel aan lêeroordragbediener"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 7ae17159ab55..c4e66aa1bad6 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"የበይነ መረብ ተያያዥ ማጋሪያ"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"የመልዕክት መዳረሻ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"የሲም መዳረሻ"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ወደ ማህደረ መረጃ አውዲዮ ተያይዟል"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ወደ ስልክ አውዲዮ ተያይዟል"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ወደ ፋይል ዝውውር አገልጋይ ተያይዟል"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index a9959cc08770..266b883b052d 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"مشاركة اتصال الإنترنت"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"الدخول إلى الرسائل"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"‏الوصول إلى شريحة SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"متصل بالإعدادات الصوتية للوسائط"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"متصل بالإعدادات الصوتية للهاتف"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"متصل بخادم نقل الملف"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 9fbd7b2cdaf5..85e787582ef9 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"internet bağlantı paylaşımı"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Mesaj Girişi"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Girişi"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Media audioya birləşdirilib"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefon audiosuna qoşulu"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Fayl transfer serverinə qoşulu"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 1e06e8b3d663..802d852d1586 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deljenje internet veze"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Pristup porukama"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Pristup SIM kartici"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Povezano sa zvukom medija"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Povezano sa zvukom telefona"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Povezano sa serverom za prenos datoteka"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index a00cabee0dd9..421f0b3490aa 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Прадастаўленне доступу да Інтэрнэту"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Доступ да паведамленняў"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Доступ да SIM-карты"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Падключана да аўдыё медыа"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Падключана да аўдыё тэлефона"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Падключаны да серверу перадачы файлаў"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index e10b4ea9277a..1893393870af 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Споделяне на връзката с интернет"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Достъп до съобщенията"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Достъп до SIM картата"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Установена е връзка с медийно аудио"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Връзка със звука на телефона"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Установена е връзка със сървър за трансфер на файлове"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 588e2fe2591c..b5fa68605011 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ইন্টারনেট সংযোগ শেয়ার করা হচ্ছে"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"বার্তা অ্যাক্সেস"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"সিম -এর অ্যাক্সেস"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"মিডিয়া অডিওতে সংযুক্ত রয়েছে"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ফোন অডিওতে সংযুক্ত"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index ee0813f0335a..3515347cf116 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Dijeljenje internet veze"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Pristup poruci"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Pristup SIM-u"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Povezano sa zvukom medija"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Povezano na zvuk telefona"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Povezan na server za prijenos podataka"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index b7ed9aa47d91..6252dcbaf423 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Connexió compartida a Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Accés al missatge"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accés a la SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connectat a l\'àudio del mitjà"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connectat a àudio del telèfon"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connectat al servidor de transferència de fitxers"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 7f06170c6bb6..7d91dc126e04 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Sdílení internetového připojení"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Přístup ke zprávám"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Přístup k SIM kartě"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Připojeno ke zvukovému médiu"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Připojeno k náhlavní soupravě"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Připojeno k serveru pro přenos dat"</string>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 3c5da3228b06..0647b4f5bc04 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -159,13 +159,13 @@
<item msgid="5431354956856655120">"16 MB pr. logbuffer"</item>
</string-array>
<string-array name="select_logpersist_titles">
- <item msgid="1744840221860799971">"Slået fra"</item>
+ <item msgid="1744840221860799971">"Fra"</item>
<item msgid="3054662377365844197">"Alle"</item>
<item msgid="688870735111627832">"Radio undtaget"</item>
<item msgid="2850427388488887328">"kun kerne"</item>
</string-array>
<string-array name="select_logpersist_summaries">
- <item msgid="2216470072500521830">"Slået fra"</item>
+ <item msgid="2216470072500521830">"Fra"</item>
<item msgid="172978079776521897">"Alle logbuffere"</item>
<item msgid="3873873912383879240">"Alle undtagen radiologbuffere"</item>
<item msgid="8489661142527693381">"kun logbuffer for kerne"</item>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 82960990da1e..986bc3e6a772 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deling af internetforbindelse"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Adgang til meddelelse"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-adgang"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Forbundet til medielyd"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Forbundet til telefonlyd"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Forbundet til filoverførselsserver"</string>
@@ -172,7 +176,7 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillad altid scanning af Wi-Fi-roaming"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er altid aktiveret"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiver absolut lydstyrke"</string>
- <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Aktivér integreret opringning"</string>
+ <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Afspil ringetone via Bluetooth"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"AVRCP-version for Bluetooth"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Vælg AVRCP-version for Bluetooth"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-lydcodec"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 0e9933dbcc78..d8993fc5baec 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Freigabe der Internetverbindung"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Nachrichtenzugriff"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Zugriff auf SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Verbunden mit Audiosystem von Medien"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Verbunden mit Audiosystem des Telefons"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Mit Dateiübertragungsserver verbunden"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index a12516fca438..307ced637eb9 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Κοινή χρήση σύνδεσης στο Διαδίκτυο"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Πρόσβαση στο μήνυμα"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Πρόσβαση SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Συνδέθηκε σε ήχο πολυμέσων"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Συνδεδεμένο στον ήχο τηλεφώνου"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Συνδεδεμένο σε διακομιστή μεταφοράς αρχείων"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index a42a8e187070..a35da4de143e 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Message Access"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index a42a8e187070..a35da4de143e 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Message Access"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index a42a8e187070..a35da4de143e 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Message Access"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 3d914e781ed2..fa092e2a5e73 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartir conexión a Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acceso a mensajes"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acceso SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado al audio multimedia"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado al audio del dispositivo"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado al servidor de transferencia de archivo"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 57d433c1934f..8dc6301d698d 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartir conexión a Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acceso a mensajes"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acceso a tarjeta SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado al audio del medio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado al audio del teléfono"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado con el servidor de transferencia de archivos"</string>
@@ -172,7 +176,7 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
- <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Habilitar sonido dentro de la banda"</string>
+ <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Habilitar tono de llamada por Bluetooth"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versión AVRCP del Bluetooth"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Selecciona la versión AVRCP del Bluetooth"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec de audio por Bluetooth"</string>
@@ -231,7 +235,7 @@
<string name="media_category" msgid="4388305075496848353">"Multimedia"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"Supervisión"</string>
<string name="strict_mode" msgid="1938795874357830695">"Modo estricto"</string>
- <string name="strict_mode_summary" msgid="142834318897332338">"Parpadear si las aplicaciones tardan mucho en el thread principal"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Parpadear si las aplicaciones tardan mucho en el subproceso principal"</string>
<string name="pointer_location" msgid="6084434787496938001">"Ubicación del puntero"</string>
<string name="pointer_location_summary" msgid="840819275172753713">"Superponer los datos de las pulsaciones en la pantalla"</string>
<string name="show_touches" msgid="2642976305235070316">"Mostrar toques"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index e8f4f023f1e0..a8ebbdafc92f 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneti-ühenduse jagamine"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Juurdepääs sõnumile"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-kaardi juurdepääs"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ühendatud meediumiheliga"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ühendatud telefoniheliga"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ühendatud failiedastuse serveriga"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 80631cdd2d9d..1cf26e5a75a1 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneteko konexioa partekatzea"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Mezuetarako sarbidea"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM txartelerako sarbidea"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Euskarriaren audiora konektatuta"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefonoaren audiora konektatuta"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Fitxategi-transferentziako zerbitzarira konektatuta"</string>
@@ -172,7 +176,7 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Onartu beti ibiltaritzan Wi-Fi sareak bilatzea"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datu mugikorrak beti aktibo"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desgaitu bolumen absolutua"</string>
- <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Gaitu banda barneko tonuak"</string>
+ <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Gaitu tonuak audio-kanal berean erreproduzitzeko aukera"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP bertsioa"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Hautatu Bluetooth AVRCP bertsioa"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth bidezko audioaren kodeka"</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 893e7082bec3..c456b1c0fe15 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"اشتراک‌گذاری اتصال اینترنت"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"دسترسی به پیام"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"دسترسی سیم‌کارت"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"به رسانه صوتی متصل شد"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"به تلفن صوتی متصل شد"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"به سرور انتقال فایل متصل شد"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 8530ddfeb4eb..f3e2d6b1603f 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internetyhteyden jakaminen"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"MAP"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-kortin käyttö"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Yhdistetty median ääneen"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Yhdistetty puhelimen ääneen"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Yhdistetty tiedostonsiirtopalvelimeen"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 49914ecedaa8..8c1df6bb8fdf 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Partage de connexion Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Accès aux messages"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accès à la carte SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connecté aux paramètres audio du média"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connecté à l\'audio du téléphone"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connexion au serveur de transfert de fichiers"</string>
@@ -325,7 +329,7 @@
<string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> : <xliff:g id="TIME">%2$s</xliff:g> jusqu\'à la charge complète"</string>
<string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="196130600938058547">"Inconnu"</string>
- <string name="battery_info_status_charging" msgid="1705179948350365604">"Batterie en charge"</string>
+ <string name="battery_info_status_charging" msgid="1705179948350365604">"Charge en cours…"</string>
<string name="battery_info_status_charging_lower" msgid="8689770213898117994">"en cours de charge"</string>
<string name="battery_info_status_discharging" msgid="310932812698268588">"N\'est pas en charge"</string>
<string name="battery_info_status_not_charging" msgid="2820070506621483576">"N\'est pas en charge"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 4cadd0e6d1b2..1c6e93bcf196 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Partage de connexion Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Accès aux messages"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accès à la carte SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connecté aux paramètres audio du média"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connecté aux paramètres audio du téléphone"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connexion au serveur de transfert de fichiers"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 9140cd4a0068..8557fb5e5439 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Uso compartido da conexión a Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acceso ás mensaxes"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acceso á SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado ao audio multimedia"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao audio do teléfono"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado ao servidor de transferencia de ficheiros"</string>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 5d5dca45a851..6bde256ac7d5 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ઇન્ટરનેટ કનેક્શન શેરિંગ"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"સંદેશ ઍક્સેસ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ઍક્સેસ"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"મીડિયા ઑડિઓ સાથે કનેક્ટ કર્યુ"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ફોન ઑડિઓ સાથે કનેક્ટ થયાં"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ફાઇલ સ્થાનાંતરણ સેવાથી કનેક્ટ થયાં"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 5d9b8164cbdc..0341a4f0a1d0 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इंटरनेट कनेक्शन साझाकरण"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"संदेश एक्सेस"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"सिम ऐक्सेस"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मीडिया ऑडियो से कनेक्‍ट किया गया"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फ़ोन ऑडियो से कनेक्‍ट किया गया"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फ़ाइल स्‍थानांतरण सर्वर से कनेक्‍ट किया गया"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 65e4be785c1c..f9108c17de6c 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Dijeljenje internetske veze"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Pristup porukama"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Pristup SIM-u"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Povezano s medijskim zvukom"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Povezano sa telefonskim zvukom"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Povezano s poslužiteljem za prijenos datoteka"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 1a95d73a1710..fdd34ad18a04 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internetkapcsolat megosztása"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Üzenet-hozzáférés"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-elérés"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Csatlakoztatva az eszköz hangjához"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Csatlakoztatva a telefon hangjához"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Csatlakozva a fájlküldő szerverhez"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 6a41b9553deb..aeb7f46cf80f 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Ինտերնետ կապի տարածում"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Մուտք հաղորդագրություն"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM քարտի հասանելիություն"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Միացված է մեդիա աուդիոյին"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Միացված է հեռախոսի ձայնային տվյալներին"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Միացված է ֆայլերի փոխանցման սերվերին"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 035eacb89523..4da60bedb48a 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Berbagi sambungan internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Akses Pesan"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Akses SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Tersambung ke media audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Tersambung ke audio ponsel"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Sambungkan ke server transfer file"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 539eeeec717b..a433b8d89fc0 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deiling nettengingar"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Skilaboðaaðgangur"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Aðgangur að SIM-korti"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Tengt við hljóðspilun efnis"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Tengt við hljóð símans"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Tengt við skráaflutningsþjón"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index a8b9b2cee5d6..eef124d26fc5 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Condivisione connessione Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Accesso ai messaggi"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accesso alla SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Collegato ad audio media"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Collegato ad audio telefono"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Collegato al server di trasferimento file"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 19b061b53614..9b3686d1406c 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"שיתוף חיבור לאינטרנט"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"גישה להודעות"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"‏גישה ל-SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"מחובר לאודיו של מדיה"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"מחובר לאודיו של הטלפון"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"מחובר לשרת העברת קבצים"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index c7f0c31d29fa..57f20bff180e 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"インターネット接続の共有"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"メッセージへのアクセス"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIMアクセス"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"メディアの音声に接続"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"携帯電話の音声に接続"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ファイル転送サーバーに接続"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 8b3cd2ff63ed..bac03c76f949 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ინტერნეტ კავშირის გაზიარება"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"შეტყობინებებზე წვდომა"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM წვდომა"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"დაკავშირებულია აუდიო მულტიმედიურ სისტემასთან"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"დაკავშირებულია ტელეფონის აუდიო მოწყობილობასთან"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"დაკავშირებულია ფაილების გადაცემის სერვერთან"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 098e31b615f0..7af05356f4b5 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Интернет байланысын ортақ қолдану"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Хабарға кіру"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM картасына кіру"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Медиа аудиосына жалғанған"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Телефон аудиосына қосылған"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Файл жіберу серверіне жалғанған"</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 77296a17f2e0..a8d1aa0966db 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ចែករំលែក​ការ​តភ្ជាប់​អ៊ីនធឺណិត"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"​​ចូល​ដំណើរការ​សារ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"ការចូលដំណើរការស៊ីម"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"បា​ន​ភ្ជាប់​ទៅ​អូឌីយ៉ូ​មេឌៀ"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"តភ្ជាប់​ទៅ​អូឌីយ៉ូ​ទូរស័ព្ទ"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"បាន​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​មេ​ផ្ទេរ​ឯកសារ"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index cbe4f3b325bc..1d5c871ad85e 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"ಸಂದೇಶ ಪ್ರವೇಶಿಸುವಿಕೆ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"ಸಿಮ್ ಪ್ರವೇಶ"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ಮಾಧ್ಯಮ ಆಡಿಯೋಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ಫೋನ್ ಆಡಿಯೋಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ಫೈಲ್ ವರ್ಗಾವಣೆ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 9a4dbf3059e2..3458f9021b0c 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"인터넷 연결 공유"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"메시지 액세스"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 액세스"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"미디어 오디오에 연결됨"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"휴대전화 오디오에 연결됨"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"파일 전송 서버에 연결됨"</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index 76644a69056f..62636193ef02 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Интернет байланышын бөлүшүү"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Билдирүү алмашуу"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM картаны пайдалануу мүмкүнчүлүгү"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Медиа аудиого туташты"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Телефон аудиосуна туташты"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Файл өткөрүү серверине туташты"</string>
@@ -172,7 +176,7 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi Роуминг Скандоо мүмкүнчүлүгүнө ар дайым уруксат берилсин"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилдик дайындар ар дайым иштетилсин"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үндүн абсолюттук деңгээли өчүрүлсүн"</string>
- <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Bluetooth аркылуу чалууну иштетүү"</string>
+ <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Канал аралык чалууну иштетүү"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP версиясы"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Bluetooth AVRCP версиясын тандоо"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодек"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index c555f66c3acb..254005302256 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ການແບ່ງປັນການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"ການ​ເຂົ້າ​ເຖິງ​ຂໍ້​ຄວາມ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"ການ​ເຂົ້າ​ເຖິງ SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ເຊື່ອມຕໍ່ກັບສື່ດ້ານສຽງແລ້ວ"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ເຊື່ອມຕໍ່ກັບສຽງໂທລະສັບແລ້ວ"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ເຊື່ອມຕໍ່ກັບເຊີບເວີໂອນຍ້າຍໄຟລ໌ແລ້ວ"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 19a1cb78b2f2..bcc884a1064c 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneto ryšio bendrinimas"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Prieiga prie pranešimų"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM prieiga"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Prijungta prie medijos garso įrašo"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Prijungta prie telefono garso"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Prijungta prie failų perkėlimo serverio"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index b3af55ec7672..80bbee56c80a 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneta savienojuma koplietošana"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Piekļuve ziņojumam"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Piekļuve SIM kartei"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Savienots ar multivides audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Savienots ar tālruņa audio"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Savienots ar failu pārsūtīšanas serveri"</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index dd9f7c93629c..17cff9a03f1a 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Споделување конекција на интернет"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Порака за пристап"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Пристап до СИМ"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Поврзан со аудио на медиуми"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Поврзан со аудио на телефон"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Поврзан со сервер за пренос на датотеки"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index f2c2f96b7ef8..9de75e141596 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ഇന്റർനെറ്റ് കണക്ഷൻ പങ്കിടൽ"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"ആക്‌സസ്സ് നിയന്ത്രിക്കുക"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ആക്സസ്"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"മീഡിയ ഓഡിയോയിലേക്ക് കണ‌ക്റ്റുചെയ്‌തു"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ഫോൺ ഓഡിയോയിൽ കണ‌ക്റ്റുചെ‌യ്‌തു"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ഫയൽ കൈമാറ്റ സെർവറിലേക്ക് കണ‌ക്റ്റുചെ‌യ്‌തു"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index dd2240c61bc3..09ce7c013f40 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Интернэт холболтыг хуваалцах"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Зурвас хандалт"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Хандалт"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Медиа аудиод холбогдсон"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Утасны аудид холбогдсон"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Файл дамжуулах серверт холбогдсон"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 549019c5a2c1..e020ca4841c0 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इंटरनेट कनेक्शन सामायिकरण"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"संदेशात प्रवेश"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"सिम प्रवेश"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मीडिया ऑडिओवर कनेक्ट केले"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फोन ऑडिओ वर कनेक्ट केले"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फाईल स्थानांतर सर्व्हरवर कनेक्ट केले"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 19fb7673d854..3f264c3fc32a 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Perkongsian sambungan Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Akses Mesej"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Akses SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Disambungkan ke audio media"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Disambungkan ke audio telefon"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Bersambung ke pelayan pemindahan fail"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 431bb05ca92e..6697eb1e013a 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"အင်တာနက်ဆက်သွယ်မှု မျှဝေခြင်း"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"သတင်းရယူမှု"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM အသုံးပြုခြင်း"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"မီဒီယာအသံအား ချိတ်ဆက်ရန်"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ဖုန်းအသံအား ချိတ်ဆက်ရန်"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ဖိုင်လွှဲပြောင်းမည့်ဆာဗာနှင့် ချိတ်ဆက်ထားပြီး"</string>
@@ -141,7 +145,7 @@
</string-array>
<string name="choose_profile" msgid="6921016979430278661">"ပရိုဖိုင်ကို ရွေးရန်"</string>
<string name="category_personal" msgid="1299663247844969448">"ကိုယ်ရေး"</string>
- <string name="category_work" msgid="8699184680584175622">"အလုပ်အကိုင်"</string>
+ <string name="category_work" msgid="8699184680584175622">"အလုပ်"</string>
<string name="development_settings_title" msgid="215179176067683667">"ဆော့ဝဲလ်ရေးသူ၏ ရွေးချယ်မှုများ"</string>
<string name="development_settings_enable" msgid="542530994778109538">"တီထွင်သူများ ရွေးစရာကို ဖွင့်ပါ"</string>
<string name="development_settings_summary" msgid="1815795401632854041">"အပလီကေးရှင်းတိုးတက်မှုအတွက် ရွေးချယ်မှုကိုသတ်မှတ်သည်"</string>
@@ -354,7 +358,7 @@
<string name="retail_demo_reset_next" msgid="8356731459226304963">"ရှေ့သို့"</string>
<string name="retail_demo_reset_title" msgid="696589204029930100">"စကားဝှက် လိုအပ်သည်"</string>
<string name="active_input_method_subtypes" msgid="3596398805424733238">"ရနိုင်သောထည့်သွင်းရန်နည်းလမ်းများ"</string>
- <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"စနစ်ဘာသာစကားများကို အသုံးပြုပါ"</string>
+ <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"သတ်မှတ် ဘာသာစကားများကို သုံးပါ"</string>
<string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>အတွက် ဆက်တင်းများဖွင့်ရန် မအောင်မြင်ပါ။"</string>
<string name="ime_security_warning" msgid="4135828934735934248">"ဤထည့်သွင်းမှုနည်းလမ်းမှာ သင့်ကိုယ်ရေးအချက်အလက်များဖြစ်သော စကားဝှက်များနှင့် ကရက်ဒစ်ကဒ်နံပါတ်စသည်တို့ကို ရယူသွားမည်ဖြစ်သည်။ <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>အပလီကေးရှင်းမှလာပါသည်။ ဤထည့်သွင်းမှုနည်းလမ်းကို အသုံးပြုမည်လား?"</string>
<string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"မှတ်ချက် − ပြန်လည်စတင်ပြီးနောက် သင့်ဖုန်းကိုလော့ခ်မဖွင့်မချင်း ဤအက်ပ်ကို အသုံးပြု၍မရပါ"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 1293106e5d7d..0be93b9c85e4 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deling av Internett-tilkobling"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Meldingstilgang"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Tilgang til SIM-kortet"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Koblet til medielyd"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Koblet til telefonlyd"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Koblet til tjener for filoverføring"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 8fb8a1c2c679..45c9d4e8cf6f 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इन्टरनेट जडान साझेदारी गर्दै"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"सन्देश पहुँच"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM पहुँच"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मिडिया अडियोसँग जडित"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फोन अडियोमा जडान गरियो"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फाइल ट्रान्सफर सर्भरमा जडान गरियो"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 5c83657d2fcc..a9c522def106 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internetverbinding delen"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Toegang tot berichten"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Sim-toegang"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Verbonden met audio van medium"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Verbonden met audio van telefoon"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Verbonden met server voor bestandsoverdracht"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 9e7669ee2472..a954105d11e1 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਸ਼ੇਅਰਿੰਗ"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"ਸੁਨੇਹਾ ਪਹੁੰਚ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ਪਹੁੰਚ"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ਮੀਡੀਆ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ਫੋਨ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 8d53f371ed64..b5edff1c9873 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Udostępnianie połączenia internetowego"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Dostęp do wiadomości"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Dostęp do karty SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Połączono z funkcją audio multimediów"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Połączono z funkcją audio telefonu"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Połączono z serwerem transferu plików"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 2556f8e7143f..1651384b2759 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -47,7 +47,7 @@
<string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Conectado (sem acesso a mensagens)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Conectado (sem telefone ou mídia)"</string>
<string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Áudio da mídia"</string>
- <string name="bluetooth_profile_headset" msgid="8658779596261212609">"Áudio do telefone"</string>
+ <string name="bluetooth_profile_headset" msgid="8658779596261212609">"Áudio do smartphone"</string>
<string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transferência de arquivo"</string>
<string name="bluetooth_profile_hid" msgid="3680729023366986480">"Dispositivo de entrada"</string>
<string name="bluetooth_profile_pan" msgid="3391606497945147673">"Acesso à Internet"</string>
@@ -56,8 +56,12 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartilhamento de conexão à Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acesso a mensagens"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acesso SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado ao áudio da mídia"</string>
- <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao áudio do telefone"</string>
+ <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao áudio do smartphone"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado ao servidor de transferência de arquivo"</string>
<string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectado ao mapa"</string>
<string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conectado a SAP"</string>
@@ -69,7 +73,7 @@
<string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Usar para mapa"</string>
<string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use para acesso SIM"</string>
<string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Usar para áudio de mídia"</string>
- <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usar para áudio do telefone"</string>
+ <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usar para áudio do smartphone"</string>
<string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Usado para transferência de arquivo"</string>
<string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Usar para entrada"</string>
<string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Parear"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 68a982796c70..d69cc745f389 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Partilha da ligação à internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acesso a mensagens"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acesso ao SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ligado ao áudio de multimédia"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ligado ao áudio do telefone"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ligado ao servidor de transferência de ficheiros"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 2556f8e7143f..1651384b2759 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -47,7 +47,7 @@
<string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Conectado (sem acesso a mensagens)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Conectado (sem telefone ou mídia)"</string>
<string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Áudio da mídia"</string>
- <string name="bluetooth_profile_headset" msgid="8658779596261212609">"Áudio do telefone"</string>
+ <string name="bluetooth_profile_headset" msgid="8658779596261212609">"Áudio do smartphone"</string>
<string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transferência de arquivo"</string>
<string name="bluetooth_profile_hid" msgid="3680729023366986480">"Dispositivo de entrada"</string>
<string name="bluetooth_profile_pan" msgid="3391606497945147673">"Acesso à Internet"</string>
@@ -56,8 +56,12 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartilhamento de conexão à Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acesso a mensagens"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acesso SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado ao áudio da mídia"</string>
- <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao áudio do telefone"</string>
+ <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao áudio do smartphone"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado ao servidor de transferência de arquivo"</string>
<string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectado ao mapa"</string>
<string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conectado a SAP"</string>
@@ -69,7 +73,7 @@
<string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Usar para mapa"</string>
<string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use para acesso SIM"</string>
<string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Usar para áudio de mídia"</string>
- <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usar para áudio do telefone"</string>
+ <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usar para áudio do smartphone"</string>
<string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Usado para transferência de arquivo"</string>
<string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Usar para entrada"</string>
<string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Parear"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 6db4dbe5aa59..d89858c606d6 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Distribuirea conexiunii la internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Acces la mesaje"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acces la SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectat la profilul pentru conținut media audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectat la componenta audio a telefonului"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectat la serverul de transfer de fișiere"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 797a9e38c040..451cb0b954c3 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Профиль PAN"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Доступ к сообщениям"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Доступ к SIM-карте"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Подключено к мультимедийному аудиоустройству"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Подключено к аудиоустройству телефона"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Установлено подключение к серверу передачи файлов"</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 263ae2787f3b..03165fe067bc 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"අන්තර්ජාල සම්බන්ධතා බෙදාගැනීම"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"පණිවිඩ ප්‍රවේශය"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ප්‍රවේශය"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"මාධ්‍ය ශ්‍රව්‍යට සම්බන්ධ විය"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"දුරකතනයේ ශ්‍රව්‍යට සම්බන්ධ විය"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ගොනු හුවමාරු සේවාදායකය සමග සම්බන්ධ විය"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 759f8ea0d202..8df768c8ad4e 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Zdieľanie pripojenia na Internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Prístup ku správam"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Prístup k SIM karte"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Pripojené ku zvukovému médiu"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Pripojené ku zvuku telefónu"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Pripojené na server pre prenos údajov"</string>
@@ -92,7 +96,7 @@
<string name="tether_settings_title_usb" msgid="6688416425801386511">"Zdieľané pripojenie cez USB"</string>
<string name="tether_settings_title_wifi" msgid="3277144155960302049">"Prenosný prístupový bod"</string>
<string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Pripojenie cez Bluetooth"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Zdieľanie dát. pripojenia"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Zdieľané pripojenie"</string>
<string name="tether_settings_title_all" msgid="8356136101061143841">"Zdieľané pripojenie a prenosný hotspot"</string>
<string name="managed_user_title" msgid="8109605045406748842">"Všetky pracovné aplikácie"</string>
<string name="user_guest" msgid="8475274842845401871">"Hosť"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 5a11a012ab36..740a92e3eae2 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Skupna raba internetne povezave"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Dostop do sporočil"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Dostop do kartice SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Povezan s profilom za predstavnostni zvok"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Povezava s profilom za zvok telefona vzpostavljena"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Povezava s strežnikom za prenos datotek je vzpostavljena"</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 40c13624f377..e11c418bd0e0 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Ndarja e lidhjes së internetit"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Qasja në mesazhe"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Qasje në kartën SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"U lidh me audion e medias"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"U lidh me audion e telefonit"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"U lidh me serverin e transferimit të skedarëve"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index a9a9bd41b073..0f02f16dff0e 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Дељење интернет везе"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Приступ порукама"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Приступ SIM картици"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Повезано са звуком медија"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Повезано са звуком телефона"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Повезано са сервером за пренос датотека"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index bbee66c70bae..1058a756e907 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Delning av Internetanslutning"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Meddelandeåtkomst"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-åtkomst"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ansluten till medialjud"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ansluten till telefonens ljud"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ansluten till filöverföringsserver"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index b44dc048860a..fa7d028766cb 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Kushiriki muunganisho wa tovuti"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Ufikiaji wa Ujumbe"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Ufikiaji wa SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Imeunganishwa kwenye sikika ya njia ya mawasiliano"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Imeunganishwa kwenye sauti ya simu"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Imeunganishwa kwenye seva ya kuhamisha faili"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 3b5c9b459000..1a8745f6f9b9 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"இணைய இணைப்பு பகிர்தல்"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"செய்திக்கான அணுகல்"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"சிம் அணுகல்"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"மீடியா ஆடியோவுடன் இணைக்கப்பட்டது"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"மொபைல் ஆடியோவுடன் இணைக்கப்பட்டது"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"கோப்பைப் பரிமாற்றும் சேவையகத்துடன் இணைக்கப்பட்டது"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 5be8efe85563..9e97748aba8d 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ఇంటర్నెట్ కనెక్షన్ భాగస్వామ్యం"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"సందేశ ప్రాప్యత"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ప్రాప్యత"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"మీడియా ఆడియోకు కనెక్ట్ చేయబడింది"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ఫోన్ ఆడియోకు కనెక్ట్ చేయబడింది"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ఫైల్ బదిలీ సర్వర్‌కు కనెక్ట్ చేయబడింది"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 1de7f9e11f11..91ebc5565ea9 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"การแชร์การเชื่อมต่ออินเทอร์เน็ต"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"การเข้าถึงข้อความ"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"การเข้าถึงซิม"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"เชื่อมต่อกับระบบเสียงของสื่อแล้ว"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"เชื่อมต่อกับระบบเสียงของโทรศัพท์แล้ว"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"เชื่อมต่อกับเซิร์ฟเวอร์สำหรับโอนไฟล์แล้ว"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 2fed2888f147..a73fb570cdcb 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Pagbabahagi ng koneksyon sa internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Access sa Mensahe"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Access sa SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Konektado sa media audio"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Nakakonekta sa audio ng telepono"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Nakakonekta sa server sa paglilipat ng file"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 79d36095dcb8..ae890e4f9e7f 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"İnternet bağlantısı paylaşımı"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Mesaj Erişimi"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Erişimi"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Medya sesine bağlanıldı"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefon sesine bağlandı"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Dosya aktarım sunucusuna bağlandı"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 136887a1899d..63faab2ae8c7 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Надання доступу до Інтернету"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Доступ до повідомлень"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Доступ до SIM-карти"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Підключено до аудіоджерела"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Підключено до звуку телеф."</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Підключ. до сервера передачі файлів"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 2d770876eddd..67c3c1333cfc 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"انٹرنیٹ کنکشن کا اشتراک کرنا"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"پیغام تک رسائی"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"‏SIM رسائی"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"میڈیا آڈیو سے مربوط"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"فون آڈیو سے مربوط"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"فائل منتقلی سرور سے مربوط ہو گیا ہے"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 7c0132073f06..5d504ffe715d 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet aloqasi ulashmasi"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Xabarga kirish"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-kartaga kirish"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Audio qurilmasiga ulangan"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefon karnayiga ulanildi"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Fayl almashinish serveriga ulanildi"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 913f926e6888..482d7ca5126f 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Chia sẻ kết nối internet"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Truy cập tin nhắn"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Quyền truy cập SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Đã kết nối với âm thanh phương tiện"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Đã kết nối với âm thanh điện thoại"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Đã kết nối với máy chủ chuyển tệp"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index bbcc42839080..41c6210bd39d 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"共享互联网连接"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"消息权限"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 卡存取权限"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"已连接到媒体音频"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"已连接到手机音频"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"已连接到文件传输服务器"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 8ec396e8b154..ecf7fa882f11 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"互聯網連線分享"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"訊息存取權"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 卡存取"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"已連接媒體音頻裝置"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"已連接手機耳機"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"已連線至檔案傳輸伺服器"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 7bad517795a7..92b52315c692 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"網際網路連線分享"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"訊息存取權"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 卡存取權"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"連接至媒體音訊"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"連接至電話音訊"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"已連線到檔案傳輸伺服器"</string>
@@ -75,7 +79,7 @@
<string name="bluetooth_pairing_accept" msgid="6163520056536604875">"配對"</string>
<string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"配對"</string>
<string name="bluetooth_pairing_decline" msgid="4185420413578948140">"取消"</string>
- <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"配對完成後,所配對的裝置即可在連線後存取您的聯絡人和通話紀錄。"</string>
+ <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"配對完成後,所配對的裝置即可在連線後存取你的聯絡人和通話紀錄。"</string>
<string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"無法與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 配對。"</string>
<string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"無法與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 配對,因為 PIN 或密碼金鑰不正確。"</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"無法與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 通訊。"</string>
@@ -114,9 +118,9 @@
<string name="tts_play_example_summary" msgid="8029071615047894486">"播放簡短的語音合成範例"</string>
<string name="tts_install_data_title" msgid="4264378440508149986">"安裝語音資料"</string>
<string name="tts_install_data_summary" msgid="5742135732511822589">"安裝語音合成所需的語音資料"</string>
- <string name="tts_engine_security_warning" msgid="8786238102020223650">"此語音合成引擎可能會收集您輸入的所有語音,包括密碼和信用卡號等個人資料。此引擎來自「<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>」引擎,是否要使用此語音合成引擎?"</string>
- <string name="tts_engine_network_required" msgid="1190837151485314743">"您必須連上網路才能使用文字轉語音輸出功能。"</string>
- <string name="tts_default_sample_string" msgid="4040835213373086322">"您目前聽到的是我們的語音合成範例"</string>
+ <string name="tts_engine_security_warning" msgid="8786238102020223650">"此語音合成引擎可能會收集你輸入的所有語音,包括密碼和信用卡號等個人資料。此引擎來自「<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>」引擎,是否要使用此語音合成引擎?"</string>
+ <string name="tts_engine_network_required" msgid="1190837151485314743">"你必須連上網路才能使用文字轉語音輸出功能。"</string>
+ <string name="tts_default_sample_string" msgid="4040835213373086322">"你目前聽到的是我們的語音合成範例"</string>
<string name="tts_status_title" msgid="7268566550242584413">"預設語言狀態"</string>
<string name="tts_status_ok" msgid="1309762510278029765">"完整支援<xliff:g id="LOCALE">%1$s</xliff:g>"</string>
<string name="tts_status_requires_network" msgid="6042500821503226892">"需要網路連線才支援<xliff:g id="LOCALE">%1$s</xliff:g>"</string>
@@ -161,7 +165,7 @@
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解鎖"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許解除鎖定開機載入器"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允許 OEM 解鎖嗎?"</string>
- <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"警告:開啟這項設定時,您將無法使用這個裝置的防盜功能。"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"警告:開啟這項設定時,你將無法使用這個裝置的防盜功能。"</string>
<string name="mock_location_app" msgid="7966220972812881854">"選取模擬位置應用程式"</string>
<string name="mock_location_app_not_set" msgid="809543285495344223">"未設定模擬位置應用程式"</string>
<string name="mock_location_app_set" msgid="8966420655295102685">"模擬位置應用程式:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -193,7 +197,7 @@
<string name="select_logd_size_title" msgid="7433137108348553508">"紀錄器緩衝區空間"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"選取每個紀錄緩衝區的紀錄器空間"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"要清除永久儲存的記錄器資料嗎?"</string>
- <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"如果您選擇不再透過永久記錄器進行監控,系統就必須清除裝置中的記錄器資料。"</string>
+ <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"如果你選擇不再透過永久記錄器進行監控,系統就必須清除裝置中的記錄器資料。"</string>
<string name="select_logpersist_title" msgid="7530031344550073166">"在裝置上永久儲存記錄器資料"</string>
<string name="select_logpersist_dialog_title" msgid="4003400579973269060">"選取要在裝置上永久儲存的紀錄緩衝區"</string>
<string name="select_usb_configuration_title" msgid="2649938511506971843">"選取 USB 設定"</string>
@@ -203,10 +207,10 @@
<string name="debug_view_attributes" msgid="6485448367803310384">"啟用檢視屬性檢查"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"即使 Wi‑Fi 連線已啟用,一律將行動數據連線保持啟用狀態 (以便快速切換網路)。"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"允許 USB 偵錯嗎?"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"USB 偵錯是針對應用程式開發而設計的功能,可讓您複製電腦和裝置中的資料、不需經由通知即可在裝置上安裝應用程式,以及讀取記錄資料。"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB 偵錯是針對應用程式開發而設計的功能,可讓你複製電腦和裝置中的資料、不需經由通知即可在裝置上安裝應用程式,以及讀取記錄資料。"</string>
<string name="adb_keys_warning_message" msgid="5659849457135841625">"要針對先前授權的所有電腦撤銷 USB 偵錯權限嗎?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"允許開發設定?"</string>
- <string name="dev_settings_warning_message" msgid="2298337781139097964">"這些設定僅供開發之用,可能導致您的裝置及裝置中的應用程式毀損或運作異常。"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"這些設定僅供開發之用,可能導致你的裝置及裝置中的應用程式毀損或運作異常。"</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"透過 USB 驗證應用程式"</string>
<string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"檢查透過 ADB/ADT 安裝的應用程式是否具有有害行為。"</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"只要停用藍牙絕對音量功能,即可避免在連線到遠端裝置時,發生音量過大或無法控制音量等問題。"</string>
@@ -304,7 +308,7 @@
<string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"轉換..."</string>
<string name="convert_to_file_encryption_done" msgid="7859766358000523953">"已將檔案加密"</string>
<string name="title_convert_fbe" msgid="1263622876196444453">"正在轉換成個別加密檔案"</string>
- <string name="convert_to_fbe_warning" msgid="6139067817148865527">"將資料分割區轉換成個別加密檔案。\n警告!這項操作會清除您的所有資料。\n這是 Alpha 版功能,可能無法正確運作。\n按下 [清除並轉換...] 即可繼續。"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"將資料分割區轉換成個別加密檔案。\n警告!這項操作會清除你的所有資料。\n這是 Alpha 版功能,可能無法正確運作。\n按下 [清除並轉換...] 即可繼續。"</string>
<string name="button_convert_fbe" msgid="5152671181309826405">"清除並轉換..."</string>
<string name="picture_color_mode" msgid="4560755008730283695">"螢幕色彩模式"</string>
<string name="picture_color_mode_desc" msgid="1141891467675548590">"使用 sRGB"</string>
@@ -356,6 +360,6 @@
<string name="active_input_method_subtypes" msgid="3596398805424733238">"啟用的輸入法"</string>
<string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"使用系統語言"</string>
<string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"無法開啟「<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>」的設定"</string>
- <string name="ime_security_warning" msgid="4135828934735934248">"這個輸入法是由「<xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>」應用程式所提供,它可能會收集您輸入的所有文字,包括密碼和信用卡號等個人資料。要啟用這個輸入法嗎?"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"注意:重新啟動後,您必須將手機解鎖,才能執行這個應用程式"</string>
+ <string name="ime_security_warning" msgid="4135828934735934248">"這個輸入法是由「<xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>」應用程式所提供,它可能會收集你輸入的所有文字,包括密碼和信用卡號等個人資料。要啟用這個輸入法嗎?"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"注意:重新啟動後,你必須將手機解鎖,才能執行這個應用程式"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index dd559551cc26..415ddd934732 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -56,6 +56,10 @@
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Ukwabelana ngoxhumano lwe-Inthanethi"</string>
<string name="bluetooth_profile_map" msgid="5465271250454324383">"Ukufinyelela umlayezo"</string>
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"Ukufinyelela kwe-SIM"</string>
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality (2221025895896419505) -->
+ <skip />
+ <!-- no translation found for bluetooth_profile_a2dp_high_quality_unknown_codec (5860996587596508755) -->
+ <skip />
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ixhume emsindweni wemidiya"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ixhunywe kumsindo wefoni"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ixhunywe kwiseva yokudlulisa ifayela"</string>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index e15df142de94..044392cc4ad6 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -130,6 +130,12 @@
<!-- Bluetooth settings. The user-visible string that is used whenever referring to the SAP profile (sharing SIM card). -->
<string name="bluetooth_profile_sap">SIM Access</string>
+ <!-- Bluetooth settings. The user-visible string for the setting controlling whether to use a high-quality codec if the device supports it, along with the name of the codec (eg AAC, LDAC, aptX) -->
+ <string name="bluetooth_profile_a2dp_high_quality">Use high quality audio: <xliff:g id="codec_name">%1$s</xliff:g></string>
+
+ <!-- Bluetooth settings. Similar to bluetooth_profile_a2dp_high_quality, but used when the device supports high quality audio but we don't know which codec that will be used. -->
+ <string name="bluetooth_profile_a2dp_high_quality_unknown_codec">Use high quality audio</string>
+
<!-- Bluetooth settings. Connection options screen. The summary for the A2DP checkbox preference when A2DP is connected. -->
<string name="bluetooth_a2dp_profile_summary_connected">Connected to media audio</string>
<!-- Bluetooth settings. Connection options screen. The summary for the headset checkbox preference when headset is connected. -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
index af247bdbb392..a0eadd0fa122 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -17,6 +17,7 @@ package com.android.settingslib.drawer;
import android.annotation.LayoutRes;
import android.annotation.Nullable;
+import android.app.ActionBar;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -27,7 +28,6 @@ import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.provider.Settings;
import android.util.ArraySet;
import android.util.Log;
import android.view.LayoutInflater;
@@ -117,14 +117,6 @@ public class SettingsDrawerActivity extends Activity {
super.onPause();
}
- /**
- * Gets the name of the intent action of the default setting app. Used to launch setting app
- * when Settings Home is clicked.
- */
- public String getSettingAction() {
- return Settings.ACTION_SETTINGS;
- }
-
public void addCategoryListener(CategoryListener listener) {
mCategoryListeners.add(listener);
}
@@ -142,7 +134,7 @@ public class SettingsDrawerActivity extends Activity {
@Override
public void setContentView(@LayoutRes int layoutResID) {
- final ViewGroup parent = (ViewGroup) findViewById(R.id.content_frame);
+ final ViewGroup parent = findViewById(R.id.content_frame);
if (parent != null) {
parent.removeAllViews();
}
@@ -159,11 +151,14 @@ public class SettingsDrawerActivity extends Activity {
((ViewGroup) findViewById(R.id.content_frame)).addView(view, params);
}
- public void showMenuIcon() {
- getActionBar().setDisplayHomeAsUpEnabled(true);
+ private void showMenuIcon() {
+ final ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
}
- protected void onCategoriesChanged() {
+ private void onCategoriesChanged() {
final int N = mCategoryListeners.size();
for (int i = 0; i < N; i++) {
mCategoryListeners.get(i).onCategoriesChanged();
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 314791e3105a..646b6ba84ebb 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -15,8 +15,8 @@
*/
package com.android.settingslib.wifi;
+import android.annotation.MainThread;
import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -41,6 +41,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.provider.Settings;
+import android.support.annotation.GuardedBy;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
@@ -65,8 +66,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
* Tracks saved or available wifi networks and their state.
*/
public class WifiTracker {
- // TODO(sghuman): Document remaining methods with @UiThread and @WorkerThread where possible.
- // TODO(sghuman): Refactor to avoid calling certain methods on the UiThread.
// TODO(b/36733768): Remove flag includeSaved and includePasspoints.
private static final String TAG = "WifiTracker";
@@ -91,40 +90,40 @@ public class WifiTracker {
private final boolean mIncludeSaved;
private final boolean mIncludeScans;
private final boolean mIncludePasspoints;
- private final MainHandler mMainHandler;
+ @VisibleForTesting final MainHandler mMainHandler;
private final WorkHandler mWorkHandler;
private WifiTrackerNetworkCallback mNetworkCallback;
private int mNumSavedNetworks;
+
+ @GuardedBy("mLock")
private boolean mRegistered;
- /** Updated using main handler. Clone of this collection is returned
- * from {@link #getAccessPoints()}
+ /**
+ * The externally visible access point list.
+ *
+ * Updated using main handler. Clone of this collection is returned from
+ * {@link #getAccessPoints()}
*/
private final List<AccessPoint> mAccessPoints = new ArrayList<>();
/**
- * Protects APs contained in {@link #mInternalAccessPoints} from being modified concurrently
- * while its being read. Usage contract:
+ * The internal list of access points, synchronized on itself.
*
- * 1. MainHandler opens the condition after copying the states thereby
- * allowing WorkerHandler to mutate the contents.
- * 2. WorkerHandler after mutating the contents, sends a message to MainHandler to copy the
- * states and closes the condition.
- *
- * This is better than synchronizing on a variable because it prevents MainHandler from
- * unnecessarily blocking/waiting to acquire lock for copying states. When MainHandler is about
- * to access {@link #mInternalAccessPoints}, it is assumed that it has exclusively lock on the
- * contents.
- */
- private final ConditionVariable mInternalAccessPointsWriteLock = new ConditionVariable(true);
-
- /** Guarded by mInternalAccessPointsWriteLock, updated using worker handler.
* Never exposed outside this class.
*/
+ @GuardedBy("mLock")
private final List<AccessPoint> mInternalAccessPoints = new ArrayList<>();
+ /**
+ * Synchronization lock for managing concurrency between main and worker threads.
+ *
+ * <p>This lock should be held for all background work.
+ * TODO(b/37674366): Remove the worker thread so synchronization is no longer necessary.
+ */
+ private final Object mLock = new Object();
+
//visible to both worker and main thread. Guarded by #mInternalAccessPoints
private final AccessPointListenerAdapter mAccessPointListenerAdapter
= new AccessPointListenerAdapter();
@@ -138,10 +137,12 @@ public class WifiTracker {
private final NetworkScoreManager mNetworkScoreManager;
private final WifiNetworkScoreCache mScoreCache;
- private final Set<NetworkKey> mRequestedScores = new ArraySet<>();
private boolean mNetworkScoringUiEnabled;
private final ContentObserver mObserver;
+ @GuardedBy("mLock")
+ private final Set<NetworkKey> mRequestedScores = new ArraySet<>();
+
@VisibleForTesting
Scanner mScanner;
@@ -212,13 +213,17 @@ public class WifiTracker {
mNetworkScoreManager = networkScoreManager;
- mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mMainHandler) {
+ mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mWorkHandler) {
@Override
public void networkCacheUpdated(List<ScoredNetwork> networks) {
+ synchronized (mLock) {
+ if (!mRegistered) return;
+ }
+
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Score cache was updated with networks: " + networks);
}
- Message.obtain(mWorkHandler, WorkHandler.MSG_UPDATE_NETWORK_SCORES).sendToTarget();
+ updateNetworkScores();
}
});
@@ -236,17 +241,19 @@ public class WifiTracker {
/**
* Synchronously update the list of access points with the latest information.
*/
+ @MainThread
public void forceUpdate() {
- mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
-
- mLastInfo = mWifiManager.getConnectionInfo();
- mLastNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork());
- updateAccessPoints();
-
- // Synchronously copy access points
- mMainHandler.removeMessages(MainHandler.MSG_ACCESS_POINT_CHANGED);
- mMainHandler.handleMessage(
- Message.obtain(mMainHandler, MainHandler.MSG_ACCESS_POINT_CHANGED));
+ synchronized (mLock) {
+ mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
+ mLastInfo = mWifiManager.getConnectionInfo();
+ mLastNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork());
+ updateAccessPointsLocked();
+
+ // Synchronously copy access points
+ mMainHandler.removeMessages(MainHandler.MSG_ACCESS_POINT_CHANGED);
+ mMainHandler.handleMessage(
+ Message.obtain(mMainHandler, MainHandler.MSG_ACCESS_POINT_CHANGED));
+ }
}
/**
@@ -290,22 +297,25 @@ public class WifiTracker {
* <p>Registers listeners and starts scanning for wifi networks. If this is not called
* then forceUpdate() must be called to populate getAccessPoints().
*/
+ @MainThread
public void startTracking() {
- registerScoreCache();
-
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.NETWORK_SCORING_UI_ENABLED),
- false /* notifyForDescendants */,
- mObserver);
- mObserver.onChange(false /* selfChange */); // Set the initial value for mScoringUiEnabled
-
- resumeScanning();
- if (!mRegistered) {
- mContext.registerReceiver(mReceiver, mFilter);
- // NetworkCallback objects cannot be reused. http://b/20701525 .
- mNetworkCallback = new WifiTrackerNetworkCallback();
- mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
- mRegistered = true;
+ synchronized (mLock) {
+ registerScoreCache();
+
+ mContext.getContentResolver().registerContentObserver(
+ Settings.Global.getUriFor(Settings.Global.NETWORK_SCORING_UI_ENABLED),
+ false /* notifyForDescendants */,
+ mObserver);
+ mObserver.onChange(false /* selfChange */); // Set mScoringUiEnabled
+
+ resumeScanning();
+ if (!mRegistered) {
+ mContext.registerReceiver(mReceiver, mFilter);
+ // NetworkCallback objects cannot be reused. http://b/20701525 .
+ mNetworkCallback = new WifiTrackerNetworkCallback();
+ mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
+ mRegistered = true;
+ }
}
}
@@ -323,44 +333,49 @@ public class WifiTracker {
Log.d(TAG, "Requesting scores for Network Keys: " + keys);
}
mNetworkScoreManager.requestScores(keys.toArray(new NetworkKey[keys.size()]));
- mRequestedScores.addAll(keys);
+ synchronized (mLock) {
+ mRequestedScores.addAll(keys);
+ }
}
/**
* Stop tracking wifi networks and scores.
*
- * <p>Unregisters all listeners and stops scanning for wifi networks. This should always
- * be called when done with a WifiTracker (if startTracking was called) to ensure
- * proper cleanup.
+ * <p>This should always be called when done with a WifiTracker (if startTracking was called) to
+ * ensure proper cleanup and prevent any further callbacks from occuring.
*/
+ @MainThread
public void stopTracking() {
- if (mRegistered) {
- mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
- mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_NETWORK_INFO);
- mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_NETWORK_SCORES);
- mContext.unregisterReceiver(mReceiver);
- mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
- mRegistered = false;
- }
- pauseScanning();
-
- unregisterAndClearScoreCache();
+ synchronized (mLock) {
+ if (mRegistered) {
+ mContext.unregisterReceiver(mReceiver);
+ mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+ mRegistered = false;
+ }
+ unregisterAndClearScoreCache();
+ pauseScanning();
+ mContext.getContentResolver().unregisterContentObserver(mObserver);
- mContext.getContentResolver().unregisterContentObserver(mObserver);
+ mWorkHandler.removePendingMessages();
+ mMainHandler.removePendingMessages();
+ }
}
private void unregisterAndClearScoreCache() {
mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mScoreCache);
mScoreCache.clearScores();
- // Clear the scores on the work handler to avoid concurrent modification exceptions
- mWorkHandler.post(() -> mRequestedScores.clear());
+ // Synchronize on mLock to avoid concurrent modification during updateAccessPointsLocked
+ synchronized (mLock) {
+ mRequestedScores.clear();
+ }
}
/**
* Gets the current list of access points. Should be called from main thread, otherwise
* expect inconsistencies
*/
+ @MainThread
public List<AccessPoint> getAccessPoints() {
return new ArrayList<>(mAccessPoints);
}
@@ -441,16 +456,20 @@ public class WifiTracker {
return null;
}
- private void updateAccessPoints() {
- // Wait until main worker is done copying the states. This is done to prevent propagation
- // of accesspoint states while the update is in progress.
- long before = System.currentTimeMillis();
- mInternalAccessPointsWriteLock.block();
- if (DBG) {
- Log.d(TAG, "Acquired AP lock on WorkerHandler. Time to wait = "
- + (System.currentTimeMillis() - before) + " ms.");
+ /** Safely modify {@link #mInternalAccessPoints} by acquiring {@link #mLock} first. */
+ private void updateAccessPointsLocked() {
+ synchronized (mLock) {
+ updateAccessPoints();
}
+ }
+ /**
+ * Update the internal list of access points.
+ *
+ * <p>Should never be called directly, use {@link #updateAccessPointsLocked()} instead.
+ */
+ @GuardedBy("mLock")
+ private void updateAccessPoints() {
// Swap the current access points into a cached list.
List<AccessPoint> cachedAccessPoints = new ArrayList<>(mInternalAccessPoints);
ArrayList<AccessPoint> accessPoints = new ArrayList<>();
@@ -460,8 +479,8 @@ public class WifiTracker {
accessPoint.clearConfig();
}
- /* Lookup table to more quickly update AccessPoints by only considering objects with the
- * correct SSID. Maps SSID -> List of AccessPoints with the given SSID. */
+ /* Lookup table to more quickly update AccessPoints by only considering objects with the
+ * correct SSID. Maps SSID -> List of AccessPoints with the given SSID. */
Multimap<String, AccessPoint> apMap = new Multimap<String, AccessPoint>();
WifiConfiguration connectionConfig = null;
if (mLastInfo != null) {
@@ -584,7 +603,8 @@ public class WifiTracker {
mInternalAccessPoints.clear();
mInternalAccessPoints.addAll(accessPoints);
- mMainHandler.scheduleAPCopyingAndCloseWriteLock();
+
+ mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED);
}
@VisibleForTesting
@@ -641,59 +661,48 @@ public class WifiTracker {
connectionConfig = getWifiConfigurationForNetworkId(mLastInfo.getNetworkId());
}
- // Lock required to prevent accidental copying of AccessPoint states while the modification
- // is in progress. see #copyAndNotifyListeners
- long before = System.currentTimeMillis();
- mInternalAccessPointsWriteLock.block();
- if (DBG) {
- Log.d(TAG, "Acquired AP lock on WorkerHandler for updating NetworkInfo. Wait time = " +
- (System.currentTimeMillis() - before) + "ms.");
- }
-
boolean updated = false;
boolean reorder = false; // Only reorder if connected AP was changed
- for (int i = mInternalAccessPoints.size() - 1; i >= 0; --i) {
- AccessPoint ap = mInternalAccessPoints.get(i);
- boolean previouslyConnected = ap.isActive();
- if (ap.update(connectionConfig, mLastInfo, mLastNetworkInfo)) {
- updated = true;
- if (previouslyConnected != ap.isActive()) reorder = true;
- }
- if (ap.update(mScoreCache, mNetworkScoringUiEnabled)) {
- reorder = true;
- updated = true;
+
+ synchronized (mLock) {
+ for (int i = mInternalAccessPoints.size() - 1; i >= 0; --i) {
+ AccessPoint ap = mInternalAccessPoints.get(i);
+ boolean previouslyConnected = ap.isActive();
+ if (ap.update(connectionConfig, mLastInfo, mLastNetworkInfo)) {
+ updated = true;
+ if (previouslyConnected != ap.isActive()) reorder = true;
+ }
+ if (ap.update(mScoreCache, mNetworkScoringUiEnabled)) {
+ reorder = true;
+ updated = true;
+ }
}
- }
- if (reorder) Collections.sort(mInternalAccessPoints);
+ if (reorder) Collections.sort(mInternalAccessPoints);
- if (updated) mMainHandler.scheduleAPCopyingAndCloseWriteLock();
+ if (updated) mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED);
+ }
}
/**
* Update all the internal access points rankingScores, badge and metering.
*
* <p>Will trigger a resort and notify listeners of changes if applicable.
+ *
+ * <p>Synchronized on {@link #mLock}.
*/
private void updateNetworkScores() {
- // Lock required to prevent accidental copying of AccessPoint states while the modification
- // is in progress. see #copyAndNotifyListeners
- long before = System.currentTimeMillis();
- mInternalAccessPointsWriteLock.block();
- if (DBG) {
- Log.d(TAG, "Acquired AP lock on WorkerHandler for inserting NetworkScores. Wait time = " +
- (System.currentTimeMillis() - before) + "ms.");
- }
-
- boolean reorder = false;
- for (int i = 0; i < mInternalAccessPoints.size(); i++) {
- if (mInternalAccessPoints.get(i).update(mScoreCache, mNetworkScoringUiEnabled)) {
- reorder = true;
+ synchronized (mLock) {
+ boolean updated = false;
+ for (int i = 0; i < mInternalAccessPoints.size(); i++) {
+ if (mInternalAccessPoints.get(i).update(mScoreCache, mNetworkScoringUiEnabled)) {
+ updated = true;
+ }
+ }
+ if (updated) {
+ Collections.sort(mInternalAccessPoints);
+ mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED);
}
- }
- if (reorder) {
- Collections.sort(mInternalAccessPoints);
- mMainHandler.scheduleAPCopyingAndCloseWriteLock();
}
}
@@ -733,7 +742,10 @@ public class WifiTracker {
.sendToTarget();
mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
} else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
- mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO);
+ NetworkInfo info =
+ mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork());
+ mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO, info)
+ .sendToTarget();
}
}
};
@@ -749,10 +761,11 @@ public class WifiTracker {
}
}
- private final class MainHandler extends Handler {
- private static final int MSG_CONNECTED_CHANGED = 0;
- private static final int MSG_WIFI_STATE_CHANGED = 1;
- private static final int MSG_ACCESS_POINT_CHANGED = 2;
+ @VisibleForTesting
+ final class MainHandler extends Handler {
+ @VisibleForTesting static final int MSG_CONNECTED_CHANGED = 0;
+ @VisibleForTesting static final int MSG_WIFI_STATE_CHANGED = 1;
+ @VisibleForTesting static final int MSG_ACCESS_POINT_CHANGED = 2;
private static final int MSG_RESUME_SCANNING = 3;
private static final int MSG_PAUSE_SCANNING = 4;
@@ -789,10 +802,12 @@ public class WifiTracker {
}
}
- void scheduleAPCopyingAndCloseWriteLock() {
- //prevent worker thread from modifying mInternalAccessPoints
- mInternalAccessPointsWriteLock.close();
- sendEmptyMessage(MSG_ACCESS_POINT_CHANGED);
+ void removePendingMessages() {
+ removeMessages(MSG_ACCESS_POINT_CHANGED);
+ removeMessages(MSG_CONNECTED_CHANGED);
+ removeMessages(MSG_WIFI_STATE_CHANGED);
+ removeMessages(MSG_PAUSE_SCANNING);
+ removeMessages(MSG_RESUME_SCANNING);
}
}
@@ -801,7 +816,6 @@ public class WifiTracker {
private static final int MSG_UPDATE_NETWORK_INFO = 1;
private static final int MSG_RESUME = 2;
private static final int MSG_UPDATE_WIFI_STATE = 3;
- private static final int MSG_UPDATE_NETWORK_SCORES = 4;
public WorkHandler(Looper looper) {
super(looper);
@@ -809,9 +823,18 @@ public class WifiTracker {
@Override
public void handleMessage(Message msg) {
+ synchronized (mLock) {
+ processMessage(msg);
+ }
+ }
+
+ @GuardedBy("mLock")
+ private void processMessage(Message msg) {
+ if (!mRegistered) return;
+
switch (msg.what) {
case MSG_UPDATE_ACCESS_POINTS:
- updateAccessPoints();
+ updateAccessPointsLocked();
break;
case MSG_UPDATE_NETWORK_INFO:
updateNetworkInfo((NetworkInfo) msg.obj);
@@ -836,11 +859,15 @@ public class WifiTracker {
mMainHandler.obtainMessage(MainHandler.MSG_WIFI_STATE_CHANGED, msg.arg1, 0)
.sendToTarget();
break;
- case MSG_UPDATE_NETWORK_SCORES:
- updateNetworkScores();
- break;
}
}
+
+ private void removePendingMessages() {
+ removeMessages(MSG_UPDATE_ACCESS_POINTS);
+ removeMessages(MSG_UPDATE_NETWORK_INFO);
+ removeMessages(MSG_RESUME);
+ removeMessages(MSG_UPDATE_WIFI_STATE);
+ }
}
@VisibleForTesting
@@ -959,11 +986,12 @@ public class WifiTracker {
/**
* Responsible for copying access points from {@link #mInternalAccessPoints} and notifying
- * accesspoint listeners. Mutation of the accesspoints returned is done on the main thread.
+ * accesspoint listeners.
*
* @param notifyListeners if true, accesspoint listeners are notified, otherwise notifications
* dropped.
*/
+ @MainThread
private void copyAndNotifyListeners(boolean notifyListeners) {
// Need to watch out for memory allocations on main thread.
SparseArray<AccessPoint> oldAccessPoints = new SparseArray<>();
@@ -974,17 +1002,15 @@ public class WifiTracker {
oldAccessPoints.put(accessPoint.mId, accessPoint);
}
- //synchronize to prevent modification of "mInternalAccessPoints" by worker thread.
- long before = System.currentTimeMillis();
- try {
- if (DBG) {
- Log.d(TAG, "Starting to copy AP items on the MainHandler");
- }
- if (notifyListeners) {
- notificationMap = mAccessPointListenerAdapter.mPendingNotifications.clone();
- }
+ if (DBG) {
+ Log.d(TAG, "Starting to copy AP items on the MainHandler");
+ }
+ if (notifyListeners) {
+ notificationMap = mAccessPointListenerAdapter.mPendingNotifications.clone();
+ }
- mAccessPointListenerAdapter.mPendingNotifications.clear();
+ mAccessPointListenerAdapter.mPendingNotifications.clear();
+ synchronized (mLock) {
for (AccessPoint internalAccessPoint : mInternalAccessPoints) {
AccessPoint accessPoint = oldAccessPoints.get(internalAccessPoint.mId);
if (accessPoint == null) {
@@ -994,12 +1020,6 @@ public class WifiTracker {
}
updatedAccessPoints.add(accessPoint);
}
- } finally {
- mInternalAccessPointsWriteLock.open();
- if (DBG) {
- Log.d(TAG, "Opened AP Write lock on the MainHandler. Time to copy = " +
- (System.currentTimeMillis() - before) + " ms.");
- }
}
mAccessPoints.clear();
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTrackerFactory.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTrackerFactory.java
index a2becf717e89..79cee046140d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTrackerFactory.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTrackerFactory.java
@@ -23,8 +23,6 @@ import android.support.annotation.Keep;
* Factory method used to inject WifiTracker instances.
*/
public class WifiTrackerFactory {
- private static boolean sTestingMode = false;
-
private static WifiTracker sTestingWifiTracker;
@Keep // Keep proguard from stripping this method since it is only used in tests
@@ -35,7 +33,7 @@ public class WifiTrackerFactory {
public static WifiTracker create(
Context context, WifiTracker.WifiListener wifiListener, Looper workerLooper,
boolean includeSaved, boolean includeScans, boolean includePasspoints) {
- if(sTestingMode) {
+ if(sTestingWifiTracker != null) {
return sTestingWifiTracker;
}
return new WifiTracker(
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java
index 752b5b0e152c..003f90579415 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java
@@ -16,7 +16,12 @@
package com.android.settingslib.drawer;
-import android.app.Activity;
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
+
import android.app.Instrumentation;
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
@@ -24,23 +29,12 @@ import android.support.test.filters.SmallTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
-import com.android.settingslib.R;
-
-import com.google.common.truth.Truth;
-
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
-import static com.google.common.truth.Truth.assertThat;
-
@RunWith(AndroidJUnit4.class)
@SmallTest
public class SettingsDrawerActivityTest {
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
index 3e01b34765c0..154fde204c70 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
@@ -17,6 +17,7 @@ package com.android.settingslib.wifi;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
+
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.when;
@@ -24,7 +25,6 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.net.NetworkKey;
import android.net.ScoredNetwork;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
@@ -40,6 +40,7 @@ import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.text.SpannableString;
import android.text.style.TtsSpan;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
index b938fe2ac2db..f519a906eab5 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
@@ -20,13 +20,17 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -60,7 +64,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Matchers;
@@ -129,7 +132,7 @@ public class WifiTrackerTest {
private Handler mScannerHandler;
private HandlerThread mMainThread;
private HandlerThread mWorkerThread;
- private Looper mLooper;
+ private Looper mWorkerLooper;
private Looper mMainLooper;
private int mOriginalScoringUiSettingValue;
@@ -141,7 +144,7 @@ public class WifiTrackerTest {
mWorkerThread = new HandlerThread("TestHandlerWorkerThread");
mWorkerThread.start();
- mLooper = mWorkerThread.getLooper();
+ mWorkerLooper = mWorkerThread.getLooper();
mMainThread = new HandlerThread("TestHandlerThread");
mMainThread.start();
mMainLooper = mMainThread.getLooper();
@@ -252,9 +255,7 @@ public class WifiTrackerTest {
tracker.mReceiver.onReceive(mContext, intent);
}
- mAccessPointsChangedLatch = new CountDownLatch(1);
sendScanResultsAndProcess(tracker);
- assertTrue(mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
return tracker;
}
@@ -264,7 +265,7 @@ public class WifiTrackerTest {
new WifiTracker(
mContext,
mockWifiListener,
- mLooper,
+ mWorkerLooper,
true,
true,
true,
@@ -349,7 +350,7 @@ public class WifiTrackerTest {
scanResult.capabilities = "";
WifiTracker tracker = new WifiTracker(
- InstrumentationRegistry.getTargetContext(), null, mLooper, true, true);
+ InstrumentationRegistry.getTargetContext(), null, mWorkerLooper, true, true);
AccessPoint result = tracker.getCachedOrCreate(scanResult, new ArrayList<AccessPoint>());
assertTrue(result.mAccessPointListener != null);
@@ -365,7 +366,7 @@ public class WifiTrackerTest {
configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
WifiTracker tracker = new WifiTracker(
- InstrumentationRegistry.getTargetContext(), null, mLooper, true, true);
+ InstrumentationRegistry.getTargetContext(), null, mWorkerLooper, true, true);
AccessPoint result = tracker.getCachedOrCreate(configuration, new ArrayList<AccessPoint>());
assertTrue(result.mAccessPointListener != null);
@@ -433,7 +434,8 @@ public class WifiTrackerTest {
}
@Test
- public void startTrackingShouldRequestScoresForCurrentAccessPoints() throws InterruptedException {
+ public void startTrackingAfterStopTracking_shouldRequestNewScores()
+ throws InterruptedException {
// Start the tracker and inject the initial scan results and then stop tracking
WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults();
@@ -442,6 +444,7 @@ public class WifiTrackerTest {
mRequestScoresLatch = new CountDownLatch(1);
startTracking(tracker);
+ tracker.forceUpdate();
assertTrue("Latch timed out",
mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
@@ -462,9 +465,10 @@ public class WifiTrackerTest {
private void updateScoresAndWaitForAccessPointsChangedCallback() throws InterruptedException {
// Updating scores can happen together or one after the other, so the latch countdown is set
// to 2.
- mAccessPointsChangedLatch = new CountDownLatch(2);
+ mAccessPointsChangedLatch = new CountDownLatch(3);
updateScores();
- mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+ assertTrue("onAccessPointChanged was not called three times",
+ mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
}
@Test
@@ -648,27 +652,33 @@ public class WifiTrackerTest {
WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected();
assertThat(tracker.getAccessPoints().get(0).isActive()).isTrue();
- WifiConfiguration configuration = new WifiConfiguration();
- configuration.SSID = SSID_1;
- configuration.BSSID = BSSID_1;
- configuration.networkId = CONNECTED_NETWORK_ID;
- when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration));
-
int newRssi = CONNECTED_RSSI + 10;
WifiInfo info = new WifiInfo(CONNECTED_AP_1_INFO);
info.setRssi(newRssi);
- when(mockWifiManager.getConnectionInfo()).thenReturn(info);
- mAccessPointsChangedLatch = new CountDownLatch(1);
+ CountDownLatch latch = new CountDownLatch(1);
+
+ // Once the new info has been fetched, we need to wait for the access points to be copied
+ doAnswer(invocation -> {
+ latch.countDown();
+ mAccessPointsChangedLatch = new CountDownLatch(1);
+ return info;
+ }).when(mockWifiManager).getConnectionInfo();
+
tracker.mReceiver.onReceive(mContext, new Intent(WifiManager.RSSI_CHANGED_ACTION));
- assertTrue(mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
+ assertTrue("New connection info never retrieved",
+ latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
+ assertTrue("onAccessPointsChanged never called",
+ mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
- verify(mockWifiManager, atLeast(2)).getConnectionInfo();
assertThat(tracker.getAccessPoints().get(0).getRssi()).isEqualTo(newRssi);
}
@Test
public void forceUpdateShouldSynchronouslyFetchLatestInformation() throws Exception {
+ Network mockNetwork = mock(Network.class);
+ when(mockWifiManager.getCurrentNetwork()).thenReturn(mockNetwork);
+
when(mockWifiManager.getConnectionInfo()).thenReturn(CONNECTED_AP_1_INFO);
WifiConfiguration configuration = new WifiConfiguration();
@@ -682,13 +692,58 @@ public class WifiTrackerTest {
networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "connected", "test");
when(mockConnectivityManager.getNetworkInfo(any(Network.class))).thenReturn(networkInfo);
-
WifiTracker tracker = createMockedWifiTracker();
- startTracking(tracker);
tracker.forceUpdate();
+ verify(mockWifiManager).getConnectionInfo();
+ verify(mockWifiManager, times(2)).getConfiguredNetworks();
+ verify(mockConnectivityManager).getNetworkInfo(any(Network.class));
+
verify(mockWifiListener).onAccessPointsChanged();
assertThat(tracker.getAccessPoints().size()).isEqualTo(2);
assertThat(tracker.getAccessPoints().get(0).isActive()).isTrue();
}
+
+ @Test
+ public void stopTrackingShouldRemoveWifiListenerCallbacks() throws Exception {
+ WifiTracker tracker = createMockedWifiTracker();
+ startTracking(tracker);
+
+ CountDownLatch latch = new CountDownLatch(1);
+ CountDownLatch lock = new CountDownLatch(1);
+ tracker.mMainHandler.post(() -> {
+ try {
+ lock.await();
+ latch.countDown();
+ } catch (InterruptedException e) {
+ fail("Interrupted Exception while awaiting lock release: " + e);
+ }
+ });
+
+ // Enqueue messages
+ tracker.mMainHandler.sendEmptyMessage(
+ WifiTracker.MainHandler.MSG_ACCESS_POINT_CHANGED);
+ tracker.mMainHandler.sendEmptyMessage(
+ WifiTracker.MainHandler.MSG_CONNECTED_CHANGED);
+ tracker.mMainHandler.sendEmptyMessage(
+ WifiTracker.MainHandler.MSG_WIFI_STATE_CHANGED);
+
+ tracker.stopTracking();
+
+ verify(mockWifiListener, atMost(1)).onAccessPointsChanged();
+ verify(mockWifiListener, atMost(1)).onConnectedChanged();
+ verify(mockWifiListener, atMost(1)).onWifiStateChanged(anyInt());
+
+ lock.countDown();
+ assertTrue("Latch timed out", latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
+
+ assertThat(tracker.mMainHandler.hasMessages(
+ WifiTracker.MainHandler.MSG_ACCESS_POINT_CHANGED)).isFalse();
+ assertThat(tracker.mMainHandler.hasMessages(
+ WifiTracker.MainHandler.MSG_CONNECTED_CHANGED)).isFalse();
+ assertThat(tracker.mMainHandler.hasMessages(
+ WifiTracker.MainHandler.MSG_WIFI_STATE_CHANGED)).isFalse();
+
+ verifyNoMoreInteractions(mockWifiListener);
+ }
} \ No newline at end of file
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index a8629f84025b..e9dadc5fbf10 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -94,49 +94,9 @@
<!-- Default for Settings.Secure.SYNC_PARENT_SOUNDS -->
<bool name="def_sync_parent_sounds">true</bool>
- <!-- Default for Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION -->
- <bool name="def_accessibility_script_injection">false</bool>
-
<!-- Default for Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD -->
<bool name="def_accessibility_speak_password">true</bool>
- <!-- Default for Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS -->
- <string name="def_accessibility_web_content_key_bindings" translatable="false">
- <!-- DPAD/Trackball UP - traverse previous on current axis and send an event. -->
- 0x13=0x01000100;
- <!-- DPAD/Trackball DOWN - traverse next on current axis and send an event. -->
- 0x14=0x01010100;
- <!-- DPAD/Trackball LEFT - traverse previous on the character navigation axis and send event. -->
- 0x15=0x02000001;
- <!-- DPAD/Trackball RIGHT - traverse next on the character navigation axis end send event. -->
- 0x16=0x02010001;
- <!-- Alt+DPAD/Trackball UP - go to the top of the document. -->
- 0x200000013=0x02000601;
- <!-- Alt+DPAD/Trackball DOWN - go to the bottom of the document. -->
- 0x200000014=0x02010601;
- <!-- Alt+DPAD/Trackball LEFT - transition from an axis to another and sends an event.-->
- <!-- Axis transitions: 2 -> 1; -->
- 0x200000015=0x03020101;
- <!-- Alt+DPAD/Trackball RIGHT - transition from an axis to another and sends an event. -->
- <!-- Axis transitions: 1 -> 2; -->
- 0x200000016=0x03010201;
- <!-- Alt+g - go to the previous heading and send an event. -->
- 0x200000023=0x02000301;
- <!-- Alt+h - go to the next heading and send an event. -->
- 0x200000024=0x02010301;
- <!-- Alt+COMMA - transition to sentence navigation axis and send an event. -->
- <!-- Axis transitions: 7 -> 2; -->
- 0x200000037=0x03070201;
- <!-- Alt+PERIOD - transition to default web view behavior axis and send an event. -->
- <!-- Axis transitions: 0 -> 7; 1 - > 7; 2 -> 7; -->
- 0x200000038=0x03000701:0x03010701:0x03020701;
- </string>
-
- <!-- Default for Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION_URL -->
- <string name="def_accessibility_screen_reader_url" translatable="false">
- https://ssl.gstatic.com/accessibility/javascript/android/AndroidVox_v1.js
- </string>
-
<!-- Default for Settings.Secure.TOUCH_EXPLORATION_ENABLED -->
<bool name="def_touch_exploration_enabled">false</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index a645a5683a7b..b777d412ca6c 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -820,27 +820,8 @@ class DatabaseHelper extends SQLiteOpenHelper {
if (upgradeVersion == 57) {
/*
- * New settings to:
- * 1. Enable injection of accessibility scripts in WebViews.
- * 2. Define the key bindings for traversing web content in WebViews.
+ * No longer initializing deleted setting ACCESSIBILITY_SCRIPT_INJECTION.
*/
- db.beginTransaction();
- SQLiteStatement stmt = null;
- try {
- stmt = db.compileStatement("INSERT INTO secure(name,value)"
- + " VALUES(?,?);");
- loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
- R.bool.def_accessibility_script_injection);
- stmt.close();
- stmt = db.compileStatement("INSERT INTO secure(name,value)"
- + " VALUES(?,?);");
- loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
- R.string.def_accessibility_web_content_key_bindings);
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- if (stmt != null) stmt.close();
- }
upgradeVersion = 58;
}
@@ -1085,18 +1066,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
}
if (upgradeVersion == 74) {
- // URL from which WebView loads a JavaScript based screen-reader.
- db.beginTransaction();
- SQLiteStatement stmt = null;
- try {
- stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
- loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
- R.string.def_accessibility_screen_reader_url);
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- if (stmt != null) stmt.close();
- }
+ // No longer using URL from which WebView loads a JavaScript based screen-reader.
upgradeVersion = 75;
}
if (upgradeVersion == 75) {
@@ -1147,19 +1117,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
}
if (upgradeVersion == 78) {
- // The JavaScript based screen-reader URL changes in JellyBean.
- db.beginTransaction();
- SQLiteStatement stmt = null;
- try {
- stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
- + " VALUES(?,?);");
- loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
- R.string.def_accessibility_screen_reader_url);
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- if (stmt != null) stmt.close();
- }
+ // ACCESSIBILITY_SCREEN_READER_URL has been removed
upgradeVersion = 79;
}
@@ -2443,12 +2401,6 @@ class DatabaseHelper extends SQLiteOpenHelper {
loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
R.bool.def_mount_ums_notify_enabled);
- loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
- R.bool.def_accessibility_script_injection);
-
- loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
- R.string.def_accessibility_web_content_key_bindings);
-
loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
R.integer.def_long_press_timeout_millis);
@@ -2458,9 +2410,6 @@ class DatabaseHelper extends SQLiteOpenHelper {
loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
R.bool.def_accessibility_speak_password);
- loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
- R.string.def_accessibility_screen_reader_url);
-
if (SystemProperties.getBoolean("ro.lockscreen.disable.default", false) == true) {
loadSetting(stmt, Settings.System.LOCKSCREEN_DISABLED, "1");
} else {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 1c517733eb2c..d1d59b2fb24f 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -238,7 +238,6 @@ public class SettingsHelper {
// these features working after the restore.
switch (name) {
case Settings.Secure.ACCESSIBILITY_ENABLED:
- case Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION:
case Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD:
case Settings.Secure.TOUCH_EXPLORATION_ENABLED:
case Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED:
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index bac694f535a7..885573e86ac6 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -1057,15 +1057,6 @@ class SettingsProtoDumpUtil {
Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED,
SecureSettingsProto.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED);
dumpSetting(s, p,
- Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
- SecureSettingsProto.ACCESSIBILITY_SCRIPT_INJECTION);
- dumpSetting(s, p,
- Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
- SecureSettingsProto.ACCESSIBILITY_SCREEN_READER_URL);
- dumpSetting(s, p,
- Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
- SecureSettingsProto.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS);
- dumpSetting(s, p,
Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
SecureSettingsProto.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
dumpSetting(s, p,
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index d37e6a0ebd78..415bf9a0470b 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -172,6 +172,9 @@ public class BugreportProgressService extends Service {
private static final int CAPPED_PROGRESS = 9900;
private static final int CAPPED_MAX = 10000;
+ /** Show the progress log every this percent. */
+ private static final int LOG_PROGRESS_STEP = 10;
+
/**
* Delay before a screenshot is taken.
* <p>
@@ -226,6 +229,8 @@ public class BugreportProgressService extends Service {
private boolean mIsWatch;
+ private int mLastProgressPercent;
+
@Override
public void onCreate() {
mContext = getApplicationContext();
@@ -512,8 +517,15 @@ public class BugreportProgressService extends Service {
builder.setContentIntent(infoPendingIntent)
.setActions(infoAction, screenshotAction, cancelAction);
}
+ // Show a debug log, every LOG_PROGRESS_STEP percent.
+ final int progress = (info.progress * 100) / info.max;
+
+ if ((info.progress == 0) || (info.progress >= 100) ||
+ ((progress / LOG_PROGRESS_STEP) != (mLastProgressPercent / LOG_PROGRESS_STEP))) {
+ Log.d(TAG, "Progress #" + info.id + ": " + percentageText);
+ }
+ mLastProgressPercent = progress;
- Log.d(TAG, "Sending 'Progress' notification for id " + info.id + ": " + percentageText);
sendForegroundabledNotification(info.id, builder.build());
}
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 55f32d7d8b43..bf39bc4b96ea 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -22,9 +22,6 @@
android:sharedUserId="android.uid.systemui"
coreApp="true">
- <protected-broadcast android:name="com.android.systemui.action.PLUGIN_CHANGED" />
-
-
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 578f898859cf..6b4a2b20cad0 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiele data is af"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-verbinding."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Geen SIM-kaart nie."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Diensverskaffernetwerk verander tans."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Maak batterybesonderhede oop"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Werkprofiel is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Persoonlike profiel is aan <xliff:g id="VPN_APP">%1$s</xliff:g> gekoppel"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Toestel is aan <xliff:g id="VPN_APP">%1$s</xliff:g> gekoppel"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Toestelbestuur"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profielmonitering"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netwerkmonitering"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Deaktiveer VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Ontkoppel VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Bekyk beleide"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Jou toestel word deur <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> bestuur.\n\nJou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur.\n\nVir meer inligting, kontak jou administrateur."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Jou toestel word deur jou organisasie bestuur.\n\nJou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur.\n\nVir meer inligting, kontak jou administrateur."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Jou organisasie het \'n sertifikaatoutoriteit op hierdie toestel geïnstalleer. Jou veilige netwerkverkeer kan gemonitor of gewysig word."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Jou organisasie het \'n sertifikaatoutoriteit in jou werkprofiel geïnstalleer. Jou veilige netwerkverkeer kan gemonitor of gewysig word."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"\'n Sertifikaatoutoriteit is op hierdie toestel geïnstalleer. Jou veilige netwerkverkeer kan gemonitor of gewysig word."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Jou administrateur het netwerkloginskrywing aangeskakel, wat verkeer op jou toestel monitor."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Jy is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Jy is gekoppel aan <xliff:g id="VPN_APP_0">%1$s</xliff:g> en <xliff:g id="VPN_APP_1">%2$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Jou werkprofiel is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Jy persoonlike profiel is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Jou toestel word bestuur deur <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-kennisgewing: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Program sal dalk nie met verdeelde skerm werk nie."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Program steun nie verdeelde skerm nie."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Maak instellings oop."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Maak kitsinstellings oop."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Maak kitsinstellings toe."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Kitsprogramme"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Kitsprogramme hoef nie geïnstalleer te word nie."</string>
<string name="app_info" msgid="6856026610594615344">"Programinligting"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Gaan na web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiele data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi is af"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is af"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 90848686bb15..0db214eaaffd 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ብሉቱዝ ማያያዝ።"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"የአውሮፕላን ሁነታ።"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"ምንም SIM ካርድ የለም።"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"የአገልግሎት አቅራቢ አውታረ መረብን በመቀየር ላይ።"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"የባትሪ ዝርዝሮችን ክፈት"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"የሥራ መገለጫ ወደ <xliff:g id="VPN_APP">%1$s</xliff:g> ተገናኝቷል"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"የግል መገለጫ ወደ <xliff:g id="VPN_APP">%1$s</xliff:g> ተገናኝቷል"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"ይህ መሣሪያ ወደ <xliff:g id="VPN_APP">%1$s</xliff:g> ተገናኝቷል"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"የመሣሪያ አስተዳደር"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"መገለጫን መከታተል"</string>
<string name="monitoring_title" msgid="169206259253048106">"የአውታረ መረብ ክትትል"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN አሰናክል"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"የVPN ግንኙነት አቋርጥ"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"መመሪያዎችን ይመልከቱ"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"የእርስዎ መሣሪያ በ<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> የሚተዳደር ነው።\n\nየእርስዎ አስተዳዳሪ ከመሣሪያዎ ጋር የተጎዳኙ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን እና የመሣሪያዎን የአካባቢ መረጃ መከታተል እና ማቀናበር ይችላሉ።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"የእርስዎ መሣሪያ በድርጅትዎ የሚተዳደር ነው።\n\nየእርስዎ አስተዳዳሪ ከመሣሪያዎ ጋር የተጎዳኙ ቅንብሮችን፣ የኮርፖሬት መዳረሻንና ውሂብን እና የመሣሪያዎን የአካባቢ መረጃ መከታተል እና ማቀናበር ይችላሉ።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"የእርስዎ ድርጅት የእውቅና ማረጋገጫ ሰጪ ባለሥልጣን በዚህ መሣሪያ ላይ ጭኗል። የእርስዎ ደኅንነቱ የተጠበቀ አውታረ መረብ ትራፊክ ክትትል ሊደረግበት እና ሊሻሻል ይችላል።"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"የእርስዎ ድርጅት የእውቅና ማረጋገጫ ሰጪ ባለሥልጣን በእርስዎ የሥራ መገለጫ ላይ ጭኗል። የእርስዎ ደኅንነቱ የተጠበቀ አውታረ መረብ ትራፊክ ክትትል ሊደረግበት እና ሊሻሻል ይችላል።"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"የእውቅና ማረጋገጫ ሰጪ ባለሥልጣን በዚህ መሣሪያ ላይ ተጭኗል። የእርስዎ ደኅንነቱ የተጠበቀ አውታረ መረብ ትራፊክ ክትትል ሊደረግበት እና ሊሻሻል ይችላል።"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"የእርስዎ አስተዳዳሪ የአውታረ መረብ ምዝግብ ማስታወሻ መያዝን አብርተዋል፣ ይህም በመሣሪያዎ ላይ ያለውን ትራፊክ ይከታተላል።"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችሉት <xliff:g id="VPN_APP_0">%1$s</xliff:g> እና <xliff:g id="VPN_APP_1">%2$s</xliff:g> ጋር ተገናኝተዋል።"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"የእርስዎ የሥራ መገለጫ የእርስዎን ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝቷል።"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"የእርስዎ የግል መገለጫ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝቷል።"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"የእርስዎ መሣሪያ በ<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ነው የሚቀናበረው።"</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"የ<xliff:g id="ID_1">%1$s</xliff:g> ማሳወቂያ፦ <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"መተግበሪያ ከተከፈለ ማያ ገጽ ጋር ላይሠራ ይችላል"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"መተግበሪያው የተከፈለ ማያ ገጽን አይደግፍም።"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ቅንብሮችን ክፈት።"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ፈጣን ቅንብሮችን ክፈት።"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ፈጣን ቅንብሮችን ዝጋ።"</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"የቅጽበት መተግበሪያዎች"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ቅጽበታዊ መተግበሪያዎች መጫን አያስፈልጋቸውም።"</string>
<string name="app_info" msgid="6856026610594615344">"የመተግበሪያ መረጃ"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ወደ ድር ሂድ"</string>
<string name="mobile_data" msgid="7094582042819250762">"የተንቀሳቃሽ ስልክ ውሂብ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ጠፍቷል"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ብሉቱዝ ጠፍቷል"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 096b1cbbd684..3a1870024580 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"إيقاف بيانات الجوال"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"وضع الطائرة."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"‏ليس هناك شريحة SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"جارٍ تغيير شبكة مشغِّل شبكة الجوّال."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"فتح تفاصيل البطارية"</string>
@@ -435,8 +437,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"تم ربط الملف الشخصي للعمل بـ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"تم ربط الملف الشخصي بـ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"تم ربط الجهاز بـ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"إدارة الأجهزة"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"مراقبة الملف الشخصي"</string>
<string name="monitoring_title" msgid="169206259253048106">"مراقبة الشبكات"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"‏شبكة ظاهرية خاصة (VPN)"</string>
@@ -445,18 +446,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"تعطيل الشبكة الظاهرية الخاصة"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"‏قطع الاتصال بشبكة VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"عرض السياسات"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"تتم إدارة جهازك بواسطة <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة الإعدادات والدخول إلى المؤسسة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع الجغرافي للجهاز.\n\nللحصول على المزيد من المعلومات، اتصل بالمشرف."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"تتم إدارة جهازك بواسطة المؤسسة.\n\nيمكن للمشرف مراقبة وإدارة الإعدادات والدخول إلى المؤسسة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع الجغرافي للجهاز.\n\nللحصول على المزيد من المعلومات، اتصل بالمشرف."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ثبّتت مؤسستك مرجعًا مصدّقًا على هذا الجهاز. قد تتم مراقبة حركة بيانات شبكتك الآمنة أو تعديلها."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ثبّتت مؤسستك مرجعًا مصدّقًا في ملفك الشخصي للعمل. قد تتم مراقبة حركة بيانات شبكتك الآمنة أو تعديلها."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"تم تثبيت مرجع مصدّق على هذا الجهاز. قد تتم مراقبة حركة بيانات شبكتك الآمنة أو تعديلها."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"شغَّل المشرف ميزة تسجيل بيانات الشبكة، والتي يتم من خلالها مراقبة حركة البيانات على جهازك."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"لقد اتصلت بتطبيق <xliff:g id="VPN_APP">%1$s</xliff:g>، الذي يمكن أن يراقب نشاط شبكتك، بما في ذلك رسائل البريد الإلكتروني والتطبيقات والمواقع الإلكترونية."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"لقد اتصلت بتطبيق <xliff:g id="VPN_APP_0">%1$s</xliff:g> و<xliff:g id="VPN_APP_1">%2$s</xliff:g> اللذين يمكنهما مراقبة نشاط شبكتك، بما في ذلك رسائل البريد الإلكتروني والتطبيقات والمواقع الإلكترونية."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"تم ربط الملف الشخصي للعمل بـ <xliff:g id="VPN_APP">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"تم ربط ملفك الشخصي بـ <xliff:g id="VPN_APP">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطة شبكتك، بما في ذلك رسائل البريد الإلكتروني والتطبيقات والمواقع الإلكترونية."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"تتم إدارة جهازك بواسطة <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -719,6 +716,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"إشعار <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"يمكن ألا يعمل التطبيق مع وضع تقسيم الشاشة."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"التطبيق لا يتيح تقسيم الشاشة."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"فتح الإعدادات."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"فتح الإعدادات السريعة."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"إغلاق الإعدادات السريعة."</string>
@@ -768,8 +769,7 @@
<string name="instant_apps" msgid="6647570248119804907">"التطبيقات الفورية"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"لا تتطلب التطبيقات الفورية إجراء التثبيت."</string>
<string name="app_info" msgid="6856026610594615344">"معلومات عن التطبيق"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"الانتقال إلى الويب"</string>
<string name="mobile_data" msgid="7094582042819250762">"بيانات الجوّال"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"‏تم إيقاف شبكة Wi-Fi"</string>
<string name="bt_is_off" msgid="2640685272289706392">"تم إيقاف البلوتوث."</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 940b009ba94c..43c7f772d440 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobil Data Deaktivdir"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tezering."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçuş rejimi"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM kart yoxdur."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Carrier şəbəkə dəyişir."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Batareya detallarını açın"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"İş profili <xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşuludur"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Şəxsi profil <xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşuludur"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Cihaz <xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşuludur"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Cihaz idarəetməsi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profil izlənməsi"</string>
<string name="monitoring_title" msgid="169206259253048106">"Şəbəkə monitorinqi"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN (Virtual Şəxsi Şəbəkələr)"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN-i deaktiv edin"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-i bağlantıdan ayırın"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Siyasətlərə Baxın"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Cihaz <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> tərəfindən idarə edilir.\n\nAdmin cihaz və cihaz məkan məlumatı ilə əlaqəli ayarlara, korporativ girişə, tətbiqə və dataya nəzarət edə və idarə edə bilər.\n\nƏtraflı məlumat üçün admin ilə əlaqə saxlayın."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Cihaz təşkilatınız tərəfindən idarə edilir.\n\nAdmin cihaz və cihaz məkan məlumatı ilə əlaqəli ayarlara, korporativ girişə, tətbiqə və dataya nəzarət edə və idarə edə bilər.\n\nƏtraflı məlumat üçün admin ilə əlaqə saxlayın."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Təşkilat bu cihazda sertifikat səlahiyyəti quraşdırdı. Təhlükəsiz şəbəkə ötürülməsinə nəzarət edilə və ya dəyişdirilə bilər."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Təşkilat iş profilində sertifikat səlahiyyəti quraşdırdı. Təhlükəsiz şəbəkə ötürülməsinə nəzarət edilə və ya dəyişdirilə bilər."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Bu cihazda sertifikat səlahiyyəti quraşdırıldı. Təhlükəsiz şəbəkə ötürülməsinə nəzarət edilə və ya dəyişdirilə bilər."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Admin cihazda şəbəkə ötürülməsinə nəzarət edən şəbəkə qeydlərini aktiv etdi."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"E-poçt, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinə nəzarət edən <xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşulusunuz."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"E-poçt, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinə nəzarət edən <xliff:g id="VPN_APP_0">%1$s</xliff:g> və <xliff:g id="VPN_APP_1">%2$s</xliff:g> tətbiqlərinə qoşulusunuz."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"İş profili e-poçt, tətbiq və veb saytlar da daxil olmaqla şəbəkə fəaliyyətinə nəzarət edən <xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşuludur."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Şəxsi profil e-poçt, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinə nəzarət edən <xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşuludur."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Cihaz <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tərəfindən idarə olunur."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> bildiriş: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Tətbiq bölünmüş ekran ilə işləməyə bilər."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Tətbiq ekran bölünməsini dəstəkləmir."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Ayarları açın."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Cəld ayarları açın."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Cəld ayarları bağlayın."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Ani Tətbiqlər"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Ani tətbiqlər quraşdırma tələb etmir."</string>
<string name="app_info" msgid="6856026610594615344">"Tətbiq məlumatı"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Vebə keçin"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi deaktivdir"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth deaktivdir"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index f1e7e63ba0b1..92a964d8c95e 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -158,6 +158,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilni podaci su isključeni"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth privezivanje."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim rada u avionu."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nema SIM kartice."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Promena mreže mobilnog operatera."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otvori detalje o bateriji"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profil za Work je povezan sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Lični profil je povezan sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Uređaj je povezan sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Upravljanje uređajima"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadgledanje profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadgledanje mreže"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Onemogući VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu sa VPN-om"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Prikaži smernice"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Uređajem upravlja <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima.\n\nViše informacija potražite od administratora."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Uređajem upravlja organizacija.\n\nAdministrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima.\n\nViše informacija potražite od administratora."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organizacija je na ovom uređaju instalirala autoritet za izdavanje sertifikata. Bezbedni mrežni saobraćaj može da se prati ili menja."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organizacija je na profilu za Work instalirala autoritet za izdavanje sertifikata. Bezbedni mrežni saobraćaj može da se prati ili menja."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Na ovom uređaju je instaliran autoritet za izdavanje sertifikata. Bezbedni mrežni saobraćaj može da se prati ili menja."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administrator je uključio evidentiranje mreže, koje prati saobraćaj na uređaju."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Povezani ste sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Povezani ste sa aplikacijama <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>, koje mogu da nadgledaju aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Profil za Work je povezan sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Lični profil je povezan sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Uređajem upravlja <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -707,6 +704,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Obaveštenja za <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikacija možda neće funkcionisati sa podeljenim ekranom."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikacija ne podržava podeljeni ekran."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Otvori Podešavanja."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Otvori Brza podešavanja."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zatvori Brza podešavanja."</string>
@@ -756,8 +757,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant aplikacije"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant aplikacije ne zahtevaju instalaciju."</string>
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Idi na veb"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi je isključen"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je isključen"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 51c8ea6a4a28..9c1c657a79e8 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -159,6 +159,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Мабільная перадача даных выключана"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Сувязь па Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Рэжым палёту."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Няма SIM-карты."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Змяненне аператара сеткі."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Паказаць падрабязную інфармацыю пра акумулятар"</string>
@@ -433,8 +435,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Працоўны профіль падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Асабісты профіль падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Прылада падключана да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Кіраванне прыладай"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Маніторынг профіляў"</string>
<string name="monitoring_title" msgid="169206259253048106">"Маніторынг сеткі"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +444,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Адключыць VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Адлучыць VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Праглядзець палітыку"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nВаш адміністратар можа сачыць і кіраваць наладамі, карпаратыўным доступам, праграмамі, данымі, звязанымі з вашай прыладай, і звесткамі пра месцазнаходжанне вашай прылады.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Ваша прылада знаходзіцца пад кіраваннем вашай арганізацыі.\n\nУ вашага адміністратара ёсць магчымасць маніторынгу і адміністравання налад, карпаратыўнага доступу, праграм, даных, звязаных з гэтай прыладай, і адпаведных геаданых.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Ваша арганізацыя ўсталявала на гэтай прыладзе цэнтр сертыфікацыі. Ваш абаронены сеткавы трафік могуць праглядваць ці змяняць."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Ваша арганізацыя ўсталявала ў вашым працоўным профілі цэнтр сертыфікацыі. Ваш абаронены сеткавы трафік могуць праглядваць ці змяняць."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"На гэтай прыладзе ўсталяваны цэнтр сертыфікацыі. Ваш абаронены сеткавы трафік могуць праглядваць ці змяняць."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Ваш адміністратар уключыў вядзенне журнала сеткі, з дапамогай якога адсочваецца трафік на вашай прыладзе."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Вы падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Вы падключаны да праграм <xliff:g id="VPN_APP_0">%1$s</xliff:g> і <xliff:g id="VPN_APP_1">%2$s</xliff:g>, якія могуць сачыць за вашай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Ваш працоўны профіль падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Ваш асабісты профіль падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -713,6 +710,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Апавяшчэнне <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Праграма можа не працаваць у рэжыме дзялення экрана."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Праграма не падтрымлівае функцыю дзялення экрана."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Адкрыць налады."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Адкрыць хуткія налады."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Закрыць хуткія налады."</string>
@@ -762,8 +763,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Імгненныя праграмы"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Імгненныя праграмы не патрабуюць усталёўкі."</string>
<string name="app_info" msgid="6856026610594615344">"Інфармацыя пра праграму"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Перайсці ў інтэрнэт"</string>
<string name="mobile_data" msgid="7094582042819250762">"Маб. перадача даных"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi выключаны"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth выключаны"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index f3c5651ab796..96fec7b838d8 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Няма SIM карта."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Мобилни данни"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Мобилните данни са включени"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобилните данни са изключени"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Тетъринг през Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Самолетен режим."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Няма SIM карта."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Промяна на мрежата на оператора."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Отваряне на подробностите за батерията"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Зарежда се"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Данните от 2G – 3G са поставени на пауза"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Данните от 4G са поставени на пауза"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Мобилните данни са поставени на пауза"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Данните са поставени на пауза"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Достигнахте зададеното от вас ограничение за данните. Вече не използвате мобилната мрежа.\n\nАко възобновите връзката с нея, може да бъдете таксувани за пренос на данни."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Възобновяване"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Няма връзка с интернет"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: Има връзка"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка за достъп"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Известия"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Фенерче"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Мобилни данни"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Пренос на данни"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Оставащи данни"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Над ограничението"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Служебният потребителски профил е свързан с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Личният потребителски профил е свързан с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Устройството е свързано с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Управление на устройствата"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Наблюдаване на потр. профил"</string>
<string name="monitoring_title" msgid="169206259253048106">"Наблюдение на мрежата"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Деактивиране на VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Прекратяване на връзката с VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Преглед на правилата"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Устройството ви се управлява от <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията, свързаните с устройството данни и информацията за местоположението му.\n\nЗа повече информация се свържете с администратора си."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Устройството ви се управлява от организацията ви.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията, свързаните с устройството данни и информацията за местоположението му.\n\nЗа повече информация се свържете с администратора си."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Организацията ви е инсталирала сертифициращ орган на това устройство. Трафикът в защитената ви мрежа може да бъде наблюдаван или променян."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Организацията ви е инсталирала сертифициращ орган в служебния ви потребителски профил. Трафикът в защитената ви мрежа може да бъде наблюдаван или променян."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"На това устройство е инсталиран сертифициращ орган. Трафикът в защитената ви мрежа може да бъде наблюдаван или променян."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Администраторът ви е включил функцията за регистриране на мрежовата активност, която следи трафика на устройството ви."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Установена е връзка с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Установена е връзка с приложенията <xliff:g id="VPN_APP_0">%1$s</xliff:g> и <xliff:g id="VPN_APP_1">%2$s</xliff:g>, които могат да наблюдават активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Служебният ви потребителски профил е свързан с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Личният ви потребителски профил е свързан с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Устройството ви се управлява от <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -569,12 +560,9 @@
<item quantity="other">„<xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>“, „<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>“ и още <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="one">„<xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>“, „<xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>“ и още <xliff:g id="NUMBER_2">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Контролите за известията за <xliff:g id="APP_NAME">%1$s</xliff:g> са оттворени"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Контролите за известията за <xliff:g id="APP_NAME">%1$s</xliff:g> са затворени"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Разрешаване на известия от този канал"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Всички категории"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Още настройки"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Персонализиране: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Известие от <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Приложението може да не работи в режим на разделен екран."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Приложението не поддържа разделен екран."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Отваряне на настройките."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Отваряне на бързите настройки."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Затваряне на бързите настройки."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Меню за режима „Картина в картина“"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> е в режима „Картина в картина“"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Ако не искате <xliff:g id="NAME">%s</xliff:g> да използва тази функция, докоснете, за да отворите настройките, и я изключете."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Пускане"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Поставяне на пауза"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Към следващия елемент"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Към предишния елемент"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Тел. се изкл. поради загряване"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Телефонът ви вече работи нормално"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Телефонът ви бе твърде горещ, затова се изключи с цел охлаждане. Вече работи нормално.\n\nТелефонът ви може да стане твърде горещ, ако:\n • използвате приложения, които ползват голям обем ресурси (като например игри, видеосъдържание или приложения за навигация);\n • изтегляте или качвате големи файлове;\n • използвате устройството си при високи температури."</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Мигновени приложения"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"За мигновените приложения не се изисква инсталиране."</string>
<string name="app_info" msgid="6856026610594615344">"Информация за приложението"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Към мрежата"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилни данни"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Функцията за Wi‑Fi е изключена"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Функцията за Bluetooth е изключена"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 853196fb8a7a..a6f49aecce20 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"ওয়াই-ফাই"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"কোনো সিম নেই৷"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"মোবাইল ডেটা"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"মোবাইল ডেটা চালু আছে"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"মোবাইল ডেটা বন্ধ আছে"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ব্লুটুথ টিথারিং৷"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"বিমান মোড৷"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"কোনো সিম কার্ড নেই।"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"পরিষেবা প্রদানকারীর নেটওয়ার্ক পরিবর্তিত হচ্ছে।"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ব্যাটারির বিশদ বিবরণ খুলুন"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"চার্জ হচ্ছে"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ডেটা বিরতি দেওয়া হয়েছে"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ডেটা বিরতি দেওয়া হয়েছে"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"মোবাইল ডেটা সাময়িক ভাবে বন্ধ করা হয়েছে"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ডেট বিরতি দেওয়া হয়েছে"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"আপনার সেট করা ডেটার সীমা ফুরিয়ে গেছে। আপনি এখন আর মোবাইল ডেটা ব্যবহার করতে পারবেন না।\n\nযদি আপনি আবার শুরু করেন, ডেটা ব্যবহারের জন্য মূল্য প্রযোজ্য হতে পারে।"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"পুনঃসূচনা করুন"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"কোনো ইন্টারনেট সংযোগ নেই"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ওয়াই-ফাই সংযুক্ত হয়েছে"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"হটস্পট"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"বিজ্ঞপ্তিগুলি"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ফ্ল্যাশলাইট"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"মোবাইল ডেটা"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ডেটার ব্যবহার"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"অবশিষ্ট ডেটা"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"সীমার উর্ধ্বে"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"কর্মস্থলের প্রোফাইল <xliff:g id="VPN_APP">%1$s</xliff:g> এর সাথে সংযুক্ত রয়েছে"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"ব্যক্তিগত প্রোফাইল <xliff:g id="VPN_APP">%1$s</xliff:g> এর সাথে সংযুক্ত রয়েছে"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"ডিভাইসটি <xliff:g id="VPN_APP">%1$s</xliff:g> এর সাথে সংযুক্ত রয়েছে"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ডিভাইসের পরিচালনা"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"প্রোফাইল দেখরেখ করা"</string>
<string name="monitoring_title" msgid="169206259253048106">"নেটওয়ার্ক নিরীক্ষণ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN অক্ষম করুন"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN এর সংযোগ বিচ্ছিন্ন করুন"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"নীতিগুলি দেখুন"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"আপনার ডিভাইসটি <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> এর দ্বারা পরিচালিত হয়।\n\nআপনার প্রশাসক এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ, ডিভাইসের সাথে সম্পর্কিত ডেটা এবং ডিভাইসের অবস্থান তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন।\n\nআরও তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন।"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"আপনার ডিভাইসটি আপনার প্রতিষ্ঠানের দ্বারা পরিচালিত হয়।\n\nআপনার প্রশাসক এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ, ডিভাইসের সাথে সম্পর্কিত ডেটা এবং ডিভাইসের অবস্থান তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন।\n\nআরও তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন।"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"আপনার প্রতিষ্ঠান আপনার কর্মস্থলের প্রোফাইলে একটি শংসাপত্র কর্তৃপক্ষ ইনস্টল করেছে।আপনার সুরক্ষিত নেটওয়ার্ক ট্রাফিক নিরীক্ষণ বা পরিবর্তন করা হতে পারে।"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"আপনার প্রতিষ্ঠান আপনার কর্মস্থলের প্রোফাইলে একটি শংসাপত্র কর্তৃপক্ষ ইনস্টল করেছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"এই ডিভাইসে একটি শংসাপত্র কর্তৃপক্ষ ইনস্টল করা আছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"আপনার প্রশাসক নেটওয়ার্ক লগিং চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিকের উপরে নজর রাখে।"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"আপনি <xliff:g id="VPN_APP">%1$s</xliff:g> এ সংযুক্ত রয়েছেন, যা আপনার ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপের উপর নজর রাখতে পারে।"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"আপনি <xliff:g id="VPN_APP_0">%1$s</xliff:g> এবং <xliff:g id="VPN_APP_1">%2$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন, যেগুলি আপনার ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপের উপর নজর রাখতে পারে।"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"আপনার কর্মস্থলের প্রোফাইল <xliff:g id="VPN_APP">%1$s</xliff:g> এর সাথে সংযুক্ত রয়েছে, যেটি ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপে নজর রাখতে পারে।"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"আপনার ব্যক্তিগত প্রোফাইল <xliff:g id="VPN_APP">%1$s</xliff:g> এর সাথে সংযুক্ত রয়েছে, যেটি ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপে নজর রাখতে পারে৷"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"আপনার ডিভাইসটি <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> এর দ্বারা পরিচালিত৷"</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, এবং আরো <xliff:g id="NUMBER_5">%3$d</xliff:g>টি</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, এবং আরো <xliff:g id="NUMBER_5">%3$d</xliff:g>টি</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> খোলা থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> বন্ধ থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"এই চ্যানেল থেকে বিজ্ঞপ্তি আসতে দেয়"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"সকল বিভাগ"</string>
<string name="notification_more_settings" msgid="816306283396553571">"আরো সেটিংস"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"কাস্টমাইজ করুন: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> বিজ্ঞপ্তি: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"অ্যাপ্লিকেশানটি বিভক্ত স্ক্রীনে কাজ নাও করতে পারে৷"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"অ্যাপ্লিকেশান বিভক্ত-স্ক্রীন সমর্থন করে না৷"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"সেটিংস খুলুন।"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"দ্রুত সেটিংস খুলুন৷"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"দ্রুত সেটিংস বন্ধ করুন৷"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"পিকচার ইন পিকচার মেনু"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"ছবির-মধ্যে-ছবি তে <xliff:g id="NAME">%s</xliff:g> আছেন"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> কে এই বৈশিষ্ট্যটি ব্যবহার করতে দিতে না চাইলে ট্যাপ করে সেটিংসে গিয়ে সেটি বন্ধ করে দিন।"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"চালান"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"বিরাম দিন"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"এগিয়ে যাওয়ার জন্য এড়িয়ে যান"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"পিছনে যাওয়ার জন্য এড়িয়ে যান"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"আপনার ফোন গরম হওয়ার জন্য বন্ধ হয়ে গেছে"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"আপনার ফোন এখন ঠিক-ঠাক চলছে"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"আপনার ফোন খুব বেশি গরম হয়েছিল বলে ঠান্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ফোন ঠিক-ঠাক ভাবে চলছে না।\n\nআপনার ফোন খুব বেশি গরম হয়ে যাবে যদি আপনি:\n •এমন অ্যাপ ব্যবহার করলে যেটি আপনার ডিভাইসের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n • বড় ফাইল ডাউনলোড বা আপলোড করলে\n • বেশি তাপমাত্রায় আপনার ফোন ব্যবহার করলে"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ঝটপট অ্যাপ"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ঝটপট অ্যাপ ইনস্টল করার প্রয়োজন হয় না।"</string>
<string name="app_info" msgid="6856026610594615344">"অ্যাপ্লিকেশানের তথ্য"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ওয়েবে যান"</string>
<string name="mobile_data" msgid="7094582042819250762">"মোবাইল ডেটা"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"ওয়াই ফাই বন্ধ আছে"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ব্লুটুথ বন্ধ আছে"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 01e2006d91fa..b5b734084bd4 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -158,6 +158,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilni podaci su isključeni"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Dijeljenje Bluetooth veze."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u avionu."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nema SIM kartice."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Promjena mreže operatera."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otvori detalje o potrošnji baterije"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Radni profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Lični profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Uređaj je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Upravljanje uređajem"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Praćenje profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Praćenje mreže"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN mreža"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Isključi VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini VPN vezu"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Prikaži pravila"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Vašim uređajem upravlja organizacija <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nVaš administrator može nadgledati i upravljati vašim postavkama, korporativnom pristupu, aplikacijama, podacima koji su povezani s vašim uređajem i informacijama o lokaciji vašeg uređaja.\n\nZa više informacija, obratite se svom administratoru."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Vašim uređajem upravlja vaša organizacija.\n\nVaš administrator može nadgledati i upravljati vašim postavkama, korporativnom pristupu, aplikacijama, podacima koji su povezani s vašim uređajem i informacijama o lokaciji vašeg uređaja.\n\nZa više informacija, obratite se svom administratoru."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Vaša organizacija je instalirala CA certifikat na ovom uređaju. Vaš promet preko sigurne mreže može se pratiti."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Vaša organizacija je instalirala CA certifikat na vašem radnom profilu. Vaš promet preko sigurne mreže može se pratiti."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"CA certifikat je instaliran na ovom uređaju. Vaš promet preko sigurne mreže može se pratiti."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Vaš administrator je uključio zapisivanje na mreži, čime se prati promet na vašem uređaju."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može pratiti vašu aktivnost na mreži, uključujući e-poštu i web lokacije."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Povezani ste s aplikacijama <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g> koje mogu pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web lokacije."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Vaš radni profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke i web lokacije."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Vaš lični profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke, aplikacije i web lokacije."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vašim uređajem upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -484,7 +481,7 @@
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekran je prikačen"</string>
<string name="screen_pinning_description" msgid="8909878447196419623">"Ekran ostaje prikazan ovako dok ga ne otkačite. Da ga otkačite, dodirnite i držite dugme Nazad."</string>
<string name="screen_pinning_description_accessible" msgid="426190689254018656">"Ekran ostaje prikazan ovako dok ga ne otkačite. Da ga otkačite, dodirnite i držite dugme Pregled."</string>
- <string name="screen_pinning_positive" msgid="3783985798366751226">"Jasno mi je"</string>
+ <string name="screen_pinning_positive" msgid="3783985798366751226">"Razumijem"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, hvala"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite li sakriti <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Pojavit će se sljedeći put kada opciju uključite u postavkama."</string>
@@ -533,7 +530,7 @@
<string name="tuner_warning_title" msgid="7094689930793031682">"Zabava za neke, ali ne za sve"</string>
<string name="tuner_warning" msgid="8730648121973575701">"Podešavač za korisničko sučelje sistema vam omogućava dodatne načine da podesite i prilagodite Androidovo sučelje. Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
<string name="tuner_persistent_warning" msgid="8597333795565621795">"Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
- <string name="got_it" msgid="2239653834387972602">"Jasno mi je"</string>
+ <string name="got_it" msgid="2239653834387972602">"Razumijem"</string>
<string name="tuner_toast" msgid="603429811084428439">"Čestitamo! Podešavač za korisničko sučelje sistema je dodan u Postavke"</string>
<string name="remove_from_settings" msgid="8389591916603406378">"Ukloni iz Postavki"</string>
<string name="remove_from_settings_prompt" msgid="6069085993355887748">"Želite li ukloniti Podešavač za korisničko sučelje sistema iz Postavki i prestati koristiti sve njegove funkcije?"</string>
@@ -619,7 +616,7 @@
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedavni ekrani"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazad"</string>
<string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Obavještenja"</string>
- <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Skracenice tastature"</string>
+ <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Prečice tastature"</string>
<string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Promijeni način unosa"</string>
<string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Aplikacije"</string>
<string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"Pomoć"</string>
@@ -643,7 +640,7 @@
<string name="accessibility_data_saver_on" msgid="8454111686783887148">"Ušteda podataka je uključena"</string>
<string name="accessibility_data_saver_off" msgid="8841582529453005337">"Ušteda podataka je isključena"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"Uključeno"</string>
- <string name="switch_bar_off" msgid="8803270596930432874">"Isključi"</string>
+ <string name="switch_bar_off" msgid="8803270596930432874">"Isključeno"</string>
<string name="nav_bar" msgid="1993221402773877607">"Navigaciona traka"</string>
<string name="nav_bar_layout" msgid="3664072994198772020">"Raspored"</string>
<string name="left_nav_bar_button_type" msgid="8555981238887546528">"Dodatni tip dugmeta lijevo"</string>
@@ -709,6 +706,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> obavještenje: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikacija možda neće raditi na podijeljenom ekranu"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikacija ne podržava dijeljenje ekrana."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Otvori postavke."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Otvoriti brze postavke."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zatvoriti brze postavke."</string>
@@ -758,8 +759,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant-aplikacije"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Za instant aplikacije nije potrebna instalacija"</string>
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Idite na internet"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi veza je isključena"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je isključen"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 1b89d2516ac0..05dd3319f556 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Dades mòbils desactivades"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Compartició de xarxa per Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode d\'avió."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"No hi ha cap targeta SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"S\'està canviant la xarxa de l\'operador de telefonia mòbil."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Obre la informació detallada de la bateria"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"El perfil professional està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"El perfil professional està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"El dispositiu està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gestió de dispositius"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisió del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisió de la xarxa"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Desactiva la VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconnecta la VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Consulta les polítiques"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions, les dades associades al dispositiu, inclosa la informació d\'ubicació.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"La teva organització gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions, les dades associades al dispositiu, inclosa la informació d\'ubicació.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"La teva organització ha instal·lat una autoritat de certificació en aquest dispositiu. És possible que el trànsit a la xarxa segura se supervisi o es modifiqui."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"La teva organització ha instal·lat una autoritat de certificació al teu perfil professional. És possible que el trànsit de xarxa segura se supervisi o es modifiqui."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"S\'ha instal·lat una autoritat de certificació en aquest dispositiu. És possible que el trànsit de xarxa segura se supervisi o es modifiqui."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"L\'administrador ha activat el registre de xarxa, que supervisa el trànsit del teu dispositiu."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Estàs connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Estàs connectat a <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que poden supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"El teu perfil professional està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"El teu perfil personal està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>,que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> gestiona el teu dispositiu."</string>
@@ -563,8 +560,8 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> i <xliff:g id="NUMBER_5">%3$d</xliff:g> més</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> i <xliff:g id="NUMBER_2">%3$d</xliff:g> més</item>
</plurals>
- <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"S\'han obert els controls de notificació de: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"S\'han tancat els controls de notificació de: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"S\'han obert els controls de notificació per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"S\'han tancat els controls de notificació per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Permet les notificacions d\'aquest canal"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Totes les categories"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Més opcions"</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificació de <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"És possible que l\'aplicació no funcioni amb la pantalla dividida."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"L\'aplicació no admet la pantalla dividida."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Obre la configuració."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Obre la configuració ràpida."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Tanca la configuració ràpida."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplicacions instantànies"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"No cal instal·lar les aplicacions instantànies."</string>
<string name="app_info" msgid="6856026610594615344">"Informació de l\'aplicació"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Vés al web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dades mòbils"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"La Wi-Fi està desactivada"</string>
<string name="bt_is_off" msgid="2640685272289706392">"El Bluetooth està desactivat"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index d87dedc8c130..c73655ff7c79 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -159,6 +159,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilní data jsou vypnuta"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Sdílené připojení přes Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim Letadlo."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Není vložena SIM karta"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Probíhá změna sítě operátora."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otevřít podrobnosti o baterii"</string>
@@ -433,8 +435,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Pracovní profil je připojen k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Osobní profil je připojen k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Zařízení je připojeno k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Správa zařízení"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoring profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sledování sítě"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +444,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Deaktivovat VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Odpojit VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Zobrazit zásady"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu.\n\nDalší informace vám poskytne administrátor."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Zařízení spravuje vaše organizace.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu.\n\nDalší informace vám poskytne administrátor."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organizace do tohoto zařízení nainstalovala certifikační autoritu. Zabezpečený síťový provoz může být sledován nebo upravován."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organizace do vašeho pracovního profilu nainstalovala certifikační autoritu. Zabezpečený síťový provoz může být sledován nebo upravován."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"V zařízení je nainstalována certifikační autorita. Zabezpečený síťový provoz může být sledován nebo upravován."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administrátor zapnul protokolování sítě, které monitoruje síťový provoz v zařízení."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Jste připojeni k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Jste připojeni k aplikacím <xliff:g id="VPN_APP_0">%1$s</xliff:g> a <xliff:g id="VPN_APP_1">%2$s</xliff:g>, které mohou sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Váš pracovní profil je připojen k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Váš osobní profil je připojen k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vaše zařízení je spravováno aplikací <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -713,6 +710,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Oznámení aplikace <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikace v režimu rozdělené obrazovky nemusí fungovat."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikace nepodporuje režim rozdělené obrazovky."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Otevřít nastavení."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Otevřít rychlé nastavení."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zavřít rychlé nastavení."</string>
@@ -762,8 +763,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Okamžité aplikace"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Okamžité aplikace není třeba instalovat."</string>
<string name="app_info" msgid="6856026610594615344">"Informace o aplikaci"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Přejít na web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilní data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi je vypnuta"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je vypnuto"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 774a25d3eaf5..d8f7c22af053 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Intet SIM-kort."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobildata"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobildata er aktiveret"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobildata er deaktiveret"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-netdeling."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flytilstand."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Der er ikke noget SIM-kort."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Mobilnetværket skiftes."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Åbn oplysninger om batteri"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Oplader"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G-data er sat på pause"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data er sat på pause"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobildata er sat på pause"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data er sat på pause"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Din angivne datagrænse er nået, og du bruger ikke længere mobildata.\n\nHvis du fortsætter, bliver du muligvis opkrævet betaling for dit dataforbrug."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Genoptag"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen internetforb."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi er forbundet"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Underretninger"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Lommelygte"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobildata"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Dataforbrug"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Resterende data"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Over grænsen"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Arbejdsprofilen er forbundet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Den personlige profil er forbundet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Enheden er forbundet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Administration af enheder"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilovervågning"</string>
<string name="monitoring_title" msgid="169206259253048106">"Overvågning af netværk"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Deaktiver VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Afbryd VPN-forbindelse"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Se politikker"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Din enhed administreres af <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps, data, der er knyttet til din enhed, og din enheds stedoplysninger.\n\nKontakt din administrator, hvis du vil have flere oplysninger."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Din enhed administreres af din organisation.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps, data, der er knyttet til din enhed, og din enheds stedoplysninger.\n\nKontakt din administrator, hvis du vil have flere oplysninger."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Din organisation har installeret et nøglecenter på denne enhed. Din sikre netværkstrafik kan overvåges eller ændres."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Din organisation har installeret et nøglecenter på din arbejdsprofil. Din sikre netværkstrafik kan overvåges eller ændres."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Der er installeret et nøglecenter på denne enhed. Din sikre netværkstrafik kan overvåges eller ændres."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Din administrator har aktiveret netværksregistrering, som overvåger trafik på din enhed."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Du har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. mails, apps og websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Du har forbindelse til <xliff:g id="VPN_APP_0">%1$s</xliff:g> og <xliff:g id="VPN_APP_1">%2$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. mails, apps og websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Din arbejdsprofil har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. mails, apps og websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Din personlige profil har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. mails, apps og websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Din enhed administreres af <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> og <xliff:g id="NUMBER_5">%3$d</xliff:g> anden</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> og <xliff:g id="NUMBER_5">%3$d</xliff:g> andre</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Styring af underretninger for <xliff:g id="APP_NAME">%1$s</xliff:g> blev åbnet"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Styring af underretninger for <xliff:g id="APP_NAME">%1$s</xliff:g> blev lukket"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Tillad underretninger fra denne kanal"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Alle kategorier"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Flere indstillinger"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Tilpas: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-underretning: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Appen fungerer muligvis ikke i delt skærm."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Appen understøtter ikke delt skærm."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Åbn Indstillinger."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Åbn Hurtige indstillinger."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Luk Hurtige indstillinger."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Billede i billede-menu"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> vises i billede i billede"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Hvis du ikke ønsker, at <xliff:g id="NAME">%s</xliff:g> skal benytte denne funktion, kan du åbne indstillingerne og deaktivere den."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Afspil"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Sæt på pause"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Gå videre til næste"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Gå til forrige"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Telefonen slukkede pga. varme"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Din telefon kører nu normalt"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Din telefon var blevet for varm, så den slukkede for at køle ned. Din telefon kører nu igen normalt. \n\nDin telefon kan blive for varm, hvis du:\n • Bruger ressourcekrævende apps (f.eks. spil, video eller navigation)\n • Downloader eller uploader store filer\n • Bruger din telefon i varme omgivelser"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant apps kræver ingen installation."</string>
<string name="app_info" msgid="6856026610594615344">"Oplysninger om appen"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Gå til internettet"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi er slået fra"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth er slået fra"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 8b9b407b1597..1e85c9049ae8 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobile Datennutzung deaktiviert"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-Tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flugmodus"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Keine SIM-Karte"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Netzwerk des Mobilfunkanbieters wird gewechselt"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Akkudetails öffnen"</string>
@@ -299,7 +301,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN aus"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"WLAN an"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Keine WLAN-Netzwerke verfügbar"</string>
- <string name="quick_settings_cast_title" msgid="7709016546426454729">"Übertragen"</string>
+ <string name="quick_settings_cast_title" msgid="7709016546426454729">"Streamen"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Wird übertragen"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unbenanntes Gerät"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Startklar"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Arbeitsprofil verbunden mit <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Das persönliche Profil ist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Das Gerät ist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Geräteverwaltung"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilüberwachung"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netzwerküberwachung"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN deaktivieren"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-Verbindung trennen"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Richtlinien ansehen"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Dein Gerät wird von <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> verwaltet.\n\nDein Administrator kann Einstellungen, Zugriffsrechte auf Unternehmensinhalte, Apps und Daten deines Geräts sowie dessen Standortinformationen überwachen und verwalten.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Dein Gerät wird von deiner Organisation verwaltet.\n\nDein Administrator kann Einstellungen, Zugriffsrechte auf Unternehmensinhalte, Apps und Daten deines Geräts sowie dessen Standortinformationen überwachen und verwalten.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Deine Organisation hat ein Zertifikat einer Zertifizierungsstelle auf deinem Gerät installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Deine Organisation hat ein Zertifikat einer Zertifizierungsstelle in deinem Arbeitsprofil installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Auf dem Gerät ist das Zertifikat einer Zertifizierungsstelle installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Dein Administrator hat die Netzwerkprotokollierung aktiviert. Damit wird der Netzwerkverkehr auf deinem Gerät überwacht."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Du bist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden. Die VPN-App kann deine Netzwerkaktivitäten (E-Mails, Apps und Websites) erfassen."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Du bist mit <xliff:g id="VPN_APP_0">%1$s</xliff:g> und <xliff:g id="VPN_APP_1">%2$s</xliff:g> verbunden. Die VPN-Apps können deine Netzwerkaktivitäten (E-Mails, Apps und Websites) erfassen."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Dein Arbeitsprofil ist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden, die deine Netzwerkaktivitäten wie E-Mails, Apps und Websites überwachen kann."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Dein persönliches Profil ist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden, die deine Netzwerkaktivitäten wie E-Mails, Apps und Websites überwachen kann."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Dein Gerät wird von <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> verwaltet."</string>
@@ -627,9 +624,9 @@
<string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
<string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Kalender"</string>
<string name="tuner_full_zen_title" msgid="4540823317772234308">"Einschließlich Lautstärkeregler anzeigen"</string>
- <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Bitte nicht stören"</string>
+ <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nicht stören"</string>
<string name="volume_dnd_silent" msgid="4363882330723050727">"Tastenkombination für Lautstärketasten"</string>
- <string name="volume_up_silent" msgid="7141255269783588286">"\"Bitte nicht stören\" bei \"Lauter\" deaktivieren"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"\"Nicht stören\" bei \"Lauter\" deaktivieren"</string>
<string name="battery" msgid="7498329822413202973">"Akku"</string>
<string name="clock" msgid="7416090374234785905">"Uhr"</string>
<string name="headset" msgid="4534219457597457353">"Headset"</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Benachrichtigung von <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Die App funktioniert unter Umständen bei geteiltem Bildschirm nicht."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Das Teilen des Bildschirms wird in dieser App nicht unterstützt."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Einstellungen öffnen."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Schnelleinstellungen öffnen."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Schnelleinstellungen schließen."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant-Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Bei Instant-Apps ist keine vorherige Installation erforderlich."</string>
<string name="app_info" msgid="6856026610594615344">"App-Informationen"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Web aufrufen"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile Daten"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"WLAN ist deaktiviert"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ist deaktiviert"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index dcabbc2b1ec3..6db0af0ec8dd 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Πρόσδεση Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Λειτουργία πτήσης."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Δεν υπάρχει κάρτα SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Αλλαγή δικτύου εταιρείας κινητής τηλεφωνίας."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Άνοιγμα λεπτομερειών μπαταρίας"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Το προφίλ εργασίας είναι συνδεδεμένο με το <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Το προσωπικό προφίλ έχει συνδεθεί στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Η συσκευή έχει συνδεθεί στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Διαχείριση συσκευών"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Παρακολούθηση προφίλ"</string>
<string name="monitoring_title" msgid="169206259253048106">"Παρακολούθηση δικτύου"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Απενεργοποίηση VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Αποσύνδεση VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Προβολή πολιτικών"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Η διαχείριση της συσκευής σας γίνεται από <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί και να διαχειρίζεται ρυθμίσεις, εταιρική πρόσβαση, εφαρμογές και δεδομένα που σχετίζονται με τη συσκευή, καθώς και τις πληροφορίες τοποθεσίας.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Η διαχείριση της συσκευής σας γίνεται από τον οργανισμό σας.\n\nΟ διαχειριστής μπορεί να παρακολουθεί και να διαχειρίζεται ρυθμίσεις, εταιρική πρόσβαση, εφαρμογές και δεδομένα που σχετίζονται με τη συσκευή, καθώς και τις πληροφορίες τοποθεσίας.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Ο οργανισμός σας εγκατέστησε μια αρχή έκδοσης πιστοποιητικών σε αυτήν τη συσκευή. Η ασφαλής επισκεψιμότητα δικτύου σας μπορεί να παρακολουθείται ή να τροποποιείται."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Ο οργανισμός σας εγκατέστησε μια αρχή έκδοσης πιστοποιητικών στο προφίλ εργασίας σας. Η ασφαλής επισκεψιμότητα δικτύου σας μπορεί να παρακολουθείται ή να τροποποιείται."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Μια αρχή έκδοσης πιστοποιητικών έχει εγκατασταθεί σε αυτήν τη συσκευή. Η ασφαλής επισκεψιμότητα δικτύου σας μπορεί να παρακολουθείται ή να τροποποιείται."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Ο διαχειριστής σας ενεργοποίησε την καταγραφή δικτύου, η οποία παρακολουθεί την επισκεψιμότητα στη συσκευή σας."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Έχετε συνδεθεί στις εφαρμογές <xliff:g id="VPN_APP_0">%1$s</xliff:g> και <xliff:g id="VPN_APP_1">%2$s</xliff:g>, οι οποίες μπορούν να παρακολουθούν τη δραστηριότητα του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Το προφίλ εργασίας σας είναι συνδεδεμένο στο <xliff:g id="VPN_APP">%1$s</xliff:g>, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Το προσωπικό προφίλ σας είναι συνδεμένο στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Η διαχείριση της συσκευής σας γίνεται από <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Ειδοποίηση <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Δεν είναι δυνατή η λειτουργία της εφαρμογής με διαχωρισμό οθόνης."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Η εφαρμογή δεν υποστηρίζει διαχωρισμό οθόνης."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Άνοιγμα ρυθμίσεων."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Άνοιγμα γρήγορων ρυθμίσεων."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Κλείσιμο γρήγορων ρυθμίσεων."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Εφαρμογές"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Οι Instant Εφαρμογές δεν απαιτούν εγκατάσταση."</string>
<string name="app_info" msgid="6856026610594615344">"Πληροφορίες εφαρμογής"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Μετάβαση στον ιστό"</string>
<string name="mobile_data" msgid="7094582042819250762">"Δεδομένα κινητής τηλεφωνίας"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Το Wi-Fi είναι ανενεργό"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Το Bluetooth είναι ανενεργό"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index d8216bfae085..f4b75a30d9ff 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobile data off"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"No SIM card."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Carrier network changing."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Open battery details"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Work profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Personal profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Device connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Device management"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"View Policies"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Your device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Your device is managed by your organisation.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Your admin has turned on network logging, which monitors traffic on your device."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"You\'re connected to <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Your work profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Your personal profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> notification: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"App may not work with split-screen."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App does not support split-screen."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Open settings."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Open quick settings."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Close quick settings."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant apps don\'t require installation."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi is off"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is off"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index d8216bfae085..f4b75a30d9ff 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobile data off"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"No SIM card."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Carrier network changing."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Open battery details"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Work profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Personal profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Device connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Device management"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"View Policies"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Your device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Your device is managed by your organisation.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Your admin has turned on network logging, which monitors traffic on your device."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"You\'re connected to <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Your work profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Your personal profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> notification: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"App may not work with split-screen."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App does not support split-screen."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Open settings."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Open quick settings."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Close quick settings."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant apps don\'t require installation."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi is off"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is off"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index d8216bfae085..f4b75a30d9ff 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobile data off"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"No SIM card."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Carrier network changing."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Open battery details"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Work profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Personal profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Device connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Device management"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"View Policies"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Your device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Your device is managed by your organisation.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Your admin has turned on network logging, which monitors traffic on your device."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"You\'re connected to <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Your work profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Your personal profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> notification: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"App may not work with split-screen."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App does not support split-screen."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Open settings."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Open quick settings."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Close quick settings."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant apps don\'t require installation."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi is off"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is off"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 4be584f7fe6d..a51b09009854 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Desactivar datos móviles"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Sin tarjeta SIM"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambio de proveedor de red"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalles de la batería"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Perfil de trabajo conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Perfil personal conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Dispositivo conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Administración del dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de red"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Inhabilitar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver políticas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> administra tu dispositivo.\n\nTu administrador puede controlar y administrar la configuración, el acceso corporativo, las apps, los datos asociados a tu dispositivo y la información de ubicación.\n\nPara obtener más información, comunícate con tu administrador."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Tu organización administra tu dispositivo.\n\nTu administrador puede controlar y administrar la configuración, el acceso corporativo, las apps, los datos asociados a tu dispositivo y la información de ubicación.\n\nPara obtener más información, comunícate con tu administrador."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Tu organización instaló una autoridad de certificación en este dispositivo. Es posible que se controle o modifique el tráfico de tu red segura."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Tu organización instaló una autoridad de certificación en tu perfil de trabajo. Es posible que se controle o modifique el tráfico de tu red segura."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Hay una autoridad de certificación instalada en este dispositivo. Es posible que se controle o modifique el tráfico de tu red segura."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Tu administrador activó el registro de red, que supervisa el tráfico en tu dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar la actividad de tu red, incluidos los correos electrónicos, las apps y los sitios web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Estás conectado a <xliff:g id="VPN_APP_0">%1$s</xliff:g> y <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que pueden controlar tu actividad de red, incluidos los correos electrónicos, las apps y los sitios web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Tu perfil de trabajo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar tu actividad de red, incluidos los correos electrónicos, las apps y los sitios web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Tu perfil personal está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar tu actividad de red, incluidos los correos electrónicos, las apps y los sitios web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> administra tu dispositivo."</string>
@@ -667,7 +664,7 @@
<string name="right_keycode" msgid="708447961000848163">"Clave de código derecho"</string>
<string name="left_icon" msgid="3096287125959387541">"Ícono izquierdo"</string>
<string name="right_icon" msgid="3952104823293824311">"Ícono derecho"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastra los mosaicos para agregarlos"</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastra los íconos para agregarlos"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastra aquí para quitar"</string>
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificación de <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Es posible que la app no funcione en el modo de pantalla dividida."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"La app no es compatible con la función de pantalla dividida."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Abrir Configuración"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Abrir la configuración rápida"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Cerrar configuración rápida"</string>
@@ -753,9 +754,8 @@
<string name="notification_channel_storage" msgid="3077205683020695313">"Almacenamiento"</string>
<string name="instant_apps" msgid="6647570248119804907">"Apps instantáneas"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Las Apps instantáneas no requieren instalación."</string>
- <string name="app_info" msgid="6856026610594615344">"Información de la app"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="app_info" msgid="6856026610594615344">"Información de apps"</string>
+ <string name="go_to_web" msgid="1106022723459948514">"Ir a la Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móviles"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi desactivado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desactivado"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 030af0f53add..cbeb40aefcbc 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Datos móviles desactivados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Compartir por Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"No hay tarjeta SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambiando red de operador."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalles de la batería"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Perfil de trabajo conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Perfil personal conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Dispositivo conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Administración de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de red"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Inhabilitar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver políticas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"El dispositivo está administrado por <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nEl administrador puede supervisar y gestionar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados a este dispositivo y su información de ubicación.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"El dispositivo está administrado por tu organización.\n\nEl administrador puede supervisar y gestionar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados a este dispositivo y su información de ubicación.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Tu organización ha instalado una entidad de certificación en este dispositivo. Es posible que se supervise o se modifique tu tráfico de red seguro."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Tu organización ha instalado una entidad de certificación en tu perfil de trabajo. Es posible que se supervise o se modifique tu tráfico de red seguro."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Se ha instalado una entidad de certificación en este dispositivo. Es posible que se supervise o se modifique tu tráfico de red seguro."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"El administrador ha activado el registro de la red para supervisar el tráfico en tu dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Te has conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede supervisar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Te has conectado a <xliff:g id="VPN_APP_0">%1$s</xliff:g> y <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que pueden supervisar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Tu perfil de trabajo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede supervisar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Tu perfil personal está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede supervisar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Tu dispositivo está administrado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificación de <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Es posible que la aplicación no funcione con la pantalla dividida."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"La aplicación no admite la pantalla dividida."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Abrir ajustes."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Abrir ajustes rápidos."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Cerrar ajustes rápidos."</string>
@@ -729,7 +730,7 @@
<string name="pip_skip_to_prev" msgid="1955311326688637914">"Volver al anterior"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Teléfono apagado por calor"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"El teléfono ahora funciona con normalidad"</string>
- <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"El teléfono se había calentado demasiado y se ha apagado para enfriarlo. Ahora funciona con normalidad.\n\nPuede calentarse demasiado si:\n • Usas aplicaciones que consumen muchos recursos (p. ej., apps de juegos, vídeos o navegación)\n • Descargas o subes archivos grandes\n • Lo usas a altas temperaturas"</string>
+ <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"El teléfono se había calentado demasiado y se ha apagado para enfriarse. Ahora funciona con normalidad.\n\nPuede calentarse demasiado si:\n • Usas aplicaciones que consumen muchos recursos (p. ej., apps de juegos, vídeos o navegación)\n • Descargas o subes archivos grandes\n • Lo usas a altas temperaturas"</string>
<string name="high_temp_title" msgid="4589508026407318374">"El teléfono se está calentando"</string>
<string name="high_temp_notif_message" msgid="5642466103153429279">"Se limitan algunas funciones mientras el teléfono se enfría"</string>
<string name="high_temp_dialog_message" msgid="6840700639374113553">"El teléfono intentará enfriarse. Puedes seguir utilizándolo, pero es posible que funcione con mayor lentitud.\n\nUna vez que se haya enfriado, funcionará con normalidad."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplicaciones Instantáneas"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"No es necesario instalar las Aplicaciones Instantáneas."</string>
<string name="app_info" msgid="6856026610594615344">"Información de la aplicación"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Ir a la Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móviles"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi desactivado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desactivado"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 250525e62ce8..8424bba1e6ec 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiilne andmeside on väljas"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothi jagamine."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lennurežiim."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM-kaarti pole."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Operaatori võrku muudetakse."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Aku üksikasjade avamine"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Tööprofiil on ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Isiklik profiil on ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Seade on ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Seadmehaldus"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profiili jälgimine"</string>
<string name="monitoring_title" msgid="169206259253048106">"Võrgu jälgimine"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Keela VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Katkesta VPN-i ühendus"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Kuva eeskirjad"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Teie seadet haldab organisatsioon <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministraator saab jälgida ning hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Teie seadet haldab teie organisatsioon.\n\nAdministraator saab jälgida ning hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Teie organisatsioon installis sellesse seadmesse sertifikaadi volituse. Teie turvalist võrguliiklust võidakse jälgida ja muuta."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Teie organisatsioon installis teie tööprofiilile sertifikaadi volituse. Teie turvalist võrguliiklust võidakse jälgida ja muuta."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Sertifikaadi volitus on sellesse seadmesse installitud. Teie turvalist võrguliiklust võidakse jälgida ja muuta."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Teie administraator lülitas sisse võrgu logimise funktsiooni, mis jälgib teie seadmes liiklust."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Teil on ühendus rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Teil on ühendus rakendustega <xliff:g id="VPN_APP_0">%1$s</xliff:g> ja <xliff:g id="VPN_APP_1">%2$s</xliff:g>, mis saavad jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Teie tööprofiil on ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Teie isiklik profiil on ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Teie seadet haldab rakendus <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Teenuse <xliff:g id="ID_1">%1$s</xliff:g> märguanne: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Rakendus ei pruugi poolitatud ekraaniga töötada."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Rakendus ei toeta jagatud ekraani."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Ava seaded."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Ava kiirseaded."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Sule kiirseaded."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Installimata avatavad rakendused"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Installimata avatavaid rakendusi pole vaja installida."</string>
<string name="app_info" msgid="6856026610594615344">"Rakenduse teave"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Avage veebis"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiilne andmeside"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"WiFi on välja lülitatud"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth on välja lülitatud"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 2adbd725c3c6..bc13bcfc31a6 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Datu mugikorrak desaktibatuta"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Konexioa partekatzea (Bluetooth)"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Hegaldi-modua"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Ez dago SIM txartelik."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Operadorearen sarea aldatzea."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Ireki bateriaren xehetasunak"</string>
@@ -299,7 +301,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi konexioa desaktibatuta"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Aktibatuta dago Wi-Fi konexioa"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Ez dago Wi-Fi sarerik erabilgarri"</string>
- <string name="quick_settings_cast_title" msgid="7709016546426454729">"Igorpena"</string>
+ <string name="quick_settings_cast_title" msgid="7709016546426454729">"Igorri"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Igortzen"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Izenik gabeko gailua"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Igortzeko prest"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora dago konektatuta laneko profila"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta dago profil pertsonala"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta dago gailua"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gailuaren kudeaketa"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profila kontrolatzeko aukera"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sareen kontrola"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Desgaitu VPN konexioa"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Deskonektatu VPN sarea"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ikusi gidalerroak"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> erakundeak kudeatzen dizu gailua.\n\nAdministratzaileak gainbegiratu eta kudeatu egin ditzake ezarpenak, enpresa-sarbidea, aplikazioak, gailuarekin erlazionatutako datuak eta gailuaren kokapen-informazioa.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Erakundeak kudeatzen dizu gailua.\n\nAdministratzaileak gainbegiratu eta kudeatu egin ditzake ezarpenak, enpresa-sarbidea, aplikazioak, gailuarekin erlazionatutako datuak eta gailuaren kokapen-informazioa.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Erakundeak ziurtagiri-emaile bat instalatu du gailuan. Baliteke sareko trafiko segurua gainbegiratzea edo aldatzea."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Erakundeak ziurtagiri-emaile bat instalatu dizu laneko profilean. Baliteke sareko trafiko segurua gainbegiratzea edo aldatzea."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Ziurtagiri-emaile bat dago instalatuta gailuan. Baliteke sareko trafiko segurua gainbegiratzea edo aldatzea."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administratzaileak sare-erregistroak aktibatu ditu; horrela, zure gailuko trafikoa gainbegira dezake."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta zaude eta hark sareko jarduerak gainbegira ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> eta <xliff:g id="VPN_APP_1">%2$s</xliff:g> aplikazioetara konektatuta zaude, eta haiek sareko jarduerak gainbegira ditzakete, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora dago konektatuta laneko profila, eta aplikazio horrek sareko jarduerak gainbegira ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta duzu profil pertsonala, eta aplikazio horrek sareko jarduerak gainbegira ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> aplikazioak kudeatzen du gailu hau."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> zerbitzuaren jakinarazpena: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Baliteke aplikazioak ez funtzionatzea pantaila zatituan."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikazioak ez du onartzen pantaila zatitua"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Ireki ezarpenak."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Ireki ezarpen bizkorrak."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Itxi ezarpen bizkorrak."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Zuzeneko aplikazioak"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Zuzeneko aplikazioak ez dira instalatu behar."</string>
<string name="app_info" msgid="6856026610594615344">"Aplikazioari buruzko informazioa"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Joan sarera"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datu mugikorrak"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi konexioa desaktibatuta dago"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth konexioa desaktibatuta dago"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index e464690154d9..4c598d7bfdc2 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"بدون سیم کارت."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"داده‌ تلفن همراه"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"داده تلفن همراه روشن"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"داده تلفن همراه خاموش"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"اتصال اینترنت با بلوتوث تلفن همراه."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"حالت هواپیما."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"سیم‌کارتی موجود نیست."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"تغییر شبکه شرکت مخابراتی."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"باز کردن جزئیات باتری"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"درحال شارژ شدن"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"‏داده 2G-3G موقتاً متوقف شده است"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"‏داده 4G موقتاً متوقف شده است"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"داده تلفن همراه موقتاً متوقف شده است"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"داده موقتاً متوقف شده است"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"مصرف داده شما به محدودیت داده‌ای که تنظیم کردید رسیده است. دیگر از داده تلفن همراه استفاده نمی‌کنید.\n\n درصورت ازسرگیری، ممکن است هزینه‌های مصرف داده اعمال شود."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"از سر‌گیری"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"اتصال اینترنتی ندارید"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‏Wi-Fi متصل شد"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"نقطه اتصال"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"اعلان‌ها"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"چراغ قوه"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"داده تلفن همراه"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"مصرف داده"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"داده‌های باقی‌مانده"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"بیش از حد مجاز"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"نمایه کاری به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل شده است"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"نمایه شخصی به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل شده است"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"دستگاه به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل شده است"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"مدیریت دستگاه"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"کنترل نمایه"</string>
<string name="monitoring_title" msgid="169206259253048106">"کنترل شبکه"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"‏غیرفعال کردن VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"‏قطع اتصال VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"مشاهده خط‌مشی‌ها"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"دستگاه شما تحت مدیریت <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> است.\n\nسرپرست سیستم شما می‌تواند تنظیمات، دسترسی شرکتی، برنامه‌ها، داده‌های مرتبط با دستگاه شما و اطلاعات مکان دستگاهتان را پایش و مدیریت کند.\n\nبرای اطلاعات بیشتر، با سرپرست سیستم تماس بگیرید."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"دستگاه شما تحت مدیریت سازمان شما است.\n\nسرپرست سیستم شما می‌تواند تنظیمات، دسترسی شرکتی، برنامه‌ها، داده‌های مرتبط با دستگاه شما و اطلاعات مکان دستگاهتان را پایش و مدیریت کند.\n\nبرای اطلاعات بیشتر، با سرپرست سیستم تماس بگیرید."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"سازمان شما مرجع گواهینامه‌ای در این دستگاه نصب کرده است. ممکن است ترافیک امن شبکه شما پایش یا تغییر داده شود."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"سازمان شما مرجع گواهینامه‌ای در نمایه کاری شما نصب کرده است. ممکن است ترافیک امن شبکه شما پایش یا تغییر داده شود."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"مرجع گواهینامه‌ای در این دستگاه نصب شده است. ممکن است ترافیک امن شبکه شما پایش یا تغییر داده شود."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"سرپرست سیستم شما گزارش‌گیری از شبکه را (که ترافیک دستگاه شما را پایش می‌کند) روشن کرده است."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل شده‌اید، که می‌تواند فعالیت شبکه شما را (ازجمله رایانامه‌‌ها، برنامه‌‌ها و وب‌سایت‌ها) پایش کند."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"به <xliff:g id="VPN_APP_0">%1$s</xliff:g> و <xliff:g id="VPN_APP_1">%2$s</xliff:g> متصل شده‌اید، که می‌توانند فعالیت شما را در شبکه (ازجمله رایانامه‌‌ها، برنامه‌‌ها و وب‌سایت‌ها) پایش کنند."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"نمایه کاری شما به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل است، که می‌تواند فعالیت شما در شبکه (ازجمله رایانامه‌ها، برنامه‌ها و وب‌سایت‌ها) را پایش کند."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"نمایه شخصی شما به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل شده‌ است، که می‌تواند فعالیت شما در شبکه (ازجمله رایانامه‌‌ها، برنامه‌‌ها و وب‌سایت‌ها) را پایش کند."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> دستگاه شما را مدیریت می‌کند."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> و <xliff:g id="NUMBER_5">%3$d</xliff:g> مورد دیگر</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> و <xliff:g id="NUMBER_5">%3$d</xliff:g> مورد دیگر</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"کنترل‌های اعلان برای <xliff:g id="APP_NAME">%1$s</xliff:g> باز شد"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"کنترل‌های اعلان برای <xliff:g id="APP_NAME">%1$s</xliff:g> بسته شد"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"مجاز کردن اعلان‌های این کانال"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"‏همه دسته‎ها"</string>
<string name="notification_more_settings" msgid="816306283396553571">"تنظیمات بیشتر"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"سفارشی کردن: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"اعلان <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"ممکن است برنامه با تقسیم صفحه کار نکند."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"برنامه از تقسیم صفحه پشتیبانی نمی‌کند."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"باز کردن تنظیمات."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"باز کردن تنظیمات سریع."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"بستن تنظیمات سریع."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"منوی تصویر در تصویر"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> درحالت تصویر در تصویر است"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"اگر نمی‌خواهید <xliff:g id="NAME">%s</xliff:g> از این قابلیت استفاده کند، با ضربه زدن، تنظیمات را باز کنید و قابلیت را خاموش کنید."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"پخش"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"توقف موقت"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"رد شدن به بعدی"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"رد شدن به قبلی"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"تلفن به علت گرم شدن خاموش شد"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"اکنون تلفنتان عملکرد معمولش را دارد"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"تلفنتان خیلی گرم شده بود، بنابراین خاموش شد تا خنک شود. اکنون تلفنتان عملکرد معمولش را دارد.\n\nتلفنتان خیلی گرم می‌شود، اگر:\n • از برنامه‌های نیازمند پردازش زیاد (مانند بازی، برنامه‌های ویدیویی یا پیمایشی) استفاده کنید\n • فایل‌های بزرگ بارگیری یا بارگذاری کنید\n • در دماهای بالا از تلفنتان استفاده کنید"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"برنامه‌های فوری"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"برنامه‌های فوری نیاز به نصب ندارند."</string>
<string name="app_info" msgid="6856026610594615344">"اطلاعات برنامه"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"رفتن به وب"</string>
<string name="mobile_data" msgid="7094582042819250762">"داده تلفن همراه"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"‏Wi-Fi خاموش است"</string>
<string name="bt_is_off" msgid="2640685272289706392">"بلوتوث خاموش است"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 9be1b9af5c18..1710f400c936 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiilidata poissa käytöstä"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetin jakaminen Bluetoothin kautta."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lentokonetila."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Ei SIM-korttia."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Operaattorin verkko muuttuu."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Avaa akun tiedot."</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Työprofiili on yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Henkilökohtainen profiili on yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Laite on yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Laitehallinta"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profiilin valvonta"</string>
<string name="monitoring_title" msgid="169206259253048106">"Verkon valvonta"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Poista VPN käytöstä"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Katkaise VPN-yhteys"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Näytä säännöt"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> hallinnoi tätä laitetta.\n\nJärjestelmänvalvoja voi valvoa ja hallinnoida asetuksiasi, yrityskäyttöä, sovelluksia, laitteeseesi yhdistettyjä tietoja sekä laitteesi sijaintitietoja.\n\nSaat lisätietoja järjestelmänvalvojalta."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Organisaatiosi hallinnoi tätä laitetta.\n\nJärjestelmänvalvoja voi valvoa ja hallinnoida asetuksiasi, yrityskäyttöä, sovelluksia, laitteeseesi yhdistettyjä tietoja sekä laitteesi sijaintitietoja.\n\nSaat lisätietoja järjestelmänvalvojalta."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organisaatiosi asensi laitteeseen varmenteen myöntäjän. Suojattua verkkoliikennettäsi voidaan valvoa tai muuttaa."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organisaatiosi lisäsi työprofiiliin varmenteen myöntäjän. Suojattua verkkoliikennettäsi voidaan valvoa tai muuttaa."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Laitteeseen on asennettu varmenteen myöntäjä. Suojattua verkkoliikennettäsi voidaan valvoa tai muuttaa."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Järjestelmänvalvoja on ottanut käyttöön verkkolokitietojen tallentamisen, joka valvoo laitteellasi tapahtuvaa liikennettä."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Olet yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>, joka voi valvoa verkkotoimintaasi, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Olet yhteydessä sovelluksiin <xliff:g id="VPN_APP_0">%1$s</xliff:g> ja <xliff:g id="VPN_APP_1">%2$s</xliff:g>, jotka voivat valvoa verkkotoimintaasi, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Työprofiilisi on yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>, joka voi valvoa toimintaasi verkossa, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Henkilökohtainen profiilisi on yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>, joka voi valvoa verkkotoimintaasi, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Laitettasi hallinnoi <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Ilmoitus kohteesta <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Sovellus ei ehkä toimi jaetulla näytöllä."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Sovellus ei tue jaetun näytön tilaa."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Avaa asetukset."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Avaa pika-asetukset."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Sulje pika-asetukset."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Pikasovelluksia ei tarvitse asentaa."</string>
<string name="app_info" msgid="6856026610594615344">"Sovelluksen tiedot"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Avaa verkossa"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiilitiedonsiirto"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi on pois käytöstä"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ei ole käytössä"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 794757ac7934..a3560c34ad20 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Données cellulaires désactivées"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Partage de connexion Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode Avion"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Aucune carte SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Modification du réseau du fournisseur de services"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Ouvrir les détails de la pile"</string>
@@ -194,7 +196,7 @@
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi désactivé"</string>
<string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wi-Fi activé."</string>
<string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Signal mobile : <xliff:g id="SIGNAL">%1$s</xliff:g>, <xliff:g id="TYPE">%2$s</xliff:g>, <xliff:g id="NETWORK">%3$s</xliff:g>"</string>
- <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batterie : <xliff:g id="STATE">%s</xliff:g>"</string>
+ <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Pile : <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Mode Avion : désactivé"</string>
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mode Avion : activé"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Le mode Avion est désactivé."</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profil professionnel connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profil personnel connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Appareil connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gestion d\'appareils"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Contrôle de profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Surveillance réseau"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"RPV"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Désactiver le RPV"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le RPV"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Afficher les politiques"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Votre appareil est géré par <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux données d\'entreprise, les applications, les données associées à l\'appareil et les renseignements sur sa localisation.\n\nPour plus d\'information, communiquez avec votre administrateur."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Votre appareil est géré par votre organisation.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux données d\'entreprise, les applications, les données associées à l\'appareil et les renseignements sur sa localisation.\n\nPour plus d\'information, communiquez avec votre administrateur."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Votre entreprise a installé une autorité de certification sur cet appareil. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Votre entreprise a installé une autorité de certification dans votre profil professionnel. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Une autorité de certification est installée sur cet appareil. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Vous êtes connecté à <xliff:g id="VPN_APP_0">%1$s</xliff:g> et à <xliff:g id="VPN_APP_1">%2$s</xliff:g>, qui peuvent contrôler votre activité sur le réseau, y compris l\'activité relative aux courriels, aux applications et aux sites Web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Votre profil professionnel est connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Votre profil professionnel est connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Votre appareil est géré par <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notification <xliff:g id="ID_1">%1$s</xliff:g> : <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Il est possible que l\'application ne fonctionne pas en mode Écran partagé."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"L\'application n\'est pas compatible avec l\'écran partagé."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Ouvrir les paramètres."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Ouvrir les réglages rapides."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fermer les réglages rapides."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Applications instantanées"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Les applications instantanées ne nécessitent pas d\'installation."</string>
<string name="app_info" msgid="6856026610594615344">"Détails de l\'application"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Accéder au Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Données cellulaires"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Le Wi-Fi est désactivé"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Le Bluetooth est désactivé"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 57e057e1d02f..e00c0e9f8092 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Données mobiles désactivées"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Partage de connexion Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode Avion"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Aucune carte SIM"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Modification du réseau de l\'opérateur"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Ouvrir les détails de la batterie"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profil professionnel connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profil personnel connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Appareil connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gestion des appareils"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Contrôle du profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Contrôle du réseau"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Désactiver le VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Afficher les règles"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Votre appareil est géré par <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux données d\'entreprise, les applications, les données associées à l\'appareil et les informations sur sa localisation.\n\nPour plus d\'informations, contactez votre administrateur."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Votre appareil est géré par votre organisation.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux données d\'entreprise, les applications, les données associées à l\'appareil et les informations sur sa localisation.\n\nPour plus d\'informations, contactez votre administrateur."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Votre entreprise a installé une autorité de certification sur cet appareil. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Votre entreprise a installé une autorité de certification dans votre profil professionnel. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Une autorité de certification est installée sur cet appareil. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Votre administrateur a activé la journalisation du réseau, pour contrôler le trafic sur votre appareil."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Vous êtes connecté à <xliff:g id="VPN_APP_0">%1$s</xliff:g> et à <xliff:g id="VPN_APP_1">%2$s</xliff:g>, qui peuvent contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Votre profil professionnel est connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Votre profil personnel est connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Votre appareil est géré par <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notification <xliff:g id="ID_1">%1$s</xliff:g> : <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Il est possible que l\'application ne fonctionne pas en mode Écran partagé."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Application incompatible avec l\'écran partagé."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Ouvrir les paramètres."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Ouvrir la fenêtre de configuration rapide."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fermer la fenêtre de configuration rapide."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Applis instantanées"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Les applis instantanées ne nécessitent pas d\'installation."</string>
<string name="app_info" msgid="6856026610594615344">"Infos sur l\'appli"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Accéder au site Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Données mobiles"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi désactivé"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth désactivé"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index fda24b36a685..df630372b21d 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Os datos móbiles están desactivados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ancoraxe de Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Non hai tarxeta SIM"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambio de rede do operador."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir os detalles da batería"</string>
@@ -243,7 +245,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Os datos 4G están en pausa"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Pausáronse os datos móbiles"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Os datos están en pausa"</string>
- <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Alcanzouse o límite de datos establecido. Xa non usarás os datos móbiles.\n\nSe continúas, pódense aplicar cargos polo uso de datos."</string>
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Alcanzouse o límite de datos que fixaches. Xa non estás usando datos móbiles.\n\nSe os reactivas, pódense aplicar cargos polo seu uso."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Retomar"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sen Internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectada"</string>
@@ -276,7 +278,7 @@
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"Non hai dispositivos sincronizados dispoñibles"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotación automática"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Xirar automaticamente"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Xirar a pantalla automaticamente"</string>
<string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"Modo <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotación bloqueada"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"O perfil de traballo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"O perfil persoal está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"O dispositivo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Xestión de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión do perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de rede"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Desactivar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver políticas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"O teu dispositivo está xestionado por <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nO administrador pode controlar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co dispositivo e a información de localización deste último.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"A túa organización xestiona o teu dispositivo.\n\nO administrador pode controlar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co dispositivo e a información de localización deste último.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"A túa organización instalou unha autoridade de certificación neste dispositivo. É posible que se controle ou se modifique o teu tráfico de rede segura."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"A túa organización instalou unha autoridade de certificación no teu perfil de traballo. É posible que se controle ou se modifique o teu tráfico de rede segura."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Este dispositivo ten unha autoridade de certificación instalada. É posible que se controle ou se modifique o teu tráfico de rede segura."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"O administrador activou o rexistro na rede, que controla o tráfico do teu dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Estás conectado a <xliff:g id="VPN_APP_0">%1$s</xliff:g> e a <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que poden controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"O teu perfil de traballo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"O teu perfil persoal está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O teu dispositivo está xestionado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificación de <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Pode que a aplicación non funcione coa pantalla dividida."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"A aplicación non é compatible coa función de pantalla dividida."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Abrir configuración."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Abrir a configuración rápida."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Pechar a configuración rápida."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplicacións instantáneas"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"As aplicacións instantáneas non precisan instalación."</string>
<string name="app_info" msgid="6856026610594615344">"Información da aplicación"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Acceder á web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móbiles"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"A wifi está desactivada"</string>
<string name="bt_is_off" msgid="2640685272289706392">"O Bluetooth está desactivado"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 2cba93f97cca..3e4d7dc13b10 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM નથી."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"મોબાઇલ ડેટા"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"મોબાઇલ ડેટા ચાલુ છે"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"મોબાઇલ ડેટા બંધ છે"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth ટિથરિંગ."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"એરપ્લેન મોડ."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"કોઇ SIM કાર્ડ નથી."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"કેરીઅર નેટવર્કમાં ફેરફાર થઈ રહ્યો છે."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"બૅટરીની વિગતો ખોલો"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ચાર્જ થઈ રહ્યું છે"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ડેટા થોભાવ્યો છે"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ડેટા થોભાવ્યો છે"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"મોબાઇલ ડેટા થોભાવ્યો છે"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ડેટા થોભાવ્યો છે"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"તમે સેટ કરેલી ડેટા મર્યાદા પહોંચી ગઇ છે. તમે હવે મોબાઇલ ડેટાનો ઉપયોગ નથી કરી રહ્યાં.\n\nજો હવે તમે ફરી શરૂ કરો, તો ડેટા વપરાશ માટે શુલ્ક લાગુ થઇ શકે છે."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ફરી શરૂ કરો"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"કોઈ ઇન્ટરનેટ કનેક્શન નથી"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi કનેક્ટ કર્યું"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"હોટસ્પોટ"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"સૂચનાઓ"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ફ્લેશલાઇટ"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"મોબાઇલ ડેટા"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ડેટા વપરાશ"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"બાકી ડેટા"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"મર્યાદાથી વધુ"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"કાર્ય પ્રોફાઇલ <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ કરેલ છે"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"વ્યક્તિગત પ્રોફાઇલ <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ કરેલ છે"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"આ ઉપકરણ <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ કરેલ છે"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ઉપકરણનું સંચાલન"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"પ્રોફાઇલ નિરીક્ષણ"</string>
<string name="monitoring_title" msgid="169206259253048106">"નેટવર્ક મૉનિટરિંગ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN અક્ષમ કરો"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ડિસ્કનેક્ટ કરો"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"નીતિઓ જુઓ"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"તમારું ઉપકરણ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> દ્વારા સંચાલિત કરવામાં આવે છે.\n\nતમારા વ્યવસ્થાપક સેટિંગ્સ, કૉર્પોરેટ ઍક્સેસ, ઍપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતીનું નિરીક્ષણ અને સંચાલન કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"તમારું ઉપકરણ તમારી સંસ્થા દ્વારા સંચાલિત કરવામાં આવે છે.\n\nતમારા વ્યવસ્થાપક સેટિંગ્સ, કૉર્પોરેટ ઍક્સેસ, ઍપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતીનું નિરીક્ષણ અને સંચાલન કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"તમારી સંસ્થાએ આ ઉપકરણ પર પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કર્યું છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"તમારી સંસ્થાએ તમારી કાર્ય પ્રોફાઇલમાં પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કર્યું છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"આ ઉપકરણ પર પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કરેલ છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"તમારા વ્યવસ્થાપકે નેટવર્ક લૉગિંગ ચાલુ કર્યું છે, જે તમારા ઉપકરણ પર નેટવર્ક ટ્રાફિકનું નિયમન કરે છે."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"તમે <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ, ઍપ્લિકેશનો અને વેબસાઇટ સહિત તમારી નેટવર્ક પ્રવૃત્તિનું નિરીક્ષણ કરી શકે છે."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"તમે <xliff:g id="VPN_APP_0">%1$s</xliff:g> અને <xliff:g id="VPN_APP_1">%2$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ, ઍપ્લિકેશનો અને વેબસાઇટ સહિત તમારી નેટવર્ક પ્રવૃત્તિનું નિરીક્ષણ કરી શકે છે."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ કરેલ છે, જે ઇમેઇલ, ઍપ્લિકેશનો અને વેબસાઇટો સહિતની તમારી નેટવર્ક પ્રવૃત્તિનું નિયમન કરી શકે છે."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"તમારી વ્યક્તિગત પ્રોફાઇલ <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ કરેલ છે, જે ઇમેઇલ, ઍપ્લિકેશનો અને વેબસાઇટો સહિતની તમારી નેટવર્ક પ્રવૃત્તિનું નિયમન કરી શકે છે."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"તમારું ઉપકરણ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> અને અન્ય <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> અને અન્ય <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સૂચના નિયંત્રણો ચાલુ છે"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સૂચના નિયંત્રણો બંધ છે"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"આ ચૅનલની સૂચનાઓને મંજૂરી આપો"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"બધી કૅટેગરી"</string>
<string name="notification_more_settings" msgid="816306283396553571">"વધુ સેટિંગ્સ"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"કસ્ટમાઇઝ કરો: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> સૂચના: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"વિભાજિત-સ્ક્રીન સાથે ઍપ્લિકેશન કદાચ કામ ન કરે."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ઍપ્લિકેશન સ્ક્રીન-વિભાજનનું સમર્થન કરતી નથી."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"સેટિંગ્સ ખોલો."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ઝડપી સેટિંગ્સ ખોલો."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ઝડપી સેટિંગ્સ બંધ કરો."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"ચિત્રમાં ચિત્ર મેનૂ"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ચિત્રમાં-ચિત્રની અંદર છે"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"જો તમે નથી ઇચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ્સ ખોલવા માટે ટૅપ કરો અને તેને બંધ કરો."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"ચલાવો"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"થોભાવો"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"આગલા પર જાઓ"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"પહેલાંના પર જાઓ"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ફોન વધુ પડતી ગરમીને લીધે બંધ થઇ ગયો છે"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"તમારો ફોન અત્યંત ગરમ હતો, તેથી તે ઠંડો થવા આપમેળે બંધ થઇ ગયો છે. તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે.\n\nતમારો ફોન અત્યંત ગરમ થઇ શકે છે, જો તમે:\n • એવી ઍપ્લિકેશન વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વિડિઓ, અથવા નેવિગેટ કરતી ઍપ્લિકેશનો)\n • મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n • તમારા ફોનનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ઝટપટ ઍપ્લિકેશનો"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ઝટપટ ઍપ્લિકેશનો માટે ઇન્સ્ટૉલેશનની જરૂર નથી."</string>
<string name="app_info" msgid="6856026610594615344">"ઍપ્લિકેશન માહિતી"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"વેબ પર જાઓ"</string>
<string name="mobile_data" msgid="7094582042819250762">"મોબાઇલ ડેટા"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi બંધ છે"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth બંધ છે"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 65dd1fa51e72..82187cee4aec 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा बंद है"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटूथ टेदरिंग."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाई जहाज मोड."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"कोई सिम कार्ड नहीं है."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"वाहक नेटवर्क बदलना."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"बैटरी का विवरण खोलें"</string>
@@ -241,7 +243,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटा रोक दिया गया है"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"मोबाइल डेटा रोक दिया गया है"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"डेटा रोक दिया गया है"</string>
- <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"आपने जो डेटा सीमा सेट की थी, वहां तक पहुंचा जा चुका है. अब आप मोबाइल डेटा का उपयोग नहीं कर रहे हैं.\n\nअगर आप फिर से शुरू करते हैं, तो डेटा उपयोग के लिए शुल्क लगाया जा सकता है."</string>
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"आपने जो डेटा सीमा सेट की थी, वह पूरी हो चुकी है. अब आप मोबाइल डेटा का उपयोग नहीं कर रहे हैं.\n\nअगर आप फिर से शुरू करते हैं, तो डेटा उपयोग के लिए शुल्क लगाया जा सकता है."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"फिर से शुरू करें"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"कोई इंटरनेट कनेक्शन नहीं"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाई-फ़ाई कनेक्‍ट किया गया"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"कार्य प्रोफ़ाइल <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट है"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"व्यक्तिगत प्रोफ़ाइल <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट है"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"डिवाइस <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट है"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"डिवाइस प्रबंधन"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफ़ाइल को मॉनीटर करना"</string>
<string name="monitoring_title" msgid="169206259253048106">"नेटवर्क को मॉनीटर करना"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करें"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्‍कनेक्‍ट करें"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"नीतियां देखें"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपके डिवाइस का प्रबंधन करता है.\n\nआपका व्यवस्थापक सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान की जानकारी की निगरानी कर सकता है और उन्हें प्रबंधित कर सकता है.\n\nअधिक जानकारी के लिए, अपने व्यवस्थापक से संपर्क करें."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"आपका संगठन आपके डिवाइस का प्रबंधन करता है.\n\nआपका व्यवस्थापक सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान की जानकारी की निगरानी कर सकता है और उन्हें प्रबंधित कर सकता है.\n\nअधिक जानकारी के लिए, अपने व्यवस्थापक से संपर्क करें."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"आपके संगठन ने इस डिवाइस पर एक प्रमाणपत्र प्राधिकरण इंस्टॉल किया है. आपके सुरक्षित नेटवर्क की निगरानी या उसमें बदलाव किया जा सकता है."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"आपके संगठन ने आपकी कार्य प्रोफ़ाइल में एक प्रमाणपत्र प्राधिकरण इंस्टॉल किया है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"इस डिवाइस पर एक प्रमाणपत्र प्राधिकरण इंस्टॉल किया गया है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"आपके व्यवस्थापक ने नेटवर्क लॉगिंग चालू किया है, जो आपके डिवाइस पर ट्रैफ़िक की निगरानी करता है."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"आप <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकते हैं."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"आप <xliff:g id="VPN_APP_0">%1$s</xliff:g> और <xliff:g id="VPN_APP_1">%2$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकते हैं."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"आपकी कार्य प्रोफ़ाइल <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"आपकी व्यक्तिगत प्रोफ़ाइल <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> आपका डिवाइस प्रबंधित करता है."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> नोटिफ़िकेशन: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"हो सकता है कि ऐप्लिकेशन विभाजित स्क्रीन के साथ काम ना करे."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ऐप विभाजित स्‍क्रीन का समर्थन नहीं करता है."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"सेटिंग खोलें."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"त्वरित सेटिंग खोलें."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"त्वरित सेटिंग बंद करें."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"झटपट ऐप्स"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"झटपट ऐप्स के लिए इंस्टॉलेशन ज़रूरी नहीं है."</string>
<string name="app_info" msgid="6856026610594615344">"ऐप की जानकारी"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"वेब पर जाएं"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"वाई-फ़ाई बंद है"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ब्लूटूथ बंद है"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 8261522bb2fe..d2bf0c7aec88 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -158,6 +158,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilni su podaci isključeni"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Posredno povezivanje Bluetootha."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u zrakoplovu"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nema SIM kartice."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Promjena mreže operatera."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otvaranje pojedinosti o bateriji"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Radni profil povezan je s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Osobni profil povezan je s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Uređaj je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Upravljanje uređajem"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadzor profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadzor mreže"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Onemogući VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu s VPN-om"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Prikaži pravila"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Uređajem upravlja organizacija <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministrator može nadzirati postavke, korporacijski pristup, aplikacije, podatke o uređaju i lokaciji uređaja te upravljati njima.\n\nZa više informacija obratite se administratoru."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Uređajem upravlja vaša organizacija.\n\nAdministrator može nadzirati postavke, korporacijski pristup, aplikacije, podatke o uređaju i lokaciji uređaja te upravljati njima.\n\nZa više informacija obratite se administratoru."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Vaša je organizacija instalirala izdavač certifikata na ovom uređaju. Vaš sigurni mrežni promet možda se nadzire ili modificira."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Vaša je organizacija instalirala izdavač certifikata na vašem radnom profilu. Vaš sigurni mrežni promet možda se nadzire ili modificira."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Na ovom je uređaju instaliran izdavač certifikata. Vaš sigurni mrežni promet možda se nadzire ili modificira."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administrator je uključio mrežni zapisnik koji nadzire promet na vašem uređaju."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Povezani ste s aplikacijama <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g> koje mogu nadzirati vašu aktivnost na mreži, uključujući e-poruke, aplikacije i web-lokacije."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Vaš je radni profil povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poruke, aplikacije i web-lokacije."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Vaš je osobni profil povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poruke, aplikacije i web-lokacije."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vašim uređajem upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -707,6 +704,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> obavijest: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikacija možda neće funkcionirati s podijeljenim zaslonom."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikacija ne podržava podijeljeni zaslon."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Otvaranje postavki."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Otvaranje brzih postavki."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zatvaranje brzih postavki."</string>
@@ -756,8 +757,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant aplikacije"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant aplikacije nije potrebno instalirati."</string>
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Prijeđi na web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi je isključen"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je isključen"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 409d4ab566ae..a0744088b16b 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nincs SIM."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobiladatok"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobiladatok bekapcsolva"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiladatok kikapcsolva"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth megosztása."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Repülőgép üzemmód."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nincs SIM-kártya."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Szolgáltatói hálózat váltása."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Az akkumulátorral kapcsolatos részletek megnyitása"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Töltés folyamatban…"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"A 2G és 3G adatforgalom szünetel."</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"A 4G adatforgalom szünetel"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobiladatok szüneteltetve"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Az adatforgalom szünetel"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Elérte a beállított adatkorlátot. A továbbiakban nem használ mobiladat-forgalmat.\n\nHa a folytatást választja, szolgáltatója adathasználati díjat számíthat fel."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Folytatás"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nincs internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi csatlakoztatva"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Értesítések"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Zseblámpa"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobiladatok"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Adathasználat"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Fennmaradó adatmennyiség"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Túllépte a korlátot"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"A munkaprofil csatlakozik a következőhöz: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"A személyes profil a következőhöz csatlakozik: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Az eszköz a következőhöz csatlakozik: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Eszközkezelés"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilfelügyelet"</string>
<string name="monitoring_title" msgid="169206259253048106">"Hálózatfigyelés"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN letiltása"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-kapcsolat bontása"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Házirendek megtekintése"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Az eszközt a(z) <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> felügyeli.\n\nA rendszergazda figyelheti és kezelheti a beállításokat, a vállalati hozzáférést, az alkalmazásokat, az eszközhöz tartozó adatokat, valamint az eszköz helyadatait.\n\nHa további információra van szüksége, vegye fel a kapcsolatot a rendszergazdával."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Az eszközt az Ön szervezete felügyeli.\n\nA rendszergazda figyelheti és kezelheti a beállításokat, a vállalati hozzáférést, az alkalmazásokat, az eszközhöz tartozó adatokat, valamint az eszköz helyadatait.\n\nHa további információra van szüksége, vegye fel a kapcsolatot a rendszergazdával."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Szervezete tanúsítványkibocsátót telepített az eszközre. Ezáltal figyelhetik és befolyásolhatják az Ön biztonságos hálózati forgalmát."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Szervezete tanúsítványkibocsátót telepített a munkaprofilba. Ezáltal figyelhetik és befolyásolhatják az Ön biztonságos hálózati forgalmát."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Az eszközre tanúsítványkibocsátó van telepítve. Ezáltal figyelhetik és befolyásolhatják az Ön biztonságos hálózati forgalmát."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"A rendszergazda bekapcsolta az eszköz forgalmát figyelő hálózati naplózást."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Ön kapcsolódik a(z) <xliff:g id="VPN_APP">%1$s</xliff:g> alkalmazáshoz, amely figyelheti hálózati tevékenységét, beleértve a levelezést, valamint az alkalmazás- és webhelyhasználatot."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Ön csatlakozik a(z) <xliff:g id="VPN_APP_0">%1$s</xliff:g> és a(z) <xliff:g id="VPN_APP_1">%2$s</xliff:g> alkalmazásokhoz, amelyek figyelhetik hálózati tevékenységét, beleértve a levelezést, valamint az alkalmazás- és webhelyhasználatot."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Munkaprofilja csatlakozik a(z) <xliff:g id="VPN_APP">%1$s</xliff:g> alkalmazáshoz, amely figyelheti hálózati tevékenységét, beleértve a levelezést, az alkalmazásokat és a webhelyeket."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Az Ön személyes profilja csatlakozik a(z) <xliff:g id="VPN_APP">%1$s</xliff:g> alkalmazáshoz, amely figyelheti hálózati tevékenységeit, beleértve a levelezést, az alkalmazásokat és a webhelyeket."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Az eszközt a(z) <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> kezeli."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> és <xliff:g id="NUMBER_5">%3$d</xliff:g> másik</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> és <xliff:g id="NUMBER_2">%3$d</xliff:g> másik</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> értesítésvezérlői megnyitva"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> értesítésvezérlői kikapcsolva"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Értesítések engedélyezése erről a csatornáról"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Minden kategória"</string>
<string name="notification_more_settings" msgid="816306283396553571">"További beállítások"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Személyre szabás: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-értesítések: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Lehet, hogy az alkalmazás nem működik osztott képernyős nézetben."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Az alkalmazás nem támogatja az osztott képernyős nézetet."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Beállítások megnyitása."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Gyorsbeállítások megnyitása."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Gyorsbeállítások bezárása"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Kép a képben menü"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"A(z) <xliff:g id="NAME">%s</xliff:g> kép a képben funkciót használ"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Ha nem szeretné, hogy a(z) <xliff:g id="NAME">%s</xliff:g> használja ezt a funkciót, koppintson a beállítások megnyitásához, és kapcsolja ki."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Lejátszás"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Szüneteltetés"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Ugrás a következőre"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Ugrás az előzőre"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"A meleg miatt kikapcsolt"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"A telefon most már megfelelően működik"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefonja túlmelegedett, így kikapcsolt, hogy lehűlhessen. Most már megfelelően működik.\n\nA telefon akkor melegedhet túl, ha Ön:\n • Energiaigényes alkalmazásokat használ (például játékokat, videókat vagy navigációs alkalmazásokat)\n • Nagy fájlokat tölt le vagy fel\n • Melegben használja a telefonját"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Azonnali alkalmazások"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Az azonnali alkalmazásokat nem kell telepíteni."</string>
<string name="app_info" msgid="6856026610594615344">"Alkalmazásinformáció"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Tovább az internetre"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiladatok"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"A Wi-Fi ki van kapcsolva"</string>
<string name="bt_is_off" msgid="2640685272289706392">"A Bluetooth ki van kapcsolva"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 12565d1ba6b8..11167d65c11e 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Բջջային տվյալներն անջատված են"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-ը կապվում է:"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Ինքնաթիռի ռեժիմ"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM քարտ չկա:"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Օպերատորի ցանցի փոփոխում:"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Բացել մարտկոցի տվյալները"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Աշխատանքային պրոֆիլը կապակցված է <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Անձնական պրոֆիլը կապակցված է <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Սարքը կապակցված է <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Սարքերի կառավարում"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Պրոֆիլի վերահսկում"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ցանցի մշտադիտարկում"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Անջատել VPN-ը"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Անջատել VPN-ը"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Դիտել քաղաքականությունները"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Ձեր սարքը կառավարվում է <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\n-ի կողմից: Ձեր ադմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ օգտագործման թույլտվությունները, հավելվածները, սարքին կապված տվյալները և սարքի տեղադրման մասին տեղեկատվությունը:\n\nՄանրամասների համար դիմեք ձեր ադմինիստրատորին:"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Ձեր շարժական սարքը կառավարվում է ձեր կազմակերպության կողմից։\n\nՁեր ադմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ օգտագործման թույլտվությունները, հավելվածները, սարքին կապված տվյալները և սարքի տեղադրման մասին տեղեկատվությունը:\n\nՄանրամասների համար դիմեք ձեր ադմինիստրատորին:"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Ձեր կազմակերպությունը այս սարքում տեղադրել է վկայագրման կենտրոն։ Ձեր ցանցի ապահով թրաֆիկը կարող է վերահսկվել կամ փոփոխվել։"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Ձեր կազմակերպությունը ձեր աշխատանքային պրոֆիլում տեղադրել է վկայագրման կենտրոն։ Ձեր ցանցի ապահով թրաֆիկը կարող է վերահսկվել կամ փոփոխվել։"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Այս սարքում տեղադրված է վկայագրման կենտրոն։ Ձեր ցանցի ապահով թրաֆիկը կարող է վերահսկվել կամ փոփոխվել։"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Ձեր ադմինիստրատորը միացրել է ցանցային իրադարձությունների գրանցումը, որը վերահսկում է ձեր սարքի թրաֆիկը։"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Դուք կապակցված եք <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցային գործողությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Դուք կապակցված եք <xliff:g id="VPN_APP_0">%1$s</xliff:g> և <xliff:g id="VPN_APP_1">%2$s</xliff:g> հավելվածներին, որոնք կարող են վերահսկել ձեր ցանցային գործունեությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Ձեր աշխատանքային պրոֆիլը կապակցված է <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցային գործունեությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Ձեր անձնական պրոֆիլը կապակցված է <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցային գործունեությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Ձեր սարքը կառավարվում է <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> հավելվածի կողմից:"</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> ծանուցում՝ <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Հավելվածը չի կարող աշխատել տրոհված էկրանի ռեժիմում:"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Հավելվածը չի աջակցում էկրանի տրոհումը:"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Բացել կարգավորումները:"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Բացել արագ կարգավորումները:"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Փակել արագ կարգավորումները:"</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Ակնթարթորեն գործարկվող հավելվածներ"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Ակնթարթորեն գործարկվող հավելվածները տեղադրում չեն պահանջում։"</string>
<string name="app_info" msgid="6856026610594615344">"Հավելվածի տվյալներ"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Բացեք համացանցում"</string>
<string name="mobile_data" msgid="7094582042819250762">"Բջջային ինտերնետ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi-ն անջատված է"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth-ն անջատված է"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 2954b79acecc..5f776f057829 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Data Seluler Tidak Aktif"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode pesawat."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Tidak ada kartu SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Jaringan operator berubah."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Membuka detail baterai"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profil kerja tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profil pribadi tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Perangkat tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Pengelolaan perangkat"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pemantauan profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pemantauan jaringan"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Nonaktifkan VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Lihat Kebijakan"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdmin dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data yang terkait dengan perangkat, dan informasi lokasi perangkat.\n\nUntuk informasi selengkapnya, hubungi admin."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Perangkat dikelola oleh organisasi.\n\nAdmin dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data yang terkait dengan perangkat, dan informasi lokasi perangkat.\n\nUntuk informasi selengkapnya, hubungi admin."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organisasi Anda menginstal otoritas sertifikat di perangkat ini. Traffic jaringan aman Anda mungkin dipantau atau diubah."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organisasi Anda menginstal otoritas sertifikat di profil kerja. Traffic jaringan aman Anda mungkin dipantau atau diubah."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Otoritas sertifikat diinstal di perangkat. Traffic jaringan aman Anda mungkin dipantau atau diubah."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Admin telah mengaktifkan pencatatan jaringan, yang memantau traffic di perangkat."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Anda tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Anda tersambung ke <xliff:g id="VPN_APP_0">%1$s</xliff:g> dan <xliff:g id="VPN_APP_1">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Profil kerja Anda tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Profil pribadi Anda tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Perangkat dikelola oleh <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notifikasi <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikasi mungkin tidak berfungsi dengan layar terpisah."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App tidak mendukung layar terpisah."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Buka setelan."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Buka setelan cepat."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Tutup setelan cepat."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplikasi Instan"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Aplikasi instan tidak perlu diinstal."</string>
<string name="app_info" msgid="6856026610594615344">"Info aplikasi"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Buka di web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data seluler"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi nonaktif"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth nonaktif"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 3fbd7cb79219..4ba685d1caa2 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Slökkt á farsímagögnum"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tjóðrun með Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flugstilling"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Ekkert SIM-kort."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Skipt um farsímakerfi."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Opna upplýsingar um rafhlöðu"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Vinnusnið er tengt við <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Einkaprófíll er tengdur við <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Tæki er tengt við <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Tækjastjórnun"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Fylgst með sniði"</string>
<string name="monitoring_title" msgid="169206259253048106">"Neteftirlit"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Slökkva á VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Aftengja VPN-net"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Skoða stefnur"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> stjórnar tækinu þínu.\n\nKerfisstjórinn getur fylgst með og breytt stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengjast tækinu þínu og staðsetningarupplýsingum tækisins.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Fyrirtækið þitt stjórnar tækinu þínu.\n\nKerfisstjórinn getur fylgst með og breytt stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengjast tækinu þínu og staðsetningarupplýsingum tækisins.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Fyrirtækið þitt setti upp CA-vottorð á þessu tæki. Eftirlit kann að vera haft með öruggri netnotkun þinni eða henni kann að vera breytt."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Fyrirtækið þitt setti upp CA-vottorð á vinnusniðinu þínu. Eftirlit kann að vera haft með öruggri netnotkun þinni eða henni kann að vera breytt."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"CA-vottorð er uppsett á þessu tæki. Eftirlit kann að vera haft með öruggri netnotkun þinni eða henni kann að vera breytt."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Kerfisstjóri hefur kveikt á eftirliti netkerfa, sem fylgist með netumferð á tækinu þínu."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Þú ert með tengingu við <xliff:g id="VPN_APP">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Þú ert með tengingu við <xliff:g id="VPN_APP_0">%1$s</xliff:g> og <xliff:g id="VPN_APP_1">%2$s</xliff:g>, sem geta fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Vinnusniðið þitt er tengt <xliff:g id="VPN_APP">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Einkaprófíllinn þinn er tengdur við <xliff:g id="VPN_APP">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Þessu tæki er stýrt af <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> tilkynning: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Hugsanlega virkar forritið ekki ef skjánum er skipt upp."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Forritið styður ekki að skjánum sé skipt."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Opna stillingar."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Opna flýtistillingar."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Loka flýtistillingum."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Skyndiforrit"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Skyndiforrit þurfa ekki uppsetningu."</string>
<string name="app_info" msgid="6856026610594615344">"Forritsupplýsingar"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Fara á vefinn"</string>
<string name="mobile_data" msgid="7094582042819250762">"Farsímagögn"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Slökkt á Wi-Fi"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Slökkt á Bluetooth"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index f0a7ef33abbb..b4cf6d5652e9 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Dati mobili disattivati"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modalità aereo."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nessuna SIM presente."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambio rete operatore."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Visualizza i dettagli relativi alla batteria"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profilo di lavoro collegato a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profilo personale collegato a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Dispositivo collegato a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gestione dei dispositivi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoraggio del profilo"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoraggio rete"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Disattiva VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Scollega VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Visualizza le norme"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Il dispositivo è gestito da <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app, dati associati al dispositivo e informazioni sulla posizione del dispositivo.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Il dispositivo è gestito dalla tua organizzazione.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app, dati associati al dispositivo e informazioni sulla posizione del dispositivo.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"La tua organizzazione ha installato un\'autorità di certificazione sul dispositivo. Il tuo traffico di rete protetto potrebbe essere monitorato o modificato."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"La tua organizzazione ha installato un\'autorità di certificazione nel tuo profilo di lavoro. Il tuo traffico di rete protetto potrebbe essere monitorato o modificato."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Sul dispositivo è installata un\'autorità di certificazione. Il tuo traffico di rete protetto potrebbe essere monitorato o modificato."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"L\'amministratore ha attivato i log di rete, che consentono di monitorare il traffico sul dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Sei connesso a <xliff:g id="VPN_APP">%1$s</xliff:g>, che consente di monitorare le attività di rete, inclusi siti web, email e app."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Sei connesso a <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, che consentono di monitorare le attività di rete, inclusi siti web, email e app."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Il tuo profilo di lavoro è collegato a <xliff:g id="VPN_APP">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi siti web, email e app."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Il tuo profilo personale è collegato a <xliff:g id="VPN_APP">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi siti web, email e app."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Il dispositivo è gestito dall\'app <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notifica di <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"L\'app potrebbe non funzionare con lo schermo diviso."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"L\'app non supporta la modalità Schermo diviso."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Apri le impostazioni."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Apri le impostazioni rapide."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Chiudi le impostazioni rapide."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"App istantanee"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Le app istantanee non richiedono l\'installazione."</string>
<string name="app_info" msgid="6856026610594615344">"Informazioni app"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Vai sul Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dati mobili"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi disattivato"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth non attivo"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 3d3b38de3b6a..3e864edf40f9 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -154,14 +154,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"קצה"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"‏אין כרטיס SIM."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"חבילת גלישה"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"חבילת הגלישה פועלת"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"חבילת הגלישה כבויה"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"‏שיתוף אינטרנט דרך Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"מצב טיסה"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"‏אין כרטיס SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"רשת ספק משתנה."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"פתיחת פרטי סוללה"</string>
@@ -244,11 +243,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"הסוללה נטענת"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"‏השימוש בנתוני 2G-3G מושהה"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"‏השימוש בנתוני 4G מושהה"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"חבילת הגלישה מושהה"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"השימוש בנתונים מושהה"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"הגעת למגבלת הנתונים שהגדרת. אתה כבר לא משתמש בחבילת גלישה.\n\nאם תמשיך, ייתכנו חיובים על שימוש בנתונים."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"המשך"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"אין חיבור לאינטרנט"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‏Wi-Fi מחובר"</string>
@@ -323,8 +320,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"נקודה לשיתוף אינטרנט"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"הודעות"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"פנס"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"חבילת גלישה"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"שימוש בנתונים"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"מכסת נתונים נותרת"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"חריגה מההגבלה"</string>
@@ -437,8 +433,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"פרופיל העבודה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"הפרופיל האישי מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"המכשיר מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ניהול מכשירים"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"מעקב אחר פרופיל"</string>
<string name="monitoring_title" msgid="169206259253048106">"מעקב אחר פעילות ברשת"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -447,18 +442,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"‏השבת VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"‏נתק את ה-VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"הצג מדיניות"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"המכשיר שלך מנוהל על ידי <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nמנהל המערכת יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר.\n\nלמידע נוסף, פנה למנהל המערכת."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"המכשיר מנוהל על ידי הארגון שלך.\n\nמנהל המערכת יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר.\n\nלמידע נוסף, פנה למנהל המערכת."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"הארגון שלך התקין רשות אישורים במכשיר. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"הארגון שלך התקין רשות אישורים בפרופיל העבודה. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"במכשיר זה מותקנת רשות אישורים. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"מנהל המערכת הפעיל את התכונה \'רישום התנועה ברשת\', שמנטרת את תנועת הנתונים במכשיר."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"אתה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"אתה מחובר לאפליקציות <xliff:g id="VPN_APP_0">%1$s</xliff:g> ו-<xliff:g id="VPN_APP_1">%2$s</xliff:g>, שיכולות לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"פרופיל העבודה שלך מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"הפרופיל האישי שלך מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"המכשיר שלך מנוהל על ידי <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -577,12 +568,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>‏, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> ו-<xliff:g id="NUMBER_5">%3$d</xliff:g> אחרים</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>‏, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> ו-<xliff:g id="NUMBER_2">%3$d</xliff:g> אחר</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"פקדי ההודעות של <xliff:g id="APP_NAME">%1$s</xliff:g> נפתחו"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"פקדי ההודעות של <xliff:g id="APP_NAME">%1$s</xliff:g> נסגרו"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"התר הודעות מערוץ זה"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"כל הקטגוריות"</string>
<string name="notification_more_settings" msgid="816306283396553571">"הגדרות נוספות"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"התאם אישית: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -720,6 +708,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"הודעת <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"ייתכן שהיישום לא יפעל עם מסך מפוצל."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"האפליקציה אינה תומכת במסך מפוצל."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"פתיחת הגדרות."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"פתיחה של \'הגדרות מהירות\'."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"סגירה של \'הגדרות מהירות\'."</string>
@@ -738,14 +730,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"תפריט \'תמונה בתוך תמונה\'"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> במצב תמונה בתוך תמונה"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"אם אינך רוצה שהתכונה הזו תשמש את <xliff:g id="NAME">%s</xliff:g>, הקש כדי לפתוח את ההגדרות ולכבות את התכונה."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"הפעל"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"השהה"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"דלג אל הבא"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"דלג אל הקודם"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"הטלפון כבה עקב התחממות"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"הטלפון פועל כרגיל עכשיו"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n • תשתמש באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n • תוריד או תעלה קבצים גדולים\n • תשתמש בטלפון בטמפרטורות גבוהות"</string>
@@ -773,8 +761,7 @@
<string name="instant_apps" msgid="6647570248119804907">"אפליקציות אינסטנט"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"אפליקציות אינסטנט לא דורשות התקנה."</string>
<string name="app_info" msgid="6856026610594615344">"פרטי אפליקציה"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"התחבר לאינטרנט"</string>
<string name="mobile_data" msgid="7094582042819250762">"נתונים סלולריים"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"‏Wi-Fi כבוי"</string>
<string name="bt_is_off" msgid="2640685272289706392">"‏Bluetooth כבוי"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 980ad5bec36c..011f439c5479 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"モバイルデータ OFF"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothテザリング。"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"機内モード。"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIMカードが挿入されていません。"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"携帯通信会社のネットワークを変更します。"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"電池の詳細情報を開きます"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"仕事用プロファイルは <xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"個人用プロファイルは <xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"端末は <xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"端末管理"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"プロファイルの監視"</string>
<string name="monitoring_title" msgid="169206259253048106">"ネットワーク監視"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPNを無効にする"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNを切断"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"ポリシーを見る"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"この端末は <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> によって管理されています。\n\n管理者は、この端末に関連付けられた設定、コーポレート アクセス、アプリ、データと、端末の位置情報を監視、管理できます。\n\n詳しくは管理者にお問い合わせください。"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"この端末は組織によって管理されています。\n\n管理者は、この端末に関連付けられた設定、コーポレート アクセス、アプリ、データと、端末の位置情報を監視、管理できます。\n\n詳しくは管理者にお問い合わせください。"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"組織によってこの端末に認証局がインストールされました。保護されたネットワーク トラフィックが監視、変更される場合があります。"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"組織によって、あなたの仕事用プロファイルに認証局がインストールされました。保護されたネットワーク トラフィックが監視、変更される場合があります。"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"この端末には認証局がインストールされています。保護されたネットワーク トラフィックが監視、変更される可能性があります。"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"管理者がネットワーク ログを有効にしているため、この端末のトラフィックが監視されています。"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"<xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています。このアプリはあなたのネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> と <xliff:g id="VPN_APP_1">%2$s</xliff:g> に接続しています。これらのアプリは、あなたのネットワーク アクティビティ(メール、アプリ、ウェブサイト)を監視できます。"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"この仕事用プロファイルは <xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています。このアプリはあなたのネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"この個人用プロファイルは <xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています。このアプリはあなたのネットワーク アクティビティ(メール、アプリ、ウェブサイト)を監視できます。"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"この端末は <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>で管理されています。"</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> の通知: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"アプリは分割画面では動作しないことがあります。"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"アプリで分割画面がサポートされていません。"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"設定を開きます。"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"クイック設定を開きます。"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"クイック設定を閉じます。"</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant Apps はインストールせずに利用できます。"</string>
<string name="app_info" msgid="6856026610594615344">"アプリ情報"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ウェブページを開く"</string>
<string name="mobile_data" msgid="7094582042819250762">"モバイルデータ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi は OFF です"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth は OFF です"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index d31179f11fa3..4d2b4b4e5a4f 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM არ არის."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"მობილური ინტერნეტი"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"მობილური ინტერნეტი ჩართულია"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"მობილური ინტერნეტი გამორთულია"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-ის ჩართვა"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"თვითმფრინავის რეჟიმი"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM ბარათი არ არის."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ოპერატორის ქსელის შეცვლა"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ბატარეის დეტალების გახსნა"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"იტენება"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G მონაცემები შეჩერებულია"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G მონაცემები შეჩერებულია"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"მობილური ინტერნეტი დაპაუზებულია"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"მონაცემები შეჩერებულია"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"მიღწეულია მონაცემთა მოხმარების თქვენ მიერ მითითებული ლიმიტი. ამიტომ, მობილური ინტერნეტის გამოყენება აღარ ხდება.\n\nგანახლების შემთხვევაში, შეიძლება მობილური ინტერნეტის საფასურის გადახდა მოგიწიოთ."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"გაგრძელება"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ინტერნეტ კავშირი არ არის"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi დაკავშირებულია"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"წვდომის წერტილი"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"შეტყობინებები"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ფანარი"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"მობილური ინტერნეტი"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"მონაცემთა მოხმარება"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"დარჩენილი მონაცემები"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"ლიმიტი გადაჭარბებულია"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"სამსახურის პროფილი დაკავშირებულია <xliff:g id="VPN_APP">%1$s</xliff:g>-თან"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"პირადი პროფილი დაკავშირებულია <xliff:g id="VPN_APP">%1$s</xliff:g>-თან"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"მოწყობილობა დაკავშირებულია <xliff:g id="VPN_APP">%1$s</xliff:g>-თან"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"მოწყობილობის მართვა"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"პროფილის მონიტორინგი"</string>
<string name="monitoring_title" msgid="169206259253048106">"ქსელის მონიტორინგი"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN-ის გაუქმება"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-ის გათიშვა"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"წესების ნახვა"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"თქვენს მოწყობილობას მართავს <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია მოწყობილობასთან დაკავშირებული პარამეტრების, კორპორაციული წვდომის, აპებისა და მონაცემების (მათ შორის, თქვენი მოწყობილობის მდებარეობის ინფორმაციის) მონიტორინგი და მართვა.\n\nდამატებითი ინფორმაციისთვის დაუკავშირდით თქვენს ადმინისტრატორს."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"თქვენს მოწყობილობას მართავს თქვენი ორგანიზაცია.\n\nთქვენს ადმინისტრატორს შეუძლია მოწყობილობასთან დაკავშირებული პარამეტრების, კორპორაციული წვდომის, აპებისა და მონაცემების (მათ შორის, თქვენი მოწყობილობის მდებარეობის ინფორმაციის) მონიტორინგი და მართვა.\n\nდამატებითი ინფორმაციისთვის დაუკავშირდით თქვენს ადმინისტრატორს."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"თქვენმა ორგანიზაციამ ამ მოწყობილობაზე სერტიფიცირების ორგანო დააინსტალირა. თქვენი ქსელის დაცული ტრაფიკი შეიძლება შეიცვალოს, ან მასზე მონიტორინგი განხორციელდეს."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"თქვენმა ორგანიზაციამ სამსახურის პროფილში სერტიფიცირების ორგანო დააინსტალირა. თქვენი ქსელის დაცული ტრაფიკი შეიძლება შეიცვალოს, ან მასზე მონიტორინგი განხორციელდეს."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ამ მოწყობილობაზე დაინსტალირებულია სერტიფიცირების ორგანო. თქვენი ქსელის დაცული ტრაფიკი შეიძლება შეიცვალოს, ან მასზე მონიტორინგი განხორციელდეს."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"თქვენმა ადმინისტრატორმა ჩართო ქსელის ჟურნალირება, რომელიც თქვენი მოწყობილობის ტრაფიკის მონიტორინგს ახორციელებს."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"თქვენ დაკავშირებული ხართ <xliff:g id="VPN_APP">%1$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის (მათ შორის, ელფოსტის, აპებისა და ვებსაიტების) მონიტორინგი."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"თქვენ დაკავშირებული ხართ <xliff:g id="VPN_APP_0">%1$s</xliff:g>-სა და <xliff:g id="VPN_APP_1">%2$s</xliff:g>-თან, რომელთაც შეუძლია თქვენი ქსელის აქტივობის (მათ შორის, ელფოსტის, აპებისა და ვებსაიტების) მონიტორინგი."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"თქვენი სამსახურის პროფილი დაკავშირებულია <xliff:g id="VPN_APP">%1$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის (მათ შორის, ელფოსტის, აპებისა და ვებსაიტების) მონიტორინგი."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"თქვენი პირადი პროფილი დაკავშირებულია <xliff:g id="VPN_APP">%1$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის (მათ შორის, ელფოსტის, აპებისა და ვებსაიტების) მონიტორინგი."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"თქვენს მოწყობილობას მართავს <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> და <xliff:g id="NUMBER_5">%3$d</xliff:g> სხვა</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> და <xliff:g id="NUMBER_2">%3$d</xliff:g> სხვა</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"შეტყობინებების მართვა „<xliff:g id="APP_NAME">%1$s</xliff:g>“-ისთვის გახსნილია"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"შეტყობინებების მართვა „<xliff:g id="APP_NAME">%1$s</xliff:g>“-ისთვის დახურულია"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ამ არხიდან შეტყობინებების დაშვება"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"ყველა კატეგორია"</string>
<string name="notification_more_settings" msgid="816306283396553571">"დამატებითი პარამეტრები"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"მორგება: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> შეტყობინება: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"აპმა შეიძლება არ იმუშაოს გაყოფილი ეკრანის რეჟიმში."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ეკრანის გაყოფა არ არის მხარდაჭერილი აპის მიერ."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"პარამეტრების გახსნა."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"სწრაფი პარამეტრების გახსნა."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"სწრაფი პარამეტრების დახურვა."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"მენიუ „გამოსახულება გამოსახულებაში“"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> იყენებს რეჟიმს „გამოსახულება გამოსახულებაში“"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"თუ არ გსურთ, რომ <xliff:g id="NAME">%s</xliff:g> ამ ფუნქციას იყენებდეს, აქ შეხებით შეგიძლიათ გახსნათ პარამეტრები და გამორთოთ."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"დაკვრა"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"დაპაუზება"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"შემდეგზე გადასვლა"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"წინაზე გადასვლა"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ტელეფონი გამოირთო გაცხელების გამო"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"თქვენი ტელეფონი ახლა ჩვეულებრივად მუშაობს"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"თქვენი ტელეფონი გამოირთო გასაგრილებლად, რადგან ის მეტისმეტად გაცხელდა. ახლა ის ჩვეულებრივად მუშაობს.\n\nტელეფონის გაცხელების მიზეზებია:\n • რესურსტევადი აპების გამოყენება (მაგ. სათამაშო, ვიდეო ან ნავიგაციის აპების)\n • დიდი ფაილების ჩამოტვირთვა ან ატვირთვა\n • ტელეფონის გამოყენება მაღალი ტემპერატურისას"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"მყისიერი აპები"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"მყისიერი აპები ინსტალაციას არ საჭიროებს."</string>
<string name="app_info" msgid="6856026610594615344">"აპის შესახებ"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ვებზე გადასვლა"</string>
<string name="mobile_data" msgid="7094582042819250762">"მობილური ინტერნეტი"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi გამორთულია"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth გამორთულია"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 75aa5e3ecb46..6041c36580d1 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобильдік деректер өшірулі"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth тетеринг."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Ұшақ режимі."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM картасы жоқ."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Оператор желісі өзгертілуде."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Батарея мәліметтерін ашу"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Жұмыс профилі <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылған"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Жеке профиль <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылған"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Құрылғы <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылған"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Құрылғыны басқару"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профильді бақылау"</string>
<string name="monitoring_title" msgid="169206259253048106">"Желіні бақылау"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN (Виртуалды жеке желі)"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN функциясын өшіру"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN желісін ажырату"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Саясаттарды көру"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Құрылғыңызды <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> басқарады.\n\nӘкімші параметрлерді, корпоративтік кіру құқығын, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғыңыздың орналасқан жері туралы ақпаратты бақылай және басқара алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Құрылғыңызды ұйымыңыз басқарады.\n\nӘкімші параметрлерді, корпоративтік кіру құқығын, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғыңыздың орналасқан жері туралы ақпаратты бақылай және басқара алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Ұйымыңыз осы құрылғыда сертификат орнатқан. Қорғалған желі трафигіңіз бақылануы немесе өзгертілуі мүмкін."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Ұйымыңыз жұмыс профиліңізде сертификат орнатқан. Қорғалған желі трафигіңіз бақылануы немесе өзгертілуі мүмкін."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Осы құрылғыда сертификат орнатылған. Қорғалған желі трафигіңіз бақылануы немесе өзгертілуі мүмкін."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Әкімші құрылғыңыздағы трафикті бақылайтын желі журналын жүргізуді қосқан."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Желідегі әрекеттеріңізді, соның ішінде электрондық хабарларды, қолданбаларды және вебсайттарды бақылай алатын <xliff:g id="VPN_APP">%1$s</xliff:g> желісіне қосылдыңыз."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Желідегі әрекеттеріңізді, соның ішінде электрондық хабарларды, қолданбаларды және вебсайттарды бақылай алатын <xliff:g id="VPN_APP_0">%1$s</xliff:g> және <xliff:g id="VPN_APP_1">%2$s</xliff:g> желілеріне қосылдыңыз."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Жұмыс профиліңіз желідегі белсенділігіңізді, соның ішінде электрондық хабарларды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылған."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Жеке профиліңіз желідегі белсенділігіңізді, соның ішінде электрондық хабарларды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылған."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Құрылғыңызды <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> басқарады."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> хабарландыруы: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Қолданба бөлінген экранда жұмыс істемеуі мүмкін."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Қодланба бөлінген экранды қолдамайды."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Параметрлерді ашу."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Жылдам параметрлерді ашу."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Жылдам параметрлерді жабу."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Лездік қолданбаларды орнатудың қажеті жоқ."</string>
<string name="app_info" msgid="6856026610594615344">"Қолданба ақпараты"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Вебке өту"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобильдік деректер"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi өшірулі"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth өшірулі"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index eb351b334f75..f48d0642bfb0 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"វ៉ាយហ្វាយ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"គ្មាន​ស៊ីម​កាត។"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"ទិន្នន័យ​ទូរសព្ទចល័ត"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ទិន្នន័យទូរសព្ទចល័តបានបើក"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"ទិន្នន័យទូរសព្ទចល័តបានបិទ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ការ​ភ្ជាប់​ប៊្លូធូស។"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"របៀប​​ពេលជិះ​យន្តហោះ"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"គ្មានស៊ីមកាតទេ។"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ការប្តូរបណ្តាញក្រុមហ៊ុនផ្តល់សេវា។"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"បើកព័ត៌មានលម្អិតអំពីថ្ម"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"កំពុង​សាក​ថ្ម"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"ទិន្នន័យ 2G-3G ត្រូវបានផ្អាក"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"ទិន្នន័យ 4G ត្រូវបានផ្អាក"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ទិន្នន័យទូរសព្ទចល័តបានផ្អាក"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ទិន្នន័យត្រូវបានផ្អាក"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"បានឈានដល់កម្រិតទិន្នន័យដែលអ្នកបានកំណត់ហើយ។ ឥឡូវ​អ្នកមិនប្រើទិន្នន័យទូរសព្ទចល័តទៀតទេ។\n\nអាចនឹងគិតថ្លៃលើការប្រើទិន្នន័យ ប្រសិនបើអ្នកបន្តប្រើឡើងវិញ។"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"បន្ត"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"គ្មាន​ការ​តភ្ជាប់​អ៊ីនធឺណិត"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"បាន​ភ្ជាប់​វ៉ាយហ្វាយ"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ហតស្ប៉ត"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"ការ​ជូនដំណឹង"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ពិល"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ទិន្នន័យ​ទូរសព្ទចល័ត"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ការ​ប្រើ​ទិន្នន័យ"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ទិន្នន័យ​នៅសល់"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"លើស​ដែន​កំណត់"</string>
@@ -350,7 +346,7 @@
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"បាន​បញ្ចូល​ថ្ម​​"</string>
- <string name="expanded_header_battery_charging" msgid="205623198487189724">"កំពុង​បញ្ចូល​ថ្ម"</string>
+ <string name="expanded_header_battery_charging" msgid="205623198487189724">"កំពុងសាក​ថ្ម"</string>
<string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> រហូត​ដល់ពេញ"</string>
<string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"មិន​កំពុង​បញ្ចូល​ថ្ម"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"បណ្ដាញ​អាច​\nត្រូវ​បាន​ត្រួតពិនិត្យ​"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"កម្រងព័ត៌មាន​ការងារ​ត្រូវបាន​ភ្ជាប់ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"កម្រងព័ត៌មាន​ផ្ទាល់ខ្លួន​ត្រូវបាន​ភ្ជាប់​ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"ឧបករណ៍​ត្រូវបាន​ភ្ជាប់​ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ការ​គ្រប់គ្រង​ឧបករណ៍"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"តាមដានប្រវត្ថិរូប"</string>
<string name="monitoring_title" msgid="169206259253048106">"ការ​ត្រួតពិនិត្យ​បណ្ដាញ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"បិទ VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"ផ្ដាច់ VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"មើល​គោលការណ៍"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"ឧបករណ៍​របស់អ្នក​ស្ថិត​ក្រោម​ការ​គ្រប់គ្រង​របស់ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>។\n\nអ្នក​គ្រប់គ្រង​របស់អ្នក​អាចតាមដាន និង​គ្រប់គ្រង​ការកំណត់ ការចូលប្រើជាលក្ខណៈក្រុមហ៊ុន កម្មវិធី ទិន្នន័យ​ដែលពាក់ព័ន្ធ​នឹង​ឧបករណ៍​របស់អ្នក និង​ព័ត៌មាន​ទីតាំង​នៃឧបករណ៍​របស់​អ្នក។\n\nសម្រាប់​ព័ត៌មាន​បន្ថែម សូម​ទាក់ទងអ្នក​គ្រប់គ្រង​របស់​អ្នក។"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"ឧបករណ៍​របស់អ្នក​ស្ថិត​ក្រោម​ការ​គ្រប់គ្រង​របស់ស្ថាប័ន​អ្នក។\n\nអ្នក​គ្រប់គ្រង​របស់អ្នក​អាចតាមដាន និង​គ្រប់គ្រង​ការកំណត់ ការចូលប្រើជាលក្ខណៈក្រុមហ៊ុន កម្មវិធី ទិន្នន័យ​ដែលពាក់ព័ន្ធ​នឹង​ឧបករណ៍​របស់អ្នក និង​ព័ត៌មាន​ទីតាំង​នៃឧបករណ៍​របស់​អ្នក។\n\nសម្រាប់​ព័ត៌មាន​បន្ថែម សូម​ទាក់ទង​អ្នក​គ្រប់គ្រង​របស់​អ្នក។"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ស្ថាប័ន​របស់អ្នក​បានដំឡើង​អាជ្ញាធរវិញ្ញាបនបត្រនៅលើ​ឧបករណ៍​នេះ។ ចរាចរណ៍​បណ្តាញដែលមាន​សុវត្ថិភាព​របស់អ្នក​អាច​ត្រូវបាន​តាមដាន ឬ​កែសម្រួល។"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ស្ថាប័នរបស់អ្នក​បានដំឡើង​អាជ្ញាធរវិញ្ញាបនបត្រ​នៅក្នុង​កម្រងព័ត៌មាន​ការងារ។ ចរាចរណ៍​បណ្តាញដែលមាន​សុវត្ថិភាព​របស់អ្នក​អាច​ត្រូវបាន​តាមដាន ឬ​កែសម្រួល។"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"បាន​ដំឡើង​អាជ្ញាធរវិញ្ញាបនបត្រ​នៅលើ​ឧបករណ៍​នេះ។ ចរាចរណ៍​បណ្តាញដែលមានសុវត្ថិភាព​របស់អ្នក​អាច​ត្រូវបាន​តាមដាន ឬ​កែសម្រួល។"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"អ្នក​គ្រប់គ្រង​របស់អ្នក​បាន​បើក​ការ​ធ្វើ​កំណត់ហេតុ​បណ្តាញ​ ដែល​នឹង​តាមដាន​ចរាចរណ៍​នៅលើ​ឧបករណ៍​របស់អ្នក។"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"អ្នកបានភ្ជាប់ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g> ដែលអាចតាមដានសកម្មភាពក្នុងបណ្តាញរបស់អ្នក រួមទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រផងដែរ។"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"អ្នកបាន​ភ្ជាប់ទៅ <xliff:g id="VPN_APP_0">%1$s</xliff:g> និង <xliff:g id="VPN_APP_1">%2$s</xliff:g> ដែលអាច​តាមដាន​សកម្មភាព​បណ្តាញ​របស់អ្នក រួមទាំង​អ៊ីមែល កម្មវិធី និង​គេហទំព័រ​ផងដែរ។"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"កម្រងព័ត៌មាន​ការងារ​របស់អ្នក​ត្រូវបាន​ភ្ជាប់​ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g> ដែលអាច​តាមដាន​សកម្មភាព​បណ្តាញ​របស់អ្នក រួមទាំងអ៊ីមែល កម្មវិធី និង​គេហទំព័រ​ផងដែរ។"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"កម្រងព័ត៌មាន​ផ្ទាល់ខ្លួន​របស់អ្នក​ត្រូវបាន​ភ្ជាប់​ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g> ដែល​អាច​តាមដាន​សកម្មភាព​បណ្តាញ​របស់អ្នក រួមទាំង​អ៊ីមែល កម្មវិធី និង​គេហទំព័រ​ផងដែរ។"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ឧបករណ៍របស់អ្នកគ្រប់គ្រងដោយ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ។"</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, និង <xliff:g id="NUMBER_5">%3$d</xliff:g> ផ្សេងទៀត</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>, និង <xliff:g id="NUMBER_2">%3$d</xliff:g> ផ្សេងទៀត</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ការគ្រប់គ្រងការជូនដំណឹងសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> បានបើក"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"ការគ្រប់គ្រងការជូនដំណឹងសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> បានបិទ"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"អនុញ្ញាតឲ្យមានការជូនដំណឹងពីប៉ុស្តិ៍នេះ"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"ប្រភេទ​ទាំងអស់"</string>
<string name="notification_more_settings" msgid="816306283396553571">"ការកំណត់ច្រើនទៀត"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"ប្ដូរ​តាម​បំណង៖ <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> ការជូនដំណឹង៖ <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"កម្មវិធីអាចនឹងមិនដំណើរការនៅលើអេក្រង់បំបែកទេ"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"កម្មវិធីមិនគាំទ្រអេក្រង់បំបែកជាពីរទេ"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"បើកការកំណត់"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"បើកការកំណត់រហ័ស"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"បិទការកំណត់រហ័ស"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"ម៉ឺនុយ​រូបភាព​ក្នុងរូបភាព"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ស្ថិតក្នុងមុខងាររូបភាពក្នុងរូបភាព"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"ប្រសិនបើ​អ្នក​មិន​ចង់​ឲ្យ <xliff:g id="NAME">%s</xliff:g> ប្រើ​មុខងារ​នេះ​ទេ សូមចុច​ដើម្បី​បើក​ការកំណត់ រួច​បិទ​វា។"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"លេង"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"ផ្អាក"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"រំលងទៅបន្ទាប់"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"រំលងទៅក្រោយ"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ទូរសព្ទ​បាន​បិទដោយសារ​វា​ឡើងកម្តៅ"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ឥឡូវនេះ​ទូរសព្ទ​របស់អ្នក​កំពុង​ដំណើរការ​ធម្មតា"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ទូរសព្ទ​របស់អ្នក​ក្តៅពេក ដូច្នេះ​វាបាន​បិទ​ដើម្បី​បន្ថយ​កម្តៅ។ ឥឡូវនេះ ​ទូរសព្ទ​របស់អ្នក​កំពុង​ដំណើរការ​ធម្មតា។\n\nទូរសព្ទ​របស់អ្នក​អាចនឹង​ឡើង​កម្តៅ​ខ្លាំងជ្រុល ប្រសិន​បើអ្នក៖\n • ប្រើប្រាស់​កម្មវិធី​ដែល​ប្រើប្រាស់ទិន្នន័យច្រើនក្នុងរយៈពេលខ្លី (ដូចជាហ្គេម វីដេអូ ឬកម្មវិធីរុករក)\n • ទាញយក ឬ​បង្ហោះ​ឯកសារដែលមានទំហំធំ\n • ប្រើប្រាស់​ទូរសព្ទ​របស់អ្នក​នៅកន្លែង​មានសីតុណ្ហភាព​ខ្ពស់"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"កម្មវិធី​ប្រើ​ភ្លាមៗ"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"កម្មវិធី​ប្រើ​ភ្លាមៗ​មិន​តម្រូវ​ឲ្យ​មានការ​ដំឡើង​ទេ។"</string>
<string name="app_info" msgid="6856026610594615344">"ព័ត៌មាន​កម្មវិធី"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ចូលទៅកាន់បណ្តាញ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ទិន្នន័យ​ចល័ត"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi បាន​បិទ"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ប៊្លូធូស​បាន​បិទ"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index f17b3af216e4..97b467621e1b 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -24,7 +24,7 @@
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
<string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ನಿಮ್ಮ ಇತ್ತೀಚಿನ ಪರದೆಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸು"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸಿ"</string>
<plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
<item quantity="one">ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು</item>
<item quantity="other">ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು</item>
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ಎಡ್ಜ್‌"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"ವೈ-ಫೈ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ಯಾವುದೇ ಸಿಮ್‌ ಇಲ್ಲ."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"ಮೊಬೈಲ್ ಡೇಟಾ"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ಮೊಬೈಲ್ ಡೇಟಾ ಆನ್"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ಬ್ಲೂಟೂತ್‌‌ ಟೆಥರಿಂಗ್."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ಏರೋಪ್ಲೇನ್‌ ಮೋಡ್‌"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"ಯಾವುದೇ ಸಿಮ್‌ ಇಲ್ಲ."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ವಾಹಕ ನೆಟ್‌ವರ್ಕ್ ಬದಲಾಯಿಸುವಿಕೆ."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ಬ್ಯಾಟರಿ ವಿವರಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
@@ -177,7 +176,7 @@
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
<string name="accessibility_work_mode" msgid="2478631941714607225">"ಕೆಲಸದ ಮೋಡ್"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸು."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಿ."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ ತೆರೆಯಿರಿ."</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ಡೇಟಾವನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ಡೇಟಾ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ಡೇಟಾ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ಡೇಟಾ ಬಳಕೆಯು ನೀವು ಹೊಂದಿಸಿರುವ ಮಿತಿಯನ್ನು ತಲುಪಿದೆ. ಹೀಗಾಗಿ ನೀವು ಈಗ ಮೊಬೈಲ್ ಡೇಟಾ ಬಳಸುತ್ತಿಲ್ಲ.\n\nನೀವು ಮುಂದುವರಿದರೆ, ಡೇಟಾ ಬಳಕೆಗೆ ಶುಲ್ಕ ತೆರಬೇಕಾಗಬಹುದು."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ಮುಂದುವರಿಸು"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವಿಲ್ಲ"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ವೈ-ಫೈ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ಹಾಟ್‌ಸ್ಪಾಟ್"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ಫ್ಲಾಶ್‌ಲೈಟ್‌"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ಮೊಬೈಲ್ ಡೇಟಾ"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ಡೇಟಾ ಬಳಕೆ"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ಉಳಿದಿರುವ ಡೇಟಾ"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"ಮಿತಿ ಮೀರಿದೆ"</string>
@@ -359,8 +355,8 @@
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಎಡಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string>
<string name="zen_priority_introduction" msgid="3070506961866919502">"ಅಲಾರಮ್‌ಗಳು, ಜ್ಞಾಪನೆಗಳು, ಈವೆಂಟ್‌ಗಳು ಮತ್ತು ನೀವು ಸೂಚಿಸುವ ಕರೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ, ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳಿಂದ ನಿಮಗೆ ತೊಂದರೆ ಆಗುವುದಿಲ್ಲ."</string>
<string name="zen_priority_customize_button" msgid="7948043278226955063">"ಕಸ್ಟಮೈಸ್ ಮಾಡು"</string>
- <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಆಟಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ನಿಮಗೆ ಈಗಲೂ ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
- <string name="zen_silence_introduction" msgid="3137882381093271568">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಆಟಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ."</string>
+ <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಗೇಮ್‌ಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ನಿಮಗೆ ಈಗಲೂ ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
+ <string name="zen_silence_introduction" msgid="3137882381093271568">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಗೇಮ್‌ಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ."</string>
<string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"ಕೆಳಗೆ ಕಡಿಮೆ ಅವಸರದ ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"ತೆರೆಯಲು ಮತ್ತೆ ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"<xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಸಾಧನವನ್ನು ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ಸಾಧನ ನಿರ್ವಹಣೆ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ಪ್ರೊಫೈಲ್ ಮೇಲ್ವಿಚಾರಣೆ"</string>
<string name="monitoring_title" msgid="169206259253048106">"ನೆಟ್‌ವರ್ಕ್‌ ಪರಿವೀಕ್ಷಣೆ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ಸಂಪರ್ಕಕಡಿತಗೊಳಿಸಿ"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"ಕಾರ್ಯನೀತಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ನಿರ್ವಹಿಸುತ್ತಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ನಿರ್ವಹಿಸುತ್ತಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ, ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಸಾಧನದಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ಈ ಸಾಧನದಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನೆಟ್‌ವರ್ಕ್ ಲಾಗಿಂಗ್ ಆನ್ ಮಾಡಿದ್ದಾರೆ. ಇದು ನಿಮ್ಮ ಸಾಧನದ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುತ್ತದೆ."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"ನೀವು <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದೀರಿ. ಇದು ನಿಮ್ಮ ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳೂ ಸೇರಿದಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"ನೀವು <xliff:g id="VPN_APP_0">%1$s</xliff:g> ಹಾಗೂ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದೀರಿ. ಇವು ನಿಮ್ಮ ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳೂ ಸೇರಿದಂತೆ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ. ಇದು ನಿಮ್ಮ ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳೂ ಸೇರಿದಂತೆ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್ <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ. ಇದು ನಿಮ್ಮ ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳೂ ಸೇರಿದಂತೆ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ನಿಂದ ನಿರ್ವಹಿಸಲಾಗಿದೆ."</string>
@@ -495,7 +486,7 @@
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ಮರೆಮಾಡಿ"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು ನೀವು ಬಳಸುತ್ತಿರುವಿರಿ"</string>
<string name="stream_voice_call" msgid="4410002696470423714">"ಕರೆಮಾಡಿ"</string>
- <string name="stream_system" msgid="7493299064422163147">"ಸಿಸ್ಟಮ್"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ಸಿಸ್ಟಂ"</string>
<string name="stream_ring" msgid="8213049469184048338">"ರಿಂಗ್"</string>
<string name="stream_music" msgid="9086982948697544342">"ಮಾಧ್ಯಮ"</string>
<string name="stream_alarm" msgid="5209444229227197703">"ಅಲಾರಮ್"</string>
@@ -510,7 +501,7 @@
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s ವಾಲ್ಯೂಮ್ ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸಲಾಗಿದೆ. ವಜಾಗೊಳಿಸಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
<string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"ವಾಲ್ಯೂಮ್ ನಿಯಂತ್ರಣಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ"</string>
- <string name="system_ui_tuner" msgid="708224127392452018">"ಸಿಸ್ಟಮ್ UI ಟ್ಯೂನರ್"</string>
+ <string name="system_ui_tuner" msgid="708224127392452018">"ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"ಎಂಬೆಡ್ ಮಾಡಲಾದ ಬ್ಯಾಟರಿ ಶೇಕಡಾ ತೋರಿಸಿ"</string>
<string name="show_battery_percentage_summary" msgid="3215025775576786037">"ಚಾರ್ಜ್ ಮಾಡದಿರುವಾಗ ಸ್ಥಿತಿ ಪಟ್ಟಿ ಐಕಾನ್ ಒಳಗೆ ಬ್ಯಾಟರಿ ಮಟ್ಟದ ಶೇಕಡಾವನ್ನು ತೋರಿಸಿ"</string>
<string name="quick_settings" msgid="10042998191725428">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‍ಗಳು"</string>
@@ -533,12 +524,12 @@
<string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"ಹಾಟ್‌ಸ್ಪಾಟ್"</string>
<string name="accessibility_managed_profile" msgid="6613641363112584120">"ಕೆಲಸದ ಪ್ರೊಫೈಲ್"</string>
<string name="tuner_warning_title" msgid="7094689930793031682">"ಕೆಲವರಿಗೆ ಮೋಜು ಆಗಿದೆ ಎಲ್ಲರಿಗೆ ಇಲ್ಲ"</string>
- <string name="tuner_warning" msgid="8730648121973575701">"ಸಿಸ್ಟಮ್ UI ಟ್ಯೂನರ್ ನಿಮಗೆ Android ಬಳಕೆದಾರ ಅಂತರಸಂಪರ್ಕವನ್ನು ಸರಿಪಡಿಸಲು ಮತ್ತು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಹೆಚ್ಚುವರಿ ಮಾರ್ಗಗಳನ್ನು ನೀಡುತ್ತದೆ. ಈ ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯಗಳು ಭವಿಷ್ಯದ ಬಿಡುಗಡೆಗಳಲ್ಲಿ ಬದಲಾಗಬಹುದು, ವಿರಾಮವಾಗಬಹುದು ಅಥವಾ ಕಾಣಿಸಿಕೊಳ್ಳದಿರಬಹುದು. ಎಚ್ಚರಿಕೆಯಿಂದ ಮುಂದುವರಿಯಿರಿ."</string>
+ <string name="tuner_warning" msgid="8730648121973575701">"ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್ ನಿಮಗೆ Android ಬಳಕೆದಾರ ಅಂತರಸಂಪರ್ಕವನ್ನು ಸರಿಪಡಿಸಲು ಮತ್ತು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಹೆಚ್ಚುವರಿ ಮಾರ್ಗಗಳನ್ನು ನೀಡುತ್ತದೆ. ಈ ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯಗಳು ಭವಿಷ್ಯದ ಬಿಡುಗಡೆಗಳಲ್ಲಿ ಬದಲಾಗಬಹುದು, ವಿರಾಮವಾಗಬಹುದು ಅಥವಾ ಕಾಣಿಸಿಕೊಳ್ಳದಿರಬಹುದು. ಎಚ್ಚರಿಕೆಯಿಂದ ಮುಂದುವರಿಯಿರಿ."</string>
<string name="tuner_persistent_warning" msgid="8597333795565621795">"ಈ ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯಗಳು ಭವಿಷ್ಯದ ಬಿಡುಗಡೆಗಳಲ್ಲಿ ಬದಲಾಗಬಹುದು, ವಿರಾಮವಾಗಬಹುದು ಅಥವಾ ಕಾಣಿಸಿಕೊಳ್ಳದಿರಬಹುದು. ಎಚ್ಚರಿಕೆಯಿಂದ ಮುಂದುವರಿಯಿರಿ."</string>
<string name="got_it" msgid="2239653834387972602">"ಅರ್ಥವಾಯಿತು"</string>
- <string name="tuner_toast" msgid="603429811084428439">"ಅಭಿನಂದನೆಗಳು! ಸಿಸ್ಟಮ್ UI ಟ್ಯೂನರ್ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
+ <string name="tuner_toast" msgid="603429811084428439">"ಅಭಿನಂದನೆಗಳು! ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
<string name="remove_from_settings" msgid="8389591916603406378">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
- <string name="remove_from_settings_prompt" msgid="6069085993355887748">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ಸಿಸ್ಟಮ್ UI ಟ್ಯೂನರ್ ತೆಗೆದುಹಾಕುವುದೇ ಮತ್ತು ಅದರ ಎಲ್ಲಾ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸುವುದನ್ನು ನಿಲ್ಲಿಸುವುದೇ?"</string>
+ <string name="remove_from_settings_prompt" msgid="6069085993355887748">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್ ತೆಗೆದುಹಾಕುವುದೇ ಮತ್ತು ಅದರ ಎಲ್ಲಾ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸುವುದನ್ನು ನಿಲ್ಲಿಸುವುದೇ?"</string>
<string name="activity_not_found" msgid="348423244327799974">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ"</string>
<string name="clock_seconds" msgid="7689554147579179507">"ಗಡಿಯಾರದ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು"</string>
<string name="clock_seconds_desc" msgid="6282693067130470675">"ಸ್ಥಿತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಗಡಿಯಾರ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು. ಇದಕ್ಕೆ ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯು ಪರಿಣಾಮಬೀರಬಹುದು."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, ಮತ್ತು ಇತರ <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, ಮತ್ತು ಇತರ <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆರೆಯಲಾಗಿದೆ"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ಈ ಚಾನಲ್‌ನ ಅಧಿಸೂಚನೆಗಳಿಗೆ ಅನುಮತಿ ನೀಡಿ"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"ಎಲ್ಲ ವರ್ಗಗಳು"</string>
<string name="notification_more_settings" msgid="816306283396553571">"ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"ಕಸ್ಟಮೈಸ್: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> ಅಧಿಸೂಚನೆ: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"ವಿಭಜಿಸಿದ ಪರದೆಯಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಕೆಲಸ ಮಾಡದೇ ಇರಬಹುದು."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ಅಪ್ಲಿಕೇಶನ್ ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮುಚ್ಚಿ."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಮೆನು"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರದಲ್ಲಿದೆ"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆದು, ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"ಪ್ಲೇ"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"ವಿರಾಮಗೊಳಿಸಿ"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"ಮುಂದಕ್ಕೆ ಸ್ಕಿಪ್‌ ಮಾಡಿ"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"ಹಿಂದಕ್ಕೆ ಸ್ಕಿಪ್‌ ಮಾಡಿ"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ಫೋನ್ ಬಿಸಿಯಾಗಿದ್ದರಿಂದ ಆಫ್ ಆಗಿದೆ"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ಈಗ ನಿಮ್ಮ ಫೋನ್ ಎಂದಿನಂತೆ ಕೆಲಸ ಮಾಡುತ್ತಿದೆ"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ನಿಮ್ಮ ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾಗಿತ್ತು, ತಣ್ಣಗಾಗಲು ಅದು ತಾನಾಗಿ ಆಫ್ ಆಗಿದೆ. ಈಗ ನಿಮ್ಮ ಫೋನ್ ಎಂದಿನಂತೆ ಕೆಲಸ ಮಾಡುತ್ತಿದೆ.\n\nನಿಮ್ಮ ಫೋನ್ ಬಿಸಿಯಾಗಲು ಕಾರಣಗಳು:\n • ಹೆಚ್ಚು ಸಂಪನ್ಮೂಲ ಉಪಯೋಗಿಸುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಬಳಕೆ (ಉದಾ, ಗೇಮಿಂಗ್, ವೀಡಿಯೊ/ನ್ಯಾವಿಗೇಶನ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು)\n • ದೊಡ್ಡ ಫೈಲ್‌ಗಳ ಡೌನ್‌ಲೋಡ್ ಅಥವಾ ಅಪ್‌ಲೋಡ್\n • ಅಧಿಕ ಉಷ್ಣಾಂಶದಲ್ಲಿ ಫೋನಿನ ಬಳಕೆ"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ತತ್‌ಕ್ಷಣ ಆಪ್‌ಗಳು"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ತತ್‌ಕ್ಷಣ ಆಪ್‌ಗಳಿಗೆ ಸ್ಥಾಪನೆಯ ಅಗತ್ಯವಿಲ್ಲ."</string>
<string name="app_info" msgid="6856026610594615344">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ವೆಬ್‌ಗೆ ಹೋಗಿ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ಮೊಬೈಲ್ ಡೇಟಾ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"ವೈ-ಫೈ ಆಫ್ ಆಗಿದೆ"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ಬ್ಲೂಟೂತ್‌ ಆಫ್ ಆಗಿದೆ"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 5db9dc4ec7ea..58e1e7ce1e92 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM이 없습니다."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"모바일 데이터"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"모바일 데이터 사용"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"모바일 데이터 사용 중지"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"블루투스 테더링입니다."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"비행기 모드입니다."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM 카드가 없습니다."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"이동통신사 네트워크가 변경됩니다."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"배터리 세부정보 열기"</string>
@@ -244,11 +243,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"충전 중"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 데이터 사용 중지됨"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 데이터 사용 중지됨"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"모바일 데이터가 일시 중지됨"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"데이터 사용 중지됨"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"설정한 데이터 한도에 도달했습니다. 더 이상 모바일 데이터를 사용하지 않습니다.\n\n계속하면 데이터 사용량에 따른 요금이 부과될 수 있습니다."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"재개"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"인터넷에 연결되지 않음"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 연결됨"</string>
@@ -321,8 +318,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"핫스팟"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"알림"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"손전등"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"모바일 데이터"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"데이터 사용"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"잔여 데이터"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"한도 초과"</string>
@@ -435,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"직장 프로필이 <xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다."</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"개인 프로필이 <xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되어 있습니다."</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"기기가 <xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되어 있습니다."</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"기기 관리"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"프로필 모니터링"</string>
<string name="monitoring_title" msgid="169206259253048106">"네트워크 모니터링"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -445,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN 사용 중지"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN 연결 해제"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"정책 보기"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>에서 관리하는 기기입니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 관련된 데이터 및 기기의 위치 정보를 모니터링하고 관리할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"조직에서 관리하는 기기입니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 관련된 데이터 및 기기의 위치 정보를 모니터링하고 관리할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"조직에서 이 기기에 인증기관을 설치했습니다. 보안 네트워크 트래픽을 모니터링 또는 수정할 수 있습니다."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"조직에서 직장 프로필에 인증기관을 설치했습니다. 보안 네트워크 트래픽을 모니터링 또는 수정할 수 있습니다."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"이 기기에는 인증기관이 설치되어 있습니다. 보안 네트워크 트래픽을 모니터링 또는 수정할 수 있습니다."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"관리자가 기기에서 발생하는 트래픽을 모니터링하는 네트워크 로깅을 사용 설정했습니다."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"<xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> 및 <xliff:g id="VPN_APP_1">%2$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"직장 프로필이 <xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"개인 프로필이 <xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>에서 관리하는 기기입니다."</string>
@@ -571,12 +562,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> 외 <xliff:g id="NUMBER_5">%3$d</xliff:g>개</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> 외 <xliff:g id="NUMBER_2">%3$d</xliff:g>개</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> 알림 컨트롤을 열었습니다."</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> 알림 컨트롤을 닫았습니다."</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"이 채널의 알림을 허용합니다."</string>
<string name="notification_all_categories" msgid="5407190218055113282">"전체 카테고리"</string>
<string name="notification_more_settings" msgid="816306283396553571">"설정 더보기"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"맞춤설정: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -714,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> 알림: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"앱이 분할 화면에서 작동하지 않을 수 있습니다."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"앱이 화면 분할을 지원하지 않습니다."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"설정 열기"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"빠른 설정 열기"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"빠른 설정 닫기"</string>
@@ -732,14 +724,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"PIP 메뉴"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>에서 PIP 사용 중"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g>에서 이 기능이 사용되는 것을 원하지 않는 경우 탭하여 설정을 열고 기능을 사용 중지하세요."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"재생"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"일시중지"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"다음으로 건너뛰기"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"이전으로 건너뛰기"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"발열로 인해 휴대전화 전원이 종료됨"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"휴대전화가 정상적으로 실행 중입니다."</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"휴대전화가 과열되어 온도를 낮추기 위해 전원이 종료되었습니다. 지금은 휴대전화가 정상적으로 실행 중입니다.\n\n휴대전화가 과열되는 이유는 다음과 같습니다.\n • 리소스를 많이 사용하는 앱 사용(예: 게임, 동영상 또는 내비게이션 앱)\n • 대용량 파일을 다운로드 또는 업로드\n • 온도가 높은 곳에서 휴대폰 사용"</string>
@@ -767,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"빠른 실행 앱"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"빠른 실행 앱은 설치가 필요하지 않습니다."</string>
<string name="app_info" msgid="6856026610594615344">"앱 정보"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"웹으로 이동"</string>
<string name="mobile_data" msgid="7094582042819250762">"모바일 데이터"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi가 사용 중지됨"</string>
<string name="bt_is_off" msgid="2640685272289706392">"블루투스가 사용 중지됨"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 457df7d04261..7f2a25a22168 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -152,15 +152,14 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM карта жок."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Мобилдик Интернет"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Мобилдик Интернет күйгүзүлгөн"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобилдик Интернет өчүрүлгөн"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth аркылуу интернет бөлүшүү."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Учак тартиби."</string>
- <string name="accessibility_no_sims" msgid="3957997018324995781">"SIM-карта жок"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
+ <string name="accessibility_no_sims" msgid="3957997018324995781">"SIM карта жок"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Оператор тармагы өзгөртүлүүдө."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Батареянын чоо-жайын ачуу"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Батарея <xliff:g id="NUMBER">%d</xliff:g> пайыз."</string>
@@ -200,7 +199,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Учак режими күйүк."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Учак режими өчүрүлдү."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Учак режими күйгүзүлдү."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Тынчымды алба деген күйүк, артыкчылыктуулар гана."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Тынчымды алба режими иштетилген. Шашылыш эскертмелер гана көрүнөт."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Тынчымды албагыла, жымжырт болсун."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Тынчымды алба деген күйүк, ойготкучтар гана."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Тынчымды алба."</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Кубатталууда"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дайындары тындырылды."</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G дайындары тындырылды"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Мобилдик Интернет кызматы тындырылды"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Дайындар тындырылды"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Трафик сиз койгон чекке жетти. Эми мобилдик Интернетти колдоно албайсыз.\n\nЭгер улантсаңыз, дайындарды өткөрүү үчүн акы алынышы мүмкүн."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Улантуу"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Интернет байланыш жок"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi байланышта"</string>
@@ -271,7 +268,7 @@
<string name="start_dreams" msgid="5640361424498338327">"Көшөгө"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Тынчымды алба"</string>
- <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Артыкчылык гана"</string>
+ <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Шашылыш эскертмелер гана"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Ойготкучтар гана"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Тымтырс"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Туташуу чекити"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Эскертмелер"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Кол чырак"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Мобилдик Интернет"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Дайындардын колдонулушу"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Калган дайындар"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Чектен ашты"</string>
@@ -357,10 +353,10 @@
<string name="description_target_search" msgid="3091587249776033139">"Издөө"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үчүн жогору жылмыштырыңыз."</string>
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үчүн солго жылмыштырыңыз."</string>
- <string name="zen_priority_introduction" msgid="3070506961866919502">"Көрсөтүлгөн эскертүүлөрдөн, эскерткичтерден, окуялардан жана чалуучулардан тышкары башка үндөр жана дирилдөөлөр тынчыңызды албайт."</string>
+ <string name="zen_priority_introduction" msgid="3070506961866919502">"Эскертүүлөрдөн, жылнаамадагы иш-чараларды эстеткичтерден жана белгиленген байланыштардын чалууларынан тышкары башка үндөр жана дирилдөөлөр тынчыңызды албайт."</string>
<string name="zen_priority_customize_button" msgid="7948043278226955063">"Ыңгайлаштыруу"</string>
- <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү сыяктуу нерселердин баары өчүрүлөт. Бирок телефон чала бересиз."</string>
- <string name="zen_silence_introduction" msgid="3137882381093271568">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү сыяктуу нерселердин БААРЫ өчүрүлөт."</string>
+ <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт. Бирок телефон менен сүйлөшө бересиз."</string>
+ <string name="zen_silence_introduction" msgid="3137882381093271568">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт."</string>
<string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Анчейин шашылыш эмес эскертмелер төмөндө"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Ачуу үчүн кайра таптап коюңуз"</string>
@@ -372,7 +368,7 @@
<string name="camera_hint" msgid="7939688436797157483">"Сүрөтчөнү серпип камерага өтүңүз"</string>
<string name="interruption_level_none_with_warning" msgid="5114872171614161084">"Толук жымжырттык талап кылынат. Бул экрандагыны окугучтарды да тынчтандырат."</string>
<string name="interruption_level_none" msgid="6000083681244492992">"Тымтырс"</string>
- <string name="interruption_level_priority" msgid="6426766465363855505">"Артыкчылык гана"</string>
+ <string name="interruption_level_priority" msgid="6426766465363855505">"Шашылыш эскертмелер гана"</string>
<string name="interruption_level_alarms" msgid="5226306993448328896">"Ойготкучтар гана"</string>
<string name="interruption_level_none_twoline" msgid="3957581548190765889">"Тым-\nтырс"</string>
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Артыкчылыктуу\nгана"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Жумуш профили <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташкан"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Жеке профиль <xliff:g id="VPN_APP">%1$s</xliff:g> тармагына туташкан"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Түзмөк <xliff:g id="VPN_APP">%1$s</xliff:g> тармагына туташкан"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Түзмөктү башкаруу"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профилди көзөмөлдөө"</string>
<string name="monitoring_title" msgid="169206259253048106">"Тармакка көз салуу"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN\'ди өчүрүү"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN\'ди ажыратуу"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Саясаттарды карап көрүү"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Түзмөгүңүздү <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Түзмөгүңүздү уюмуңуз башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Ишканаңыз бул түзмөккө тастыктоочу борборду орнотту. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Ишканаңыз жумуш профилиңизге тастыктоочу борборду орнотту. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Бул түзмөктө тастыктоочу борбор орнотулган. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Администраторуңуз түзмөгүңүздөгү трафикти көзөмөлдөөчү тармактын таржымалын каттоо функциясын иштетти."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди көзөмөлдөй турган <xliff:g id="VPN_APP_0">%1$s</xliff:g> жана <xliff:g id="VPN_APP_1">%2$s</xliff:g> колдонмолоруна туташып турасыз."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Жумуш профилиңиз электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактык аракеттериңизди көзөмөлдөй турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турат."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Жеке профилиңиз электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди көзөмөлдөй турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турат."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Түзмөгүңүз <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> тарабынан башкарылат."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> жана дагы <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> жана дагы <xliff:g id="NUMBER_2">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени көзөмөлдөө функциялары ачылды"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени көзөмөлдөө функциялары жабылды"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Бул каналдан келген эскертмелерге уруксат берүү"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Бардык категориялар"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Дагы жөндөөлөр"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Ыңгайлаштыруу: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> эскертмеси: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Колдонмодо экран бөлүнбөшү мүмкүн."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Колдонмодо экран бөлүнбөйт."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Жөндөөлөрдү ачуу."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Ыкчам жөндөөлөрдү ачуу."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Ыкчам жөндөөлөрдү жабуу."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Сүрөт ичиндеги сүрөт менюсу"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> – сүрөт ичиндеги сүрөт"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, жөндөөлөрдү ачып туруп, аны өчүрүп коюңуз."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Ойнотуу"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Тындыруу"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Кийинкисине өткөрүп жиберүү"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Мурункусуна өткөрүп жиберүү"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Телефон ысыгандыктан өчүрүлдү"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Телефонуңуз кадимкидей иштеп жатат"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Телефонуңуз өтө ысып кеткендиктен, аны муздатуу үчүн өчүрүлдү. Эми телефонуңуз кадимкидей иштеп жатат.\n\nТелефонуңуз төмөнкү шарттарда ысып кетиши мүмкүн:\n • Ашыкча ресурс короткон колдонмолорду (оюндар, видео же чабыттоо колдонмолору) пайдалансаңыз \n • Ири көлөмдөгү файлдарды жүктөп алсаңыз же берсеңиз\n • Телефонуңузду жогорку температураларда пайдалансаңыз"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Ыкчам ачылуучу колдонмолор"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Ыкчам ачылуучу колдонмолорду орнотуу талап кылынбайт."</string>
<string name="app_info" msgid="6856026610594615344">"Колдонмо тууралуу"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Интернетке өтүү"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилдик дайындар"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi өчүк"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth өчүк"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index f1e0ad0cf131..f9a1e874e3b4 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ບໍ່ມີຊິມ."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"ອິນເຕີເນັດມືຖື"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ເປີດອິນເຕີເນັດມືຖືແລ້ວ"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"ປິດອິນເຕີເນັດມືຖືແລ້ວ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ການປ່ອຍສັນຍານ Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ໂໝດໃນຍົນ."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"ບໍ່ມີແຜ່ນ SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ການ​ປ່ຽນ​ແປງ​ເຄືອ​ຂ່າຍ​ບໍ​ລ​ິ​ສັດ​ເຄືອ​ຂ່າຍ​ມື​ຖື."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ເປີດລາຍລະອຽດແບັດເຕີຣີ"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ກຳລັງສາກໄຟ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"ຂໍ້​ມູນ 2G​-3G ຢຸດ​ຊົ່ວ​ຄາວແລ້ວ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"ຂໍ້​ມູນ 4G ຢຸດ​ຊົ່ວ​ຄາວແລ້ວ"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ຢຸດການໃຊ້ອິນເຕີເນັດມືຖືຊົ່ວຄາວແລ້ວ"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ຂໍ້​ມູນ​ຢຸດ​ຊົ່ວ​ຄາວແລ້ວ"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ທ່ານໃຊ້ອິນເຕີເນັດຮອດຈຳນວນທີ່ທ່ານຈຳກັດປະລິມານໄວ້ແລ້ວ. ທ່ານຈະບໍ່ນຳໃຊ້ການເຊື່ອມຕໍ່ຜ່ານເຄືອຂ່າຍມືຖືອີກຕໍ່ໄປ.\n\nຫາກທ່ານສືບຕໍ່ໃຊ້ໄປອີກ, ທ່ານອາດຖືກຮຽກເກັບເງິນຄ່າບໍລິການໄດ້."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ເລີ່ມຕໍ່"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ເຊື່ອມ​ຕໍ່ Wi-​-Fi ແລ້ວ"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"​ຮັອດ​ສະ​ປອດ"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"ການແຈ້ງເຕືອນ"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"​ໄຟ​ສາຍ"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ອິນເຕີເນັດມືຖື"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"​ການ​​ນຳ​ໃຊ້​​ຂໍ້​ມູນ"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"​ຂໍ້​ມູນ​ທີ່​ຍັງ​ເຫຼືອ"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"​ເກີນ​ຂີດ​ຈຳ​ກັດ"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກເຊື່ອມຕໍ່ຫາ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"ໂປຣໄຟລ໌ສ່ວນຕົວເຊື່ອມຕໍ່ຫາ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"ອຸປະກອນເຊື່ອມຕໍ່ຫາ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ການຈັດການອຸປະກອນ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ການ​ຕິດ​ຕາມ​ໂປຣ​ໄຟລ໌"</string>
<string name="monitoring_title" msgid="169206259253048106">"ການກວດ​ສອບ​ຕິດ​ຕາມ​ເຄືອ​ຂ່າຍ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"ປິດ​ການ​ໃຊ້ VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"ຕັດ​ການ​ເຊື່ອມ​ຕໍ່ VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"ເບິ່ງນະໂຍບາຍ"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"ອຸປະກອນຂອງທ່ານແມ່ນຖືກຈັດການໂດຍ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດຕິດຕາມ ແລະ ຈັດການການຕັ້ງຄ່າຕ່າງໆ, ການເຂົ້າເຖິງອົງກອນ, ແອັບ, ຂໍ້ມູນທີ່ເຊື່ອມໂຍງກັບອຸປະກອນ ແລະ ຂໍ້ມູນສະຖານທີ່ຂອງອຸປະກອນທ່ານໄດ້.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"ອຸປະກອນຂອງທ່ານແມ່ນຖືກຈັດການໂດຍອົງກອນຂອງທ່ານ.\n\nຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດຕິດຕາມ ແລະ ຈັດການການຕັ້ງຄ່າຕ່າງໆ, ການເຂົ້າເຖິງອົງກອນ, ແອັບ, ຂໍ້ມູນທີ່ເຊື່ອມໂຍງກັບອຸປະກອນ ແລະ ຂໍ້ມູນສະຖານທີ່ຂອງອຸປະກອນທ່ານໄດ້.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ອົງກອນຂອງທ່ານຕິດຕັ້ງອຳນາດໃບຮັບຮອງໄວ້ໃນອຸປະກອນນີ້. ທຣາບຟິກເຄືອຂ່າຍທີ່ເຂົ້າລະຫັດໄວ້ຂອງທ່ານອາດຖືກຕິດຕາມ ຫຼື ແກ້ໄຂໄດ້."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ອົງກອນຂອງທ່ານຕິດຕັ້ງອຳນາດໃບຮັບຮອງໄວ້ໃນໂປຣໄຟລ໌ບ່ອນເຮັດວຽກນີ້. ທຣາບຟິກເຄືອຂ່າຍທີ່ເຂົ້າລະຫັດໄວ້ຂອງທ່ານອາດຖືກຕິດຕາມ ຫຼື ແກ້ໄຂໄດ້."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ມີອຳນາດໃບຮັບຮອງຕິດຕັ້ງຢູ່ໃນອຸປະກອນນີ້. ທຣາບຟິກເຄືອຂ່າຍທີ່ເຂົ້າລະຫັດໄວ້ຂອງທ່ານອາດຖືກຕິດຕາມ ຫຼື ແກ້ໄຂໄດ້."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"ຜູ້ເບິ່ງແຍງຂອງທ່ານໄດ້ເປີດໃຊ້ການບັນທຶກເຄືອຂ່າຍໄວ້, ເຊິ່ງຈະຕິດຕາມທຣາບຟິກໃນອຸປະກອນຂອງທ່ານ."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງຈະສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍ, ຮວມທັງອີເມວ, ແອັບ ແລະ ເວັບໄຊຕ່າງໆຂອງທ່ານໄດ້."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="VPN_APP_0">%1$s</xliff:g> ແລະ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ແລ້ວ, ເຊິ່ງຈະສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍ, ຮວມທັງອີເມວ, ແອັບ ແລະ ເວັບໄຊຕ່າງໆຂອງທ່ານໄດ້."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານເຊື່ອມຕໍ່ຫາ <xliff:g id="VPN_APP">%1$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ຮວມເຖິງອີເມວ, ແອັບ ແລະ ເວັບໄຊ."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"ໂປຣໄຟລ໌ສ່ວນຕົວຂອງທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍ, ຮວມທັງອີເມວ, ແອັບ ແລະ ເວັບໄຊຕ່າງໆຂອງທ່ານໄດ້."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ອຸປະກອນຂອງທ່ານແມ່ນຈັດການໂດຍ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> ແລະ ອີກ <xliff:g id="NUMBER_5">%3$d</xliff:g> ຊ່ອງອື່ນໆ</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> ແລະ ອີກ <xliff:g id="NUMBER_2">%3$d</xliff:g> ຊ່ອງອື່ນໆ</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ເປີດຕົວຄວບຄຸມການແຈ້ງເຕືອນສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"ປິດຕົວຄວບຄຸມການແຈ້ງເຕືອນສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ອະນຸຍາດການແຈ້ງເຕືອນຈາກຊ່ອງນີ້"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"ທຸກໝວດໝູ່"</string>
<string name="notification_more_settings" msgid="816306283396553571">"​ການ​ຕັ້ງ​ຄ່າ​ເພີ່ມ​ເຕີມ"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"ປັບແຕ່ງ: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"ການແຈ້ງເຕືອນ <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"ແອັບອາດໃຊ້ບໍ່ໄດ້ກັບການແບ່ງໜ້າຈໍ."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ແອັບບໍ່ຮອງຮັບໜ້າຈໍແບບແຍກກັນ."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ເປີດການຕັ້ງຄ່າ."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ເປີດການຕັ້ງຄ່າດ່ວນ."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ປິດການຕັ້ງຄ່າດ່ວນ."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"ເມນູຊ້ອນຮູບພາບ"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ແມ່ນເປັນການສະແດງຜົນຫຼາຍຢ່າງພ້ອມກັນ"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"ຫາກທ່ານບໍ່ຕ້ອງການ <xliff:g id="NAME">%s</xliff:g> ໃຫ້ໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ແຕະເພື່ອເປີດການຕັ້ງຄ່າ ແລ້ວປິດມັນໄວ້."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"ຫຼິ້ນ"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"ຢຸດຊົ່ວຄາວ"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"ຂ້າມໄປລາຍການໜ້າ"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"ຂ້າມໄປລາຍການກ່ອນນີ້"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ປິດໂທລະສັບເນື່ອງຈາກຮ້ອນເກີນໄປ"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ໂທລະສັບຂອງທ່ານຕອນນີ້ເຮັດວຽກປົກກະຕິແລ້ວ"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ໂທລະສັບຂອງທ່ານຮ້ອນເກີນໄປ, ດັ່ງນັ້ນມັນຈຶ່ງຖືກປິດໄວ້ເພື່ອໃຫ້ເຢັນກ່ອນ. ໂທລະສັບຂອງທ່ານຕອນນີ້ເຮັດວຽກປົກກະຕິແລ້ວ.\n\nໂທລະສັບຂອງທ່ານອາດຮ້ອນຫາກວ່າທ່ານ:\n • ໃຊ້ແອັບທີ່ກິນຊັບພະຍາກອນຫຼາຍ (ເຊັ່ນ: ເກມ, ວິດີໂອ ຫຼື ແອັບການນຳທາງ)\n • ດາວໂຫລດ ຫຼື ອັບໂຫລດຮູບພາບຂະໜາດໃຫຍ່\n • ໃຊ້ໂທລະສັບຂອງທ່ານໃນບ່ອນທີ່ມີອຸນຫະພູມສູງ"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ອິນສະແຕນແອັບ"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ອິນສະແຕນແອັບບໍ່ຈຳເປັນຕ້ອງມີການຕິດຕັ້ງ."</string>
<string name="app_info" msgid="6856026610594615344">"ຂໍ້ມູນແອັບ"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ໄປທີ່ເວັບ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ອິນເຕີເນັດມືຖື"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ປິດຢູ່"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ປິດຢູ່"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 400f5850f7df..f625eb6699c4 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -154,14 +154,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Kraštas"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nėra SIM kortelės."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobiliojo ryšio duomenys"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobiliojo ryšio duomenys įjungti"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiliojo ryšio duomenys išjungti"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"„Bluetooth“ įrenginio kaip modemo naudojimas."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lėktuvo režimas."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nėra SIM kortelės."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Keičiamas operatoriaus tinklas."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Atidaryti išsamią akumuliatoriaus informaciją"</string>
@@ -244,11 +243,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Įkrovimas"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G duomenys pristabdyti"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G duomenys pristabdyti"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobiliojo ryšio duomenys pristabdyti"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Duomenys pristabdyti"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Pasiektas nustatytas duomenų limitas. Nebenaudojate mobiliojo ryšio duomenų.\n\nJei tęsite, gali būti taikomi duomenų naudojimo mokesčiai."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Atnaujinti"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nėra interneto ryš."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Prisij. prie „Wi-Fi“"</string>
@@ -323,8 +320,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Viešosios interneto prieigos taškas"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Pranešimai"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Žibintuvėlis"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobiliojo ryšio duomenys"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Duomenų naudojimas"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Likę duomenys"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Viršytas limitas"</string>
@@ -437,8 +433,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Darbo profilis susietas su programa „<xliff:g id="VPN_APP">%1$s</xliff:g>“"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Asmeninis profilis susietas su programa „<xliff:g id="VPN_APP">%1$s</xliff:g>“"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Įrenginys susietas su programa „<xliff:g id="VPN_APP">%1$s</xliff:g>“"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Įrenginio tvarkymas"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilio stebėjimas"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tinklo stebėjimas"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -447,18 +442,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Išjungti VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Atjungti VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Žr. politiką"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Įrenginį tvarko „<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės prieigą, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Įrenginį tvarko organizacija.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės prieigą, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Jūsų organizacija įdiegė šiame įrenginyje sertifikato įgaliojimą. Jūsų saugaus tinklo srautas gali būti stebimas arba keičiamas."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Jūsų organizacija įdiegė darbo profilyje sertifikato įgaliojimą. Jūsų saugaus tinklo srautas gali būti stebimas arba keičiamas."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Šiame įrenginyje įdiegtas sertifikato įgaliojimas. Jūsų saugaus tinklo srautas gali būti stebimas arba keičiamas."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administratorius įjungė tinklo duomenų įrašymą į žurnalą. Įjungus šią funkciją stebimas srautas jūsų įrenginyje."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Esate prisijungę prie programos „<xliff:g id="VPN_APP">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Esate prisijungę prie programų „<xliff:g id="VPN_APP_0">%1$s</xliff:g>“ ir „<xliff:g id="VPN_APP_1">%2$s</xliff:g>“, kurios gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Darbo profilis susietas su programa „<xliff:g id="VPN_APP">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Asmeninis profilis susietas su programa „<xliff:g id="VPN_APP">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Įrenginį tvarko „<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>“."</string>
@@ -577,12 +568,9 @@
<item quantity="many">„<xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>“, „<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>“ ir dar <xliff:g id="NUMBER_5">%3$d</xliff:g> kanalo</item>
<item quantity="other">„<xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>“, „<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>“ ir dar <xliff:g id="NUMBER_5">%3$d</xliff:g> kanalų</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimų valdikliai atidaryti"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimų valdikliai uždaryti"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Leisti pranešimus iš šio kanalo"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Visos kategorijos"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Daugiau nustatymų"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Tinkinti: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -720,6 +708,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"„<xliff:g id="ID_1">%1$s</xliff:g>“ pranešimas: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Programa gali neveikti naudojant skaidytą ekraną."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Programoje nepalaikomas skaidytas ekranas."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Atidaryti nustatymus."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Atidaryti sparčiuosius nustatymus."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Uždaryti sparčiuosius nustatymus."</string>
@@ -738,14 +730,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Vaizdo vaizde meniu"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> rodom. vaizdo vaizde"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Jei nenorite, kad <xliff:g id="NAME">%s</xliff:g> naudotų šią funkciją, palietę atidarykite nustatymus ir išjunkite ją."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Leisti"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Pristabdyti"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Praleisti ir eiti į kitą"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Praleisti ir eiti į ankstesnį"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Telefonas išjungt., nes įkaito"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Dabar telefonas veikia įprastai"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefonas per daug įkaito, todėl buvo išj., kad atvėstų. Dabar telefonas veikia įprastai.\n\nTelefonas gali per daug įkaisti, jei:\n • esate įjungę daug išteklių naudoj. progr. (pvz., žaidimų, vaizdo įr. arba navig. progr.);\n • atsis. arba įkeliate didelius failus;\n • telefoną naudojate aukštoje temper."</string>
@@ -773,8 +761,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Akimirksniu įkeliamos programėlės"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Akimirksniu įkeliamų programėlių nereikia įdiegti."</string>
<string name="app_info" msgid="6856026610594615344">"Programos informacija"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Eiti į žiniatinklį"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilieji duomenys"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"„Wi-Fi“ išjungtas"</string>
<string name="bt_is_off" msgid="2640685272289706392">"„Bluetooth“ išjungtas"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 1f406867118d..a42b4403c609 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -153,14 +153,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nav SIM kartes."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilie dati"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilie dati ieslēgti"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilie dati izslēgti"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth piesaiste."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lidmašīnas režīms."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nav SIM kartes."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Mobilo sakaru operatora tīkla mainīšana."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Atvērt akumulatora informāciju"</string>
@@ -243,11 +242,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Notiek uzlāde"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G datu lietojums ir apturēts"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G datu lietojums ir apturēts"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobilo datu lietojums apturēts"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Datu lietojums ir apturēts"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Ir sasniegts jūsu iestatītais datu ierobežojums. Jūs vairs neizmantojat mobilos datus.\n\nJa atsāksiet, var tikt piemērota maksa par datu lietojumu."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Atsākt"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nav interneta sav."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Izv. sav. ar Wi-Fi"</string>
@@ -321,8 +318,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Tīklājs"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Paziņojumi"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Zibspuldze"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobilie dati"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Datu lietojums"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Atlikušie dati"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Pārsniegts ierobežojums"</string>
@@ -435,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Darba profilam tika izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Personīgajam profilam ir izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Ierīces pārvaldība"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profila pārraudzība"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tīkla pārraudzība"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -445,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Atspējot VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Atvienot VPN tīklu"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Skatīt politikas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes, ar ierīci saistītos datus un ierīces atrašanās vietas informāciju.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Jūsu ierīci pārvalda jūsu organizācija.\n\nAdministrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes, ar ierīci saistītos datus un ierīces atrašanās vietas informāciju.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Jūsu organizācija instalēja sertifikātu šajā ierīcē. Jūsu drošā tīkla datplūsma var tikt uzraudzīta."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Jūsu organizācija instalēja sertifikātu jūsu darba profilā. Jūsu drošā tīkla datplūsma var tikt uzraudzīta."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Šajā ierīcē ir instalēts sertifikāts. Drošā tīkla datplūsma var tikt uzraudzīta."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administrators ieslēdza tīkla reģistrēšanu, kuru izmanto, lai pārraudzītu datplūsmu jūsu ierīcē."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Ir izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Ir izveidots savienojums ar lietotnēm <xliff:g id="VPN_APP_0">%1$s</xliff:g> un <xliff:g id="VPN_APP_1">%2$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Jūsu darba profilam ir izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp saņemtos un nosūtītos e-pasta ziņojumus, instalētās lietotnes un apmeklētās tīmekļa vietnes."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Jūsu personīgais profils ir piesaistīts lietotnei <xliff:g id="VPN_APP">%1$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp saņemtos un nosūtītos e-pasta ziņojumus, instalētās lietotnes un apmeklētās tīmekļa vietnes."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Jūsu ierīci pārvalda <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -573,12 +564,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> un vēl <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> un vēl <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumu vadīklas ir atvērtas"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumu vadīklas ir aizvērtas"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Atļaut paziņojumus no šī kanāla"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Visas kategorijas"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Citi iestatījumi"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Pielāgot: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -716,6 +704,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> paziņojums: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Iespējams, lietotnē nedarbosies ekrāna sadalīšana."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Lietotnē netiek atbalstīta ekrāna sadalīšana."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Atvērt iestatījumus."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Atvērt ātros iestatījumus."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Aizvērt ātros iestatījumus."</string>
@@ -734,14 +726,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Izvēlne attēlam attēlā"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ir attēlā attēlā"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Ja nevēlaties lietotnē <xliff:g id="NAME">%s</xliff:g> izmantot šo funkciju, pieskarieties, lai atvērtu iestatījumus un funkciju izslēgtu."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Atskaņot"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Apturēt"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Pāriet uz nākamo"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Pāriet uz iepriekšējo"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Tālrunis izslēgts karstuma dēļ"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Tagad jūsu tālrunis darbojas normāli"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Jūsu tālrunis bija pārkarsis un tika izslēgts. Tagad tas darbojas normāli.\n\nTālrunis var sakarst, ja:\n • tiek izmantotas lietotnes, kas patērē daudz enerģijas (piem., spēles, video lietotnes vai navigācija);\n • tiek lejupielādēti/augšupielādēti lieli faili;\n • tālrunis tiek lietots augstā temperatūrā."</string>
@@ -769,8 +757,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Tūlītējās lietotnes"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Tūlītējām lietotnēm nav nepieciešama instalēšana."</string>
<string name="app_info" msgid="6856026610594615344">"Lietotnes informācija"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Pāriet uz tīmekli"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilie dati"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ir izslēgts"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ir izslēgts"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 9bb785ae7dc9..673dbedc51bf 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобилниот интернет е исклучен"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Се поврзува со Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим на работа во авион."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Нема СИМ-картичка"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Променување на мрежата на операторот."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Отвори ги деталите за батеријата"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Работниот профил е поврзан на <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Личниот профил е поврзан на <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Уредот е поврзан на <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Управување со уреди"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Следење профил"</string>
<string name="monitoring_title" msgid="169206259253048106">"Следење на мрежата"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Оневозможи ВПН"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Исклучи ВПН"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Прикажи „Политики“"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Со уредот управува <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nАдминистраторот може да ги следи и да управува со поставките, корпоративниот пристап, апликациите, податоците поврзани со уредот и информациите за локацијата на уредот.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Со уредот управува вашата организација.\n\nАдминистраторот може да ги следи и да управува со поставките, корпоративниот пристап, апликациите, податоците поврзани со уредот и информациите за локацијата на уредот.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Вашата организација инсталираше авторитет за сертификат на уредов. Сообраќајот на вашата безбедна мрежа можно е да се следи или изменува."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Вашата организација инсталираше авторитет за сертификат на вашиот работен профил. Вашиот безбеден мрежен сообраќај можно е да се следи или изменува."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"На уредов е инсталиран авторитет за сертификат. Вашиот безбеден мрежен сообраќај можно е да се следи или изменува."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Вашиот администратор вклучил евиденција на мрежата, што подразбира следење на сообраќајот на вашиот уред."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Поврзани сте на <xliff:g id="VPN_APP">%1$s</xliff:g>, што може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-сајтовите."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Поврзани сте на <xliff:g id="VPN_APP_0">%1$s</xliff:g> и <xliff:g id="VPN_APP_1">%2$s</xliff:g>, што може да ја следат вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-сајтовите."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Вашиот работен профил е поврзан на <xliff:g id="VPN_APP">%1$s</xliff:g>, што може да ја следи вашата активност на мрежата, заедно со е-пораките, апликациите и веб-сајтовите."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Вашиот личен профил е поврзан на <xliff:g id="VPN_APP">%1$s</xliff:g>, што може да ја следи вашата активност на мрежата, заедно со е-пораките, апликациите и веб-сајтовите."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> управува со уредов."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Известување од <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Апликацијата можеби нема да работи во поделен екран."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Апликацијата не поддржува поделен екран."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Отворете ги поставките."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Отворете ги брзите поставки."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Затворете ги брзите поставки."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Инстант апликации"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Инстант апликациите нема потреба да се инсталираат."</string>
<string name="app_info" msgid="6856026610594615344">"Информации за апликација"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Одете на интернет"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилен интернет"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi е исклучено"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth е исклучен"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index cc16c772ec8c..20006d0683a2 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"വൈഫൈ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"സിം ഇല്ല."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"മൊബൈൽ ഡാറ്റ"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"മൊബൈൽ ഡാറ്റ ഓണാണ്"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"മൊബൈൽ ഡാറ്റ ഓഫാണ്"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ബ്ലൂടൂത്ത് ടെതറിംഗ്."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ഫ്ലൈറ്റ് മോഡ്."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM കാർഡൊന്നുമില്ല."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"കാരിയർ നെറ്റ്‌വർക്ക് മാറ്റൽ."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ബാറ്ററി വിശദാംശങ്ങൾ തുറക്കുക"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ചാർജ്ജുചെയ്യുന്നു"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"മൊബൈൽ ഡാറ്റ തല്‍ക്കാലം നിര്‍ത്തിയിരിക്കുന്നു"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"നിങ്ങൾ സജ്ജമാക്കിയ ഡാറ്റ പരിധി എത്തിക്കഴിഞ്ഞു. ഇനിയങ്ങോട്ട് നിങ്ങൾക്ക് മൊബൈൽ ഡാറ്റ ഉപയോഗിക്കാൻ സാധിക്കുകയില്ല.\n\nതുടരുകയാണെങ്കിൽ, ഡാറ്റാ ഉപയോഗത്തിന് നിരക്കുകൾ ബാധകമായേക്കാം."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"പുനരാരംഭിക്കുക"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ഇന്റർനെറ്റ് കണക്ഷൻ ഇല്ല"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"വൈഫൈ കണക്‌റ്റുചെയ്‌തു"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ഹോട്ട്‌സ്‌പോട്ട്"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"അറിയിപ്പുകൾ"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ടോർച്ച്"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"മൊബൈൽ ഡാറ്റ"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ഡാറ്റ ഉപയോഗം"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ശേഷിക്കുന്ന ഡാറ്റ"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"പരിധി കഴിഞ്ഞു"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"<xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് ഔദ്യോഗിക പ്രൊഫൈൽ കണക്റ്റുചെയ്തിരിക്കുന്നു"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"<xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് വ്യക്തിഗത പ്രൊഫൈൽ കണക്റ്റുചെയ്തിരിക്കുന്നു"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"<xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് ഉപകരണം കണക്റ്റുചെയ്തിരിക്കുന്നു"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ഉപകരണ മാനേജ്‌മെന്റ്"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"പ്രൊഫൈൽ നിരീക്ഷിക്കൽ"</string>
<string name="monitoring_title" msgid="169206259253048106">"നെറ്റ്‌വർക്ക് നിരീക്ഷിക്കൽ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN വിച്‌ഛേദിക്കുക"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"നയങ്ങൾ കാണുക"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> എന്ന സ്ഥാപനമാണ്. \n\nക്രമീകരണം, കോർപ്പറേറ്റ് ആക്‌സസ്, ആപ്പുകൾ, നിങ്ങളുടെ ഉപകരണവുമായി ബന്ധപ്പെട്ട ഡാറ്റ, ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ‌വിവരങ്ങൾ എന്നിവ കൈകാര്യം ചെയ്യാനും നിരീക്ഷിക്കാനും നിങ്ങളുടെ അഡ്‌മിന് കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങളുടെ അഡ്‌മിനെ ബന്ധപ്പെടുക."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് നിങ്ങളുടെ സ്ഥാപനമാണ്.\n\nക്രമീകരണം, കോർപ്പറേറ്റ് ആക്‌സസ്, ആപ്പുകൾ, നിങ്ങളുടെ ഉപകരണവുമായി ബന്ധപ്പെട്ട ഡാറ്റ, ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ‌വിവരങ്ങൾ എന്നിവ കൈകാര്യം ചെയ്യാനും നിരീക്ഷിക്കാനും നിങ്ങളുടെ അഡ്‌മിന് കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങളുടെ അഡ്‌മിനെ ബന്ധപ്പെടുക."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ഈ ഉപകരണത്തിൽ നിങ്ങളുടെ സ്ഥാപനമൊരു സർട്ടിഫിക്കറ്റ് അതോറിറ്റി ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നു. നിങ്ങളുടെ സുരക്ഷിത നെറ്റ്‌വർക്ക് ട്രാഫിക്ക് നിരീക്ഷിക്കപ്പെടുകയോ പരിഷ്കരിക്കപ്പെടുയോ ചെയ്തേക്കാം."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിൽ നിങ്ങളുടെ സ്ഥാപനമൊരു സർട്ടിഫിക്കറ്റ് അതോറിറ്റി ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നു. നിങ്ങളുടെ സുരക്ഷിത നെറ്റ്‌വർക്ക് ട്രാഫിക്ക് നിരീക്ഷിക്കപ്പെടുകയോ പരിഷ്കരിക്കപ്പെടുയോ ചെയ്തേക്കാം."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു സർട്ടിഫിക്കറ്റ് അതോറിറ്റി ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നു. നിങ്ങളുടെ സുരക്ഷിത നെറ്റ്‌വർക്ക് ട്രാഫിക്ക് നിരീക്ഷിക്കപ്പെടുകയോ പരിഷ്കരിക്കപ്പെടുയോ ചെയ്തേക്കാം."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"നിങ്ങളുടെ അഡ്‌മിൻ, നെറ്റ്‌വർക്ക് ലോഗിംഗ് ഓണാക്കിയിട്ടുണ്ട്, ഇതിന് നിങ്ങളുടെ ഉപകരണത്തിലെ ട്രാഫിക്ക് നിരീക്ഷിക്കാൻ കഴിയും."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"നിങ്ങൾ <xliff:g id="VPN_APP">%1$s</xliff:g> എന്ന ആപ്പിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്പുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"നിങ്ങൾ <xliff:g id="VPN_APP_0">%1$s</xliff:g>, <xliff:g id="VPN_APP_1">%2$s</xliff:g> എന്നീ ആപ്പുകളിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്പുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"<xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്‌സ്, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"<xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് നിങ്ങളുടെ വ്യക്തിഗത പ്രൊഫൈൽ കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്പുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"നിങ്ങളുടെ ഉപകരണം മാനേജുചെയ്യുന്നത് <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ആണ്."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> എന്നിവയും മറ്റ് <xliff:g id="NUMBER_5">%3$d</xliff:g> എണ്ണവും</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> എന്നിവയും മറ്റ് <xliff:g id="NUMBER_2">%3$d</xliff:g> എണ്ണവും</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിന്റെ അറിയിപ്പ് നിയന്ത്രണങ്ങൾ തുറന്നു"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിന്റെ അറിയിപ്പ് നിയന്ത്രണങ്ങൾ അടച്ചു"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ഈ ചാനലിൽ നിന്നുള്ള അറിയിപ്പുകൾ അനുവദിക്കുക"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"എല്ലാ വിഭാഗങ്ങളും"</string>
<string name="notification_more_settings" msgid="816306283396553571">"കൂടുതൽ ക്രമീകരണം"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"ഇഷ്ടാനുസൃതമാക്കുക: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> അറിയിപ്പ്: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"സ്പ്ലിറ്റ്-സ്ക്രീനിനൊപ്പം ആപ്പ് പ്രവർത്തിച്ചേക്കില്ല."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"സ്പ്ലിറ്റ്-സ്ക്രീനിനെ ആപ്പ് പിന്തുണയ്ക്കുന്നില്ല."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ക്രമീകരണം തുറക്കുക."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ദ്രുത ക്രമീകരണം തുറക്കുക."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ദ്രുത ക്രമീകരണം അടയ്ക്കുക."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"\'ചിത്രത്തിനുള്ളിൽ ചിത്രം\' മെനു"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിലാണ്"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കുന്നതിൽ നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ടാപ്പുചെയ്‌ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"പ്ലേ ചെയ്യുക"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"താൽക്കാലികമായി നിർത്തുക"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"അടുത്തതിലേക്ക് പോകുക"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"മുമ്പത്തേതിലേക്ക് പോകുക"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ചൂട് കൂടിയതിനാൽ ഫോൺ ഓഫാക്കി"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ഫോൺ ഇപ്പോൾ സാധാരണഗതിയിൽ പ്രവർത്തിക്കുന്നു"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ഫോൺ ചൂടായിരിക്കുന്നതിനാൽ തണുക്കാൻ ഓഫാക്കിയിരിക്കുന്നു. ഫോൺ ഇപ്പോൾ സാധാരണഗതിയിൽ പ്രവർത്തിക്കുന്നു.\n\nഫോണിന് ചൂട് കൂടാൻ കാരണം:\n • ഗെയിമിംഗ്, വീഡിയോ അല്ലെങ്കിൽ നാവിഗേഷൻ തുടങ്ങിയ റിസോഴ്സ്-ഇന്റൻസീവായ ആപ്പുകൾ ഉപയോഗിക്കുന്നത്\n • വലിയ ഫയലുകൾ അപ്‌ലോഡോ ഡൗൺലോഡോ ചെയ്യുന്നത്\n • ഉയർന്ന താപനിലയിൽ ഫോൺ ഉപയോഗിക്കുന്നത്"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ഇൻസ്റ്റന്റ് ആപ്പ്"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ഇൻസ്‌റ്റ‌ന്റ് ആപ്പിന് ഇൻസ്‌റ്റലേഷൻ ആവശ്യമില്ല."</string>
<string name="app_info" msgid="6856026610594615344">"ആപ്പ് വിവരം"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"വെബിൽ പോവുക"</string>
<string name="mobile_data" msgid="7094582042819250762">"മൊബൈൽ ഡാറ്റ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"വൈഫൈ ഓഫാണ്"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ഓഫാണ്"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 26bd51c088d1..f4ad8d47215e 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -150,14 +150,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM байхгүй."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Мобайл дата"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Мобайл дата асаалттай байна"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобайл дата унтраалттай байна"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth модем болж байна."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Нислэгийн горим"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM карт байхгүй."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Дамжуулагч сүлжээг өөрчилж байна."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Тэжээлийн дэлгэрэнгүй мэдээллийг нээх"</string>
@@ -240,11 +239,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Цэнэглэж байна"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дата-г түр зогсоосон байна"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G дата-г түр зогсоосон байна"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Мобайл датаг түр зогсоосон"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Дата-г түр зогсоосон байна"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Таны тогтоосон датаны хязгаарт хүрсэн тул мобайл дата ашиглалт зогссон байна.\n\nҮргэлжлүүлсэн тохиолдолд дата ашиглалтын төлбөр гарна."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Үргэлжлүүлэх"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Интернет холболт байхгүй"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi холбогдсон"</string>
@@ -317,8 +314,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Сүлжээний цэг"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Мэдэгдэл"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Гар чийдэн"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Мобайл дата"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Дата ашиглалт"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Үлдсэн дата"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Хязгаараас хэтэрсэн"</string>
@@ -431,8 +427,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Ажлын профайл <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Хувийн профайл <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Төхөөрөмж <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Төхөөрөмжийн удирдлага"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профайл хяналт"</string>
<string name="monitoring_title" msgid="169206259253048106">"Сүлжээний хяналт"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -441,18 +436,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN идэвхгүйжүүлэх"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN таслах"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Удирдамж харах"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Таны төхөөрөмжийг <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> удирддаг.\n\nТаны админ тохиргоо, байгууллагын хандалт, апп, таны төхөөрөмжтэй холбоотой өгөгдөл, төхөөрөмжийн байршлын мэдээллийг хянаж, удирдах боломжтой.\n\nДэлгэрэнгүй мэдээлэл авах бол админтайгаа холбогдоно уу."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Таны төхөөрөмжийг байгууллага тань удирддаг.\n\nТаны админ тохиргоо, байгууллагын хандалт, апп, таны төхөөрөмжтэй холбоотой өгөгдөл, төхөөрөмжийн байршлын мэдээллийг хянаж, удирдах боломжтой.\n\nДэлгэрэнгүй мэдээлэл авах бол админтайгаа холбогдоно уу."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Таны байгууллага энэ төхөөрөмжид сертификатын зөвшөөрлийг суулгасан байна. Таны аюулгүй сүлжээний ачааллыг өөрчлөх эсвэл хянах боломжтой."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Таны байгууллага таны ажлын профайлд сертификатын зөвшөөрөл суулгасан байна. Таны аюулгүй сүлжээний ачааллыг өөрчлөх эсвэл хянах боломжтой."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Сертификатын зөвшөөрлийг энэ төхөөрөмжид суулгасан байна. Таны аюулгүй сүлжээний ачааллыг өөрчлөх эсвэл хянах боломжтой."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Таны админ төхөөрөмжийн ачааллыг хянадаг сүлжээний логийг асаасан байна."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Та имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Та имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой <xliff:g id="VPN_APP_0">%1$s</xliff:g>, <xliff:g id="VPN_APP_1">%2$s</xliff:g>-д холбогдсон байна."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Таны ажлын профайл <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна. Энэ нь таны имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Таны хувийн профайлыг имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбосон байна."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Таны төхөөрөмжийг <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> удирддаг."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, бусад <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>, бусад <xliff:g id="NUMBER_2">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н мэдэгдлийн хяналтыг нээсэн"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н мэдэгдлийн хяналтыг хаасан"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Энэ сувгийн мэдэгдлийг зөвшөөрөх"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Бүх ангилал"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Бусад тохиргоо"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Өөрчлөх: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> мэдэгдэл: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Апп хуваагдсан дэлгэцэд ажиллахгүй."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Энэ апп нь дэлгэц хуваах тохиргоог дэмждэггүй."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Тохиргоог нээнэ үү."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Хурдан тохиргоог нээнэ үү."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Хурдан тохиргоог хаана уу."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Зургийн цэсэнд байгаа зураг"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> зураг доторх зурганд байна"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Та <xliff:g id="NAME">%s</xliff:g>-г энэ онцлогийг ашиглахыг хүсэхгүй байвал тохиргоог нээгээд, үүнийг унтраана уу."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Тоглуулах"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Түр зогсоох"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Дараагийн медиад очих"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Өмнөх медиад очих"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Халснаас үүдэн утас унтарсан"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Таны утас одоо хэвийн ажиллаж байна"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Таны утас хэт халсан тул хөргөхөөр унтраасан болно. Таны утас одоо хэвийн ажиллаж байна.\n\nХэрэв та дараахыг хийвэл таны утас хэт халж болзошгүй:\n • Их хэмжээний нөөц хэрэглээний апп (тоглоом, видео эсвэл шилжилтийн апп зэрэг)\n • Багтаамж ихтэй файл татах, байршуулах\n • Утсаа өндөр температурт ашиглах"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Шуурхай апп"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Шуурхай аппыг суулгах шаардлагагүй."</string>
<string name="app_info" msgid="6856026610594615344">"Апп-н мэдээлэл"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Вэбэд очих"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобайл дата"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi унтраалттай байна"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth унтраалттай байна"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 2b16ff10fcfe..930c0f0863f8 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"वाय-फाय"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"सिम नाही."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"मोबाइल डेटा"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"मोबाइल डेटा चालू आहे"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा बंद आहे"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटुथ टिथरिंग."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"विमान मोड."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"सिम कार्ड नाही."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"वाहक नेटवर्क बदलणे."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"बॅटरी तपशील उघडा"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"चार्ज होत आहे"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटास विराम दिला आहे"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटास विराम दिला आहे"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"मोबाइल डेटा थांबवला आहे"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"डेटास विराम दिला आहे"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"आपण सेट केलेली डेटा मर्यादा संपली. आता आपले मोबाइल डेटा वापरणे बंद आहे.\n\nआपण ते पुन्हा सुरू केल्यास, डेटा वापरासाठी शुल्क लागू होईल."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"पुन्हा सुरु करा"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"इंटरनेट कनेक्शन नाही"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाय-फाय कनेक्ट केले"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हॉटस्पॉट"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"सूचना"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"फ्लॅशलाइट"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"मोबाइल डेटा"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"डेटा वापर"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"शिल्लक डेटा"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"मर्यादेबाहेर"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"वैयक्तिक प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"डिव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"डिव्हाइस व्‍यवस्‍थापन"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफाईल परीक्षण"</string>
<string name="monitoring_title" msgid="169206259253048106">"नेटवर्क परीक्षण"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करा"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करा"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"धोरणे पहा"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"तुमचे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> व्‍यवस्‍थापित करते.\n\nतुमचे प्रशासन सेटिंग्ज, कॉर्पोरेट अॅक्सेस, अॅप्स, आपल्या डिव्हाइसशी संबंधित डेटा आणि आपल्या डिव्हाइसच्या ठिकाणाची माहिती मॉनिटर करू आणि व्‍यवस्‍थापित करू शकते.\n\nआणखी माहितीसाठी, आपल्या प्रशासनाशी संपर्क साधा."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"तुमचे डिव्हाइस आमची संस्‍था व्‍यवस्‍थापित करते.\n\nतुमचे प्रशासन सेटिंग्ज, कॉर्पोरेट अॅक्सेस, अॅप्स, आपल्या डिव्हाइसशी संबंधित डेटा आणि आपल्या डिव्हाइसच्या ठिकाणाची माहिती मॉनिटर करू आणि व्‍यवस्‍थापित करू शकते.\n\nआणखी माहितीसाठी, आपल्या प्रशासनाशी संपर्क साधा."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"आपल्या संस्थेने या डिव्हाइसवर प्रमाणपत्र अधिकार स्थापित केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"आपल्या संस्थेने आपल्या कार्य प्रोफाइलवर प्रमाणपत्र अधिकार स्थापित केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"या डिव्हाइसवर प्रमाणपत्र अधिकार स्थापित केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"आपल्या प्रशासकाने नेटवर्क लॉगिंग चालू केले आहे, जे आपल्या डिव्हाइसवरील रहदारीचे परीक्षण करते."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"तुम्‍ही <xliff:g id="VPN_APP">%1$s</xliff:g>शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसहित आपल्‍या नेटवर्क क्रिया मॉनिटर करू शकते."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"तुम्‍ही <xliff:g id="VPN_APP_0">%1$s</xliff:g> आणि <xliff:g id="VPN_APP_1">%2$s</xliff:g>शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसहित आपल्‍या नेटवर्क क्रिया मॉनिटर करू शकते."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"आपले कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"आपले वैयक्तिक प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"आपले डिव्हाइस <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ने व्यवस्थापित केले आहे."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, आणि <xliff:g id="NUMBER_5">%3$d</xliff:g> इतर</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, आणि <xliff:g id="NUMBER_5">%3$d</xliff:g> इतर</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सूचना नियंत्रणे खुली आहेत"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सूचना नियंत्रणे बंद आहेत"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"या चॅनेलकडील सूचनांना मान्यता द्या"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"सर्व श्रेण्या"</string>
<string name="notification_more_settings" msgid="816306283396553571">"अधिक सेटिंग्ज"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"सानुकूल करा: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> सूचना: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"अॅप कदाचित विभाजित-स्क्रीनसह कार्य करू शकत नाही."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"अॅप स्क्रीन-विभाजनास समर्थन देत नाही."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"सेटिंग्ज उघडा."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"जलद सेटिंग्ज उघडा."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"जलद सेटिंग्ज बंद करा."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"चित्र मेनूमधील चित्र"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> चित्रामध्ये चित्र मध्ये आहे"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ने हे वैशिष्ट्य वापरू नये असे आपल्याला वाटत असल्यास, टॅप करून सेटिंग्ज उघडा आणि ते बंद करा."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"प्ले करा"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"थांबवा"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"डावलून पुढे जा"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"डावलून मागे जा"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"तापल्‍यामुळे फोन बंद झाला"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"आपला फोन आता व्‍यवस्थित चालू आहे"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"आपला फोन खूप तापलाय, म्हणून तो थंड होण्यासाठी बंद झाला आहे. आपला फोन आता व्‍यवस्थित चालू आहे.\n\nआपण असे केल्यास आपला फोन खूप तापेल:\n •संसाधन केंद्रित अॅप वापरणे (गेमिंग, व्हिडिओ किंवा नेव्हिगेशन अॅप यासारखे)\n •मोठ्या फायली डाउनलोड किंवा अपलोड करणे\n •उच्च तापमानामध्ये आपला फोन वापरणे"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"इन्सटंट अ‍ॅप्स"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"इन्सटंट अॅप्सना स्थापनेची आवश्यकता नसते."</string>
<string name="app_info" msgid="6856026610594615344">"अॅप माहिती"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"वेबवर जा"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"वाय-फाय बंद आहे"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ब्लूटुथ बंद आहे"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 2241227d8da6..01d1b24add8b 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Tiada SIM."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Data Mudah Alih"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Data Mudah Alih Dihidupkan"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Data Mudah Alih Dimatikan"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod pesawat"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Tiada kad SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Perubahan rangkaian pembawa."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Buka butiran bateri"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Mengecas"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G-3G dijeda"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G dijeda"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Data mudah alih dijeda"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data dijeda"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Had data yang anda tetapkan telah dicapai. Anda tidak lagi menggunakan data mudah alih.\n\nJika anda menyambung semula, caj mungkin digunakan untuk penggunaan data."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Sambung semula"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tiada smbg Internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi disambungkan"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Tempat liputan"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Pemberitahuan"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Lampu suluh"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Data mudah alih"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Penggunaan data"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Baki data"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Melebihi had"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profil kerja dihubungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profil peribadi dihubungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Peranti dihubungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Pengurusan peranti"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pemantauan profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pemantauan rangkaian"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Lumpuhkan VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Lihat Dasar"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti serta maklumat lokasi peranti anda.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Peranti anda diurus oleh organisasi.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti serta maklumat lokasi peranti anda.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organisasi anda memasang sijil kuasa pada peranti ini. Trafik rangkaian selamat anda mungkin dipantau atau diubah suai."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organisasi anda memasang sijil kuasa dalam profil kerja anda. Trafik rangkaian selamat anda mungkin dipantau atau diubah suai."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Sijil kuasa dipasang pada peranti ini. Trafik rangkaian selamat anda mungkin dipantau atau diubah suai."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Pentadbir anda telah menghidupkan pengelogan rangkaian yang memantau trafik pada peranti anda."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Anda dihubungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Anda dihubungkan ke <xliff:g id="VPN_APP_0">%1$s</xliff:g> dan <xliff:g id="VPN_APP_1">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Profil kerja anda dihubungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Profil peribadi anda dihubungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Peranti anda diurus oleh <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> dan <xliff:g id="NUMBER_5">%3$d</xliff:g> yang lain</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> dan <xliff:g id="NUMBER_2">%3$d</xliff:g> yang lain</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kawalan pemberitahuan untuk <xliff:g id="APP_NAME">%1$s</xliff:g> dibuka"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Kawalan pemberitahuan untuk <xliff:g id="APP_NAME">%1$s</xliff:g> ditutup"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Benarkan pemberitahuan daripada saluran ini"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Semua Kategori"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Lagi tetapan"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Sesuaikan: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Pemberitahuan <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Apl mungkin tidak berfungsi dengan skrin pisah."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Apl tidak menyokong skrin pisah."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Buka tetapan."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Buka tetapan pantas."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Tutup tetapan pantas."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Menu gambar dalam gambar"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> terdapat dalam gambar dalam gambar"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Jika anda tidak mahu <xliff:g id="NAME">%s</xliff:g> menggunakan ciri ini, ketik untuk membuka tetapan dan matikan ciri."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Main"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Jeda"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Langkau ke seterusnya"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Langkau ke sebelumnya"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Telefon dimatikan kerana panas"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Telefon anda kini berjalan seperti biasa"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefon anda terlalu panas, jadi telefon itu telah dimatikan untuk menyejuk. Sekarang, telefon anda berjalan seperti biasa.\n\nTelefon anda mungkin menjadi terlalu panas jika anda:\n • Menggunakan apl intensif sumber (seperti permainan, video atau apl navigasi)\n • Memuat turun atau memuat naik fail besar\n • Menggunakan telefon anda dalam suhu tinggi"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Apl Segera"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Apl segera tidak memerlukan pemasangan."</string>
<string name="app_info" msgid="6856026610594615344">"Maklumat apl"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Pergi ke web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data mudah alih"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi dimatikan"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth dimatikan"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 4c50569838df..b8aa18f8d64b 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"မိုဘိုင်းဒေတာကို ပိတ်ထားပါသည်"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ဘလူးတုသ်မှတဆင့်ပြန်လည်ချိတ်ဆက်ခြင်း"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"လေယာဥ်ပျံပေါ်အသုံးပြုသောစနစ်။"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM ကဒ် မရှိပါ"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ဝန်ဆောင်မှုဌာန ကွန်ရက် ပြောင်းလဲနေစဉ်။"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ဘက်ထရီ အသေးစိတ် အချက်အလက်များကို ဖွင့်ပါ"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"အလုပ်ပရိုဖိုင်ကို <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"ကိုယ်ပိုင်ပရိုဖိုင်ကို <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"စက်ပစ္စည်းကို <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"စက်ပစ္စည်း စီမံခန့်ခွဲမှု"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ပရိုဖိုင် စောင့်ကြပ်မှု"</string>
<string name="monitoring_title" msgid="169206259253048106">"ကွန်ရက်ကို စောင့်ကြပ်ခြင်း"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN ကို ပိတ်ထားရန်"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ကို အဆက်ဖြတ်ရန်"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"မူဝါဒများကို ကြည့်ရန်"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"သင့်စက်ပစ္စည်းကို <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> အဖွဲ့အစည်းက စီမံခန့်ခွဲထားပါသည်။\n\nသင်၏ စီမံခန့်ခွဲသူသည် ဆက်တင်များ၊ အဖွဲ့အစည်း အသုံးပြုခွင့်များ၊ အက်ပ်များ၊ စက်ပစ္စည်းနှင့် ဆက်စပ်နေသည့် ဒေတာများနှင့် စက်ပစ္စည်း၏ တည်နေရာအချက်အလက်များကို စောင့်ကြည့်၍ စီမံနိုင်ပါသည်။\n\nနောက်ထပ် အချက်အလက်များအတွက် စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"သင့်စက်ပစ္စည်းကို သင်၏အဖွဲ့အစည်းက စီမံခန့်ခွဲထားပါသည်။\n\nသင်၏ စီမံခန့်ခွဲသူသည် ဆက်တင်များ၊ အဖွဲ့အစည်း အသုံးပြုခွင့်များ၊ အက်ပ်များ၊ စက်ပစ္စည်းနှင့် ဆက်စပ်နေသည့် ဒေတာများနှင့် စက်ပစ္စည်း၏ တည်နေရာအချက်အလက်များကို စောင့်ကြည့်၍ စီမံနိုင်ပါသည်။\n\nနောက်ထပ် အချက်အလက်များအတွက် စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"သင်၏ အဖွဲ့အစည်းက ဤစက်ပစ္စည်းတွင် စီမံခန့်ခွဲမှုဆိုင်ရာ အသိအမှတ်ပြုလက်မှတ်ကို ထည့်သွင်းထားပါသည်။ လုံခြုံမှုရှိသော ကွန်ရက်ဒေတာစီးဆင်းမှုကို စောင့်ကြည့်ခြင်း သို့မဟုတ် ပြုပြင်ခြင်းများ ပြုလုပ်နိုင်ပါသည်။"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"သင်၏ အဖွဲ့အစည်းသည် သင်၏ အလုပ်ပရိုဖိုင်တွင် စီမံခန့်ခွဲမှုဆိုင်ရာ အသိအမှတ်ပြုလက်မှတ်ကို ထည့်သွင်းထားပါသည်။ လုံခြုံမှုရှိသော ကွန်ရက်ဒေတာစီးဆင်းမှုကို စောင့်ကြည့်ခြင်း သို့မဟုတ် ပြုပြင်ခြင်းများ ပြုလုပ်နိုင်ပါသည်။"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ဤစက်ပစ္စည်းတွင် စီမံခန့်ခွဲမှုဆိုင်ရာ အသိအမှတ်ပြုလက်မှတ်ကို ထည့်သွင်းထားပါသည်။ လုံခြုံမှုရှိသော ကွန်ရက်ဒေတာစီးဆင်းမှုကို စောင့်ကြည့်ခြင်း သို့မဟုတ် ပြုပြင်ခြင်းများ ပြုလုပ်နိုင်ပါသည်။"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"စက်ပစ္စည်းပေါ်ရှိ ဒေတာစီးဆင်းမှုများကို စောင့်ကြည့်နိုင်သည့် ကွန်ရက်မှတ်တမ်းတင်ခြင်းစနစ်ကို သင်၏ စီမံခန့်ခွဲသူက ဖွင့်ထားပါသည်။"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"သင်သည် သင်၏ အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်။"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"သင်သည် သင်၏ အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင်၏ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP_0">%1$s</xliff:g> နှင့် <xliff:g id="VPN_APP_1">%2$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်။"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"သင်၏အလုပ်ပရိုဖိုင်သည် အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင်၏ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်။"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"သင်၏ ကိုယ်ပိုင်ပရိုဖိုင်သည် အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင်၏ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်။"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"သင့်စက်ပစ္စည်းကို <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> က စီမံခန့်ခွဲထားပါသည်။"</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> အကြောင်းကြားချက် − <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"မျက်နှာပြင် ခွဲခြမ်းပြသမှုဖြင့် အက်ပ်သည် အလုပ်လုပ်မည် မဟုတ်ပါ။"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"အက်ပ်သည် မျက်နှာပြင်ခွဲပြရန် ပံ့ပိုးထားခြင်းမရှိပါ။"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ဆက်တင်များကို ဖွင့်ပါ။"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"အမြန်ဆက်တင်များကို ဖွင့်ပါ။"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"အမြန်ဆက်တင်များကို ပိတ်ပါ။"</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ချက်ခြင်းသုံးအက်ပ်များကို ထည့်သွင်းစရာမလိုပါ။"</string>
<string name="app_info" msgid="6856026610594615344">"အက်ပ်အချက်အလက်"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ဝဘ်သို့ သွားရန်"</string>
<string name="mobile_data" msgid="7094582042819250762">"မိုဘိုင်းဒေတာ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ကို ပိတ်ထားသည်"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ဘလူးတုသ်ကို ပိတ်ထားသည်"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index dd7469a4dcf4..353ff573668f 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobildata er slått av"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-internettdeling."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flymodus."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Mangler SIM-kort."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Bytting av operatørnettverk."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Åpne informasjon om batteriet"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Jobbprofilen er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Den personlige profilen er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Enheten er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Enhetsadministrasjon"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilovervåking"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nettverksovervåking"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Deaktiver VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Koble fra VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Se retningslinjer"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Enheten din administreres av <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministratoren kan overvåke og administrere innstillinger, bedriftstilgang, apper, data som er tilknyttet enheten, og enhetens posisjonsinformasjon.\n\nKontakt administratoren for å få mer informasjon."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Enheten din administreres av organisasjonen din.\n\nAdministratoren kan overvåke og administrere innstillinger, bedriftstilgang, apper, data som er tilknyttet enheten, og enhetens posisjonsinformasjon.\n\nKontakt administratoren for å få mer informasjon."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organisasjonen din installerte en sertifiseringsinstans på denne enheten. Den sikre nettverkstrafikken din kan overvåkes eller endres."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organisasjonen din installerte en sertifiseringsinstans i jobbprofilen din. Den sikre nettverkstrafikken din kan overvåkes eller endres."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"En sertifiseringsinstans er installert på denne enheten. Den sikre nettverkstrafikken din kan overvåkes eller endres."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administratoren din har slått på loggføring av nettverk, som overvåker trafikken på enheten din."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Du er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Du er koblet til <xliff:g id="VPN_APP_0">%1$s</xliff:g> og <xliff:g id="VPN_APP_1">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Jobbprofilen din er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-poster, apper og nettsteder."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Den personlige profilen din er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Enheten din administreres av <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -645,7 +642,7 @@
<string name="nav_bar_default" msgid="8587114043070993007">"(standard)"</string>
<string-array name="nav_bar_buttons">
<item msgid="1545641631806817203">"Utklippstavle"</item>
- <item msgid="5742013440802239414">"Nøkkelkode"</item>
+ <item msgid="5742013440802239414">"Tastkode"</item>
<item msgid="8802889973626281575">"Bytteknapp for tastatur"</item>
<item msgid="8175437057325747277">"Ingen"</item>
</string-array>
@@ -661,8 +658,8 @@
<string name="adjust_button_width" msgid="6138616087197632947">"Juster bredden på knappen"</string>
<string name="clipboard" msgid="1313879395099896312">"Utklippstavle"</string>
<string name="accessibility_key" msgid="5701989859305675896">"Spesialtilpasset navigasjonsknapp"</string>
- <string name="left_keycode" msgid="2010948862498918135">"Venstre-nøkkelkode"</string>
- <string name="right_keycode" msgid="708447961000848163">"Høyre-nøkkelkode"</string>
+ <string name="left_keycode" msgid="2010948862498918135">"Venstre-tastkode"</string>
+ <string name="right_keycode" msgid="708447961000848163">"Høyre-tastkode"</string>
<string name="left_icon" msgid="3096287125959387541">"Venstre-ikon"</string>
<string name="right_icon" msgid="3952104823293824311">"Høyre-ikon"</string>
<string name="drag_to_add_tiles" msgid="7058945779098711293">"Dra for å legge til fliser"</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-varsel: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Det kan hende at appen ikke fungerer med delt skjerm."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Appen støtter ikke delt skjerm."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Åpne innstillingene."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Åpner hurtiginnstillingene."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Lukk hurtiginnstillingene."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Du trenger ikke å installere instant-apper."</string>
<string name="app_info" msgid="6856026610594615344">"Info om appen"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Gå til nettstedet"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi er av"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth er av"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index d9f3bb4d8fd0..293805b5de54 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM छैन।"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"मोबाइल डेटा"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"मोबाइल डेटा सक्रिय छ"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा निष्क्रिय छ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लुटुथ टेदर गर्दै।"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाइजहाज मोड।"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM कार्ड छैन।"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"वाहक नेटवर्क परिवर्तन हुँदै।"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ब्याट्री सम्बन्धी विवरणहरूलाई खोल्नुहोस्"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"चार्ज गर्दै"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटा रोकिएको छ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटा रोकिएको छ"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"मोबाइल डेटा पज गरिएको छ"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"डेटा रोकिएको छ"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"तपाईंले सेट गर्नुभएको डेटाको अधिकतम सीमामा पुगिएको छ। तपाईंले अब उप्रान्त मोबाइल डेटाको प्रयोग गर्नुहुने छैन। \n\nतपाईंले प्रयोग जारी राख्नुभयो भने डेटा प्रयोगका शुल्कहरू लाग्न सक्छन्।"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"पुनः सुरु गर्नुहोस्"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"इन्टरनेट जडान छैन"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi जडित"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हटस्पट"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"अधिसूचनाहरू"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"फ्ल्यासलाइट"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"मोबाइल डेटा"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"डेटाको प्रयोग"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"बाँकी डेटा"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"सीमाभन्दा बढी"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> मा जडान छ"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"व्यक्तिगत प्रोफाइललाई <xliff:g id="VPN_APP">%1$s</xliff:g> मा जडान गरिएको छ"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"उक्त यन्त्रलाई <xliff:g id="VPN_APP">%1$s</xliff:g> मा जडान गरिएको छ"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"यन्त्रको व्यवस्थापन"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफाइल अनुगमन गर्दै"</string>
<string name="monitoring_title" msgid="169206259253048106">"सञ्जाल अनुगमन"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN असक्षम गर्नुहोस्"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"विच्छेद VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"नीतिहरू हेर्नुहोस्"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ले तपाईंको यन्त्रको व्यवस्थापन गर्छ।BREAK\n\nतपाईंका प्रशासकले सेटिङहरू, संस्थागत पहुँच, अनुप्रयोगहरू, तपाईंको यन्त्रसँग सम्बन्धित डेटा र तपाईंको यन्त्रको स्थान सम्बन्धी जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्नुहुन्छ।\n\nथप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"तपाईंको संगठनले तपाईंको यन्त्रको व्यवस्थापन गर्छ।\n\nतपाईंका प्रशासकले सेटिङहरू, संस्थागत पहुँच, अनुप्रयोगहरू, तपाईंको यन्त्रसँग सम्बन्धित डेटा र तपाईंको यन्त्रको स्थान सम्बन्धी जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्नुहुन्छ।\n\nथप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"तपाईंको संगठनले तपाईंको कार्य प्रोफाइलमा एउटा प्रमाणपत्र सम्बन्धी अख्तियार सुविधा स्थापित गऱ्यो। तपाईंको सुरक्षित नेटवर्क ट्राफिकको अनुगमन वा परिमार्जन हुनसक्छ।"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"तपाईंको संगठनले तपाईंको कार्य प्रोफाइलमा एउटा प्रमाणपत्र सम्बन्धी अख्तियार सुविधा स्थापना गरेको छ। तपाईंको सुरक्षित नेटवर्क ट्राफिकको अनुगमन वा परिमार्जन हुनसक्छ।"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"यस यन्त्रमा एउटा प्रमाणपत्र सम्बन्धी अख्तियार सुविधा स्थापना गरिएको छ। तपाईंको सुरक्षित नेटवर्कको ट्राफिकको अनुगमन वा परिमार्जन हुनसक्छ।"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"तपाईंका प्रशासकले तपाईंको यन्त्रमा ट्राफिकको अनुगमन गर्ने नेटवर्क लग गर्ने प्रक्रियालाई सक्रिय गर्नुभएको छ।"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"तपाईं इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्कको गतिविधिको अनुगमन गर्नसक्ने <xliff:g id="VPN_APP">%1$s</xliff:g> मा जडान हुनुहुन्छ।"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"तपाईं इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्कको गतिविधिको अनुगमन गर्नसक्ने <xliff:g id="VPN_APP_0">%1$s</xliff:g> र <xliff:g id="VPN_APP_1">%2$s</xliff:g> मा जडान हुनुहुन्छ।"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"तपाईंको कार्य प्रोफाइल तपाईंका इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्कको गतिविधिको अनुगमन गर्नसक्ने <xliff:g id="VPN_APP">%1$s</xliff:g> मा जडान छ।"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"तपाईंको व्यक्तिगत प्रोफाइल इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्कको गतिविधिको अनुगमन गर्नसक्ने <xliff:g id="VPN_APP">%1$s</xliff:g> मा जडान छ।"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"तपाईंको यन्त्र <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> द्वारा व्यवस्थापन गरिएको छ।"</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> र <xliff:g id="NUMBER_5">%3$d</xliff:g> अन्य</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> र <xliff:g id="NUMBER_2">%3$d</xliff:g> अन्य</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> का सूचना सम्बन्धी नियन्त्रणहरूलाई खोलियो"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> का सूचना सम्बन्धी नियन्त्रणहरूलाई बन्द गरियो"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"यो च्यानलका सूचनाहरूलाई अनुमति दिनुहोस्"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"सबै कोटिहरू"</string>
<string name="notification_more_settings" msgid="816306283396553571">"थप सेटिङहरू"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"आफू अनुकूल पार्नुहोस्: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> को सूचना: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"अनुप्रयोगले विभाजित-स्क्रिनमा काम नगर्न सक्छ।"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"अनुप्रयोगले विभाजित-स्क्रिनलाई समर्थन गर्दैन।"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"सेटिङहरूलाई खोल्नुहोस्।"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"द्रुत सेटिङहरूलाई खोल्नुहोस्।"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"द्रुत सेटिङहरूलाई बन्द गर्नुहोस्।"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"तस्बिर मेनुमा तस्बिर"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> तस्बिरभित्रको तस्बिरमा छ"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"तपाईं <xliff:g id="NAME">%s</xliff:g> ले यो सुविधा प्रयोग नगरोस् भन्ने चाहनुहुन्छ भने ट्याप गरेर सेटिङहरू खोल्नुहोस् र यसलाई निष्क्रिय पार्नुहोस्।"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"प्ले गर्नुहोस्"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"पज गर्नुहोस्"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"अर्कोमा जानुहोस्"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"अघिल्लोमा जानुहोस्"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"फोन अति नै तातिएकाले चिसिन बन्द भयो"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"तपाईंको फोन अब सामान्य ढंगले चल्दै छ"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"तपाईंको फोन अति नै तातिएकाले चिसिन बन्द भयो। तपाईंको फोन अब सामान्य ढंगले चल्दै छ।\n\nतपाईंले निम्न कुराहरू गर्नुभयो भने तपाईंको फोन अत्यन्त तातो हुनसक्छ:\n • धेरै संसाधन खपत गर्ने अनुप्रयोगहरूको प्रयोग (जस्तै गेमिङ, भिडियो वा नेभिगेसन अनुप्रयोगहरू)\n • ठूला फाइलहरूको डाउनलोड वा अपलोड\n • उच्च तापक्रममा फोनको प्रयोग"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"तात्कालिक अनुप्रयोगहरू"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"तात्कालिक अनुप्रयोगहरूलाई स्थापना गर्नु पर्दैन|"</string>
<string name="app_info" msgid="6856026610594615344">"अनुप्रयोगका बारे जानकारी"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"वेबमा जानुहोस्"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi‑Fi निष्क्रिय छ"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ब्लुटुथ निष्क्रिय छ"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index bccf148cbfcb..a9787d134494 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wifi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Geen simkaart."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobiele data"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobiele data aan"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiele data uit"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tethering."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Geen simkaart."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Netwerk van provider wordt gewijzigd."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Accudetails openen"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Opladen"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G/3G-data zijn onderbroken"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data zijn onderbroken"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobiele data zijn onderbroken"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Gegevens zijn onderbroken"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"De datalimiet die je hebt ingesteld, is bereikt. Je gebruikt geen mobiele data meer.\n\nAls je hervat, kunnen er kosten voor datagebruik in rekening worden gebracht."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Hervatten"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Geen internetverbinding"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Verbonden via wifi"</string>
@@ -279,7 +276,7 @@
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth uit"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"Geen gekoppelde apparaten beschikbaar"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatische rotatie"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatisch draaien"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Scherm automatisch draaien"</string>
<string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"Modus voor <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotatie vergrendeld"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Meldingen"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Zaklamp"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobiele data"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Datagebruik"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Resterende gegevens"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Limiet overschreden"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Werkprofiel verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Persoonlijk profiel verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Apparaat verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Apparaatbeheer"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profielcontrole"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netwerkcontrole"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN uitschakelen"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Verbinding met VPN verbreken"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Beleid bekijken"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Je apparaat wordt beheerd door <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nJe beheerder kan instellingen, zakelijke toegang, apps, aan je apparaat gekoppelde gegevens en de locatiegegevens van je apparaat controleren en beheren.\n\nNeem contact op met je beheerder voor meer informatie."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Je apparaat wordt beheerd door je organisatie.\n\nJe beheerder kan instellingen, zakelijke toegang, apps, aan je apparaat gekoppelde gegevens en de locatiegegevens van je apparaat controleren en beheren.\n\nNeem contact op met je beheerder voor meer informatie."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Je organisatie heeft een certificeringsinstantie geïnstalleerd op dit apparaat. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Je organisatie heeft een certificeringsinstantie geïnstalleerd in je werkprofiel. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Er is een certificeringsinstantie geïnstalleerd op dit apparaat. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Je beheerder heeft netwerkregistratie ingeschakeld, waarmee het verkeer op je apparaat wordt bijgehouden."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Je bent verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden gecontroleerd."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Je bent verbonden met <xliff:g id="VPN_APP_0">%1$s</xliff:g> en <xliff:g id="VPN_APP_1">%2$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden bijgehouden."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Je werkprofiel is verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden bijgehouden."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Je persoonlijke profiel is verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden bijgehouden."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Je apparaat wordt beheerd door <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> en <xliff:g id="NUMBER_5">%3$d</xliff:g> andere</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> en <xliff:g id="NUMBER_2">%3$d</xliff:g> andere</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Beheeropties voor meldingen voor <xliff:g id="APP_NAME">%1$s</xliff:g> geopend"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Beheeropties voor meldingen voor <xliff:g id="APP_NAME">%1$s</xliff:g> gesloten"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Meldingen van dit kanaal toestaan"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Alle categorieën"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Meer instellingen"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Aanpassen: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-melding: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"App werkt mogelijk niet met gesplitst scherm."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App biedt geen ondersteuning voor gesplitst scherm."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Instellingen openen."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Snelle instellingen openen."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Snelle instellingen sluiten."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Beeld-in-beeld-menu"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in beeld-in-beeld"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Als je niet wilt dat <xliff:g id="NAME">%s</xliff:g> deze functie gebruikt, tik je om de instellingen te openen en schakel je de functie uit."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Afspelen"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Onderbreken"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Doorgaan naar volgende"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Teruggaan naar vorige"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Telefoon uitgezet wegens hitte"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Je telefoon presteert nu weer zoals gebruikelijk"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Je telefoon was te warm en is uitgeschakeld om af te koelen. Je telefoon presteert nu weer zoals gebruikelijk.\n\nJe telefoon kan warm worden als je:\n • bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n • grote bestanden up- of downloadt,\n • je telefoon gebruikt bij hoge temperaturen."</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant-apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant-apps hoeven niet te worden geïnstalleerd."</string>
<string name="app_info" msgid="6856026610594615344">"App-info"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Ga naar internet"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiele data"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wifi is uitgeschakeld"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is uitgeschakeld"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 3793bbf028c6..0b74ae7e7688 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ਕਿਨਾਰਾ"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ਕੋਈ SIM ਨਹੀਂ।"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"ਮੋਬਾਈਲ ਡੈਟਾ"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ਮੋਬਾਈਲ ਡੈਟਾ ਚਾਲੂ ਹੈ"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"ਮੋਬਾਈਲ ਡੈਟਾ ਬੰਦ ਹੈ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth ਟੀਥਰਿੰਗ।"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ਏਅਰਪਲੇਨ ਮੋਡ।"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"ਕੋਈ SIM ਕਾਰਡ ਨਹੀਂ।"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ਕੈਰੀਅਰ ਨੈੱਟਵਰਕ ਪਰਿਵਰਤਨ।"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ਬੈਟਰੀ ਵੇਰਵੇ ਖੋਲ੍ਹੋ"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ਮੋਬਾਈਲ ਡੈਟਾ ਰੋਕ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਗਈ ਡੈਟਾ ਸੀਮਾ \'ਤੇ ਪਹੁੰਚ ਚੁੱਕੇ ਹੋ। ਤੁਸੀਂ ਹੁਣ ਮੋਬਾਈਲ ਡੈਟੇ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਰਹੇ ਹੋ।\n\nਜੇਕਰ ਤੁਸੀਂ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਡੈਟਾ ਵਰਤੋਂ ਲਈ ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ਕੋਈ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ਕਨੈਕਟ ਕੀਤਾ"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ਹੌਟਸਪੌਟ"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"ਸੂਚਨਾਵਾਂ"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ਫਲੈਸ਼ਲਾਈਟ"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ਮੋਬਾਈਲ ਡੈਟਾ"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ਡੈਟਾ ਉਪਯੋਗ"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ਬਾਕੀ ਡੈਟਾ"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"ਸੀਮਾ ਤੋਂ ਵੱਧ"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"ਡੀਵਾਈਸ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਨ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string>
<string name="monitoring_title" msgid="169206259253048106">"ਨੈੱਟਵਰਕ ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"ਨੀਤੀਆਂ ਵੇਖੋ"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡੈਟੇ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡੈਟੇ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਸਥਾਪਤ ਕੀਤੀ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਸਥਾਪਤ ਕੀਤੀ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਸਥਾਪਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"ਤੁਸੀਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"ਤੁਸੀਂ <xliff:g id="VPN_APP_0">%1$s</xliff:g> ਅਤੇ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀਆਂ ਹਨ।"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"ਤੁਹਾਡਾ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, ਅਤੇ <xliff:g id="NUMBER_5">%3$d</xliff:g> ਹੋਰ</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, ਅਤੇ <xliff:g id="NUMBER_5">%3$d</xliff:g> ਹੋਰ</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨੂੰ ਖੋਲ੍ਹਿਆ ਗਿਆ"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ਇਸ ਚੈਨਲ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਇਜਾਜ਼ਤ ਦਿਓ"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"ਸਭ ਸ਼੍ਰੇਣੀਆਂ"</string>
<string name="notification_more_settings" msgid="816306283396553571">"ਹੋਰ ਸੈਟਿੰਗਾਂ"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> ਸੂਚਨਾ: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਐਪ ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ।"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ਐਪ ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਨੂੰ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ।"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ।"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਖੋਲ੍ਹੋ।"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬੰਦ ਕਰੋ।"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ ਮੀਨੂ"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ \'ਚ ਹੈ"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"ਜੇ ਤੁਸੀਂ ਨਹੀਂ ਚਾਹੁੰਦੇ ਕਿ <xliff:g id="NAME">%s</xliff:g> ਐਪ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰੇ, ਤਾਂ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਬੰਦ ਕਰੋ।"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"ਚਲਾਓ"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"ਵਿਰਾਮ ਦਿਓ"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"ਅਗਲੇ \'ਤੇ ਜਾਓ"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"ਪਿਛਲੇ \'ਤੇ ਜਾਓ"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"ਗਰਮ ਹੋਣ ਕਾਰਨ ਫ਼ੋਨ ਬੰਦ ਹੋ ਗਿਆ"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n • ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਆਵਾਗੌਣ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ \n • ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n • ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ਤਤਕਾਲ ਐਪਾਂ"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ਤਤਕਾਲ ਐਪਾਂ ਨੂੰ ਸਥਾਪਨਾ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।"</string>
<string name="app_info" msgid="6856026610594615344">"ਐਪ ਜਾਣਕਾਰੀ"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ਵੈੱਬ \'ਤੇ ਜਾਓ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ਮੋਬਾਈਲ ਡੈਟਾ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ਬੰਦ ਹੈ"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ਬਲੂਟੁੱਥ ਬੰਦ ਹੈ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 528f7c2c5202..9238519082c7 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -154,14 +154,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Brak karty SIM."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilna transmisja danych"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilna transmisja danych włączona"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilna transmisja danych wyłączona"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Powiązanie Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Tryb samolotowy."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Brak karty SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Zmiana sieci operatora."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Zobacz szczegóły baterii"</string>
@@ -244,11 +243,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Ładowanie"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Transmisja danych 2G-3G została wstrzymana"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Transmisja danych 4G została wstrzymana"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobilna transmisja danych jest wstrzymana"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Transmisja danych została wstrzymana"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Osiągnięto ustawiony limit danych. Nie korzystasz już z komórkowej transmisji danych.\n\nJeśli włączysz ją ponownie, może zostać naliczona opłata za transmisję danych."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Wznów"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string>
@@ -323,8 +320,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Powiadomienia"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Latarka"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobilna transmisja danych"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Użycie danych"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Pozostały limit"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Przekroczono limit"</string>
@@ -437,8 +433,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profil do pracy połączony z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profil osobisty połączony z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Urządzenie połączone z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Zarządzanie urządzeniami"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorowanie profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorowanie sieci"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -447,18 +442,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Wyłącz VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Rozłącz z VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Zobacz zasady"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Urządzeniem zarządza <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane dotyczące urządzenia i lokalizacji oraz nimi zarządzać.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Urządzeniem zarządza Twoja organizacja.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane dotyczące urządzenia i lokalizacji oraz nimi zarządzać.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Twoja organizacja zainstalowała urząd certyfikacji na tym urządzeniu. Zabezpieczony ruch w sieci może być monitorowany i zmieniany."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Twoja organizacja zainstalowała urząd certyfikacji w Twoim profilu do pracy. Zabezpieczony ruch w sieci może być monitorowany i zmieniany."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Urząd certyfikacji zainstalowany na tym urządzeniu. Twój zabezpieczony ruch w sieci może być monitorowany i zmieniany."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim urządzeniu."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Łączysz się z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Łączysz się z aplikacjami <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>, które mogą monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Twój profil do pracy jest połączony z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Twój profil osobisty jest połączony z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Twoim urządzeniem zarządza <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -577,12 +568,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> i <xliff:g id="NUMBER_5">%3$d</xliff:g> innego</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> i <xliff:g id="NUMBER_2">%3$d</xliff:g> inny</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Sterowanie powiadomieniami aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> otwarte"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Sterowanie powiadomieniami aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> zamknięte"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Zezwól na powiadomienia z tego kanału"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Wszystkie kategorie"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Więcej ustawień"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Dostosuj: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -720,6 +708,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Powiadomienie z aplikacji <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikacja może nie działać przy podzielonym ekranie."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikacja nie obsługuje dzielonego ekranu."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Otwórz ustawienia."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Otwórz szybkie ustawienia."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zamknij szybkie ustawienia."</string>
@@ -738,14 +730,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Menu funkcji Obraz w obrazie"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"Aplikacja <xliff:g id="NAME">%s</xliff:g> działa w trybie obraz w obrazie"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Jeśli nie chcesz, by aplikacja <xliff:g id="NAME">%s</xliff:g> korzystała z tej funkcji, otwórz ustawienia i ją wyłącz."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Odtwórz"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Wstrzymaj"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Dalej"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Wstecz"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Telefon wyłączony: przegrzanie"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Telefon działa teraz normalnie"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefon był zbyt gorący i wyłączył się, by obniżyć temperaturę. Urządzenie działa teraz normalnie.\n\nTelefon może się przegrzać, gdy:\n • Używasz aplikacji zużywających dużo zasobów (np. gier, nawigacji czy odtwarzaczy filmów)\n • Pobierasz lub przesyłasz duże pliki\n • Używasz telefonu w wysokiej temperaturze"</string>
@@ -773,8 +761,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplikacje błyskawiczne"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Aplikacji błyskawicznych nie trzeba instalować."</string>
<string name="app_info" msgid="6856026610594615344">"O aplikacji"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Wejdź na stronę internetową"</string>
<string name="mobile_data" msgid="7094582042819250762">"Komórkowa transmisja danych"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi jest wyłączone"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth jest wyłączony"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 669256086ab4..7c99fc8a6441 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Dados móveis desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Sem cartão SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Alteração de rede de operadora."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalhes da bateria"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Perfil de trabalho conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Perfil pessoal conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"O dispositivo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gerenciamento de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoramento de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoramento de rede"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Desativar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver políticas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nO administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações de localização do dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Seu dispositivo é gerenciado pela sua organização.\n\nO administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações de localização do dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Sua organização instalou uma autoridade de certificação neste dispositivo. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Sua organização instalou uma autoridade de certificação no seu perfil de trabalho. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Uma autoridade de certificação foi instalada neste dispositivo. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Você está conectado a <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que podem monitorar sua atividade de rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Seu perfil de trabalho está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade de rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Seu perfil pessoal está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade de rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Seu dispositivo é gerenciado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificação do <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"É possível que o app não funcione com o recurso de divisão de tela."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"O app não é compatível com a divisão de tela."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Abrir configurações."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Abrir as configurações rápidas."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fechar as configurações rápidas."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Os Instant Apps não requerem instalação."</string>
<string name="app_info" msgid="6856026610594615344">"Informações do app"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Acessar a Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"O Wi-Fi está desativado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desativado"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 845a48c1c24d..0399c4e57f1a 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Dados móveis desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ligação Bluetooth via telemóvel."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avião"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nenhum cartão SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Rede do operador em mudança."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalhes da bateria"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Perfil de trabalho ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Perfil pessoal ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Dispositivo ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gestão de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorização de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorização da rede"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Desativar a VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desligar VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver Políticas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"O dispositivo é gerido pela <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nO administrador pode monitorizar e gerir definições, acesso empresarial, aplicações, dados associados ao dispositivo e informações de localização do dispositivo.\n\nContacte o administrador para obter mais informações."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"O dispositivo é gerido pela sua entidade.\n\nO administrador pode monitorizar e gerir definições, acesso empresarial, aplicações, dados associados ao dispositivo e informações de localização do dispositivo.\n\nContacte o administrador para obter mais informações."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"A sua entidade instalou uma autoridade de certificação neste dispositivo. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"A sua entidade instalou uma autoridade de certificação no seu perfil de trabalho. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Está instalada uma autoridade de certificação neste dispositivo. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"O administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Está ligado às redes <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que podem monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"O seu perfil de trabalho está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"O seu perfil pessoal está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O seu dispositivo é gerido pelo <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificação do <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"A aplicação pode não funcionar com o ecrã dividido."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"A aplicação não é compatível com o ecrã dividido."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Abrir as definições."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Abrir as definições rápidas."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fechar as definições rápidas."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplicações instantâneas"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"As Aplicações instantâneas não requerem instalação."</string>
<string name="app_info" msgid="6856026610594615344">"Informações da aplicação"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Aceder à Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi desativado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desativado"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 669256086ab4..7c99fc8a6441 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Dados móveis desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Sem cartão SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Alteração de rede de operadora."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalhes da bateria"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Perfil de trabalho conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Perfil pessoal conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"O dispositivo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gerenciamento de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoramento de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoramento de rede"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Desativar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver políticas"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nO administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações de localização do dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Seu dispositivo é gerenciado pela sua organização.\n\nO administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações de localização do dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Sua organização instalou uma autoridade de certificação neste dispositivo. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Sua organização instalou uma autoridade de certificação no seu perfil de trabalho. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Uma autoridade de certificação foi instalada neste dispositivo. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Você está conectado a <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que podem monitorar sua atividade de rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Seu perfil de trabalho está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade de rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Seu perfil pessoal está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade de rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Seu dispositivo é gerenciado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificação do <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"É possível que o app não funcione com o recurso de divisão de tela."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"O app não é compatível com a divisão de tela."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Abrir configurações."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Abrir as configurações rápidas."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fechar as configurações rápidas."</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Os Instant Apps não requerem instalação."</string>
<string name="app_info" msgid="6856026610594615344">"Informações do app"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Acessar a Web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"O Wi-Fi está desativado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desativado"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 5b66fe231c40..1e04da1e1ac8 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -158,6 +158,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Date mobile dezactivate"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conectarea ca modem prin Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod Avion."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Fără SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Se schimbă rețeaua operatorului."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Deschideți detaliile privind bateria"</string>
@@ -431,8 +433,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profilul de serviciu este conectat la <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profil personal conectat la <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Dispozitiv conectat la <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Gestionarea dispozitivului"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorizarea profilului"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorizarea rețelei"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -441,18 +442,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Dezactivați conexiunea prin VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Deconectați rețeaua VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Afișați politicile"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministratorul dvs. poate să monitorizeze și să gestioneze setările, accesul la nivelul companiei, aplicațiile, datele asociate dispozitivului și informațiile despre locația dispozitivului.\n\nPentru mai multe informații, contactați administratorul."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Dispozitivul este gestionat de organizația dvs.\n\nAdministratorul dvs. poate să monitorizeze și să gestioneze setările, accesul la nivelul companiei, aplicațiile, datele asociate dispozitivului și informațiile despre locația dispozitivului.\n\nPentru mai multe informații, contactați administratorul."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organizația dvs. a instalat un certificat CA pe acest dispozitiv. Traficul dvs. sigur de rețea poate fi monitorizat sau modificat."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organizația dvs. a instalat un certificat CA în profilul dvs. de serviciu. Traficul dvs. sigur de rețea poate fi monitorizat sau modificat."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Pe acest dispozitiv este instalat un certificat CA. Traficul dvs. sigur de rețea poate fi monitorizat sau modificat."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administratorul dvs. a activat înregistrarea în jurnal pentru rețea, funcție ce monitorizează traficul de pe dispozitivul dvs."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"V-ați conectat la aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"V-ați conectat la <xliff:g id="VPN_APP_0">%1$s</xliff:g> și la <xliff:g id="VPN_APP_1">%2$s</xliff:g>, care vă pot monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Profilul dvs. de serviciu este conectat la <xliff:g id="VPN_APP">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Profilul dvs. personal este conectat la <xliff:g id="VPN_APP">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Dispozitivul dvs. este gestionat de <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -709,6 +706,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificare <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Este posibil ca aplicația să nu funcționeze cu ecranul împărțit."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplicația nu acceptă ecranul împărțit."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Deschideți setările."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Deschideți setările rapide."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Închideți setările rapide."</string>
@@ -758,8 +759,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplicații instantanee"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Aplicațiile instantanee nu necesită instalare."</string>
<string name="app_info" msgid="6856026610594615344">"Informații despre aplicație"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Accesați pe web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Date mobile"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Conexiunea Wi-Fi este dezactivată"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Funcția Bluetooth este dezactivată"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 7b85e2e0dd60..7ed059f19ca3 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -159,6 +159,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобильный Интернет отключен"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-модем"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим полета."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Нет SIM-карты."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Сменить сеть"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Сведения о расходе заряда батареи"</string>
@@ -433,8 +435,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"В рабочем профиле запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\""</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"В личном профиле запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\""</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"На устройстве запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\""</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Управление устройством"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Мониторинг профиля"</string>
<string name="monitoring_title" msgid="169206259253048106">"Отслеживание сетей"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"Настройки VPN"</string>
@@ -443,18 +444,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Отключить VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Отключить VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Просмотреть политику"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Вашим устройством управляет организация \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\".\n\nАдминистратор может контролировать настройки, приложения и параметры доступа к корпоративным ресурсам на этом устройстве, а также связанные с ним данные (например, сведения о местоположении).\n\nЗа подробной информацией обращайтесь к администратору."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Этим устройством управляет ваша организация.\n\nАдминистратор может контролировать настройки, приложения и параметры доступа к корпоративным ресурсам на этом устройстве, а также связанные с ним данные (например, сведения о местоположении).\n\nЗа подробной информацией обращайтесь к администратору."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Ваша организация установила сертификат ЦС на устройство. Она может отслеживать и изменять защищенный сетевой трафик."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Ваша организация установила сертификат ЦС в рабочем профиле. Она может отслеживать и изменять защищенный сетевой трафик."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"На устройстве установлен сертификат ЦС. Ваш защищенный сетевой трафик могут отслеживать и изменять."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Администратор включил ведение сетевого журнала, чтобы отслеживать трафик на вашем устройстве."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Оно может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и сайтами."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Запущены приложения \"<xliff:g id="VPN_APP_0">%1$s</xliff:g>\" и \"<xliff:g id="VPN_APP_1">%2$s</xliff:g>\". Они могут отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и сайтами."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"В рабочем профиле запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\", которое может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"В личном профиле запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\", которое может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и сайтами."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Этим устройством управляет приложение \"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>\""</string>
@@ -713,6 +710,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Уведомление <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Приложение не поддерживает разделение экрана."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Приложение не поддерживает разделение экрана."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Открыть настройки."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Развернуть быстрые настройки."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Скрыть быстрые настройки."</string>
@@ -762,8 +763,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Приложения с мгновенным запуском"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Приложения с мгновенным запуском не требуется устанавливать."</string>
<string name="app_info" msgid="6856026610594615344">"О приложении"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Перейти в браузер"</string>
<string name="mobile_data" msgid="7094582042819250762">"Моб. Интернет"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Модуль Wi-Fi отключен"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Модуль Bluetooth отключен"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index d539d1c0c687..a112f521d891 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM නැත."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"ජංගම දත්ත"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ජංගම දත්ත ක්‍රියාත්මකයි"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"ජංගම දත්ත ක්‍රියාවිරහිතයි"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"බ්ලූටූත් ටෙදරින්."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"අහස්යානා ආකාරය."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM කාඩ්පත නැත."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"වාහක ජාලය වෙනස් වේ."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"බැටරි විස්තර විවෘත කරන්න"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ආරෝපණය වෙමින්"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G දත්ත විරාම කර ඇත"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G දත්ත විරාම කර ඇත"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ජංගම දත්ත විරාම කර ඇත"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"දත්ත විරාම කර ඇත"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ඔබ සැකසූ දත්ත සීමාව ළඟා වී ඇත. ඔබ තවදුරටත් ජංගම දත්ත භාවිත නොකරයි. \n\nඔබ නැවත ආරම්භ කළහොත්, දත්ත භාවිතය සඳහා ගාස්තු අදාළ විය හැකිය."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"නැවත පටන්ගන්න"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"අන්තර්ජාල සම්බන්ධතාවයක් නැත"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi සම්බන්ධිතයි"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"හොට්ස්පොට්"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"දැනුම්දීම්"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"සැණෙළි ආලෝකය"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ජංගම දත්ත"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"දත්ත භාවිතය"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ඉතිරි ඇති දත්ත"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"සීමාවට වඩා වැඩිය"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"කාර්යාල පැතිකඩ <xliff:g id="VPN_APP">%1$s</xliff:g> වෙත සම්බන්ධ වුණි"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"පුද්ගලික පැතිකඩ <xliff:g id="VPN_APP">%1$s</xliff:g> වෙත සම්බන්ධ වුණි"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"උපාංගය <xliff:g id="VPN_APP">%1$s</xliff:g> වෙත සම්බන්ධ වුණි"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"උපාංග කළමනාකරණය"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"පැතිකඩ නිරීක්ෂණය කිරීම"</string>
<string name="monitoring_title" msgid="169206259253048106">"ජාල නිරීක්ෂණය"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN අබල කරන්න."</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN විසන්ධි කරන්න"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"ප්‍රතිපත්ති පෙන්වන්න"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"ඔබගේ උපාංගය ඔබගේ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> විසින් කළමනාකරණය කරනු ලැබේ. \n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්‍රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංග ස්ථාන තොරතුරු නිරීක්ෂණය සහ කළමනාකරණය කිරීමට හැකිය.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"ඔබගේ උපාංගය ඔබගේ සංවිධානය විසින් කළමනාකරණය කරනු ලැබේ.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්‍රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංග ස්ථාන තොරතුරු නිරීක්ෂණය සහ කළමනාකරණය කිරීමට හැකිය.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ඔබගේ සංවිධානය ඔබගේ උපාංගය තුළ සහතික අධිකාරියක් ස්ථාපනය කර තිබේ. ඔබගේ ආරක්ෂක ජාල තදබදය නිරීක්ෂණය හෝ වෙනස් කිරීමට පුළුවනි."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ඔබගේ සංවිධානය ඔබගේ කාර්යාල පැතිකඩ තුළ සහතික අධිකාරියක් ස්ථාපනය කර තිබේ. ඔබගේ ආරක්ෂක ජාල තදබදය නිරීක්ෂණය හෝ වෙනස් කිරීමට පුළුවනි."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"මෙම උපාංගය තුළ සහතික අධිකාරියක් ස්ථාපනය කර තිබේ. ඔබගේ ආරක්ෂක ජාල තදබදය නිරීක්ෂණය හෝ වෙනස් කිරීමට පුළුවනි."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"ඔබගේ පරිපාලක ඔබගේ උපාංගය මත තදබදය නිරීක්ෂණය කරන ජාල ලොග් කිරීම ක්‍රියාත්මක කර ඇත."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP">%1$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP_0">%1$s</xliff:g> සහ <xliff:g id="VPN_APP_1">%2$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP">%1$s</xliff:g>, වෙත ඔබේ කාර්යාල පැතිකඩ සම්බන්ධ වී ඇත."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP">%1$s</xliff:g> වෙත ඔබේ පුද්ගලික පැතිකඩ සම්බන්ධ වී ඇත."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ඔබගේ උපාංගය <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> මගින් කළමනාකරණය කෙරේ."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, සහ තවත් <xliff:g id="NUMBER_5">%3$d</xliff:g>ක්</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, සහ තවත් <xliff:g id="NUMBER_5">%3$d</xliff:g>ක්</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා දැනුම්දීම් පාලන විවෘත කරන ලදී"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා දැනුම්දීම් පාලන වසන ලදී"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"මෙම නාලිකාව වෙතින් දැනුම්දීම් සඳහා ඉඩ දෙන්න"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"සියලු ප්‍රවර්ග"</string>
<string name="notification_more_settings" msgid="816306283396553571">"තව සැකසීම්"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"අභිමත කරන්න: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> දැනුම්දීම: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"යෙදුම බෙදුම්-තිරය සමග ක්‍රියා නොකළ හැකිය."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"යෙදුම බෙදුණු-තිරය සඳහා සහාය නොදක්වයි."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"සැකසීම් විවෘත කරන්න."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ඉක්මන් සැකසීම් විවෘත කරන්න."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ඉක්මන් සැකසීම් වසන්න."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"පින්තූරය තුළ පින්තූරය මෙනුව"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> පින්තූරය-තුළ-පින්තූරය තුළ වේ"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"ඔබට <xliff:g id="NAME">%s</xliff:g> මෙම විශේෂාංගය භාවිත කිරීමට අවශ්‍ය නැති නම්, සැකසීම් විවෘත කිරීමට තට්ටු කර එය ක්‍රියාවිරහිත කරන්න."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"ධාවනය කරන්න"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"විරාම කරන්න"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"ඊළඟ එකට පනින්න"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"පෙර එකට පනින්න"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"දුරකථනය රත් වීම නිසා ක්‍රියාවිරහිත කරන ලදී"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ඔබගේ දුරකථනය දැන් සාමාන්‍ය ලෙස ධාවනය වේ"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ඔබේ දුරකථනය ඉතාම උණුසුම්ය, එම නිසා එය සිසිල් වීමට ක්‍රියාවිරහිත කරන ලදී. ධැන් ඔබේ දුරකථනය සාමාන්‍ය පරිදි ධාවනය වේ.\n\nඔබ පහත දේවල් සිදු කළහොත් ඔබේ දුරකථනය ඉතාම උණුසුම් විය හැකිය:\n • සම්පත්-දැඩි සත්කාරක යෙදුම් භාවිතය (ක්‍රීඩා, වීඩියෝ, හෝ සංචලන යෙදුම් යනාදී)\n • විශාල ගොනු බාගැනීම හෝ උඩුගත කිරීම\n • ඔබේ දුරකථනය අධික උෂ්ණත්වයේදී භාවිත කිරීම"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"ක්ෂණික යෙදුම්"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"ක්ෂණික යෙදුම් ස්ථාපනය කිරීම අවශ්‍ය නොවේ."</string>
<string name="app_info" msgid="6856026610594615344">"යෙදුම් තොරතුරු"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"වෙබය වෙත යන්න"</string>
<string name="mobile_data" msgid="7094582042819250762">"ජංගම දත්ත"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ක්‍රියා විරහිතයි"</string>
<string name="bt_is_off" msgid="2640685272289706392">"බ්ලූටූත් ක්‍රියා විරහිතයි"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index a1af259a6c0d..ca50c678fa07 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -159,6 +159,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilné dáta sú vypnuté"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pripojenie cez Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim v lietadle."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Žiadna SIM karta."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Zmena siete operátora"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otvoriť podrobnosti o batérii"</string>
@@ -316,7 +318,7 @@
<string name="quick_settings_done" msgid="3402999958839153376">"Hotovo"</string>
<string name="quick_settings_connected" msgid="1722253542984847487">"Pripojené"</string>
<string name="quick_settings_connecting" msgid="47623027419264404">"Pripája sa..."</string>
- <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Zdieľanie dátového pripojenia"</string>
+ <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Zdieľané pripojenie"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Upozornenia"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Baterka"</string>
@@ -433,8 +435,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Pracovný profil je pripojený k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Osobný profil je pripojený k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Zariadenie je pripojené k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Správa zariadení"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorovanie profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sledovanie siete"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +444,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Deaktivovať VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Odpojiť sieť VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Zobraziť pravidlá"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Zariadenie spravuje organizácia <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje súvisiace s týmto zariadením vrátane informácií o polohe vášho zariadenia.\n\nĎalšie informácie vám poskytne správca."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Zariadenie spravuje vaša organizácia.\n\nSprávca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje súvisiace s týmto zariadením vrátane informácií o polohe vášho zariadenia.\n\nĎalšie informácie vám poskytne správca."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organizácia nainštalovala pre toto zariadenie certifikačnú autoritu. Zabezpečená sieťová premávka môže byť sledovaná či upravená."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organizácia nainštalovala pre váš pracovný profil certifikačnú autoritu. Zabezpečená sieťová premávka môže byť sledovaná či upravená."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"V tomto zariadení je nainštalovaná certifikačná autorita. Zabezpečená sieťová premávka môže byť sledovaná či upravená."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Správca aktivoval zapisovanie do denníka siete, ktoré sleduje premávku na vašom zariadení."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Pripojili ste sa k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti, vrátane správ, aplikácií a webových stránok."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Pripojili ste sa k aplikáciám <xliff:g id="VPN_APP_0">%1$s</xliff:g> a <xliff:g id="VPN_APP_1">%2$s</xliff:g>, ktoré môžu sledovať vašu aktivitu v sieti, vrátane správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Váš pracovný profil je pripojený k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Váš osobný profil je pripojený k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vaše zariadenie spravuje aplikácia <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -713,6 +710,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Upozornenie <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikácia nemusí fungovať so zapnutou rozdelenou obrazovkou."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikácia nepodporuje rozdelenú obrazovku."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Otvoriť nastavenia"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Otvoriť rýchle nastavenia"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zavrieť rýchle nastavenia"</string>
@@ -762,8 +763,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Okamžité aplikácie"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Okamžité aplikácie nevyžadujú inštaláciu."</string>
<string name="app_info" msgid="6856026610594615344">"Info o aplikácii"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Prejsť na internet"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilné dátové prenosy"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Pripojenie Wi-Fi je vypnuté"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Rozhranie Bluetooth je vypnuté"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 3edd141ed69a..e4e6361c1055 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -154,14 +154,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Ni kartice SIM."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Prenos podatkov v mobilnem omrežju"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Prenos podatkov v mobilnem omrežju je vklopljen"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Prenos podatkov v mobilnem omrežju je izklopljen"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internet prek Bluetootha."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način za letalo."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Ni kartice SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Spreminjanje omrežja operaterja."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Odpiranje podrobnosti o akumulatorju"</string>
@@ -246,11 +245,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Polnjenje"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Prenos podatkov v omrežju 2G/3G je zaustavljen"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Prenos podatkov v omrežju 4G je zaustavljen"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Prenos podatkov v mobil. omrežju je zaustavljen"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Prenos podatkov je zaustavljen"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Dosegli ste nastavljeno omejitev porabe podatkov. Prenosa podatkov v mobilnem omrežju ne uporabljate več.\n\nČe nadaljujete, lahko nastanejo stroški prenosa podatkov."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Nadaljuj"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ni internetne povez."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
@@ -325,8 +322,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Dostopna točka"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Obvestila"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Svetilka"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Prenos podatkov v mobilnem omrežju"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Poraba podatkov"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Preostala količina podatkov"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Omejitev prekoračena"</string>
@@ -439,8 +435,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Delovni profil je povezan z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Osebni profil je povezan z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Naprava je povezana z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Upravljanje naprav"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadzor nad profilom"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadzor omrežja"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -449,18 +444,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Onemogoči VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini povezavo z VPN-jem"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Prikaži pravilnike"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Napravo upravlja organizacija <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, z napravo povezane podatke in podatke o lokaciji naprave.\n\nZa več informacij se obrnite na skrbnika."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Napravo upravlja vaša organizacija.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, z napravo povezane podatke in podatke o lokaciji naprave.\n\nZa več informacij se obrnite na skrbnika."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Vaša organizacija je v to napravo namestila overitelja potrdil. Varni omrežni promet se lahko nadzira ali spreminja."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Vaša organizacija je v vaš delovni profil namestila overitelja potrdil. Varni omrežni promet se lahko nadzira ali spreminja."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"V tej napravi je nameščen overitelj potrdil. Varni omrežni promet se lahko nadzira ali spreminja."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Skrbnik je vklopil beleženje omrežnega prometa, ki nadzira promet v napravi."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Povezani ste z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Povezani ste z aplikacijama <xliff:g id="VPN_APP_0">%1$s</xliff:g> in <xliff:g id="VPN_APP_1">%2$s</xliff:g>, ki lahko nadzirata omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Delovni profil je povezan z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Osebni profil je povezan z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Napravo upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -579,12 +570,9 @@
<item quantity="few"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> in <xliff:g id="NUMBER_5">%3$d</xliff:g> drugi</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> in <xliff:g id="NUMBER_5">%3$d</xliff:g> drugih</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kontrolniki obvestil za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g> so odprti"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Kontrolniki obvestil za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g> so zaprti"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Dovoli obvestila iz tega kanala"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Vse kategorije"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Več nastavitev"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Prilagodi: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -722,6 +710,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Obvestilo za <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikacija morda ne deluje v načinu razdeljenega zaslona."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikacija ne podpira načina razdeljenega zaslona."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Odpri nastavitve."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Odpri hitre nastavitve."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zapri hitre nastavitve."</string>
@@ -740,14 +732,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Meni za sliko v sliki"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> je v načinu slika v sliki"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Če ne želite, da aplikacija <xliff:g id="NAME">%s</xliff:g> uporablja to funkcijo, se dotaknite, da odprete nastavitve, in funkcijo izklopite."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Predvajaj"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Začasno ustavi"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Preskoči na naslednjega"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Preskoči na prejšnjega"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Tel. izklopljen zaradi vročine"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Zdaj telefon normalno deluje"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefon je bil prevroč, zato se je izklopil, da se ohladi. Zdaj normalno deluje.\n\nTelefon lahko postane prevroč ob:\n • uporabi aplikacij, ki intenzivno porabljajo sredstva (npr. za igranje iger, videoposnetke ali navigacijo)\n • prenosu ali nalaganju velikih datotek\n • uporabi telefona pri visokih temp."</string>
@@ -775,8 +763,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplikacije brez nameščanja"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Aplikacij brez nameščanja ni treba namestiti."</string>
<string name="app_info" msgid="6856026610594615344">"Podatki o aplikaciji"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Pojdi v splet"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podatki"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi je izklopljen"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je izklopljen"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 18aaa2741581..e10063b9cb86 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Të dhënat celulare janë joaktive"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Po lidhet me \"bluetooth\"."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"modaliteti i aeroplanit"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nuk ka kartë SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Rrjeti i operatorit celular po ndryshohet."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Hap detajet e baterisë"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Profili i punës është i lidhur me <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Profili personal është i lidhur me <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Pajisja është e lidhur me <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Menaxhimi i pajisjes"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorimi i profilit"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorimi i rrjetit"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Çaktivizo VPN-në"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Shkëput VPN-në"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Shiko politikat"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministratori mund të monitorojë dhe menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen tënde, si dhe informacionet e vendndodhjes së pajisjes tënde.\n\nPër më shumë informacione, kontakto me administratorin."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Pajisja jote menaxhohet nga organizata jote.\n\nAdministratori mund të monitorojë dhe menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen tënde, si dhe informacionet e vendndodhjes së pajisjes tënde.\n\nPër më shumë informacione, kontakto me administratorin."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organizata jote instaloi një autoritet certifikate në këtë pajisje. Trafiku i rrjetit tënd të sigurt mund të monitorohet ose modifikohet."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organizata jote instaloi një autoritet certifikate në profilin tënd të punës. Trafiku i rrjetit tënd të sigurt mund të monitorohet ose modifikohet."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Në këtë pajisje është instaluar një autoritet certifikate. Trafiku i rrjetit tënd të sigurt mund të monitorohet ose modifikohet."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administratori ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në pajisjen tënde."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Je lidhur me aplikacionin <xliff:g id="VPN_APP">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Je lidhur me aplikacionet <xliff:g id="VPN_APP_0">%1$s</xliff:g> dhe <xliff:g id="VPN_APP_1">%2$s</xliff:g>, të cilat mund të monitorojnë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Profili yt i punës është i lidhur me <xliff:g id="VPN_APP">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Profili yt personal është i lidhur me <xliff:g id="VPN_APP">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Pajisja jote menaxhohet nga <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Njoftim nga <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Aplikacioni mund të mos funksionojë me ekranin e ndarë."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Aplikacioni nuk mbështet ekranin e ndarë."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Hap cilësimet."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Hap cilësimet e shpejta."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Mbyll cilësimet e shpejta."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Aplikacionet e çastit"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Aplikacionet e çastit nuk kërkojnë instalim."</string>
<string name="app_info" msgid="6856026610594615344">"Informacioni mbi aplikacionin"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Shko në ueb"</string>
<string name="mobile_data" msgid="7094582042819250762">"Të dhënat celulare"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi është joaktiv"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth-i është joaktiv"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 5eee968f3e56..577281a53e0b 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -158,6 +158,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобилни подаци су искључени"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth привезивање."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим рада у авиону."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Нема SIM картице."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Промена мреже мобилног оператера."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Отвори детаље о батерији"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Профил за Work је повезан са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Лични профил је повезан са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Уређај је повезан са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Управљање уређајима"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Надгледање профила"</string>
<string name="monitoring_title" msgid="169206259253048106">"Надгледање мреже"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Онемогући VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Прекини везу са VPN-ом"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Прикажи смернице"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Уређајем управља <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима.\n\nВише информација потражите од администратора."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Уређајем управља организација.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима.\n\nВише информација потражите од администратора."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Организација је на овом уређају инсталирала ауторитет за издавање сертификата. Безбедни мрежни саобраћај може да се прати или мења."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Организација је на профилу за Work инсталирала ауторитет за издавање сертификата. Безбедни мрежни саобраћај може да се прати или мења."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"На овом уређају је инсталиран ауторитет за издавање сертификата. Безбедни мрежни саобраћај може да се прати или мења."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Администратор је укључио евидентирање мреже, које прати саобраћај на уређају."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Повезани сте са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Повезани сте са апликацијама <xliff:g id="VPN_APP_0">%1$s</xliff:g> и <xliff:g id="VPN_APP_1">%2$s</xliff:g>, које могу да надгледају активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Профил за Work је повезан са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Лични профил је повезан са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Уређајем управља <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -707,6 +704,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Обавештења за <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Апликација можда неће функционисати са подељеним екраном."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Апликација не подржава подељени екран."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Отвори Подешавања."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Отвори Брза подешавања."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Затвори Брза подешавања."</string>
@@ -756,8 +757,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Инстант апликације"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Инстант апликације не захтевају инсталацију."</string>
<string name="app_info" msgid="6856026610594615344">"Информације о апликацији"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Иди на веб"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилни подаци"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi је искључен"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth је искључен"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index a5f5ae5a38e7..8a3dad796632 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobildata har inaktiverats"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetdelning via Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flygplansläge"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Inget SIM-kort."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Byter leverantörsnätverk."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Visa uppgifter om batteri"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Jobbprofilen är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Den personliga profilen är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Enheten är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Enhetshantering"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilövervakning"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nätverksövervakning"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Inaktivera VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Koppla från VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Visa policyer"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Din enhet hanteras av <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data med koppling till enheten och enhetens plats.\n\nKontakta administratören om du vill veta mer."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Din enhet hanteras av organisationen.\n\nAdministratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data med koppling till enheten och enhetens plats.\n\nKontakta administratören om du vill veta mer."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Organisationen har installerat en certifikatutfärdare på enheten. Din säkra nätverkstrafik kan övervakas och ändras."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Organisationen har installerat en certifikatutfärdare i jobbprofilen. Din säkra nätverkstrafik kan övervakas och ändras."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"En certifikatutfärdare är installerad på enheten. Din säkra nätverkstrafik kan övervakas och ändras."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administratören har aktiverat nätverksloggning som övervakar trafik på enheten."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Du är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g> som kan övervaka din nätverksaktivitet, inklusive e-postmeddelanden, appar och webbplatser."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Du är ansluten till <xliff:g id="VPN_APP_0">%1$s</xliff:g> och <xliff:g id="VPN_APP_1">%2$s</xliff:g> som kan övervaka din nätverksaktivitet, inklusive e-postmeddelanden, appar och webbplatser."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Jobbprofilen är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g> som kan övervaka din nätverksaktivitet, exempelvis e-post, appar och webbplatser."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Din personliga profil är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g> som kan övervaka din nätverksaktivitet, exempelvis e-post, appar och webbplatser."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Enheten hanteras av <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-avisering: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Appen kanske inte fungerar med delad skärm."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Appen har inte stöd för delad skärm."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Öppna inställningarna."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Öppna snabbinställningarna."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Stäng snabbinställningarna"</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Snabbappar behöver inte installeras."</string>
<string name="app_info" msgid="6856026610594615344">"Info om appen"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Öppna webbplatsen"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi är inaktiverat"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth är inaktiverat"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 68728c2d3f69..0c32105c457e 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Data ya Simu Imezimwa"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Shiriki intaneti kwa Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Hali ya ndege."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Hakuna SIM kadi."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Mabadiliko ya mtandao wa mtoa huduma."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Fungua maelezo ya betri"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Wasifu wa kazini umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Wasifu wa binafsi umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Kifaa kimeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Udhibiti wa kifaa"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Ufuatiliaji wasifu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ufuatiliaji wa mtandao"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Zima VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Ondoa VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Angalia Sera"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Kifaa chako kinadhibitiwa na <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa maudhui ya shirika, programu, data inayohusiana na kifaa chako na maelezo kuhusu mahali kifaa kipo.\n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Kifaa chako kinadhibitiwa na shirika lako.\n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa maudhui ya shirika, programu, data inayohusiana na kifaa chako na maelezo kuhusu mahali kifaa kipo.\n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Shirika lako limesakinisha mamlaka ya cheti kwenye kifaa hiki. Huenda shughuli kwenye mtandao wako salama zikafuatiliwa au kubadilishwa."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Shirika lako limesakinisha mamlaka ya cheti katika wasifu wako wa kazini. Huenda shughuli kwenye mtandao wako salama zikafuatiliwa au kubadilishwa."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Mamlaka ya cheti imesakinishwa kwenye kifaa hiki. Huenda shughuli kwenye mtandao wako salama zikafuatiliwa au kubadilishwa."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Msimamizi wako amewasha kumbukumbu ya kuingia mtandaoni, ambayo hufuatilia shughuli kwenye kifaa chako."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Umeunganishwa kwenye <xliff:g id="VPN_APP_0">%1$s</xliff:g> na <xliff:g id="VPN_APP_1">%2$s</xliff:g>, ambazo zinaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Wasifu wako wa kazini umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Wasifu wako wa binafsi umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Kifaa chako kinadhibitiwa na <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Arifa kutoka <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Huenda programu isifanye kazi kwenye skrini inayogawanywa."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Programu haiwezi kutumia skrini iliyogawanywa."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Fungua mipangilio."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Fungua mipangilio ya haraka."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Funga mipangilio ya haraka."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Programu Zinazofunguka Papo Hapo"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Huhitaji kusakinisha programu zinazofunguka papo hapo."</string>
<string name="app_info" msgid="6856026610594615344">"Maelezo ya programu"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Nenda kwenye wavuti"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data ya simu"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi imezimwa"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth imezimwa"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index ef637c47b124..e82c7c56917a 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"மொபைல் தரவு முடக்கப்பட்டது"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"புளூடூத் டெதெரிங்."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"விமானப் பயன்முறை."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"சிம் கார்டு இல்லை."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"மொபைல் நிறுவன மாற்றம்."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"பேட்டரி விவரங்களைத் திறக்கும்"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"<xliff:g id="VPN_APP">%1$s</xliff:g> உடன் பணிவிவரம் இணைக்கப்பட்டுள்ளது"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"தனிப்பட்ட சுயவிவரம் <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளது"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"சாதனம் <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளது"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"சாதன நிர்வாகம்"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"சுயவிவரத்தைக் கண்காணித்தல்"</string>
<string name="monitoring_title" msgid="169206259253048106">"நெட்வொர்க்கைக் கண்காணித்தல்"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPNஐ முடக்கு"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNஐத் துண்டி"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"கொள்கைகளைக் காட்டு"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"சாதனத்தை <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> நிர்வகிக்கிறது.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், உங்கள் சாதனத்துடன் தொடர்புடைய தரவு, சாதனங்களின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"சாதனத்தை உங்கள் நிறுவனம் நிர்வகிக்கிறது.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், உங்கள் சாதனத்துடன் தொடர்புடைய தரவு, சாதனங்களின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"உங்கள் நிறுவனம் இந்தச் சாதனத்தில் சான்றிதழ் அங்கீகாரத்தை நிறுவியுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"உங்கள் நிறுவனம், பணி விவரத்தில் சான்றிதழ் அங்கீகாரத்தை நிறுவியுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"இந்தச் சாதனத்தில் சான்றிதழ் அங்கீகாரம் நிறுவப்பட்டுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"உங்கள் நிர்வாகி, நெட்வொர்க் பதிவெடுத்தலை இயக்கியுள்ளார். இது சாதனத்தில் ட்ராஃபிக்கைக் கண்காணிக்கும்."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள்."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய <xliff:g id="VPN_APP_0">%1$s</xliff:g> மற்றும் <xliff:g id="VPN_APP_1">%2$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள்."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் உங்கள் பணி விவரம் இணைக்கப்பட்டுள்ளது."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் உங்களின் தனிப்பட்ட சுயவிவரம் இணைக்கப்பட்டுள்ளது."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"உங்கள் சாதனத்தை நிர்வகிப்பது: <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> அறிவிப்பு: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"திரைப் பிரிப்பில் பயன்பாடு வேலைசெய்யாமல் போகக்கூடும்."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"திரையைப் பிரிப்பதைப் பயன்பாடு ஆதரிக்கவில்லை."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"அமைப்புகளைத் திற."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"விரைவு அமைப்புகளைத் திற."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"விரைவு அமைப்புகளை மூடு."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"இன்ஸ்டண்ட் பயன்பாடுகள்"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"இன்ஸ்டண்ட் பயன்பாடுகளுக்கு நிறுவல் தேவையில்லை."</string>
<string name="app_info" msgid="6856026610594615344">"பயன்பாட்டுத் தகவல்"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"இணையத்திற்குச் செல்"</string>
<string name="mobile_data" msgid="7094582042819250762">"மொபைல் தரவு"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"வைஃபை முடக்கத்தில் உள்ளது"</string>
<string name="bt_is_off" msgid="2640685272289706392">"புளூடூத் முடக்கத்தில் உள்ளது"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 3a23ee823682..2a6ddd8893c9 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ఎడ్జ్"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"సిమ్ లేదు."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"మొబైల్ డేటా"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"మొబైల్ డేటా ఆన్ చేయబడింది"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"మొబైల్ డేటా ఆఫ్ చేయబడింది"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"బ్లూటూత్ టెథెరింగ్."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ఎయిర్‌ప్లేన్ మోడ్."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM కార్డ్ లేదు."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"క్యారియర్ నెట్‌వర్క్ మారుస్తుంది."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"బ్యాటరీ వివరాలను తెరుస్తుంది"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ఛార్జ్ అవుతోంది"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G డేటా పాజ్ చేయబడింది"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G డేటా పాజ్ చేయబడింది"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"మొబైల్ డేటా పాజ్ చేయబడింది"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"డేటా పాజ్ చేయబడింది"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"మీరు సెట్ చేసిన డేటా పరిమితిని చేరుకున్నారు. మీరు ఇప్పుడు మొబైల్ డేటాను ఉపయోగించడం లేదు.\n\nమీరు పునఃప్రారంభిస్తే, డేటా వినియోగానికి ఛార్జీలు చెల్లించాల్సి రావచ్చు."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"పునఃప్రారంభించు"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ఇంటర్నెట్ కనెక్షన్ లేదు"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi కనెక్ట్ చేయబడింది"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"హాట్‌స్పాట్"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"నోటిఫికేషన్‌లు"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ఫ్లాష్‌లైట్"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"మొబైల్ డేటా"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"డేటా వినియోగం"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"మిగిలిన డేటా"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"పరిమితి మించిపోయింది"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"<xliff:g id="VPN_APP">%1$s</xliff:g>కి కార్యాలయ ప్రొఫైల్ కనెక్ట్ చేయబడింది"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"వ్యక్తిగత ప్రొఫైల్ <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"పరికరం <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"పరికర నిర్వహణ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ప్రొఫైల్ పర్యవేక్షణ"</string>
<string name="monitoring_title" msgid="169206259253048106">"నెట్‌వర్క్ పర్యవేక్షణ"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPNని నిలిపివేయి"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNను డిస్‌కనెక్ట్ చేయి"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"విధానాలను వీక్షించండి"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"మీ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకులు మీ పరికరం అనుబంధిత సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, డేటా మరియు మీ పరికర స్థాన సమాచారం పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"మీ పరికరం మీ సంస్థ నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకులు మీ పరికరం అనుబంధిత సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, డేటాను మరియు మీ పరికర స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ఈ పరికరంలో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్‌స్టాల్ చేసింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"మీ కార్యాలయ ప్రొఫైల్‌లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్‌స్టాల్ చేసింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్‌స్టాల్ చేయబడింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేసారు."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"మీరు <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"మీరు ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల <xliff:g id="VPN_APP_0">%1$s</xliff:g> మరియు <xliff:g id="VPN_APP_1">%2$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"మీ కార్యాలయ ప్రొఫైల్ ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"మీ వ్యక్తిగత ప్రొఫైల్ ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"మీ పరికరం <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ద్వారా నిర్వహించబడుతోంది."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> మరియు మరో <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> మరియు మరో <xliff:g id="NUMBER_2">%3$d</xliff:g></item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> యొక్క నోటిఫికేషన్ నియంత్రణలు తెరవబడ్డాయి"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> యొక్క నోటిఫికేషన్ నియంత్రణలు మూసివేయబడ్డాయి"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ఈ ఛానెల్ యొక్క నోటిఫికేషన్‌లను అనుమతించండి"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"అన్ని వర్గాలు"</string>
<string name="notification_more_settings" msgid="816306283396553571">"మరిన్ని సెట్టింగ్‌లు"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"అనుకూలీకరించండి: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> నోటిఫికేషన్: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"స్క్రీన్ విభజనతో అనువర్తనం పని చేయకపోవచ్చు."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"అనువర్తనంలో స్క్రీన్ విభజనకు మద్దతు లేదు."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"సెట్టింగ్‌లను తెరవండి."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"శీఘ్ర సెట్టింగ్‌లను తెరవండి."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"శీఘ్ర సెట్టింగ్‌లను మూసివేయండి."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"చిత్రంలో చిత్రం మెను"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> చిత్రంలో చిత్రం రూపంలో ఉంది"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్‌లను తెరవడానికి నొక్కి, దీన్ని ఆఫ్ చేయండి."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"ప్లే చేయి"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"పాజ్ చేయి"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"దాటవేసి తదుపరి దానికి వెళ్లు"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"దాటవేసి మునుపటి దానికి వెళ్లు"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"వేడెక్కినందుకు ఫోన్ ఆఫ్ చేయబడింది"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n • వనరు-ఆధారిత అనువర్తనాలు (గేమింగ్, వీడియో లేదా నావిగేషన్ వంటి అనువర్తనాలు) ఉపయోగించడం\n • పెద్ద ఫైల్‌లను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n • అధిక ఉష్ణోగ్రతలలో మీ ఫోన్‌ని ఉపయోగించడం"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"తక్షణ అనువర్తనాలు"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"తక్షణ అనువర్తనాలకు ఇన్‌స్టాలేషన్ అవసరం లేదు."</string>
<string name="app_info" msgid="6856026610594615344">"అనువర్తన సమాచారం"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"వెబ్‌కు వెళ్లు"</string>
<string name="mobile_data" msgid="7094582042819250762">"మొబైల్ డేటా"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ఆఫ్‌లో ఉంది"</string>
<string name="bt_is_off" msgid="2640685272289706392">"బ్లూటూత్ ఆఫ్‌లో ఉంది"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index dc1cd01322db..68222d9e297f 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"WiFi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ไม่มีซิมการ์ด"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"อินเทอร์เน็ตมือถือ"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"อินเทอร์เน็ตมือถือเปิดอยู่"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"อินเทอร์เน็ตมือถือปิดอยู่"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"การปล่อยสัญญาณบลูทูธ"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"โหมดใช้งานบนเครื่องบิน"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"ไม่มีซิมการ์ด"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"การเปลี่ยนเครือข่ายผู้ให้บริการ"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"เปิดรายละเอียดแบตเตอรี่"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"กำลังชาร์จ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"หยุดการใช้ข้อมูล 2G-3G ชั่วคราวแล้ว"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"หยุดการใช้ข้อมูล 4G ชั่วคราวแล้ว"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"หยุดการใช้อินเทอร์เน็ตมือถือชั่วคราว"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"หยุดการใช้ข้อมูลชั่วคราวแล้ว"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"คุณใช้อินเทอร์เน็ตถึงปริมาณที่กำหนดไว้แล้ว คุณไม่ได้ใช้อินเทอร์เน็ตมือถือแล้วในขณะนี้\n\nหากใช้ต่อ อาจมีการเรียกเก็บค่าบริการอินเทอร์เน็ต"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ทำต่อ"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ไม่มีอินเทอร์เน็ต"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"เชื่อมต่อ WiFi แล้ว"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ฮอตสปอต"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"การแจ้งเตือน"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ไฟฉาย"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"อินเทอร์เน็ตมือถือ"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"การใช้อินเทอร์เน็ต"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ข้อมูลที่เหลืออยู่"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"เกินขีดจำกัด"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"โปรไฟล์งานเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"โปรไฟล์ส่วนตัวเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"อุปกรณ์เชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"การจัดการอุปกรณ์"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"การตรวจสอบโปรไฟล์"</string>
<string name="monitoring_title" msgid="169206259253048106">"การตรวจสอบเครือข่าย"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"ปิดใช้ VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"ยกเลิกการเชื่อมต่อ VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"ดูนโยบาย"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"อุปกรณ์นี้จัดการโดย <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ และข้อมูลตำแหน่งของอุปกรณ์\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้แลระบบ"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"อุปกรณ์นี้จัดการโดยองค์กรของคุณ\n\nผู้ดูแลระบบสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ และข้อมูลตำแหน่งของอุปกรณ์\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้แลระบบ"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"องค์กรของคุณติดตั้งผู้ออกใบรับรองในอุปกรณ์นี้ อาจมีการตรวจสอบหรือแก้ไขการจราจรของข้อมูลในเครือข่ายที่ปลอดภัยของคุณ"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"องค์กรของคุณติดตั้งผู้ออกใบรับรองในโปรไฟล์งาน อาจมีการตรวจสอบหรือแก้ไขการจราจรของข้อมูลในเครือข่ายที่ปลอดภัยของคุณ"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"มีการติดตั้งผู้ออกใบรับรองในอุปกรณ์นี้ อาจมีการตรวจสอบหรือแก้ไขการจราจรของข้อมูลในเครือข่ายที่ปลอดภัยของคุณ"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"ผู้ดูแลระบบได้เปิดการบันทึกเครือข่าย ซึ่งจะตรวจสอบการจราจรของข้อมูลในอุปกรณ์ของคุณ"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"คุณเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"คุณเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP_0">%1$s</xliff:g> และ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"โปรไฟล์งานของคุณเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"โปรไฟล์ส่วนตัวของคุณเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>"</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> และอีก <xliff:g id="NUMBER_5">%3$d</xliff:g> ช่องทาง</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> และอีก <xliff:g id="NUMBER_2">%3$d</xliff:g> ช่องทาง</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ส่วนควบคุมการแจ้งเตือนของ <xliff:g id="APP_NAME">%1$s</xliff:g> เปิดอยู่"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"ส่วนควบคุมการแจ้งเตือนของ <xliff:g id="APP_NAME">%1$s</xliff:g> ปิดอยู่"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"อนุญาตการแจ้งเตือนจากช่องนี้"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"ทุกหมวดหมู่"</string>
<string name="notification_more_settings" msgid="816306283396553571">"การตั้งค่าเพิ่มเติม"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"ปรับแต่ง: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> การแจ้งเตือน: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"แอปอาจใช้ไม่ได้กับโหมดแยกหน้าจอ"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"แอปไม่สนับสนุนการแยกหน้าจอ"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"เปิดการตั้งค่า"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"เปิดการตั้งค่าด่วน"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ปิดการตั้งค่าด่วน"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"เมนูการแสดงผลหลายแหล่งพร้อมกัน"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ใช้การแสดงผลหลายแหล่งพร้อมกัน"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้คุณลักษณะนี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดคุณลักษณะ"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"เล่น"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"หยุดชั่วคราว"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"ข้ามไปรายการถัดไป"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"ข้ามไปรายการก่อนหน้า"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"โทรศัพท์ปิดไปเพราะร้อนมาก"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"ขณะนี้โทรศัพท์ทำงานเป็นปกติ"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"โทรศัพท์ร้อนเกินไปจึงปิดเครื่องเพื่อให้เย็นลง ขณะนี้โทรศัพท์ทำงานเป็นปกติ\n\nโทรศัพท์อาจร้อนเกินไปหากคุณ\n • ใช้แอปที่ใช้ทรัพยากรมาก (เช่น เกม วิดีโอ หรือแอปการนำทาง)\n • ดาวน์โหลดหรืออัปโหลดไฟล์ขนาดใหญ่\n • ใช้โทรศัพท์ในอุณหภูมิที่สูง"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant App"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Instant Apps ไม่ต้องใช้การติดตั้ง"</string>
<string name="app_info" msgid="6856026610594615344">"ข้อมูลแอป"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ไปที่เว็บ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ข้อมูลมือถือ"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ปิดอยู่"</string>
<string name="bt_is_off" msgid="2640685272289706392">"บลูทูธปิดอยู่"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 51d382f81cac..645711d1601c 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Walang SIM."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobile Data"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Naka-on ang Mobile Data"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Naka-off ang Mobile Data"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pag-tether ng Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode na eroplano."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Walang SIM card."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Nagpapalit ng carrier network."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Buksan ang mga detalye ng baterya"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Nagcha-charge"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Naka-pause ang 2G-3G data"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Naka-pause ang 4G data"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Naka-pause ang mobile data"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Naka-pause ang data"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Naabot na ang itinakda mong limitasyon sa data. Hindi ka na gumagamit ng mobile data.\n\nKung magpapatuloy ka, maaaring may mga singil sa paggamit ng data."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Ipagpatuloy"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Walang koneksyon sa Internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"nakakonekta ang Wi-Fi"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Mga Notification"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Flashlight"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobile data"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Paggamit ng data"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Natitirang data"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Lumampas sa limitasyon"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Nakakonekta sa <xliff:g id="VPN_APP">%1$s</xliff:g> ang profile sa trabaho"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Nakakonekta ang personal na profile sa <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Nakakonekta ang device sa <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Pamamahala ng device"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pagsubaybay sa Profile"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pagsubaybay sa network"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"I-disable ang VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Idiskonekta ang VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Tingnan ang Mga Patakaran"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Pinamamahalaan ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang iyong device.\n\nMaaaring subaybayan at pamahalaan ng admin mo ang mga setting, pangkumpanyang access, app, data na nauugnay sa iyong device, at ang impormasyon ng lokasyon ng device mo.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong admin."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Pinamamahalaan ng iyong organisasyon ang device mo.\n\nMaaaring subaybayan at pamahalaan ng iyong admin ang mga setting, pangkumpanyang access, app, data na nauugnay sa device mo, at ang impormasyon ng lokasyon ng iyong device.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa admin mo."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Nag-install ang iyong organisasyon ng awtoridad sa certificate sa device na ito. Maaaring subaybayan o baguhin ang iyong ligtas na trapiko sa network."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Nag-install ang iyong organisasyon ng awtoridad sa certificate sa iyong profile sa trabaho. Maaaring subaybayan o baguhin ang iyong ligtas na trapiko sa network."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"May naka-install sa device na ito na isang awtoridad sa certificate. Maaaring subaybayan o baguhin ang iyong ligtas na trapiko sa network."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Na-on ng iyong admin ang pag-log sa network, na sumusubaybay sa trapiko sa device mo."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Nakakonekta ka sa <xliff:g id="VPN_APP">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app, at website."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Nakakonekta ka sa <xliff:g id="VPN_APP_0">%1$s</xliff:g> at <xliff:g id="VPN_APP_1">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app, at website."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Nakakonekta sa <xliff:g id="VPN_APP">%1$s</xliff:g> ang iyong profile sa trabaho, na maaaring sumubaybay sa aktibidad sa iyong network, kasama ang mga email, app, at website."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Nakakonekta sa <xliff:g id="VPN_APP">%1$s</xliff:g> ang iyong personal na profile, na maaaring sumubaybay sa aktibidad mo sa network, kasama ang mga email, app at website."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Pinamamahalaan ng <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ang iyong device."</string>
@@ -569,12 +560,9 @@
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, at <xliff:g id="NUMBER_5">%3$d</xliff:g> pang iba</item>
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, at <xliff:g id="NUMBER_5">%3$d</xliff:g> pang iba</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Binuksan ang mga kontrol sa notification para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Isinara ang mga kontrol sa notification para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Payagan ang mga notification mula sa channel na ito"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Lahat ng Kategorya"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Higit pang mga setting"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"I-customize: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notification sa <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Maaaring hindi gumana ang app sa split-screen."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Hindi sinusuportahan ng app ang split-screen."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Buksan ang mga setting."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Buksan ang mga mabilisang setting."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Isara ang mga mabilisang setting."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Menu ng picture in picture"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"Nasa picture-in-picture ang <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Kung ayaw mong gamitin ng <xliff:g id="NAME">%s</xliff:g> ang feature na ito, i-tap upang buksan ang mga setting at i-off ito."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"I-play"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"I-pause"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Lumaktaw sa susunod"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Lumaktaw sa nakaraan"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Na-off ang telepono dahil sa init"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Maayos na ngayong gumagana ang iyong telepono"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Napakainit ng telepono, kaya nag-off ito para lumamig. Maayos na itong gumagana.\n\nMaaaring lubos na uminit ang telepono kapag:\n • Gumamit ka ng resource-intensive na app (gaya ng app para sa gaming, video, o navigation)\n • Nag-download o nag-upload ka ng malaking file\n • Ginamit mo ito sa mainit na lugar"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Hindi kailangang i-install ang mga instant na app."</string>
<string name="app_info" msgid="6856026610594615344">"Impormasyon ng app"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Pumunta sa web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data ng mobile"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Naka-off ang Wi-Fi"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Naka-off ang Bluetooth"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 6af09e3d5151..4ee3a6551a11 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Kablosuz"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM kart yok."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobil Veri"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobil Veri Açık"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobil Veri Kapalı"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçak modu."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM kart yok."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Operatör şebekesi değişiyor."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Pil ayrıntılarını aç"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Şarj oluyor"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G veri kullanımı duraklatıldı"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G veri kullanımı duraklatıldı"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobil veri duraklatıldı"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Veri kullanımı duraklatıldı"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Ayarladığınız veri limitine ulaşıldı. Artık mobil veri kullanmıyorsunuz.\n\nDevam ettirirseniz veri kullanımı için sizden ödeme alınabilir."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Devam ettir"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"İnternet bağlantısı yok"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Kablosuz bağlandı"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Bildirimler"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Fener"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobil veri"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Veri kullanımı"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Kalan veri"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Sınır aşıldı"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"İş profiliniz <xliff:g id="VPN_APP">%1$s</xliff:g> uygulamasına bağlı"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Kişisel profil <xliff:g id="VPN_APP">%1$s</xliff:g> uygulamasına bağlı"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Cihaz <xliff:g id="VPN_APP">%1$s</xliff:g> uygulamasına bağlı"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Cihaz yönetimi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profil izleme"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ağ izleme"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN\'yi devre dışı bırak"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN bağlantısını kes"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Politikaları Göster"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Cihazınız <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz ayarları, şirket erişimini, uygulamaları, cihazınızla ilişkili verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nDaha fazla bilgi için yöneticinize başvurun."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Cihazınız kuruluşunuz tarafından yönetiliyor.\n\nYöneticiniz ayarları, şirket erişimini, uygulamaları, cihazınızla ilişkili verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nDaha fazla bilgi için yöneticinize başvurun."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Kuruluşunuz bu cihaza bir sertifika yetkilisi yükledi. Güvenli ağ trafiğiniz izlenebilir veya değiştirilebilir."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Kuruluşunuz iş profilinize bir sertifika yetkilisi yükledi. Güvenli ağ trafiğiniz izlenebilir veya değiştirilebilir."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Bu cihazda bir sertifika yetkilisi yüklü. Güvenli ağ trafiğiniz izlenebilir veya değiştirilebilir."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Yöneticiniz,cihazınızdaki trafiği izleyen ağ günlük kaydını açtı."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"E-postalarınız, uygulamalarınız ve web siteleriniz de dahil olmak üzere ağ etkinliğinizi takip edebilen <xliff:g id="VPN_APP">%1$s</xliff:g> ağına bağlısınız."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"E-postalar, uygulamalar ve web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="VPN_APP_0">%1$s</xliff:g> ve <xliff:g id="VPN_APP_1">%2$s</xliff:g> uygulamalarına bağlısınız."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"İş profiliniz, e-postalar, uygulamalar ve web siteleri dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="VPN_APP">%1$s</xliff:g> uygulamasına bağlı."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Kişisel profiliniz; e-postalar, uygulamalar ve web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="VPN_APP">%1$s</xliff:g> uygulamasına bağlı."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Cihazınız <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tarafından yönetiliyor."</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> ve diğer <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> ve <xliff:g id="NUMBER_2">%3$d</xliff:g> tane daha</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bildirim kontrolleri açıldı"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bildirim kontrolleri kapatıldı"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Bu kanaldan bildirimlere izin verir"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Tüm Kategoriler"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Diğer ayarlar"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Özelleştir: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> bildirimi: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Uygulama bölünmüş ekranda çalışmayabilir."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Uygulama bölünmüş ekranı desteklemiyor."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Ayarları aç."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Hızlı ayarları aç."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Hızlı ayarları kapat."</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Ekran içinde ekran menüsü"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>, ekran içinde ekran özelliğini kullanıyor"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> uygulamasının bu özelliği kullanmasını istemiyorsanız dokunarak ayarları açın ve özelliği kapatın."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Oynat"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Duraklat"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Sonrakine atla"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Öncekine atla"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Telefon ısındığından kapatıldı"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Telefonunuz şu anda normal bir şekilde çalışıyor"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefonunuz çok ısındığından soğuması için kapatıldı ve şu anda normal bir şekilde çalışıyor.\n\nTelefon şu koşullarda çok ısınabilir:\n • Yoğun kaynak gerektiren uygulamalar (oyun, video veya gezinme uygulamaları gibi) kullanma\n • Büyük dosyalar indirme veya yükleme\n • Telefonu sıcak yerlerde kullanma"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Hazır Uygulamalar"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Hazır uygulamaların yüklenmesi gerekmez."</string>
<string name="app_info" msgid="6856026610594615344">"Uygulama bilgileri"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Web\'e git"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil veriler"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Kablosuz bağlantı kapalı"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth kapalı"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index dcf8d4f54764..9f7c50cd9a52 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -159,6 +159,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобільне передавання даних вимкнено"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Прив’язка Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим польоту."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Немає SIM-карти."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Змінення мережі оператора."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Відкрити деталі акумулятора"</string>
@@ -433,8 +435,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Робочий профіль під’єднано до додатка <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Особистий профіль під’єднано до додатка <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Пристрій під’єднано до додатка <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Керування пристроями"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Відстеження профілю"</string>
<string name="monitoring_title" msgid="169206259253048106">"Відстеження дій у мережі"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"Мережа VPN"</string>
@@ -443,18 +444,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Вимкнути VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Від’єднатися від мережі VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Переглянути правила"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Вашим пристроєм керує адміністратор організації \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\".\n\nВін може відстежувати та контролювати налаштування, корпоративний доступ, додатки, дані пристрою й інформацію про його місцезнаходження.\n\nЩоб дізнатися більше, зв’яжіться з адміністратором."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Вашим пристроєм керує адміністратор організації.\n\nВін може відстежувати та контролювати налаштування, корпоративний доступ, додатки, дані пристрою й інформацію про його місцезнаходження.\n\nЩоб дізнатися більше, зв’яжіться з адміністратором."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Адміністратор організації встановив центр сертифікації на цьому пристрої. Захищений мережевий трафік може відстежуватися або змінюватися."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Адміністратор організації встановив центр сертифікації у вашому робочому профілі. Захищений мережевий трафік може відстежуватися або змінюватися."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"На цьому пристрої встановлено центр сертифікації. Захищений мережевий трафік може відстежуватися або змінюватися."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Ваш адміністратор увімкнув реєстрацію в мережі, під час якої на вашому пристрої відстежується трафік."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Під’єднано додаток <xliff:g id="VPN_APP">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, як-от відкривання електронних листів, додатків і веб-сайтів."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Під’єднано додатки <xliff:g id="VPN_APP_1">%2$s</xliff:g> та <xliff:g id="VPN_APP_0">%1$s</xliff:g>, які можуть відстежувати вашу активність у мережі, як-от відкривання електронних листів, додатків і веб-сайтів."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Ваш робочий профіль під’єднано до додатка <xliff:g id="VPN_APP">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Ваш особистий профіль під’єднано до додатка <xliff:g id="VPN_APP">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Вашим пристроєм керує додаток <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -713,6 +710,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Сповіщення <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Додаток може не працювати в режимі розділеного екрана."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Додаток не підтримує розділення екрана."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Відкрити налаштування."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Відкрити швидкі налаштування."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Закрити швидкі налаштування."</string>
@@ -762,8 +763,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Додатки з миттєвим запуском"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Додатки з миттєвим запуском не потрібно встановлювати."</string>
<string name="app_info" msgid="6856026610594615344">"Про додаток"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Перейти на веб-сайт"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобільний трафік"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi вимкнено"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth вимкнено"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 525054ee8823..3737e0e8e14d 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"‏کوئی SIM نہیں ہے۔"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"موبائل ڈیٹا"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"موبائل ڈیٹا آن ہے"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"موبائل ڈیٹا آف ہے"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"بلوٹوتھ مربوط کرنا۔"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ہوائی جہاز وضع۔"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"‏کوئی SIM کارڈ نہیں ہے۔"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"کیریئر نیٹ ورک تبدیل ہو رہا ہے۔"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"بیٹری کی تفصیلات کھولیں"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"چارج ہو رہا ہے"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"‏2G-3G ڈیٹا موقوف کر دیا گیا"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"‏4G ڈیٹا موقوف کر دیا گیا"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"موبائل ڈیٹا موقوف کر دیا گیا ہے"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ڈیٹا موقوف کر دیا گیا"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ڈیٹا کا استعمال آپ کی مقرر کردہ حد کو پہنچ چکا ہے۔ اب آپ موبائل ڈیٹا کا استعمال نہیں کر رہے ہیں۔\n\nاگر آپ دوبارہ شروع کرتے ہیں تو ڈیٹا استعمال کیلئے چارجز لاگو ہو سکتے ہیں۔"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"دوبارہ شروع کریں"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"کوئی انٹرنیٹ کنکشن نہیں"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‏Wi-Fi مربوط ہے"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ہاٹ اسپاٹ"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"اطلاعات"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"فلیش لائٹ"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"موبائل ڈیٹا"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ڈیٹا کا استعمال"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"باقی ڈیٹا"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"حد سے زیادہ"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"دفتری پروفائل <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہے"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"ذاتی پروفائل <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہے"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"آلہ <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہے"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"آلے کا نظم و نسق"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"پروفائل کو مانیٹر کرنا"</string>
<string name="monitoring_title" msgid="169206259253048106">"نیٹ ورک کو مانیٹر کرنا"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"‏VPN کو غیر فعال کریں"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"‏VPN کو غیر منسلک کریں"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"پالیسیاں دیکھیں"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"آپ کا آلہ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> کے زیر انتظام ہے۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"آپ کا آلہ آپ کی تنظیم کے زیر انتظام ہے۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"آپ کی تنظیم نے اس آلے پر ایک سرٹیفکیٹ کی اتھارٹی کو انسٹال کیا ہے۔ آپ کا محفوظ نیٹ ورک ٹریفک مانیٹر ہو سکتا ہے یا اس میں ترمیم کی جا سکتی ہے۔"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"آپ کی تنظیم نے آپ کے دفتری پروفائل میں ایک سرٹیفکیٹ کی اتھارٹی کو انسٹال کیا ہے۔ آپ کا محفوظ نیٹ ورک ٹریفک مانیٹر ہو سکتا ہے یا اس میں ترمیم کی جا سکتی ہے۔"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ایک سرٹیفکیٹ کی اتھارٹی اس آلہ پر انسٹال ہے۔ آپ کا محفوظ نیٹ ورک ٹریفک مانیٹر ہو سکتا ہے یا اس میں ترمیم کی جا سکتی ہے۔"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"آپ کے منتظم نے نیٹ ورک لاگنگ کو آن کر دیا ہے، جو آپ کے آلے پر ٹریفک مانیٹر کرتی ہے۔"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"آپ <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہیں جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"آپ <xliff:g id="VPN_APP_0">%1$s</xliff:g> اور <xliff:g id="VPN_APP_1">%2$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہیں۔"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"آپ کا دفتری پروفائل <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہے، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"آپ کا ذاتی پروفائل <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہے جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"آپ کا آلہ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> کے زیر انتظام ہے۔"</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> اور <xliff:g id="NUMBER_5">%3$d</xliff:g> دیگر</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> اور <xliff:g id="NUMBER_2">%3$d</xliff:g> دیگر</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے اطلاعی کنٹرولز کھلے ہیں"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے اطلاعی کنٹرولز بند کر دئے گئے ہیں"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"اس چینل سے اطلاعات کی اجازت دیں"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"سبھی زمرے"</string>
<string name="notification_more_settings" msgid="816306283396553571">"مزید ترتیبات"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"حسب ضرورت بنائیں: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> اطلاع: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"ممکن ہے کہ ایپ سپلٹ اسکرین کے ساتھ کام نہ کرے۔"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ایپ سپلٹ اسکرین کو سپورٹ نہیں کرتی۔"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ترتیبات کھولیں۔"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"فوری ترتیبات کھولیں۔"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"فوری ترتیبات بند کریں۔"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"تصویر کے مینو میں تصویر"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> تصویر میں تصویر میں ہے"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"اگر آپ نہیں چاہتے ہیں کہ <xliff:g id="NAME">%s</xliff:g> اس خصوصیت کا استعمال کرے تو ترتیبات کھولنے کیلئے تھپتھپائیں اور اسے آف کر دیں۔"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"چلائیں"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"موقوف کریں"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"نظرانداز کرکے اگلے پر جائیں"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"نظرانداز کرکے پچھلے پر جائیں"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"حرارت کی وجہ سے فون آف ہو گیا"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"آپ کا فون اب حسب معمول کام کر رہا ہے"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"آپ کا فون کافی گرم ہو گيا تھا، اس لئے سرد ہونے کیلئے یہ آف ہو گیا۔ اب آپ کا فون حسب معمول کام کر رہا ہے۔\n\nمندرجہ ذیل چیزیں کرنے پر آپ کا فون کافی گرم ہو سکتا ہے:\n • ماخذ کا زیادہ استعمال کرنے والی ایپس (جیسے کہ گیمنگ، ویڈیو، یا نیویگیشن ایپس) کا استعمال کرنا\n • بڑی فائلز ڈاؤن لوڈ یا اپ لوڈ کرنا\n • اعلی درجہ حرارت میں فون کا استعمال کرنا"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"فوری ایپس"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"فوری ایپس کو انسٹالیشن کی ضرورت نہیں ہے۔"</string>
<string name="app_info" msgid="6856026610594615344">"ایپ کی معلومات"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"ویب پر جائیں"</string>
<string name="mobile_data" msgid="7094582042819250762">"موبائل ڈیٹا"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"‏Wi-Fi آف ہے"</string>
<string name="bt_is_off" msgid="2640685272289706392">"بلوٹوتھ آف ہے"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index fd5eeb26e4d8..84ba6be1c413 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobil internet o‘chiq"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth modem"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Parvoz rejimi"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM karta yo‘q."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Mobil tarmoqni o‘zgartirish"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Batareya quvvati sarfi haqida ma’lumot"</string>
@@ -243,7 +245,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G internet to‘xtatib qo‘yildi"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobil internet pauza qilingan"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Internetdan foydalanish to‘xtatib qo‘yildi"</string>
- <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"O‘rnatilgan trafik sarflab bo‘lindi. Endi mobil internetdan foydalana olmaysiz.\n\nDavom ettiradigan bo‘lsangiz, trafik uchun to‘lov olinishi mumkin."</string>
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Belgilangan trafik sarflab bo‘lindi. Endi mobil internetdan foydalana olmaysiz.\n\nDavom ettiradigan bo‘lsangiz, trafik uchun to‘lov olinishi mumkin."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Davom etish"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Internetga ulanmagan"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ulandi"</string>
@@ -429,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Ishchi profilda <xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Shaxsiy profilda <xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Qurilmada <xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Qurilmalar boshqaruvi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilni kuzatish"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tarmoqlarni kuzatish"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN tarmog‘ini o‘chirish"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ulanishini uzish"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Siyosatlarni ko‘rish"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Qurilmangiz <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlari hamda unga bog‘liq boshqa ma’lumotlarni boshqarishi mumkin.\n\nBatafsil axborot olish uchun administratoringiz bilan bog‘laning."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Qurilmangiz tashkilot tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlari hamda unga bog‘liq boshqa ma’lumotlarni boshqarishi mumkin.\n\nBatafsil axborot olish uchun administratoringiz bilan bog‘laning."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Tashkilotingiz bu qurilmada CA sertifikatini o‘rnatdi. U himoyalangan tarmoq trafigini nazorat qilishi va o‘zgartirishi mumkin."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Tashkilotingiz ishchi profilingizga CA sertifikatini o‘rnatdi. U himoyalangan tarmoq trafigini nazorat qilishi va o‘zgartirishi mumkin."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Qurilmada CA sertifikati o‘rnatilgan. U himoyalangan tarmoq trafigini nazorat qilishi va o‘zgartirishi mumkin."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Administrator qurilmangizdagi trafikni nazorat qiluvchi tarmoq jurnalini yoqdi."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"<xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> va <xliff:g id="VPN_APP_1">%2$s</xliff:g> ilovalari ishga tushirilgan. Ular tarmoqdagi, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Ishchi profilingizda tarmoqdagi, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin bo‘lgan <xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Shaxsiy profilingizda tarmoqdagi, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin bo‘lgan <xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Qurilmangiz <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tomonidan boshqariladi."</string>
@@ -565,9 +562,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> va yana <xliff:g id="NUMBER_5">%3$d</xliff:g> ta</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> va yana <xliff:g id="NUMBER_2">%3$d</xliff:g> ta</item>
</plurals>
- <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnomalarni boshqarish ochildi"</string>
- <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnomalarni boshqarish yopildi"</string>
- <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Ushbu kanaldan keladigan bildirishnomalarga ruxsat berish"</string>
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnoma sozlamalari ochildi"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnoma sozlamalari yopildi"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Bu kanaldan keladigan bildirishnomalarga ruxsat berish"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Barcha turkumlar"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Boshqa sozlamalar"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"<xliff:g id="SUB_CATEGORY">%1$s</xliff:g>: sozlash"</string>
@@ -705,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> bildirishnomasi: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Ilova ekranni ikkiga bo‘lish rejimini qo‘llab-quvvatlamaydi."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Bu ilova ekranni bo‘lish xususiyatini qo‘llab-quvvatlamaydi."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Sozlamalarni ochish."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Tezkor sozlamalarni ochish."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Tezkor sozlamalarni yopish."</string>
@@ -726,7 +727,7 @@
<string name="pip_play" msgid="1417176722760265888">"Ijro"</string>
<string name="pip_pause" msgid="8881063404466476571">"Pauza"</string>
<string name="pip_skip_to_next" msgid="1948440006726306284">"Keyingisiga o‘tish"</string>
- <string name="pip_skip_to_prev" msgid="1955311326688637914">"Avvalgisiga o‘tish"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Avvalgisiga qaytish"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Qizigani uchun o‘chirildi"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Telefoningiz hozir normal holatda ishlayapti"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Telefon qizib ketganligi sababli sovitish uchun o‘chirib qo‘yilgan. Endi telefoningiz normal holatda ishlayapti.\n\nTelefon bu hollarda qizib ketishi mumkin:\n • Resurstalab ilovalar ishlatilganda (masalan, o‘yin, video yoki navigatsiya ilovalari)\n • Katta faylni yuklab olishda yoki yuklashda\n • Telefondan yuqori haroratda foydalanganda"</string>
@@ -754,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Darhol ochiladigan ilovalar"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Darhol ochiladigan ilovalarni o‘rnatish shart emas."</string>
<string name="app_info" msgid="6856026610594615344">"Ilova haqida"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Brauzerga o‘tish"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil internet"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi o‘chiq"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth o‘chiq"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 5460d2806c41..4d27b4504578 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Cạnh"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Không có SIM nào."</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"Dữ liệu di động"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dữ liệu di động đang bật"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"Dữ liệu di động đang tắt"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Truy cập Internet qua Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Chế độ trên máy bay."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Không có thẻ SIM nào."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Thay đổi mạng của nhà cung cấp dịch vụ."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Mở chi tiết về pin"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Đang sạc"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Đã tạm dừng dữ liệu 2G-3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Đã tạm dừng dữ liệu 4G"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Dữ liệu di động bị tạm dừng"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Đã tạm dừng dữ liệu"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Đã đạt đến giới hạn dữ liệu mà bạn đặt. Bạn hiện không còn sử dụng dữ liệu di động.\n\nNếu tiếp tục, bạn có thể phải trả phí sử dụng dữ liệu."</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Tiếp tục"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ko có k.nối Internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Đã kết nối Wi-Fi"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Điểm phát sóng"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Thông báo"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Đèn pin"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Dữ liệu di động"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Sử dụng dữ liệu"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Dữ liệu còn lại"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Vượt quá giới hạn"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Hồ sơ công việc được kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Hồ sơ cá nhân được kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Thiết bị được kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Quản lý thiết bị"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Giám sát hồ sơ"</string>
<string name="monitoring_title" msgid="169206259253048106">"Giám sát mạng"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Tắt VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Ngắt kết nối VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Xem chính sách"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Thiết bị của bạn do <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> quản lý.\n\nQuản trị viên của bạn có thể giám sát và quản lý cài đặt, quyền truy cập vào dữ liệu công ty, ứng dụng, dữ liệu được liên kết với thiết bị và thông tin vị trí thiết bị của bạn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Thiết bị của bạn do tổ chức của bạn quản lý.\n\nQuản trị viên có thể giám sát và quản lý cài đặt, quyền truy cập vào dữ liệu công ty, ứng dụng, dữ liệu được liên kết với thiết bị và thông tin vị trí thiết bị của bạn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Tổ chức của bạn đã cài đặt một tổ chức phát hành chứng chỉ trên thiết bị này. Lưu lượng truy cập mạng bảo mật của bạn có thể được giám sát hoặc sửa đổi."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Tổ chức của bạn đã cài đặt một tổ chức phát hành chứng chỉ trong hồ cơ công việc của bạn. Lưu lượng truy cập mạng bảo mật của bạn có thể được giám sát hoặc sửa đổi."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Một tổ chức phát hành chứng chỉ được cài đặt trên thiết bị này. Lưu lượng truy cập mạng bảo mật của bạn có thể được giám sát hoặc sửa đổi."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Quản trị viên của bạn đã bật tính năng ghi nhật ký mạng. Tính năng này giám sát lưu lượng truy cập trên thiết bị của bạn."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Bạn đang kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Bạn đang kết nối với <xliff:g id="VPN_APP_0">%1$s</xliff:g> và <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Các ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Hồ sơ công việc của bạn được kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Hồ sơ cá nhân của bạn được kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Thiết bị của bạn do <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> quản lý."</string>
@@ -571,12 +562,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> và <xliff:g id="NUMBER_5">%3$d</xliff:g> kênh khác</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> và <xliff:g id="NUMBER_2">%3$d</xliff:g> kênh khác</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Đã mở điều khiển thông báo đối với <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Đã đóng điều khiển thông báo đối với <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Cho phép thông báo từ kênh này"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"Tất cả danh mục"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Cài đặt khác"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"Tùy chỉnh: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -714,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Thông báo của <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Ứng dụng có thể không hoạt động với tính năng chia đôi màn hình."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Ứng dụng không hỗ trợ chia đôi màn hình."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Mở cài đặt."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Mở cài đặt nhanh."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Đóng cài đặt nhanh."</string>
@@ -732,14 +724,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"Menu ảnh trong ảnh"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> đang ở chế độ ảnh trong ảnh"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"Nếu bạn không muốn <xliff:g id="NAME">%s</xliff:g> sử dụng tính năng này, hãy nhấn để mở cài đặt và tắt tính năng này."</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"Phát"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"Tạm dừng"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"Chuyển tới mục tiếp theo"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Chuyển về mục trước"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"Điện thoại đã tắt do nhiệt"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"Điện thoại của bạn hiện đang chạy bình thường"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Do quá nóng nên điện thoại đã tắt để hạ nhiệt. Hiện điện thoại của bạn đang chạy bình thường.\n\nĐiện thoại có thể bị quá nóng nếu bạn:\n • Dùng các ứng dụng tốn nhiều tài nguyên (như ứng dụng trò chơi, video hoặc điều hướng)\n • Tải xuống hoặc tải lên tệp có dung lượng lớn\n • Dùng điện thoại ở nhiệt độ cao"</string>
@@ -767,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Ứng dụng tức thì"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Ứng dụng tức thì không yêu cầu cài đặt."</string>
<string name="app_info" msgid="6856026610594615344">"Thông tin ứng dụng"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Truy cập web"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dữ liệu di động"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi tắt"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth tắt"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 38850d495e54..90e821ea3293 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"WLAN"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"无 SIM 卡。"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"移动数据"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"移动数据已开启"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"移动数据已关闭"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"蓝牙网络共享。"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"飞行模式。"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"没有 SIM 卡。"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"运营商网络正在更改。"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"打开电量详情"</string>
@@ -200,8 +199,8 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"飞行模式开启。"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飞行模式已关闭。"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飞行模式已开启。"</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"勿扰模式已开启,仅限优先打扰。"</string>
- <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"勿扰模式已开启,完全静音。"</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"勿扰模式已开启,仅允许指定的优先事项打扰。"</string>
+ <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"勿扰模式已开启,阻止全部通知。"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"勿扰模式已开启,仅限闹钟。"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"勿扰。"</string>
<string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"勿扰模式关闭。"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"正在充电"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 数据网络已暂停使用"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 数据网络已暂停使用"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"移动数据已暂停使用"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"数据网络已暂停使用"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"您的数据用量已达到所设置的用量上限,因此系统已停用移动数据。\n\n如果您要继续使用移动数据,则可能需要支付相应的数据流量费用。"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢复"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"未连接互联网"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"已连接到WLAN网络"</string>
@@ -271,7 +268,7 @@
<string name="start_dreams" msgid="5640361424498338327">"屏保"</string>
<string name="ethernet_label" msgid="7967563676324087464">"有线网络"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"勿扰"</string>
- <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"仅限优先打扰"</string>
+ <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"仅限优先事项"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"仅限闹钟"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"完全阻止"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"蓝牙"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"热点"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"通知"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"手电筒"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"移动数据"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"流量使用情况"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"剩余流量"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"超出上限"</string>
@@ -370,9 +366,9 @@
<string name="phone_hint" msgid="4872890986869209950">"滑动图标即可拨打电话"</string>
<string name="voice_hint" msgid="8939888732119726665">"滑动图标即可打开语音助理"</string>
<string name="camera_hint" msgid="7939688436797157483">"滑动图标即可打开相机"</string>
- <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"完全静音。此模式也会将屏幕阅读器静音。"</string>
+ <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"完全阻止。此模式也会将屏幕阅读器静音。"</string>
<string name="interruption_level_none" msgid="6000083681244492992">"完全阻止"</string>
- <string name="interruption_level_priority" msgid="6426766465363855505">"仅限优先打扰"</string>
+ <string name="interruption_level_priority" msgid="6426766465363855505">"仅限优先事项"</string>
<string name="interruption_level_alarms" msgid="5226306993448328896">"仅限闹钟"</string>
<string name="interruption_level_none_twoline" msgid="3957581548190765889">"完全\n静音"</string>
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"仅限\n优先打扰"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"工作资料已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"个人资料已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"设备已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"设备管理"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"资料监控"</string>
<string name="monitoring_title" msgid="169206259253048106">"网络监控"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"关闭VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"断开VPN连接"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"查看政策"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"您的设备由“<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>”负责管理。\n\n您的管理员能够监控和管理与您的设备相关的设置、企业权限、应用、数据,以及您设备的位置信息。\n\n要了解详情,请与您的管理员联系。"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"您的设备由贵单位负责管理。\n\n您的管理员能够监控和管理与您的设备相关的设置、企业权限、应用、数据,以及您设备的位置信息。\n\n要了解详情,请与您的管理员联系。"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"您所在的单位已在此设备上安装证书授权中心。您的安全网络流量可能会受到监控或修改。"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"您所在的单位已为您的工作资料安装证书授权中心。您的安全网络流量可能会受到监控或修改。"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"此设备上已安装证书授权中心。您的安全网络流量可能会受到监控或修改。"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"您的管理员已开启网络日志功能(该功能会监控您设备上的流量)。"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"您已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”(该应用能够监控您的网络活动,其中包括收发电子邮件、使用应用和浏览网站)。"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"您已连接到“<xliff:g id="VPN_APP_0">%1$s</xliff:g>”和“<xliff:g id="VPN_APP_1">%2$s</xliff:g>”(这两个应用能够监控您的网络活动,其中包括收发电子邮件、使用应用和浏览网站)。"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"您的工作资料已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”(该应用能够监控您的网络活动,其中包括收发电子邮件、使用应用和浏览网站)。"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"您的个人资料已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”(该应用能够监控您的网络活动,其中包括收发电子邮件、使用应用和浏览网站)。"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"您的设备由<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>管理。"</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>以及另外 <xliff:g id="NUMBER_5">%3$d</xliff:g> 项</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>以及另外 <xliff:g id="NUMBER_2">%3$d</xliff:g> 项</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>的通知控件已打开"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g>的通知控件已关闭"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"允许接收来自此频道的通知"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"所有类别"</string>
<string name="notification_more_settings" msgid="816306283396553571">"更多设置"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"自定义:<xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>通知:<xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"应用可能无法在分屏模式下正常运行。"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"应用不支持分屏。"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"打开设置。"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"开启快捷设置。"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"关闭快捷设置。"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"画中画菜单"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>目前位于“画中画”中"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"如果您不想让<xliff:g id="NAME">%s</xliff:g>使用此功能,请点按以打开设置,然后关闭此功能。"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"播放"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"暂停"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"跳到下一个"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"跳到上一个"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"手机因严重发热而自动关机"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"现在,您的手机已恢复正常运行"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"由于发热严重,因此您的手机执行了自动关机以降温。现在,您的手机已恢复正常运行。\n\n以下情况可能会导致您的手机严重发热:\n • 使用占用大量资源的应用(例如游戏、视频或导航应用)\n • 下载或上传大型文件\n • 在高温环境下使用手机"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"免安装应用"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"免安装应用无需安装就能使用。"</string>
<string name="app_info" msgid="6856026610594615344">"应用信息"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"转到网页版"</string>
<string name="mobile_data" msgid="7094582042819250762">"移动数据"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"WLAN 已关闭"</string>
<string name="bt_is_off" msgid="2640685272289706392">"蓝牙已关闭"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 19957bfc48f8..a63316a998fe 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"無 SIM 卡。"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"流動數據"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"開咗流動數據"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"閂咗流動數據"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"藍牙網絡共享。"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"飛航模式。"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"沒有 SIM 卡。"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"流動網絡供應商網絡正在變更。"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"開啟電池詳細資料"</string>
@@ -244,11 +243,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"正在充電"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"已暫停 2G-3G 數據"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"已暫停 4G 數據"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"已暫停使用流動數據"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"已暫停使用數據"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"您的數據用量已達到所設定的上限,因此系統已停用流動數據連線。\n\n如果您恢復使用流動數據連線,可能需要支付數據用量費用。"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢復"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"沒有互聯網連線"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string>
@@ -321,8 +318,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"熱點"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"通知"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"手電筒"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"流動數據"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"數據用量"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"剩餘資料"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"超過上限"</string>
@@ -435,8 +431,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"工作設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"個人設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"裝置已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"裝置管理"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"個人檔案監控"</string>
<string name="monitoring_title" msgid="169206259253048106">"網絡監控"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -445,18 +440,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"停用 VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"查看政策"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"您的裝置由<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>管理。\n\n您的管理員可以監控和管理與您裝置相關的設定、公司存取權、應用程式、資料和位置。\n\n如需瞭解詳情,請聯絡您的管理員。"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"您的裝置由您的機構管理。\n\n您的管理員可以監控和管理與您裝置相關的設定、公司存取權、應用程式、資料和位置。\n\n如需瞭解詳情,請聯絡您的管理員。"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"您的機構已在此裝置中安裝憑證授權單位。您的安全網絡流量可能會受監控或修改。"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"您的機構已在您的工作設定檔中安裝憑證授權單位。您的安全網絡流量可能會受監控或修改。"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"此裝置已安裝憑證授權單位。您的安全網絡流量可能會受監控或修改。"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"您的管理員已開啟網絡記錄功能,以監控您裝置上的流量。"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"您已連接至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,此應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"您已連接至「<xliff:g id="VPN_APP_0">%1$s</xliff:g>」和「<xliff:g id="VPN_APP_1">%2$s</xliff:g>」,這些應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"您的工作設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,此應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"您的個人設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,此應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"您的裝置由「<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>」管理。"</string>
@@ -571,12 +562,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>和另外 <xliff:g id="NUMBER_5">%3$d</xliff:g> 個頻道</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>和另外 <xliff:g id="NUMBER_2">%3$d</xliff:g> 個頻道</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"開咗「<xliff:g id="APP_NAME">%1$s</xliff:g>」嘅通知控制項"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"閂咗「<xliff:g id="APP_NAME">%1$s</xliff:g>」嘅通知控制項"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"允許收到呢個頻道嘅通知"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"所有類別"</string>
<string name="notification_more_settings" msgid="816306283396553571">"更多設定"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"自訂:<xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -714,6 +702,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> 通知:<xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"應用程式可能無法在分割畫面中運作。"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"應用程式不支援分割畫面。"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"開啟設定。"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"開啟快速設定。"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"關閉快速設定。"</string>
@@ -732,14 +724,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"畫中畫選單"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"「<xliff:g id="NAME">%s</xliff:g>」目前在畫中畫模式"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"如果您不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"播放"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"暫停"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"跳到下一個"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"跳到上一個"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"手機因過熱而關上"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"您的手機現已正常運作"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"您的手機之前因過熱而關上降溫。手機現已正常運作。\n\n以下情況可能會導致手機過熱:\n • 使用耗用大量資源的應用程式 (例如遊戲、影片或導航應用程式)\n • 下載或上載大型檔案\n • 在高溫環境下使用手機"</string>
@@ -767,8 +755,7 @@
<string name="instant_apps" msgid="6647570248119804907">"即時應用程式"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"即時應用程式無需安裝即可使用。"</string>
<string name="app_info" msgid="6856026610594615344">"應用程式資料"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"前往網頁版"</string>
<string name="mobile_data" msgid="7094582042819250762">"流動數據"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi 已關閉"</string>
<string name="bt_is_off" msgid="2640685272289706392">"藍牙已關閉"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 4c2505f01e86..23605d40edad 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -23,7 +23,7 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"從清單中移除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"您最近的螢幕會顯示在這裡"</string>
+ <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"你最近的螢幕會顯示在這裡"</string>
<string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string>
<plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
<item quantity="other">總覽中有 %d 個畫面</item>
@@ -152,14 +152,13 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"沒有 SIM 卡。"</string>
- <!-- no translation found for accessibility_cell_data (5326139158682385073) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_on (5927098403452994422) -->
- <skip />
- <!-- no translation found for accessibility_cell_data_off (443267573897409704) -->
- <skip />
+ <string name="accessibility_cell_data" msgid="5326139158682385073">"行動數據"</string>
+ <string name="accessibility_cell_data_on" msgid="5927098403452994422">"行動數據已開啟"</string>
+ <string name="accessibility_cell_data_off" msgid="443267573897409704">"行動數據已關閉"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"藍牙網路共用"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"飛行模式。"</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"沒有 SIM 卡。"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"電信業者網路正在變更。"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"開啟電量詳細資料"</string>
@@ -242,11 +241,9 @@
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"充電中"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"已暫停 2G-3G 數據連線"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"已暫停 4G 數據連線"</string>
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (6801382439018099779) -->
- <skip />
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"行動數據已暫停使用"</string>
<string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"已暫停數據連線"</string>
- <!-- no translation found for data_usage_disabled_dialog (4919541636934603816) -->
- <skip />
+ <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"你的數據用量已達設定的用量上限,因此系統已停止使用行動數據連線。\n\n如果你繼續使用行動數據連線,可能需要支付相關的數據傳輸費用。"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢復連線"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"沒有網際網路連線"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string>
@@ -319,8 +316,7 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"無線基地台"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"通知"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"手電筒"</string>
- <!-- no translation found for quick_settings_cellular_detail_title (3661194685666477347) -->
- <skip />
+ <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"行動數據"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"數據用量"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"剩餘資料"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"超過上限"</string>
@@ -333,7 +329,7 @@
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC 已停用"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC 已啟用"</string>
<string name="recents_empty_message" msgid="808480104164008572">"最近沒有任何項目"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有工作"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"你已清除所有工作"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資訊"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
@@ -357,9 +353,9 @@
<string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
<string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
<string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
- <string name="zen_priority_introduction" msgid="3070506961866919502">"您不會受到聲音和震動干擾,但鬧鐘、提醒、活動和指定來電者除外。"</string>
+ <string name="zen_priority_introduction" msgid="3070506961866919502">"你不會受到聲音和震動干擾,但鬧鐘、提醒、活動和指定來電者除外。"</string>
<string name="zen_priority_customize_button" msgid="7948043278226955063">"自訂"</string>
- <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"這會封鎖「所有」聲音和震動干擾,包括鬧鐘、音樂、影片和遊戲在內。您仍可以撥打電話。"</string>
+ <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"這會封鎖「所有」聲音和震動干擾,包括鬧鐘、音樂、影片和遊戲在內,但你仍然可以撥打電話。"</string>
<string name="zen_silence_introduction" msgid="3137882381093271568">"這會封鎖「所有」聲音和震動干擾,包括鬧鐘、音樂、影片和遊戲在內。"</string>
<string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"較不緊急的通知會顯示在下方"</string>
@@ -392,8 +388,8 @@
<string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"移除訪客?"</string>
<string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"這個工作階段中的所有應用程式和資料都會遭到刪除。"</string>
<string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"移除"</string>
- <string name="guest_wipe_session_title" msgid="6419439912885956132">"訪客您好,歡迎回來!"</string>
- <string name="guest_wipe_session_message" msgid="8476238178270112811">"您要繼續這個工作階段嗎?"</string>
+ <string name="guest_wipe_session_title" msgid="6419439912885956132">"訪客你好,歡迎回來!"</string>
+ <string name="guest_wipe_session_message" msgid="8476238178270112811">"你要繼續這個工作階段嗎?"</string>
<string name="guest_wipe_session_wipe" msgid="5065558566939858884">"重新開始"</string>
<string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"是,請繼續"</string>
<string name="guest_notification_title" msgid="1585278533840603063">"訪客使用者"</string>
@@ -410,7 +406,7 @@
<string name="battery_saver_notification_title" msgid="237918726750955859">"節約耗電量模式已啟用"</string>
<string name="battery_saver_notification_text" msgid="820318788126672692">"降低效能並限制背景數據傳輸"</string>
<string name="battery_saver_notification_action_text" msgid="109158658238110382">"關閉節約耗電量模式"</string>
- <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 將開始擷取您的螢幕上顯示的內容。"</string>
+ <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 將開始擷取你的螢幕上顯示的內容。"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"不要再顯示"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"全部清除"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"立即開始"</string>
@@ -433,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Work 設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"個人設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"裝置已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"裝置管理"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"設定檔監控"</string>
<string name="monitoring_title" msgid="169206259253048106">"網路監控"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -443,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"停用 VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"查看政策"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"你的裝置是由「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」所管理。\n\n你的管理員可以監控及管理與裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。\n\n如要瞭解詳情,請與你的管理員聯絡。"</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"你的裝置是由貴機構所管理。\n\n你的管理員可以監控及管理與裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。\n\n如要瞭解詳情,請與你的管理員聯絡。"</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"貴機構已為這個裝置安裝憑證授權單位憑證。你的安全網路流量可能會受到監控或修改。"</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"貴機構已為你的 Work 設定檔安裝憑證授權單位憑證。你的安全網路流量可能會受到監控或修改。"</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"這個裝置已安裝憑證授權單位憑證。你的安全網路流量可能會受到監控或修改。"</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"你的管理員已啟用網路紀錄功能,可監控你裝置的流量。"</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"由於你已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"由於你已連結至「<xliff:g id="VPN_APP_0">%1$s</xliff:g>」和「<xliff:g id="VPN_APP_1">%2$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這兩個應用程式監控。"</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"由於你的 Work 設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"由於你的個人設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"你的裝置是由「<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>」所管理。"</string>
@@ -468,15 +459,15 @@
<string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
<string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"開啟信任的憑證"</string>
<string name="monitoring_description_network_logging" msgid="7223505523384076027">"你的管理員已啟用網路紀錄功能,可監控你裝置的流量。\n\n如需詳細資訊,請與你的管理員聯絡。"</string>
- <string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授權一個應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
+ <string name="monitoring_description_vpn" msgid="4445150119515393526">"你已授權一個應用程式設定 VPN 連線。\n\n這個應用程式可以監控你的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"你的 Work 設定檔是由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n你的管理員可以監控你的網路活動,包括收發電子郵件、使用應用程式及瀏覽網站。\n\n如需詳細資訊,請與你的管理員聯絡。\n\n此外,由於你已連線至 VPN,因此你的網路活動也會受到 VPN 監控。"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="1828472472674709532">"由於你已連結至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式和瀏覽網站) 可能會受到這個應用程式監控。"</string>
- <string name="monitoring_description_app_personal" msgid="484599052118316268">"由於您已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,您的個人網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
+ <string name="monitoring_description_app_personal" msgid="484599052118316268">"由於你已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,你的個人網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"由於你已連結至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,你的個人網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
<string name="monitoring_description_app_work" msgid="4612997849787922906">"你的 Work 設定檔是由「<xliff:g id="ORGANIZATION">%1$s</xliff:g>」所管理。由於該設定檔已連結至「<xliff:g id="APPLICATION">%2$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式和瀏覽網站) 可能會受到這個應用程式監控。\n\n如要瞭解詳情,請與你的管理員聯絡。"</string>
<string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"你的 Work 設定檔是由「<xliff:g id="ORGANIZATION">%1$s</xliff:g>」所管理。由於該設定檔已連結至「<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>」,因此你的網路活動 (包括收發電子郵件、使用應用程式和瀏覽網站) 可能會受到這個應用程式監控。\n\n此外,你還與「<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>」建立了連結,因此你的個人網路活動也可能會受到該應用程式監控。"</string>
- <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"在您手動解鎖前,裝置將保持鎖定狀態"</string>
+ <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"在你手動解鎖前,裝置將保持鎖定狀態"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
<string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了,謝謝"</string>
@@ -493,7 +484,7 @@
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"隱藏<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"只要在設定頁面中重新啟用,就能再次看到快捷設定選項。"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隱藏"</string>
- <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您正在使用 Work 設定檔"</string>
+ <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"你正在使用 Work 設定檔"</string>
<string name="stream_voice_call" msgid="4410002696470423714">"通話"</string>
<string name="stream_system" msgid="7493299064422163147">"系統"</string>
<string name="stream_ring" msgid="8213049469184048338">"鈴響"</string>
@@ -525,28 +516,28 @@
<string name="status_bar_airplane" msgid="7057575501472249002">"飛航模式"</string>
<string name="add_tile" msgid="2995389510240786221">"新增圖塊"</string>
<string name="broadcast_tile" msgid="3894036511763289383">"播送圖塊"</string>
- <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"您不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g> 的鬧鐘,除非您預先關閉這項功能"</string>
- <string name="zen_alarm_warning" msgid="444533119582244293">"您不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g> 的鬧鐘"</string>
+ <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"你不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g> 的鬧鐘,除非你預先關閉這項功能"</string>
+ <string name="zen_alarm_warning" msgid="444533119582244293">"你不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g> 的鬧鐘"</string>
<string name="alarm_template" msgid="3980063409350522735">"於<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="4242179982586714810">"於<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"快速設定,<xliff:g id="TITLE">%s</xliff:g>。"</string>
<string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"無線基地台"</string>
<string name="accessibility_managed_profile" msgid="6613641363112584120">"Work 設定檔"</string>
<string name="tuner_warning_title" msgid="7094689930793031682">"有趣與否,見仁見智"</string>
- <string name="tuner_warning" msgid="8730648121973575701">"系統使用者介面調整精靈可讓您透過其他方式,調整及自訂 Android 使用者介面。這些實驗性功能隨著版本更新可能會變更、損壞或消失,執行時請務必謹慎。"</string>
+ <string name="tuner_warning" msgid="8730648121973575701">"系統使用者介面調整精靈可讓你透過其他方式,調整及自訂 Android 使用者介面。這些實驗性功能隨著版本更新可能會變更、損壞或消失,執行時請務必謹慎。"</string>
<string name="tuner_persistent_warning" msgid="8597333795565621795">"這些實驗性功能隨著版本更新可能會變更、損壞或消失,執行時請務必謹慎。"</string>
<string name="got_it" msgid="2239653834387972602">"知道了"</string>
<string name="tuner_toast" msgid="603429811084428439">"恭喜!系統使用者介面調整精靈已新增到設定中"</string>
<string name="remove_from_settings" msgid="8389591916603406378">"從設定中移除"</string>
<string name="remove_from_settings_prompt" msgid="6069085993355887748">"要將系統使用者介面調整精靈從設定中移除,並停止使用所有相關功能嗎?"</string>
- <string name="activity_not_found" msgid="348423244327799974">"您的裝置未安裝這個應用程式"</string>
+ <string name="activity_not_found" msgid="348423244327799974">"你的裝置未安裝這個應用程式"</string>
<string name="clock_seconds" msgid="7689554147579179507">"顯示時鐘秒數"</string>
<string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數。這可能會影響電池續航力。"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string>
<string name="show_brightness" msgid="6613930842805942519">"在快速設定中顯示亮度"</string>
<string name="experimental" msgid="6198182315536726162">"實驗性"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"要開啟藍牙功能嗎?"</string>
- <string name="enable_bluetooth_message" msgid="9106595990708985385">"如要將鍵盤連線到平板電腦,您必須先開啟藍牙。"</string>
+ <string name="enable_bluetooth_message" msgid="9106595990708985385">"如要將鍵盤連線到平板電腦,你必須先開啟藍牙。"</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"開啟"</string>
<string name="show_silently" msgid="6841966539811264192">"顯示通知,但不發出任何音效"</string>
<string name="block" msgid="2734508760962682611">"封鎖所有通知"</string>
@@ -555,7 +546,7 @@
<string name="tuner_full_importance_settings" msgid="3207312268609236827">"電源通知控制項"</string>
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"開啟"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"關閉"</string>
- <string name="power_notification_controls_description" msgid="4372459941671353358">"只要使用電源通知控制項,您就能為應用程式通知設定從 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="4372459941671353358">"只要使用電源通知控制項,你就能為應用程式通知設定從 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="7506845022070889909">"通知"</string>
<string name="notification_channel_disabled" msgid="5805874247999578073">"你不會再收到這類通知。"</string>
<string name="notification_num_channels" msgid="2048144408999179471">"<xliff:g id="NUMBER">%d</xliff:g> 個通知類別"</string>
@@ -569,12 +560,9 @@
<item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>和另外 <xliff:g id="NUMBER_5">%3$d</xliff:g> 個管道</item>
<item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>和另外 <xliff:g id="NUMBER_2">%3$d</xliff:g> 個管道</item>
</plurals>
- <!-- no translation found for notification_channel_controls_opened_accessibility (6553950422055908113) -->
- <skip />
- <!-- no translation found for notification_channel_controls_closed_accessibility (7521619812603693144) -->
- <skip />
- <!-- no translation found for notification_channel_switch_accessibility (3420796005601900717) -->
- <skip />
+ <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的通知控制項已開啟"</string>
+ <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的通知控制項已關閉"</string>
+ <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"允許來自這個頻道的通知"</string>
<string name="notification_all_categories" msgid="5407190218055113282">"所有類別"</string>
<string name="notification_more_settings" msgid="816306283396553571">"更多設定"</string>
<string name="notification_app_settings" msgid="3743278649182392015">"自訂:<xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
@@ -712,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> 通知:<xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"應用程式可能無法在分割畫面中運作。"</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"這個應用程式不支援分割畫面。"</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"開啟設定。"</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"開啟快速設定。"</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"關閉快速設定。"</string>
@@ -730,14 +722,10 @@
<string name="pip_menu_title" msgid="3328510504196964712">"子母畫面選單"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"「<xliff:g id="NAME">%s</xliff:g>」目前在子母畫面中"</string>
<string name="pip_notification_message" msgid="4171698133469539591">"如果你不想讓「<xliff:g id="NAME">%s</xliff:g>」使用這項功能,請輕觸開啟設定頁面,然後停用此功能。"</string>
- <!-- no translation found for pip_play (1417176722760265888) -->
- <skip />
- <!-- no translation found for pip_pause (8881063404466476571) -->
- <skip />
- <!-- no translation found for pip_skip_to_next (1948440006726306284) -->
- <skip />
- <!-- no translation found for pip_skip_to_prev (1955311326688637914) -->
- <skip />
+ <string name="pip_play" msgid="1417176722760265888">"播放"</string>
+ <string name="pip_pause" msgid="8881063404466476571">"暫停"</string>
+ <string name="pip_skip_to_next" msgid="1948440006726306284">"跳到下一個"</string>
+ <string name="pip_skip_to_prev" msgid="1955311326688637914">"跳到上一個"</string>
<string name="thermal_shutdown_title" msgid="4458304833443861111">"手機先前過熱,因此關閉電源"</string>
<string name="thermal_shutdown_message" msgid="9006456746902370523">"手機現在已恢復正常運作"</string>
<string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"手機先前的溫度過高,因此關閉了電源以進行降溫。手機現在已恢復正常運作。\n\n以下情況可能會導致你的手機溫度過高:\n • 使用需要密集處理資料的應用程式 (例如遊戲、影片或導航應用程式)\n • 下載或上傳大型檔案\n • 在高溫環境下使用手機"</string>
@@ -765,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"免安裝應用程式"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"免安裝應用程式不必安裝就能使用。"</string>
<string name="app_info" msgid="6856026610594615344">"應用程式資訊"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"前往網頁版"</string>
<string name="mobile_data" msgid="7094582042819250762">"行動數據"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi 已關閉"</string>
<string name="bt_is_off" msgid="2640685272289706392">"藍牙已關閉"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index d1f64931232e..944555a5f904 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -157,6 +157,8 @@
<string name="accessibility_cell_data_off" msgid="443267573897409704">"Idatha yeselula ivaliwe"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Imodemu nge-Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Imodi yendiza."</string>
+ <!-- no translation found for accessibility_vpn_on (5993385083262856059) -->
+ <skip />
<string name="accessibility_no_sims" msgid="3957997018324995781">"Alikho ikhadi le-SIM."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Iguqula inethiwekhi yenkampani yenethiwekhi."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Vula imininingwane yebhethri"</string>
@@ -427,8 +429,7 @@
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Iphrofayela yomsebenzi ixhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Iphrofayela yomuntu siqu ixhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
<string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Idivayisi ixhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
- <!-- no translation found for monitoring_title_device_owned (1652495295941959815) -->
- <skip />
+ <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Ukuphathwa kwedivayisi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Ukuqapha iphrofayela"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ukuqashwa kwenethiwekhi"</string>
<string name="monitoring_subtitle_vpn" msgid="876537538087857300">"I-VPN"</string>
@@ -437,18 +438,14 @@
<string name="disable_vpn" msgid="4435534311510272506">"Khubaza i-VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Nqamula i-VPN"</string>
<string name="monitoring_button_view_policies" msgid="100913612638514424">"Buka izinqubomgomo"</string>
- <!-- no translation found for monitoring_description_named_management (5281789135578986303) -->
- <skip />
- <!-- no translation found for monitoring_description_management (4573721970278370790) -->
- <skip />
+ <string name="monitoring_description_named_management" msgid="5281789135578986303">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nUmlawuli wakho angaqaphela aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, kanye nolwazi lwendawo yedivayisi yakho.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho."</string>
+ <string name="monitoring_description_management" msgid="4573721970278370790">"Idivayisi yakho iphethwe inhlangano yakho.\n\nUmlawuli wakho angaqapha aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, kanye nolwazi lwendawo yedivayisi yakho.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho."</string>
<string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Inhlangano yakho ifake ukugunyazwa kwesitifiketi kule divayisi. Ithrafikhi yenethiwekhi yakho evikelekile kungenzeka iqashelwe noma ilungiswe."</string>
<string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Inhlangano yakho ifake ukugunyaza kwesitifiketi kuphrofayela yakho yomsebenzi. Ithrafikhi yenethiwekhi yakho evikelekile ingaqashwa noma ilungiswe."</string>
<string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Ukugunyaza kwesitifiketi kufakwe kule divayisi. Ithrafikhi yenethiwekhi yakho evikelekile ingaqashelwa noma ilungiswe."</string>
<string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Umlawuli wakho uvule ukungena kwedivayisi yakho, okuqapha ithrafikhi kudivayisi yakho."</string>
- <!-- no translation found for monitoring_description_named_vpn (7403457334088909254) -->
- <skip />
- <!-- no translation found for monitoring_description_two_named_vpns (4198511413729213802) -->
- <skip />
+ <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Uxhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>, engaqapha umsebenzi wenethiwekhi yakho, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
+ <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Uxhumeke ku-<xliff:g id="VPN_APP_0">%1$s</xliff:g> naku-<xliff:g id="VPN_APP_1">%2$s</xliff:g>, okungaqaphela umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Iphrofayela yakho yomsebenzi ixhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>, engaqapha umsebenzi wenethiwekhi yakho, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Iphrofayela yakho siqu ixhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>, engaqapha umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Idivayisi yakho iphethwe yi-<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
@@ -703,6 +700,10 @@
<string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> isaziso: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="dock_forced_resizable" msgid="5914261505436217520">"Izinhlelo zokusebenza kungenzeka zingasebenzi ngesikrini esihlukanisiwe."</string>
<string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"Uhlelo lokusebenza alusekeli isikrini esihlukanisiwe."</string>
+ <!-- no translation found for forced_resizable_secondary_display (4230857851756391925) -->
+ <skip />
+ <!-- no translation found for activity_launch_on_secondary_display_failed_text (7793821742158306742) -->
+ <skip />
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Vula izilungiselelo."</string>
<string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Vula izilungiselelo ezisheshayo."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Vala izilungiselelo ezisheshayo."</string>
@@ -752,8 +753,7 @@
<string name="instant_apps" msgid="6647570248119804907">"Izinhlelo zokusebenza ezisheshayo"</string>
<string name="instant_apps_message" msgid="8116608994995104836">"Izinhlelo zokusebenza ezisheshayo azidingi ukufakwa."</string>
<string name="app_info" msgid="6856026610594615344">"Ulwazi lohlelo lokusebenza"</string>
- <!-- no translation found for go_to_web (1106022723459948514) -->
- <skip />
+ <string name="go_to_web" msgid="1106022723459948514">"Iya kuwebhu"</string>
<string name="mobile_data" msgid="7094582042819250762">"Idatha yeselula"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"I-Wi-Fi ivaliwe"</string>
<string name="bt_is_off" msgid="2640685272289706392">"I-Bluetooth ivaliwe"</string>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 9fb884e958af..9097c5375e13 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1861,10 +1861,6 @@
not appear on production builds ever. -->
<string name="tuner_doze" translatable="false">Ambient Display</string>
- <!-- Ambient display, Sensors wake up device of the tuner. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="tuner_doze_sensors_wake_up_fully" translatable="false">Wake up device on double tap or lift</string>
-
<!-- Ambient display always-on of the tuner. Non-translatable since it should
not appear on production builds ever. -->
<string name="tuner_doze_always_on" translatable="false">Always on</string>
@@ -1902,6 +1898,12 @@
<!-- PiP minimize description. [CHAR LIMIT=NONE] -->
<string name="pip_minimize_description" translatable="false">Drag or fling the PIP to the edges of the screen to minimize it.</string>
+ <!-- PiP fling to dismiss title. [CHAR LIMIT=NONE]-->
+ <string name="pip_fling_dismiss_title" translatable="false">Fling to dismiss</string>
+
+ <!-- PiP fling to dismiss description. [CHAR LIMIT=NONE] -->
+ <string name="pip_fling_dismiss_description" translatable="false">Fling from anywhere on the screen to the bottom of the screen to dismiss the PIP.</string>
+
<!-- Button to play the current media on picture-in-picture (PIP) [CHAR LIMIT=30] -->
<string name="pip_play">Play</string>
diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml
index a685c794c5d6..24f29c8ed53f 100644
--- a/packages/SystemUI/res/xml/tuner_prefs.xml
+++ b/packages/SystemUI/res/xml/tuner_prefs.xml
@@ -131,6 +131,12 @@
android:summary="@string/pip_minimize_description"
sysui:defValue="false" />
+ <com.android.systemui.tuner.TunerSwitch
+ android:key="pip_fling_dismiss"
+ android:title="@string/pip_fling_dismiss_title"
+ android:summary="@string/pip_fling_dismiss_description"
+ sysui:defValue="false" />
+
</PreferenceScreen>
<PreferenceScreen
@@ -142,11 +148,6 @@
android:title="@string/tuner_doze_always_on"
sysui:defValue="false" />
- <com.android.systemui.tuner.TunerSwitch
- android:key="doze_sensors_wake_up_fully"
- android:title="@string/tuner_doze_sensors_wake_up_fully"
- sysui:defValue="false" />
-
</PreferenceScreen>
<Preference
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index ea55c5f8bd6e..2096956e8c8f 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -99,11 +99,7 @@ public class DozeTriggers implements DozeMachine.Part {
}
private void onSensor(int pulseReason, boolean sensorPerformedProxCheck) {
- if (mDozeParameters.getSensorsWakeUpFully()) {
- mMachine.wakeUp();
- } else {
- requestPulse(pulseReason, sensorPerformedProxCheck);
- }
+ requestPulse(pulseReason, sensorPerformedProxCheck);
if (pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP) {
final long timeSinceNotification =
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
index 4b3cdfbcd71c..afb62fcec53b 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
@@ -69,6 +69,8 @@ public class PipDismissViewController {
// Create a new view for the dismiss target
LayoutInflater inflater = LayoutInflater.from(mContext);
mDismissView = inflater.inflate(R.layout.pip_dismiss_view, null);
+ mDismissView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ mDismissView.forceHasOverlappingRendering(false);
// Adjust bottom margins of the text
View text = mDismissView.findViewById(R.id.pip_dismiss_text);
@@ -77,14 +79,16 @@ public class PipDismissViewController {
// Add the target to the window
LayoutParams lp = new LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, gradientHeight,
+ LayoutParams.MATCH_PARENT, gradientHeight,
0, windowSize.y - gradientHeight,
- LayoutParams.TYPE_SYSTEM_DIALOG,
+ LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
LayoutParams.FLAG_LAYOUT_IN_SCREEN
- | LayoutParams.FLAG_LAYOUT_NO_LIMITS
| LayoutParams.FLAG_NOT_TOUCHABLE
- | LayoutParams.FLAG_NOT_FOCUSABLE,
+ | LayoutParams.FLAG_NOT_FOCUSABLE
+ | LayoutParams.FLAG_HARDWARE_ACCELERATED,
PixelFormat.TRANSLUCENT);
+ lp.setTitle("pip-dismiss-overlay");
+ lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
mWindowManager.addView(mDismissView, lp);
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
index 67255d35590a..fc52a2ec5994 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
@@ -465,6 +465,26 @@ public class PipMotionHelper {
}
/**
+ * @return whether the gesture it towards the dismiss area based on the velocity when
+ * dismissing.
+ */
+ public boolean isGestureToDismissArea(Rect pipBounds, float velX, float velY,
+ boolean isFling) {
+ Point endpoint = getDismissEndPoint(pipBounds, velX, velY, isFling);
+ // Center the point
+ endpoint.x += pipBounds.width() / 2;
+ endpoint.y += pipBounds.height() / 2;
+
+ // The dismiss area is the middle third of the screen, half the PIP's height from the bottom
+ Point size = new Point();
+ mContext.getDisplay().getRealSize(size);
+ final int left = size.x / 3;
+ Rect dismissArea = new Rect(left, size.y - (pipBounds.height() / 2), left * 2,
+ size.y + pipBounds.height());
+ return dismissArea.contains(endpoint.x, endpoint.y);
+ }
+
+ /**
* @return the distance between points {@param p1} and {@param p2}.
*/
private float distanceBetweenRectOffsets(Rect r1, Rect r2) {
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index 3223f9fd52b1..9c7e3986f877 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -58,6 +58,7 @@ public class PipTouchHandler implements TunerService.Tunable {
private static final String TAG = "PipTouchHandler";
private static final String TUNER_KEY_MINIMIZE = "pip_minimize";
+ private static final String TUNER_KEY_FLING_DISMISS = "pip_fling_dismiss";
// These values are used for metrics and should never change
private static final int METRIC_VALUE_DISMISSED_BY_TAP = 0;
@@ -114,6 +115,8 @@ public class PipTouchHandler implements TunerService.Tunable {
// Allow the PIP to be dragged to the edge of the screen to be minimized.
private boolean mEnableMinimize = false;
+ // Allow the PIP to be flung from anywhere on the screen to the bottom to be dismissed.
+ private boolean mEnableFlingToDismiss = false;
// Behaviour states
private int mMenuState;
@@ -195,6 +198,7 @@ public class PipTouchHandler implements TunerService.Tunable {
// Register any tuner settings changes
Dependency.get(TunerService.class).addTunable(this, TUNER_KEY_MINIMIZE);
+ Dependency.get(TunerService.class).addTunable(this, TUNER_KEY_FLING_DISMISS);
// Register the listener for input consumer touch events
inputConsumerController.setTouchListener(this::handleTouchEvent);
@@ -221,7 +225,7 @@ public class PipTouchHandler implements TunerService.Tunable {
if (mIsMinimized) {
setMinimizedStateInternal(false);
}
- mDismissViewController.destroyDismissTarget();
+ cleanUpDismissTarget();
mShowPipMenuOnAnimationEnd = true;
}
@@ -238,14 +242,12 @@ public class PipTouchHandler implements TunerService.Tunable {
@Override
public void onTuningChanged(String key, String newValue) {
- if (newValue == null) {
- // Reset back to default
- mEnableMinimize = false;
- return;
- }
switch (key) {
case TUNER_KEY_MINIMIZE:
- mEnableMinimize = Integer.parseInt(newValue) != 0;
+ mEnableMinimize = newValue == null ? false : Integer.parseInt(newValue) != 0;
+ break;
+ case TUNER_KEY_FLING_DISMISS:
+ mEnableFlingToDismiss = newValue == null ? false : Integer.parseInt(newValue) != 0;
break;
}
}
@@ -332,6 +334,12 @@ public class PipTouchHandler implements TunerService.Tunable {
mAccessibilityManager.setPictureInPictureActionReplacingConnection(isRegistered
? new PipAccessibilityInteractionConnection(mMotionHelper,
this::onAccessibilityShowMenu, mHandler) : null);
+
+ if (!isRegistered && mTouchState.isUserInteracting()) {
+ // If the input consumer is unregistered while the user is interacting, then we may not
+ // get the final TOUCH_UP event, so clean up the dismiss target as well
+ cleanUpDismissTarget();
+ }
}
private void onAccessibilityShowMenu() {
@@ -576,11 +584,11 @@ public class PipTouchHandler implements TunerService.Tunable {
if (touchState.startedDragging()) {
mSavedSnapFraction = -1f;
- }
- if (touchState.startedDragging() && ENABLE_DISMISS_DRAG_TO_EDGE) {
- mHandler.removeCallbacks(mShowDismissAffordance);
- mDismissViewController.showDismissTarget();
+ if (ENABLE_DISMISS_DRAG_TO_EDGE) {
+ mHandler.removeCallbacks(mShowDismissAffordance);
+ mDismissViewController.showDismissTarget();
+ }
}
if (touchState.isDragging()) {
@@ -623,6 +631,12 @@ public class PipTouchHandler implements TunerService.Tunable {
@Override
public boolean onUp(PipTouchState touchState) {
+ if (ENABLE_DISMISS_DRAG_TO_EDGE) {
+ // Clean up the dismiss target regardless of the touch state in case the touch
+ // enabled state changes while the user is interacting
+ cleanUpDismissTarget();
+ }
+
if (!touchState.isUserInteracting()) {
return false;
}
@@ -631,21 +645,21 @@ public class PipTouchHandler implements TunerService.Tunable {
final boolean isHorizontal = Math.abs(vel.x) > Math.abs(vel.y);
final float velocity = PointF.length(vel.x, vel.y);
final boolean isFling = velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond();
- final boolean isFlingToBot = isFling
- && !isHorizontal && mMovementWithinDismiss && vel.y > 0;
+ final boolean isUpWithinDimiss = mEnableFlingToDismiss
+ && touchState.getLastTouchPosition().y >= mMovementBounds.bottom
+ && mMotionHelper.isGestureToDismissArea(mMotionHelper.getBounds(), vel.x,
+ vel.y, isFling);
+ final boolean isFlingToBot = isFling && vel.y > 0 && !isHorizontal
+ && (mMovementWithinDismiss || isUpWithinDimiss);
if (ENABLE_DISMISS_DRAG_TO_EDGE) {
- try {
- mHandler.removeCallbacks(mShowDismissAffordance);
- if (mMotionHelper.shouldDismissPip() || isFlingToBot) {
- mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,
- vel.y, mUpdateScrimListener);
- MetricsLogger.action(mContext,
- MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
- METRIC_VALUE_DISMISSED_BY_DRAG);
- return true;
- }
- } finally {
- mDismissViewController.destroyDismissTarget();
+ // Check if the user dragged or flung the PiP offscreen to dismiss it
+ if (mMotionHelper.shouldDismissPip() || isFlingToBot) {
+ mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,
+ vel.y, mUpdateScrimListener);
+ MetricsLogger.action(mContext,
+ MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
+ METRIC_VALUE_DISMISSED_BY_DRAG);
+ return true;
}
}
@@ -722,6 +736,14 @@ public class PipTouchHandler implements TunerService.Tunable {
: mNormalMovementBounds;
}
+ /**
+ * Removes the dismiss target and cancels any pending callbacks to show it.
+ */
+ private void cleanUpDismissTarget() {
+ mHandler.removeCallbacks(mShowDismissAffordance);
+ mDismissViewController.destroyDismissTarget();
+ }
+
public void dump(PrintWriter pw, String prefix) {
final String innerPrefix = prefix + " ";
pw.println(prefix + TAG);
diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java
index a8daed531357..f66331525ab7 100644
--- a/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java
@@ -155,10 +155,6 @@ public class PluginInstanceManager<T extends Plugin> {
new ComponentName(info.mPackage, info.mClass),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
- final String pkg = info.mPackage;
- final Intent intent = new Intent(PluginManager.PLUGIN_CHANGED,
- pkg != null ? Uri.fromParts("package", pkg, null) : null);
- mContext.sendBroadcast(intent);
}
public <T> boolean dependsOn(Plugin p, Class<T> cls) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 143d934dd002..7bc591f4832a 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -192,8 +192,9 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
// and the old last stack active time, they were not visible and in the
// TaskStack so we don't need to remove any associated TaskViews but we do
// need to load the task id's from the system
- RecentsTaskLoadPlan loadPlan = Recents.getTaskLoader().createLoadPlan(ctx);
- loadPlan.preloadRawTasks(false /* includeFrontMostExcludedTask */);
+ RecentsTaskLoader loader = Recents.getTaskLoader();
+ RecentsTaskLoadPlan loadPlan = loader.createLoadPlan(ctx);
+ loader.preloadRawTasks(loadPlan, false /* includeFrontMostExcludedTask */);
List<ActivityManager.RecentTaskInfo> tasks = loadPlan.getRawTasks();
for (int i = tasks.size() - 1; i >= 0; i--) {
ActivityManager.RecentTaskInfo task = tasks.get(i);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 164138e4b1d3..53a9eae17f41 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -108,36 +108,39 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
* task stacks and update recents accordingly.
*/
class TaskStackListenerImpl extends TaskStackListener {
+
@Override
- public void onTaskStackChanged() {
+ public void onTaskStackChangedBackground() {
// Preloads the next task
RecentsConfiguration config = Recents.getConfiguration();
if (config.svelteLevel == RecentsConfiguration.SVELTE_NONE) {
- RecentsTaskLoader loader = Recents.getTaskLoader();
- SystemServicesProxy ssp = Recents.getSystemServices();
- ActivityManager.RunningTaskInfo runningTaskInfo = ssp.getRunningTask();
// Load the next task only if we aren't svelte
+ SystemServicesProxy ssp = Recents.getSystemServices();
+ ActivityManager.RunningTaskInfo runningTaskInfo = ssp.getRunningTask();
+ RecentsTaskLoader loader = Recents.getTaskLoader();
RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext);
loader.preloadTasks(plan, -1, false /* includeFrontMostExcludedTask */);
- RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
+
// This callback is made when a new activity is launched and the old one is paused
// so ignore the current activity and try and preload the thumbnail for the
// previous one.
- if (runningTaskInfo != null) {
- launchOpts.runningTaskId = runningTaskInfo.id;
+ VisibilityReport visibilityReport;
+ synchronized (mDummyStackView) {
+ mDummyStackView.setTasks(plan.getTaskStack(), false /* allowNotify */);
+ updateDummyStackViewLayout(plan.getTaskStack(),
+ getWindowRect(null /* windowRectOverride */));
+
+ // Launched from app is always the worst case (in terms of how many
+ // thumbnails/tasks visible)
+ RecentsActivityLaunchState launchState = new RecentsActivityLaunchState();
+ launchState.launchedFromApp = true;
+ mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */, launchState);
+ visibilityReport = mDummyStackView.computeStackVisibilityReport();
}
- mDummyStackView.setTasks(plan.getTaskStack(), false /* allowNotify */);
- updateDummyStackViewLayout(plan.getTaskStack(),
- getWindowRect(null /* windowRectOverride */));
- // Launched from app is always the worst case (in terms of how many thumbnails/tasks
- // visible)
- RecentsActivityLaunchState launchState = new RecentsActivityLaunchState();
- launchState.launchedFromApp = true;
- mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */, launchState);
-
- VisibilityReport visibilityReport = mDummyStackView.computeStackVisibilityReport();
+ RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
+ launchOpts.runningTaskId = runningTaskInfo != null ? runningTaskInfo.id : -1;
launchOpts.numVisibleTasks = visibilityReport.numVisibleTasks;
launchOpts.numVisibleTaskThumbnails = visibilityReport.numVisibleThumbnails;
launchOpts.onlyLoadForCache = true;
@@ -221,9 +224,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
}
public void onConfigurationChanged() {
- Resources res = mContext.getResources();
reloadResources();
- mDummyStackView.reloadOnConfigurationChange();
+ synchronized (mDummyStackView) {
+ mDummyStackView.reloadOnConfigurationChange();
+ }
}
/**
@@ -393,7 +397,6 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
RecentsTaskLoader loader = Recents.getTaskLoader();
sInstanceLoadPlan = loader.createLoadPlan(mContext);
- sInstanceLoadPlan.preloadRawTasks(!isHomeStackVisible.value);
loader.preloadTasks(sInstanceLoadPlan, runningTask.id, !isHomeStackVisible.value);
TaskStack stack = sInstanceLoadPlan.getTaskStack();
if (stack.getTaskCount() > 0) {
@@ -633,16 +636,18 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
calculateWindowStableInsets(systemInsets, windowRect);
windowRect.offsetTo(0, 0);
- TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
+ synchronized (mDummyStackView) {
+ TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
- // Rebind the header bar and draw it for the transition
- stackLayout.setSystemInsets(systemInsets);
- if (stack != null) {
- stackLayout.getTaskStackBounds(displayRect, windowRect, systemInsets.top,
- systemInsets.left, systemInsets.right, mTaskStackBounds);
- stackLayout.reset();
- stackLayout.initialize(displayRect, windowRect, mTaskStackBounds,
- TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack));
+ // Rebind the header bar and draw it for the transition
+ stackLayout.setSystemInsets(systemInsets);
+ if (stack != null) {
+ stackLayout.getTaskStackBounds(displayRect, windowRect, systemInsets.top,
+ systemInsets.left, systemInsets.right, mTaskStackBounds);
+ stackLayout.reset();
+ stackLayout.initialize(displayRect, windowRect, mTaskStackBounds,
+ TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack));
+ }
}
}
@@ -663,47 +668,52 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
*/
private void updateHeaderBarLayout(TaskStack stack, Rect windowRectOverride) {
Rect windowRect = getWindowRect(windowRectOverride);
- updateDummyStackViewLayout(stack, windowRect);
- if (stack != null) {
- TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
- mDummyStackView.setTasks(stack, false /* allowNotifyStackChanges */);
- // Get the width of a task view so that we know how wide to draw the header bar.
- int taskViewWidth = 0;
- if (mDummyStackView.useGridLayout()) {
- TaskGridLayoutAlgorithm gridLayout = mDummyStackView.getGridAlgorithm();
- gridLayout.initialize(windowRect);
- taskViewWidth = (int) gridLayout.getTransform(0 /* taskIndex */,
- stack.getTaskCount(), new TaskViewTransform(), stackLayout).rect.width();
- } else {
- Rect taskViewBounds = stackLayout.getUntransformedTaskViewBounds();
- if (!taskViewBounds.isEmpty()) {
- taskViewWidth = taskViewBounds.width();
+ int taskViewWidth = 0;
+ boolean useGridLayout = false;
+ synchronized (mDummyStackView) {
+ useGridLayout = mDummyStackView.useGridLayout();
+ updateDummyStackViewLayout(stack, windowRect);
+ if (stack != null) {
+ TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
+ mDummyStackView.setTasks(stack, false /* allowNotifyStackChanges */);
+ // Get the width of a task view so that we know how wide to draw the header bar.
+ if (useGridLayout) {
+ TaskGridLayoutAlgorithm gridLayout = mDummyStackView.getGridAlgorithm();
+ gridLayout.initialize(windowRect);
+ taskViewWidth = (int) gridLayout.getTransform(0 /* taskIndex */,
+ stack.getTaskCount(), new TaskViewTransform(),
+ stackLayout).rect.width();
+ } else {
+ Rect taskViewBounds = stackLayout.getUntransformedTaskViewBounds();
+ if (!taskViewBounds.isEmpty()) {
+ taskViewWidth = taskViewBounds.width();
+ }
}
}
+ }
- if (taskViewWidth > 0) {
- synchronized (mHeaderBarLock) {
- if (mHeaderBar.getMeasuredWidth() != taskViewWidth ||
- mHeaderBar.getMeasuredHeight() != mTaskBarHeight) {
- if (mDummyStackView.useGridLayout()) {
- mHeaderBar.setShouldDarkenBackgroundColor(true);
- mHeaderBar.setNoUserInteractionState();
- }
- mHeaderBar.forceLayout();
- mHeaderBar.measure(
- MeasureSpec.makeMeasureSpec(taskViewWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(mTaskBarHeight, MeasureSpec.EXACTLY));
+ if (stack != null && taskViewWidth > 0) {
+ synchronized (mHeaderBarLock) {
+ if (mHeaderBar.getMeasuredWidth() != taskViewWidth ||
+ mHeaderBar.getMeasuredHeight() != mTaskBarHeight) {
+ if (useGridLayout) {
+ mHeaderBar.setShouldDarkenBackgroundColor(true);
+ mHeaderBar.setNoUserInteractionState();
}
- mHeaderBar.layout(0, 0, taskViewWidth, mTaskBarHeight);
+ mHeaderBar.forceLayout();
+ mHeaderBar.measure(
+ MeasureSpec.makeMeasureSpec(taskViewWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mTaskBarHeight, MeasureSpec.EXACTLY));
}
+ mHeaderBar.layout(0, 0, taskViewWidth, mTaskBarHeight);
+ }
- // Update the transition bitmap to match the new header bar height
- if (mThumbTransitionBitmapCache == null ||
- (mThumbTransitionBitmapCache.getWidth() != taskViewWidth) ||
- (mThumbTransitionBitmapCache.getHeight() != mTaskBarHeight)) {
- mThumbTransitionBitmapCache = Bitmap.createBitmap(taskViewWidth,
- mTaskBarHeight, Bitmap.Config.ARGB_8888);
- }
+ // Update the transition bitmap to match the new header bar height
+ if (mThumbTransitionBitmapCache == null ||
+ (mThumbTransitionBitmapCache.getWidth() != taskViewWidth) ||
+ (mThumbTransitionBitmapCache.getHeight() != mTaskBarHeight)) {
+ mThumbTransitionBitmapCache = Bitmap.createBitmap(taskViewWidth,
+ mTaskBarHeight, Bitmap.Config.ARGB_8888);
}
}
}
@@ -764,16 +774,21 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
* Creates the activity options for an app->recents transition.
*/
private ActivityOptions getThumbnailTransitionActivityOptions(
- ActivityManager.RunningTaskInfo runningTask, TaskStackView stackView,
- Rect windowOverrideRect) {
+ ActivityManager.RunningTaskInfo runningTask, Rect windowOverrideRect) {
if (runningTask != null && runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) {
ArrayList<AppTransitionAnimationSpec> specs = new ArrayList<>();
- ArrayList<Task> tasks = stackView.getStack().getStackTasks();
- TaskStackLayoutAlgorithm stackLayout = stackView.getStackAlgorithm();
- TaskStackViewScroller stackScroller = stackView.getScroller();
+ ArrayList<Task> tasks;
+ TaskStackLayoutAlgorithm stackLayout;
+ TaskStackViewScroller stackScroller;
- stackView.updateLayoutAlgorithm(true /* boundScroll */);
- stackView.updateToInitialState();
+ synchronized (mDummyStackView) {
+ tasks = mDummyStackView.getStack().getStackTasks();
+ stackLayout = mDummyStackView.getStackAlgorithm();
+ stackScroller = mDummyStackView.getScroller();
+
+ mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */);
+ mDummyStackView.updateToInitialState();
+ }
for (int i = tasks.size() - 1; i >= 0; i--) {
Task task = tasks.get(i);
@@ -795,7 +810,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
} else {
// Update the destination rect
Task toTask = new Task();
- TaskViewTransform toTransform = getThumbnailTransitionTransform(stackView, toTask,
+ TaskViewTransform toTransform = getThumbnailTransitionTransform(mDummyStackView, toTask,
windowOverrideRect);
Bitmap thumbnail = drawThumbnailTransitionBitmap(toTask, toTransform,
mThumbTransitionBitmapCache);
@@ -919,8 +934,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
updateHeaderBarLayout(stack, windowOverrideRect);
// Prepare the dummy stack for the transition
- TaskStackLayoutAlgorithm.VisibilityReport stackVr =
- mDummyStackView.computeStackVisibilityReport();
+ TaskStackLayoutAlgorithm.VisibilityReport stackVr;
+ synchronized (mDummyStackView) {
+ stackVr = mDummyStackView.computeStackVisibilityReport();
+ }
// Update the remaining launch state
launchState.launchedNumVisibleTasks = stackVr.numVisibleTasks;
@@ -936,8 +953,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
opts = getUnknownTransitionActivityOptions();
} else if (useThumbnailTransition) {
// Try starting with a thumbnail transition
- opts = getThumbnailTransitionActivityOptions(runningTask, mDummyStackView,
- windowOverrideRect);
+ opts = getThumbnailTransitionActivityOptions(runningTask, windowOverrideRect);
} else {
// If there is no thumbnail transition, but is launching from home into recents, then
// use a quick home transition
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index 2f122825fe73..a9e1f61b7d47 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -61,6 +61,7 @@ import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.SystemProperties;
+import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -149,6 +150,10 @@ public class SystemServicesProxy {
* to reduce IPC calls from system services. These callbacks will be called on the main thread.
*/
public abstract static class TaskStackListener {
+ /**
+ * NOTE: This call is made of the thread that the binder call comes in on.
+ */
+ public void onTaskStackChangedBackground() { }
public void onTaskStackChanged() { }
public void onTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) { }
public void onActivityPinned(String packageName) { }
@@ -187,8 +192,20 @@ public class SystemServicesProxy {
* This simply passes callbacks to listeners through {@link H}.
* */
private android.app.TaskStackListener mTaskStackListener = new android.app.TaskStackListener() {
+
+ private final List<SystemServicesProxy.TaskStackListener> mTmpListeners = new ArrayList<>();
+
@Override
public void onTaskStackChanged() throws RemoteException {
+ // Call the task changed callback for the non-ui thread listeners first
+ synchronized (mTaskStackListeners) {
+ mTmpListeners.clear();
+ mTmpListeners.addAll(mTaskStackListeners);
+ }
+ for (int i = mTmpListeners.size() - 1; i >= 0; i--) {
+ mTmpListeners.get(i).onTaskStackChangedBackground();
+ }
+
mHandler.removeMessages(H.ON_TASK_STACK_CHANGED);
mHandler.sendEmptyMessage(H.ON_TASK_STACK_CHANGED);
}
@@ -309,10 +326,7 @@ public class SystemServicesProxy {
* Returns the single instance of the {@link SystemServicesProxy}.
* This should only be called on the main thread.
*/
- public static SystemServicesProxy getInstance(Context context) {
- if (!Looper.getMainLooper().isCurrentThread()) {
- throw new RuntimeException("Must be called on the UI thread");
- }
+ public static synchronized SystemServicesProxy getInstance(Context context) {
if (sSystemServicesProxy == null) {
sSystemServicesProxy = new SystemServicesProxy(context);
}
@@ -1136,13 +1150,15 @@ public class SystemServicesProxy {
public void registerTaskStackListener(TaskStackListener listener) {
if (mIam == null) return;
- mTaskStackListeners.add(listener);
- if (mTaskStackListeners.size() == 1) {
- // Register mTaskStackListener to IActivityManager only once if needed.
- try {
- mIam.registerTaskStackListener(mTaskStackListener);
- } catch (Exception e) {
- Log.w(TAG, "Failed to call registerTaskStackListener", e);
+ synchronized (mTaskStackListeners) {
+ mTaskStackListeners.add(listener);
+ if (mTaskStackListeners.size() == 1) {
+ // Register mTaskStackListener to IActivityManager only once if needed.
+ try {
+ mIam.registerTaskStackListener(mTaskStackListener);
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to call registerTaskStackListener", e);
+ }
}
}
}
@@ -1245,74 +1261,80 @@ public class SystemServicesProxy {
@Override
public void handleMessage(Message msg) {
- switch (msg.what) {
- case ON_TASK_STACK_CHANGED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onTaskStackChanged();
+ synchronized (mTaskStackListeners) {
+ switch (msg.what) {
+ case ON_TASK_STACK_CHANGED: {
+ Trace.beginSection("onTaskStackChanged");
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onTaskStackChanged();
+ }
+ Trace.endSection();
+ break;
}
- break;
- }
- case ON_TASK_SNAPSHOT_CHANGED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onTaskSnapshotChanged(msg.arg1,
- (TaskSnapshot) msg.obj);
+ case ON_TASK_SNAPSHOT_CHANGED: {
+ Trace.beginSection("onTaskSnapshotChanged");
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onTaskSnapshotChanged(msg.arg1,
+ (TaskSnapshot) msg.obj);
+ }
+ Trace.endSection();
+ break;
}
- break;
- }
- case ON_ACTIVITY_PINNED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onActivityPinned((String) msg.obj);
+ case ON_ACTIVITY_PINNED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onActivityPinned((String) msg.obj);
+ }
+ break;
}
- break;
- }
- case ON_ACTIVITY_UNPINNED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onActivityUnpinned();
+ case ON_ACTIVITY_UNPINNED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onActivityUnpinned();
+ }
+ break;
}
- break;
- }
- case ON_PINNED_ACTIVITY_RESTART_ATTEMPT: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onPinnedActivityRestartAttempt();
+ case ON_PINNED_ACTIVITY_RESTART_ATTEMPT: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onPinnedActivityRestartAttempt();
+ }
+ break;
}
- break;
- }
- case ON_PINNED_STACK_ANIMATION_STARTED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onPinnedStackAnimationStarted();
+ case ON_PINNED_STACK_ANIMATION_STARTED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onPinnedStackAnimationStarted();
+ }
+ break;
}
- break;
- }
- case ON_PINNED_STACK_ANIMATION_ENDED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onPinnedStackAnimationEnded();
+ case ON_PINNED_STACK_ANIMATION_ENDED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onPinnedStackAnimationEnded();
+ }
+ break;
}
- break;
- }
- case ON_ACTIVITY_FORCED_RESIZABLE: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onActivityForcedResizable(
- (String) msg.obj, msg.arg1, msg.arg2);
+ case ON_ACTIVITY_FORCED_RESIZABLE: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onActivityForcedResizable(
+ (String) msg.obj, msg.arg1, msg.arg2);
+ }
+ break;
}
- break;
- }
- case ON_ACTIVITY_DISMISSING_DOCKED_STACK: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onActivityDismissingDockedStack();
+ case ON_ACTIVITY_DISMISSING_DOCKED_STACK: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onActivityDismissingDockedStack();
+ }
+ break;
}
- break;
- }
- case ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onActivityLaunchOnSecondaryDisplayFailed();
+ case ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onActivityLaunchOnSecondaryDisplayFailed();
+ }
+ break;
}
- break;
- }
- case ON_TASK_PROFILE_LOCKED: {
- for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
- mTaskStackListeners.get(i).onTaskProfileLocked(msg.arg1, msg.arg2);
+ case ON_TASK_PROFILE_LOCKED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onTaskProfileLocked(msg.arg1, msg.arg2);
+ }
+ break;
}
- break;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
index 78c71a11f3f5..4b53cd112d96 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
@@ -103,8 +103,10 @@ public class RecentsTaskLoadPlan {
/**
* An optimization to preload the raw list of tasks. The raw tasks are saved in least-recent
* to most-recent order.
+ *
+ * Note: Do not lock, callers should synchronize on the loader before making this call.
*/
- public synchronized void preloadRawTasks(boolean includeFrontMostExcludedTask) {
+ void preloadRawTasks(boolean includeFrontMostExcludedTask) {
int currentUserId = UserHandle.USER_CURRENT;
updateCurrentQuietProfilesCache(currentUserId);
SystemServicesProxy ssp = Recents.getSystemServices();
@@ -123,8 +125,11 @@ public class RecentsTaskLoadPlan {
* The tasks will be ordered by:
* - least-recent to most-recent stack tasks
* - least-recent to most-recent freeform tasks
+ *
+ * Note: Do not lock, since this can be calling back to the loader, which separately also drives
+ * this call (callers should synchronize on the loader before making this call).
*/
- public synchronized void preloadPlan(RecentsTaskLoader loader, int runningTaskId,
+ void preloadPlan(RecentsTaskLoader loader, int runningTaskId,
boolean includeFrontMostExcludedTask) {
Resources res = mContext.getResources();
ArrayList<Task> allTasks = new ArrayList<>();
@@ -223,8 +228,11 @@ public class RecentsTaskLoadPlan {
/**
* Called to apply the actual loading based on the specified conditions.
+ *
+ * Note: Do not lock, since this can be calling back to the loader, which separately also drives
+ * this call (callers should synchronize on the loader before making this call).
*/
- public synchronized void executePlan(Options opts, RecentsTaskLoader loader) {
+ void executePlan(Options opts, RecentsTaskLoader loader) {
Resources res = mContext.getResources();
// Iterate through each of the tasks and load them according to the load conditions.
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
index 5e78b61e021c..0b4498c487a8 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
@@ -31,6 +31,7 @@ import android.os.Looper;
import android.util.Log;
import android.util.LruCache;
+import com.android.internal.annotations.GuardedBy;
import com.android.systemui.R;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsConfiguration;
@@ -243,7 +244,9 @@ public class RecentsTaskLoader {
private final TaskResourceLoadQueue mLoadQueue;
private final BackgroundTaskLoader mLoader;
private final HighResThumbnailLoader mHighResThumbnailLoader;
+ @GuardedBy("this")
private final TaskKeyStrongCache<ThumbnailData> mThumbnailCache = new TaskKeyStrongCache<>();
+ @GuardedBy("this")
private final TaskKeyStrongCache<ThumbnailData> mTempCache = new TaskKeyStrongCache<>();
private final int mMaxThumbnailCacheSize;
private final int mMaxIconCacheSize;
@@ -318,14 +321,20 @@ public class RecentsTaskLoader {
return plan;
}
+ /** Preloads raw recents tasks using the specified plan to store the output. */
+ public synchronized void preloadRawTasks(RecentsTaskLoadPlan plan,
+ boolean includeFrontMostExcludedTask) {
+ plan.preloadRawTasks(includeFrontMostExcludedTask);
+ }
+
/** Preloads recents tasks using the specified plan to store the output. */
- public void preloadTasks(RecentsTaskLoadPlan plan, int runningTaskId,
+ public synchronized void preloadTasks(RecentsTaskLoadPlan plan, int runningTaskId,
boolean includeFrontMostExcludedTask) {
plan.preloadPlan(this, runningTaskId, includeFrontMostExcludedTask);
}
/** Begins loading the heavy task data according to the specified options. */
- public void loadTasks(Context context, RecentsTaskLoadPlan plan,
+ public synchronized void loadTasks(Context context, RecentsTaskLoadPlan plan,
RecentsTaskLoadPlan.Options opts) {
if (opts == null) {
throw new RuntimeException("Requires load options");
@@ -380,8 +389,7 @@ public class RecentsTaskLoader {
* Handles signals from the system, trimming memory when requested to prevent us from running
* out of memory.
*/
- public void onTrimMemory(int level) {
- RecentsConfiguration config = Recents.getConfiguration();
+ public synchronized void onTrimMemory(int level) {
switch (level) {
case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:
// Stop the loader immediately when the UI is no longer visible
@@ -516,7 +524,7 @@ public class RecentsTaskLoader {
/**
* Returns the cached thumbnail if the task key is not expired, updating the cache if it is.
*/
- ThumbnailData getAndUpdateThumbnail(Task.TaskKey taskKey, boolean loadIfNotCached,
+ synchronized ThumbnailData getAndUpdateThumbnail(Task.TaskKey taskKey, boolean loadIfNotCached,
boolean storeInCache) {
SystemServicesProxy ssp = Recents.getSystemServices();
@@ -616,12 +624,15 @@ public class RecentsTaskLoader {
}
}
- public void dump(String prefix, PrintWriter writer) {
+ public synchronized void dump(String prefix, PrintWriter writer) {
String innerPrefix = prefix + " ";
writer.print(prefix); writer.println(TAG);
writer.print(prefix); writer.println("Icon Cache");
mIconCache.dump(innerPrefix, writer);
+ writer.print(prefix); writer.println("Thumbnail Cache");
mThumbnailCache.dump(innerPrefix, writer);
+ writer.print(prefix); writer.println("Temp Thumbnail Cache");
+ mTempCache.dump(innerPrefix, writer);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 32e3df6a7295..18a9bab74084 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -1711,6 +1711,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
}
}
+ private void clearPrefetchingTask() {
+ if (mPrefetchingTask != null) {
+ Recents.getTaskLoader().unloadTaskData(mPrefetchingTask);
+ }
+ mPrefetchingTask = null;
+ }
+
/**** TaskViewCallbacks Implementation ****/
@Override
@@ -2201,6 +2208,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
if (!event.visible && mTaskViewFocusFrame != null) {
mTaskViewFocusFrame.moveGridTaskViewFocus(null);
}
+ if (!event.visible) {
+ List<TaskView> taskViews = new ArrayList<>(getTaskViews());
+ for (int i = 0; i < taskViews.size(); i++) {
+ mViewPool.returnViewToPool(taskViews.get(i));
+ }
+ clearPrefetchingTask();
+ }
}
public void reloadOnConfigurationChange() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
index 4dec6c742148..2cf06c2ab33f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
@@ -262,17 +262,15 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
private boolean hasImportanceChanged() {
return mSingleNotificationChannel != null &&
+ mChannelEnabledSwitch != null &&
mStartingUserImportance != getSelectedImportance();
}
private void saveImportance() {
- if (mSingleNotificationChannel == null) {
- return;
- }
- int selectedImportance = getSelectedImportance();
- if (selectedImportance == mStartingUserImportance) {
+ if (!hasImportanceChanged()) {
return;
}
+ final int selectedImportance = getSelectedImportance();
MetricsLogger.action(mContext, MetricsEvent.ACTION_SAVE_IMPORTANCE,
selectedImportance - mStartingUserImportance);
mSingleNotificationChannel.setImportance(selectedImportance);
@@ -386,7 +384,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
@Override
public boolean willBeRemoved() {
- return !mChannelEnabledSwitch.isChecked();
+ return mChannelEnabledSwitch != null && !mChannelEnabledSwitch.isChecked();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java
index 40776ea92db7..e1ca929752ef 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java
@@ -59,9 +59,6 @@ public class DozeParameters {
pw.print(" getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold());
pw.print(" getPickupSubtypePerformsProxCheck(): ");pw.println(
dumpPickupSubtypePerformsProxCheck());
- if (mAmbientDisplayConfiguration.alwaysOnAvailable()) {
- pw.print(" getSensorsWakeUpFully(): "); pw.println(getSensorsWakeUpFully());
- }
}
private String dumpPickupSubtypePerformsProxCheck() {
@@ -122,12 +119,6 @@ public class DozeParameters {
return mAmbientDisplayConfiguration.alwaysOnEnabled(UserHandle.USER_CURRENT);
}
- public boolean getSensorsWakeUpFully() {
- return mAmbientDisplayConfiguration.alwaysOnAvailable()
- && Settings.Secure.getIntForUser(mContext.getContentResolver(),
- DOZE_SENSORS_WAKE_UP_FULLY, 0, UserHandle.USER_CURRENT) != 0;
- }
-
private boolean getBoolean(String propName, int resId) {
return SystemProperties.getBoolean(propName, mContext.getResources().getBoolean(resId));
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
index dee15d8163a6..14c1606762af 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
@@ -87,6 +87,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
return mAnimationFilter;
}
}.setDuration(200).setDelay(50);
+ public static final int MAX_VISIBLE_ICONS_WHEN_DARK = 5;
private boolean mShowAllIcons = true;
private final HashMap<View, IconState> mIconStates = new HashMap<>();
@@ -243,6 +244,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
float translationX = getActualPaddingStart();
int firstOverflowIndex = -1;
int childCount = getChildCount();
+ int maxVisibleIcons = mDark ? MAX_VISIBLE_ICONS_WHEN_DARK : childCount;
float layoutEnd = getLayoutEnd();
float overflowStart = layoutEnd - mIconSize * (2 + OVERFLOW_EARLY_AMOUNT);
boolean hasAmbient = mSpeedBumpIndex != -1 && mSpeedBumpIndex < getChildCount();
@@ -251,21 +253,21 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
View view = getChildAt(i);
IconState iconState = mIconStates.get(view);
iconState.xTranslation = translationX;
- boolean isAmbient = mSpeedBumpIndex != -1 && i >= mSpeedBumpIndex
- && iconState.iconAppearAmount > 0.0f;
+ boolean forceOverflow = mSpeedBumpIndex != -1 && i >= mSpeedBumpIndex
+ && iconState.iconAppearAmount > 0.0f || i >= maxVisibleIcons;
boolean noOverflowAfter = i == childCount - 1;
if (mOpenedAmount != 0.0f) {
- noOverflowAfter = noOverflowAfter && !hasAmbient;
+ noOverflowAfter = noOverflowAfter && !hasAmbient && !forceOverflow;
}
iconState.visibleState = StatusBarIconView.STATE_ICON;
- if (firstOverflowIndex == -1 && (isAmbient
+ if (firstOverflowIndex == -1 && (forceOverflow
|| (translationX >= (noOverflowAfter ? layoutEnd - mIconSize : overflowStart)))) {
- firstOverflowIndex = noOverflowAfter && !isAmbient ? i - 1 : i;
+ firstOverflowIndex = noOverflowAfter && !forceOverflow ? i - 1 : i;
int totalDotLength = mStaticDotRadius * 6 + 2 * mDotPadding;
visualOverflowStart = overflowStart + mIconSize * (1 + OVERFLOW_EARLY_AMOUNT)
- totalDotLength / 2
- mIconSize * 0.5f + mStaticDotRadius;
- if (isAmbient) {
+ if (forceOverflow) {
visualOverflowStart = Math.min(translationX, visualOverflowStart
+ mStaticDotRadius * 2 + mDotPadding);
} else {
@@ -318,6 +320,12 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
boolean center = mDark;
if (center && translationX < getLayoutEnd()) {
float delta = (getLayoutEnd() - translationX) / 2;
+ if (firstOverflowIndex != -1) {
+ // If we have an overflow, only count those half for centering because the dots
+ // don't have a lot of visual weight.
+ float deltaIgnoringOverflow = (getLayoutEnd() - visualOverflowStart) / 2;
+ delta = (deltaIgnoringOverflow + delta) / 2;
+ }
for (int i = 0; i < childCount; i++) {
View view = getChildAt(i);
IconState iconState = mIconStates.get(view);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java
index dfa5cbdd3e12..6a573f593a92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java
@@ -19,7 +19,7 @@ import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener;
/**
- * For mocking because AccessibilyManager is final for some reason...
+ * For mocking because AccessibilityManager is final for some reason...
*/
public class AccessibilityManagerWrapper implements
CallbackController<AccessibilityServicesStateChangeListener> {
@@ -32,7 +32,7 @@ public class AccessibilityManagerWrapper implements
@Override
public void addCallback(AccessibilityServicesStateChangeListener listener) {
- mAccessibilityManager.addAccessibilityServicesStateChangeListener(listener);
+ mAccessibilityManager.addAccessibilityServicesStateChangeListener(listener, null);
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java
index 3aef2478ecae..62d80ace39df 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java
@@ -33,7 +33,6 @@ public class DozeConfigurationUtil {
DozeParameters params = mock(DozeParameters.class, noDefaultAnswer(doneHolder));
when(params.getPulseOnSigMotion()).thenReturn(false);
- when(params.getSensorsWakeUpFully()).thenReturn(false);
when(params.getPickupVibrationThreshold()).thenReturn(0);
when(params.getProxCheckBeforePulse()).thenReturn(true);
when(params.getPickupSubtypePerformsProxCheck(anyInt())).thenReturn(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
index 907928f12a1c..2b14b3128493 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
@@ -778,4 +778,9 @@ public class NotificationInfoTest extends SysuiTestCase {
enabledSwitch.setChecked(true);
assertEquals(View.VISIBLE, settingsLink.getVisibility());
}
+
+ @Test
+ public void testWillBeRemovedReturnsFalseBeforeBind() throws Exception {
+ assertFalse(mNotificationInfo.willBeRemoved());
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
index 8808988406a9..f516d74f4062 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
@@ -20,7 +20,9 @@ import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothProfile;
+import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import android.testing.TestableLooper.RunWithLooper;
import com.android.settingslib.bluetooth.BluetoothEventManager;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -31,10 +33,13 @@ import com.android.systemui.SysuiTestCase;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
public class BluetoothControllerImplTest extends SysuiTestCase {
private LocalBluetoothManager mMockBluetoothManager;
@@ -47,7 +52,7 @@ public class BluetoothControllerImplTest extends SysuiTestCase {
@Before
public void setup() throws Exception {
- mTestableLooper = new TestableLooper();
+ mTestableLooper = TestableLooper.get(this);
mMockBluetoothManager = mDependency.injectMockDependency(LocalBluetoothManager.class);
mDevices = new ArrayList<>();
mMockDeviceManager = mock(CachedBluetoothDeviceManager.class);
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 000394155ff1..b6dfdd178a1b 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -775,7 +775,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
if ((flags & UiAutomation.FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES) == 0) {
// Set the temporary state, and use it instead of settings
userState.mIsTouchExplorationEnabled = false;
- userState.mIsEnhancedWebAccessibilityEnabled = false;
userState.mIsDisplayMagnificationEnabled = false;
userState.mIsNavBarMagnificationEnabled = false;
userState.mIsAutoclickEnabled = false;
@@ -826,7 +825,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
}
userState.mIsTouchExplorationEnabled = touchExplorationEnabled;
- userState.mIsEnhancedWebAccessibilityEnabled = false;
userState.mIsDisplayMagnificationEnabled = false;
userState.mIsNavBarMagnificationEnabled = false;
userState.mIsAutoclickEnabled = false;
@@ -1727,7 +1725,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
updateFilterKeyEventsLocked(userState);
updateTouchExplorationLocked(userState);
updatePerformGesturesLocked(userState);
- updateEnhancedWebAccessibilityLocked(userState);
updateDisplayDaltonizerLocked(userState);
updateDisplayInversionLocked(userState);
updateMagnificationLocked(userState);
@@ -1846,7 +1843,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
somethingChanged |= readTouchExplorationGrantedAccessibilityServicesLocked(userState);
somethingChanged |= readTouchExplorationEnabledSettingLocked(userState);
somethingChanged |= readHighTextContrastEnabledSettingLocked(userState);
- somethingChanged |= readEnhancedWebAccessibilityEnabledChangedLocked(userState);
somethingChanged |= readMagnificationEnabledSettingsLocked(userState);
somethingChanged |= readAutoclickEnabledSettingLocked(userState);
somethingChanged |= readAccessibilityShortcutSettingLocked(userState);
@@ -1907,17 +1903,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
return false;
}
- private boolean readEnhancedWebAccessibilityEnabledChangedLocked(UserState userState) {
- final boolean enhancedWeAccessibilityEnabled = Settings.Secure.getIntForUser(
- mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
- 0, userState.mUserId) == 1;
- if (enhancedWeAccessibilityEnabled != userState.mIsEnhancedWebAccessibilityEnabled) {
- userState.mIsEnhancedWebAccessibilityEnabled = enhancedWeAccessibilityEnabled;
- return true;
- }
- return false;
- }
-
private boolean readHighTextContrastEnabledSettingLocked(UserState userState) {
final boolean highTextContrastEnabled = Settings.Secure.getIntForUser(
mContext.getContentResolver(),
@@ -2084,40 +2069,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
return false;
}
- private void updateEnhancedWebAccessibilityLocked(UserState userState) {
- boolean enabled = false;
- final int serviceCount = userState.mBoundServices.size();
- for (int i = 0; i < serviceCount; i++) {
- Service service = userState.mBoundServices.get(i);
- if (canRequestAndRequestsEnhancedWebAccessibilityLocked(service)) {
- enabled = true;
- break;
- }
- }
- if (enabled != userState.mIsEnhancedWebAccessibilityEnabled) {
- userState.mIsEnhancedWebAccessibilityEnabled = enabled;
- final long identity = Binder.clearCallingIdentity();
- try {
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, enabled ? 1 : 0,
- userState.mUserId);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- }
-
- private boolean canRequestAndRequestsEnhancedWebAccessibilityLocked(Service service) {
- if (!service.canReceiveEventsLocked() || !service.mRequestEnhancedWebAccessibility ) {
- return false;
- }
- if (service.mIsAutomation || (service.mAccessibilityServiceInfo.getCapabilities()
- & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY) != 0) {
- return true;
- }
- return false;
- }
-
private void updateDisplayDaltonizerLocked(UserState userState) {
DisplayAdjustmentUtils.applyDaltonizerSetting(mContext, userState.mUserId);
}
@@ -2697,8 +2648,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
boolean mRequestTouchExplorationMode;
- boolean mRequestEnhancedWebAccessibility;
-
boolean mRequestFilterKeyEvents;
boolean mRetrieveInteractiveWindows;
@@ -2854,8 +2803,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
mRequestTouchExplorationMode = (info.flags
& AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE) != 0;
- mRequestEnhancedWebAccessibility = (info.flags
- & AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY) != 0;
mRequestFilterKeyEvents = (info.flags
& AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS) != 0;
mRetrieveInteractiveWindows = (info.flags
@@ -4933,7 +4880,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
public boolean mIsTouchExplorationEnabled;
public boolean mIsTextHighContrastEnabled;
- public boolean mIsEnhancedWebAccessibilityEnabled;
public boolean mIsDisplayMagnificationEnabled;
public boolean mIsNavBarMagnificationEnabled;
public boolean mIsAutoclickEnabled;
@@ -5002,7 +4948,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
mEnabledServices.clear();
mTouchExplorationGrantedServices.clear();
mIsTouchExplorationEnabled = false;
- mIsEnhancedWebAccessibilityEnabled = false;
mIsDisplayMagnificationEnabled = false;
mIsNavBarMagnificationEnabled = false;
mServiceAssignedToAccessibilityButton = null;
@@ -5051,9 +4996,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
private final Uri mTouchExplorationGrantedAccessibilityServicesUri = Settings.Secure
.getUriFor(Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES);
- private final Uri mEnhancedWebAccessibilityUri = Settings.Secure
- .getUriFor(Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION);
-
private final Uri mDisplayInversionEnabledUri = Settings.Secure.getUriFor(
Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
@@ -5093,8 +5035,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
contentResolver.registerContentObserver(
mTouchExplorationGrantedAccessibilityServicesUri,
false, this, UserHandle.USER_ALL);
- contentResolver.registerContentObserver(mEnhancedWebAccessibilityUri,
- false, this, UserHandle.USER_ALL);
contentResolver.registerContentObserver(
mDisplayInversionEnabledUri, false, this, UserHandle.USER_ALL);
contentResolver.registerContentObserver(
@@ -5144,10 +5084,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
if (readTouchExplorationGrantedAccessibilityServicesLocked(userState)) {
onUserStateChangedLocked(userState);
}
- } else if (mEnhancedWebAccessibilityUri.equals(uri)) {
- if (readEnhancedWebAccessibilityEnabledChangedLocked(userState)) {
- onUserStateChangedLocked(userState);
- }
} else if (mDisplayDaltonizerEnabledUri.equals(uri)
|| mDisplayDaltonizerUri.equals(uri)) {
updateDisplayDaltonizerLocked(userState);
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
index 41ead8e3db50..d424d38b44ce 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
@@ -73,6 +73,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
/**
* Entry point service for autofill management.
@@ -219,24 +220,6 @@ public final class AutofillManagerService extends SystemService {
}
// Called by Shell command.
- void requestSaveForUser(int userId) {
- Slog.i(TAG, "requestSaveForUser(): " + userId);
- mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG);
- final IBinder activityToken = getTopActivityForUser();
- if (activityToken != null) {
- synchronized (mLock) {
- final AutofillManagerServiceImpl service = peekServiceForUserLocked(userId);
- if (service == null) {
- Log.w(TAG, "handleSaveForUser(): no cached service for userId " + userId);
- return;
- }
-
- service.requestSaveForUserLocked(activityToken);
- }
- }
- }
-
- // Called by Shell command.
void destroySessions(int userId, IResultReceiver receiver) {
Slog.i(TAG, "destroySessions() for userId " + userId);
mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG);
@@ -483,6 +466,22 @@ public final class AutofillManagerService extends SystemService {
}
@Override
+ public boolean isServiceSupported(int userId) {
+ synchronized (mLock) {
+ return !mDisabledUsers.get(userId);
+ }
+ }
+
+ @Override
+ public boolean isServiceEnabled(int userId, String packageName) {
+ synchronized (mLock) {
+ final AutofillManagerServiceImpl service = peekServiceForUserLocked(userId);
+ if (service == null) return false;
+ return Objects.equals(packageName, service.getPackageName());
+ }
+ }
+
+ @Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
synchronized (mLock) {
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index c2799304bf7a..238cdd5efd5f 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -16,9 +16,6 @@
package com.android.server.autofill;
-import static android.service.autofill.AutofillService.EXTRA_SESSION_ID;
-import static android.service.voice.VoiceInteractionSession.KEY_RECEIVER_EXTRAS;
-import static android.service.voice.VoiceInteractionSession.KEY_STRUCTURE;
import static android.view.autofill.AutofillManager.FLAG_START_SESSION;
import static android.view.autofill.AutofillManager.NO_SESSION;
@@ -27,10 +24,7 @@ import static com.android.server.autofill.Helper.VERBOSE;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.Activity;
-import android.app.ActivityManager;
import android.app.AppGlobals;
-import android.app.assist.AssistStructure;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -50,7 +44,6 @@ import android.service.autofill.AutofillService;
import android.service.autofill.AutofillServiceInfo;
import android.service.autofill.FillEventHistory;
import android.service.autofill.FillEventHistory.Event;
-import android.service.autofill.FillRequest;
import android.service.autofill.FillResponse;
import android.service.autofill.IAutoFillService;
import android.text.TextUtils;
@@ -66,7 +59,6 @@ import android.view.autofill.IAutoFillManagerClient;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.HandlerCaller;
-import com.android.internal.os.IResultReceiver;
import com.android.server.autofill.ui.AutoFillUI;
import java.io.PrintWriter;
@@ -127,56 +119,6 @@ final class AutofillManagerServiceImpl {
@GuardedBy("mLock")
private FillEventHistory mEventHistory;
- /**
- * Receiver of assist data from the app's {@link Activity}.
- */
- private final IResultReceiver mAssistReceiver = new IResultReceiver.Stub() {
- @Override
- public void send(int resultCode, Bundle resultData) throws RemoteException {
- if (VERBOSE) {
- Slog.v(TAG, "resultCode on mAssistReceiver: " + resultCode);
- }
-
- final AssistStructure structure = resultData.getParcelable(KEY_STRUCTURE);
- if (structure == null) {
- Slog.wtf(TAG, "no assist structure for id " + resultCode);
- return;
- }
-
- final Bundle receiverExtras = resultData.getBundle(KEY_RECEIVER_EXTRAS);
- if (receiverExtras == null) {
- Slog.wtf(TAG, "No " + KEY_RECEIVER_EXTRAS + " on receiver");
- return;
- }
-
- final int sessionId = receiverExtras.getInt(EXTRA_SESSION_ID);
- final Session session;
- synchronized (mLock) {
- session = mSessions.get(sessionId);
- if (session == null) {
- Slog.w(TAG, "no server session for " + sessionId);
- return;
- }
- session.setStructureLocked(structure);
- }
-
-
- // TODO(b/35708678): Must fetch the data so it's available later on
- // handleSave(), even if if the activity is gone by then, but structure.ensureData()
- // gives a ONE_WAY warning because system_service could block on app calls.
- // We need to change AssistStructure so it provides a "one-way" writeToParcel()
- // method that sends all the data
- structure.ensureData();
-
- // Sanitize structure before it's sent to service.
- structure.sanitizeForParceling(true);
-
- // This is the first request, hence there is no Bundle to be sent as clientState
- final FillRequest request = new FillRequest(structure, null, session.mFlags);
- session.mRemoteFillService.onFillRequest(request);
- }
- };
-
AutofillManagerServiceImpl(Context context, Object lock, LocalLog requestsHistory,
int userId, AutoFillUI ui, boolean disabled) {
mContext = context;
@@ -188,11 +130,10 @@ final class AutofillManagerServiceImpl {
}
CharSequence getServiceName() {
- if (mInfo == null) {
+ final String packageName = getPackageName();
+ if (packageName == null) {
return null;
}
- final ComponentName serviceComponent = mInfo.getServiceInfo().getComponentName();
- final String packageName = serviceComponent.getPackageName();
try {
final PackageManager pm = mContext.getPackageManager();
@@ -204,6 +145,14 @@ final class AutofillManagerServiceImpl {
}
}
+ String getPackageName() {
+ if (mInfo == null) {
+ return null;
+ }
+ final ComponentName serviceComponent = mInfo.getServiceInfo().getComponentName();
+ return serviceComponent.getPackageName();
+ }
+
private String getComponentNameFromSettings() {
return Settings.Secure.getStringForUser(
mContext.getContentResolver(), Settings.Secure.AUTOFILL_SERVICE, mUserId);
@@ -393,21 +342,6 @@ final class AutofillManagerServiceImpl {
mInfo.getServiceInfo().getComponentName(), packageName);
mSessions.put(newSession.id, newSession);
- try {
- final Bundle receiverExtras = new Bundle();
- receiverExtras.putInt(EXTRA_SESSION_ID, sessionId);
- final long identity = Binder.clearCallingIdentity();
- try {
- if (!ActivityManager.getService().requestAutofillData(mAssistReceiver,
- receiverExtras, activityToken)) {
- Slog.w(TAG, "failed to request autofill data for " + activityToken);
- }
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- } catch (RemoteException e) {
- // Should not happen, it's a local call.
- }
return newSession;
}
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java
index 6debc2fe26d7..62226e3a6cfc 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java
@@ -45,8 +45,6 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand {
}
final PrintWriter pw = getOutPrintWriter();
switch (cmd) {
- case "save":
- return requestSave();
case "list":
return requestList(pw);
case "destroy":
@@ -71,21 +69,12 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand {
pw.println(" destroy sessions [--user USER_ID]");
pw.println(" Destroy all pending sessions.");
pw.println("");
- pw.println(" save [--user USER_ID]");
- pw.println(" Request provider to save contents of the top activity.");
- pw.println("");
pw.println(" reset");
pw.println(" Reset all pending sessions and cached service connections.");
pw.println("");
}
}
- private int requestSave() {
- final int userId = getUserIdFromArgsOrCurrentUser();
- mService.requestSaveForUser(userId);
- return 0;
- }
-
private int requestDestroy(PrintWriter pw) {
if (!isNextArgSessions(pw)) {
return -1;
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index 17c30c561729..5964172e138a 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -16,7 +16,12 @@
package com.android.server.autofill;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.assist.AssistStructure;
+import android.app.assist.AssistStructure.ViewNode;
import android.os.Bundle;
+import android.view.autofill.AutofillId;
import java.util.Arrays;
import java.util.Objects;
@@ -53,4 +58,37 @@ final class Helper {
private Helper() {
throw new UnsupportedOperationException("contains static members only");
}
+
+ static ViewNode findViewNodeById(@NonNull AssistStructure structure, @NonNull AutofillId id) {
+ final int size = structure.getWindowNodeCount();
+ for (int i = 0; i < size; i++) {
+ final AssistStructure.WindowNode window = structure.getWindowNodeAt(i);
+ final ViewNode root = window.getRootViewNode();
+ if (id.equals(root.getAutofillId())) {
+ return root;
+ }
+ final ViewNode child = findViewNodeById(root, id);
+ if (child != null) {
+ return child;
+ }
+ }
+ return null;
+ }
+
+ static ViewNode findViewNodeById(@NonNull ViewNode parent, @NonNull AutofillId id) {
+ final int childrenSize = parent.getChildCount();
+ if (childrenSize > 0) {
+ for (int i = 0; i < childrenSize; i++) {
+ final ViewNode child = parent.getChildAt(i);
+ if (id.equals(child.getAutofillId())) {
+ return child;
+ }
+ final ViewNode grandChild = findViewNodeById(child, id);
+ if (grandChild != null && id.equals(grandChild.getAutofillId())) {
+ return grandChild;
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
index 4d0f38042276..2aeb07e1057b 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
@@ -16,6 +16,8 @@
package com.android.server.autofill;
+import static android.service.autofill.FillRequest.INVALID_REQUEST_ID;
+
import static com.android.server.autofill.Helper.DEBUG;
import android.annotation.NonNull;
@@ -88,7 +90,7 @@ final class RemoteFillService implements DeathRecipient {
public interface FillServiceCallbacks {
void onFillRequestSuccess(@Nullable FillResponse response, int serviceUid,
- @NonNull String servicePackageName, int requestId);
+ @NonNull String servicePackageName);
void onFillRequestFailure(@Nullable CharSequence message,
@NonNull String servicePackageName);
void onSaveRequestSuccess(@NonNull String servicePackageName);
@@ -134,6 +136,33 @@ final class RemoteFillService implements DeathRecipient {
mCallbacks.onServiceDied(this);
}
+ /**
+ * Cancel the currently pending request.
+ *
+ * <p>This can be used when the request is unnecessary or will be superceeded by a request that
+ * will soon be queued.
+ *
+ * @return the id of the canceled request, or {@link FillRequest#INVALID_REQUEST_ID} if no
+ * {@link PendingFillRequest} was canceled.
+ */
+ public int cancelCurrentRequest() {
+ if (mDestroyed) {
+ return INVALID_REQUEST_ID;
+ }
+
+ int requestId = INVALID_REQUEST_ID;
+ if (mPendingRequest != null) {
+ if (mPendingRequest instanceof PendingFillRequest) {
+ requestId = ((PendingFillRequest) mPendingRequest).mRequest.getId();
+ }
+
+ mPendingRequest.cancel();
+ mPendingRequest = null;
+ }
+
+ return requestId;
+ }
+
public void onFillRequest(@NonNull FillRequest request) {
cancelScheduledUnbind();
final PendingFillRequest pendingRequest = new PendingFillRequest(request, this);
@@ -252,11 +281,11 @@ final class RemoteFillService implements DeathRecipient {
}
private void dispatchOnFillRequestSuccess(PendingRequest pendingRequest,
- int callingUid, FillResponse response, int requestId) {
+ int callingUid, FillResponse response) {
mHandler.getHandler().post(() -> {
if (handleResponseCallbackCommon(pendingRequest)) {
mCallbacks.onFillRequestSuccess(response, callingUid,
- mComponentName.getPackageName(), requestId);
+ mComponentName.getPackageName());
}
});
}
@@ -420,11 +449,11 @@ final class RemoteFillService implements DeathRecipient {
}
@Override
- public void onSuccess(FillResponse response, int requestId) {
+ public void onSuccess(FillResponse response) {
RemoteFillService remoteService = mWeakService.get();
if (remoteService != null) {
remoteService.dispatchOnFillRequestSuccess(
- PendingFillRequest.this, getCallingUid(), response, requestId);
+ PendingFillRequest.this, getCallingUid(), response);
}
}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 5e8a974614a9..ac1f34d90b07 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -18,6 +18,9 @@
package com.android.server.autofill;
import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST;
+import static android.service.autofill.FillRequest.INVALID_REQUEST_ID;
+import static android.service.voice.VoiceInteractionSession.KEY_RECEIVER_EXTRAS;
+import static android.service.voice.VoiceInteractionSession.KEY_STRUCTURE;
import static android.view.autofill.AutofillManager.FLAG_START_SESSION;
import static android.view.autofill.AutofillManager.FLAG_VALUE_CHANGED;
import static android.view.autofill.AutofillManager.FLAG_VIEW_ENTERED;
@@ -25,19 +28,22 @@ import static android.view.autofill.AutofillManager.FLAG_VIEW_EXITED;
import static com.android.server.autofill.Helper.DEBUG;
import static com.android.server.autofill.Helper.VERBOSE;
+import static com.android.server.autofill.Helper.findViewNodeById;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.Activity;
+import android.app.ActivityManager;
import android.app.assist.AssistStructure;
import android.app.assist.AssistStructure.AutofillOverlay;
import android.app.assist.AssistStructure.ViewNode;
-import android.app.assist.AssistStructure.WindowNode;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.graphics.Rect;
import android.metrics.LogMaker;
+import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcelable;
@@ -64,14 +70,16 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.HandlerCaller;
+import com.android.internal.os.IResultReceiver;
+import com.android.internal.util.ArrayUtils;
import com.android.server.autofill.ui.AutoFillUI;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* A session for a given activity.
@@ -89,6 +97,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
AutoFillUI.AutoFillUiCallback {
private static final String TAG = "AutofillSession";
+ private static final String EXTRA_REQUEST_ID = "android.service.autofill.extra.REQUEST_ID";
+
private final AutofillManagerServiceImpl mService;
private final HandlerCaller mHandlerCaller;
private final Object mLock;
@@ -96,6 +106,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
private final MetricsLogger mMetricsLogger = new MetricsLogger();
+ private static AtomicInteger sIdCounter = new AtomicInteger();
+
/** Id of the session */
public final int id;
@@ -123,8 +135,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
@GuardedBy("mLock")
private IAutoFillManagerClient mClient;
- @GuardedBy("mLock")
- RemoteFillService mRemoteFillService;
+ private final RemoteFillService mRemoteFillService;
@GuardedBy("mLock")
private SparseArray<FillResponse> mResponses;
@@ -142,11 +153,11 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
private Dataset mDatasetWaitingAuth;
/**
- * Assist structure sent by the app; it will be updated (sanitized, change values for save)
- * before sent to {@link AutofillService}.
+ * Contexts read from the app; they will be updated (sanitized, change values for save) before
+ * sent to {@link AutofillService}. Ordered by the time they we read.
*/
@GuardedBy("mLock")
- private AssistStructure mStructure;
+ private ArrayList<FillContext> mContexts;
/**
* Whether the client has an {@link android.view.autofill.AutofillManager.AutofillCallback}.
@@ -163,7 +174,159 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
/**
* Flags used to start the session.
*/
- int mFlags;
+ private final int mFlags;
+
+ /**
+ * Receiver of assist data from the app's {@link Activity}.
+ */
+ private final IResultReceiver mAssistReceiver = new IResultReceiver.Stub() {
+ @Override
+ public void send(int resultCode, Bundle resultData) throws RemoteException {
+ if (VERBOSE) {
+ Slog.v(TAG, "resultCode on mAssistReceiver: " + resultCode);
+ }
+
+ final AssistStructure structure = resultData.getParcelable(KEY_STRUCTURE);
+ if (structure == null) {
+ Slog.wtf(TAG, "no assist structure for id " + resultCode);
+ return;
+ }
+
+ final Bundle receiverExtras = resultData.getBundle(KEY_RECEIVER_EXTRAS);
+ if (receiverExtras == null) {
+ Slog.wtf(TAG, "No " + KEY_RECEIVER_EXTRAS + " on receiver");
+ return;
+ }
+
+ final int requestId = receiverExtras.getInt(EXTRA_REQUEST_ID);
+
+ if (DEBUG) {
+ Slog.d(TAG, "New structure for requestId " + requestId + ": " + structure);
+ }
+
+ final FillRequest request;
+ synchronized (mLock) {
+ // TODO(b/35708678): Must fetch the data so it's available later on handleSave(),
+ // even if if the activity is gone by then, but structure .ensureData() gives a
+ // ONE_WAY warning because system_service could block on app calls. We need to
+ // change AssistStructure so it provides a "one-way" writeToParcel() method that
+ // sends all the data
+ structure.ensureData();
+
+ // Sanitize structure before it's sent to service.
+ structure.sanitizeForParceling(true);
+
+ if (mContexts == null) {
+ mContexts = new ArrayList<>(1);
+ }
+ mContexts.add(new FillContext(requestId, structure));
+
+ cancelCurrentRequestLocked();
+
+ final int numContexts = mContexts.size();
+ for (int i = 0; i < numContexts; i++) {
+ fillStructureWithAllowedValues(mContexts.get(i).getStructure());
+ }
+
+ request = new FillRequest(requestId, mContexts, mClientState, mFlags);
+ }
+
+ mRemoteFillService.onFillRequest(request);
+ }
+ };
+
+ /**
+ * Updates values of the nodes in the structure so that:
+ * - proper node is focused
+ * - autofillValue is sent back to service when it was previously autofilled
+ *
+ * @param structure The structure to be filled
+ */
+ private void fillStructureWithAllowedValues(@NonNull AssistStructure structure) {
+ final int numViewStates = mViewStates.size();
+ for (int i = 0; i < numViewStates; i++) {
+ final ViewState viewState = mViewStates.valueAt(i);
+
+ final ViewNode node = findViewNodeById(structure, viewState.id);
+ if (node == null) {
+ if (DEBUG) {
+ Slog.w(TAG, "fillStructureWithAllowedValues(): no node for " + viewState.id);
+ }
+ continue;
+ }
+
+ final AutofillValue initialValue = viewState.getInitialValue();
+ final AutofillValue filledValue = viewState.getAutofilledValue();
+ final AutofillOverlay overlay = new AutofillOverlay();
+ if (filledValue != null && !filledValue.equals(initialValue)) {
+ overlay.value = filledValue;
+ }
+ if (mCurrentViewId != null) {
+ overlay.focused = mCurrentViewId.equals(viewState.id);
+ }
+
+ node.setAutofillOverlay(overlay);
+ }
+ }
+
+ /**
+ * Cancels the last request sent to the {@link #mRemoteFillService}.
+ */
+ private void cancelCurrentRequestLocked() {
+ int canceledRequest = mRemoteFillService.cancelCurrentRequest();
+
+ // Remove the FillContext as there will never be a response for the service
+ if (canceledRequest != INVALID_REQUEST_ID && mContexts != null) {
+ int numContexts = mContexts.size();
+
+ // It is most likely the last context, hence search backwards
+ for (int i = numContexts - 1; i >= 0; i--) {
+ if (mContexts.get(i).getRequestId() == canceledRequest) {
+ mContexts.remove(i);
+ break;
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Reads a new structure and then request a new fill response from the fill service.
+ */
+ private void requestNewFillResponseLocked() {
+ int requestId;
+
+ do {
+ requestId = sIdCounter.getAndIncrement();
+ } while (requestId == INVALID_REQUEST_ID);
+
+ if (DEBUG) {
+ Slog.d(TAG, "Requesting structure for requestId " + requestId);
+ }
+
+ // If the focus changes very quickly before the first request is returned each focus change
+ // triggers a new partition and we end up with many duplicate partitions. This is
+ // enhanced as the focus change can be much faster than the taking of the assist structure.
+ // Hence remove the currently queued request and replace it with the one queued after the
+ // structure is taken. This causes only one fill request per bust of focus changes.
+ cancelCurrentRequestLocked();
+
+ try {
+ final Bundle receiverExtras = new Bundle();
+ receiverExtras.putInt(EXTRA_REQUEST_ID, requestId);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ if (!ActivityManager.getService().requestAutofillData(mAssistReceiver,
+ receiverExtras, mActivityToken)) {
+ Slog.w(TAG, "failed to request autofill data for " + mActivityToken);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ } catch (RemoteException e) {
+ // Should not happen, it's a local call.
+ }
+ }
Session(@NonNull AutofillManagerServiceImpl service, @NonNull AutoFillUI ui,
@NonNull Context context, @NonNull HandlerCaller handlerCaller, int userId,
@@ -227,7 +390,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// FillServiceCallbacks
@Override
public void onFillRequestSuccess(@Nullable FillResponse response, int serviceUid,
- @NonNull String servicePackageName, int requestId) {
+ @NonNull String servicePackageName) {
if (response == null) {
if ((mFlags & FLAG_MANUAL_REQUEST) != 0) {
getUiForShowing().showError(R.string.autofill_error_cannot_autofill);
@@ -250,7 +413,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// TODO(b/37424539): proper implementation
mResponseWaitingAuth = response;
}
- processResponseLocked(response, requestId);
+ processResponseLocked(response);
}
final LogMaker log = (new LogMaker(MetricsEvent.AUTOFILL_REQUEST))
@@ -306,12 +469,37 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
removeSelf();
}
+ /**
+ * Gets the {@link FillContext} for a request.
+ *
+ * @param requestId The id of the request
+ *
+ * @return The context or {@code null} if there is no context
+ */
+ @Nullable private FillContext getFillContextByRequestIdLocked(int requestId) {
+ if (mContexts == null) {
+ return null;
+ }
+
+ int numContexts = mContexts.size();
+ for (int i = 0; i < numContexts; i++) {
+ FillContext context = mContexts.get(i);
+
+ if (context.getRequestId() == requestId) {
+ return context;
+ }
+ }
+
+ return null;
+ }
+
// FillServiceCallbacks
@Override
- public void authenticate(IntentSender intent, Bundle extras) {
+ public void authenticate(int requestId, IntentSender intent, Bundle extras) {
final Intent fillInIntent;
synchronized (mLock) {
- fillInIntent = createAuthFillInIntent(mStructure, extras);
+ fillInIntent = createAuthFillInIntent(
+ getFillContextByRequestIdLocked(requestId).getStructure(), extras);
}
mService.setAuthenticationSelected();
@@ -327,8 +515,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// AutoFillUiCallback
@Override
- public void fill(Dataset dataset) {
- mHandlerCaller.getHandler().post(() -> autoFill(dataset));
+ public void fill(int requestId, Dataset dataset) {
+ mHandlerCaller.getHandler().post(() -> autoFill(requestId, dataset));
}
// AutoFillUiCallback
@@ -403,12 +591,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
final Parcelable result = data.getParcelable(
AutofillManager.EXTRA_AUTHENTICATION_RESULT);
if (result instanceof FillResponse) {
+ FillResponse response = (FillResponse) result;
+
mMetricsLogger.action(MetricsEvent.AUTOFILL_AUTHENTICATED, mPackageName);
final int requestIndex = mResponses.indexOfValue(mResponseWaitingAuth);
mResponseWaitingAuth = null;
if (requestIndex >= 0) {
- final int requestId = mResponses.keyAt(requestIndex);
- processResponseLocked((FillResponse) result, requestId);
+ response.setRequestId(mResponses.keyAt(requestIndex));
+ processResponseLocked(response);
} else {
Slog.e(TAG, "Error cannot find id for auth response");
}
@@ -420,7 +610,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
if (index >= 0) {
response.getDatasets().set(index, dataset);
mDatasetWaitingAuth = null;
- autoFill(dataset);
+ autoFill(mResponses.keyAt(i), dataset);
resetViewStatesLocked(dataset, ViewState.STATE_WAITING_DATASET_AUTH);
return;
}
@@ -433,18 +623,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mHasCallback = hasIt;
}
- public void setStructureLocked(AssistStructure structure) {
- mStructure = structure;
- }
-
/**
* Shows the save UI, when session can be saved.
*
* @return {@code true} if session is done, or {@code false} if it's pending user action.
*/
public boolean showSaveLocked() {
- if (mStructure == null) {
- Slog.d(TAG, "showSaveLocked(): no mStructure");
+ if (mContexts == null) {
+ Slog.d(TAG, "showSaveLocked(): no contexts");
return true;
}
if (mResponses == null) {
@@ -466,7 +652,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
final FillResponse response = mResponses.valueAt(lastResponseIdx);
final SaveInfo saveInfo = response.getSaveInfo();
if (DEBUG) {
- Slog.d(TAG, "showSaveLocked(): mResponses=" + mResponses
+ Slog.d(TAG, "showSaveLocked(): mResponses=" + mResponses + ", mContexts=" + mContexts
+ ", mViewStates=" + mViewStates);
}
@@ -566,64 +752,107 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
Slog.d(TAG, "callSaveLocked(): mViewStates=" + mViewStates);
}
- for (Entry<AutofillId, ViewState> entry : mViewStates.entrySet()) {
- final AutofillValue value = entry.getValue().getCurrentValue();
- if (value == null) {
+ int numContexts = mContexts.size();
+
+ for (int i = 0; i < numContexts; i++) {
+ FillContext context = mContexts.get(i);
+
+ if (VERBOSE) {
+ Slog.v(TAG, "callSaveLocked(): updating " + context);
+ }
+
+ for (Entry<AutofillId, ViewState> entry : mViewStates.entrySet()) {
+ final AutofillValue value = entry.getValue().getCurrentValue();
+ if (value == null) {
+ if (VERBOSE) {
+ Slog.v(TAG, "callSaveLocked(): skipping " + entry.getKey());
+ }
+ continue;
+ }
+ final AutofillId id = entry.getKey();
+ final ViewNode node = findViewNodeById(context.getStructure(), id);
+ if (node == null) {
+ Slog.w(TAG, "callSaveLocked(): did not find node with id " + id);
+ continue;
+ }
if (VERBOSE) {
- Slog.v(TAG, "callSaveLocked(): skipping " + entry.getKey());
+ Slog.v(TAG, "callSaveLocked(): updating " + id + " to " + value);
}
- continue;
- }
- final AutofillId id = entry.getKey();
- final ViewNode node = findViewNodeByIdLocked(id);
- if (node == null) {
- Slog.w(TAG, "callSaveLocked(): did not find node with id " + id);
- continue;
+
+ node.updateAutofillValue(value);
}
+
+ // Sanitize structure before it's sent to service.
+ context.getStructure().sanitizeForParceling(false);
+
if (VERBOSE) {
- Slog.v(TAG, "callSaveLocked(): updating " + id + " to " + value);
+ Slog.v(TAG, "Dumping structure of " + context + " before calling service.save()");
+ context.getStructure().dump();
}
-
- node.updateAutofillValue(value);
}
- // Sanitize structure before it's sent to service.
- mStructure.sanitizeForParceling(false);
+ // Remove pending fill requests as the session is finished.
+ cancelCurrentRequestLocked();
- if (VERBOSE) {
- Slog.v(TAG, "Dumping " + mStructure + " before calling service.save()");
- mStructure.dump();
+ final SaveRequest saveRequest = new SaveRequest(mContexts, mClientState);
+ mRemoteFillService.onSaveRequest(saveRequest);
+ }
+
+ /**
+ * Determines if a new partition should be started for an id.
+ *
+ * @param id The id of the view that is entered
+ *
+ * @return {@code true} iff a new partition should be started
+ */
+ private boolean shouldStartNewPartitionLocked(@NonNull AutofillId id) {
+ if (mResponses == null) {
+ return true;
}
- // TODO(b/37426206): Implement partitioning properly
- final int lastResponseIdx = getLastResponseIndex();
- final int requestId = mResponses.keyAt(lastResponseIdx);
- final FillContext fillContext = new FillContext(requestId, mStructure);
- final ArrayList<FillContext> fillContexts = new ArrayList<>(1);
- fillContexts.add(fillContext);
+ final int numResponses = mResponses.size();
+ for (int responseNum = 0; responseNum < numResponses; responseNum++) {
+ final FillResponse response = mResponses.valueAt(responseNum);
- final SaveRequest saveRequest = new SaveRequest(fillContexts, mClientState);
- mRemoteFillService.onSaveRequest(saveRequest);
+ if (ArrayUtils.contains(response.getIgnoredIds(), id)) {
+ return false;
+ }
+
+ final SaveInfo saveInfo = response.getSaveInfo();
+ if (saveInfo != null) {
+ if (ArrayUtils.contains(saveInfo.getOptionalIds(), id)
+ || ArrayUtils.contains(saveInfo.getRequiredIds(), id)) {
+ return false;
+ }
+ }
+
+ final ArrayList<Dataset> datasets = response.getDatasets();
+ if (datasets != null) {
+ final int numDatasets = datasets.size();
+
+ for (int dataSetNum = 0; dataSetNum < numDatasets; dataSetNum++) {
+ final ArrayList fields = datasets.get(dataSetNum).getFieldIds();
+
+ if (fields != null && fields.contains(id)) {
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
}
void updateLocked(AutofillId id, Rect virtualBounds, AutofillValue value, int flags) {
ViewState viewState = mViewStates.get(id);
if (viewState == null) {
- if ((flags & (FLAG_START_SESSION | FLAG_VALUE_CHANGED)) != 0) {
+ if ((flags & (FLAG_START_SESSION | FLAG_VALUE_CHANGED | FLAG_VIEW_ENTERED)) != 0) {
if (DEBUG) {
Slog.d(TAG, "Creating viewState for " + id + " on " + getFlagAsString(flags));
}
viewState = new ViewState(this, id, value, this, ViewState.STATE_INITIAL);
mViewStates.put(id, viewState);
- } else if (mStructure != null && (flags & FLAG_VIEW_ENTERED) != 0) {
- if (isIgnoredLocked(id)) {
- if (DEBUG) {
- Slog.d(TAG, "Not starting partition for ignored view id " + id);
- }
- return;
- }
- viewState = startPartitionLocked(id, value);
} else {
if (VERBOSE) Slog.v(TAG, "Ignored " + getFlagAsString(flags) + " for " + id);
return;
@@ -635,6 +864,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mCurrentViewId = viewState.id;
viewState.update(value, virtualBounds);
viewState.setState(ViewState.STATE_STARTED_SESSION);
+ requestNewFillResponseLocked();
return;
}
@@ -664,6 +894,19 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
if ((flags & FLAG_VIEW_ENTERED) != 0) {
+ if (shouldStartNewPartitionLocked(id)) {
+ // TODO(b/37424539): proper implementation
+ if (mResponseWaitingAuth != null && ((flags & FLAG_START_SESSION) == 0)) {
+ viewState.setState(ViewState.STATE_WAITING_RESPONSE_AUTH);
+ } else if ((flags & FLAG_START_SESSION) == 0){
+ if (DEBUG) {
+ Slog.d(TAG, "Starting partition for view id " + viewState.id);
+ }
+ viewState.setState(ViewState.STATE_STARTED_PARTITION);
+ requestNewFillResponseLocked();
+ }
+ }
+
// Remove the UI if the ViewState has changed.
if (mCurrentViewId != viewState.id) {
mUi.hideFillUi(mCurrentViewId != null ? mCurrentViewId : null);
@@ -687,49 +930,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
Slog.w(TAG, "updateLocked(): unknown flags " + flags + ": " + getFlagAsString(flags));
}
- private ViewState startPartitionLocked(AutofillId id, AutofillValue value) {
- // TODO(b/37424539): proper implementation
- if (mResponseWaitingAuth != null) {
- final ViewState viewState =
- new ViewState(this, id, value, this, ViewState.STATE_WAITING_RESPONSE_AUTH);
- mViewStates.put(id, viewState);
- return viewState;
- }
- if (DEBUG) {
- Slog.d(TAG, "Starting partition for view id " + id);
- }
- final ViewState newViewState =
- new ViewState(this, id, value, this,ViewState.STATE_STARTED_PARTITION);
- mViewStates.put(id, newViewState);
-
- // Must update value of nodes so:
- // - proper node is focused
- // - autofillValue is sent back to service when it was previously autofilled
- for (int i = 0; i < mViewStates.size(); i++) {
- final ViewState viewState = mViewStates.valueAt(i);
-
- final ViewNode node = findViewNodeByIdLocked(viewState.id);
- if (node == null) {
- Slog.w(TAG, "startPartitionLocked(): no node for " + viewState.id);
- continue;
- }
-
- final AutofillValue initialValue = viewState.getInitialValue();
- final AutofillValue filledValue = viewState.getAutofilledValue();
- final AutofillOverlay overlay = new AutofillOverlay();
- if (filledValue != null && !filledValue.equals(initialValue)) {
- overlay.value = filledValue;
- }
- overlay.focused = id.equals(viewState.id);
- node.setAutofillOverlay(overlay);
- }
-
- FillRequest request = new FillRequest(mStructure, mClientState, 0);
- mRemoteFillService.onFillRequest(request);
-
- return newViewState;
- }
-
@Override
public void onFillReady(FillResponse response, AutofillId filledId,
@Nullable AutofillValue value) {
@@ -790,7 +990,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
- private void processResponseLocked(FillResponse response, int requestId) {
+ private void processResponseLocked(@NonNull FillResponse response) {
if (DEBUG) {
Slog.d(TAG, "processResponseLocked(mCurrentViewId=" + mCurrentViewId + "):" + response);
}
@@ -798,10 +998,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
if (mResponses == null) {
mResponses = new SparseArray<>(4);
}
- mResponses.put(requestId, response);
- if (response != null) {
- mClientState = response.getClientState();
- }
+ mResponses.put(response.getRequestId(), response);
+ mClientState = response.getClientState();
setViewStatesLocked(response, ViewState.STATE_FILLABLE);
updateTrackedIdsLocked();
@@ -813,7 +1011,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
if ((mFlags & FLAG_MANUAL_REQUEST) != 0 && response.getDatasets() != null
&& response.getDatasets().size() == 1) {
Slog.d(TAG, "autofilling manual request directly");
- autoFill(response.getDatasets().get(0));
+ autoFill(response.getRequestId(), response.getDatasets().get(0));
return;
}
@@ -902,7 +1100,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
- void autoFill(Dataset dataset) {
+ void autoFill(int requestId, Dataset dataset) {
synchronized (mLock) {
// Autofill it directly...
if (dataset.getAuthentication() == null) {
@@ -917,7 +1115,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mService.setDatasetAuthenticationSelected(dataset.getId());
mDatasetWaitingAuth = dataset;
setViewStatesLocked(null, dataset, ViewState.STATE_WAITING_DATASET_AUTH);
- final Intent fillInIntent = createAuthFillInIntent(mStructure, null);
+ final Intent fillInIntent = createAuthFillInIntent(
+ getFillContextByRequestIdLocked(requestId).getStructure(), null);
startAuthentication(dataset.getAuthentication(), fillInIntent);
}
}
@@ -949,23 +1148,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
- private boolean isIgnoredLocked(@NonNull AutofillId id) {
- if (mResponses == null) return false;
-
- for (int i = mResponses.size() - 1; i >= 0; i--) {
- final FillResponse response = mResponses.valueAt(i);
- final AutofillId[] ignoredIds = response.getIgnoredIds();
- if (ignoredIds == null) continue;
- for (int j = 0; j < ignoredIds.length; j++) {
- final AutofillId ignoredId = ignoredIds[j];
- if (ignoredId != null && ignoredId.equals(id)) {
- return true;
- }
- }
- }
- return false;
- }
-
void dumpLocked(String prefix, PrintWriter pw) {
pw.print(prefix); pw.print("id: "); pw.println(id);
pw.print(prefix); pw.print("uid: "); pw.println(uid);
@@ -981,16 +1163,25 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
pw.print(prefix); pw.print("State for id "); pw.println(entry.getKey());
entry.getValue().dump(prefix2, pw);
}
- if (VERBOSE) {
- pw.print(prefix); pw.print("mStructure: " );
- // TODO: add method on AssistStructure to dump on pw
- if (mStructure != null) {
- pw.println("look at logcat" );
- mStructure.dump(); // dumps to logcat
- } else {
- pw.println("null");
+
+ pw.print(prefix); pw.print("mContexts: " );
+ if (mContexts != null) {
+ int numContexts = mContexts.size();
+ for (int i = 0; i < numContexts; i++) {
+ FillContext context = mContexts.get(i);
+
+ pw.print(prefix2); pw.print(context);
+ if (VERBOSE) {
+ pw.println(context.getStructure() + " (look at logcat)");
+
+ // TODO: add method on AssistStructure to dump on pw
+ context.getStructure().dump();
+ }
}
+ } else {
+ pw.println("null");
}
+
pw.print(prefix); pw.print("mHasCallback: "); pw.println(mHasCallback);
pw.print(prefix); pw.print("mClientState: "); pw.println(
Helper.bundleToString(mClientState));
@@ -1018,39 +1209,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
- private ViewNode findViewNodeByIdLocked(AutofillId id) {
- final int size = mStructure.getWindowNodeCount();
- for (int i = 0; i < size; i++) {
- final WindowNode window = mStructure.getWindowNodeAt(i);
- final ViewNode root = window.getRootViewNode();
- if (id.equals(root.getAutofillId())) {
- return root;
- }
- final ViewNode child = findViewNodeByIdLocked(root, id);
- if (child != null) {
- return child;
- }
- }
- return null;
- }
-
- private ViewNode findViewNodeByIdLocked(ViewNode parent, AutofillId id) {
- final int childrenSize = parent.getChildCount();
- if (childrenSize > 0) {
- for (int i = 0; i < childrenSize; i++) {
- final ViewNode child = parent.getChildAt(i);
- if (id.equals(child.getAutofillId())) {
- return child;
- }
- final ViewNode grandChild = findViewNodeByIdLocked(child, id);
- if (grandChild != null && id.equals(grandChild.getAutofillId())) {
- return grandChild;
- }
- }
- }
- return null;
- }
-
void destroyLocked() {
mRemoteFillService.destroy();
mUi.setCallback(null);
diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
index ab6a3a7cd78b..0556c6711888 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -60,8 +60,8 @@ public final class AutoFillUI {
private final MetricsLogger mMetricsLogger = new MetricsLogger();
public interface AutoFillUiCallback {
- void authenticate(@NonNull IntentSender intent, @Nullable Bundle extras);
- void fill(@NonNull Dataset dataset);
+ void authenticate(int requestId, @NonNull IntentSender intent, @Nullable Bundle extras);
+ void fill(int requestId, @NonNull Dataset dataset);
void save();
void cancelSave();
void requestShowFillUi(AutofillId id, int width, int height,
@@ -161,8 +161,8 @@ public final class AutoFillUI {
log.setType(MetricsProto.MetricsEvent.TYPE_DETAIL);
hideFillUiUiThread();
if (mCallback != null) {
- mCallback.authenticate(response.getAuthentication(),
- response.getClientState());
+ mCallback.authenticate(response.getRequestId(),
+ response.getAuthentication(), response.getClientState());
}
}
@@ -171,7 +171,7 @@ public final class AutoFillUI {
log.setType(MetricsProto.MetricsEvent.TYPE_ACTION);
hideFillUiUiThread();
if (mCallback != null) {
- mCallback.fill(dataset);
+ mCallback.fill(response.getRequestId(), dataset);
}
}
diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
index 9bba1ad810a8..cbaaef707bec 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -159,19 +159,20 @@ final class SaveUi {
}
final TextView noButton = view.findViewById(R.id.autofill_save_no);
- if (info.getNegativeActionTitle() != null) {
- noButton.setText(info.getNegativeActionTitle());
- noButton.setOnClickListener((v) -> mListener.onCancel(
- info.getNegativeActionListener()));
+ if (info.getNegativeActionStyle() == SaveInfo.NEGATIVE_BUTTON_STYLE_REJECT) {
+ noButton.setText(R.string.save_password_notnow);
} else {
- noButton.setOnClickListener((v) -> mListener.onCancel(null));
+ noButton.setText(R.string.autofill_save_no);
}
+ noButton.setOnClickListener((v) -> mListener.onCancel(
+ info.getNegativeActionListener()));
final View yesButton = view.findViewById(R.id.autofill_save_yes);
yesButton.setOnClickListener((v) -> mListener.onSave());
final View closeButton = view.findViewById(R.id.autofill_save_close);
- closeButton.setOnClickListener((v) -> mListener.onCancel(null));
+ closeButton.setOnClickListener((v) -> mListener.onCancel(
+ info.getNegativeActionListener()));
mDialog = new Dialog(context, R.style.Theme_Material_Panel);
mDialog.setContentView(view);
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 930100627c2b..1b970e5656bd 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -5641,14 +5641,24 @@ public class BackupManagerService {
// The job scheduler says our constraints don't hold any more,
// so tear down any ongoing backup task right away.
void endFullBackup() {
- synchronized (mQueueLock) {
- if (mRunningFullBackupTask != null) {
- if (DEBUG_SCHEDULING) {
- Slog.i(TAG, "Telling running backup to stop");
+ // offload the mRunningFullBackupTask.handleCancel() call to another thread,
+ // as we might have to wait for mCancelLock
+ Runnable endFullBackupRunnable = new Runnable() {
+ @Override
+ public void run() {
+ PerformFullTransportBackupTask pftbt = null;
+ synchronized (mQueueLock) {
+ if (mRunningFullBackupTask != null) {
+ if (DEBUG_SCHEDULING) {
+ Slog.i(TAG, "Telling running backup to stop");
+ }
+ pftbt = mRunningFullBackupTask;
+ }
}
- mRunningFullBackupTask.handleCancel(true);
+ pftbt.handleCancel(true);
}
- }
+ };
+ new Thread(endFullBackupRunnable, "end-full-backup").start();
}
// ----- Restore infrastructure -----
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 41b70a1312e8..16b6ca8596af 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -36,6 +36,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.pm.FeatureInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.NetworkPolicyManager;
@@ -203,13 +204,15 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
checkNotNull(request, "Request cannot be null");
checkNotNull(callback, "Callback cannot be null");
checkCallerIsSystemOr(callingPackage);
+ int userId = getCallingUserId();
+ checkUsesFeature(callingPackage, userId);
final long callingIdentity = Binder.clearCallingIdentity();
try {
- //TODO bindServiceAsUser
- getContext().bindService(
+ getContext().bindServiceAsUser(
new Intent().setComponent(SERVICE_TO_BIND_TO),
createServiceConnection(request, callback, callingPackage),
- Context.BIND_AUTO_CREATE);
+ Context.BIND_AUTO_CREATE,
+ UserHandle.of(userId));
} finally {
Binder.restoreCallingIdentity(callingIdentity);
}
@@ -219,6 +222,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
public List<String> getAssociations(String callingPackage, int userId)
throws RemoteException {
checkCallerIsSystemOr(callingPackage, userId);
+ checkUsesFeature(callingPackage, getCallingUserId());
return CollectionUtils.map(
readAllAssociations(userId, callingPackage),
a -> a.deviceAddress);
@@ -230,6 +234,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
throws RemoteException {
checkNotNull(deviceMacAddress);
checkCallerIsSystemOr(callingPackage);
+ checkUsesFeature(callingPackage, getCallingUserId());
updateAssociations(associations -> CollectionUtils.remove(associations,
new Association(getCallingUserId(), deviceMacAddress, callingPackage)));
}
@@ -239,7 +244,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
}
private void checkCallerIsSystemOr(String pkg, int userId) throws RemoteException {
- if (getCallingUserId() == UserHandle.USER_SYSTEM) {
+ if (isCallerSystem()) {
return;
}
@@ -282,16 +287,38 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
private void checkCanCallNotificationApi(String callingPackage) throws RemoteException {
checkCallerIsSystemOr(callingPackage);
- checkState(!ArrayUtils.isEmpty(readAllAssociations(getCallingUserId(), callingPackage)),
+ int userId = getCallingUserId();
+ checkState(!ArrayUtils.isEmpty(readAllAssociations(userId, callingPackage)),
"App must have an association before calling this API");
+ checkUsesFeature(callingPackage, userId);
}
- }
+ private void checkUsesFeature(String pkg, int userId) {
+ if (isCallerSystem()) {
+ // Drop the requirement for calls from system process
+ return;
+ }
- private int getCallingUserId() {
+ FeatureInfo[] reqFeatures = getPackageInfo(pkg, userId).reqFeatures;
+ String requiredFeature = PackageManager.FEATURE_COMPANION_DEVICE_SETUP;
+ int numFeatures = ArrayUtils.size(reqFeatures);
+ for (int i = 0; i < numFeatures; i++) {
+ if (requiredFeature.equals(reqFeatures[i].name)) return;
+ }
+ throw new IllegalStateException("Must declare uses-feature "
+ + requiredFeature
+ + " in manifest to use this API");
+ }
+ }
+
+ private static int getCallingUserId() {
return UserHandle.getUserId(Binder.getCallingUid());
}
+ private static boolean isCallerSystem() {
+ return getCallingUserId() == UserHandle.USER_SYSTEM;
+ }
+
private ServiceConnection createServiceConnection(
final AssociationRequest request,
final IFindDeviceCallback findDeviceCallback,
@@ -398,7 +425,9 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
return Binder.withCleanCallingIdentity(() -> {
try {
return getContext().getPackageManager().getPackageInfoAsUser(
- packageName, PackageManager.GET_PERMISSIONS, userId);
+ packageName,
+ PackageManager.GET_PERMISSIONS | PackageManager.GET_CONFIGURATIONS,
+ userId);
} catch (PackageManager.NameNotFoundException e) {
Slog.e(LOG_TAG, "Failed to get PackageInfo for package " + packageName, e);
return null;
diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java
index d25b3cc68221..114d7619a024 100644
--- a/services/core/java/com/android/server/NetworkScoreService.java
+++ b/services/core/java/com/android/server/NetworkScoreService.java
@@ -16,9 +16,6 @@
package com.android.server;
-import static android.net.NetworkRecommendationProvider.EXTRA_RECOMMENDATION_RESULT;
-import static android.net.NetworkRecommendationProvider.EXTRA_SEQUENCE;
-
import android.Manifest.permission;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
@@ -36,8 +33,6 @@ import android.net.INetworkScoreService;
import android.net.NetworkKey;
import android.net.NetworkScoreManager;
import android.net.NetworkScorerAppData;
-import android.net.RecommendationRequest;
-import android.net.RecommendationResult;
import android.net.ScoredNetwork;
import android.net.Uri;
import android.net.wifi.ScanResult;
@@ -46,24 +41,18 @@ import android.net.wifi.WifiManager;
import android.net.wifi.WifiScanner;
import android.os.Binder;
import android.os.Build;
-import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
-import android.os.IRemoteCallback;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-import android.os.RemoteCallback;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.UserHandle;
-import android.provider.Settings;
import android.provider.Settings.Global;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
-import android.util.Pair;
-import android.util.TimedRemoteCaller;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -80,9 +69,6 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -99,7 +85,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
private final Context mContext;
private final NetworkScorerAppManager mNetworkScorerAppManager;
- private final AtomicReference<RequestRecommendationCaller> mReqRecommendationCallerRef;
@GuardedBy("mScoreCaches")
private final Map<Integer, RemoteCallbackList<INetworkScoreCache>> mScoreCaches;
/** Lock used to update mPackageMonitor when scorer package changes occur. */
@@ -113,7 +98,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
private NetworkScorerPackageMonitor mPackageMonitor;
@GuardedBy("mServiceConnectionLock")
private ScoringServiceConnection mServiceConnection;
- private volatile long mRecommendationRequestTimeoutMs;
private BroadcastReceiver mUserIntentReceiver = new BroadcastReceiver() {
@Override
@@ -256,9 +240,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
mContext.registerReceiverAsUser(
mUserIntentReceiver, UserHandle.SYSTEM, filter, null /* broadcastPermission*/,
null /* scheduler */);
- mReqRecommendationCallerRef = new AtomicReference<>(
- new RequestRecommendationCaller(TimedRemoteCaller.DEFAULT_CALL_TIMEOUT_MILLIS));
- mRecommendationRequestTimeoutMs = TimedRemoteCaller.DEFAULT_CALL_TIMEOUT_MILLIS;
mHandler = new ServiceHandler(looper);
mContentObserver = new DispatchingContentObserver(context, mHandler);
mServiceConnProducer = serviceConnProducer;
@@ -295,10 +276,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
mContentObserver.observe(packageNameUri,
ServiceHandler.MSG_RECOMMENDATIONS_PACKAGE_CHANGED);
- final Uri timeoutUri = Global.getUriFor(Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS);
- mContentObserver.observe(timeoutUri,
- ServiceHandler.MSG_RECOMMENDATION_REQUEST_TIMEOUT_CHANGED);
-
final Uri settingUri = Global.getUriFor(Global.NETWORK_RECOMMENDATIONS_ENABLED);
mContentObserver.observe(settingUri,
ServiceHandler.MSG_RECOMMENDATION_ENABLED_SETTING_CHANGED);
@@ -827,87 +804,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
}
@Override
- public RecommendationResult requestRecommendation(RecommendationRequest request) {
- mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
- throwIfCalledOnMainThread();
- final long token = Binder.clearCallingIdentity();
- try {
- final INetworkRecommendationProvider provider = getRecommendationProvider();
- if (provider != null) {
- try {
- final RequestRecommendationCaller caller = mReqRecommendationCallerRef.get();
- return caller.getRecommendationResult(provider, request);
- } catch (RemoteException | TimeoutException e) {
- Log.w(TAG, "Failed to request a recommendation.", e);
- // TODO: 12/15/16 - Keep track of failures.
- }
- }
-
- if (DBG) {
- Log.d(TAG, "Returning the default network recommendation.");
- }
-
- if (request != null && request.getDefaultWifiConfig() != null) {
- return RecommendationResult.createConnectRecommendation(
- request.getDefaultWifiConfig());
- }
- return RecommendationResult.createDoNotConnectRecommendation();
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- /**
- * Request a recommendation for the best network to connect to
- * taking into account the inputs from the {@link RecommendationRequest}.
- *
- * @param request a {@link RecommendationRequest} instance containing the details of the request
- * @param remoteCallback a {@link IRemoteCallback} instance to invoke when the recommendation
- * is available.
- * @throws SecurityException if the caller is not the system
- */
- @Override
- public void requestRecommendationAsync(RecommendationRequest request,
- RemoteCallback remoteCallback) {
- mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
-
- final OneTimeCallback oneTimeCallback = new OneTimeCallback(remoteCallback);
- final Pair<RecommendationRequest, OneTimeCallback> pair =
- Pair.create(request, oneTimeCallback);
- final Message timeoutMsg = mHandler.obtainMessage(
- ServiceHandler.MSG_RECOMMENDATION_REQUEST_TIMEOUT, pair);
- final INetworkRecommendationProvider provider = getRecommendationProvider();
- final long token = Binder.clearCallingIdentity();
- try {
- if (provider != null) {
- try {
- mHandler.sendMessageDelayed(timeoutMsg, mRecommendationRequestTimeoutMs);
- provider.requestRecommendation(request, new IRemoteCallback.Stub() {
- @Override
- public void sendResult(Bundle data) throws RemoteException {
- // Remove the timeout message
- mHandler.removeMessages(timeoutMsg.what, pair);
- oneTimeCallback.sendResult(data);
- }
- }, 0 /*sequence*/);
- return;
- } catch (RemoteException e) {
- Log.w(TAG, "Failed to request a recommendation.", e);
- // TODO: 12/15/16 - Keep track of failures.
- // Remove the timeout message
- mHandler.removeMessages(timeoutMsg.what, pair);
- // Will fall through and send back the default recommendation.
- }
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
-
- // Else send back the default recommendation.
- sendDefaultRecommendationResponse(request, oneTimeCallback);
- }
-
- @Override
public boolean requestScores(NetworkKey[] networks) {
mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
final long token = Binder.clearCallingIdentity();
@@ -941,7 +837,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
return;
}
writer.println("Current scorer: " + currentScorer);
- writer.println("RecommendationRequestTimeoutMs: " + mRecommendationRequestTimeoutMs);
sendCacheUpdateCallback(new BiConsumer<INetworkScoreCache, Object>() {
@Override
@@ -996,12 +891,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
}
}
- private void throwIfCalledOnMainThread() {
- if (Thread.currentThread() == mContext.getMainLooper().getThread()) {
- throw new RuntimeException("Cannot invoke on the main thread");
- }
- }
-
@Nullable
private INetworkRecommendationProvider getRecommendationProvider() {
synchronized (mServiceConnectionLock) {
@@ -1012,19 +901,6 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
return null;
}
- @VisibleForTesting
- public void refreshRecommendationRequestTimeoutMs() {
- final ContentResolver cr = mContext.getContentResolver();
- long timeoutMs = Settings.Global.getLong(cr,
- Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS, -1L /*default*/);
- if (timeoutMs < 0) {
- timeoutMs = TimedRemoteCaller.DEFAULT_CALL_TIMEOUT_MILLIS;
- }
- if (DBG) Log.d(TAG, "Updating the recommendation request timeout to " + timeoutMs + " ms");
- mRecommendationRequestTimeoutMs = timeoutMs;
- mReqRecommendationCallerRef.set(new RequestRecommendationCaller(timeoutMs));
- }
-
// The class and methods need to be public for Mockito to work.
@VisibleForTesting
public static class ScoringServiceConnection implements ServiceConnection {
@@ -1114,93 +990,10 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
}
}
- /**
- * Executes the async requestRecommendation() call with a timeout.
- */
- private static final class RequestRecommendationCaller
- extends TimedRemoteCaller<RecommendationResult> {
- private final IRemoteCallback mCallback;
-
- RequestRecommendationCaller(long callTimeoutMillis) {
- super(callTimeoutMillis);
- mCallback = new IRemoteCallback.Stub() {
- @Override
- public void sendResult(Bundle data) throws RemoteException {
- final RecommendationResult result =
- data.getParcelable(EXTRA_RECOMMENDATION_RESULT);
- final int sequence = data.getInt(EXTRA_SEQUENCE, -1);
- if (VERBOSE) Log.v(TAG, "callback received for sequence " + sequence);
- onRemoteMethodResult(result, sequence);
- }
- };
- }
-
- /**
- * Runs the requestRecommendation() call on the given {@link INetworkRecommendationProvider}
- * instance.
- *
- * @param target the {@link INetworkRecommendationProvider} to request a recommendation
- * from
- * @param request the {@link RecommendationRequest} from the calling client
- * @return a {@link RecommendationResult} from the provider
- * @throws RemoteException if the call failed
- * @throws TimeoutException if the call took longer than the set timeout
- */
- RecommendationResult getRecommendationResult(INetworkRecommendationProvider target,
- RecommendationRequest request) throws RemoteException, TimeoutException {
- final int sequence = onBeforeRemoteCall();
- if (VERBOSE) Log.v(TAG, "getRecommendationResult() seq=" + sequence);
- target.requestRecommendation(request, mCallback, sequence);
- return getResultTimed(sequence);
- }
- }
-
- /**
- * A wrapper around {@link RemoteCallback} that guarantees
- * {@link RemoteCallback#sendResult(Bundle)} will be invoked at most once.
- */
- @VisibleForTesting
- public static final class OneTimeCallback {
- private final RemoteCallback mRemoteCallback;
- private final AtomicBoolean mCallbackRun;
-
- public OneTimeCallback(RemoteCallback remoteCallback) {
- mRemoteCallback = remoteCallback;
- mCallbackRun = new AtomicBoolean(false);
- }
-
- public void sendResult(Bundle data) {
- if (mCallbackRun.compareAndSet(false, true)) {
- mRemoteCallback.sendResult(data);
- }
- }
- }
-
- private static void sendDefaultRecommendationResponse(RecommendationRequest request,
- OneTimeCallback remoteCallback) {
- if (DBG) {
- Log.d(TAG, "Returning the default network recommendation.");
- }
-
- final RecommendationResult result;
- if (request != null && request.getDefaultWifiConfig() != null) {
- result = RecommendationResult.createConnectRecommendation(
- request.getDefaultWifiConfig());
- } else {
- result = RecommendationResult.createDoNotConnectRecommendation();
- }
-
- final Bundle data = new Bundle();
- data.putParcelable(EXTRA_RECOMMENDATION_RESULT, result);
- remoteCallback.sendResult(data);
- }
-
@VisibleForTesting
public final class ServiceHandler extends Handler {
- public static final int MSG_RECOMMENDATION_REQUEST_TIMEOUT = 1;
- public static final int MSG_RECOMMENDATIONS_PACKAGE_CHANGED = 2;
- public static final int MSG_RECOMMENDATION_REQUEST_TIMEOUT_CHANGED = 3;
- public static final int MSG_RECOMMENDATION_ENABLED_SETTING_CHANGED = 4;
+ public static final int MSG_RECOMMENDATIONS_PACKAGE_CHANGED = 1;
+ public static final int MSG_RECOMMENDATION_ENABLED_SETTING_CHANGED = 2;
public ServiceHandler(Looper looper) {
super(looper);
@@ -1210,26 +1003,11 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
public void handleMessage(Message msg) {
final int what = msg.what;
switch (what) {
- case MSG_RECOMMENDATION_REQUEST_TIMEOUT:
- if (DBG) {
- Log.d(TAG, "Network recommendation request timed out.");
- }
- final Pair<RecommendationRequest, OneTimeCallback> pair =
- (Pair<RecommendationRequest, OneTimeCallback>) msg.obj;
- final RecommendationRequest request = pair.first;
- final OneTimeCallback remoteCallback = pair.second;
- sendDefaultRecommendationResponse(request, remoteCallback);
- break;
-
case MSG_RECOMMENDATIONS_PACKAGE_CHANGED:
case MSG_RECOMMENDATION_ENABLED_SETTING_CHANGED:
refreshBinding();
break;
- case MSG_RECOMMENDATION_REQUEST_TIMEOUT_CHANGED:
- refreshRecommendationRequestTimeoutMs();
- break;
-
default:
Log.w(TAG,"Unknown message: " + what);
}
diff --git a/services/core/java/com/android/server/SyntheticPasswordCrypto.java b/services/core/java/com/android/server/SyntheticPasswordCrypto.java
index 12d91c57cdad..71ab2a554071 100644
--- a/services/core/java/com/android/server/SyntheticPasswordCrypto.java
+++ b/services/core/java/com/android/server/SyntheticPasswordCrypto.java
@@ -139,12 +139,14 @@ public class SyntheticPasswordCrypto {
keyStore.load(null);
KeyProtection.Builder builder = new KeyProtection.Builder(KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
- .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE);
+ .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
+ .setCriticalToDeviceEncryption(true);
if (sid != 0) {
builder.setUserAuthenticationRequired(true)
.setBoundToSpecificSecureUserId(sid)
.setUserAuthenticationValidityDurationSeconds(USER_AUTHENTICATION_VALIDITY);
}
+
keyStore.setEntry(keyAlias,
new KeyStore.SecretKeyEntry(secretKey),
builder.build());
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index adb55b91c0ae..018e41b7bef1 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -112,6 +112,7 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -752,10 +753,12 @@ public class AccountManagerService
synchronized (accounts.dbLock) {
synchronized (accounts.cacheLock) {
Map<String, Integer> packagesToVisibility;
+ List<String> accountRemovedReceivers;
if (notify) {
if (isSpecialPackageKey(packageName)) {
packagesToVisibility =
getRequestingPackages(account, accounts);
+ accountRemovedReceivers = getAccountRemovedReceivers(account, accounts);
} else {
if (!packageExistsForUser(packageName, accounts.userId)) {
return false; // package is not installed.
@@ -763,15 +766,20 @@ public class AccountManagerService
packagesToVisibility = new HashMap<>();
packagesToVisibility.put(packageName,
resolveAccountVisibility(account, packageName, accounts));
+ accountRemovedReceivers = new ArrayList<>();
+ if (shouldNotifyPackageOnAccountRemoval(account, packageName, accounts)) {
+ accountRemovedReceivers.add(packageName);
+ }
}
} else {
- // Notifications will not be send.
+ // Notifications will not be send - only used during add account.
if (!isSpecialPackageKey(packageName) &&
!packageExistsForUser(packageName, accounts.userId)) {
// package is not installed and not meta value.
return false;
}
- packagesToVisibility = new HashMap<>();
+ packagesToVisibility = Collections.emptyMap();
+ accountRemovedReceivers = Collections.emptyList();
}
if (!updateAccountVisibilityLocked(account, packageName, newVisibility, accounts)) {
@@ -781,11 +789,14 @@ public class AccountManagerService
if (notify) {
for (Entry<String, Integer> packageToVisibility : packagesToVisibility
.entrySet()) {
- if (packageToVisibility.getValue()
- != AccountManager.VISIBILITY_NOT_VISIBLE) {
+ if (shouldNotifyOnVisibilityChange(packageToVisibility.getValue(),
+ resolveAccountVisibility(account, packageName, accounts))) {
notifyPackage(packageToVisibility.getKey(), accounts);
}
}
+ for (String packageNameToNotify : accountRemovedReceivers) {
+ sendAccountRemovedBroadcast(account, packageNameToNotify, accounts.userId);
+ }
sendAccountsChangedBroadcast(accounts.userId);
}
return true;
@@ -889,10 +900,11 @@ public class AccountManagerService
// Send notification to all packages which can potentially see the account
private void sendNotificationAccountUpdated(Account account, UserAccounts accounts) {
Map<String, Integer> packagesToVisibility = getRequestingPackages(account, accounts);
- // packages with VISIBILITY_USER_MANAGED_NOT_VISIBL still get notification.
- // Should we notify VISIBILITY_NOT_VISIBLE packages when account is added?
+
for (Entry<String, Integer> packageToVisibility : packagesToVisibility.entrySet()) {
- if (packageToVisibility.getValue() != AccountManager.VISIBILITY_NOT_VISIBLE) {
+ if ((packageToVisibility.getValue() != AccountManager.VISIBILITY_NOT_VISIBLE)
+ && (packageToVisibility.getValue()
+ != AccountManager.VISIBILITY_USER_MANAGED_NOT_VISIBLE)) {
notifyPackage(packageToVisibility.getKey(), accounts);
}
}
@@ -931,6 +943,44 @@ public class AccountManagerService
return result;
}
+ // Returns a list of packages listening to ACTION_ACCOUNT_REMOVED able to see the account.
+ private List<String> getAccountRemovedReceivers(Account account, UserAccounts accounts) {
+ Intent intent = new Intent(AccountManager.ACTION_ACCOUNT_REMOVED);
+ intent.setFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ List<ResolveInfo> receivers =
+ mPackageManager.queryBroadcastReceiversAsUser(intent, 0, accounts.userId);
+ List<String> result = new ArrayList<>();
+ if (receivers == null) {
+ return result;
+ }
+ for (ResolveInfo resolveInfo: receivers) {
+ String packageName = resolveInfo.activityInfo.applicationInfo.packageName;
+ int visibility = resolveAccountVisibility(account, packageName, accounts);
+ if (visibility == AccountManager.VISIBILITY_VISIBLE
+ || visibility == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE) {
+ result.add(packageName);
+ }
+ }
+ return result;
+ }
+
+ // Returns true if given package is listening to ACTION_ACCOUNT_REMOVED and can see the account.
+ private boolean shouldNotifyPackageOnAccountRemoval(Account account,
+ String packageName, UserAccounts accounts) {
+ int visibility = resolveAccountVisibility(account, packageName, accounts);
+ if (visibility != AccountManager.VISIBILITY_VISIBLE
+ && visibility != AccountManager.VISIBILITY_USER_MANAGED_VISIBLE) {
+ return false;
+ }
+
+ Intent intent = new Intent(AccountManager.ACTION_ACCOUNT_REMOVED);
+ intent.setFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ intent.setPackage(packageName);
+ List<ResolveInfo> receivers =
+ mPackageManager.queryBroadcastReceiversAsUser(intent, 0, accounts.userId);
+ return (receivers != null && receivers.size() > 0);
+ }
+
private boolean packageExistsForUser(String packageName, int userId) {
try {
long identityToken = clearCallingIdentity();
@@ -959,9 +1009,12 @@ public class AccountManagerService
mContext.sendBroadcastAsUser(ACCOUNTS_CHANGED_INTENT, new UserHandle(userId));
}
- private void sendAccountRemovedBroadcast(int userId) {
+ private void sendAccountRemovedBroadcast(Account account, String packageName, int userId) {
Intent intent = new Intent(AccountManager.ACTION_ACCOUNT_REMOVED);
intent.setFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ intent.setPackage(packageName);
+ intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
+ intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
mContext.sendBroadcastAsUser(intent, new UserHandle(userId));
}
@@ -1087,6 +1140,8 @@ public class AccountManagerService
+ "'s registered authenticator no longer exist.");
Map<String, Integer> packagesToVisibility =
getRequestingPackages(account, accounts);
+ List<String> accountRemovedReceivers =
+ getAccountRemovedReceivers(account, accounts);
accountsDb.beginTransaction();
try {
accountsDb.deleteDeAccount(accountId);
@@ -1112,12 +1167,14 @@ public class AccountManagerService
for (Entry<String, Integer> packageToVisibility :
packagesToVisibility.entrySet()) {
- if (packageToVisibility.getValue()
- != AccountManager.VISIBILITY_NOT_VISIBLE) {
+ if (shouldNotifyOnVisibilityChange(packageToVisibility.getValue(),
+ AccountManager.VISIBILITY_NOT_VISIBLE)) {
notifyPackage(packageToVisibility.getKey(), accounts);
}
}
- sendAccountRemovedBroadcast(accounts.userId);
+ for (String packageName : accountRemovedReceivers) {
+ sendAccountRemovedBroadcast(account, packageName, accounts.userId);
+ }
} else {
ArrayList<String> accountNames = accountNamesByType.get(account.type);
if (accountNames == null) {
@@ -1147,6 +1204,14 @@ public class AccountManagerService
}
}
+ private boolean shouldNotifyOnVisibilityChange(int oldVisibility, int newVisibility) {
+ boolean oldVisible = (oldVisibility == AccountManager.VISIBILITY_VISIBLE) ||
+ (oldVisibility == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+ boolean newVisible = (newVisibility == AccountManager.VISIBILITY_VISIBLE) ||
+ (newVisibility == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+ return oldVisible == newVisible;
+ }
+
private SparseBooleanArray getUidsOfInstalledOrUpdatedPackagesAsUser(int userId) {
// Get the UIDs of all apps that might have data on the device. We want
// to preserve user data if the app might otherwise be storing data.
@@ -1911,6 +1976,8 @@ public class AccountManagerService
}
synchronized (accounts.dbLock) {
synchronized (accounts.cacheLock) {
+ List<String> accountRemovedReceivers =
+ getAccountRemovedReceivers(accountToRename, accounts);
accounts.accountsDb.beginTransaction();
Account renamedAccount = new Account(newName, accountToRename.type);
if ((accounts.accountsDb.findCeAccountId(renamedAccount) >= 0)) {
@@ -1978,7 +2045,9 @@ public class AccountManagerService
sendNotificationAccountUpdated(resultAccount, accounts);
sendAccountsChangedBroadcast(accounts.userId);
- sendAccountRemovedBroadcast(accounts.userId);
+ for (String packageName : accountRemovedReceivers) {
+ sendAccountRemovedBroadcast(accountToRename, packageName, accounts.userId);
+ }
}
}
return resultAccount;
@@ -2181,6 +2250,8 @@ public class AccountManagerService
synchronized (accounts.cacheLock) {
Map<String, Integer> packagesToVisibility = getRequestingPackages(account,
accounts);
+ List<String> accountRemovedReceivers =
+ getAccountRemovedReceivers(account, accounts);
accounts.accountsDb.beginTransaction();
// Set to a dummy value, this will only be used if the database
// transaction succeeds.
@@ -2206,15 +2277,18 @@ public class AccountManagerService
removeAccountFromCacheLocked(accounts, account);
for (Entry<String, Integer> packageToVisibility : packagesToVisibility
.entrySet()) {
- if (packageToVisibility.getValue()
- != AccountManager.VISIBILITY_NOT_VISIBLE) {
+ if ((packageToVisibility.getValue() == AccountManager.VISIBILITY_VISIBLE)
+ || (packageToVisibility.getValue()
+ == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE)) {
notifyPackage(packageToVisibility.getKey(), accounts);
}
}
// Only broadcast LOGIN_ACCOUNTS_CHANGED if a change occurred.
sendAccountsChangedBroadcast(accounts.userId);
- sendAccountRemovedBroadcast(accounts.userId);
+ for (String packageName : accountRemovedReceivers) {
+ sendAccountRemovedBroadcast(account, packageName, accounts.userId);
+ }
String action = userUnlocked ? AccountsDb.DEBUG_ACTION_ACCOUNT_REMOVE
: AccountsDb.DEBUG_ACTION_ACCOUNT_REMOVE_DE;
logRecord(action, AccountsDb.TABLE_ACCOUNTS, accountId, accounts);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index d99601c815f7..8d1435b29e4b 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -229,7 +229,7 @@ import android.app.Instrumentation;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
-import android.app.PictureInPictureArgs;
+import android.app.PictureInPictureParams;
import android.app.ProfilerInfo;
import android.app.RemoteAction;
import android.app.WaitResult;
@@ -411,6 +411,7 @@ import com.android.server.pm.Installer;
import com.android.server.pm.Installer.InstallerException;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.vr.VrManagerInternal;
+import com.android.server.wm.PinnedStackWindowController;
import com.android.server.wm.WindowManagerService;
import org.xmlpull.v1.XmlPullParser;
@@ -7817,24 +7818,38 @@ public class ActivityManagerService extends IActivityManager.Stub
final long origId = Binder.clearCallingIdentity();
try {
synchronized(this) {
- final ActivityStack stack = ActivityRecord.getStackLocked(token);
- if (stack == null) {
- return false;
- }
- return stack.mStackId == PINNED_STACK_ID;
+ return isInPictureInPictureMode(ActivityRecord.forTokenLocked(token));
}
} finally {
Binder.restoreCallingIdentity(origId);
}
}
+ private boolean isInPictureInPictureMode(ActivityRecord r) {
+ if (r == null || r.getStack() == null || !r.getStack().isPinnedStack() ||
+ r.getStack().isInStackLocked(r) == null) {
+ return false;
+ }
+
+ // If we are animating to fullscreen then we have already dispatched the PIP mode
+ // changed, so we should reflect that check here as well.
+ final PinnedActivityStack stack = r.getStack();
+ final PinnedStackWindowController windowController = stack.getWindowContainerController();
+ return !windowController.isAnimatingBoundsToFullscreen();
+ }
+
@Override
- public boolean enterPictureInPictureMode(IBinder token, final PictureInPictureArgs args) {
+ public boolean enterPictureInPictureMode(IBinder token, final PictureInPictureParams params) {
final long origId = Binder.clearCallingIdentity();
try {
synchronized(this) {
- final ActivityRecord r = ensureValidPictureInPictureActivityArgsLocked(
- "enterPictureInPictureMode", token, args);
+ final ActivityRecord r = ensureValidPictureInPictureActivityParamsLocked(
+ "enterPictureInPictureMode", token, params);
+
+ // If the activity is already in picture in picture mode, then just return early
+ if (isInPictureInPictureMode(r)) {
+ return true;
+ }
// Activity supports picture-in-picture, now check that we can enter PiP at this
// point, if it is
@@ -7845,7 +7860,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final Runnable enterPipRunnable = () -> {
// Only update the saved args from the args that are set
- r.pictureInPictureArgs.copyOnlySet(args);
+ r.pictureInPictureArgs.copyOnlySet(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
@@ -7864,7 +7879,7 @@ public class ActivityManagerService extends IActivityManager.Stub
MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED,
r.supportsPictureInPictureWhilePausing);
- logPictureInPictureArgs(args);
+ logPictureInPictureArgs(params);
};
if (isKeyguardLocked()) {
@@ -7903,15 +7918,15 @@ public class ActivityManagerService extends IActivityManager.Stub
}
@Override
- public void setPictureInPictureArgs(IBinder token, final PictureInPictureArgs args) {
+ public void setPictureInPictureParams(IBinder token, final PictureInPictureParams params) {
final long origId = Binder.clearCallingIdentity();
try {
synchronized(this) {
- final ActivityRecord r = ensureValidPictureInPictureActivityArgsLocked(
- "setPictureInPictureArgs", token, args);
+ final ActivityRecord r = ensureValidPictureInPictureActivityParamsLocked(
+ "setPictureInPictureParams", token, params);
// Only update the saved args from the args that are set
- r.pictureInPictureArgs.copyOnlySet(args);
+ r.pictureInPictureArgs.copyOnlySet(params);
if (r.getStack().getStackId() == PINNED_STACK_ID) {
// If the activity is already in picture-in-picture, update the pinned stack now
// if it is not already expanding to fullscreen. Otherwise, the arguments will
@@ -7923,21 +7938,28 @@ public class ActivityManagerService extends IActivityManager.Stub
stack.setPictureInPictureActions(r.pictureInPictureArgs.getActions());
}
}
- logPictureInPictureArgs(args);
+ logPictureInPictureArgs(params);
}
} finally {
Binder.restoreCallingIdentity(origId);
}
}
- private void logPictureInPictureArgs(PictureInPictureArgs args) {
- if (args.hasSetActions()) {
+ @Override
+ public int getMaxNumPictureInPictureActions(IBinder token) {
+ // Currently, this is a static constant, but later, we may change this to be dependent on
+ // the context of the activity
+ return 3;
+ }
+
+ private void logPictureInPictureArgs(PictureInPictureParams params) {
+ if (params.hasSetActions()) {
MetricsLogger.histogram(mContext, "tron_varz_picture_in_picture_actions_count",
- args.getActions().size());
+ params.getActions().size());
}
- if (args.hasSetAspectRatio()) {
+ if (params.hasSetAspectRatio()) {
LogMaker lm = new LogMaker(MetricsEvent.ACTION_PICTURE_IN_PICTURE_ASPECT_RATIO_CHANGED);
- lm.addTaggedData(MetricsEvent.PICTURE_IN_PICTURE_ASPECT_RATIO, args.getAspectRatio());
+ lm.addTaggedData(MetricsEvent.PICTURE_IN_PICTURE_ASPECT_RATIO, params.getAspectRatio());
MetricsLogger.action(lm);
}
}
@@ -7948,8 +7970,8 @@ public class ActivityManagerService extends IActivityManager.Stub
*
* @return the activity record for the given {@param token} if all the checks pass.
*/
- private ActivityRecord ensureValidPictureInPictureActivityArgsLocked(String caller,
- IBinder token, PictureInPictureArgs args) {
+ private ActivityRecord ensureValidPictureInPictureActivityParamsLocked(String caller,
+ IBinder token, PictureInPictureParams params) {
if (!mSupportsPictureInPicture) {
throw new IllegalStateException(caller
+ ": Device doesn't support picture-in-picture mode.");
@@ -7971,9 +7993,9 @@ public class ActivityManagerService extends IActivityManager.Stub
+ ": Activities on the home, assistant, or recents stack not supported");
}
- if (args.hasSetAspectRatio()
+ if (params.hasSetAspectRatio()
&& !mWindowManager.isValidPictureInPictureAspectRatio(r.getStack().mDisplayId,
- args.getAspectRatio())) {
+ params.getAspectRatio())) {
final float minAspectRatio = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_pictureInPictureMinAspectRatio);
final float maxAspectRatio = mContext.getResources().getFloat(
@@ -7983,12 +8005,8 @@ public class ActivityManagerService extends IActivityManager.Stub
minAspectRatio, maxAspectRatio));
}
- if (args.hasSetActions()
- && args.getActions().size() > ActivityManager.getMaxNumPictureInPictureActions()) {
- throw new IllegalArgumentException(String.format(caller + ": Invalid number of"
- + "picture-in-picture actions. Only a maximum of %d actions allowed",
- ActivityManager.getMaxNumPictureInPictureActions()));
- }
+ // Truncate the number of actions if necessary
+ params.truncateActions(getMaxNumPictureInPictureActions(token));
return r;
}
@@ -11255,9 +11273,13 @@ public class ActivityManagerService extends IActivityManager.Stub
holder.provider = null;
return holder;
}
- // Don't expose instant app providers
- if (cpr.appInfo.isInstantApp()) {
- return null;
+ // Don't expose providers between normal apps and instant apps
+ try {
+ if (AppGlobals.getPackageManager()
+ .resolveContentProvider(name, 0 /*flags*/, userId) == null) {
+ return null;
+ }
+ } catch (RemoteException e) {
}
final long origId = Binder.clearCallingIdentity();
@@ -19146,6 +19168,12 @@ public class ActivityManagerService extends IActivityManager.Stub
case android.security.KeyChain.ACTION_TRUST_STORE_CHANGED:
mHandler.sendEmptyMessage(HANDLE_TRUST_STORAGE_UPDATE_MSG);
break;
+ case "com.android.launcher.action.INSTALL_SHORTCUT":
+ // As of O, we no longer support this broadcasts, even for pre-O apps.
+ // Apps should now be using ShortcutManager.pinRequestShortcut().
+ Log.w(TAG, "Broadcast " + action
+ + " no longer supported. It will not be delivered.");
+ return ActivityManager.BROADCAST_SUCCESS;
}
if (Intent.ACTION_PACKAGE_ADDED.equals(action) ||
diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
index 08ff7de87c9f..2dd3b7468f43 100644
--- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
@@ -133,7 +133,7 @@ class ActivityMetricsLogger {
*/
void notifyActivityLaunching() {
if (!isAnyTransitionActive()) {
- mCurrentTransitionStartTime = System.currentTimeMillis();
+ mCurrentTransitionStartTime = SystemClock.uptimeMillis();
}
}
@@ -299,7 +299,7 @@ class ActivityMetricsLogger {
private int calculateCurrentDelay() {
// Shouldn't take more than 25 days to launch an app, so int is fine here.
- return (int) (System.currentTimeMillis() - mCurrentTransitionStartTime);
+ return (int) (SystemClock.uptimeMillis() - mCurrentTransitionStartTime);
}
private void logAppTransitionMultiEvents() {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index eeedab8856e5..158175f4b0d9 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -62,6 +62,8 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.res.Configuration.EMPTY;
+import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
+import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
import static android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET;
import static android.os.Build.VERSION_CODES.HONEYCOMB;
@@ -115,7 +117,7 @@ import android.annotation.NonNull;
import android.app.ActivityManager.TaskDescription;
import android.app.ActivityOptions;
import android.app.PendingIntent;
-import android.app.PictureInPictureArgs;
+import android.app.PictureInPictureParams;
import android.app.ResultInfo;
import android.content.ComponentName;
import android.content.Intent;
@@ -139,6 +141,7 @@ import android.os.UserHandle;
import android.service.voice.IVoiceInteractionSession;
import android.util.EventLog;
import android.util.Log;
+import android.util.MergedConfiguration;
import android.util.Slog;
import android.util.TimeUtils;
import android.view.AppTransitionAnimationSpec;
@@ -240,13 +243,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
long pauseTime; // last time we started pausing the activity
long launchTickTime; // base time for launch tick messages
- // TODO: Refactor mLastReportedConfiguration and mLastReportedOverrideConfiguration to use a
- // MergedConfiguration object for clarity.
- private Configuration mLastReportedConfiguration; // configuration activity was last running in
- // Overridden configuration by the activity task
- // WARNING: Reference points to {@link TaskRecord#getMergedOverrideConfig}, so its internal
- // state should never be altered directly.
- private Configuration mLastReportedOverrideConfiguration;
+ // Last configuration reported to the activity in the client process.
+ private MergedConfiguration mLastReportedConfiguration;
private int mLastReportedDisplayId;
CompatibilityInfo compat;// last used compatibility mode
ActivityRecord resultTo; // who started this entry, so will get our reply
@@ -274,11 +272,13 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
// completed
boolean preserveWindowOnDeferredRelaunch; // activity windows are preserved on deferred relaunch
int configChangeFlags; // which config values have changed
- boolean keysPaused; // has key dispatching been paused for it?
+ private boolean keysPaused; // has key dispatching been paused for it?
int launchMode; // the launch mode activity attribute.
boolean visible; // does this activity's window need to be shown?
boolean visibleIgnoringKeyguard; // is this activity visible, ignoring the fact that Keyguard
// might hide this activity?
+ private boolean mDeferHidingClient; // If true we told WM to defer reporting to the client
+ // process that it is hidden.
boolean sleeping; // have we told the activity to sleep?
boolean nowVisible; // is this activity's window visible?
boolean idle; // has the activity gone idle?
@@ -293,8 +293,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
boolean supportsPictureInPictureWhilePausing; // This flag is set by the system to indicate
// that the activity can enter picture in picture while pausing (ie. only when another
// task is brought to front or started)
- PictureInPictureArgs pictureInPictureArgs = new PictureInPictureArgs(); // The PiP
- // arguments used when deferring the entering of picture-in-picture.
+ PictureInPictureParams pictureInPictureArgs = new PictureInPictureParams.Builder().build();
+ // The PiP params used when deferring the entering of picture-in-picture.
int launchCount; // count of launches since last state
long lastLaunchTime; // time of last launch of this activity
ComponentName requestedVrComponent; // the requested component for handling VR mode.
@@ -344,10 +344,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
/**
* Temp configs used in {@link #ensureActivityConfigurationLocked(int, boolean)}
*/
- private final Configuration mTmpConfig1 = new Configuration();
- private final Configuration mTmpConfig2 = new Configuration();
- private final Configuration mTmpConfig3 = new Configuration();
- private final Point mTmpPoint = new Point();
+ private final Configuration mTmpConfig = new Configuration();
private final Rect mTmpBounds = new Rect();
private static String startingWindowStateToString(int state) {
@@ -398,10 +395,9 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
pw.print(" labelRes=0x"); pw.print(Integer.toHexString(labelRes));
pw.print(" icon=0x"); pw.print(Integer.toHexString(icon));
pw.print(" theme=0x"); pw.println(Integer.toHexString(theme));
- pw.print(prefix); pw.print("mLastReportedConfiguration=");
- pw.println(mLastReportedConfiguration);
- pw.print(prefix); pw.print("mLastReportedOverrideConfiguration=");
- pw.println(mLastReportedOverrideConfiguration);
+ pw.println(prefix + "mLastReportedConfigurations:");
+ mLastReportedConfiguration.dump(pw, prefix + " ");
+
pw.print(prefix); pw.print("CurrentConfiguration="); pw.println(getConfiguration());
if (!getOverrideConfiguration().equals(EMPTY)) {
pw.println(prefix + "OverrideConfiguration=" + getOverrideConfiguration());
@@ -523,6 +519,9 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
else TimeUtils.formatDuration(lastVisibleTime, now, pw);
pw.println();
}
+ if (mDeferHidingClient) {
+ pw.println(prefix + "mDeferHidingClient=" + mDeferHidingClient);
+ }
if (deferRelaunchUntilPaused || configChangeFlags != 0) {
pw.print(prefix); pw.print("deferRelaunchUntilPaused="); pw.print(deferRelaunchUntilPaused);
pw.print(" configChangeFlags=");
@@ -799,8 +798,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
resolvedType = _resolvedType;
componentSpecified = _componentSpecified;
rootVoiceInteraction = _rootVoiceInteraction;
- mLastReportedConfiguration = new Configuration(_configuration);
- mLastReportedOverrideConfiguration = new Configuration();
+ mLastReportedConfiguration = new MergedConfiguration(_configuration);
resultTo = _resultTo;
resultWho = _resultWho;
requestCode = _reqCode;
@@ -1567,22 +1565,31 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
return mWindowContainerController.screenshotApplications(getDisplayId(), w, h, scale);
}
- void setVisibility(boolean visible) {
- mWindowContainerController.setVisibility(visible, false /* deferHidingClient */);
+ void setDeferHidingClient(boolean deferHidingClient) {
+ if (mDeferHidingClient == deferHidingClient) {
+ return;
+ }
+ mDeferHidingClient = deferHidingClient;
+ if (!mDeferHidingClient && !visible) {
+ // Hiding the client is no longer deferred and the app isn't visible still, go ahead and
+ // update the visibility.
+ setVisibility(false);
+ }
}
- void setVisible(boolean newVisible) {
- setVisible(newVisible, false /* deferHidingClient */);
+ void setVisibility(boolean visible) {
+ mWindowContainerController.setVisibility(visible, mDeferHidingClient);
}
// TODO: Look into merging with #setVisibility()
- void setVisible(boolean newVisible, boolean deferHidingClient) {
+ void setVisible(boolean newVisible) {
visible = newVisible;
+ mDeferHidingClient = !visible && mDeferHidingClient;
if (!visible && mUpdateTaskThumbnailWhenHidden) {
updateThumbnailLocked(screenshotActivityLocked(), null /* description */);
mUpdateTaskThumbnailWhenHidden = false;
}
- mWindowContainerController.setVisibility(visible, deferHidingClient);
+ setVisibility(visible);
final ArrayList<ActivityContainer> containers = mChildContainers;
for (int containerNdx = containers.size() - 1; containerNdx >= 0; --containerNdx) {
final ActivityContainer container = containers.get(containerNdx);
@@ -2195,15 +2202,15 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
* global configuration is sent to the client for this activity.
*/
void setLastReportedGlobalConfiguration(@NonNull Configuration config) {
- mLastReportedConfiguration.setTo(config);
+ mLastReportedConfiguration.setGlobalConfiguration(config);
}
/**
- * Set the last reported merged override configuration to the client. Should be called whenever
+ * Set the last reported configuration to the client. Should be called whenever
* a new merged configuration is sent to the client for this activity.
*/
- void setLastReportedMergedOverrideConfiguration(@NonNull Configuration config) {
- mLastReportedOverrideConfiguration.setTo(config);
+ void setLastReportedConfiguration(@NonNull MergedConfiguration config) {
+ mLastReportedConfiguration.setTo(config);
}
/** Call when override config was sent to the Window Manager to update internal records. */
@@ -2211,7 +2218,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
// we should only set this when we actually report to the activity which is what the method
// setLastReportedMergedOverrideConfiguration() does. Investigate if this is really needed.
void onOverrideConfigurationSent() {
- mLastReportedOverrideConfiguration.setTo(getMergedOverrideConfiguration());
+ mLastReportedConfiguration.setOverrideConfiguration(getMergedOverrideConfiguration());
}
@Override
@@ -2227,18 +2234,20 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
}
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
- private boolean updateOverrideConfiguration() {
+ private void updateOverrideConfiguration() {
+ mTmpConfig.unset();
computeBounds(mTmpBounds);
if (mTmpBounds.equals(mBounds)) {
- return false;
+ return;
}
+
mBounds.set(mTmpBounds);
// Bounds changed...update configuration to match.
- mTmpConfig1.unset();
- task.computeOverrideConfiguration(mTmpConfig1, mBounds, null /* insetBounds */,
- false /* overrideWidth */, false /* overrideHeight */);
- onOverrideConfigurationChanged(mTmpConfig1);
- return true;
+ if (!mBounds.isEmpty()) {
+ task.computeOverrideConfiguration(mTmpConfig, mBounds, null /* insetBounds */,
+ false /* overrideWidth */, false /* overrideHeight */);
+ }
+ onOverrideConfigurationChanged(mTmpConfig);
}
/**
@@ -2266,12 +2275,12 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
int maxActivityHeight = containingAppHeight;
if (containingAppWidth < containingAppHeight) {
- // Width is the shorter side, so we use that to figure-out what the max. height should
- // be given the aspect ratio.
+ // Width is the shorter side, so we use that to figure-out what the max. height
+ // should be given the aspect ratio.
maxActivityHeight = (int) ((maxActivityWidth * maxAspectRatio) + 0.5f);
} else {
- // Height is the shorter side, so we use that to figure-out what the max. width should
- // be given the aspect ratio.
+ // Height is the shorter side, so we use that to figure-out what the max. width
+ // should be given the aspect ratio.
maxActivityWidth = (int) ((maxActivityHeight * maxAspectRatio) + 0.5f);
}
@@ -2341,9 +2350,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
// nothing to do. We test the full configuration instead of the global and merged override
// configurations because there are cases (like moving a task to the pinned stack) where
// the combine configurations are equal, but would otherwise differ in the override config
- mTmpConfig1.setTo(mLastReportedConfiguration);
- mTmpConfig1.updateFrom(mLastReportedOverrideConfiguration);
- if (getConfiguration().equals(mTmpConfig1) && !forceNewConfig && !displayChanged) {
+ mTmpConfig.setTo(mLastReportedConfiguration.getMergedConfiguration());
+ if (getConfiguration().equals(mTmpConfig) && !forceNewConfig && !displayChanged) {
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Configuration & display unchanged in " + this);
return true;
@@ -2354,18 +2362,12 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
// Find changes between last reported merged configuration and the current one. This is used
// to decide whether to relaunch an activity or just report a configuration change.
- final int changes = getConfigurationChanges(mTmpConfig1);
-
- // Preserve configuration used to generate this set of configuration changes.
- mTmpConfig3.setTo(mTmpConfig1);
+ final int changes = getConfigurationChanges(mTmpConfig);
// Update last reported values.
- final Configuration newGlobalConfig = service.getGlobalConfiguration();
final Configuration newMergedOverrideConfig = getMergedOverrideConfiguration();
- mTmpConfig1.setTo(mLastReportedConfiguration);
- mTmpConfig2.setTo(mLastReportedOverrideConfiguration);
- mLastReportedConfiguration.setTo(newGlobalConfig);
- mLastReportedOverrideConfiguration.setTo(newMergedOverrideConfig);
+ mLastReportedConfiguration.setConfiguration(service.getGlobalConfiguration(),
+ newMergedOverrideConfig);
if (changes == 0 && !forceNewConfig) {
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
@@ -2399,10 +2401,9 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
"Checking to restart " + info.name + ": changed=0x"
+ Integer.toHexString(changes) + ", handles=0x"
+ Integer.toHexString(info.getRealConfigChanged())
- + ", newGlobalConfig=" + newGlobalConfig
- + ", newMergedOverrideConfig=" + newMergedOverrideConfig);
+ + ", mLastReportedConfiguration=" + mLastReportedConfiguration);
- if (shouldRelaunchLocked(changes, mTmpConfig3) || forceNewConfig) {
+ if (shouldRelaunchLocked(changes, mTmpConfig) || forceNewConfig) {
// Aha, the activity isn't handling the change, so DIE DIE DIE.
configChangeFlags |= changes;
startFreezingScreenLocked(app, globalChanges);
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 1e8a5878649c..728a3b98e638 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1406,10 +1406,10 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
prev.state = STOPPING;
} else if ((!prev.visible && !hasVisibleBehindActivity())
|| mService.isSleepingOrShuttingDownLocked()) {
+ // Clear out any deferred client hide we might currently have.
+ prev.setDeferHidingClient(false);
// If we were visible then resumeTopActivities will release resources before
- // stopping. Also, set visibility to false to flush any client hide that might have
- // been deferred.
- prev.setVisibility(false);
+ // stopping.
addToStopping(prev, true /* scheduleIdle */, false /* idleDelayed */);
}
} else {
@@ -2030,7 +2030,8 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
// or stopping. This gives it a chance to enter Pip in onPause().
final boolean deferHidingClient = canEnterPictureInPicture
&& r.state != STOPPING && r.state != STOPPED;
- r.setVisible(false, deferHidingClient);
+ r.setDeferHidingClient(deferHidingClient);
+ r.setVisible(false);
switch (r.state) {
case STOPPING:
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index fb8c161ea35d..bff3ce3a3885 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -162,6 +162,7 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.EventLog;
import android.util.IntArray;
+import android.util.MergedConfiguration;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseIntArray;
@@ -1443,17 +1444,16 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
// a Binder interface which would create a new Configuration. Consequently we have to
// always create a new Configuration here.
- final Configuration globalConfiguration =
- new Configuration(mService.getGlobalConfiguration());
- r.setLastReportedGlobalConfiguration(globalConfiguration);
- final Configuration mergedOverrideConfiguration =
- new Configuration(r.getMergedOverrideConfiguration());
- r.setLastReportedMergedOverrideConfiguration(mergedOverrideConfiguration);
+ final MergedConfiguration mergedConfiguration = new MergedConfiguration(
+ mService.getGlobalConfiguration(), r.getMergedOverrideConfiguration());
+ r.setLastReportedConfiguration(mergedConfiguration);
app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken,
System.identityHashCode(r), r.info,
- globalConfiguration,
- mergedOverrideConfiguration, r.compat,
+ // TODO: Have this take the merged configuration instead of separate global and
+ // override configs.
+ mergedConfiguration.getGlobalConfiguration(),
+ mergedConfiguration.getOverrideConfiguration(), r.compat,
r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle,
r.persistentState, results, newIntents, !andResume,
mService.isNextTransitionForward(), profilerInfo);
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 349180fd28a9..d08298bcac05 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -1180,7 +1180,7 @@ public final class BroadcastQueue {
skip = true;
}
if (!skip && r.callerInstantApp
- && (info.activityInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) == 0
+ && (info.activityInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0
&& r.callingUid != info.activityInfo.applicationInfo.uid) {
Slog.w(TAG, "Instant App Denial: receiving "
+ r.intent
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index dc636e53b18c..056fec526502 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -2212,11 +2212,6 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta
/** Returns the bounds that should be used to launch this task. */
Rect getLaunchBounds() {
- // If we're over lockscreen, forget about stack bounds and use fullscreen.
- if (mService.mStackSupervisor.mKeyguardController.isKeyguardShowing()) {
- return null;
- }
-
if (mStack == null) {
return null;
}
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index eea5473484f8..742ee3553896 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -5669,7 +5669,7 @@ public class AudioService extends IAudioService.Stub
//==========================================================================================
public int requestAudioFocus(AudioAttributes aa, int durationHint, IBinder cb,
IAudioFocusDispatcher fd, String clientId, String callingPackageName, int flags,
- IAudioPolicyCallback pcb) {
+ IAudioPolicyCallback pcb, int sdk) {
// permission checks
if ((flags & AudioManager.AUDIOFOCUS_FLAG_LOCK) == AudioManager.AUDIOFOCUS_FLAG_LOCK) {
if (AudioSystem.IN_VOICE_COMM_FOCUS_ID.equals(clientId)) {
@@ -5690,7 +5690,7 @@ public class AudioService extends IAudioService.Stub
}
return mMediaFocusControl.requestAudioFocus(aa, durationHint, cb, fd,
- clientId, callingPackageName, flags);
+ clientId, callingPackageName, flags, sdk);
}
public int abandonAudioFocus(IAudioFocusDispatcher fd, String clientId, AudioAttributes aa,
@@ -6044,8 +6044,8 @@ public class AudioService extends IAudioService.Stub
(AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
updateDefaultStreamOverrideDelay(accessibilityManager.isTouchExplorationEnabled());
updateA11yVolumeAlias(accessibilityManager.isAccessibilityVolumeStreamActive());
- accessibilityManager.addTouchExplorationStateChangeListener(this);
- accessibilityManager.addAccessibilityServicesStateChangeListener(this);
+ accessibilityManager.addTouchExplorationStateChangeListener(this, null);
+ accessibilityManager.addAccessibilityServicesStateChangeListener(this, null);
}
//---------------------------------------------------------------------------------
diff --git a/services/core/java/com/android/server/audio/FocusRequester.java b/services/core/java/com/android/server/audio/FocusRequester.java
index bcaa29593304..3bc603fbd3c1 100644
--- a/services/core/java/com/android/server/audio/FocusRequester.java
+++ b/services/core/java/com/android/server/audio/FocusRequester.java
@@ -48,6 +48,7 @@ public class FocusRequester {
private final String mPackageName;
private final int mCallingUid;
private final MediaFocusControl mFocusController; // never null
+ private final int mSdkTarget;
/**
* the audio focus gain request that caused the addition of this object in the focus stack.
@@ -87,7 +88,7 @@ public class FocusRequester {
*/
FocusRequester(AudioAttributes aa, int focusRequest, int grantFlags,
IAudioFocusDispatcher afl, IBinder source, String id, AudioFocusDeathHandler hdlr,
- String pn, int uid, @NonNull MediaFocusControl ctlr) {
+ String pn, int uid, @NonNull MediaFocusControl ctlr, int sdk) {
mAttributes = aa;
mFocusDispatcher = afl;
mSourceRef = source;
@@ -99,6 +100,7 @@ public class FocusRequester {
mGrantFlags = grantFlags;
mFocusLossReceived = AudioManager.AUDIOFOCUS_NONE;
mFocusController = ctlr;
+ mSdkTarget = sdk;
}
FocusRequester(AudioFocusInfo afi, IAudioFocusDispatcher afl,
@@ -110,6 +112,7 @@ public class FocusRequester {
mFocusGainRequest = afi.getGainRequest();
mFocusLossReceived = AudioManager.AUDIOFOCUS_NONE;
mGrantFlags = afi.getFlags();
+ mSdkTarget = afi.getSdkTarget();
mFocusDispatcher = afl;
mSourceRef = source;
@@ -169,6 +172,9 @@ public class FocusRequester {
return mAttributes;
}
+ int getSdkTarget() {
+ return mSdkTarget;
+ }
private static String focusChangeToString(int focus) {
switch(focus) {
@@ -226,7 +232,8 @@ public class FocusRequester {
+ " -- loss: " + focusLossToString()
+ " -- notified: " + mFocusLossWasNotified
+ " -- uid: " + mCallingUid
- + " -- attr: " + mAttributes);
+ + " -- attr: " + mAttributes
+ + " -- sdk:" + mSdkTarget);
}
@@ -419,6 +426,6 @@ public class FocusRequester {
AudioFocusInfo toAudioFocusInfo() {
return new AudioFocusInfo(mAttributes, mCallingUid, mClientId, mPackageName,
- mFocusGainRequest, mFocusLossReceived, mGrantFlags);
+ mFocusGainRequest, mFocusLossReceived, mGrantFlags, mSdkTarget);
}
}
diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java
index 821e78a27e33..f5c13c1edf13 100644
--- a/services/core/java/com/android/server/audio/MediaFocusControl.java
+++ b/services/core/java/com/android/server/audio/MediaFocusControl.java
@@ -27,6 +27,7 @@ import android.media.IAudioFocusDispatcher;
import android.media.audiopolicy.AudioPolicy;
import android.media.audiopolicy.IAudioPolicyCallback;
import android.os.Binder;
+import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
@@ -56,6 +57,17 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
*/
static final boolean ENFORCE_DUCKING = true;
/**
+ * set to true to the framework enforces ducking itself only with apps above a given SDK
+ * target level. Is ignored if ENFORCE_DUCKING is false.
+ */
+ static final boolean ENFORCE_DUCKING_FOR_NEW = true;
+ /**
+ * the SDK level (included) up to which the framework doesn't enforce ducking itself. Is ignored
+ * if ENFORCE_DUCKING_FOR_NEW is false;
+ */
+ // automatic ducking was introduced for Android O
+ static final int DUCKING_IN_APP_SDK_LEVEL = Build.VERSION_CODES.N_MR1;
+ /**
* set to true so the framework enforces muting media/game itself when the device is ringing
* or in a call.
*/
@@ -629,7 +641,8 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
/** @see AudioManager#requestAudioFocus(AudioManager.OnAudioFocusChangeListener, int, int, int) */
protected int requestAudioFocus(AudioAttributes aa, int focusChangeHint, IBinder cb,
- IAudioFocusDispatcher fd, String clientId, String callingPackageName, int flags) {
+ IAudioFocusDispatcher fd, String clientId, String callingPackageName, int flags,
+ int sdk) {
Log.i(TAG, " AudioFocus requestAudioFocus() from uid/pid " + Binder.getCallingUid()
+ "/" + Binder.getCallingPid()
+ " clientId=" + clientId
@@ -656,7 +669,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
// construct AudioFocusInfo as it will be communicated to audio focus policy
afiForExtPolicy = new AudioFocusInfo(aa, Binder.getCallingUid(),
clientId, callingPackageName, focusChangeHint, 0 /*lossReceived*/,
- flags);
+ flags, sdk);
} else {
afiForExtPolicy = null;
}
@@ -722,7 +735,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
removeFocusStackEntry(clientId, false /* signal */, false /*notifyFocusFollowers*/);
final FocusRequester nfr = new FocusRequester(aa, focusChangeHint, flags, fd, cb,
- clientId, afdh, callingPackageName, Binder.getCallingUid(), this);
+ clientId, afdh, callingPackageName, Binder.getCallingUid(), this, sdk);
if (focusGrantDelayed) {
// focusGrantDelayed being true implies we can't reassign focus right now
// which implies the focus stack is not empty.
@@ -767,7 +780,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
if (mFocusPolicy != null) {
final AudioFocusInfo afi = new AudioFocusInfo(aa, Binder.getCallingUid(),
clientId, callingPackageName, 0 /*gainRequest*/, 0 /*lossReceived*/,
- 0 /*flags*/);
+ 0 /*flags*/, 0 /* sdk n/a here*/);
if (notifyExtFocusPolicyFocusAbandon_syncAf(afi)) {
return AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
}
diff --git a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java
index aea4cb563d1b..d35104f3a2ab 100644
--- a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java
+++ b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java
@@ -57,7 +57,7 @@ public final class PlaybackActivityMonitor
.setCurve(new float[] { 0.f, 1.f } /* times */,
new float[] { 1.f, 0.2f } /* volumes */)
.setOptionFlags(VolumeShaper.Configuration.OPTION_FLAG_CLOCK_TIME)
- .setDurationMillis(MediaFocusControl.getFocusRampTimeMs(
+ .setDuration(MediaFocusControl.getFocusRampTimeMs(
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build()))
@@ -308,10 +308,17 @@ public final class PlaybackActivityMonitor
{
if (mDuckedPlayers.contains(new Integer(piid))) {
if (DEBUG) { Log.v(TAG, "player " + piid + " already ducked"); }
+ } else if (MediaFocusControl.ENFORCE_DUCKING
+ && MediaFocusControl.ENFORCE_DUCKING_FOR_NEW
+ && loser.getSdkTarget() <= MediaFocusControl.DUCKING_IN_APP_SDK_LEVEL) {
+ // legacy behavior, apps used to be notified when they should be ducking
+ if (DEBUG) { Log.v(TAG, "not ducking player " + piid + ": old SDK"); }
+ return false;
} else if (apc.getAudioAttributes().getContentType() ==
AudioAttributes.CONTENT_TYPE_SPEECH) {
// the player is speaking, ducking will make the speech unintelligible
// so let the app handle it instead
+ if (DEBUG) { Log.v(TAG, "not ducking player " + piid + ": SPEECH"); }
return false;
} else if (apc.getPlayerType()
== AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL) {
diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java
index 7fdb08a56f79..4d507d64ad8a 100644
--- a/services/core/java/com/android/server/job/controllers/JobStatus.java
+++ b/services/core/java/com/android/server/job/controllers/JobStatus.java
@@ -107,6 +107,9 @@ public final class JobStatus {
private GrantedUriPermissions uriPerms;
private boolean prepared;
+ static final boolean DEBUG_PREPARE = true;
+ private Throwable unpreparedPoint = null;
+
/**
* Earliest point in the future at which this job will be eligible to run. A value of 0
* indicates there is no delay constraint. See {@link #hasTimingDelayConstraint()}.
@@ -410,6 +413,9 @@ public final class JobStatus {
return;
}
prepared = true;
+ if (DEBUG_PREPARE) {
+ unpreparedPoint = null;
+ }
final ClipData clip = job.getClipData();
if (clip != null) {
uriPerms = GrantedUriPermissions.createFromClip(am, clip, sourceUid, sourcePackageName,
@@ -420,9 +426,15 @@ public final class JobStatus {
public void unprepareLocked(IActivityManager am) {
if (!prepared) {
Slog.wtf(TAG, "Hasn't been prepared: " + this);
+ if (DEBUG_PREPARE && unpreparedPoint != null) {
+ Slog.e(TAG, "Was already unprepared at ", unpreparedPoint);
+ }
return;
}
prepared = false;
+ if (DEBUG_PREPARE) {
+ unpreparedPoint = new Throwable().fillInStackTrace();
+ }
if (uriPerms != null) {
uriPerms.revoke(am);
uriPerms = null;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 02b93a232bb1..1e7d07626782 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -3659,10 +3659,7 @@ public class NotificationManagerService extends SystemService {
}
hasValidVibrate = vibration != null;
- // We can alert, and we're allowed to alert, but if the developer asked us to only do
- // it once, and we already have, then don't.
- if (!(record.isUpdate
- && (notification.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0)) {
+ if (!shouldMuteNotificationLocked(record)) {
sendAccessibilityEvent(notification, record.sbn.getPackageName());
if (hasValidSound) {
@@ -3716,6 +3713,24 @@ public class NotificationManagerService extends SystemService {
}
}
+ boolean shouldMuteNotificationLocked(final NotificationRecord record) {
+ final Notification notification = record.getNotification();
+ if(record.isUpdate
+ && (notification.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0) {
+ return true;
+ }
+ if (record.sbn.isGroup()) {
+ if (notification.isGroupSummary()
+ && notification.getGroupAlertBehavior() == Notification.GROUP_ALERT_CHILDREN) {
+ return true;
+ } else if (notification.isGroupChild()
+ && notification.getGroupAlertBehavior() == Notification.GROUP_ALERT_SUMMARY) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private boolean playSound(final NotificationRecord record, Uri soundUri) {
boolean looping = (record.getNotification().flags & Notification.FLAG_INSISTENT) != 0;
// do not play notifications if there is a user of exclusive audio focus
diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java
index 32de3166faae..6d18c8393dd4 100644
--- a/services/core/java/com/android/server/notification/RankingHelper.java
+++ b/services/core/java/com/android/server/notification/RankingHelper.java
@@ -33,7 +33,6 @@ import android.content.pm.ParceledListSlice;
import android.metrics.LogMaker;
import android.os.Build;
import android.os.UserHandle;
-import android.provider.Settings;
import android.service.notification.NotificationListenerService.Ranking;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -508,6 +507,14 @@ public class RankingHelper implements RankingConfig {
updateConfig();
}
+ int getPackagePriority(String pkg, int uid) {
+ return getOrCreateRecord(pkg, uid).priority;
+ }
+
+ int getPackageVisibility(String pkg, int uid) {
+ return getOrCreateRecord(pkg, uid).visibility;
+ }
+
@Override
public void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group,
boolean fromTargetApp) {
@@ -608,6 +615,16 @@ public class RankingHelper implements RankingConfig {
}
r.channels.put(updatedChannel.getId(), updatedChannel);
+ if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(updatedChannel.getId())) {
+ // copy settings to app level so they are inherited by new channels
+ // when the app migrates
+ r.importance = updatedChannel.getImportance();
+ r.priority = updatedChannel.canBypassDnd()
+ ? Notification.PRIORITY_MAX : Notification.PRIORITY_DEFAULT;
+ r.visibility = updatedChannel.getLockscreenVisibility();
+ r.showBadge = updatedChannel.canShowBadge();
+ }
+
MetricsLogger.action(getChannelLog(updatedChannel, pkg));
updateConfig();
}
diff --git a/services/core/java/com/android/server/os/SchedulingPolicyService.java b/services/core/java/com/android/server/os/SchedulingPolicyService.java
index a8bb80905cd2..46be232e61c3 100644
--- a/services/core/java/com/android/server/os/SchedulingPolicyService.java
+++ b/services/core/java/com/android/server/os/SchedulingPolicyService.java
@@ -20,6 +20,7 @@ import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.ISchedulingPolicyService;
import android.os.Process;
+import android.util.Log;
/**
* The implementation of the scheduling policy service interface.
@@ -50,16 +51,24 @@ public class SchedulingPolicyService extends ISchedulingPolicyService.Stub {
// since if not the case then the getThreadGroupLeader() test will also fail.
if (!isPermitted() || prio < PRIORITY_MIN ||
prio > PRIORITY_MAX || Process.getThreadGroupLeader(tid) != pid) {
- return PackageManager.PERMISSION_DENIED;
+ return PackageManager.PERMISSION_DENIED;
+ }
+ if (Binder.getCallingUid() != Process.BLUETOOTH_UID) {
+ try {
+ // make good use of our CAP_SYS_NICE capability
+ Process.setThreadGroup(tid, !isForApp ?
+ Process.THREAD_GROUP_AUDIO_SYS : Process.THREAD_GROUP_AUDIO_APP);
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Failed setThreadGroup: " + e);
+ return PackageManager.PERMISSION_DENIED;
+ }
}
try {
- // make good use of our CAP_SYS_NICE capability
- Process.setThreadGroup(tid, !isForApp ?
- Process.THREAD_GROUP_AUDIO_SYS : Process.THREAD_GROUP_AUDIO_APP);
// must be in this order or it fails the schedulability constraint
Process.setThreadScheduler(tid, Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK,
- prio);
+ prio);
} catch (RuntimeException e) {
+ Log.e(TAG, "Failed setThreadScheduler: " + e);
return PackageManager.PERMISSION_DENIED;
}
return PackageManager.PERMISSION_GRANTED;
@@ -74,6 +83,7 @@ public class SchedulingPolicyService extends ISchedulingPolicyService.Stub {
switch (Binder.getCallingUid()) {
case Process.AUDIOSERVER_UID: // fastcapture, fastmixer
case Process.CAMERASERVER_UID: // camera high frame rate recording
+ case Process.BLUETOOTH_UID: // Bluetooth audio playback
return true;
default:
return false;
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 8413491aaef8..254bc2ac0e8b 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -28,6 +28,7 @@ import android.os.UserHandle;
import android.os.WorkSource;
import android.util.Log;
import android.util.Slog;
+import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.IndentingPrintWriter;
@@ -141,7 +142,7 @@ public class PackageDexOptimizer {
final String[] instructionSets = targetInstructionSets != null ?
targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo);
final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
- final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly();
+ final List<String> paths = pkg.getAllCodePaths();
final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
final String compilerFilter = getRealCompilerFilter(pkg.applicationInfo,
@@ -149,18 +150,32 @@ public class PackageDexOptimizer {
final boolean profileUpdated = checkForProfileUpdates &&
isProfileUpdated(pkg, sharedGid, compilerFilter);
- String sharedLibrariesPath = getSharedLibrariesPath(sharedLibraries);
+ final String sharedLibrariesPath = getSharedLibrariesPath(sharedLibraries);
// Get the dexopt flags after getRealCompilerFilter to make sure we get the correct flags.
final int dexoptFlags = getDexFlags(pkg, compilerFilter);
+ // Get the dependencies of each split in the package. For each code path in the package,
+ // this array contains the relative paths of each split it depends on, separated by colons.
+ String[] splitDependencies = getSplitDependencies(pkg);
int result = DEX_OPT_SKIPPED;
- // TODO: Iterate based on dependency hierarchy (currently alphabetically by name)
- // (b/37480811).
- String basePathCheck = null;
- for (String path : paths) {
+ for (int i = 0; i < paths.size(); i++) {
+ // Skip paths that have no code.
+ if ((i == 0 && (pkg.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) == 0) ||
+ (i != 0 && (pkg.splitFlags[i - 1] & ApplicationInfo.FLAG_HAS_CODE) == 0)) {
+ continue;
+ }
+ // Append shared libraries with split dependencies for this split.
+ String path = paths.get(i);
+ String sharedLibrariesPathWithSplits;
+ if (sharedLibrariesPath != null && splitDependencies[i] != null) {
+ sharedLibrariesPathWithSplits = sharedLibrariesPath + ":" + splitDependencies[i];
+ } else {
+ sharedLibrariesPathWithSplits =
+ splitDependencies[i] != null ? splitDependencies[i] : sharedLibrariesPath;
+ }
for (String dexCodeIsa : dexCodeInstructionSets) {
int newResult = dexOptPath(pkg, path, dexCodeIsa, compilerFilter, profileUpdated,
- sharedLibrariesPath, dexoptFlags, sharedGid, packageStats);
+ sharedLibrariesPathWithSplits, dexoptFlags, sharedGid, packageStats);
// The end result is:
// - FAILED if any path failed,
// - PERFORMED if at least one path needed compilation,
@@ -168,22 +183,6 @@ public class PackageDexOptimizer {
if ((result != DEX_OPT_FAILED) && (newResult != DEX_OPT_SKIPPED)) {
result = newResult;
}
- // Add the relative path of code we just compiled to the shared libraries.
- int slashIndex = path.lastIndexOf('/') + 1;
- String relativePath = path.substring(slashIndex);
- if (sharedLibrariesPath == null) {
- sharedLibrariesPath = relativePath;
- } else {
- sharedLibrariesPath += ":" + relativePath;
- }
- // Sanity check that the base paths are all the same.
- String basePath = path.substring(0, slashIndex);
- if (basePathCheck == null) {
- basePathCheck = basePath;
- } else if (!basePath.equals(basePathCheck)) {
- Slog.wtf(TAG, "Split paths have different base paths: " + basePath + " and " +
- basePathCheck);
- }
}
}
return result;
@@ -437,6 +436,69 @@ public class PackageDexOptimizer {
}
/**
+ * Walks dependency tree and gathers the dependencies for each split in a split apk.
+ * The split paths are stored as relative paths, separated by colons.
+ */
+ private String[] getSplitDependencies(PackageParser.Package pkg) {
+ // Convert all the code paths to relative paths.
+ String baseCodePath = new File(pkg.baseCodePath).getParent();
+ List<String> paths = pkg.getAllCodePaths();
+ String[] splitDependencies = new String[paths.size()];
+ for (int i = 0; i < paths.size(); i++) {
+ File pathFile = new File(paths.get(i));
+ String fileName = pathFile.getName();
+ paths.set(i, fileName);
+
+ // Sanity check that the base paths of the splits are all the same.
+ String basePath = pathFile.getParent();
+ if (!basePath.equals(baseCodePath)) {
+ Slog.wtf(TAG, "Split paths have different base paths: " + basePath + " and " +
+ baseCodePath);
+ }
+ }
+
+ // If there are no other dependencies, fill in the implicit dependency on the base apk.
+ SparseArray<int[]> dependencies = pkg.applicationInfo.splitDependencies;
+ if (dependencies == null) {
+ for (int i = 1; i < paths.size(); i++) {
+ splitDependencies[i] = paths.get(0);
+ }
+ return splitDependencies;
+ }
+
+ // Fill in the dependencies, skipping the base apk which has no dependencies.
+ for (int i = 1; i < dependencies.size(); i++) {
+ getParentDependencies(dependencies.keyAt(i), paths, dependencies, splitDependencies);
+ }
+
+ return splitDependencies;
+ }
+
+ /**
+ * Recursive method to generate dependencies for a particular split.
+ * The index is a key from the package's splitDependencies.
+ */
+ private String getParentDependencies(int index, List<String> paths,
+ SparseArray<int[]> dependencies, String[] splitDependencies) {
+ // The base apk is always first, and has no dependencies.
+ if (index == 0) {
+ return null;
+ }
+ // Return the result if we've computed the dependencies for this index already.
+ if (splitDependencies[index] != null) {
+ return splitDependencies[index];
+ }
+ // Get the dependencies for the parent of this index and append its path to it.
+ int parent = dependencies.get(index)[0];
+ String parentDependencies =
+ getParentDependencies(parent, paths, dependencies, splitDependencies);
+ String path = parentDependencies == null ? paths.get(parent) :
+ parentDependencies + ":" + paths.get(parent);
+ splitDependencies[index] = path;
+ return path;
+ }
+
+ /**
* Checks if there is an update on the profile information of the {@code pkg}.
* If the compiler filter is not profile guided the method returns false.
*
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index d0a28f947d80..7bbb1feeb09c 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4074,14 +4074,26 @@ public class PackageManagerService extends IPackageManager.Stub
* action and a {@code android.intent.category.BROWSABLE} category</li>
* </ul>
*/
+ int updateFlagsForResolve(int flags, int userId, Intent intent, int callingUid) {
+ return updateFlagsForResolve(flags, userId, intent, callingUid,
+ false /*includeInstantApps*/, false /*onlyExposedExplicitly*/);
+ }
int updateFlagsForResolve(int flags, int userId, Intent intent, int callingUid,
boolean includeInstantApps) {
+ return updateFlagsForResolve(flags, userId, intent, callingUid,
+ includeInstantApps, false /*onlyExposedExplicitly*/);
+ }
+ int updateFlagsForResolve(int flags, int userId, Intent intent, int callingUid,
+ boolean includeInstantApps, boolean onlyExposedExplicitly) {
// Safe mode means we shouldn't match any third-party components
if (mSafeMode) {
flags |= PackageManager.MATCH_SYSTEM_ONLY;
}
if (getInstantAppPackageName(callingUid) != null) {
// But, ephemeral apps see both ephemeral and exposed, non-ephemeral components
+ if (onlyExposedExplicitly) {
+ flags |= PackageManager.MATCH_EXPLICITLY_VISIBLE_ONLY;
+ }
flags |= PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY;
flags |= PackageManager.MATCH_INSTANT;
} else {
@@ -4098,7 +4110,8 @@ public class PackageManagerService extends IPackageManager.Stub
|| isSpecialProcess
|| mContext.checkCallingOrSelfPermission(
android.Manifest.permission.ACCESS_INSTANT_APPS) == PERMISSION_GRANTED;
- flags &= ~PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY;
+ flags &= ~(PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY
+ | PackageManager.MATCH_EXPLICITLY_VISIBLE_ONLY);
if (!allowMatchInstant) {
flags &= ~PackageManager.MATCH_INSTANT;
}
@@ -5659,19 +5672,19 @@ public class PackageManagerService extends IPackageManager.Stub
}
private ResolveInfo resolveIntentInternal(Intent intent, String resolvedType,
- int flags, int userId, boolean includeInstantApps) {
+ int flags, int userId, boolean resolveForStart) {
try {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveIntent");
if (!sUserManager.exists(userId)) return null;
final int callingUid = Binder.getCallingUid();
- flags = updateFlagsForResolve(flags, userId, intent, callingUid, includeInstantApps);
+ flags = updateFlagsForResolve(flags, userId, intent, callingUid, resolveForStart);
enforceCrossUserPermission(callingUid, userId,
false /*requireFullPermission*/, false /*checkShell*/, "resolve intent");
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "queryIntentActivities");
final List<ResolveInfo> query = queryIntentActivitiesInternal(intent, resolvedType,
- flags, userId, includeInstantApps);
+ flags, userId, resolveForStart);
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
final ResolveInfo bestChoice =
@@ -6208,14 +6221,14 @@ public class PackageManagerService extends IPackageManager.Stub
}
private @NonNull List<ResolveInfo> queryIntentActivitiesInternal(Intent intent,
- String resolvedType, int flags, int userId, boolean includeInstantApps) {
+ String resolvedType, int flags, int userId, boolean resolveForStart) {
if (!sUserManager.exists(userId)) return Collections.emptyList();
final int callingUid = Binder.getCallingUid();
final String instantAppPkgName = getInstantAppPackageName(callingUid);
- flags = updateFlagsForResolve(flags, userId, intent, callingUid, includeInstantApps);
enforceCrossUserPermission(callingUid, userId,
false /* requireFullPermission */, false /* checkShell */,
"query intent activities");
+ final String pkgName = intent.getPackage();
ComponentName comp = intent.getComponent();
if (comp == null) {
if (intent.getSelector() != null) {
@@ -6224,6 +6237,8 @@ public class PackageManagerService extends IPackageManager.Stub
}
}
+ flags = updateFlagsForResolve(flags, userId, intent, callingUid, resolveForStart,
+ comp != null || pkgName != null /*onlyExposedExplicitly*/);
if (comp != null) {
final List<ResolveInfo> list = new ArrayList<ResolveInfo>(1);
final ActivityInfo ai = getActivityInfo(comp, flags, userId);
@@ -6236,6 +6251,8 @@ public class PackageManagerService extends IPackageManager.Stub
(flags & PackageManager.MATCH_INSTANT) != 0;
final boolean matchVisibleToInstantAppOnly =
(flags & PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY) != 0;
+ final boolean matchExplicitlyVisibleOnly =
+ (flags & PackageManager.MATCH_EXPLICITLY_VISIBLE_ONLY) != 0;
final boolean isCallerInstantApp =
instantAppPkgName != null;
final boolean isTargetSameInstantApp =
@@ -6243,8 +6260,14 @@ public class PackageManagerService extends IPackageManager.Stub
final boolean isTargetInstantApp =
(ai.applicationInfo.privateFlags
& ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0;
+ final boolean isTargetVisibleToInstantApp =
+ (ai.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
+ final boolean isTargetExplicitlyVisibleToInstantApp =
+ isTargetVisibleToInstantApp
+ && (ai.flags & ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP) == 0;
final boolean isTargetHiddenFromInstantApp =
- (ai.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) == 0;
+ !isTargetVisibleToInstantApp
+ || (matchExplicitlyVisibleOnly && !isTargetExplicitlyVisibleToInstantApp);
final boolean blockResolution =
!isTargetSameInstantApp
&& ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp)
@@ -6263,7 +6286,6 @@ public class PackageManagerService extends IPackageManager.Stub
boolean sortResult = false;
boolean addEphemeral = false;
List<ResolveInfo> result;
- final String pkgName = intent.getPackage();
final boolean ephemeralDisabled = isEphemeralDisabled();
synchronized (mPackages) {
if (pkgName == null) {
@@ -6529,7 +6551,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
// allow activities that have been explicitly exposed to ephemeral apps
if (!isEphemeralApp
- && ((info.activityInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0)) {
+ && ((info.activityInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0)) {
continue;
}
resolveInfos.remove(i);
@@ -7069,16 +7091,16 @@ public class PackageManagerService extends IPackageManager.Stub
@Override
public ResolveInfo resolveService(Intent intent, String resolvedType, int flags, int userId) {
final int callingUid = Binder.getCallingUid();
- return resolveServiceInternal(
- intent, resolvedType, flags, userId, callingUid, false /*includeInstantApps*/);
+ return resolveServiceInternal(intent, resolvedType, flags, userId, callingUid);
}
private ResolveInfo resolveServiceInternal(Intent intent, String resolvedType, int flags,
- int userId, int callingUid, boolean includeInstantApps) {
+ int userId, int callingUid) {
if (!sUserManager.exists(userId)) return null;
- flags = updateFlagsForResolve(flags, userId, intent, callingUid, includeInstantApps);
+ flags = updateFlagsForResolve(
+ flags, userId, intent, callingUid, false /*includeInstantApps*/);
List<ResolveInfo> query = queryIntentServicesInternal(
- intent, resolvedType, flags, userId, callingUid, includeInstantApps);
+ intent, resolvedType, flags, userId, callingUid, false /*includeInstantApps*/);
if (query != null) {
if (query.size() >= 1) {
// If there is more than one service with the same priority,
@@ -7130,7 +7152,7 @@ public class PackageManagerService extends IPackageManager.Stub
(si.applicationInfo.privateFlags
& ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0;
final boolean isTargetHiddenFromInstantApp =
- (si.flags & ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL) == 0;
+ (si.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0;
final boolean blockResolution =
!isTargetSameInstantApp
&& ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp)
@@ -7202,7 +7224,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
// allow services that have been explicitly exposed to ephemeral apps
if (!isEphemeralApp
- && ((info.serviceInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0)) {
+ && ((info.serviceInfo.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0)) {
continue;
}
resolveInfos.remove(i);
@@ -7251,7 +7273,7 @@ public class PackageManagerService extends IPackageManager.Stub
(pi.applicationInfo.privateFlags
& ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0;
final boolean isTargetHiddenFromInstantApp =
- (pi.flags & ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL) == 0;
+ (pi.flags & ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0;
final boolean blockResolution =
!isTargetSameInstantApp
&& ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp)
@@ -7323,7 +7345,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
// allow providers that have been explicitly exposed to instant applications
if (!isEphemeralApp
- && ((info.providerInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0)) {
+ && ((info.providerInfo.flags & ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0)) {
continue;
}
resolveInfos.remove(i);
@@ -7683,7 +7705,8 @@ public class PackageManagerService extends IPackageManager.Stub
}
// instant application; filter out non-exposed provider
if (instantAppPkgName != null
- && (provider.info.flags & ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL) == 0) {
+ && !isInstantApp
+ && (provider.info.flags & ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0) {
return null;
}
// provider not enabled
@@ -12429,16 +12452,21 @@ public class PackageManagerService extends IPackageManager.Stub
if (ai == null) {
return null;
}
+ final boolean matchExplicitlyVisibleOnly =
+ (mFlags & PackageManager.MATCH_EXPLICITLY_VISIBLE_ONLY) != 0;
final boolean matchVisibleToInstantApp =
(mFlags & PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY) != 0;
- final boolean isInstantApp = (mFlags & PackageManager.MATCH_INSTANT) != 0;
+ final boolean componentVisible =
+ matchVisibleToInstantApp
+ && info.isVisibleToInstantApp()
+ && (!matchExplicitlyVisibleOnly || info.isExplicitlyVisibleToInstantApp());
+ final boolean matchInstantApp = (mFlags & PackageManager.MATCH_INSTANT) != 0;
// throw out filters that aren't visible to ephemeral apps
- if (matchVisibleToInstantApp
- && !(info.isVisibleToInstantApp() || userState.instantApp)) {
+ if (matchVisibleToInstantApp && !(componentVisible || userState.instantApp)) {
return null;
}
- // throw out ephemeral filters if we're not explicitly requesting them
- if (!isInstantApp && userState.instantApp) {
+ // throw out instant app filters if we're not explicitly requesting them
+ if (!matchInstantApp && userState.instantApp) {
return null;
}
// throw out instant app filters if updates are available; will trigger
@@ -14117,9 +14145,6 @@ public class PackageManagerService extends IPackageManager.Stub
synchronized (mPackages) {
boolean result = mSettings.setDefaultBrowserPackageNameLPw(packageName, userId);
if (packageName != null) {
- result |= updateIntentVerificationStatus(packageName,
- PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS,
- userId);
mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowserLPr(
packageName, userId);
}
@@ -18588,6 +18613,7 @@ public class PackageManagerService extends IPackageManager.Stub
destroyAppDataLIF(pkg, userId,
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
destroyAppProfilesLIF(pkg, userId);
+ clearDefaultBrowserIfNeededForUser(ps.name, userId);
removeKeystoreDataIfNeeded(nextUserId, ps.appId);
schedulePackageCleaning(ps.name, nextUserId, false);
synchronized (mPackages) {
@@ -19309,12 +19335,18 @@ public class PackageManagerService extends IPackageManager.Stub
}
}
+ /** Clears state for all users, and touches intent filter verification policy */
void clearDefaultBrowserIfNeeded(String packageName) {
for (int oneUserId : sUserManager.getUserIds()) {
- String defaultBrowserPackageName = getDefaultBrowserPackageName(oneUserId);
- if (TextUtils.isEmpty(defaultBrowserPackageName)) continue;
+ clearDefaultBrowserIfNeededForUser(packageName, oneUserId);
+ }
+ }
+
+ private void clearDefaultBrowserIfNeededForUser(String packageName, int userId) {
+ final String defaultBrowserPackageName = getDefaultBrowserPackageName(userId);
+ if (!TextUtils.isEmpty(defaultBrowserPackageName)) {
if (packageName.equals(defaultBrowserPackageName)) {
- setDefaultBrowserPackageName(null, oneUserId);
+ setDefaultBrowserPackageName(null, userId);
}
}
}
@@ -23516,14 +23548,13 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
public ResolveInfo resolveIntent(Intent intent, String resolvedType,
int flags, int userId) {
return resolveIntentInternal(
- intent, resolvedType, flags, userId, true /*includeInstantApps*/);
+ intent, resolvedType, flags, userId, true /*resolveForStart*/);
}
@Override
public ResolveInfo resolveService(Intent intent, String resolvedType,
int flags, int userId, int callingUid) {
- return resolveServiceInternal(
- intent, resolvedType, flags, userId, callingUid, true /*includeInstantApps*/);
+ return resolveServiceInternal(intent, resolvedType, flags, userId, callingUid);
}
@Override
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 554deaeb45c7..cea031eec9f5 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -1386,7 +1386,11 @@ final class Settings {
if (userId == UserHandle.USER_ALL) {
return false;
}
- mDefaultBrowserApp.put(userId, packageName);
+ if (packageName != null) {
+ mDefaultBrowserApp.put(userId, packageName);
+ } else {
+ mDefaultBrowserApp.remove(userId);
+ }
writePackageRestrictionsLPr(userId);
return true;
}
diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
index 364bf2893ab9..ebb945023caf 100644
--- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
+++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
@@ -193,6 +193,7 @@ public class ImmersiveModeConfirmation {
0
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
+ | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
,
PixelFormat.TRANSLUCENT);
lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index e2f313a37dbf..d85552a4d140 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -666,8 +666,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
}
}
- if ((!winAnimator.isAnimationStarting() && !winAnimator.isWaitingForOpening()) ||
- winAnimator.isDummyAnimation()) {
+ final TaskStack stack = w.getStack();
+ if ((!winAnimator.isAnimationStarting() && !winAnimator.isWaitingForOpening())
+ || (stack != null && stack.isAnimatingBounds())) {
// Updates the shown frame before we set up the surface. This is needed
// because the resizing could change the top-left position (in addition to
// size) of the window. setSurfaceBoundariesLocked uses mShownPosition to
@@ -675,7 +676,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
//
// If an animation is being started, we can't call this method because the
// animation hasn't processed its initial transformation yet, but in general
- // we do want to update the position if the window is animating.
+ // we do want to update the position if the window is animating. We make an exception
+ // for the bounds animating state, where an application may have been waiting
+ // for an exit animation to start, but instead enters PiP. We need to ensure
+ // we always recompute the top-left in this case.
winAnimator.computeShownFrameLocked();
}
winAnimator.setSurfaceBoundariesLocked(mTmpRecoveringMemory /* recoveringMemory */);
@@ -1950,7 +1954,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
for (int i = mTaskStackContainers.size() - 1; i >= 0; --i) {
final TaskStack stack = mTaskStackContainers.get(i);
final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
- if (stack.isVisible() && (imeOnBottom || isDockedOnBottom)) {
+ if (stack.isVisible() && (imeOnBottom || isDockedOnBottom) &&
+ StackId.isStackAffectedByDragResizing(stack.mStackId)) {
stack.setAdjustedForIme(imeWin, imeOnBottom && imeHeightChanged);
} else {
stack.resetAdjustedForIme(false);
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index a1b1cd07d45a..60b136f30c5e 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -674,7 +674,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> {
if (win.getDisplayContent().mWallpaperController.isWallpaperTarget(win)) {
wallpaperDestroyed = true;
}
- win.destroyOrSaveSurface();
+ win.destroyOrSaveSurfaceUnchecked();
} while (i > 0);
mService.mDestroySurface.clear();
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index bc749e16fe6b..0a999e65d3a2 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -382,9 +382,7 @@ class Task extends WindowContainer<AppWindowToken> implements DimLayer.DimLayerU
* the adjusted bounds's top.
*/
void alignToAdjustedBounds(Rect adjustedBounds, Rect tempInsetBounds, boolean alignBottom) {
- // Task override config might be empty, while display or stack override config isn't, so
- // we have to check merged override config here.
- if (!isResizeable() || Configuration.EMPTY.equals(getMergedOverrideConfiguration())) {
+ if (!isResizeable() || Configuration.EMPTY.equals(getOverrideConfiguration())) {
return;
}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 1feb743b66dc..da7a9f0ec58f 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -733,10 +733,17 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye
outTempTaskBounds.setEmpty();
// When the home stack is resizable, should always have the same stack and task bounds
- if (mStackId == HOME_STACK_ID && findHomeTask().isResizeable()) {
- // Calculate the home stack bounds when in docked mode
- getDisplayContent().mDividerControllerLocked
- .getHomeStackBoundsInDockedMode(outStackBounds);
+ if (mStackId == HOME_STACK_ID) {
+ if (findHomeTask().isResizeable()) {
+ // Calculate the home stack bounds when in docked mode and the home stack is
+ // resizeable.
+ getDisplayContent().mDividerControllerLocked
+ .getHomeStackBoundsInDockedMode(outStackBounds);
+ } else {
+ // Home stack isn't resizeable, so don't specify stack bounds.
+ outStackBounds.setEmpty();
+ }
+
outTempTaskBounds.set(outStackBounds);
return;
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 9d6e0334a5be..05ec479cea93 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2141,7 +2141,12 @@ public class WindowManagerService extends IWindowManager.Stub
if (mInputMethodWindow == win) {
setInputMethodWindowLocked(null);
}
- win.destroyOrSaveSurface();
+ boolean stopped = win.mAppToken != null ? win.mAppToken.mAppStopped : false;
+ // We set mDestroying=true so AppWindowToken#notifyAppStopped in-to destroy surfaces
+ // will later actually destroy the surface if we do not do so here. Normally we leave
+ // this to the exit animation.
+ win.mDestroying = true;
+ win.destroySurface(false, stopped);
}
// TODO(multidisplay): Magnification is supported only for the default display.
if (mAccessibilityController != null && win.getDisplayId() == DEFAULT_DISPLAY) {
@@ -4313,7 +4318,10 @@ public class WindowManagerService extends IWindowManager.Stub
if (mWaitingForConfig) {
mWaitingForConfig = false;
mLastFinishedFreezeSource = "config-unchanged";
- mRoot.getDisplayContent(displayId).setLayoutNeeded();
+ final DisplayContent dc = mRoot.getDisplayContent(displayId);
+ if (dc != null) {
+ dc.setLayoutNeeded();
+ }
mWindowPlacerLocked.performSurfacePlacement();
}
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 9bdcc3603564..67516c104b4d 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -2710,7 +2710,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
+ " win.mWindowRemovalAllowed=" + mWindowRemovalAllowed
+ " win.mRemoveOnExit=" + mRemoveOnExit);
if (!cleanupOnResume || mRemoveOnExit) {
- destroyOrSaveSurface();
+ destroyOrSaveSurfaceUnchecked();
}
if (mRemoveOnExit) {
removeImmediately();
@@ -2725,7 +2725,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return destroyedSomething;
}
- void destroyOrSaveSurface() {
+ // Destroy or save the application surface without checking
+ // various indicators of whether the client has released the surface.
+ // This is in general unsafe, and most callers should use {@link #destroySurface}
+ void destroyOrSaveSurfaceUnchecked() {
mSurfaceSaved = shouldSaveSurface();
if (mSurfaceSaved) {
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index b945cf15fe1c..2236b597ac5e 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -341,7 +341,7 @@ class WindowStateAnimator {
mAnimation.cancel();
mAnimation = null;
mLocalAnimating = false;
- mWin.destroyOrSaveSurface();
+ mWin.destroyOrSaveSurfaceUnchecked();
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceAdminServiceController.java b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceAdminServiceController.java
index 97fa9d552142..c7b8f029e4fc 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceAdminServiceController.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceAdminServiceController.java
@@ -15,6 +15,7 @@
*/
package com.android.server.devicepolicy;
+import android.Manifest.permission;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.admin.DevicePolicyManager;
@@ -115,10 +116,12 @@ public class DeviceAdminServiceController {
return null;
}
final ServiceInfo si = list.get(0).serviceInfo;
- if (si.exported) {
- Log.e(TAG, "DeviceAdminService must not be exported: '"
+
+ if (!permission.BIND_DEVICE_ADMIN.equals(si.permission)) {
+ Log.e(TAG, "DeviceAdminService "
+ si.getComponentName().flattenToShortString()
- + "' will be ignored.");
+ + " must be protected with " + permission.BIND_DEVICE_ADMIN
+ + ".");
return null;
}
return si;
diff --git a/services/net/java/android/net/apf/ApfCapabilities.java b/services/net/java/android/net/apf/ApfCapabilities.java
index b0e0230dfdba..703b41560290 100644
--- a/services/net/java/android/net/apf/ApfCapabilities.java
+++ b/services/net/java/android/net/apf/ApfCapabilities.java
@@ -46,7 +46,7 @@ public class ApfCapabilities {
}
public String toString() {
- return String.format("%s{version: %d, maxSize: %d format: %d}", getClass().getSimpleName(),
+ return String.format("%s{version: %d, maxSize: %d, format: %d}", getClass().getSimpleName(),
apfVersionSupported, maximumApfProgramSize, apfPacketFormat);
}
}
diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java
index 61a929404131..ede2b3ae01ec 100644
--- a/services/net/java/android/net/ip/IpManager.java
+++ b/services/net/java/android/net/ip/IpManager.java
@@ -524,7 +524,7 @@ public class IpManager extends StateMachine {
try {
mNwService.registerObserver(mNetlinkTracker);
} catch (RemoteException e) {
- Log.e(mTag, "Couldn't register NetlinkTracker: " + e.toString());
+ logError("Couldn't register NetlinkTracker: %s", e);
}
mMultinetworkPolicyTracker.start();
@@ -611,19 +611,36 @@ public class IpManager extends StateMachine {
return;
}
+ // Thread-unsafe access to mApfFilter but just used for debugging.
+ final ApfFilter apfFilter = mApfFilter;
+ final ProvisioningConfiguration provisioningConfig = mConfiguration;
+ final ApfCapabilities apfCapabilities = (provisioningConfig != null)
+ ? provisioningConfig.mApfCapabilities : null;
+
IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
pw.println(mTag + " APF dump:");
pw.increaseIndent();
- // Thread-unsafe access to mApfFilter but just used for debugging.
- ApfFilter apfFilter = mApfFilter;
if (apfFilter != null) {
apfFilter.dump(pw);
} else {
- pw.println("No apf support");
+ pw.print("No active ApfFilter; ");
+ if (provisioningConfig == null) {
+ pw.println("IpManager not yet started.");
+ } else if (apfCapabilities == null || apfCapabilities.apfVersionSupported == 0) {
+ pw.println("Hardware does not support APF.");
+ } else {
+ pw.println("ApfFilter not yet started, APF capabilities: " + apfCapabilities);
+ }
}
pw.decreaseIndent();
pw.println();
+ pw.println(mTag + " current ProvisioningConfiguration:");
+ pw.increaseIndent();
+ pw.println(Objects.toString(provisioningConfig, "N/A"));
+ pw.decreaseIndent();
+
+ pw.println();
pw.println(mTag + " StateMachine dump:");
pw.increaseIndent();
mLocalLog.readOnlyLocalLog().dump(fd, pw, args);
@@ -684,7 +701,9 @@ public class IpManager extends StateMachine {
// TODO: Migrate all Log.e(...) to logError(...).
private void logError(String fmt, Object... args) {
- mLocalLog.log("ERROR " + String.format(fmt, args));
+ final String msg = "ERROR " + String.format(fmt, args);
+ Log.e(mTag, msg);
+ mLocalLog.log(msg);
}
private void getNetworkInterface() {
@@ -692,7 +711,7 @@ public class IpManager extends StateMachine {
mNetworkInterface = NetworkInterface.getByName(mInterfaceName);
} catch (SocketException | NullPointerException e) {
// TODO: throw new IllegalStateException.
- Log.e(mTag, "ALERT: Failed to get interface object: ", e);
+ logError("Failed to get interface object: %s", e);
}
}
@@ -948,7 +967,7 @@ public class IpManager extends StateMachine {
ifcg.setLinkAddress(new LinkAddress("0.0.0.0/0"));
mNwService.setInterfaceConfig(mInterfaceName, ifcg);
} catch (IllegalStateException | RemoteException e) {
- Log.e(mTag, "ALERT: Failed to clear IPv4 address on interface " + mInterfaceName, e);
+ logError("Failed to clear IPv4 address on interface %s: %s", mInterfaceName, e);
}
}
@@ -1074,13 +1093,13 @@ public class IpManager extends StateMachine {
try {
mNwService.disableIpv6(mInterfaceName);
} catch (Exception e) {
- Log.e(mTag, "Failed to disable IPv6" + e);
+ logError("Failed to disable IPv6: %s", e);
}
try {
mNwService.clearInterfaceAddresses(mInterfaceName);
} catch (Exception e) {
- Log.e(mTag, "Failed to clear addresses " + e);
+ logError("Failed to clear addresses: %s", e);
}
}
@@ -1404,7 +1423,7 @@ public class IpManager extends StateMachine {
if (setIPv4Address(ipAddress)) {
mDhcpClient.sendMessage(DhcpClient.EVENT_LINKADDRESS_CONFIGURED);
} else {
- Log.e(mTag, "Failed to set IPv4 address!");
+ logError("Failed to set IPv4 address.");
dispatchCallback(ProvisioningChange.LOST_PROVISIONING,
new LinkProperties(mLinkProperties));
transitionTo(mStoppingState);
diff --git a/services/net/java/android/net/util/ConnectivityPacketSummary.java b/services/net/java/android/net/util/ConnectivityPacketSummary.java
index 5b068c0b2468..dae93afb6599 100644
--- a/services/net/java/android/net/util/ConnectivityPacketSummary.java
+++ b/services/net/java/android/net/util/ConnectivityPacketSummary.java
@@ -368,9 +368,9 @@ public class ConnectivityPacketSummary {
byte[] bytes = new byte[ETHER_ADDR_LEN];
mac.get(bytes, 0, bytes.length);
- Byte[] printableBytes = new Byte[bytes.length];
+ Object[] printableBytes = new Object[bytes.length];
int i = 0;
- for (byte b : bytes) printableBytes[i++] = b;
+ for (byte b : bytes) printableBytes[i++] = new Byte(b);
final String MAC48_FORMAT = "%02x:%02x:%02x:%02x:%02x:%02x";
return String.format(MAC48_FORMAT, printableBytes);
diff --git a/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java
index 1106006352aa..d4904f5aecf7 100644
--- a/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java
+++ b/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java
@@ -15,6 +15,9 @@
*/
package com.android.server.notification;
+import static android.app.Notification.GROUP_ALERT_ALL;
+import static android.app.Notification.GROUP_ALERT_CHILDREN;
+import static android.app.Notification.GROUP_ALERT_SUMMARY;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static junit.framework.Assert.assertFalse;
@@ -188,17 +191,24 @@ public class BuzzBeepBlinkTest {
private NotificationRecord getCustomLightsNotification() {
return getNotificationRecord(mId, false /* insistent */, true /* once */,
false /* noisy */, true /* buzzy*/, true /* lights */,
- true /* defaultVibration */, true /* defaultSound */, false /* defaultLights */);
+ true /* defaultVibration */, true /* defaultSound */, false /* defaultLights */,
+ null, Notification.GROUP_ALERT_ALL);
}
private NotificationRecord getNotificationRecord(int id, boolean insistent, boolean once,
boolean noisy, boolean buzzy, boolean lights) {
- return getNotificationRecord(id, insistent, once, noisy, buzzy, lights, true, true, true);
+ return getNotificationRecord(id, insistent, once, noisy, buzzy, lights, true, true, true,
+ null, Notification.GROUP_ALERT_ALL);
+ }
+
+ private NotificationRecord getBeepyNotificationRecord(String groupKey, int groupAlertBehavior) {
+ return getNotificationRecord(mId, false, false, true, false, false, true, true, true,
+ groupKey, groupAlertBehavior);
}
private NotificationRecord getNotificationRecord(int id, boolean insistent, boolean once,
boolean noisy, boolean buzzy, boolean lights, boolean defaultVibration,
- boolean defaultSound, boolean defaultLights) {
+ boolean defaultSound, boolean defaultLights, String groupKey, int groupAlertBehavior) {
NotificationChannel channel =
new NotificationChannel("test", "test", IMPORTANCE_HIGH);
final Builder builder = new Builder(getContext())
@@ -239,6 +249,9 @@ public class BuzzBeepBlinkTest {
}
builder.setDefaults(defaults);
+ builder.setGroup(groupKey);
+ builder.setGroupAlertBehavior(groupAlertBehavior);
+
Notification n = builder.build();
if (insistent) {
n.flags |= Notification.FLAG_INSISTENT;
@@ -546,7 +559,7 @@ public class BuzzBeepBlinkTest {
}
@Test
- public void testInsistenteVibrate() throws Exception {
+ public void testInsistentVibrate() throws Exception {
NotificationRecord r = getInsistentBuzzyNotification();
mService.buzzBeepBlinkLocked(r);
@@ -568,6 +581,71 @@ public class BuzzBeepBlinkTest {
}
@Test
+ public void testGroupAlertSummarySilenceChild() throws Exception {
+ NotificationRecord child = getBeepyNotificationRecord("a", GROUP_ALERT_SUMMARY);
+
+ mService.buzzBeepBlinkLocked(child);
+
+ verifyNeverBeep();
+ }
+
+ @Test
+ public void testGroupAlertSummaryNoSilenceSummary() throws Exception {
+ NotificationRecord summary = getBeepyNotificationRecord("a", GROUP_ALERT_SUMMARY);
+ summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY;
+
+ mService.buzzBeepBlinkLocked(summary);
+
+ verifyBeepLooped();
+ }
+
+ @Test
+ public void testGroupAlertSummaryNoSilenceNonGroupChild() throws Exception {
+ NotificationRecord nonGroup = getBeepyNotificationRecord(null, GROUP_ALERT_SUMMARY);
+
+ mService.buzzBeepBlinkLocked(nonGroup);
+
+ verifyBeepLooped();
+ }
+
+ @Test
+ public void testGroupAlertChildSilenceSummary() throws Exception {
+ NotificationRecord summary = getBeepyNotificationRecord("a", GROUP_ALERT_CHILDREN);
+ summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY;
+
+ mService.buzzBeepBlinkLocked(summary);
+
+ verifyNeverBeep();
+ }
+
+ @Test
+ public void testGroupAlertChildNoSilenceChild() throws Exception {
+ NotificationRecord child = getBeepyNotificationRecord("a", GROUP_ALERT_CHILDREN);
+
+ mService.buzzBeepBlinkLocked(child);
+
+ verifyBeepLooped();
+ }
+
+ @Test
+ public void testGroupAlertChildNoSilenceNonGroupSummary() throws Exception {
+ NotificationRecord nonGroup = getBeepyNotificationRecord(null, GROUP_ALERT_CHILDREN);
+
+ mService.buzzBeepBlinkLocked(nonGroup);
+
+ verifyBeepLooped();
+ }
+
+ @Test
+ public void testGroupAlertAllNoSilenceGroup() throws Exception {
+ NotificationRecord group = getBeepyNotificationRecord("a", GROUP_ALERT_ALL);
+
+ mService.buzzBeepBlinkLocked(group);
+
+ verifyBeepLooped();
+ }
+
+ @Test
public void testHonorAlertOnlyOnceForBuzz() throws Exception {
NotificationRecord r = getBuzzyNotification();
NotificationRecord s = getBuzzyOnceNotification();
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
index 92534a1480ac..d057eb5f1646 100644
--- a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -53,9 +53,10 @@ import android.os.Process;
import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
-import android.support.test.annotation.UiThreadTest;
import android.support.test.InstrumentationRegistry;
+import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import android.testing.TestableLooper.RunWithLooper;
import java.util.ArrayList;
import java.util.Arrays;
@@ -63,6 +64,7 @@ import java.util.List;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
@@ -70,6 +72,8 @@ import org.mockito.MockitoAnnotations;
import com.android.server.lights.Light;
import com.android.server.lights.LightsManager;
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
public class NotificationManagerServiceTest {
private static final long WAIT_FOR_IDLE_TIMEOUT = 2;
private static final String TEST_CHANNEL_ID = "NotificationManagerServiceTestChannelId";
@@ -109,7 +113,6 @@ public class NotificationManagerServiceTest {
}
@Before
- @UiThreadTest
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mNotificationManagerService = new TestableNotificationManagerService(mContext);
@@ -124,7 +127,7 @@ public class NotificationManagerServiceTest {
final LightsManager mockLightsManager = mock(LightsManager.class);
when(mockLightsManager.getLight(anyInt())).thenReturn(mock(Light.class));
// Use this testable looper.
- mTestableLooper = new TestableLooper(false);
+ mTestableLooper = TestableLooper.get(this);
mListener = mNotificationListeners.new ManagedServiceInfo(
null, new ComponentName(PKG, "test_class"), uid, true, null, 0);
@@ -165,7 +168,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateNotificationChannels_SingleChannel() throws Exception {
final NotificationChannel channel =
new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
@@ -177,7 +179,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateNotificationChannels_NullChannelThrowsException() throws Exception {
try {
mBinderService.createNotificationChannels("test_pkg",
@@ -189,7 +190,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateNotificationChannels_TwoChannels() throws Exception {
final NotificationChannel channel1 =
new NotificationChannel("id1", "name", NotificationManager.IMPORTANCE_DEFAULT);
@@ -202,7 +202,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateNotificationChannels_SecondCreateDoesNotChangeImportance()
throws Exception {
final NotificationChannel channel =
@@ -221,7 +220,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateNotificationChannels_IdenticalChannelsInListIgnoresSecond()
throws Exception {
final NotificationChannel channel1 =
@@ -236,7 +234,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testBlockedNotifications_suspended() throws Exception {
NotificationUsageStats usageStats = mock(NotificationUsageStats.class);
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(true);
@@ -249,7 +246,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testBlockedNotifications_blockedChannel() throws Exception {
NotificationUsageStats usageStats = mock(NotificationUsageStats.class);
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
@@ -263,7 +259,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testBlockedNotifications_blockedApp() throws Exception {
NotificationUsageStats usageStats = mock(NotificationUsageStats.class);
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
@@ -277,7 +272,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testEnqueueNotificationWithTag_PopulatesGetActiveNotifications() throws Exception {
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag", 0,
generateNotificationRecord(null).getNotification(), 0);
@@ -288,7 +282,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelNotificationImmediatelyAfterEnqueue() throws Exception {
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag", 0,
generateNotificationRecord(null).getNotification(), 0);
@@ -300,7 +293,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelNotificationWhilePostedAndEnqueued() throws Exception {
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag", 0,
generateNotificationRecord(null).getNotification(), 0);
@@ -315,7 +307,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelNotificationsFromListenerImmediatelyAfterEnqueue() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
@@ -328,7 +319,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelAllNotificationsImmediatelyAfterEnqueue() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
@@ -341,7 +331,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelAllNotifications_IgnoreForegroundService() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
@@ -355,7 +344,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelAllNotifications_IgnoreOtherPackages() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
@@ -369,7 +357,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelAllNotifications_NullPkgRemovesAll() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
@@ -382,7 +369,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCancelAllNotifications_NullPkgIgnoresUserAllNotifications() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
@@ -396,7 +382,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testRemoveForegroundServiceFlag_ImmediatelyAfterEnqueue() throws Exception {
final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
@@ -411,7 +396,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testTvExtenderChannelOverride_onTv() throws Exception {
mNotificationManagerService.setIsTelevision(true);
mNotificationManagerService.setRankingHelper(mRankingHelper);
@@ -427,7 +411,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testTvExtenderChannelOverride_notOnTv() throws Exception {
mNotificationManagerService.setIsTelevision(false);
mNotificationManagerService.setRankingHelper(mRankingHelper);
@@ -443,7 +426,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateChannelNotifyListener() throws Exception {
List<String> associations = new ArrayList<>();
associations.add("a");
@@ -469,7 +451,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testCreateChannelGroupNotifyListener() throws Exception {
List<String> associations = new ArrayList<>();
associations.add("a");
@@ -490,7 +471,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testUpdateChannelNotifyListener() throws Exception {
List<String> associations = new ArrayList<>();
associations.add("a");
@@ -509,7 +489,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testDeleteChannelNotifyListener() throws Exception {
List<String> associations = new ArrayList<>();
associations.add("a");
@@ -526,7 +505,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testDeleteChannelGroupNotifyListener() throws Exception {
List<String> associations = new ArrayList<>();
associations.add("a");
@@ -543,7 +521,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testUpdateNotificationChannelFromPrivilegedListener_success() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -561,7 +538,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testUpdateNotificationChannelFromPrivilegedListener_noAccess() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -583,7 +559,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testUpdateNotificationChannelFromPrivilegedListener_badUser() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -609,7 +584,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testGetNotificationChannelFromPrivilegedListener_success() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -624,7 +598,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testGetNotificationChannelFromPrivilegedListener_noAccess() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -643,7 +616,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testGetNotificationChannelFromPrivilegedListener_badUser() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -666,7 +638,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testGetNotificationChannelGroupsFromPrivilegedListener_success() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -680,7 +651,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testGetNotificationChannelGroupsFromPrivilegedListener_noAccess() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -698,7 +668,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testGetNotificationChannelGroupsFromPrivilegedListener_badUser() throws Exception {
mNotificationManagerService.setRankingHelper(mRankingHelper);
List<String> associations = new ArrayList<>();
@@ -719,7 +688,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testHasCompanionDevice_failure() throws Exception {
when(mCompanionMgr.getAssociations(anyString(), anyInt())).thenThrow(
new IllegalArgumentException());
@@ -727,7 +695,6 @@ public class NotificationManagerServiceTest {
}
@Test
- @UiThreadTest
public void testHasCompanionDevice_noService() throws Exception {
mNotificationManagerService = new TestableNotificationManagerService(mContext);
diff --git a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
index bc5c29d514a5..ce899e31d7b6 100644
--- a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
@@ -19,6 +19,7 @@ import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE;
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.fail;
@@ -48,6 +49,7 @@ import android.media.AudioAttributes;
import android.net.Uri;
import android.os.Build;
import android.os.UserHandle;
+import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
@@ -550,6 +552,56 @@ public class RankingHelperTest {
}
@Test
+ public void testUpdate_preUpgrade_updatesAppFields() throws Exception {
+ mHelper.setImportance(PKG, UID, IMPORTANCE_UNSPECIFIED);
+ assertTrue(mHelper.canShowBadge(PKG, UID));
+ assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID));
+ assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE,
+ mHelper.getPackageVisibility(PKG, UID));
+
+ NotificationChannel defaultChannel = mHelper.getNotificationChannel(
+ PKG, UID, NotificationChannel.DEFAULT_CHANNEL_ID, false);
+
+ defaultChannel.setShowBadge(false);
+ defaultChannel.setImportance(IMPORTANCE_NONE);
+ defaultChannel.setBypassDnd(true);
+ defaultChannel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
+
+ mHelper.updateNotificationChannel(PKG, UID, defaultChannel);
+
+ // ensure app level fields are changed
+ assertFalse(mHelper.canShowBadge(PKG, UID));
+ assertEquals(Notification.PRIORITY_MAX, mHelper.getPackagePriority(PKG, UID));
+ assertEquals(Notification.VISIBILITY_SECRET, mHelper.getPackageVisibility(PKG, UID));
+ assertEquals(IMPORTANCE_NONE, mHelper.getImportance(PKG, UID));
+ }
+
+ @Test
+ public void testUpdate_postUpgrade_noUpdateAppFields() throws Exception {
+ final NotificationChannel channel = new NotificationChannel("id2", "name2", IMPORTANCE_LOW);
+
+ mHelper.createNotificationChannel(PKG, UID, channel, false);
+ assertTrue(mHelper.canShowBadge(PKG, UID));
+ assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID));
+ assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE,
+ mHelper.getPackageVisibility(PKG, UID));
+
+ channel.setShowBadge(false);
+ channel.setImportance(IMPORTANCE_NONE);
+ channel.setBypassDnd(true);
+ channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
+
+ mHelper.updateNotificationChannel(PKG, UID, channel);
+
+ // ensure app level fields are not changed
+ assertTrue(mHelper.canShowBadge(PKG, UID));
+ assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID));
+ assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE,
+ mHelper.getPackageVisibility(PKG, UID));
+ assertEquals(NotificationManager.IMPORTANCE_UNSPECIFIED, mHelper.getImportance(PKG, UID));
+ }
+
+ @Test
public void testGetNotificationChannel_ReturnsNullForUnknownChannel() throws Exception {
assertEquals(null, mHelper.getNotificationChannel(PKG, UID, "garbage", false));
}
diff --git a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
index 985e5eaee256..c78488f9d8d9 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
@@ -16,25 +16,18 @@
package com.android.server;
-import static android.net.NetworkRecommendationProvider.EXTRA_RECOMMENDATION_RESULT;
-import static android.net.NetworkRecommendationProvider.EXTRA_SEQUENCE;
import static android.net.NetworkScoreManager.CACHE_FILTER_NONE;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -55,8 +48,6 @@ import android.net.INetworkScoreCache;
import android.net.NetworkKey;
import android.net.NetworkScoreManager;
import android.net.NetworkScorerAppData;
-import android.net.RecommendationRequest;
-import android.net.RecommendationResult;
import android.net.ScoredNetwork;
import android.net.Uri;
import android.net.WifiKey;
@@ -69,13 +60,11 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
-import android.os.IRemoteCallback;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.UserHandle;
-import android.provider.Settings;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
@@ -145,9 +134,6 @@ public class NetworkScoreServiceTest {
private ContentResolver mContentResolver;
private NetworkScoreService mNetworkScoreService;
- private RecommendationRequest mRecommendationRequest;
- private RemoteCallback mRemoteCallback;
- private OnResultListener mOnResultListener;
private HandlerThread mHandlerThread;
private List<ScanResult> mScanResults;
@@ -177,13 +163,6 @@ public class NetworkScoreServiceTest {
WifiConfiguration configuration = new WifiConfiguration();
configuration.SSID = "NetworkScoreServiceTest_SSID";
configuration.BSSID = "NetworkScoreServiceTest_BSSID";
- mRecommendationRequest = new RecommendationRequest.Builder()
- .setDefaultWifiConfig(configuration).build();
- mOnResultListener = new OnResultListener();
- mRemoteCallback = new RemoteCallback(mOnResultListener);
- Settings.Global.putLong(mContentResolver,
- Settings.Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS, -1L);
- mNetworkScoreService.refreshRecommendationRequestTimeoutMs();
populateScanResults();
}
@@ -215,7 +194,6 @@ public class NetworkScoreServiceTest {
verify(mNetworkScorerAppManager).updateState();
verify(mNetworkScorerAppManager).migrateNetworkScorerAppSettingIfNeeded();
verify(mServiceConnection).bind(mContext);
-
}
@Test
@@ -256,160 +234,6 @@ public class NetworkScoreServiceTest {
}
@Test
- public void testRequestRecommendation_noPermission() throws Exception {
- doThrow(new SecurityException()).when(mContext)
- .enforceCallingOrSelfPermission(eq(permission.REQUEST_NETWORK_SCORES),
- anyString());
- try {
- mNetworkScoreService.requestRecommendation(mRecommendationRequest);
- fail("REQUEST_NETWORK_SCORES not enforced.");
- } catch (SecurityException e) {
- // expected
- }
- }
-
- @Test
- public void testRequestRecommendation_mainThread() throws Exception {
- when(mContext.getMainLooper()).thenReturn(Looper.myLooper());
- try {
- mNetworkScoreService.requestRecommendation(mRecommendationRequest);
- fail("requestRecommendation run on main thread.");
- } catch (RuntimeException e) {
- // expected
- }
- }
-
- @Test
- public void testRequestRecommendation_providerNotConnected() throws Exception {
- when(mContext.getMainLooper()).thenReturn(Looper.getMainLooper());
-
- final RecommendationResult result =
- mNetworkScoreService.requestRecommendation(mRecommendationRequest);
- assertNotNull(result);
- assertEquals(mRecommendationRequest.getDefaultWifiConfig(),
- result.getWifiConfiguration());
- }
-
- @Test
- public void testRequestRecommendation_providerThrowsRemoteException() throws Exception {
- when(mContext.getMainLooper()).thenReturn(Looper.getMainLooper());
- doThrow(new RemoteException()).when(mRecommendationProvider)
- .requestRecommendation(eq(mRecommendationRequest), isA(IRemoteCallback.class),
- anyInt());
- mNetworkScoreService.onUserUnlocked(0);
-
- final RecommendationResult result =
- mNetworkScoreService.requestRecommendation(mRecommendationRequest);
- assertNotNull(result);
- assertEquals(mRecommendationRequest.getDefaultWifiConfig(),
- result.getWifiConfiguration());
- }
-
- @Test
- public void testRequestRecommendation_resultReturned() throws Exception {
- when(mContext.getMainLooper()).thenReturn(Looper.getMainLooper());
- final WifiConfiguration wifiConfiguration = new WifiConfiguration();
- wifiConfiguration.SSID = "testRequestRecommendation_resultReturned_SSID";
- wifiConfiguration.BSSID = "testRequestRecommendation_resultReturned_BSSID";
- final RecommendationResult providerResult = RecommendationResult
- .createConnectRecommendation(wifiConfiguration);
- final Bundle bundle = new Bundle();
- bundle.putParcelable(EXTRA_RECOMMENDATION_RESULT, providerResult);
- doAnswer(invocation -> {
- bundle.putInt(EXTRA_SEQUENCE, invocation.getArgument(2));
- invocation.<IRemoteCallback>getArgument(1).sendResult(bundle);
- return null;
- }).when(mRecommendationProvider)
- .requestRecommendation(eq(mRecommendationRequest), isA(IRemoteCallback.class),
- anyInt());
- mNetworkScoreService.onUserUnlocked(0);
-
- final RecommendationResult result =
- mNetworkScoreService.requestRecommendation(mRecommendationRequest);
- assertNotNull(result);
- assertEquals(providerResult.getWifiConfiguration().SSID,
- result.getWifiConfiguration().SSID);
- assertEquals(providerResult.getWifiConfiguration().BSSID,
- result.getWifiConfiguration().BSSID);
- }
-
- @Test
- public void testRequestRecommendationAsync_noPermission() throws Exception {
- doThrow(new SecurityException()).when(mContext)
- .enforceCallingOrSelfPermission(eq(permission.REQUEST_NETWORK_SCORES),
- anyString());
- try {
- mNetworkScoreService.requestRecommendationAsync(mRecommendationRequest,
- mRemoteCallback);
- fail("REQUEST_NETWORK_SCORES not enforced.");
- } catch (SecurityException e) {
- // expected
- }
- }
-
- @Test
- public void testRequestRecommendationAsync_providerNotConnected() throws Exception {
- mNetworkScoreService.requestRecommendationAsync(mRecommendationRequest,
- mRemoteCallback);
- boolean callbackRan = mOnResultListener.countDownLatch.await(3, TimeUnit.SECONDS);
- assertTrue(callbackRan);
- verifyZeroInteractions(mRecommendationProvider);
- }
-
- @Test
- public void testRequestRecommendationAsync_requestTimesOut() throws Exception {
- mNetworkScoreService.onUserUnlocked(0);
- Settings.Global.putLong(mContentResolver,
- Settings.Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS, 1L);
- mNetworkScoreService.refreshRecommendationRequestTimeoutMs();
- mNetworkScoreService.requestRecommendationAsync(mRecommendationRequest,
- mRemoteCallback);
- boolean callbackRan = mOnResultListener.countDownLatch.await(3, TimeUnit.SECONDS);
- assertTrue(callbackRan);
- verify(mRecommendationProvider).requestRecommendation(eq(mRecommendationRequest),
- isA(IRemoteCallback.Stub.class), anyInt());
-
- assertTrue(mOnResultListener.receivedBundle.containsKey(EXTRA_RECOMMENDATION_RESULT));
- RecommendationResult result =
- mOnResultListener.receivedBundle.getParcelable(EXTRA_RECOMMENDATION_RESULT);
- assertTrue(result.hasRecommendation());
- assertEquals(mRecommendationRequest.getDefaultWifiConfig().SSID,
- result.getWifiConfiguration().SSID);
- }
-
- @Test
- public void testRequestRecommendationAsync_requestSucceeds() throws Exception {
- mNetworkScoreService.onUserUnlocked(0);
- final Bundle bundle = new Bundle();
- doAnswer(invocation -> {
- invocation.<IRemoteCallback>getArgument(1).sendResult(bundle);
- return null;
- }).when(mRecommendationProvider)
- .requestRecommendation(eq(mRecommendationRequest), isA(IRemoteCallback.class),
- anyInt());
-
- mNetworkScoreService.requestRecommendationAsync(mRecommendationRequest,
- mRemoteCallback);
- boolean callbackRan = mOnResultListener.countDownLatch.await(3, TimeUnit.SECONDS);
- assertTrue(callbackRan);
- // If it's not the same instance then something else ran the callback.
- assertSame(bundle, mOnResultListener.receivedBundle);
- }
-
- @Test
- public void testRequestRecommendationAsync_requestThrowsRemoteException() throws Exception {
- mNetworkScoreService.onUserUnlocked(0);
- doThrow(new RemoteException()).when(mRecommendationProvider)
- .requestRecommendation(eq(mRecommendationRequest), isA(IRemoteCallback.class),
- anyInt());
-
- mNetworkScoreService.requestRecommendationAsync(mRecommendationRequest,
- mRemoteCallback);
- boolean callbackRan = mOnResultListener.countDownLatch.await(3, TimeUnit.SECONDS);
- assertTrue(callbackRan);
- }
-
- @Test
public void dispatchingContentObserver_nullUri() throws Exception {
NetworkScoreService.DispatchingContentObserver observer =
new NetworkScoreService.DispatchingContentObserver(mContext, null /*handler*/);
@@ -435,15 +259,6 @@ public class NetworkScoreServiceTest {
}
@Test
- public void oneTimeCallback_multipleCallbacks() throws Exception {
- NetworkScoreService.OneTimeCallback callback =
- new NetworkScoreService.OneTimeCallback(mRemoteCallback);
- callback.sendResult(null);
- callback.sendResult(null);
- assertEquals(1, mOnResultListener.resultCount);
- }
-
- @Test
public void testUpdateScores_notActiveScorer() {
bindToScorer(false /*callerIsScorer*/);
@@ -1088,19 +903,6 @@ public class NetworkScoreServiceTest {
mNetworkScoreService.onUserUnlocked(0);
}
- private static class OnResultListener implements RemoteCallback.OnResultListener {
- private final CountDownLatch countDownLatch = new CountDownLatch(1);
- private int resultCount;
- private Bundle receivedBundle;
-
- @Override
- public void onResult(Bundle result) {
- countDownLatch.countDown();
- resultCount++;
- receivedBundle = result;
- }
- }
-
private static class CountDownHandler extends Handler {
CountDownLatch latch = new CountDownLatch(1);
int receivedWhat;
diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
index 20839c5f7a18..36e9b3f8a9e4 100644
--- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
@@ -22,6 +22,7 @@ import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.nullable;
import static org.mockito.Mockito.times;
@@ -80,6 +81,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
@@ -2443,7 +2445,6 @@ public class AccountManagerServiceTest extends AndroidTestCase {
@SmallTest
public void testGetAccountsByFeaturesError() throws Exception {
unlockSystemUser();
-
mAms.addAccountExplicitly(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "p11", null);
mAms.addAccountExplicitly(AccountManagerServiceTestFixtures.ACCOUNT_ERROR, "p12", null);
@@ -2511,28 +2512,37 @@ public class AccountManagerServiceTest extends AndroidTestCase {
updateBroadcastCounters(2);
assertEquals(mVisibleAccountsChangedBroadcasts, 0); // broadcast was not sent
assertEquals(mLoginAccountsChangedBroadcasts, 2);
- assertEquals(mAccountRemovedBroadcasts, 0);
}
@SmallTest
public void testRegisterAccountListenerWithAddingTwoAccounts() throws Exception {
unlockSystemUser();
+
+ HashMap<String, Integer> visibility = new HashMap<>();
+ visibility.put(AccountManagerServiceTestFixtures.CALLER_PACKAGE,
+ AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+
mAms.registerAccountListener(
new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
- "testpackage"); // opPackageName
- mAms.addAccountExplicitly(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "p11", null);
+ AccountManagerServiceTestFixtures.CALLER_PACKAGE);
+ mAms.addAccountExplicitlyWithVisibility(
+ AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "p11", null, visibility);
mAms.unregisterAccountListener(
new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
- "testpackage"); // opPackageName
- mAms.addAccountExplicitly(
- AccountManagerServiceTestFixtures.ACCOUNT_INTERVENE, "p11", null);
+ AccountManagerServiceTestFixtures.CALLER_PACKAGE);
+
+ addAccountRemovedReceiver(AccountManagerServiceTestFixtures.CALLER_PACKAGE);
+ mAms.addAccountExplicitlyWithVisibility(
+ AccountManagerServiceTestFixtures.ACCOUNT_INTERVENE, "p11", null, visibility);
updateBroadcastCounters(3);
assertEquals(mVisibleAccountsChangedBroadcasts, 1);
assertEquals(mLoginAccountsChangedBroadcasts, 2);
+ assertEquals(mAccountRemovedBroadcasts, 0);
mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS);
- mAms.registerAccountListener( null /* accountTypes */, "testpackage");
+ mAms.registerAccountListener( null /* accountTypes */,
+ AccountManagerServiceTestFixtures.CALLER_PACKAGE);
mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_INTERVENE);
updateBroadcastCounters(8);
@@ -2544,6 +2554,13 @@ public class AccountManagerServiceTest extends AndroidTestCase {
@SmallTest
public void testRegisterAccountListenerForThreePackages() throws Exception {
unlockSystemUser();
+
+ addAccountRemovedReceiver("testpackage1");
+ HashMap<String, Integer> visibility = new HashMap<>();
+ visibility.put("testpackage1", AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+ visibility.put("testpackage2", AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+ visibility.put("testpackage3", AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+
mAms.registerAccountListener(
new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
"testpackage1"); // opPackageName
@@ -2553,7 +2570,8 @@ public class AccountManagerServiceTest extends AndroidTestCase {
mAms.registerAccountListener(
new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
"testpackage3"); // opPackageName
- mAms.addAccountExplicitly(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "p11", null);
+ mAms.addAccountExplicitlyWithVisibility(
+ AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "p11", null, visibility);
updateBroadcastCounters(4);
assertEquals(mVisibleAccountsChangedBroadcasts, 3);
assertEquals(mLoginAccountsChangedBroadcasts, 1);
@@ -2572,13 +2590,47 @@ public class AccountManagerServiceTest extends AndroidTestCase {
mAms.addAccountExplicitly(
AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS_TYPE_2, "p11", null);
- updateBroadcastCounters(9);
+ updateBroadcastCounters(8);
assertEquals(mVisibleAccountsChangedBroadcasts, 5);
assertEquals(mLoginAccountsChangedBroadcasts, 3);
assertEquals(mAccountRemovedBroadcasts, 1);
}
@SmallTest
+ public void testRegisterAccountListenerForAddingAccountWithVisibility() throws Exception {
+ unlockSystemUser();
+
+ HashMap<String, Integer> visibility = new HashMap<>();
+ visibility.put("testpackage1", AccountManager.VISIBILITY_NOT_VISIBLE);
+ visibility.put("testpackage2", AccountManager.VISIBILITY_USER_MANAGED_NOT_VISIBLE);
+ visibility.put("testpackage3", AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+
+ addAccountRemovedReceiver("testpackage1");
+ mAms.registerAccountListener(
+ new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
+ "testpackage1"); // opPackageName
+ mAms.registerAccountListener(
+ new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
+ "testpackage2"); // opPackageName
+ mAms.registerAccountListener(
+ new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1},
+ "testpackage3"); // opPackageName
+ mAms.addAccountExplicitlyWithVisibility(
+ AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "p11", null, visibility);
+
+ updateBroadcastCounters(2);
+ assertEquals(mVisibleAccountsChangedBroadcasts, 1);
+ assertEquals(mLoginAccountsChangedBroadcasts, 1);
+
+ mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS);
+
+ updateBroadcastCounters(4);
+ assertEquals(mVisibleAccountsChangedBroadcasts, 2);
+ assertEquals(mLoginAccountsChangedBroadcasts, 2);
+ assertEquals(mAccountRemovedBroadcasts, 0); // account was never visible.
+ }
+
+ @SmallTest
public void testRegisterAccountListenerCredentialsUpdate() throws Exception {
unlockSystemUser();
mAms.registerAccountListener(
@@ -2609,21 +2661,31 @@ public class AccountManagerServiceTest extends AndroidTestCase {
mLoginAccountsChangedBroadcasts = 0;
mAccountRemovedBroadcasts = 0;
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockContext, times(expectedBroadcasts)).sendBroadcastAsUser(captor.capture(),
+ verify(mMockContext, atLeast(expectedBroadcasts)).sendBroadcastAsUser(captor.capture(),
any(UserHandle.class));
for (Intent intent : captor.getAllValues()) {
if (AccountManager.ACTION_VISIBLE_ACCOUNTS_CHANGED.equals(intent.getAction())) {
mVisibleAccountsChangedBroadcasts++;
- }
- if (AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION.equals(intent.getAction())) {
+ } else if (AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION.equals(intent.getAction())) {
mLoginAccountsChangedBroadcasts++;
- }
- if (AccountManager.ACTION_ACCOUNT_REMOVED.equals(intent.getAction())) {
+ } else if (AccountManager.ACTION_ACCOUNT_REMOVED.equals(intent.getAction())) {
mAccountRemovedBroadcasts++;
}
}
}
+ private void addAccountRemovedReceiver(String packageName) {
+ ResolveInfo resolveInfo = new ResolveInfo();
+ resolveInfo.activityInfo = new ActivityInfo();
+ resolveInfo.activityInfo.applicationInfo = new ApplicationInfo();
+ resolveInfo.activityInfo.applicationInfo.packageName = packageName;
+
+ List<ResolveInfo> accountRemovedReceivers = new ArrayList<>();
+ accountRemovedReceivers.add(resolveInfo);
+ when(mMockPackageManager.queryBroadcastReceiversAsUser(any(Intent.class), anyInt(),
+ anyInt())).thenReturn(accountRemovedReceivers);
+ }
+
@SmallTest
public void testConcurrencyReadWrite() throws Exception {
// Test 2 threads calling getAccounts and 1 thread setAuthToken
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java b/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java
index f68e06afff9a..a599427983bc 100644
--- a/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java
@@ -19,7 +19,6 @@ package com.android.server.wm;
import android.app.ActivityManager;
import android.content.res.Configuration;
import android.graphics.Rect;
-import android.os.Debug;
import android.view.DisplayInfo;
import org.junit.Test;
@@ -53,11 +52,11 @@ public class AppBoundsTests extends WindowTestsBase {
*/
@Test
public void testRootConfigurationBounds() throws Exception {
- final DisplayInfo info = sDisplayContent.getDisplayInfo();
+ final DisplayInfo info = mDisplayContent.getDisplayInfo();
info.appWidth = 1024;
info.appHeight = 768;
- final Configuration config = sWm.computeNewConfiguration(sDisplayContent.getDisplayId());
+ final Configuration config = sWm.computeNewConfiguration(mDisplayContent.getDisplayId());
// The bounds should always be positioned in the top left.
assertEquals(config.appBounds.left, 0);
assertEquals(config.appBounds.top, 0);
@@ -116,8 +115,8 @@ public class AppBoundsTests extends WindowTestsBase {
*/
@Test
public void testFullScreenFreeFormBounds() throws Exception {
- final Rect fullScreenBounds = new Rect(0, 0, sDisplayInfo.logicalWidth,
- sDisplayInfo.logicalHeight);
+ final Rect fullScreenBounds = new Rect(0, 0, mDisplayInfo.logicalWidth,
+ mDisplayInfo.logicalHeight);
testStackBoundsConfiguration(null /*stackId*/, mParentBounds, fullScreenBounds,
mParentBounds);
}
@@ -126,16 +125,16 @@ public class AppBoundsTests extends WindowTestsBase {
private void testStackBoundsConfiguration(Integer stackId, Rect parentBounds, Rect bounds,
Rect expectedConfigBounds) {
final StackWindowController stackController = stackId != null ?
- createStackControllerOnStackOnDisplay(stackId, sDisplayContent)
- : createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnStackOnDisplay(stackId, mDisplayContent)
+ : createStackControllerOnDisplay(mDisplayContent);
- final Configuration parentConfig = sDisplayContent.getConfiguration();
+ final Configuration parentConfig = mDisplayContent.getConfiguration();
parentConfig.setAppBounds(parentBounds);
final Configuration config = new Configuration();
stackController.adjustConfigurationForBounds(bounds, null /*insetBounds*/,
new Rect() /*nonDecorBounds*/, new Rect() /*stableBounds*/, false /*overrideWidth*/,
- false /*overrideHeight*/, sDisplayInfo.logicalDensityDpi, config, parentConfig);
+ false /*overrideHeight*/, mDisplayInfo.logicalDensityDpi, config, parentConfig);
// Assert that both expected and actual are null or are equal to each other
assertTrue((expectedConfigBounds == null && config.appBounds == null)
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java
index d206407bae16..dcbedb6f71b8 100644
--- a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java
@@ -48,14 +48,14 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
createAppWindowController();
// Assert token was added to display.
- assertNotNull(sDisplayContent.getWindowToken(controller.mToken.asBinder()));
+ assertNotNull(mDisplayContent.getWindowToken(controller.mToken.asBinder()));
// Assert that the container was created and linked.
assertNotNull(controller.mContainer);
- controller.removeContainer(sDisplayContent.getDisplayId());
+ controller.removeContainer(mDisplayContent.getDisplayId());
// Assert token was remove from display.
- assertNull(sDisplayContent.getWindowToken(controller.mToken.asBinder()));
+ assertNull(mDisplayContent.getWindowToken(controller.mToken.asBinder()));
// Assert that the container was removed.
assertNull(controller.mContainer);
}
@@ -68,11 +68,11 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
// Assert orientation is unspecified to start.
assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, controller.getOrientation());
- controller.setOrientation(SCREEN_ORIENTATION_LANDSCAPE, sDisplayContent.getDisplayId(),
+ controller.setOrientation(SCREEN_ORIENTATION_LANDSCAPE, mDisplayContent.getDisplayId(),
EMPTY /* displayConfig */, false /* freezeScreenIfNeeded */);
assertEquals(SCREEN_ORIENTATION_LANDSCAPE, controller.getOrientation());
- controller.removeContainer(sDisplayContent.getDisplayId());
+ controller.removeContainer(mDisplayContent.getDisplayId());
// Assert orientation is unspecified to after container is removed.
assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, controller.getOrientation());
@@ -99,7 +99,7 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
controller.addStartingWindow(InstrumentationRegistry.getContext().getPackageName(),
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true);
waitUntilHandlersIdle();
- final AppWindowToken atoken = controller.getAppWindowToken();
+ final AppWindowToken atoken = controller.getAppWindowToken(mDisplayContent);
assertHasStartingWindow(atoken);
controller.removeStartingWindow();
waitUntilHandlersIdle();
@@ -119,8 +119,8 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
android.R.style.Theme, null, "Test", 0, 0, 0, 0, controller1.mToken.asBinder(),
true, true, false, true);
waitUntilHandlersIdle();
- assertNoStartingWindow(controller1.getAppWindowToken());
- assertHasStartingWindow(controller2.getAppWindowToken());
+ assertNoStartingWindow(controller1.getAppWindowToken(mDisplayContent));
+ assertHasStartingWindow(controller2.getAppWindowToken(mDisplayContent));
}
@Test
@@ -129,7 +129,7 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
createAppWindowController();
final WindowTestUtils.TestAppWindowContainerController controller2 =
createAppWindowController();
- sPolicy.setRunnableWhenAddingSplashScreen(() -> {
+ ((TestWindowManagerPolicy) sWm.mPolicy).setRunnableWhenAddingSplashScreen(() -> {
// Surprise, ...! Transfer window in the middle of the creation flow.
controller2.addStartingWindow(InstrumentationRegistry.getContext().getPackageName(),
@@ -139,14 +139,14 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
controller1.addStartingWindow(InstrumentationRegistry.getContext().getPackageName(),
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true);
waitUntilHandlersIdle();
- assertNoStartingWindow(controller1.getAppWindowToken());
- assertHasStartingWindow(controller2.getAppWindowToken());
+ assertNoStartingWindow(controller1.getAppWindowToken(mDisplayContent));
+ assertHasStartingWindow(controller2.getAppWindowToken(mDisplayContent));
}
@Test
public void testReparent() throws Exception {
final StackWindowController stackController =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final WindowTestUtils.TestTaskWindowContainerController taskController1 =
new WindowTestUtils.TestTaskWindowContainerController(stackController);
final WindowTestUtils.TestAppWindowContainerController appWindowController1 =
@@ -183,7 +183,8 @@ public class AppWindowContainerControllerTests extends WindowTestsBase {
}
private WindowTestUtils.TestAppWindowContainerController createAppWindowController() {
- return createAppWindowController(new WindowTestUtils.TestTaskWindowContainerController());
+ return createAppWindowController(
+ new WindowTestUtils.TestTaskWindowContainerController(this));
}
private WindowTestUtils.TestAppWindowContainerController createAppWindowController(
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java
index 7a7ca3f4000a..876008b7412b 100644
--- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java
@@ -17,7 +17,6 @@
package com.android.server.wm;
import org.junit.Test;
-import org.junit.Ignore;
import org.junit.runner.RunWith;
import android.platform.test.annotations.Presubmit;
@@ -52,7 +51,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
@Test
public void testAddWindow_Order() throws Exception {
final WindowTestUtils.TestAppWindowToken token =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
assertEquals(0, token.getWindowsCount());
@@ -80,7 +79,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
@Test
public void testFindMainWindow() throws Exception {
final WindowTestUtils.TestAppWindowToken token =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
assertNull(token.findMainWindow());
@@ -102,10 +101,10 @@ public class AppWindowTokenTests extends WindowTestsBase {
sWm.mDisplayEnabled = true;
// Create an app window with token on a display.
- final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack = createTaskStackOnDisplay(mDisplayContent);
final Task task = createTaskInStack(stack, 0 /* userId */);
final WindowTestUtils.TestAppWindowToken appWindowToken =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
task.addChild(appWindowToken, 0);
final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(
TYPE_BASE_APPLICATION);
@@ -115,17 +114,17 @@ public class AppWindowTokenTests extends WindowTestsBase {
// Set initial orientation and update.
appWindowToken.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
- sWm.updateOrientationFromAppTokens(sDisplayContent.getOverrideConfiguration(), null,
- sDisplayContent.getDisplayId());
- assertEquals(SCREEN_ORIENTATION_LANDSCAPE, sDisplayContent.getLastOrientation());
+ sWm.updateOrientationFromAppTokens(mDisplayContent.getOverrideConfiguration(), null,
+ mDisplayContent.getDisplayId());
+ assertEquals(SCREEN_ORIENTATION_LANDSCAPE, mDisplayContent.getLastOrientation());
appWindow.resizeReported = false;
// Update the orientation to perform 180 degree rotation and check that resize was reported.
appWindowToken.setOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
- sWm.updateOrientationFromAppTokens(sDisplayContent.getOverrideConfiguration(), null,
- sDisplayContent.getDisplayId());
+ sWm.updateOrientationFromAppTokens(mDisplayContent.getOverrideConfiguration(), null,
+ mDisplayContent.getDisplayId());
sWm.mRoot.performSurfacePlacement(false /* recoveringMemory */);
- assertEquals(SCREEN_ORIENTATION_REVERSE_LANDSCAPE, sDisplayContent.getLastOrientation());
+ assertEquals(SCREEN_ORIENTATION_REVERSE_LANDSCAPE, mDisplayContent.getLastOrientation());
assertTrue(appWindow.resizeReported);
appWindow.removeImmediately();
}
@@ -170,7 +169,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
@Test
public void testGetOrientation() throws Exception {
final WindowTestUtils.TestAppWindowToken token =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
token.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
token.setFillsParent(false);
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index 837ce563d616..e8dc69faeee9 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -52,74 +52,74 @@ public class DisplayContentTests extends WindowTestsBase {
@Test
public void testForAllWindows() throws Exception {
final WindowState exitingAppWindow = createWindow(null, TYPE_BASE_APPLICATION,
- sDisplayContent, "exiting app");
+ mDisplayContent, "exiting app");
final AppWindowToken exitingAppToken = exitingAppWindow.mAppToken;
exitingAppToken.mIsExiting = true;
exitingAppToken.getTask().mStack.mExitingAppTokens.add(exitingAppToken);
assertForAllWindowsOrder(Arrays.asList(
- sWallpaperWindow,
+ mWallpaperWindow,
exitingAppWindow,
- sChildAppWindowBelow,
- sAppWindow,
- sChildAppWindowAbove,
- sDockedDividerWindow,
- sStatusBarWindow,
- sNavBarWindow,
- sImeWindow,
- sImeDialogWindow));
+ mChildAppWindowBelow,
+ mAppWindow,
+ mChildAppWindowAbove,
+ mDockedDividerWindow,
+ mStatusBarWindow,
+ mNavBarWindow,
+ mImeWindow,
+ mImeDialogWindow));
}
@Test
public void testForAllWindows_WithAppImeTarget() throws Exception {
final WindowState imeAppTarget =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "imeAppTarget");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "imeAppTarget");
sWm.mInputMethodTarget = imeAppTarget;
assertForAllWindowsOrder(Arrays.asList(
- sWallpaperWindow,
- sChildAppWindowBelow,
- sAppWindow,
- sChildAppWindowAbove,
+ mWallpaperWindow,
+ mChildAppWindowBelow,
+ mAppWindow,
+ mChildAppWindowAbove,
imeAppTarget,
- sImeWindow,
- sImeDialogWindow,
- sDockedDividerWindow,
- sStatusBarWindow,
- sNavBarWindow));
+ mImeWindow,
+ mImeDialogWindow,
+ mDockedDividerWindow,
+ mStatusBarWindow,
+ mNavBarWindow));
}
@Test
public void testForAllWindows_WithChildWindowImeTarget() throws Exception {
- sWm.mInputMethodTarget = sChildAppWindowAbove;
+ sWm.mInputMethodTarget = mChildAppWindowAbove;
assertForAllWindowsOrder(Arrays.asList(
- sWallpaperWindow,
- sChildAppWindowBelow,
- sAppWindow,
- sChildAppWindowAbove,
- sImeWindow,
- sImeDialogWindow,
- sDockedDividerWindow,
- sStatusBarWindow,
- sNavBarWindow));
+ mWallpaperWindow,
+ mChildAppWindowBelow,
+ mAppWindow,
+ mChildAppWindowAbove,
+ mImeWindow,
+ mImeDialogWindow,
+ mDockedDividerWindow,
+ mStatusBarWindow,
+ mNavBarWindow));
}
@Test
public void testForAllWindows_WithStatusBarImeTarget() throws Exception {
- sWm.mInputMethodTarget = sStatusBarWindow;
+ sWm.mInputMethodTarget = mStatusBarWindow;
assertForAllWindowsOrder(Arrays.asList(
- sWallpaperWindow,
- sChildAppWindowBelow,
- sAppWindow,
- sChildAppWindowAbove,
- sDockedDividerWindow,
- sStatusBarWindow,
- sImeWindow,
- sImeDialogWindow,
- sNavBarWindow));
+ mWallpaperWindow,
+ mChildAppWindowBelow,
+ mAppWindow,
+ mChildAppWindowAbove,
+ mDockedDividerWindow,
+ mStatusBarWindow,
+ mImeWindow,
+ mImeDialogWindow,
+ mNavBarWindow));
}
@Test
@@ -127,28 +127,28 @@ public class DisplayContentTests extends WindowTestsBase {
// This window is set-up to be z-ordered between some windows that go in the same token like
// the nav bar and status bar.
final WindowState voiceInteractionWindow = createWindow(null, TYPE_VOICE_INTERACTION,
- sDisplayContent, "voiceInteractionWindow");
+ mDisplayContent, "voiceInteractionWindow");
assertForAllWindowsOrder(Arrays.asList(
- sWallpaperWindow,
- sChildAppWindowBelow,
- sAppWindow,
- sChildAppWindowAbove,
- sDockedDividerWindow,
+ mWallpaperWindow,
+ mChildAppWindowBelow,
+ mAppWindow,
+ mChildAppWindowAbove,
+ mDockedDividerWindow,
voiceInteractionWindow,
- sStatusBarWindow,
- sNavBarWindow,
- sImeWindow,
- sImeDialogWindow));
+ mStatusBarWindow,
+ mNavBarWindow,
+ mImeWindow,
+ mImeDialogWindow));
}
@Test
public void testComputeImeTarget() throws Exception {
// Verify that an app window can be an ime target.
- final WindowState appWin = createWindow(null, TYPE_APPLICATION, sDisplayContent, "appWin");
+ final WindowState appWin = createWindow(null, TYPE_APPLICATION, mDisplayContent, "appWin");
appWin.setHasSurface(true);
assertTrue(appWin.canBeImeTarget());
- WindowState imeTarget = sDisplayContent.computeImeTarget(false /* updateImeTarget */);
+ WindowState imeTarget = mDisplayContent.computeImeTarget(false /* updateImeTarget */);
assertEquals(appWin, imeTarget);
// Verify that an child window can be an ime target.
@@ -156,7 +156,7 @@ public class DisplayContentTests extends WindowTestsBase {
TYPE_APPLICATION_ATTACHED_DIALOG, "childWin");
childWin.setHasSurface(true);
assertTrue(childWin.canBeImeTarget());
- imeTarget = sDisplayContent.computeImeTarget(false /* updateImeTarget */);
+ imeTarget = mDisplayContent.computeImeTarget(false /* updateImeTarget */);
assertEquals(childWin, imeTarget);
}
@@ -182,12 +182,12 @@ public class DisplayContentTests extends WindowTestsBase {
assertEquals(dc, token.getDisplayContent());
// Move stack to first display.
- sDisplayContent.moveStackToDisplay(stack, true /* onTop */);
- assertEquals(sDisplayContent.getDisplayId(), stack.getDisplayContent().getDisplayId());
- assertEquals(sDisplayContent, stack.getParent().getParent());
- assertEquals(sDisplayContent, stack.getDisplayContent());
- assertEquals(sDisplayContent, task.getDisplayContent());
- assertEquals(sDisplayContent, token.getDisplayContent());
+ mDisplayContent.moveStackToDisplay(stack, true /* onTop */);
+ assertEquals(mDisplayContent.getDisplayId(), stack.getDisplayContent().getDisplayId());
+ assertEquals(mDisplayContent, stack.getParent().getParent());
+ assertEquals(mDisplayContent, stack.getDisplayContent());
+ assertEquals(mDisplayContent, task.getDisplayContent());
+ assertEquals(mDisplayContent, token.getDisplayContent());
}
/**
@@ -195,8 +195,8 @@ public class DisplayContentTests extends WindowTestsBase {
*/
@Test
public void testDisplayOverrideConfigUpdate() throws Exception {
- final int displayId = sDisplayContent.getDisplayId();
- final Configuration currentOverrideConfig = sDisplayContent.getOverrideConfiguration();
+ final int displayId = mDisplayContent.getDisplayId();
+ final Configuration currentOverrideConfig = mDisplayContent.getOverrideConfiguration();
// Create new, slightly changed override configuration and apply it to the display.
final Configuration newOverrideConfig = new Configuration(currentOverrideConfig);
@@ -206,7 +206,7 @@ public class DisplayContentTests extends WindowTestsBase {
sWm.setNewDisplayOverrideConfiguration(newOverrideConfig, displayId);
// Check that override config is applied.
- assertEquals(newOverrideConfig, sDisplayContent.getOverrideConfiguration());
+ assertEquals(newOverrideConfig, mDisplayContent.getOverrideConfiguration());
}
/**
@@ -214,7 +214,7 @@ public class DisplayContentTests extends WindowTestsBase {
*/
@Test
public void testDefaultDisplayOverrideConfigUpdate() throws Exception {
- final Configuration currentConfig = sDisplayContent.getConfiguration();
+ final Configuration currentConfig = mDisplayContent.getConfiguration();
// Create new, slightly changed override configuration and apply it to the display.
final Configuration newOverrideConfig = new Configuration(currentConfig);
@@ -239,7 +239,7 @@ public class DisplayContentTests extends WindowTestsBase {
public void testFocusedWindowMultipleDisplays() throws Exception {
// Create a focusable window and check that focus is calcualted correctly
final WindowState window1 =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "window1");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "window1");
assertEquals(window1, sWm.mRoot.computeFocusedWindow());
// Check that a new display doesn't affect focus
@@ -264,30 +264,30 @@ public class DisplayContentTests extends WindowTestsBase {
final int baseHeight = 2560;
final int baseDensity = 300;
- sDisplayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
+ mDisplayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
final int maxWidth = 300;
final int resultingHeight = (maxWidth * baseHeight) / baseWidth;
final int resultingDensity = (maxWidth * baseDensity) / baseWidth;
- sDisplayContent.setMaxUiWidth(maxWidth);
- verifySizes(sDisplayContent, maxWidth, resultingHeight, resultingDensity);
+ mDisplayContent.setMaxUiWidth(maxWidth);
+ verifySizes(mDisplayContent, maxWidth, resultingHeight, resultingDensity);
// Assert setting values again does not change;
- sDisplayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
- verifySizes(sDisplayContent, maxWidth, resultingHeight, resultingDensity);
+ mDisplayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
+ verifySizes(mDisplayContent, maxWidth, resultingHeight, resultingDensity);
final int smallerWidth = 200;
final int smallerHeight = 400;
final int smallerDensity = 100;
// Specify smaller dimension, verify that it is honored
- sDisplayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity);
- verifySizes(sDisplayContent, smallerWidth, smallerHeight, smallerDensity);
+ mDisplayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity);
+ verifySizes(mDisplayContent, smallerWidth, smallerHeight, smallerDensity);
// Verify that setting the max width to a greater value than the base width has no effect
- sDisplayContent.setMaxUiWidth(maxWidth);
- verifySizes(sDisplayContent, smallerWidth, smallerHeight, smallerDensity);
+ mDisplayContent.setMaxUiWidth(maxWidth);
+ verifySizes(mDisplayContent, smallerWidth, smallerHeight, smallerDensity);
}
/**
@@ -295,17 +295,17 @@ public class DisplayContentTests extends WindowTestsBase {
*/
@Test
public void testPinnedStackLocation() {
- createStackControllerOnStackOnDisplay(PINNED_STACK_ID, sDisplayContent);
- final int initialStackCount = sDisplayContent.getStackCount();
+ createStackControllerOnStackOnDisplay(PINNED_STACK_ID, mDisplayContent);
+ final int initialStackCount = mDisplayContent.getStackCount();
// Ensure that the pinned stack was placed at the end
- assertEquals(initialStackCount - 1, sDisplayContent.getStaskPosById(PINNED_STACK_ID));
+ assertEquals(initialStackCount - 1, mDisplayContent.getStaskPosById(PINNED_STACK_ID));
// By default, this should try to create a new stack on top
- createTaskStackOnDisplay(sDisplayContent);
- final int afterStackCount = sDisplayContent.getStackCount();
+ createTaskStackOnDisplay(mDisplayContent);
+ final int afterStackCount = mDisplayContent.getStackCount();
// Make sure the stack count has increased
assertEquals(initialStackCount + 1, afterStackCount);
// Ensure that the pinned stack is still on top
- assertEquals(afterStackCount - 1, sDisplayContent.getStaskPosById(PINNED_STACK_ID));
+ assertEquals(afterStackCount - 1, mDisplayContent.getStaskPosById(PINNED_STACK_ID));
}
private static void verifySizes(DisplayContent displayContent, int expectedBaseWidth,
@@ -319,7 +319,7 @@ public class DisplayContentTests extends WindowTestsBase {
final LinkedList<WindowState> actualWindows = new LinkedList();
// Test forward traversal.
- sDisplayContent.forAllWindows(actualWindows::addLast, false /* traverseTopToBottom */);
+ mDisplayContent.forAllWindows(actualWindows::addLast, false /* traverseTopToBottom */);
assertEquals(expectedWindows.size(), actualWindows.size());
for (WindowState w : expectedWindows) {
assertEquals(w, actualWindows.pollFirst());
@@ -327,7 +327,7 @@ public class DisplayContentTests extends WindowTestsBase {
assertTrue(actualWindows.isEmpty());
// Test backward traversal.
- sDisplayContent.forAllWindows(actualWindows::addLast, true /* traverseTopToBottom */);
+ mDisplayContent.forAllWindows(actualWindows::addLast, true /* traverseTopToBottom */);
assertEquals(expectedWindows.size(), actualWindows.size());
for (WindowState w : expectedWindows) {
assertEquals(w, actualWindows.pollLast());
diff --git a/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java
index 61f7f5708e89..d9b99eeac6f0 100644
--- a/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java
@@ -42,7 +42,7 @@ public class StackWindowControllerTests extends WindowTestsBase {
@Test
public void testRemoveContainer() throws Exception {
final StackWindowController stackController =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final WindowTestUtils.TestTaskWindowContainerController taskController =
new WindowTestUtils.TestTaskWindowContainerController(stackController);
@@ -62,7 +62,7 @@ public class StackWindowControllerTests extends WindowTestsBase {
@Test
public void testRemoveContainer_deferRemoval() throws Exception {
final StackWindowController stackController =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final WindowTestUtils.TestTaskWindowContainerController taskController =
new WindowTestUtils.TestTaskWindowContainerController(stackController);
@@ -89,7 +89,7 @@ public class StackWindowControllerTests extends WindowTestsBase {
public void testReparent() throws Exception {
// Create first stack on primary display.
final StackWindowController stack1Controller =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final TaskStack stack1 = stack1Controller.mContainer;
final WindowTestUtils.TestTaskWindowContainerController taskController =
new WindowTestUtils.TestTaskWindowContainerController(stack1Controller);
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java
index e6975e74a5e4..887def71ba66 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java
@@ -22,16 +22,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import android.graphics.Rect;
-import android.os.Binder;
-import android.platform.test.annotations.Presubmit;
-import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static com.android.server.wm.TaskPositioner.MIN_ASPECT;
import static com.android.server.wm.WindowManagerService.dipToPixel;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;
@@ -61,7 +57,7 @@ public class TaskPositionerTests extends WindowTestsBase {
@Before
public void setUp() throws Exception {
super.setUp();
- final Display display = sDisplayContent.getDisplay();
+ final Display display = mDisplayContent.getDisplay();
final DisplayMetrics dm = new DisplayMetrics();
display.getMetrics(dm);
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java
index c61076d3b920..a23a6b22d9e8 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java
@@ -16,28 +16,13 @@
package com.android.server.wm;
-import static android.graphics.GraphicBuffer.USAGE_HW_TEXTURE;
-import static android.graphics.GraphicBuffer.USAGE_SW_READ_NEVER;
-import static android.graphics.GraphicBuffer.USAGE_SW_READ_RARELY;
-import static android.graphics.GraphicBuffer.USAGE_SW_WRITE_NEVER;
-import static android.graphics.GraphicBuffer.create;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
-import android.app.ActivityManager.TaskSnapshot;
-import android.content.res.Configuration;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.GraphicBuffer;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.os.Debug;
-import android.platform.test.annotations.Presubmit;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java
index 275234095887..2b4d9fb4800a 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java
@@ -75,12 +75,12 @@ public class TaskSnapshotControllerTest extends WindowTestsBase {
@Test
public void testGetSnapshotMode() throws Exception {
final WindowState disabledWindow = createWindow(null,
- FIRST_APPLICATION_WINDOW, sDisplayContent, "disabledWindow");
+ FIRST_APPLICATION_WINDOW, mDisplayContent, "disabledWindow");
disabledWindow.mAppToken.setDisablePreviewSnapshots(true);
assertEquals(SNAPSHOT_MODE_APP_THEME,
sWm.mTaskSnapshotController.getSnapshotMode(disabledWindow.getTask()));
final WindowState normalWindow = createWindow(null,
- FIRST_APPLICATION_WINDOW, sDisplayContent, "normalWindow");
+ FIRST_APPLICATION_WINDOW, mDisplayContent, "normalWindow");
assertEquals(SNAPSHOT_MODE_REAL,
sWm.mTaskSnapshotController.getSnapshotMode(normalWindow.getTask()));
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java
index 82ea2313e8d7..5feda41f9599 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java
@@ -51,12 +51,13 @@ public class TaskStackContainersTests extends WindowTestsBase {
public void setUp() throws Exception {
super.setUp();
mPinnedStack = new StackWindowController(PINNED_STACK_ID, null,
- sDisplayContent.getDisplayId(), true /* onTop */, new Rect(), sWm).mContainer;
+ mDisplayContent.getDisplayId(), true /* onTop */, new Rect(), sWm).mContainer;
// Stack should contain visible app window to be considered visible.
final Task pinnedTask = createTaskInStack(mPinnedStack, 0 /* userId */);
assertFalse(mPinnedStack.isVisible());
- final WindowTestUtils.TestAppWindowToken pinnedApp = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ final WindowTestUtils.TestAppWindowToken pinnedApp = new WindowTestUtils.TestAppWindowToken(
+ mDisplayContent);
pinnedTask.addChild(pinnedApp, 0 /* addPos */);
assertTrue(mPinnedStack.isVisible());
}
@@ -69,8 +70,8 @@ public class TaskStackContainersTests extends WindowTestsBase {
@Test
public void testStackPositionChildAt() throws Exception {
// Test that always-on-top stack can't be moved to position other than top.
- final TaskStack stack1 = createTaskStackOnDisplay(sDisplayContent);
- final TaskStack stack2 = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack1 = createTaskStackOnDisplay(mDisplayContent);
+ final TaskStack stack2 = createTaskStackOnDisplay(mDisplayContent);
final WindowContainer taskStackContainer = stack1.getParent();
@@ -94,7 +95,7 @@ public class TaskStackContainersTests extends WindowTestsBase {
@Test
public void testStackPositionBelowPinnedStack() throws Exception {
// Test that no stack can be above pinned stack.
- final TaskStack stack1 = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack1 = createTaskStackOnDisplay(mDisplayContent);
final WindowContainer taskStackContainer = stack1.getParent();
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
index 267e5f77e709..b846fd02840b 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
@@ -45,7 +45,7 @@ public class TaskStackTests extends WindowTestsBase {
@Test
public void testStackPositionChildAt() throws Exception {
- final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack = createTaskStackOnDisplay(mDisplayContent);
final Task task1 = createTaskInStack(stack, 0 /* userId */);
final Task task2 = createTaskInStack(stack, 1 /* userId */);
@@ -62,16 +62,16 @@ public class TaskStackTests extends WindowTestsBase {
@Test
public void testClosingAppDifferentStackOrientation() throws Exception {
- final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack = createTaskStackOnDisplay(mDisplayContent);
final Task task1 = createTaskInStack(stack, 0 /* userId */);
WindowTestUtils.TestAppWindowToken appWindowToken1 =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
task1.addChild(appWindowToken1, 0);
appWindowToken1.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
final Task task2 = createTaskInStack(stack, 1 /* userId */);
WindowTestUtils.TestAppWindowToken appWindowToken2 =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
task2.addChild(appWindowToken2, 0);
appWindowToken2.setOrientation(SCREEN_ORIENTATION_PORTRAIT);
@@ -82,16 +82,16 @@ public class TaskStackTests extends WindowTestsBase {
@Test
public void testMoveTaskToBackDifferentStackOrientation() throws Exception {
- final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack = createTaskStackOnDisplay(mDisplayContent);
final Task task1 = createTaskInStack(stack, 0 /* userId */);
WindowTestUtils.TestAppWindowToken appWindowToken1 =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
task1.addChild(appWindowToken1, 0);
appWindowToken1.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
final Task task2 = createTaskInStack(stack, 1 /* userId */);
WindowTestUtils.TestAppWindowToken appWindowToken2 =
- new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ new WindowTestUtils.TestAppWindowToken(mDisplayContent);
task2.addChild(appWindowToken2, 0);
appWindowToken2.setOrientation(SCREEN_ORIENTATION_PORTRAIT);
@@ -102,17 +102,17 @@ public class TaskStackTests extends WindowTestsBase {
@Test
public void testStackRemoveImmediately() throws Exception {
- final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final TaskStack stack = createTaskStackOnDisplay(mDisplayContent);
final Task task = createTaskInStack(stack, 0 /* userId */);
assertEquals(stack, task.mStack);
- assertTrue(sDisplayContent.mDimLayerController.hasDimLayerUser(stack));
- assertTrue(sDisplayContent.mDimLayerController.hasDimLayerUser(task));
+ assertTrue(mDisplayContent.mDimLayerController.hasDimLayerUser(stack));
+ assertTrue(mDisplayContent.mDimLayerController.hasDimLayerUser(task));
// Remove stack and check if its child is also removed.
stack.removeImmediately();
assertNull(stack.getDisplayContent());
assertNull(task.mStack);
- assertFalse(sDisplayContent.mDimLayerController.hasDimLayerUser(stack));
- assertFalse(sDisplayContent.mDimLayerController.hasDimLayerUser(task));
+ assertFalse(mDisplayContent.mDimLayerController.hasDimLayerUser(stack));
+ assertFalse(mDisplayContent.mDimLayerController.hasDimLayerUser(task));
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java
index 98d20a2634ac..1dd9365825cf 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java
@@ -41,7 +41,7 @@ public class TaskWindowContainerControllerTests extends WindowTestsBase {
@Test
public void testRemoveContainer() throws Exception {
final WindowTestUtils.TestTaskWindowContainerController taskController =
- new WindowTestUtils.TestTaskWindowContainerController();
+ new WindowTestUtils.TestTaskWindowContainerController(this);
final WindowTestUtils.TestAppWindowContainerController appController =
new WindowTestUtils.TestAppWindowContainerController(taskController);
@@ -54,7 +54,7 @@ public class TaskWindowContainerControllerTests extends WindowTestsBase {
@Test
public void testRemoveContainer_deferRemoval() throws Exception {
final WindowTestUtils.TestTaskWindowContainerController taskController =
- new WindowTestUtils.TestTaskWindowContainerController();
+ new WindowTestUtils.TestTaskWindowContainerController(this);
final WindowTestUtils.TestAppWindowContainerController appController =
new WindowTestUtils.TestAppWindowContainerController(taskController);
@@ -79,11 +79,11 @@ public class TaskWindowContainerControllerTests extends WindowTestsBase {
@Test
public void testReparent() throws Exception {
final StackWindowController stackController1 =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final WindowTestUtils.TestTaskWindowContainerController taskController =
new WindowTestUtils.TestTaskWindowContainerController(stackController1);
final StackWindowController stackController2 =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final WindowTestUtils.TestTaskWindowContainerController taskController2 =
new WindowTestUtils.TestTaskWindowContainerController(stackController2);
@@ -96,7 +96,7 @@ public class TaskWindowContainerControllerTests extends WindowTestsBase {
assertTrue("Should not be able to reparent to the same parent", gotException);
final StackWindowController stackController3 =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
stackController3.setContainer(null);
gotException = false;
try {
@@ -117,13 +117,13 @@ public class TaskWindowContainerControllerTests extends WindowTestsBase {
public void testReparent_BetweenDisplays() throws Exception {
// Create first stack on primary display.
final StackWindowController stack1Controller =
- createStackControllerOnDisplay(sDisplayContent);
+ createStackControllerOnDisplay(mDisplayContent);
final TaskStack stack1 = stack1Controller.mContainer;
final WindowTestUtils.TestTaskWindowContainerController taskController =
new WindowTestUtils.TestTaskWindowContainerController(stack1Controller);
final WindowTestUtils.TestTask task1 = (WindowTestUtils.TestTask) taskController.mContainer;
task1.mOnDisplayChangedCalled = false;
- assertEquals(sDisplayContent, stack1.getDisplayContent());
+ assertEquals(mDisplayContent, stack1.getDisplayContent());
// Create second display and put second stack on it.
final DisplayContent dc = createNewDisplay();
diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
index 9392e8ee2b5c..be53667084d7 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -23,7 +23,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
-import android.content.pm.ActivityInfo;
import android.os.PowerSaveState;
import org.mockito.invocation.InvocationOnMock;
@@ -199,7 +198,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
final com.android.server.wm.WindowState window;
final AppWindowToken atoken;
synchronized (sWm.mWindowMap) {
- atoken = WindowTestsBase.sDisplayContent.getAppWindowToken(appToken);
+ atoken = sWm.mRoot.getAppWindowToken(appToken);
window = WindowTestsBase.createWindow(null, TYPE_APPLICATION_STARTING, atoken,
"Starting window");
atoken.startingWindow = window;
diff --git a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
index 0eaf5bc3e940..5a4bb27f765f 100644
--- a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
@@ -36,8 +36,6 @@ import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class UnknownAppVisibilityControllerTest extends WindowTestsBase {
- private WindowManagerService mWm;
-
@Before
public void setUp() throws Exception {
super.setUp();
@@ -46,7 +44,7 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase {
@Test
public void testFlow() throws Exception {
- final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent);
sWm.mUnknownAppVisibilityController.notifyLaunched(token);
sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token);
sWm.mUnknownAppVisibilityController.notifyRelayouted(token);
@@ -58,8 +56,8 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase {
@Test
public void testMultiple() throws Exception {
- final AppWindowToken token1 = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
- final AppWindowToken token2 = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ final AppWindowToken token1 = new WindowTestUtils.TestAppWindowToken(mDisplayContent);
+ final AppWindowToken token2 = new WindowTestUtils.TestAppWindowToken(mDisplayContent);
sWm.mUnknownAppVisibilityController.notifyLaunched(token1);
sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token1);
sWm.mUnknownAppVisibilityController.notifyLaunched(token2);
@@ -74,7 +72,7 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase {
@Test
public void testClear() throws Exception {
- final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent);
sWm.mUnknownAppVisibilityController.notifyLaunched(token);
sWm.mUnknownAppVisibilityController.clear();;
assertTrue(sWm.mUnknownAppVisibilityController.allResolved());
@@ -82,7 +80,7 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase {
@Test
public void testAppRemoved() throws Exception {
- final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent);
sWm.mUnknownAppVisibilityController.notifyLaunched(token);
sWm.mUnknownAppVisibilityController.appRemoved(token);
assertTrue(sWm.mUnknownAppVisibilityController.allResolved());
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java
index 956735c01019..f1e15d9c5900 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java
@@ -17,7 +17,6 @@
package com.android.server.wm;
import org.junit.Test;
-import org.junit.runner.RunWith;
import android.platform.test.annotations.Presubmit;
import android.support.test.filters.SmallTest;
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
index a2aa058ac063..8fe411653ce2 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
@@ -96,8 +96,7 @@ public class WindowFrameTests extends WindowTestsBase {
@Before
public void setUp() throws Exception {
- final Context context = InstrumentationRegistry.getTargetContext();
- sWm = TestWindowManagerPolicy.getWindowManagerService(context);
+ super.setUp();
// Just any non zero value.
sWm.mSystemDecorLayer = 10000;
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowLayersControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowLayersControllerTests.java
index d5e6b6dcfbc6..e1f318dc032c 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowLayersControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowLayersControllerTests.java
@@ -45,45 +45,45 @@ public class WindowLayersControllerTests extends WindowTestsBase {
@Test
public void testAssignWindowLayers_ForImeWithNoTarget() throws Exception {
sWm.mInputMethodTarget = null;
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
// The Ime has an higher base layer than app windows and lower base layer than system
// windows, so it should be above app windows and below system windows if there isn't an IME
// target.
- assertWindowLayerGreaterThan(sImeWindow, sChildAppWindowAbove);
- assertWindowLayerGreaterThan(sImeWindow, sAppWindow);
- assertWindowLayerGreaterThan(sImeWindow, sDockedDividerWindow);
- assertWindowLayerGreaterThan(sNavBarWindow, sImeWindow);
- assertWindowLayerGreaterThan(sStatusBarWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mChildAppWindowAbove);
+ assertWindowLayerGreaterThan(mImeWindow, mAppWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mDockedDividerWindow);
+ assertWindowLayerGreaterThan(mNavBarWindow, mImeWindow);
+ assertWindowLayerGreaterThan(mStatusBarWindow, mImeWindow);
// And, IME dialogs should always have an higher layer than the IME.
- assertWindowLayerGreaterThan(sImeDialogWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeDialogWindow, mImeWindow);
}
@Test
public void testAssignWindowLayers_ForImeWithAppTarget() throws Exception {
final WindowState imeAppTarget =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "imeAppTarget");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "imeAppTarget");
sWm.mInputMethodTarget = imeAppTarget;
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
// Ime should be above all app windows and below system windows if it is targeting an app
// window.
- assertWindowLayerGreaterThan(sImeWindow, imeAppTarget);
- assertWindowLayerGreaterThan(sImeWindow, sChildAppWindowAbove);
- assertWindowLayerGreaterThan(sImeWindow, sAppWindow);
- assertWindowLayerGreaterThan(sImeWindow, sDockedDividerWindow);
- assertWindowLayerGreaterThan(sNavBarWindow, sImeWindow);
- assertWindowLayerGreaterThan(sStatusBarWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, imeAppTarget);
+ assertWindowLayerGreaterThan(mImeWindow, mChildAppWindowAbove);
+ assertWindowLayerGreaterThan(mImeWindow, mAppWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mDockedDividerWindow);
+ assertWindowLayerGreaterThan(mNavBarWindow, mImeWindow);
+ assertWindowLayerGreaterThan(mStatusBarWindow, mImeWindow);
// And, IME dialogs should always have an higher layer than the IME.
- assertWindowLayerGreaterThan(sImeDialogWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeDialogWindow, mImeWindow);
}
@Test
public void testAssignWindowLayers_ForImeWithAppTargetWithChildWindows() throws Exception {
final WindowState imeAppTarget =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "imeAppTarget");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "imeAppTarget");
final WindowState imeAppTargetChildAboveWindow = createWindow(imeAppTarget,
TYPE_APPLICATION_ATTACHED_DIALOG, imeAppTarget.mToken,
"imeAppTargetChildAboveWindow");
@@ -92,84 +92,84 @@ public class WindowLayersControllerTests extends WindowTestsBase {
"imeAppTargetChildBelowWindow");
sWm.mInputMethodTarget = imeAppTarget;
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
// Ime should be above all app windows except for child windows that are z-ordered above it
// and below system windows if it is targeting an app window.
- assertWindowLayerGreaterThan(sImeWindow, imeAppTarget);
- assertWindowLayerGreaterThan(imeAppTargetChildAboveWindow, sImeWindow);
- assertWindowLayerGreaterThan(sImeWindow, imeAppTargetChildBelowWindow);
- assertWindowLayerGreaterThan(sImeWindow, sChildAppWindowAbove);
- assertWindowLayerGreaterThan(sImeWindow, sAppWindow);
- assertWindowLayerGreaterThan(sImeWindow, sDockedDividerWindow);
- assertWindowLayerGreaterThan(sNavBarWindow, sImeWindow);
- assertWindowLayerGreaterThan(sStatusBarWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, imeAppTarget);
+ assertWindowLayerGreaterThan(imeAppTargetChildAboveWindow, mImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, imeAppTargetChildBelowWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mChildAppWindowAbove);
+ assertWindowLayerGreaterThan(mImeWindow, mAppWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mDockedDividerWindow);
+ assertWindowLayerGreaterThan(mNavBarWindow, mImeWindow);
+ assertWindowLayerGreaterThan(mStatusBarWindow, mImeWindow);
// And, IME dialogs should always have an higher layer than the IME.
- assertWindowLayerGreaterThan(sImeDialogWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeDialogWindow, mImeWindow);
}
@Test
public void testAssignWindowLayers_ForImeWithAppTargetAndAppAbove() throws Exception {
final WindowState appBelowImeTarget =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "appBelowImeTarget");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "appBelowImeTarget");
final WindowState imeAppTarget =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "imeAppTarget");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "imeAppTarget");
final WindowState appAboveImeTarget =
- createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "appAboveImeTarget");
+ createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "appAboveImeTarget");
sWm.mInputMethodTarget = imeAppTarget;
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
// Ime should be above all app windows except for non-fullscreen app window above it and
// below system windows if it is targeting an app window.
- assertWindowLayerGreaterThan(sImeWindow, imeAppTarget);
- assertWindowLayerGreaterThan(sImeWindow, appBelowImeTarget);
- assertWindowLayerGreaterThan(appAboveImeTarget, sImeWindow);
- assertWindowLayerGreaterThan(sImeWindow, sChildAppWindowAbove);
- assertWindowLayerGreaterThan(sImeWindow, sAppWindow);
- assertWindowLayerGreaterThan(sImeWindow, sDockedDividerWindow);
- assertWindowLayerGreaterThan(sNavBarWindow, sImeWindow);
- assertWindowLayerGreaterThan(sStatusBarWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, imeAppTarget);
+ assertWindowLayerGreaterThan(mImeWindow, appBelowImeTarget);
+ assertWindowLayerGreaterThan(appAboveImeTarget, mImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mChildAppWindowAbove);
+ assertWindowLayerGreaterThan(mImeWindow, mAppWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mDockedDividerWindow);
+ assertWindowLayerGreaterThan(mNavBarWindow, mImeWindow);
+ assertWindowLayerGreaterThan(mStatusBarWindow, mImeWindow);
// And, IME dialogs should always have an higher layer than the IME.
- assertWindowLayerGreaterThan(sImeDialogWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeDialogWindow, mImeWindow);
}
@Test
public void testAssignWindowLayers_ForImeNonAppImeTarget() throws Exception {
final WindowState imeSystemOverlayTarget = createWindow(null, TYPE_SYSTEM_OVERLAY,
- sDisplayContent, "imeSystemOverlayTarget",
+ mDisplayContent, "imeSystemOverlayTarget",
true /* ownerCanAddInternalSystemWindow */);
sWm.mInputMethodTarget = imeSystemOverlayTarget;
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
// The IME target base layer is higher than all window except for the nav bar window, so the
// IME should be above all windows except for the nav bar.
- assertWindowLayerGreaterThan(sImeWindow, imeSystemOverlayTarget);
- assertWindowLayerGreaterThan(sImeWindow, sChildAppWindowAbove);
- assertWindowLayerGreaterThan(sImeWindow, sAppWindow);
- assertWindowLayerGreaterThan(sImeWindow, sDockedDividerWindow);
- assertWindowLayerGreaterThan(sImeWindow, sStatusBarWindow);
- assertWindowLayerGreaterThan(sNavBarWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeWindow, imeSystemOverlayTarget);
+ assertWindowLayerGreaterThan(mImeWindow, mChildAppWindowAbove);
+ assertWindowLayerGreaterThan(mImeWindow, mAppWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mDockedDividerWindow);
+ assertWindowLayerGreaterThan(mImeWindow, mStatusBarWindow);
+ assertWindowLayerGreaterThan(mNavBarWindow, mImeWindow);
// And, IME dialogs should always have an higher layer than the IME.
- assertWindowLayerGreaterThan(sImeDialogWindow, sImeWindow);
+ assertWindowLayerGreaterThan(mImeDialogWindow, mImeWindow);
}
@Test
public void testStackLayers() throws Exception {
WindowState pinnedStackWindow = createWindowOnStack(null, PINNED_STACK_ID,
- TYPE_BASE_APPLICATION, sDisplayContent, "pinnedStackWindow");
+ TYPE_BASE_APPLICATION, mDisplayContent, "pinnedStackWindow");
WindowState dockedStackWindow = createWindowOnStack(null, DOCKED_STACK_ID,
- TYPE_BASE_APPLICATION, sDisplayContent, "dockedStackWindow");
+ TYPE_BASE_APPLICATION, mDisplayContent, "dockedStackWindow");
WindowState assistantStackWindow = createWindowOnStack(null, ASSISTANT_STACK_ID,
- TYPE_BASE_APPLICATION, sDisplayContent, "assistantStackWindow");
+ TYPE_BASE_APPLICATION, mDisplayContent, "assistantStackWindow");
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
- assertWindowLayerGreaterThan(dockedStackWindow, sAppWindow);
+ assertWindowLayerGreaterThan(dockedStackWindow, mAppWindow);
assertWindowLayerGreaterThan(assistantStackWindow, dockedStackWindow);
assertWindowLayerGreaterThan(pinnedStackWindow, assistantStackWindow);
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
index ae3eb522837f..47ced9921ace 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
@@ -92,7 +92,7 @@ public class WindowTestUtils {
public static class TestAppWindowToken extends AppWindowToken {
TestAppWindowToken(DisplayContent dc) {
- super(WindowTestsBase.sWm, null, false, dc, true /* fillsParent */,
+ super(dc.mService, null, false, dc, true /* fillsParent */,
null /* overrideConfig */, null /* bounds */);
}
@@ -137,7 +137,7 @@ public class WindowTestUtils {
}
TestWindowToken(int type, DisplayContent dc, boolean persistOnEmpty) {
- super(WindowTestsBase.sWm, mock(IBinder.class), type, persistOnEmpty, dc,
+ super(dc.mService, mock(IBinder.class), type, persistOnEmpty, dc,
false /* ownerCanManageAppTokens */);
}
@@ -201,8 +201,8 @@ public class WindowTestUtils {
*/
public static class TestTaskWindowContainerController extends TaskWindowContainerController {
- TestTaskWindowContainerController() {
- this(WindowTestsBase.createStackControllerOnDisplay(WindowTestsBase.sDisplayContent));
+ TestTaskWindowContainerController(WindowTestsBase testsBase) {
+ this(testsBase.createStackControllerOnDisplay(testsBase.mDisplayContent));
}
TestTaskWindowContainerController(StackWindowController stackController) {
@@ -219,7 +219,8 @@ public class WindowTestUtils {
}, stackController, 0 /* userId */, null /* bounds */,
EMPTY /* overrideConfig*/, RESIZE_MODE_UNRESIZEABLE,
false /* supportsPictureInPicture */, false /* homeTask*/, true /* toTop*/,
- true /* showForAllUsers */, new ActivityManager.TaskDescription(), WindowTestsBase.sWm);
+ true /* showForAllUsers */, new ActivityManager.TaskDescription(),
+ stackController.mService);
}
@Override
@@ -246,8 +247,8 @@ public class WindowTestUtils {
true /* showForAllUsers */, 0 /* configChanges */, false /* voiceInteraction */,
false /* launchTaskBehind */, false /* alwaysFocusable */,
0 /* targetSdkVersion */, 0 /* rotationAnimationHint */,
- 0 /* inputDispatchingTimeoutNanos */, WindowTestsBase.sWm, null /* overrideConfig */,
- null /* bounds */);
+ 0 /* inputDispatchingTimeoutNanos */, taskController.mService,
+ null /* overrideConfig */, null /* bounds */);
mToken = token;
}
@@ -265,8 +266,8 @@ public class WindowTestUtils {
controller, overrideConfig, bounds);
}
- AppWindowToken getAppWindowToken() {
- return (AppWindowToken) WindowTestsBase.sDisplayContent.getWindowToken(mToken.asBinder());
+ AppWindowToken getAppWindowToken(DisplayContent dc) {
+ return (AppWindowToken) dc.getWindowToken(mToken.asBinder());
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
index 218af7356e30..0167654d92b1 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
@@ -16,9 +16,9 @@
package com.android.server.wm;
+import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.View.VISIBLE;
-import android.app.ActivityManager.TaskDescription;
import android.graphics.Rect;
import android.hardware.display.DisplayManagerGlobal;
import android.view.Display;
@@ -61,85 +61,67 @@ import java.util.LinkedList;
*/
class WindowTestsBase {
static WindowManagerService sWm = null;
- static TestWindowManagerPolicy sPolicy = null;
- private final static IWindow sIWindow = new TestIWindow();
- private final static Session sMockSession = mock(Session.class);
+ private static final IWindow sIWindow = new TestIWindow();
+ private static final Session sMockSession = mock(Session.class);
// The default display is removed in {@link #setUp} and then we iterate over all displays to
// make sure we don't collide with any existing display. If we run into no other display, the
// added display should be treated as default. This cannot be the default display
- private static int sNextDisplayId = Display.DEFAULT_DISPLAY + 1;
+ private static int sNextDisplayId = DEFAULT_DISPLAY + 1;
private static int sNextStackId = FIRST_DYNAMIC_STACK_ID;
private static boolean sOneTimeSetupDone = false;
- static DisplayContent sDisplayContent;
- static DisplayInfo sDisplayInfo = new DisplayInfo();
- static WindowLayersController sLayersController;
- static WindowState sWallpaperWindow;
- static WindowState sImeWindow;
- static WindowState sImeDialogWindow;
- static WindowState sStatusBarWindow;
- static WindowState sDockedDividerWindow;
- static WindowState sNavBarWindow;
- static WindowState sAppWindow;
- static WindowState sChildAppWindowAbove;
- static WindowState sChildAppWindowBelow;
- static HashSet<WindowState> sCommonWindows;
+ DisplayContent mDisplayContent;
+ DisplayInfo mDisplayInfo = new DisplayInfo();
+ WindowLayersController mLayersController;
+ WindowState mWallpaperWindow;
+ WindowState mImeWindow;
+ WindowState mImeDialogWindow;
+ WindowState mStatusBarWindow;
+ WindowState mDockedDividerWindow;
+ WindowState mNavBarWindow;
+ WindowState mAppWindow;
+ WindowState mChildAppWindowAbove;
+ WindowState mChildAppWindowBelow;
+ HashSet<WindowState> mCommonWindows;
@Before
public void setUp() throws Exception {
- if (sOneTimeSetupDone) {
- return;
+ if (!sOneTimeSetupDone) {
+ sOneTimeSetupDone = true;
+ MockitoAnnotations.initMocks(this);
}
- sOneTimeSetupDone = true;
- MockitoAnnotations.initMocks(this);
+
final Context context = InstrumentationRegistry.getTargetContext();
AttributeCache.init(context);
sWm = TestWindowManagerPolicy.getWindowManagerService(context);
- sPolicy = (TestWindowManagerPolicy) sWm.mPolicy;
- sLayersController = new WindowLayersController(sWm);
-
- // Make sure that display ids don't overlap, so there won't be several displays with same
- // ids among RootWindowContainer children.
- for (DisplayContent dc : sWm.mRoot.mChildren) {
- if (dc.getDisplayId() >= sNextDisplayId) {
- sNextDisplayId = dc.getDisplayId() + 1;
- }
-
- // The default display must be preserved as some tests require it to function
- // (such as policy rotation).
- if (dc.getDisplayId() != Display.DEFAULT_DISPLAY) {
- // It is safe to remove these displays as new displays will always be created with
- // new ids.
- dc.removeImmediately();
- }
- }
+ mLayersController = new WindowLayersController(sWm);
- context.getDisplay().getDisplayInfo(sDisplayInfo);
- sDisplayContent = createNewDisplay();
+ context.getDisplay().getDisplayInfo(mDisplayInfo);
+ mDisplayContent = createNewDisplay();
sWm.mDisplayEnabled = true;
sWm.mDisplayReady = true;
// Set-up some common windows.
- sCommonWindows = new HashSet();
- sWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow");
- sImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "sImeWindow");
- sWm.mInputMethodWindow = sImeWindow;
- sImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG, "sImeDialogWindow");
- sStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "sStatusBarWindow");
- sNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "sNavBarWindow");
- sDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER, "sDockedDividerWindow");
- sAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "sAppWindow");
- sChildAppWindowAbove = createCommonWindow(sAppWindow, TYPE_APPLICATION_ATTACHED_DIALOG,
- "sChildAppWindowAbove");
- sChildAppWindowBelow = createCommonWindow(sAppWindow, TYPE_APPLICATION_MEDIA_OVERLAY,
- "sChildAppWindowBelow");
+ mCommonWindows = new HashSet();
+ mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow");
+ mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow");
+ sWm.mInputMethodWindow = mImeWindow;
+ mImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG, "mImeDialogWindow");
+ mStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "mStatusBarWindow");
+ mNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "mNavBarWindow");
+ mDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER, "mDockedDividerWindow");
+ mAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "mAppWindow");
+ mChildAppWindowAbove = createCommonWindow(mAppWindow, TYPE_APPLICATION_ATTACHED_DIALOG,
+ "mChildAppWindowAbove");
+ mChildAppWindowBelow = createCommonWindow(mAppWindow, TYPE_APPLICATION_MEDIA_OVERLAY,
+ "mChildAppWindowBelow");
}
@After
public void tearDown() throws Exception {
final LinkedList<WindowState> nonCommonWindows = new LinkedList();
sWm.mRoot.forAllWindows(w -> {
- if (!sCommonWindows.contains(w)) {
+ if (!mCommonWindows.contains(w)) {
nonCommonWindows.addLast(w);
}
}, true /* traverseTopToBottom */);
@@ -148,12 +130,13 @@ class WindowTestsBase {
nonCommonWindows.pollLast().removeImmediately();
}
+ mDisplayContent.removeImmediately();
sWm.mInputMethodTarget = null;
}
- private static WindowState createCommonWindow(WindowState parent, int type, String name) {
+ private WindowState createCommonWindow(WindowState parent, int type, String name) {
final WindowState win = createWindow(parent, type, name);
- sCommonWindows.add(win);
+ mCommonWindows.add(win);
// Prevent common windows from been IMe targets
win.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
return win;
@@ -172,7 +155,7 @@ class WindowTestsBase {
sWm.mAnimationHandler.runWithScissors(() -> { }, 0);
}
- private static WindowToken createWindowToken(DisplayContent dc, int stackId, int type) {
+ private WindowToken createWindowToken(DisplayContent dc, int stackId, int type) {
if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) {
return new WindowTestUtils.TestWindowToken(type, dc);
}
@@ -186,30 +169,30 @@ class WindowTestsBase {
return token;
}
- static WindowState createWindow(WindowState parent, int type, String name) {
+ WindowState createWindow(WindowState parent, int type, String name) {
return (parent == null)
- ? createWindow(parent, type, sDisplayContent, name)
+ ? createWindow(parent, type, mDisplayContent, name)
: createWindow(parent, type, parent.mToken, name);
}
- static WindowState createWindowOnStack(WindowState parent, int stackId, int type,
+ WindowState createWindowOnStack(WindowState parent, int stackId, int type,
DisplayContent dc, String name) {
final WindowToken token = createWindowToken(dc, stackId, type);
return createWindow(parent, type, token, name);
}
WindowState createAppWindow(Task task, int type, String name) {
- final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(sDisplayContent);
+ final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent);
task.addChild(token, 0);
return createWindow(null, type, token, name);
}
- static WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) {
+ WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) {
final WindowToken token = createWindowToken(dc, INVALID_STACK_ID, type);
return createWindow(parent, type, token, name);
}
- static WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
+ WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
boolean ownerCanAddInternalSystemWindow) {
final WindowToken token = createWindowToken(dc, INVALID_STACK_ID, type);
return createWindow(parent, type, token, name, ownerCanAddInternalSystemWindow);
@@ -233,23 +216,23 @@ class WindowTestsBase {
}
/** Creates a {@link TaskStack} and adds it to the specified {@link DisplayContent}. */
- static TaskStack createTaskStackOnDisplay(DisplayContent dc) {
+ TaskStack createTaskStackOnDisplay(DisplayContent dc) {
return createStackControllerOnDisplay(dc).mContainer;
}
- static StackWindowController createStackControllerOnDisplay(DisplayContent dc) {
+ StackWindowController createStackControllerOnDisplay(DisplayContent dc) {
final int stackId = ++sNextStackId;
return createStackControllerOnStackOnDisplay(stackId, dc);
}
- static StackWindowController createStackControllerOnStackOnDisplay(int stackId,
+ StackWindowController createStackControllerOnStackOnDisplay(int stackId,
DisplayContent dc) {
return new StackWindowController(stackId, null, dc.getDisplayId(),
true /* onTop */, new Rect(), sWm);
}
/** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */
- static Task createTaskInStack(TaskStack stack, int userId) {
+ Task createTaskInStack(TaskStack stack, int userId) {
return WindowTestUtils.createTaskInStack(sWm, stack, userId);
}
@@ -257,8 +240,8 @@ class WindowTestsBase {
DisplayContent createNewDisplay() {
final int displayId = sNextDisplayId++;
final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId,
- sDisplayInfo, DEFAULT_DISPLAY_ADJUSTMENTS);
- return new DisplayContent(display, sWm, sLayersController, new WallpaperController(sWm));
+ mDisplayInfo, DEFAULT_DISPLAY_ADJUSTMENTS);
+ return new DisplayContent(display, sWm, mLayersController, new WallpaperController(sWm));
}
/** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java
index 4f7ad41050f1..692e08baf7db 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java
@@ -47,7 +47,7 @@ public class WindowTokenTests extends WindowTestsBase {
@Test
public void testAddWindow() throws Exception {
final WindowTestUtils.TestWindowToken token =
- new WindowTestUtils.TestWindowToken(0, sDisplayContent);
+ new WindowTestUtils.TestWindowToken(0, mDisplayContent);
assertEquals(0, token.getWindowsCount());
@@ -76,7 +76,7 @@ public class WindowTokenTests extends WindowTestsBase {
@Test
public void testChildRemoval() throws Exception {
- final DisplayContent dc = sDisplayContent;
+ final DisplayContent dc = mDisplayContent;
final WindowTestUtils.TestWindowToken token = new WindowTestUtils.TestWindowToken(0, dc);
assertEquals(token, dc.getWindowToken(token.token));
@@ -97,7 +97,7 @@ public class WindowTokenTests extends WindowTestsBase {
@Test
public void testAdjustAnimLayer() throws Exception {
final WindowTestUtils.TestWindowToken token =
- new WindowTestUtils.TestWindowToken(0, sDisplayContent);
+ new WindowTestUtils.TestWindowToken(0, mDisplayContent);
final WindowState window1 = createWindow(null, TYPE_APPLICATION, token, "window1");
final WindowState window11 = createWindow(window1, FIRST_SUB_WINDOW, token, "window11");
final WindowState window12 = createWindow(window1, FIRST_SUB_WINDOW, token, "window12");
@@ -109,7 +109,7 @@ public class WindowTokenTests extends WindowTestsBase {
// We assign layers once, to get the base values computed by
// the controller.
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
final int window1StartLayer = window1.mWinAnimator.mAnimLayer;
final int window11StartLayer = window11.mWinAnimator.mAnimLayer;
@@ -120,7 +120,7 @@ public class WindowTokenTests extends WindowTestsBase {
// Then we set an adjustment, and assign them again, they should
// be offset.
int adj = token.adj = 50;
- sLayersController.assignWindowLayers(sDisplayContent);
+ mLayersController.assignWindowLayers(mDisplayContent);
final int highestLayer = token.getHighestAnimLayer();
assertEquals(window1StartLayer + adj, window1.mWinAnimator.mAnimLayer);
@@ -138,18 +138,18 @@ public class WindowTokenTests extends WindowTestsBase {
@Test
public void testTokenRemovalProcess() throws Exception {
final WindowTestUtils.TestWindowToken token =
- new WindowTestUtils.TestWindowToken(TYPE_TOAST, sDisplayContent,
+ new WindowTestUtils.TestWindowToken(TYPE_TOAST, mDisplayContent,
true /* persistOnEmpty */);
// Verify that the token is on the display
- assertNotNull(sDisplayContent.getWindowToken(token.token));
+ assertNotNull(mDisplayContent.getWindowToken(token.token));
final WindowState window1 = createWindow(null, TYPE_TOAST, token, "window1");
final WindowState window2 = createWindow(null, TYPE_TOAST, token, "window2");
- sDisplayContent.removeWindowToken(token.token);
+ mDisplayContent.removeWindowToken(token.token);
// Verify that the token is no longer mapped on the display
- assertNull(sDisplayContent.getWindowToken(token.token));
+ assertNull(mDisplayContent.getWindowToken(token.token));
// Verify that the token is still attached to its parent
assertNotNull(token.getParent());
// Verify that the token windows are still around.
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 3f6f8ec277bf..bb453a907b30 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -843,18 +843,20 @@ public class UsbDeviceManager {
updateUsbNotification();
updateAdbNotification();
+ if (mBootCompleted) {
+ Slog.i(TAG, "update state " + mConnected + " " + mConfigured);
+ updateUsbStateBroadcastIfNeeded(false);
+ }
if (UsbManager.containsFunction(mCurrentFunctions,
UsbManager.USB_FUNCTION_ACCESSORY)) {
updateCurrentAccessory();
}
if (mBootCompleted) {
- Slog.i(TAG, "update state " + mConnected + " " + mConfigured);
if (!mConnected) {
// restore defaults when USB is disconnected
Slog.i(TAG, "Disconnect, setting usb functions to null");
setEnabledFunctions(null, false, false);
}
- updateUsbStateBroadcastIfNeeded(false);
updateUsbFunctions();
} else {
mPendingBootBroadcast = true;
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index 799835970e30..dc0c485eed3c 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -865,6 +865,7 @@ public abstract class Connection extends Conferenceable {
* {@link Call#sendRttRequest()}
*/
public static final class RttModifyStatus {
+ private RttModifyStatus() {}
/**
* Session modify request was successful.
*/
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 85f84ba7f8d9..b8e24f0aa4d1 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -45,6 +45,7 @@ import android.provider.Settings.SettingNotFoundException;
import android.service.carrier.CarrierIdentifier;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
+import android.telephony.VisualVoicemailService.VisualVoicemailTask;
import android.telephony.ims.feature.ImsFeature;
import android.util.Log;
@@ -322,9 +323,6 @@ public class TelephonyManager {
* a String.
*
* <p class="note">
- * Requires the READ_PHONE_STATE permission.
- *
- * <p class="note">
* This was a {@link android.content.Context#sendStickyBroadcast sticky}
* broadcast in version 1.0, but it is no longer sticky.
* Instead, use {@link #getCallState} to synchronously query the current call state.
@@ -334,6 +332,7 @@ public class TelephonyManager {
* @see #getCallState
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public static final String ACTION_PHONE_STATE_CHANGED =
"android.intent.action.PHONE_STATE";
@@ -877,6 +876,30 @@ public class TelephonyManager {
public static final String VVM_TYPE_CVVM = "vvm_type_cvvm";
/**
+ * Key in bundle returned by {@link #getVisualVoicemailPackageName()}, indicating whether visual
+ * voicemail was enabled or disabled by the user. If the user never explicitly changed this
+ * setting, this key will not exist.
+ *
+ * @see #getVisualVoicemailSettings()
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL =
+ "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
+
+ /**
+ * Key in bundle returned by {@link #getVisualVoicemailPackageName()}, indicating the voicemail
+ * access PIN scrambled during the auto provisioning process. The user is expected to reset
+ * their PIN if this value is not {@code null}.
+ *
+ * @see #getVisualVoicemailSettings()
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING =
+ "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
+
+ /**
* @hide
*/
public static final String USSD_RESPONSE = "USSD_RESPONSE";
@@ -914,10 +937,8 @@ public class TelephonyManager {
* Returns the software version number for the device, for example,
* the IMEI/SV for GSM phones. Return null if the software version is
* not available.
- *
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getDeviceSoftwareVersion() {
return getDeviceSoftwareVersion(getSlotIndex());
}
@@ -927,12 +948,10 @@ public class TelephonyManager {
* the IMEI/SV for GSM phones. Return null if the software version is
* not available.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @param slotIndex of which deviceID is returned
*/
/** {@hide} */
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getDeviceSoftwareVersion(int slotIndex) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
@@ -950,13 +969,11 @@ public class TelephonyManager {
* Returns the unique device ID, for example, the IMEI for GSM and the MEID
* or ESN for CDMA phones. Return null if device ID is not available.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @deprecated Use (@link getImei} which returns IMEI for GSM or (@link getMeid} which returns
* MEID for CDMA.
*/
@Deprecated
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getDeviceId() {
try {
ITelephony telephony = getITelephony();
@@ -974,15 +991,13 @@ public class TelephonyManager {
* Returns the unique device ID of a subscription, for example, the IMEI for
* GSM and the MEID for CDMA phones. Return null if device ID is not available.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @param slotIndex of which deviceID is returned
*
* @deprecated Use (@link getImei} which returns IMEI for GSM or (@link getMeid} which returns
* MEID for CDMA.
*/
@Deprecated
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getDeviceId(int slotIndex) {
// FIXME this assumes phoneId == slotIndex
try {
@@ -1000,10 +1015,8 @@ public class TelephonyManager {
/**
* Returns the IMEI (International Mobile Equipment Identity). Return null if IMEI is not
* available.
- *
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getImei() {
return getImei(getSlotIndex());
}
@@ -1012,11 +1025,9 @@ public class TelephonyManager {
* Returns the IMEI (International Mobile Equipment Identity). Return null if IMEI is not
* available.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @param slotIndex of which IMEI is returned
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getImei(int slotIndex) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
@@ -1032,10 +1043,8 @@ public class TelephonyManager {
/**
* Returns the MEID (Mobile Equipment Identifier). Return null if MEID is not available.
- *
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getMeid() {
return getMeid(getSlotIndex());
}
@@ -1043,11 +1052,9 @@ public class TelephonyManager {
/**
* Returns the MEID (Mobile Equipment Identifier). Return null if MEID is not available.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @param slotIndex of which MEID is returned
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getMeid(int slotIndex) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
@@ -1103,13 +1110,13 @@ public class TelephonyManager {
*<p>
* @return Current location of the device or null if not available.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_COARSE_LOCATION} or
- * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION}.
- *
* @deprecated use {@link #getAllCellInfo} instead, which returns a superset of this API.
*/
@Deprecated
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.ACCESS_COARSE_LOCATION,
+ android.Manifest.permission.ACCESS_FINE_LOCATION
+ })
public CellLocation getCellLocation() {
try {
ITelephony telephony = getITelephony();
@@ -1141,11 +1148,9 @@ public class TelephonyManager {
* Enables location update notifications. {@link PhoneStateListener#onCellLocationChanged
* PhoneStateListener.onCellLocationChanged} will be called on location updates.
*
- * <p>Requires Permission: {@link android.Manifest.permission#CONTROL_LOCATION_UPDATES
- * CONTROL_LOCATION_UPDATES}
- *
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.CONTROL_LOCATION_UPDATES)
public void enableLocationUpdates() {
enableLocationUpdates(getSubId());
}
@@ -1155,12 +1160,10 @@ public class TelephonyManager {
* {@link PhoneStateListener#onCellLocationChanged
* PhoneStateListener.onCellLocationChanged} will be called on location updates.
*
- * <p>Requires Permission: {@link android.Manifest.permission#CONTROL_LOCATION_UPDATES
- * CONTROL_LOCATION_UPDATES}
- *
* @param subId for which the location updates are enabled
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.CONTROL_LOCATION_UPDATES)
public void enableLocationUpdates(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -1175,11 +1178,9 @@ public class TelephonyManager {
* Disables location update notifications. {@link PhoneStateListener#onCellLocationChanged
* PhoneStateListener.onCellLocationChanged} will be called on location updates.
*
- * <p>Requires Permission: {@link android.Manifest.permission#CONTROL_LOCATION_UPDATES
- * CONTROL_LOCATION_UPDATES}
- *
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.CONTROL_LOCATION_UPDATES)
public void disableLocationUpdates() {
disableLocationUpdates(getSubId());
}
@@ -1198,15 +1199,13 @@ public class TelephonyManager {
/**
* Returns the neighboring cell information of the device.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
- *
* @return List of NeighboringCellInfo or null if info unavailable.
*
* @deprecated Use {@link #getAllCellInfo} which returns a superset of the information
* from NeighboringCellInfo.
*/
@Deprecated
+ @RequiresPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION)
public List<NeighboringCellInfo> getNeighboringCellInfo() {
try {
ITelephony telephony = getITelephony();
@@ -1562,14 +1561,12 @@ public class TelephonyManager {
* invalid subscription ID is pinned to the TelephonyManager, the returned config will contain
* default values.
*
- * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE
- * READ_PHONE_STATE}
- *
* @see CarrierConfigManager#getConfigForSubId(int)
* @see #createForSubscriptionId(int)
* @see #createForPhoneAccountHandle(PhoneAccountHandle)
*/
@WorkerThread
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public PersistableBundle getCarrierConfig() {
CarrierConfigManager carrierConfigManager = mContext
.getSystemService(CarrierConfigManager.class);
@@ -1729,11 +1726,9 @@ public class TelephonyManager {
* @see #NETWORK_TYPE_EHRPD
* @see #NETWORK_TYPE_HSPAP
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getNetworkType(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -1759,10 +1754,6 @@ public class TelephonyManager {
* If this object has been created with {@link #createForSubscriptionId}, applies to the given
* subId. Otherwise, applies to {@link SubscriptionManager#getDefaultDataSubscriptionId()}
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @return the network type
*
* @see #NETWORK_TYPE_UNKNOWN
@@ -1782,6 +1773,7 @@ public class TelephonyManager {
* @see #NETWORK_TYPE_EHRPD
* @see #NETWORK_TYPE_HSPAP
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getDataNetworkType() {
return getDataNetworkType(getSubId(SubscriptionManager.getDefaultDataSubscriptionId()));
}
@@ -1792,12 +1784,9 @@ public class TelephonyManager {
* @return the network type
*
* @param subId for which network type is returned
- *
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getDataNetworkType(int subId) {
try{
ITelephony telephony = getITelephony();
@@ -1818,23 +1807,17 @@ public class TelephonyManager {
/**
* Returns the NETWORK_TYPE_xxxx for voice
- *
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getVoiceNetworkType() {
return getVoiceNetworkType(getSubId());
}
/**
* Returns the NETWORK_TYPE_xxxx for voice for a subId
- *
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getVoiceNetworkType(int subId) {
try{
ITelephony telephony = getITelephony();
@@ -2236,10 +2219,8 @@ public class TelephonyManager {
/**
* Returns the serial number of the SIM, if applicable. Return null if it is
* unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getSimSerialNumber() {
return getSimSerialNumber(getSubId());
}
@@ -2249,10 +2230,9 @@ public class TelephonyManager {
* unavailable.
* <p>
* @param subId for which Sim Serial number is returned
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getSimSerialNumber(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2275,12 +2255,9 @@ public class TelephonyManager {
* @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE}
* or {@link PhoneConstants#LTE_ON_CDMA_TRUE}
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getLteOnCdmaMode() {
return getLteOnCdmaMode(getSubId());
}
@@ -2293,12 +2270,9 @@ public class TelephonyManager {
* @param subId for which radio is LTE on CDMA is returned
* @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE}
* or {@link PhoneConstants#LTE_ON_CDMA_TRUE}
- *
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getLteOnCdmaMode(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -2323,10 +2297,8 @@ public class TelephonyManager {
/**
* Returns the unique subscriber ID, for example, the IMSI for a GSM phone.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getSubscriberId() {
return getSubscriberId(getSubId());
}
@@ -2335,13 +2307,11 @@ public class TelephonyManager {
* Returns the unique subscriber ID, for example, the IMSI for a GSM phone
* for a subscription.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*
* @param subId whose subscriber id is returned
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getSubscriberId(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2359,10 +2329,8 @@ public class TelephonyManager {
/**
* Returns the Group Identifier Level1 for a GSM phone.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getGroupIdLevel1() {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2380,13 +2348,11 @@ public class TelephonyManager {
/**
* Returns the Group Identifier Level1 for a GSM phone for a particular subscription.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*
* @param subId whose subscriber id is returned
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getGroupIdLevel1(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2405,15 +2371,13 @@ public class TelephonyManager {
* Returns the phone number string for line 1, for example, the MSISDN
* for a GSM phone. Return null if it is unavailable.
* <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- * OR
- * {@link android.Manifest.permission#READ_SMS}
- * OR
- * {@link android.Manifest.permission#READ_PHONE_NUMBERS}
- * <p>
* The default SMS app can also use this.
*/
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.READ_PHONE_STATE,
+ android.Manifest.permission.READ_SMS,
+ android.Manifest.permission.READ_PHONE_NUMBERS
+ })
public String getLine1Number() {
return getLine1Number(getSubId());
}
@@ -2422,18 +2386,16 @@ public class TelephonyManager {
* Returns the phone number string for line 1, for example, the MSISDN
* for a GSM phone for a particular subscription. Return null if it is unavailable.
* <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- * OR
- * {@link android.Manifest.permission#READ_SMS}
- * OR
- * {@link android.Manifest.permission#READ_PHONE_NUMBERS}
- * <p>
* The default SMS app can also use this.
*
* @param subId whose phone number for line 1 is returned
* @hide
*/
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.READ_PHONE_STATE,
+ android.Manifest.permission.READ_SMS,
+ android.Manifest.permission.READ_PHONE_NUMBERS
+ })
public String getLine1Number(int subId) {
String number = null;
try {
@@ -2505,12 +2467,10 @@ public class TelephonyManager {
/**
* Returns the alphabetic identifier associated with the line 1 number.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
* nobody seems to call this.
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getLine1AlphaTag() {
return getLine1AlphaTag(getSubId());
}
@@ -2519,13 +2479,11 @@ public class TelephonyManager {
* Returns the alphabetic identifier associated with the line 1 number
* for a subscription.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @param subId whose alphabetic identifier associated with line 1 is returned
* nobody seems to call this.
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getLine1AlphaTag(int subId) {
String alphaTag = null;
try {
@@ -2574,12 +2532,10 @@ public class TelephonyManager {
/**
* Returns the MSISDN string.
* for a GSM phone. Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getMsisdn() {
return getMsisdn(getSubId());
}
@@ -2587,13 +2543,11 @@ public class TelephonyManager {
/**
* Returns the MSISDN string.
* for a GSM phone. Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*
* @param subId for which msisdn is returned
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getMsisdn(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2610,10 +2564,8 @@ public class TelephonyManager {
/**
* Returns the voice mail number. Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getVoiceMailNumber() {
return getVoiceMailNumber(getSubId());
}
@@ -2621,12 +2573,10 @@ public class TelephonyManager {
/**
* Returns the voice mail number for a subscription.
* Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @param subId whose voice mail number is returned
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getVoiceMailNumber(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2643,25 +2593,21 @@ public class TelephonyManager {
/**
* Returns the complete voice mail number. Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#CALL_PRIVILEGED CALL_PRIVILEGED}
*
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.CALL_PRIVILEGED)
public String getCompleteVoiceMailNumber() {
return getCompleteVoiceMailNumber(getSubId());
}
/**
* Returns the complete voice mail number. Return null if it is unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#CALL_PRIVILEGED CALL_PRIVILEGED}
*
* @param subId
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.CALL_PRIVILEGED)
public String getCompleteVoiceMailNumber(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2732,9 +2678,6 @@ public class TelephonyManager {
/**
* Returns whether the visual voicemail client is enabled.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
- *
* @param phoneAccountHandle the phone account to check for.
* @return {@code true} when the visual voicemail client is enabled for this client
* @hide
@@ -2742,24 +2685,50 @@ public class TelephonyManager {
* be implemented instead.
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public boolean isVisualVoicemailEnabled(PhoneAccountHandle phoneAccountHandle){
return false;
}
+ /**
+ * Returns an opaque bundle of settings formerly used by the visual voicemail client for the
+ * subscription ID pinned to the TelephonyManager, or {@code null} if the subscription ID is
+ * invalid. This method allows the system dialer to migrate settings out of the pre-O visual
+ * voicemail client in telephony.
+ *
+ * <p>Requires the caller to be the system dialer.
+ *
+ * @see #KEY_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL
+ * @see #KEY_VOICEMAIL_SCRAMBLED_PIN_STRING
+ *
+ * @hide
+ */
+ @SystemApi
+ @Nullable
+ public Bundle getVisualVoicemailSettings(){
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony
+ .getVisualVoicemailSettings(mContext.getOpPackageName(), mSubId);
+ }
+ } catch (RemoteException ex) {
+ } catch (NullPointerException ex) {
+ }
+ return null;
+ }
/**
* Returns the package responsible of processing visual voicemail for the subscription ID pinned
* to the TelephonyManager. Returns {@code null} when there is no package responsible for
* processing visual voicemail for the subscription.
*
- * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE
- * READ_PHONE_STATE}
- *
* @see #createForSubscriptionId(int)
* @see #createForPhoneAccountHandle(PhoneAccountHandle)
* @see VisualVoicemailService
*/
@Nullable
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getVisualVoicemailPackageName() {
try {
ITelephony telephony = getITelephony();
@@ -2774,6 +2743,54 @@ public class TelephonyManager {
}
/**
+ * Set the visual voicemail SMS filter settings for the subscription ID pinned
+ * to the TelephonyManager.
+ * When the filter is enabled, {@link
+ * VisualVoicemailService#onSmsReceived(VisualVoicemailTask, VisualVoicemailSms)} will be
+ * called when a SMS matching the settings is received. The caller should have
+ * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} and implement a
+ * VisualVoicemailService.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
+ *
+ * @param settings The settings for the filter, or {@code null} to disable the filter.
+ */
+ public void setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings settings) {
+ if (settings == null) {
+ disableVisualVoicemailSmsFilter(mSubId);
+ } else {
+ enableVisualVoicemailSmsFilter(mSubId, settings);
+ }
+ }
+
+ /**
+ * Send a visual voicemail SMS. The caller must be the current default dialer.
+ * A {@link VisualVoicemailService} uses this method to send a command via SMS to the carrier's
+ * visual voicemail server. Some examples for carriers using the OMTP standard include
+ * activating and deactivating visual voicemail, or requesting the current visual voicemail
+ * provisioning status. See the OMTP Visual Voicemail specification for more information on the
+ * format of these SMS messages.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#SEND_SMS SEND_SMS}
+ *
+ * @param number The destination number.
+ * @param port The destination port for data SMS, or 0 for text SMS.
+ * @param text The message content. For data sms, it will be encoded as a UTF-8 byte stream.
+ * @param sentIntent The sent intent passed to the {@link SmsManager}
+ *
+ * @throws SecurityException if the caller is not the current default dialer
+ *
+ * @see SmsManager#sendDataMessage(String, String, short, byte[], PendingIntent, PendingIntent)
+ * @see SmsManager#sendTextMessage(String, String, String, PendingIntent, PendingIntent)
+ */
+ public void sendVisualVoicemailSms(String number, int port, String text,
+ PendingIntent sentIntent) {
+ sendVisualVoicemailSmsForSubscriber(mSubId, number, port, text, sentIntent);
+ }
+
+ /**
* Enables the visual voicemail SMS filter for a phone account. When the filter is
* enabled, Incoming SMS messages matching the OMTP VVM SMS interface will be redirected to the
* visual voicemail client with
@@ -2871,9 +2888,6 @@ public class TelephonyManager {
/**
* Send a visual voicemail SMS. The IPC caller must be the current default dialer.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#SEND_SMS SEND_SMS}
- *
* @param phoneAccountHandle The account to send the SMS with.
* @param number The destination number.
* @param port The destination port for data SMS, or 0 for text SMS.
@@ -2885,6 +2899,7 @@ public class TelephonyManager {
*
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.SEND_SMS)
public void sendVisualVoicemailSmsForSubscriber(int subId, String number, int port,
String text, PendingIntent sentIntent) {
try {
@@ -2989,9 +3004,6 @@ public class TelephonyManager {
/**
* Returns the voice activation state for the given subscriber.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE}
- *
* @param subId The subscription id.
*
* @return voiceActivationState for the given subscriber
@@ -3001,6 +3013,7 @@ public class TelephonyManager {
* @see #SIM_ACTIVATION_STATE_DEACTIVATED
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getVoiceActivationState(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3015,9 +3028,6 @@ public class TelephonyManager {
/**
* Returns the data activation state for the given subscriber.
*
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE}
- *
* @param subId The subscription id.
*
* @return dataActivationState for the given subscriber
@@ -3028,6 +3038,7 @@ public class TelephonyManager {
* @see #SIM_ACTIVATION_STATE_RESTRICTED
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getDataActivationState(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3042,23 +3053,19 @@ public class TelephonyManager {
/**
* Returns the voice mail count. Return 0 if unavailable, -1 if there are unread voice messages
* but the count is unknown.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getVoiceMessageCount() {
return getVoiceMessageCount(getSubId());
}
/**
* Returns the voice mail count for a subscription. Return 0 if unavailable.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @param subId whose voice message count is returned
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getVoiceMessageCount(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3076,10 +3083,8 @@ public class TelephonyManager {
/**
* Retrieves the alphabetic identifier associated with the voice
* mail number.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getVoiceMailAlphaTag() {
return getVoiceMailAlphaTag(getSubId());
}
@@ -3087,13 +3092,11 @@ public class TelephonyManager {
/**
* Retrieves the alphabetic identifier associated with the voice
* mail number for a subscription.
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @param subId whose alphabetic identifier associated with the
* voice mail number is returned
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getVoiceMailAlphaTag(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -3404,23 +3407,18 @@ public class TelephonyManager {
/**
* Returns the CDMA ERI icon index to display
- *
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getCdmaEriIconIndex() {
return getCdmaEriIconIndex(getSubId());
}
/**
* Returns the CDMA ERI icon index to display for a subscription
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getCdmaEriIconIndex(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3440,11 +3438,9 @@ public class TelephonyManager {
* 0 - ON
* 1 - FLASHING
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getCdmaEriIconMode() {
return getCdmaEriIconMode(getSubId());
}
@@ -3454,11 +3450,9 @@ public class TelephonyManager {
* 0 - ON
* 1 - FLASHING
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public int getCdmaEriIconMode(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3476,11 +3470,9 @@ public class TelephonyManager {
/**
* Returns the CDMA ERI text,
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getCdmaEriText() {
return getCdmaEriText(getSubId());
}
@@ -3488,11 +3480,9 @@ public class TelephonyManager {
/**
* Returns the CDMA ERI text, of a subscription
*
- * <p>
- * Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getCdmaEriText(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3575,13 +3565,10 @@ public class TelephonyManager {
* android.telephony.TelephonyManager#getCellLocation getCellLocation()}
* instead.
*
- * <p>Requires permission:
- * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
- *
* @return List of {@link android.telephony.CellInfo}; null if cell
* information is unavailable.
- *
*/
+ @RequiresPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION)
public List<CellInfo> getAllCellInfo() {
try {
ITelephony telephony = getITelephony();
@@ -4435,11 +4422,9 @@ public class TelephonyManager {
* Returns an array of Forbidden PLMNs from the USIM App
* Returns null if the query fails.
*
- *
- * <p>Requires that the caller has READ_PHONE_STATE
- *
* @return an array of forbidden PLMNs or null if not available
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String[] getForbiddenPlmns() {
return getForbiddenPlmns(getSubId(), APPTYPE_USIM);
}
@@ -4448,14 +4433,12 @@ public class TelephonyManager {
* Returns an array of Forbidden PLMNs from the specified SIM App
* Returns null if the query fails.
*
- *
- * <p>Requires that the calling app has READ_PHONE_STATE
- *
* @param subId subscription ID used for authentication
* @param appType the icc application type, like {@link #APPTYPE_USIM}
* @return fplmns an array of forbidden PLMNs
* @hide
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String[] getForbiddenPlmns(int subId, int appType) {
try {
ITelephony telephony = getITelephony();
@@ -6143,10 +6126,8 @@ public class TelephonyManager {
/**
* Returns the current {@link ServiceState} information.
- *
- * <p>Requires Permission:
- * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public ServiceState getServiceState() {
return getServiceStateForSubscriber(getSubId());
}
diff --git a/telephony/java/android/telephony/VisualVoicemailService.java b/telephony/java/android/telephony/VisualVoicemailService.java
index e211f76beccf..fe30eb7bb005 100644
--- a/telephony/java/android/telephony/VisualVoicemailService.java
+++ b/telephony/java/android/telephony/VisualVoicemailService.java
@@ -18,6 +18,7 @@ package android.telephony;
import android.annotation.MainThread;
import android.annotation.SdkConstant;
+import android.annotation.SystemApi;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
@@ -199,7 +200,8 @@ public abstract class VisualVoicemailService extends Service {
/**
* Called when a SMS matching the {@link VisualVoicemailSmsFilterSettings} set by
- * {@link #setSmsFilterSettings(Context, PhoneAccountHandle, VisualVoicemailSmsFilterSettings)}
+ * {@link TelephonyManager#setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings)
+ * }
* is received.
*
* @param task The task representing this event. {@link VisualVoicemailTask#finish()} must be
@@ -240,8 +242,11 @@ public abstract class VisualVoicemailService extends Service {
*
* @param phoneAccountHandle The account to apply the settings to.
* @param settings The settings for the filter, or {@code null} to disable the filter.
+ *
+ * @hide
*/
- public final static void setSmsFilterSettings(Context context,
+ @SystemApi
+ public static final void setSmsFilterSettings(Context context,
PhoneAccountHandle phoneAccountHandle,
VisualVoicemailSmsFilterSettings settings) {
TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
@@ -269,8 +274,11 @@ public abstract class VisualVoicemailService extends Service {
*
* @see SmsManager#sendDataMessage(String, String, short, byte[], PendingIntent, PendingIntent)
* @see SmsManager#sendTextMessage(String, String, String, PendingIntent, PendingIntent)
+ *
+ * @hide
*/
- public final static void sendVisualVoicemailSms(Context context,
+ @SystemApi
+ public static final void sendVisualVoicemailSms(Context context,
PhoneAccountHandle phoneAccountHandle, String number,
short port, String text, PendingIntent sentIntent) {
TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
diff --git a/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java b/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java
index 56a8c6255824..8ed96a3a4f36 100644
--- a/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java
+++ b/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java
@@ -38,7 +38,7 @@ import java.util.List;
* <p>Use {@link android.telephony.VisualVoicemailSmsFilterSettings.Builder} to construct this
* class.
*
- * @see VisualVoicemailService#setSmsFilterSettings(Context, PhoneAccountHandle, VisualVoicemailSmsFilterSettings)
+ * @see TelephonyManager#setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings)
*/
public final class VisualVoicemailSmsFilterSettings implements Parcelable {
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index dd08f67c9617..da333aee6168 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -498,6 +498,8 @@ interface ITelephony {
*/
boolean isConcurrentVoiceAndDataAllowed(int subId);
+ Bundle getVisualVoicemailSettings(String callingPackage, int subId);
+
String getVisualVoicemailPackageName(String callingPackage, int subId);
// Not oneway, caller needs to make sure the vaule is set before receiving a SMS
diff --git a/tests/testables/src/android/testing/AndroidTestingRunner.java b/tests/testables/src/android/testing/AndroidTestingRunner.java
index 816ed033a3e2..a425f70e836c 100644
--- a/tests/testables/src/android/testing/AndroidTestingRunner.java
+++ b/tests/testables/src/android/testing/AndroidTestingRunner.java
@@ -18,7 +18,7 @@ import android.support.test.internal.runner.junit4.statement.RunAfters;
import android.support.test.internal.runner.junit4.statement.RunBefores;
import android.support.test.internal.runner.junit4.statement.UiThreadStatement;
-import android.testing.TestableLooper.LooperStatement;
+import android.testing.TestableLooper.LooperFrameworkMethod;
import android.testing.TestableLooper.RunWithLooper;
import org.junit.After;
@@ -30,6 +30,7 @@ import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.Statement;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -49,28 +50,21 @@ public class AndroidTestingRunner extends BlockJUnit4ClassRunner {
@Override
protected Statement methodInvoker(FrameworkMethod method, Object test) {
- return shouldRunOnUiThread(method) ? new UiThreadStatement(
- methodInvokerInt(method, test), true) : methodInvokerInt(method, test);
- }
-
- protected Statement methodInvokerInt(FrameworkMethod method, Object test) {
- RunWithLooper annotation = method.getAnnotation(RunWithLooper.class);
- if (annotation == null) annotation = mKlass.getAnnotation(RunWithLooper.class);
- if (annotation != null) {
- return new LooperStatement(super.methodInvoker(method, test),
- annotation.setAsMainLooper(), test);
- }
- return super.methodInvoker(method, test);
+ method = looperWrap(method, test, method);
+ final Statement statement = super.methodInvoker(method, test);
+ return shouldRunOnUiThread(method) ? new UiThreadStatement(statement, true) : statement;
}
protected Statement withBefores(FrameworkMethod method, Object target, Statement statement) {
- List befores = this.getTestClass().getAnnotatedMethods(Before.class);
+ List befores = looperWrap(method, target,
+ this.getTestClass().getAnnotatedMethods(Before.class));
return befores.isEmpty() ? statement : new RunBefores(method, statement,
befores, target);
}
protected Statement withAfters(FrameworkMethod method, Object target, Statement statement) {
- List afters = this.getTestClass().getAnnotatedMethods(After.class);
+ List afters = looperWrap(method, target,
+ this.getTestClass().getAnnotatedMethods(After.class));
return afters.isEmpty() ? statement : new RunAfters(method, statement, afters,
target);
}
@@ -88,6 +82,30 @@ public class AndroidTestingRunner extends BlockJUnit4ClassRunner {
return annotation == null ? 0L : annotation.timeout();
}
+ protected List<FrameworkMethod> looperWrap(FrameworkMethod method, Object test,
+ List<FrameworkMethod> methods) {
+ RunWithLooper annotation = method.getAnnotation(RunWithLooper.class);
+ if (annotation == null) annotation = mKlass.getAnnotation(RunWithLooper.class);
+ if (annotation != null) {
+ methods = new ArrayList<>(methods);
+ for (int i = 0; i < methods.size(); i++) {
+ methods.set(i, LooperFrameworkMethod.get(methods.get(i),
+ annotation.setAsMainLooper(), test));
+ }
+ }
+ return methods;
+ }
+
+ protected FrameworkMethod looperWrap(FrameworkMethod method, Object test,
+ FrameworkMethod base) {
+ RunWithLooper annotation = method.getAnnotation(RunWithLooper.class);
+ if (annotation == null) annotation = mKlass.getAnnotation(RunWithLooper.class);
+ if (annotation != null) {
+ return LooperFrameworkMethod.get(base, annotation.setAsMainLooper(), test);
+ }
+ return base;
+ }
+
public boolean shouldRunOnUiThread(FrameworkMethod method) {
if (mKlass.getAnnotation(UiThreadTest.class) != null) {
return true;
diff --git a/tests/testables/src/android/testing/TestableLooper.java b/tests/testables/src/android/testing/TestableLooper.java
index 8a33cf918646..9eddc5112d0c 100644
--- a/tests/testables/src/android/testing/TestableLooper.java
+++ b/tests/testables/src/android/testing/TestableLooper.java
@@ -15,20 +15,21 @@
package android.testing;
import android.os.Handler;
+import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue;
+import android.os.TestLooperManager;
+import android.support.test.InstrumentationRegistry;
import android.util.ArrayMap;
-import org.junit.runners.model.Statement;
+import org.junit.runners.model.FrameworkMethod;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.Map;
/**
@@ -38,65 +39,35 @@ import java.util.Map;
*/
public class TestableLooper {
- private final Method mNext;
- private final Method mRecycleUnchecked;
-
private Looper mLooper;
private MessageQueue mQueue;
private boolean mMain;
private Object mOriginalMain;
private MessageHandler mMessageHandler;
- private int mParsedCount;
private Handler mHandler;
- private Message mEmptyMessage;
-
- public TestableLooper() throws Exception {
- this(true);
- }
+ private Runnable mEmptyMessage;
+ private TestLooperManager mQueueWrapper;
- public TestableLooper(boolean setMyLooper) throws Exception {
- setupQueue(setMyLooper);
- mNext = mQueue.getClass().getDeclaredMethod("next");
- mNext.setAccessible(true);
- mRecycleUnchecked = Message.class.getDeclaredMethod("recycleUnchecked");
- mRecycleUnchecked.setAccessible(true);
+ public TestableLooper(Looper l) throws Exception {
+ this(InstrumentationRegistry.getInstrumentation().acquireLooperManager(l), l);
}
- public Looper getLooper() {
- return mLooper;
+ private TestableLooper(TestLooperManager wrapper, Looper l) throws Exception {
+ mQueueWrapper = wrapper;
+ setupQueue(l);
}
- private void clearLooper() throws NoSuchFieldException, IllegalAccessException {
- Field field = Looper.class.getDeclaredField("sThreadLocal");
- field.setAccessible(true);
- ThreadLocal<Looper> sThreadLocal = (ThreadLocal<Looper>) field.get(null);
- sThreadLocal.set(null);
+ private TestableLooper(Looper looper, boolean b) throws Exception {
+ setupQueue(looper);
}
- private boolean setForCurrentThread() throws NoSuchFieldException, IllegalAccessException {
- if (Looper.myLooper() != mLooper) {
- Field field = Looper.class.getDeclaredField("sThreadLocal");
- field.setAccessible(true);
- ThreadLocal<Looper> sThreadLocal = (ThreadLocal<Looper>) field.get(null);
- sThreadLocal.set(mLooper);
- return true;
- }
- return false;
+ public Looper getLooper() {
+ return mLooper;
}
- private void setupQueue(boolean setMyLooper) throws Exception {
- if (setMyLooper) {
- clearLooper();
- Looper.prepare();
- mLooper = Looper.myLooper();
- } else {
- Constructor<Looper> constructor = Looper.class.getDeclaredConstructor(
- boolean.class);
- constructor.setAccessible(true);
- mLooper = constructor.newInstance(true);
- }
-
+ private void setupQueue(Looper l) throws Exception {
+ mLooper = l;
mQueue = mLooper.getQueue();
mHandler = new Handler(mLooper);
}
@@ -121,9 +92,7 @@ public class TestableLooper {
* tests.
*/
public void destroy() throws NoSuchFieldException, IllegalAccessException {
- if (Looper.myLooper() == mLooper) {
- clearLooper();
- }
+ mQueueWrapper.release();
if (mMain && mOriginalMain != null) {
Field field = mLooper.getClass().getDeclaredField("sMainLooper");
field.setAccessible(true);
@@ -156,34 +125,35 @@ public class TestableLooper {
private int processQueuedMessages() {
int count = 0;
- mEmptyMessage = mHandler.obtainMessage(1);
- mHandler.sendMessageDelayed(mEmptyMessage, 1);
+ mEmptyMessage = () -> { };
+ mHandler.post(mEmptyMessage);
+ waitForMessage(mQueueWrapper, mHandler, mEmptyMessage);
while (parseMessageInt()) count++;
return count;
}
private boolean parseMessageInt() {
try {
- Message result = (Message) mNext.invoke(mQueue);
+ Message result = mQueueWrapper.next();
if (result != null) {
// This is a break message.
- if (result == mEmptyMessage) {
- mRecycleUnchecked.invoke(result);
+ if (result.getCallback() == mEmptyMessage) {
+ mQueueWrapper.recycle(result);
return false;
}
if (mMessageHandler != null) {
if (mMessageHandler.onMessageHandled(result)) {
result.getTarget().dispatchMessage(result);
- mRecycleUnchecked.invoke(result);
+ mQueueWrapper.recycle(result);
} else {
- mRecycleUnchecked.invoke(result);
+ mQueueWrapper.recycle(result);
// Message handler indicated it doesn't want us to continue.
return false;
}
} else {
result.getTarget().dispatchMessage(result);
- mRecycleUnchecked.invoke(result);
+ mQueueWrapper.recycle(result);
}
} else {
// No messages, don't continue parsing
@@ -199,10 +169,14 @@ public class TestableLooper {
* Runs an executable with myLooper set and processes all messages added.
*/
public void runWithLooper(RunnableWithException runnable) throws Exception {
- boolean set = setForCurrentThread();
- runnable.run();
+ new Handler(getLooper()).post(() -> {
+ try {
+ runnable.run();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
processAllMessages();
- if (set) clearLooper();
}
public interface RunnableWithException {
@@ -215,39 +189,132 @@ public class TestableLooper {
boolean setAsMainLooper() default false;
}
+ private static void waitForMessage(TestLooperManager queueWrapper, Handler handler,
+ Runnable execute) {
+ for (int i = 0; i < 10; i++) {
+ if (!queueWrapper.hasMessages(handler, null, execute)) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ if (!queueWrapper.hasMessages(handler, null, execute)) {
+ throw new RuntimeException("Message didn't queue...");
+ }
+ }
+
private static final Map<Object, TestableLooper> sLoopers = new ArrayMap<>();
public static TestableLooper get(Object test) {
return sLoopers.get(test);
}
- public static class LooperStatement extends Statement {
- private final boolean mSetAsMain;
- private final Statement mBase;
- private final TestableLooper mLooper;
+ public static class LooperFrameworkMethod extends FrameworkMethod {
+ private HandlerThread mHandlerThread;
+
+ private final TestableLooper mTestableLooper;
+ private final Looper mLooper;
+ private final Handler mHandler;
- public LooperStatement(Statement base, boolean setAsMain, Object test) {
- mBase = base;
+ public LooperFrameworkMethod(FrameworkMethod base, boolean setAsMain, Object test) {
+ super(base.getMethod());
try {
- mLooper = new TestableLooper(false);
- sLoopers.put(test, mLooper);
- mSetAsMain = setAsMain;
+ mLooper = setAsMain ? Looper.getMainLooper() : createLooper();
+ mTestableLooper = new TestableLooper(mLooper, false);
} catch (Exception e) {
throw new RuntimeException(e);
}
+ sLoopers.put(test, mTestableLooper);
+ mHandler = new Handler(mLooper);
}
- @Override
- public void evaluate() throws Throwable {
- mLooper.setForCurrentThread();
- if (mSetAsMain) {
- mLooper.setAsMainLooper();
+ public LooperFrameworkMethod(TestableLooper other, FrameworkMethod base) {
+ super(base.getMethod());
+ mLooper = other.mLooper;
+ mTestableLooper = other;
+ mHandler = new Handler(mLooper);
+ }
+
+ public static FrameworkMethod get(FrameworkMethod base, boolean setAsMain, Object test) {
+ if (sLoopers.containsKey(test)) {
+ return new LooperFrameworkMethod(sLoopers.get(test), base);
}
+ return new LooperFrameworkMethod(base, setAsMain, test);
+ }
+ @Override
+ public Object invokeExplosively(Object target, Object... params) throws Throwable {
+ if (Looper.myLooper() == mLooper) {
+ // Already on the right thread from another statement, just execute then.
+ return super.invokeExplosively(target, params);
+ }
+ boolean set = mTestableLooper.mQueueWrapper == null;
+ if (set) {
+ mTestableLooper.mQueueWrapper = InstrumentationRegistry.getInstrumentation()
+ .acquireLooperManager(mLooper);
+ }
try {
- mBase.evaluate();
+ Object[] ret = new Object[1];
+ // Run the execution on the looper thread.
+ Runnable execute = () -> {
+ try {
+ ret[0] = super.invokeExplosively(target, params);
+ } catch (Throwable throwable) {
+ throw new LooperException(throwable);
+ }
+ };
+ Message m = Message.obtain(mHandler, execute);
+
+ // Dispatch our message.
+ try {
+ mTestableLooper.mQueueWrapper.execute(m);
+ } catch (LooperException e) {
+ throw e.getSource();
+ } catch (RuntimeException re) {
+ // If the TestLooperManager has to post, it will wrap what it throws in a
+ // RuntimeException, make sure we grab the actual source.
+ if (re.getCause() instanceof LooperException) {
+ throw ((LooperException) re.getCause()).getSource();
+ } else {
+ throw re.getCause();
+ }
+ } finally {
+ m.recycle();
+ }
+ return ret[0];
} finally {
- mLooper.destroy();
+ if (set) {
+ mTestableLooper.mQueueWrapper.release();
+ mTestableLooper.mQueueWrapper = null;
+ }
+ }
+ }
+
+ private Looper createLooper() {
+ // TODO: Find way to share these.
+ mHandlerThread = new HandlerThread(TestableLooper.class.getSimpleName());
+ mHandlerThread.start();
+ return mHandlerThread.getLooper();
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ if (mHandlerThread != null) {
+ mHandlerThread.quit();
+ }
+ }
+
+ private static class LooperException extends RuntimeException {
+ private final Throwable mSource;
+
+ public LooperException(Throwable t) {
+ mSource = t;
+ }
+
+ public Throwable getSource() {
+ return mSource;
}
}
}
diff --git a/tests/testables/tests/src/android/testing/TestableLooperTest.java b/tests/testables/tests/src/android/testing/TestableLooperTest.java
index 18e5fffef992..12f1d0a5f414 100644
--- a/tests/testables/tests/src/android/testing/TestableLooperTest.java
+++ b/tests/testables/tests/src/android/testing/TestableLooperTest.java
@@ -24,17 +24,16 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.testing.TestableLooper.MessageHandler;
import android.testing.TestableLooper.RunWithLooper;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
public class TestableLooperTest {
@@ -46,11 +45,6 @@ public class TestableLooperTest {
mTestableLooper = TestableLooper.get(this);
}
- @After
- public void tearDown() throws Exception {
- mTestableLooper.destroy();
- }
-
@Test
public void testMessageExecuted() throws Exception {
Handler h = new Handler();
@@ -133,39 +127,23 @@ public class TestableLooperTest {
@Test
public void testMainLooper() throws Exception {
assertNotEquals(Looper.myLooper(), Looper.getMainLooper());
-
- Looper originalMain = Looper.getMainLooper();
- mTestableLooper.setAsMainLooper();
- assertEquals(Looper.myLooper(), Looper.getMainLooper());
- Runnable r = mock(Runnable.class);
-
- new Handler(Looper.getMainLooper()).post(r);
- mTestableLooper.processAllMessages();
-
- verify(r).run();
- mTestableLooper.destroy();
-
- assertEquals(originalMain, Looper.getMainLooper());
- }
-
- @Test
- public void testNotMyLooper() throws Exception {
- TestableLooper looper = new TestableLooper(false);
-
- assertEquals(Looper.myLooper(), mTestableLooper.getLooper());
- assertNotEquals(Looper.myLooper(), looper.getLooper());
-
Runnable r = mock(Runnable.class);
Runnable r2 = mock(Runnable.class);
- new Handler().post(r);
- new Handler(looper.getLooper()).post(r2);
-
- looper.processAllMessages();
- verify(r2).run();
- verify(r, never()).run();
-
- mTestableLooper.processAllMessages();
- verify(r).run();
+ TestableLooper testableLooper = new TestableLooper(Looper.getMainLooper());
+
+ try {
+ testableLooper.setMessageHandler(m -> {
+ if (m.getCallback() == r) return true;
+ return false;
+ });
+ new Handler(Looper.getMainLooper()).post(r);
+ testableLooper.processAllMessages();
+
+ verify(r).run();
+ verify(r2, never()).run();
+ } finally {
+ testableLooper.destroy();
+ }
}
@Test
diff --git a/tools/aapt2/cmd/Compile.cpp b/tools/aapt2/cmd/Compile.cpp
index 423e79069eac..b93c6ecea274 100644
--- a/tools/aapt2/cmd/Compile.cpp
+++ b/tools/aapt2/cmd/Compile.cpp
@@ -365,6 +365,21 @@ static bool FlattenXmlToOutStream(IAaptContext* context, const StringPiece& outp
return true;
}
+static bool IsValidFile(IAaptContext* context, const StringPiece& input_path) {
+ const file::FileType file_type = file::GetFileType(input_path);
+ if (file_type != file::FileType::kRegular && file_type != file::FileType::kSymlink) {
+ if (file_type == file::FileType::kDirectory) {
+ context->GetDiagnostics()->Error(DiagMessage(input_path)
+ << "resource file cannot be a directory");
+ } else {
+ context->GetDiagnostics()->Error(DiagMessage(input_path)
+ << "not a valid resource file");
+ }
+ return false;
+ }
+ return true;
+}
+
static bool CompileXml(IAaptContext* context, const CompileOptions& options,
const ResourcePathData& path_data, IArchiveWriter* writer,
const std::string& output_path) {
@@ -569,7 +584,8 @@ static bool CompileFile(IAaptContext* context, const CompileOptions& options,
std::string error_str;
Maybe<android::FileMap> f = file::MmapPath(path_data.source.path, &error_str);
if (!f) {
- context->GetDiagnostics()->Error(DiagMessage(path_data.source) << error_str);
+ context->GetDiagnostics()->Error(DiagMessage(path_data.source) << "failed to mmap file: "
+ << error_str);
return false;
}
@@ -697,6 +713,11 @@ int Compile(const std::vector<StringPiece>& args) {
context.GetDiagnostics()->Note(DiagMessage(path_data.source) << "processing");
}
+ if (!IsValidFile(&context, path_data.source.path)) {
+ error = true;
+ continue;
+ }
+
if (path_data.resource_dir == "values") {
// Overwrite the extension.
path_data.extension = "arsc";
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp
index 0c19c7ad7f32..27ab22bb0010 100644
--- a/tools/aapt2/link/ManifestFixer.cpp
+++ b/tools/aapt2/link/ManifestFixer.cpp
@@ -333,7 +333,7 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor,
// Provider actions.
application_action["provider"] = component_action;
application_action["provider"]["grant-uri-permissions"];
- application_action["provider"]["path-permissions"];
+ application_action["provider"]["path-permission"];
return true;
}
diff --git a/tools/fonts/fontchain_lint.py b/tools/fonts/fontchain_lint.py
index f5b904220f76..c0475eeb0c7e 100755
--- a/tools/fonts/fontchain_lint.py
+++ b/tools/fonts/fontchain_lint.py
@@ -428,7 +428,8 @@ def parse_ucd(ucd_path):
_text_variation_sequences, _emoji_variation_sequences = sequences
_emoji_sequences = parse_unicode_datafile(
path.join(ucd_path, 'emoji-sequences.txt'))
-
+ _emoji_sequences.update(parse_unicode_datafile(
+ path.join(ucd_path, 'additions', 'emoji-sequences.txt')))
_emoji_zwj_sequences = parse_unicode_datafile(
path.join(ucd_path, 'emoji-zwj-sequences.txt'))
_emoji_zwj_sequences.update(parse_unicode_datafile(
diff --git a/wifi/java/android/net/wifi/aware/DiscoverySession.java b/wifi/java/android/net/wifi/aware/DiscoverySession.java
index bf5c42b8ca1c..c7e1fc739046 100644
--- a/wifi/java/android/net/wifi/aware/DiscoverySession.java
+++ b/wifi/java/android/net/wifi/aware/DiscoverySession.java
@@ -38,10 +38,10 @@ import java.lang.ref.WeakReference;
* {@link #createNetworkSpecifierOpen(PeerHandle)} or
* {@link #createNetworkSpecifierPassphrase(PeerHandle, String)}.
* </ul>
- * The {@link #destroy()} method must be called to destroy discovery sessions once they are
+ * The {@link #close()} method must be called to destroy discovery sessions once they are
* no longer needed.
*/
-public class DiscoverySession {
+public class DiscoverySession implements AutoCloseable {
private static final String TAG = "DiscoverySession";
private static final boolean DBG = false;
private static final boolean VDBG = false; // STOPSHIP if true
@@ -96,7 +96,8 @@ public class DiscoverySession {
* exception is a session for which we received a termination callback,
* {@link DiscoverySessionCallback#onSessionTerminated()}.
*/
- public void destroy() {
+ @Override
+ public void close() {
WifiAwareManager mgr = mMgr.get();
if (mgr == null) {
Log.w(TAG, "destroy: called post GC on WifiAwareManager");
@@ -131,7 +132,7 @@ public class DiscoverySession {
try {
if (!mTerminated) {
mCloseGuard.warnIfOpen();
- destroy();
+ close();
}
} finally {
super.finalize();
diff --git a/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java b/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java
index 334205b13bba..d8667e6cfcb6 100644
--- a/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java
+++ b/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java
@@ -84,7 +84,7 @@ public class DiscoverySessionCallback {
/**
* Called when a discovery session (publish or subscribe) terminates. Termination may be due
- * to user-request (either directly through {@link DiscoverySession#destroy()} or
+ * to user-request (either directly through {@link DiscoverySession#close()} or
* application-specified expiration, e.g. {@link PublishConfig.Builder#setTtlSec(int)}
* or {@link SubscribeConfig.Builder#setTtlSec(int)}).
*/
diff --git a/wifi/java/android/net/wifi/aware/PublishConfig.java b/wifi/java/android/net/wifi/aware/PublishConfig.java
index 1ce12f30a25e..0f1e99295bc1 100644
--- a/wifi/java/android/net/wifi/aware/PublishConfig.java
+++ b/wifi/java/android/net/wifi/aware/PublishConfig.java
@@ -314,7 +314,7 @@ public final class PublishConfig implements Parcelable {
* {@link #setTerminateNotificationEnabled(boolean)} disables the callback].
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link DiscoverySession#destroy()} is
+ * Session will be terminated when {@link DiscoverySession#close()} is
* called.
*
* @param ttlSec Lifetime of a publish session in seconds.
diff --git a/wifi/java/android/net/wifi/aware/SubscribeConfig.java b/wifi/java/android/net/wifi/aware/SubscribeConfig.java
index 6c1fcce5c0b7..31e7e8e86c90 100644
--- a/wifi/java/android/net/wifi/aware/SubscribeConfig.java
+++ b/wifi/java/android/net/wifi/aware/SubscribeConfig.java
@@ -313,7 +313,7 @@ public final class SubscribeConfig implements Parcelable {
* {@link DiscoverySessionCallback#onSessionTerminated()}.
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link DiscoverySession#destroy()} is
+ * Session will be terminated when {@link DiscoverySession#close()} is
* called.
*
* @param ttlSec Lifetime of a subscribe session in seconds.
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareManager.java b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
index 3fcbd4b60259..d3ed79245426 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareManager.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
@@ -82,7 +82,7 @@ import java.util.List;
* discovery or connection setup only after receiving confirmation that Aware attach
* succeeded - {@link AttachCallback#onAttached(WifiAwareSession)}. When an
* application is finished using Aware it <b>must</b> use the
- * {@link WifiAwareSession#destroy()} API to indicate to the Aware service that the device
+ * {@link WifiAwareSession#close()} API to indicate to the Aware service that the device
* may detach from the Aware cluster. The device will actually disable Aware once the last
* application detaches.
* <p>
@@ -104,7 +104,7 @@ import java.util.List;
* also be used to send messages using the
* {@link DiscoverySession#sendMessage(PeerHandle, int, byte[])} APIs. When an
* application is finished with a discovery session it <b>must</b> terminate it using the
- * {@link DiscoverySession#destroy()} API.
+ * {@link DiscoverySession#close()} API.
* <p>
* Creating connections between Aware devices is managed by the standard
* {@link ConnectivityManager#requestNetwork(NetworkRequest,
@@ -215,7 +215,7 @@ public class WifiAwareManager {
* create connections to peers. The device will attach to an existing cluster if it can find
* one or create a new cluster (if it is the first to enable Aware in its vicinity). Results
* (e.g. successful attach to a cluster) are provided to the {@code attachCallback} object.
- * An application <b>must</b> call {@link WifiAwareSession#destroy()} when done with the
+ * An application <b>must</b> call {@link WifiAwareSession#close()} when done with the
* Wi-Fi Aware object.
* <p>
* Note: a Aware cluster is a shared resource - if the device is already attached to a cluster
@@ -237,7 +237,7 @@ public class WifiAwareManager {
* create connections to peers. The device will attach to an existing cluster if it can find
* one or create a new cluster (if it is the first to enable Aware in its vicinity). Results
* (e.g. successful attach to a cluster) are provided to the {@code attachCallback} object.
- * An application <b>must</b> call {@link WifiAwareSession#destroy()} when done with the
+ * An application <b>must</b> call {@link WifiAwareSession#close()} when done with the
* Wi-Fi Aware object.
* <p>
* Note: a Aware cluster is a shared resource - if the device is already attached to a cluster
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareSession.java b/wifi/java/android/net/wifi/aware/WifiAwareSession.java
index ac3a6bba052c..4e060d5ca3f0 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareSession.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareSession.java
@@ -33,7 +33,7 @@ import java.lang.ref.WeakReference;
* This class represents a Wi-Fi Aware session - an attachment to the Wi-Fi Aware service through
* which the app can execute discovery operations.
*/
-public class WifiAwareSession {
+public class WifiAwareSession implements AutoCloseable {
private static final String TAG = "WifiAwareSession";
private static final boolean DBG = false;
private static final boolean VDBG = false; // STOPSHIP if true
@@ -67,7 +67,7 @@ public class WifiAwareSession {
* An application may re-attach after a destroy using
* {@link WifiAwareManager#attach(AttachCallback, Handler)} .
*/
- public void destroy() {
+ public void close() {
WifiAwareManager mgr = mMgr.get();
if (mgr == null) {
Log.w(TAG, "destroy: called post GC on WifiAwareManager");
@@ -85,7 +85,7 @@ public class WifiAwareSession {
try {
if (!mTerminated) {
mCloseGuard.warnIfOpen();
- destroy();
+ close();
}
} finally {
super.finalize();
@@ -110,7 +110,7 @@ public class WifiAwareSession {
* on the {@code callback} object. The resulting publish session can be modified using
* {@link PublishDiscoverySession#updatePublish(PublishConfig)}.
* <p>
- * An application must use the {@link DiscoverySession#destroy()} to
+ * An application must use the {@link DiscoverySession#close()} to
* terminate the publish discovery session once it isn't needed. This will free
* resources as well terminate any on-air transmissions.
* <p>The application must have the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
@@ -156,7 +156,7 @@ public class WifiAwareSession {
* on the {@code callback} object. The resulting subscribe session can be modified using
* {@link SubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
* <p>
- * An application must use the {@link DiscoverySession#destroy()} to
+ * An application must use the {@link DiscoverySession#close()} to
* terminate the subscribe discovery session once it isn't needed. This will free
* resources as well terminate any on-air transmissions.
* <p>The application must have the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
index 14c43fb60599..694b911a51e5 100644
--- a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
@@ -150,7 +150,7 @@ public class WifiAwareManagerTest {
inOrder.verify(mockAwareService).publish(eq(clientId), eq(publishConfig), any());
// (3) disconnect
- session.destroy();
+ session.close();
inOrder.verify(mockAwareService).disconnect(eq(clientId), eq(binder.getValue()));
// (4) try publishing again - fails silently
@@ -329,7 +329,7 @@ public class WifiAwareManagerTest {
inOrder.verify(mockSessionCallback).onSessionConfigFailed();
// (5) terminate
- publishSession.getValue().destroy();
+ publishSession.getValue().close();
mMockLooper.dispatchAll();
inOrder.verify(mockAwareService).terminateSession(clientId, sessionId);
@@ -466,7 +466,7 @@ public class WifiAwareManagerTest {
inOrder.verify(mockSessionCallback).onSessionConfigFailed();
// (5) terminate
- subscribeSession.getValue().destroy();
+ subscribeSession.getValue().close();
mMockLooper.dispatchAll();
inOrder.verify(mockAwareService).terminateSession(clientId, sessionId);