Merge "Import translations. DO NOT MERGE ANYWHERE" into sc-dev
diff --git a/Android.bp b/Android.bp
index 9e1820e..ca014bc 100644
--- a/Android.bp
+++ b/Android.bp
@@ -14,41 +14,6 @@
// Build the master framework library.
-// Defaults for platform code that runs inside system_server
-java_defaults {
- name: "platform_service_defaults",
- plugins: [
- "error_prone_android_framework",
- ],
- errorprone: {
- javacflags: [
- // "-Xep:AndroidFrameworkBinderIdentity:ERROR",
- "-Xep:AndroidFrameworkCompatChange:ERROR",
- // "-Xep:AndroidFrameworkUid:ERROR",
- // NOTE: only enable to generate local patchfiles
- // "-XepPatchChecks:refaster:frameworks/base/errorprone/refaster/EfficientXml.java.refaster",
- // "-XepPatchLocation:/tmp/refaster/",
- ],
- },
-}
-
-// Defaults for platform apps
-java_defaults {
- name: "platform_app_defaults",
- plugins: [
- "error_prone_android_framework",
- ],
- errorprone: {
- javacflags: [
- // We're less worried about performance in app code
- "-Xep:AndroidFrameworkEfficientCollections:OFF",
- "-Xep:AndroidFrameworkEfficientParcelable:OFF",
- "-Xep:AndroidFrameworkEfficientStrings:OFF",
- "-Xep:AndroidFrameworkEfficientXml:OFF",
- ],
- },
-}
-
// READ ME: ########################################################
//
// When updating this list of aidl files, consider if that aidl is
@@ -306,43 +271,6 @@
installable: false,
}
-filegroup {
- name: "framework-jarjar-rules",
- srcs: ["framework-jarjar-rules.txt"],
-}
-
-filegroup {
- name: "libincident_aidl",
- srcs: [
- "core/java/android/os/IIncidentDumpCallback.aidl",
- "core/java/android/os/IIncidentManager.aidl",
- "core/java/android/os/IIncidentReportStatusListener.aidl",
- ],
- path: "core/java",
-}
-
-filegroup {
- name: "libvibrator_aidl",
- srcs: [
- "core/java/android/os/IExternalVibrationController.aidl",
- "core/java/android/os/IExternalVibratorService.aidl",
- ],
- path: "core/java",
-}
-
-filegroup {
- name: "libpowermanager_aidl",
- srcs: [
- "core/java/android/os/Temperature.aidl",
- "core/java/android/os/CoolingDevice.aidl",
- "core/java/android/os/IThermalEventListener.aidl",
- "core/java/android/os/IThermalStatusListener.aidl",
- "core/java/android/os/IThermalService.aidl",
- "core/java/android/os/IPowerManager.aidl",
- ],
- path: "core/java",
-}
-
java_defaults {
name: "framework-minus-apex-defaults",
defaults: ["framework-aidl-export-defaults"],
@@ -363,7 +291,7 @@
"--core-library",
"--multi-dex",
],
- jarjar_rules: ":framework-jarjar-rules",
+ jarjar_rules: "framework-jarjar-rules.txt",
javac_shard_size: 150,
plugins: [
"view-inspector-annotation-processor",
@@ -460,86 +388,6 @@
src: ":framework-minus-apex",
}
-genrule {
- name: "statslog-framework-java-gen",
- tools: ["stats-log-api-gen"],
- cmd: "$(location stats-log-api-gen) --java $(out) --module framework" +
- " --javaPackage com.android.internal.util --javaClass FrameworkStatsLog --worksource",
- out: ["com/android/internal/util/FrameworkStatsLog.java"],
-}
-
-java_library {
- name: "uieventloggerlib",
- srcs: [
- "core/java/com/android/internal/logging/UiEvent.java",
- "core/java/com/android/internal/logging/UiEventLogger.java",
- "core/java/com/android/internal/logging/UiEventLoggerImpl.java",
- "core/java/com/android/internal/logging/InstanceId.java",
- "core/java/com/android/internal/logging/InstanceIdSequence.java",
- ":statslog-framework-java-gen",
- ],
-}
-
-gensrcs {
- name: "framework-javastream-protos",
- depfile: true,
-
- tools: [
- "aprotoc",
- "protoc-gen-javastream",
- "soong_zip",
- ],
-
- cmd: "mkdir -p $(genDir)/$(in) " +
- "&& $(location aprotoc) " +
- " --plugin=$(location protoc-gen-javastream) " +
- " --dependency_out=$(depfile) " +
- " --javastream_out=$(genDir)/$(in) " +
- " -Iexternal/protobuf/src " +
- " -I . " +
- " $(in) " +
- "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)",
-
- srcs: [
- ":ipconnectivity-proto-src",
- ":libstats_atom_enum_protos",
- ":libtombstone_proto-src",
- "core/proto/**/*.proto",
- "libs/incident/**/*.proto",
- ":service-permission-protos",
- ],
- output_extension: "srcjar",
-}
-
-gensrcs {
- name: "framework-cppstream-protos",
- depfile: true,
-
- tools: [
- "aprotoc",
- "protoc-gen-cppstream",
- ],
-
- cmd: "mkdir -p $(genDir) " +
- "&& $(location aprotoc) " +
- " --plugin=$(location protoc-gen-cppstream) " +
- " --dependency_out=$(depfile) " +
- " --cppstream_out=$(genDir) " +
- " -Iexternal/protobuf/src " +
- " -I . " +
- " $(in)",
-
- srcs: [
- ":ipconnectivity-proto-src",
- ":libstats_atom_enum_protos",
- "core/proto/**/*.proto",
- "libs/incident/**/*.proto",
- ":service-permission-protos",
- ],
-
- output_extension: "proto.h",
-}
-
filegroup {
name: "framework-annotations",
srcs: [
@@ -615,76 +463,6 @@
],
}
-filegroup {
- name: "framework-services-net-module-wifi-shared-srcs",
- srcs: [
- "core/java/android/net/DhcpResults.java",
- "core/java/android/util/LocalLog.java",
- ],
-}
-
-// keep these files in sync with the package/Tethering/jarjar-rules.txt and
-// package/Connectivity/jarjar-rules.txt for the tethering module and connectivity module.
-filegroup {
- name: "framework-connectivity-shared-srcs",
- srcs: [
- "core/java/android/util/IndentingPrintWriter.java",
- "core/java/android/util/LocalLog.java",
- // This should be android.util.IndentingPrintWriter, but it's not available in all branches.
- "core/java/com/android/internal/util/IndentingPrintWriter.java",
- "core/java/com/android/internal/util/IState.java",
- "core/java/com/android/internal/util/MessageUtils.java",
- "core/java/com/android/internal/util/State.java",
- "core/java/com/android/internal/util/StateMachine.java",
- "core/java/com/android/internal/util/WakeupMessage.java",
- ],
-}
-
-// keep these files in sync with the apex/jobscheduler/service jarjar-rules.txt for
-// the jobscheduler module.
-filegroup {
- name: "framework-jobscheduler-shared-srcs",
- srcs: [
- "core/java/com/android/internal/util/ArrayUtils.java",
- "core/java/com/android/internal/util/BitUtils.java",
- "core/java/com/android/internal/util/CollectionUtils.java",
- "core/java/com/android/internal/util/ConcurrentUtils.java",
- "core/java/com/android/internal/util/DumpUtils.java",
- "core/java/com/android/internal/util/FastPrintWriter.java",
- "core/java/com/android/internal/util/FastXmlSerializer.java",
- "core/java/com/android/internal/util/FunctionalUtils.java",
- "core/java/com/android/internal/util/ParseUtils.java",
- "core/java/com/android/internal/util/Preconditions.java",
- "core/java/com/android/internal/util/RingBufferIndices.java",
- "core/java/com/android/internal/util/StatLogger.java",
- "core/java/com/android/internal/util/XmlUtils.java",
- ],
-}
-
-// Keep these files in sync with the apex/permission/jarjar-rules.txt for the permission module.
-filegroup {
- name: "framework-permission-s-shared-srcs",
- srcs: [
- "core/java/com/android/internal/infra/AndroidFuture.java",
- "core/java/com/android/internal/infra/ServiceConnector.java",
- "core/java/com/android/internal/util/Preconditions.java",
- "core/java/com/android/internal/infra/AndroidFuture.aidl",
- "core/java/com/android/internal/infra/IAndroidFuture.aidl",
- "core/java/android/os/HandlerExecutor.java",
- ],
- path: "core/java",
-}
-
-// Keep these files in sync with the apex/permission/jarjar-rules.txt for the permission module.
-filegroup {
- name: "service-permission-shared-srcs",
- srcs: [
- "core/java/android/util/IndentingPrintWriter.java",
- "core/java/com/android/internal/util/dump/DualDumpOutputStream.java",
- ],
- path: "core/java",
-}
-
// Build ext.jar
// ============================================================
java_library {
@@ -699,382 +477,6 @@
dxflags: ["--core-library"],
}
-// ==== java proto host library ==============================
-java_library_host {
- name: "platformprotos",
- srcs: [
- ":ipconnectivity-proto-src",
- ":libstats_atom_enum_protos",
- ":libstats_internal_protos",
- ":statsd_internal_protos",
- "cmds/am/proto/instrumentation_data.proto",
- "cmds/statsd/src/**/*.proto",
- "core/proto/**/*.proto",
- "libs/incident/proto/**/*.proto",
- ":service-permission-protos",
- ],
- proto: {
- include_dirs: [
- "external/protobuf/src",
- "frameworks/proto_logging/stats",
- ],
- type: "full",
- },
- // Protos have lots of MissingOverride and similar.
- errorprone: {
- javacflags: ["-XepDisableAllChecks"],
- },
-}
-
-// ==== java proto device library (for test only) ==============================
-java_library {
- name: "platformprotosnano",
- proto: {
- type: "nano",
- output_params: ["store_unknown_fields=true"],
- include_dirs: ["external/protobuf/src"],
- },
- exclude_srcs: [
- "core/proto/android/privacy.proto",
- "core/proto/android/section.proto",
- "core/proto/android/typedef.proto",
- ],
- sdk_version: "9",
- srcs: [
- ":ipconnectivity-proto-src",
- ":libstats_atom_enum_protos",
- "core/proto/**/*.proto",
- "libs/incident/proto/android/os/**/*.proto",
- ":service-permission-protos",
- ],
-}
-
-// ==== java proto device library (for test only) ==============================
-java_library {
- name: "platformprotoslite",
- proto: {
- type: "lite",
- include_dirs: ["external/protobuf/src"],
- },
-
- srcs: [
- ":ipconnectivity-proto-src",
- ":libstats_atom_enum_protos",
- "core/proto/**/*.proto",
- "libs/incident/proto/android/os/**/*.proto",
- ":service-permission-protos",
- ],
- exclude_srcs: [
- "core/proto/android/privacy.proto",
- "core/proto/android/section.proto",
- "core/proto/android/typedef.proto",
- ],
- sdk_version: "core_current",
- // Protos have lots of MissingOverride and similar.
- errorprone: {
- javacflags: ["-XepDisableAllChecks"],
- },
-}
-
-// ==== c++ proto device library ==============================
-cc_defaults {
- name: "libplatformprotos-defaults",
-
- proto: {
- export_proto_headers: true,
- include_dirs: [
- "external/protobuf/src",
- ],
- },
-
- cflags: [
- "-Wall",
- "-Werror",
- "-Wno-unused-parameter",
- ],
-
- srcs: [
- ":ipconnectivity-proto-src",
- ":libstats_atom_enum_protos",
- "core/proto/**/*.proto",
- ":service-permission-protos",
- ],
-}
-
-cc_library {
- name: "libplatformprotos",
- defaults: ["libplatformprotos-defaults"],
- host_supported: true,
-
- target: {
- host: {
- proto: {
- type: "full",
- },
- },
- android: {
- proto: {
- type: "lite",
- },
- shared_libs: [
- "libprotobuf-cpp-lite",
- ],
- shared: {
- enabled: false,
- },
- },
- },
-}
-
-// This library is meant for vendor code that needs to output protobuf. It links
-// against the static version of libprotobuf-cpp-lite, for which we can not guarantee
-// binary compatibility.
-cc_library {
- name: "libplatformprotos-static",
- defaults: ["libplatformprotos-defaults"],
- host_supported: false,
-
- // This is okay because this library is only built as a static library. The C++
- // API is not guaranteed. The proto API is guaranteed to be stable via Metrics Council,
- // but is not authorized to be used outside of debugging.
- vendor_available: true,
-
- target: {
- android: {
- proto: {
- type: "lite",
- },
- static_libs: [
- "libprotobuf-cpp-lite",
- ],
- shared: {
- enabled: false,
- },
- },
- },
-}
-
-// This is the full proto version of libplatformprotos. It may only
-// be used by test code that is not shipped on the device.
-cc_library {
- name: "libplatformprotos-test",
- defaults: ["libplatformprotos-defaults"],
- host_supported: false,
-
- target: {
- android: {
- proto: {
- type: "full",
- },
- shared: {
- enabled: false,
- },
- },
- },
-}
-
-filegroup {
- name: "incremental_aidl",
- srcs: [
- "core/java/android/os/incremental/IIncrementalServiceConnector.aidl",
- "core/java/android/os/incremental/IncrementalFileSystemControlParcel.aidl",
- ],
- path: "core/java",
-}
-
-filegroup {
- name: "dataloader_aidl",
- srcs: [
- "core/java/android/content/pm/DataLoaderParamsParcel.aidl",
- "core/java/android/content/pm/DataLoaderType.aidl",
- "core/java/android/content/pm/FileSystemControlParcel.aidl",
- "core/java/android/content/pm/IDataLoader.aidl",
- "core/java/android/content/pm/IDataLoaderManager.aidl",
- "core/java/android/content/pm/InstallationFileParcel.aidl",
- "core/java/android/content/pm/InstallationFileLocation.aidl",
- "core/java/android/content/pm/IDataLoaderStatusListener.aidl",
- "core/java/android/content/pm/IPackageInstallerSessionFileSystemConnector.aidl",
- ],
- path: "core/java",
-}
-
-filegroup {
- name: "incremental_manager_aidl",
- srcs: [
- "core/java/android/os/incremental/IIncrementalService.aidl",
- "core/java/android/os/incremental/IStorageLoadingProgressListener.aidl",
- "core/java/android/os/incremental/IncrementalNewFileParams.aidl",
- "core/java/android/os/incremental/IStorageHealthListener.aidl",
- "core/java/android/os/incremental/PerUidReadTimeouts.aidl",
- "core/java/android/os/incremental/StorageHealthCheckParams.aidl",
- ],
- path: "core/java",
-}
-
-filegroup {
- name: "activity_manager_procstate_aidl",
- srcs: [
- "core/java/android/app/ProcessStateEnum.aidl",
- ],
- path: "core/java",
-}
-
-cc_defaults {
- name: "incremental_default",
- cflags: [
- "-Wall",
- "-Wextra",
- "-Wextra-semi",
- "-Werror",
- "-Wzero-as-null-pointer-constant",
- "-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION",
- ],
- shared_libs: [
- "libbinder",
- "libutils",
- ],
- aidl: {
- include_dirs: [
- "frameworks/native/aidl/binder",
- ],
- export_aidl_headers: true,
- },
-}
-
-cc_library {
- name: "libincremental_aidl-cpp",
- srcs: [
- ":incremental_aidl",
- ],
- defaults: ["incremental_default"],
-}
-
-cc_library {
- name: "libdataloader_aidl-cpp",
- srcs: [
- ":dataloader_aidl",
- ],
- defaults: ["incremental_default"],
- shared_libs: [
- "libincremental_aidl-cpp",
- ],
-}
-
-cc_library {
- name: "libincremental_manager_aidl-cpp",
- srcs: [
- ":incremental_manager_aidl",
- ],
- defaults: ["incremental_default"],
- shared_libs: [
- "libincremental_aidl-cpp",
- "libdataloader_aidl-cpp",
- ],
-}
-
-// Build Rust bindings for PermissionController. Needed by keystore2.
-aidl_interface {
- name: "android.os.permissions_aidl",
- unstable: true,
- local_include_dir: "core/java",
- srcs: [
- "core/java/android/os/IPermissionController.aidl",
- ],
- backend: {
- rust: {
- enabled: true,
- },
- },
-}
-
-python_defaults {
- name: "base_default",
- version: {
- py2: {
- enabled: false,
- embedded_launcher: false,
- },
- py3: {
- enabled: true,
- embedded_launcher: true,
- },
- },
-}
-
-python_binary_host {
- name: "fontchain_linter",
- defaults: ["base_default"],
- main: "tools/fonts/fontchain_linter.py",
- srcs: [
- "tools/fonts/fontchain_linter.py",
- ],
- libs: [
- "fontTools",
- ],
-}
-
-python_binary_host {
- name: "update_font_metadata",
- defaults: ["base_default"],
- main: "tools/fonts/update_font_metadata.py",
- srcs: [
- "tools/fonts/update_font_metadata.py",
- ],
- libs: [
- "fontTools",
- ],
-}
-
-// Avoid including Parcelable classes as we don't want to have two copies of
-// Parcelable cross the libraries. This is used by telephony-common (frameworks/opt/telephony)
-// and TeleService app (packages/services/Telephony).
-filegroup {
- name: "framework-telephony-common-shared-srcs",
- srcs: [
- "core/java/android/os/RegistrantList.java",
- "core/java/android/os/Registrant.java",
- "core/java/android/util/IndentingPrintWriter.java",
- "core/java/android/util/LocalLog.java",
- "core/java/android/util/TimeUtils.java",
- "core/java/com/android/internal/os/SomeArgs.java",
- "core/java/com/android/internal/util/AsyncChannel.java",
- "core/java/com/android/internal/util/AsyncService.java",
- "core/java/com/android/internal/util/BitwiseInputStream.java",
- "core/java/com/android/internal/util/FastXmlSerializer.java",
- "core/java/com/android/internal/util/HexDump.java",
- "core/java/com/android/internal/util/IState.java",
- "core/java/com/android/internal/util/IndentingPrintWriter.java",
- "core/java/com/android/internal/util/Preconditions.java",
- "core/java/com/android/internal/util/State.java",
- "core/java/com/android/internal/util/StateMachine.java",
- "core/java/com/android/internal/util/UserIcons.java",
- ],
-}
-
-// Avoid including Parcelable classes as we don't want to have two copies of
-// Parcelable cross the process.
-filegroup {
- name: "framework-cellbroadcast-shared-srcs",
- srcs: [
- "core/java/android/os/HandlerExecutor.java",
- "core/java/android/util/LocalLog.java",
- "core/java/com/android/internal/util/IState.java",
- "core/java/com/android/internal/util/Preconditions.java",
- "core/java/com/android/internal/util/State.java",
- "core/java/com/android/internal/util/StateMachine.java",
- ],
-}
-
-filegroup {
- name: "framework-ims-common-shared-srcs",
- srcs: [
- "core/java/android/os/RegistrantList.java",
- "core/java/android/os/Registrant.java",
- "core/java/com/android/internal/os/SomeArgs.java",
- "core/java/com/android/internal/util/Preconditions.java",
- ],
-}
-
// utility classes statically linked into framework-wifi and dynamically linked
// into wifi-service
java_library {
@@ -1102,27 +504,6 @@
],
}
-// utility classes statically linked into wifi-service
-filegroup {
- name: "framework-wifi-service-shared-srcs",
- srcs: [
- "core/java/android/net/InterfaceConfiguration.java",
- "core/java/android/util/BackupUtils.java",
- "core/java/android/util/Rational.java",
- "core/java/com/android/internal/util/FastXmlSerializer.java",
- "core/java/com/android/internal/util/HexDump.java",
- "core/java/com/android/internal/util/IState.java",
- "core/java/com/android/internal/util/MessageUtils.java",
- "core/java/com/android/internal/util/State.java",
- "core/java/com/android/internal/util/StateMachine.java",
- "core/java/com/android/internal/util/WakeupMessage.java",
- ],
- visibility: [
- "//frameworks/opt/net/wifi/service",
- "//packages/modules/Wifi/service",
- ],
-}
-
// TODO(b/145644363): move this to under StubLibraries.bp or ApiDocs.bp
metalava_framework_docs_args = "--manifest $(location core/res/AndroidManifest.xml) " +
"--hide-package com.android.server " +
@@ -1156,32 +537,5 @@
build = [
"StubLibraries.bp",
"ApiDocs.bp",
+ "ProtoLibraries.bp",
]
-
-// protolog start
-filegroup {
- name: "protolog-common-src",
- srcs: [
- "core/java/com/android/internal/protolog/common/**/*.java",
- ],
-}
-
-java_library {
- name: "protolog-lib",
- platform_apis: true,
- srcs: [
- "core/java/com/android/internal/protolog/ProtoLogImpl.java",
- "core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java",
- ":protolog-common-src",
- ],
-}
-
-java_library {
- name: "protolog-groups",
- srcs: [
- "core/java/com/android/internal/protolog/ProtoLogGroup.java",
- ":protolog-common-src",
- ],
-}
-
-// protolog end
diff --git a/OWNERS b/OWNERS
index 710f13e..4970dd1 100644
--- a/OWNERS
+++ b/OWNERS
@@ -30,3 +30,4 @@
per-file Android.mk = file:platform/build/soong:/OWNERS
per-file ApiDocs.bp = file:platform/build/soong:/OWNERS
per-file StubLibraries.bp = file:platform/build/soong:/OWNERS
+per-file ProtoLibraries.bp = file:platform/build/soong:/OWNERS
diff --git a/ProtoLibraries.bp b/ProtoLibraries.bp
new file mode 100644
index 0000000..14415db
--- /dev/null
+++ b/ProtoLibraries.bp
@@ -0,0 +1,247 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+gensrcs {
+ name: "framework-javastream-protos",
+ depfile: true,
+
+ tools: [
+ "aprotoc",
+ "protoc-gen-javastream",
+ "soong_zip",
+ ],
+
+ cmd: "mkdir -p $(genDir)/$(in) " +
+ "&& $(location aprotoc) " +
+ " --plugin=$(location protoc-gen-javastream) " +
+ " --dependency_out=$(depfile) " +
+ " --javastream_out=$(genDir)/$(in) " +
+ " -Iexternal/protobuf/src " +
+ " -I . " +
+ " $(in) " +
+ "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)",
+
+ srcs: [
+ ":ipconnectivity-proto-src",
+ ":libstats_atom_enum_protos",
+ ":libtombstone_proto-src",
+ "core/proto/**/*.proto",
+ "libs/incident/**/*.proto",
+ ":service-permission-protos",
+ ],
+ output_extension: "srcjar",
+}
+
+gensrcs {
+ name: "framework-cppstream-protos",
+ depfile: true,
+
+ tools: [
+ "aprotoc",
+ "protoc-gen-cppstream",
+ ],
+
+ cmd: "mkdir -p $(genDir) " +
+ "&& $(location aprotoc) " +
+ " --plugin=$(location protoc-gen-cppstream) " +
+ " --dependency_out=$(depfile) " +
+ " --cppstream_out=$(genDir) " +
+ " -Iexternal/protobuf/src " +
+ " -I . " +
+ " $(in)",
+
+ srcs: [
+ ":ipconnectivity-proto-src",
+ ":libstats_atom_enum_protos",
+ "core/proto/**/*.proto",
+ "libs/incident/**/*.proto",
+ ":service-permission-protos",
+ ],
+
+ output_extension: "proto.h",
+}
+
+// ==== java proto host library ==============================
+java_library_host {
+ name: "platformprotos",
+ srcs: [
+ ":ipconnectivity-proto-src",
+ ":libstats_atom_enum_protos",
+ ":libstats_internal_protos",
+ ":statsd_internal_protos",
+ "cmds/am/proto/instrumentation_data.proto",
+ "cmds/statsd/src/**/*.proto",
+ "core/proto/**/*.proto",
+ "libs/incident/proto/**/*.proto",
+ ":service-permission-protos",
+ ],
+ proto: {
+ include_dirs: [
+ "external/protobuf/src",
+ "frameworks/proto_logging/stats",
+ ],
+ type: "full",
+ },
+ // Protos have lots of MissingOverride and similar.
+ errorprone: {
+ javacflags: ["-XepDisableAllChecks"],
+ },
+}
+
+// ==== java proto device library (for test only) ==============================
+java_library {
+ name: "platformprotosnano",
+ proto: {
+ type: "nano",
+ output_params: ["store_unknown_fields=true"],
+ include_dirs: ["external/protobuf/src"],
+ },
+ exclude_srcs: [
+ "core/proto/android/privacy.proto",
+ "core/proto/android/section.proto",
+ "core/proto/android/typedef.proto",
+ ],
+ sdk_version: "9",
+ srcs: [
+ ":ipconnectivity-proto-src",
+ ":libstats_atom_enum_protos",
+ "core/proto/**/*.proto",
+ "libs/incident/proto/android/os/**/*.proto",
+ ":service-permission-protos",
+ ],
+}
+
+// ==== java proto device library (for test only) ==============================
+java_library {
+ name: "platformprotoslite",
+ proto: {
+ type: "lite",
+ include_dirs: ["external/protobuf/src"],
+ },
+
+ srcs: [
+ ":ipconnectivity-proto-src",
+ ":libstats_atom_enum_protos",
+ "core/proto/**/*.proto",
+ "libs/incident/proto/android/os/**/*.proto",
+ ":service-permission-protos",
+ ],
+ exclude_srcs: [
+ "core/proto/android/privacy.proto",
+ "core/proto/android/section.proto",
+ "core/proto/android/typedef.proto",
+ ],
+ sdk_version: "core_current",
+ // Protos have lots of MissingOverride and similar.
+ errorprone: {
+ javacflags: ["-XepDisableAllChecks"],
+ },
+}
+
+// ==== c++ proto device library ==============================
+cc_defaults {
+ name: "libplatformprotos-defaults",
+
+ proto: {
+ export_proto_headers: true,
+ include_dirs: [
+ "external/protobuf/src",
+ ],
+ },
+
+ cflags: [
+ "-Wall",
+ "-Werror",
+ "-Wno-unused-parameter",
+ ],
+
+ srcs: [
+ ":ipconnectivity-proto-src",
+ ":libstats_atom_enum_protos",
+ "core/proto/**/*.proto",
+ ":service-permission-protos",
+ ],
+}
+
+cc_library {
+ name: "libplatformprotos",
+ defaults: ["libplatformprotos-defaults"],
+ host_supported: true,
+
+ target: {
+ host: {
+ proto: {
+ type: "full",
+ },
+ },
+ android: {
+ proto: {
+ type: "lite",
+ },
+ shared_libs: [
+ "libprotobuf-cpp-lite",
+ ],
+ shared: {
+ enabled: false,
+ },
+ },
+ },
+}
+
+// This library is meant for vendor code that needs to output protobuf. It links
+// against the static version of libprotobuf-cpp-lite, for which we can not guarantee
+// binary compatibility.
+cc_library {
+ name: "libplatformprotos-static",
+ defaults: ["libplatformprotos-defaults"],
+ host_supported: false,
+
+ // This is okay because this library is only built as a static library. The C++
+ // API is not guaranteed. The proto API is guaranteed to be stable via Metrics Council,
+ // but is not authorized to be used outside of debugging.
+ vendor_available: true,
+
+ target: {
+ android: {
+ proto: {
+ type: "lite",
+ },
+ static_libs: [
+ "libprotobuf-cpp-lite",
+ ],
+ shared: {
+ enabled: false,
+ },
+ },
+ },
+}
+
+// This is the full proto version of libplatformprotos. It may only
+// be used by test code that is not shipped on the device.
+cc_library {
+ name: "libplatformprotos-test",
+ defaults: ["libplatformprotos-defaults"],
+ host_supported: false,
+
+ target: {
+ android: {
+ proto: {
+ type: "full",
+ },
+ shared: {
+ enabled: false,
+ },
+ },
+ },
+}
diff --git a/StubLibraries.bp b/StubLibraries.bp
index 62a0c7e..284e807 100644
--- a/StubLibraries.bp
+++ b/StubLibraries.bp
@@ -313,11 +313,6 @@
name: "android-non-updatable_defaults_stubs_current",
libs: ["stub-annotations"],
static_libs: ["framework-res-package-jar"], // Export package of framework-res
- errorprone: {
- javacflags: [
- "-XepDisableAllChecks",
- ],
- },
sdk_version: "none",
system_modules: "none",
java_version: "1.8",
diff --git a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
index d459c05..44e87c3 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
@@ -176,8 +176,6 @@
/** @hide */
public static final int REASON_DEVICE_DEMO_MODE = 63;
/** @hide */
- public static final int REASON_EXEMPTED_PACKAGE = 64;
- /** @hide */
public static final int REASON_ALLOWLISTED_PACKAGE = 65;
/** @hide */
public static final int REASON_APPOP = 66;
@@ -344,7 +342,6 @@
REASON_INSTR_BACKGROUND_FGS_PERMISSION,
REASON_SYSTEM_ALERT_WINDOW_PERMISSION,
REASON_DEVICE_DEMO_MODE,
- REASON_EXEMPTED_PACKAGE,
REASON_ALLOWLISTED_PACKAGE,
REASON_APPOP,
REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD,
@@ -601,8 +598,6 @@
return "SYSTEM_ALERT_WINDOW_PERMISSION";
case REASON_DEVICE_DEMO_MODE:
return "DEVICE_DEMO_MODE";
- case REASON_EXEMPTED_PACKAGE:
- return "EXEMPTED_PACKAGE";
case REASON_ALLOWLISTED_PACKAGE:
return "ALLOWLISTED_PACKAGE";
case REASON_APPOP:
diff --git a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
index 07231b0..29a5dee 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
@@ -176,8 +176,6 @@
/** @hide */
public static final int REASON_DEVICE_DEMO_MODE = PowerExemptionManager.REASON_DEVICE_DEMO_MODE;
/** @hide */
- public static final int REASON_EXEMPTED_PACKAGE = PowerExemptionManager.REASON_EXEMPTED_PACKAGE;
- /** @hide */
public static final int REASON_ALLOWLISTED_PACKAGE =
PowerExemptionManager.REASON_ALLOWLISTED_PACKAGE;
/** @hide */
@@ -341,7 +339,6 @@
REASON_INSTR_BACKGROUND_FGS_PERMISSION,
REASON_SYSTEM_ALERT_WINDOW_PERMISSION,
REASON_DEVICE_DEMO_MODE,
- REASON_EXEMPTED_PACKAGE,
REASON_ALLOWLISTED_PACKAGE,
REASON_APPOP,
// temp and system allowlist reasons.
diff --git a/apex/media/framework/lint-baseline.xml b/apex/media/framework/lint-baseline.xml
new file mode 100644
index 0000000..e1b1450
--- /dev/null
+++ b/apex/media/framework/lint-baseline.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `new android.media.ApplicationMediaCapabilities.Builder`"
+ errorLine1=" new ApplicationMediaCapabilities.Builder();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java"
+ line="208"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `new android.media.ApplicationMediaCapabilities.Builder`"
+ errorLine1=" ApplicationMediaCapabilities.Builder builder = new ApplicationMediaCapabilities.Builder();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java"
+ line="314"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.os.RemoteException#rethrowFromSystemServer`"
+ errorLine1=" e.rethrowFromSystemServer();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaCommunicationManager.java"
+ line="110"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.os.Parcel#writeParcelableCreator`"
+ errorLine1=" dest.writeParcelableCreator((Parcelable) parcelable);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParceledListSlice.java"
+ line="77"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.os.Parcel#readParcelableCreator`"
+ errorLine1=" return from.readParcelableCreator(loader);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParceledListSlice.java"
+ line="82"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.TrackData#mediaFormat`"
+ errorLine1=" this.mediaFormat = mediaFormat;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="273"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.TrackData#drmInitData`"
+ errorLine1=" this.drmInitData = drmInitData;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="274"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" this.timeMicros = timeMicros;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="295"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" this.position = position;"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="296"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" return "[timeMicros=" + timeMicros + ", position=" + position + "]";"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="302"
+ column="66"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" return "[timeMicros=" + timeMicros + ", position=" + position + "]";"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="302"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level R (current min is 29): `android.media.MediaParser.SeekPoint`"
+ errorLine1=" SeekPoint other = (SeekPoint) obj;"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="313"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" return timeMicros == other.timeMicros && position == other.position;"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="314"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" return timeMicros == other.timeMicros && position == other.position;"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="314"
+ column="66"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" return timeMicros == other.timeMicros && position == other.position;"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="314"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" return timeMicros == other.timeMicros && position == other.position;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="314"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" int result = (int) timeMicros;"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="319"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" result = 31 * result + (int) position;"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="320"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level R (current min is 29): `android.media.MediaParser.InputReader`"
+ errorLine1=" public interface SeekableInputReader extends InputReader {"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="352"
+ column="50"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 31 (current min is 29): `android.media.metrics.LogSessionId#LOG_SESSION_ID_NONE`"
+ errorLine1=" @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1071"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `SeekableInputReader` to `InputReader` requires API level 30 (current min is 29)"
+ errorLine1=" mExoDataReader.mInputReader = seekableInputReader;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1201"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" mPendingSeekPosition = seekPoint.position;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1287"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" mPendingSeekTimeMicros = seekPoint.timeMicros;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1288"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#position`"
+ errorLine1=" mExtractor.seek(seekPoint.position, seekPoint.timeMicros);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1290"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.MediaParser.SeekPoint#timeMicros`"
+ errorLine1=" mExtractor.seek(seekPoint.position, seekPoint.timeMicros);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1290"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level R (current min is 29): `android.media.DrmInitData.SchemeInitData#uuid`"
+ errorLine1=" if (schemeInitData.uuid.equals(schemeUuid)) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1579"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level R (current min is 29): `android.media.MediaParser.InputReader`"
+ errorLine1=" private static final class DataReaderAdapter implements InputReader {"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1872"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level R (current min is 29): `android.media.MediaParser.InputReader`"
+ errorLine1=" private static final class ParsableByteArrayAdapter implements InputReader {"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/apex/media/framework/java/android/media/MediaParser.java"
+ line="1905"
+ column="68"/>
+ </issue>
+
+</issues>
diff --git a/boot/Android.bp b/boot/Android.bp
index 8f6e591..844dd64 100644
--- a/boot/Android.bp
+++ b/boot/Android.bp
@@ -71,4 +71,21 @@
"hiddenapi/hiddenapi-unsupported-packages.txt",
],
},
+
+ dists: [
+ {
+ targets: ["droidcore"],
+ tag: "hiddenapi-flags.csv",
+ },
+ {
+ targets: ["droidcore"],
+ tag: "hiddenapi-index.csv",
+ },
+ {
+ targets: ["droidcore"],
+ tag: "hiddenapi-metadata.csv",
+ // Legacy name
+ dest: "hiddenapi-unsupported.csv",
+ },
+ ],
}
diff --git a/core/api/current.txt b/core/api/current.txt
index dfc98a7..6823f65 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -12086,7 +12086,6 @@
}
public class DataLoaderParams {
- method @NonNull public static final android.content.pm.DataLoaderParams forIncremental(@NonNull android.content.ComponentName, @NonNull String);
method @NonNull public static final android.content.pm.DataLoaderParams forStreaming(@NonNull android.content.ComponentName, @NonNull String);
method @NonNull public final String getArguments();
method @NonNull public final android.content.ComponentName getComponentName();
@@ -12331,7 +12330,6 @@
field public static final String ACTION_SESSION_COMMITTED = "android.content.pm.action.SESSION_COMMITTED";
field public static final String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS";
field public static final String ACTION_SESSION_UPDATED = "android.content.pm.action.SESSION_UPDATED";
- field public static final int DATA_LOADER_TYPE_INCREMENTAL = 2; // 0x2
field public static final int DATA_LOADER_TYPE_NONE = 0; // 0x0
field public static final int DATA_LOADER_TYPE_STREAMING = 1; // 0x1
field public static final String EXTRA_DATA_LOADER_TYPE = "android.content.pm.extra.DATA_LOADER_TYPE";
@@ -55534,13 +55532,16 @@
method public void setChar(@IdRes int, String, char);
method public void setCharSequence(@IdRes int, String, CharSequence);
method public void setCharSequence(@IdRes int, @NonNull String, @StringRes int);
+ method public void setCharSequenceAttr(@IdRes int, @NonNull String, @AttrRes int);
method public void setChronometer(@IdRes int, long, String, boolean);
method public void setChronometerCountDown(@IdRes int, boolean);
method public void setColor(@IdRes int, @NonNull String, @ColorRes int);
+ method public void setColorAttr(@IdRes int, @NonNull String, @AttrRes int);
method public void setColorInt(@IdRes int, @NonNull String, @ColorInt int, @ColorInt int);
method public void setColorStateList(@IdRes int, @NonNull String, @Nullable android.content.res.ColorStateList);
method public void setColorStateList(@IdRes int, @NonNull String, @Nullable android.content.res.ColorStateList, @Nullable android.content.res.ColorStateList);
method public void setColorStateList(@IdRes int, @NonNull String, @ColorRes int);
+ method public void setColorStateListAttr(@IdRes int, @NonNull String, @AttrRes int);
method public void setCompoundButtonChecked(@IdRes int, boolean);
method public void setContentDescription(@IdRes int, CharSequence);
method public void setDisplayedChild(@IdRes int, int);
@@ -55549,6 +55550,7 @@
method public void setFloat(@IdRes int, String, float);
method public void setFloatDimen(@IdRes int, @NonNull String, @DimenRes int);
method public void setFloatDimen(@IdRes int, @NonNull String, float, int);
+ method public void setFloatDimenAttr(@IdRes int, @NonNull String, @AttrRes int);
method public void setIcon(@IdRes int, String, android.graphics.drawable.Icon);
method public void setIcon(@IdRes int, @NonNull String, @Nullable android.graphics.drawable.Icon, @Nullable android.graphics.drawable.Icon);
method public void setImageViewBitmap(@IdRes int, android.graphics.Bitmap);
@@ -55558,6 +55560,7 @@
method public void setInt(@IdRes int, String, int);
method public void setIntDimen(@IdRes int, @NonNull String, @DimenRes int);
method public void setIntDimen(@IdRes int, @NonNull String, float, int);
+ method public void setIntDimenAttr(@IdRes int, @NonNull String, @AttrRes int);
method public void setIntent(@IdRes int, String, android.content.Intent);
method public void setLabelFor(@IdRes int, @IdRes int);
method public void setLightBackgroundLayoutId(@LayoutRes int);
@@ -55583,12 +55586,16 @@
method public void setTextViewTextSize(@IdRes int, int, float);
method public void setUri(@IdRes int, String, android.net.Uri);
method public void setViewLayoutHeight(@IdRes int, float, int);
+ method public void setViewLayoutHeightAttr(@IdRes int, @AttrRes int);
method public void setViewLayoutHeightDimen(@IdRes int, @DimenRes int);
method public void setViewLayoutMargin(@IdRes int, int, float, int);
+ method public void setViewLayoutMarginAttr(@IdRes int, int, @AttrRes int);
method public void setViewLayoutMarginDimen(@IdRes int, int, @DimenRes int);
method public void setViewLayoutWidth(@IdRes int, float, int);
+ method public void setViewLayoutWidthAttr(@IdRes int, @AttrRes int);
method public void setViewLayoutWidthDimen(@IdRes int, @DimenRes int);
method public void setViewOutlinePreferredRadius(@IdRes int, float, int);
+ method public void setViewOutlinePreferredRadiusAttr(@IdRes int, @AttrRes int);
method public void setViewOutlinePreferredRadiusDimen(@IdRes int, @DimenRes int);
method public void setViewPadding(@IdRes int, @Px int, @Px int, @Px int, @Px int);
method public void setViewVisibility(@IdRes int, int);
diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt
index 81a56e6..b1e448b 100644
--- a/core/api/module-lib-current.txt
+++ b/core/api/module-lib-current.txt
@@ -56,7 +56,7 @@
package android.content {
public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
- method @NonNull public static android.net.Uri createContentUriAsUser(@NonNull android.net.Uri, @NonNull android.os.UserHandle);
+ method @NonNull public static android.net.Uri createContentUriForUser(@NonNull android.net.Uri, @NonNull android.os.UserHandle);
}
public abstract class Context {
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index bd36d2c..d42f07d 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -2523,6 +2523,10 @@
method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_PROFILES) public void startActivity(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
}
+ public class DataLoaderParams {
+ method @NonNull public static final android.content.pm.DataLoaderParams forIncremental(@NonNull android.content.ComponentName, @NonNull String);
+ }
+
public final class InstantAppInfo implements android.os.Parcelable {
ctor public InstantAppInfo(android.content.pm.ApplicationInfo, String[], String[]);
ctor public InstantAppInfo(String, CharSequence, String[], String[]);
@@ -2613,6 +2617,7 @@
public class PackageInstaller {
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setPermissionsResult(int, boolean);
+ field public static final int DATA_LOADER_TYPE_INCREMENTAL = 2; // 0x2
}
public static class PackageInstaller.Session implements java.io.Closeable {
@@ -8558,7 +8563,7 @@
method @NonNull public static String formatUid(int);
method public static int getAppId(int);
method public int getIdentifier();
- method public static int getUid(@NonNull android.os.UserHandle, int);
+ method public int getUid(int);
method @Deprecated public boolean isOwner();
method public boolean isSystem();
method public static int myUserId();
@@ -9296,6 +9301,7 @@
field public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications";
field public static final String ODI_CAPTIONS_ENABLED = "odi_captions_enabled";
field public static final String THEME_CUSTOMIZATION_OVERLAY_PACKAGES = "theme_customization_overlay_packages";
+ field public static final String UI_TRANSLATION_ENABLED = "ui_translation_enabled";
field public static final String USER_SETUP_COMPLETE = "user_setup_complete";
field public static final int USER_SETUP_PERSONALIZATION_COMPLETE = 10; // 0xa
field public static final int USER_SETUP_PERSONALIZATION_NOT_STARTED = 0; // 0x0
@@ -9816,7 +9822,6 @@
public final class DisplayHashParams implements android.os.Parcelable {
method public int describeContents();
method @Nullable public android.util.Size getBufferSize();
- method public boolean isBufferScaleWithFiltering();
method public boolean isGrayscaleBuffer();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.service.displayhash.DisplayHashParams> CREATOR;
@@ -9825,7 +9830,6 @@
public static final class DisplayHashParams.Builder {
ctor public DisplayHashParams.Builder();
method @NonNull public android.service.displayhash.DisplayHashParams build();
- method @NonNull public android.service.displayhash.DisplayHashParams.Builder setBufferScaleWithFiltering(boolean);
method @NonNull public android.service.displayhash.DisplayHashParams.Builder setBufferSize(int, int);
method @NonNull public android.service.displayhash.DisplayHashParams.Builder setGrayscaleBuffer(boolean);
}
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index a38f9f4..d59e4f8 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -75,6 +75,10 @@
field public static final int ACCESSIBILITY_TAKE_SCREENSHOT_REQUEST_INTERVAL_TIMES_MS = 1000; // 0x3e8
}
+ public class AccessibilityServiceInfo implements android.os.Parcelable {
+ method @NonNull public android.content.ComponentName getComponentName();
+ }
+
}
package android.animation {
diff --git a/core/java/Android.bp b/core/java/Android.bp
index 919f1e2..1d290de 100644
--- a/core/java/Android.bp
+++ b/core/java/Android.bp
@@ -127,3 +127,329 @@
],
visibility: ["//frameworks/base/test-mock"],
}
+
+filegroup {
+ name: "libincident_aidl",
+ srcs: [
+ "android/os/IIncidentDumpCallback.aidl",
+ "android/os/IIncidentManager.aidl",
+ "android/os/IIncidentReportStatusListener.aidl",
+ ],
+}
+
+filegroup {
+ name: "libvibrator_aidl",
+ srcs: [
+ "android/os/IExternalVibrationController.aidl",
+ "android/os/IExternalVibratorService.aidl",
+ ],
+}
+
+filegroup {
+ name: "libpowermanager_aidl",
+ srcs: [
+ "android/os/Temperature.aidl",
+ "android/os/CoolingDevice.aidl",
+ "android/os/IThermalEventListener.aidl",
+ "android/os/IThermalStatusListener.aidl",
+ "android/os/IThermalService.aidl",
+ "android/os/IPowerManager.aidl",
+ ],
+}
+
+genrule {
+ name: "statslog-framework-java-gen",
+ tools: ["stats-log-api-gen"],
+ cmd: "$(location stats-log-api-gen) --java $(out) --module framework" +
+ " --javaPackage com.android.internal.util --javaClass FrameworkStatsLog --worksource",
+ out: ["com/android/internal/util/FrameworkStatsLog.java"],
+}
+
+java_library {
+ name: "uieventloggerlib",
+ srcs: [
+ "com/android/internal/logging/UiEvent.java",
+ "com/android/internal/logging/UiEventLogger.java",
+ "com/android/internal/logging/UiEventLoggerImpl.java",
+ "com/android/internal/logging/InstanceId.java",
+ "com/android/internal/logging/InstanceIdSequence.java",
+ ":statslog-framework-java-gen",
+ ],
+}
+
+filegroup {
+ name: "framework-services-net-module-wifi-shared-srcs",
+ srcs: [
+ "android/net/DhcpResults.java",
+ "android/util/LocalLog.java",
+ ],
+}
+
+// keep these files in sync with the package/Tethering/jarjar-rules.txt and
+// package/Connectivity/jarjar-rules.txt for the tethering module and connectivity module.
+filegroup {
+ name: "framework-connectivity-shared-srcs",
+ srcs: [
+ "android/util/IndentingPrintWriter.java",
+ "android/util/LocalLog.java",
+ // This should be android.util.IndentingPrintWriter, but it's not available in all branches.
+ "com/android/internal/util/IndentingPrintWriter.java",
+ "com/android/internal/util/IState.java",
+ "com/android/internal/util/MessageUtils.java",
+ "com/android/internal/util/State.java",
+ "com/android/internal/util/StateMachine.java",
+ "com/android/internal/util/WakeupMessage.java",
+ ],
+}
+
+// keep these files in sync with the apex/jobscheduler/service jarjar-rules.txt for
+// the jobscheduler module.
+filegroup {
+ name: "framework-jobscheduler-shared-srcs",
+ srcs: [
+ "com/android/internal/util/ArrayUtils.java",
+ "com/android/internal/util/BitUtils.java",
+ "com/android/internal/util/CollectionUtils.java",
+ "com/android/internal/util/ConcurrentUtils.java",
+ "com/android/internal/util/DumpUtils.java",
+ "com/android/internal/util/FastPrintWriter.java",
+ "com/android/internal/util/FastXmlSerializer.java",
+ "com/android/internal/util/FunctionalUtils.java",
+ "com/android/internal/util/ParseUtils.java",
+ "com/android/internal/util/Preconditions.java",
+ "com/android/internal/util/RingBufferIndices.java",
+ "com/android/internal/util/StatLogger.java",
+ "com/android/internal/util/XmlUtils.java",
+ ],
+}
+
+// Keep these files in sync with the apex/permission/jarjar-rules.txt for the permission module.
+filegroup {
+ name: "framework-permission-s-shared-srcs",
+ srcs: [
+ "com/android/internal/infra/AndroidFuture.java",
+ "com/android/internal/infra/ServiceConnector.java",
+ "com/android/internal/util/Preconditions.java",
+ "com/android/internal/infra/AndroidFuture.aidl",
+ "com/android/internal/infra/IAndroidFuture.aidl",
+ "android/os/HandlerExecutor.java",
+ ],
+}
+
+// Keep these files in sync with the apex/permission/jarjar-rules.txt for the permission module.
+filegroup {
+ name: "service-permission-shared-srcs",
+ srcs: [
+ "android/util/IndentingPrintWriter.java",
+ "com/android/internal/util/dump/DualDumpOutputStream.java",
+ ],
+}
+
+filegroup {
+ name: "incremental_aidl",
+ srcs: [
+ "android/os/incremental/IIncrementalServiceConnector.aidl",
+ "android/os/incremental/IncrementalFileSystemControlParcel.aidl",
+ ],
+}
+
+filegroup {
+ name: "dataloader_aidl",
+ srcs: [
+ "android/content/pm/DataLoaderParamsParcel.aidl",
+ "android/content/pm/DataLoaderType.aidl",
+ "android/content/pm/FileSystemControlParcel.aidl",
+ "android/content/pm/IDataLoader.aidl",
+ "android/content/pm/IDataLoaderManager.aidl",
+ "android/content/pm/InstallationFileParcel.aidl",
+ "android/content/pm/InstallationFileLocation.aidl",
+ "android/content/pm/IDataLoaderStatusListener.aidl",
+ "android/content/pm/IPackageInstallerSessionFileSystemConnector.aidl",
+ ],
+}
+
+filegroup {
+ name: "incremental_manager_aidl",
+ srcs: [
+ "android/os/incremental/IIncrementalService.aidl",
+ "android/os/incremental/IStorageLoadingProgressListener.aidl",
+ "android/os/incremental/IncrementalNewFileParams.aidl",
+ "android/os/incremental/IStorageHealthListener.aidl",
+ "android/os/incremental/PerUidReadTimeouts.aidl",
+ "android/os/incremental/StorageHealthCheckParams.aidl",
+ ],
+}
+
+filegroup {
+ name: "activity_manager_procstate_aidl",
+ srcs: [
+ "android/app/ProcessStateEnum.aidl",
+ ],
+}
+
+cc_defaults {
+ name: "incremental_default",
+ cflags: [
+ "-Wall",
+ "-Wextra",
+ "-Wextra-semi",
+ "-Werror",
+ "-Wzero-as-null-pointer-constant",
+ "-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION",
+ ],
+ shared_libs: [
+ "libbinder",
+ "libutils",
+ ],
+ aidl: {
+ include_dirs: [
+ "frameworks/native/aidl/binder",
+ ],
+ export_aidl_headers: true,
+ },
+}
+
+cc_library {
+ name: "libincremental_aidl-cpp",
+ srcs: [
+ ":incremental_aidl",
+ ],
+ defaults: ["incremental_default"],
+}
+
+cc_library {
+ name: "libdataloader_aidl-cpp",
+ srcs: [
+ ":dataloader_aidl",
+ ],
+ defaults: ["incremental_default"],
+ shared_libs: [
+ "libincremental_aidl-cpp",
+ ],
+}
+
+cc_library {
+ name: "libincremental_manager_aidl-cpp",
+ srcs: [
+ ":incremental_manager_aidl",
+ ],
+ defaults: ["incremental_default"],
+ shared_libs: [
+ "libincremental_aidl-cpp",
+ "libdataloader_aidl-cpp",
+ ],
+}
+
+// Build Rust bindings for PermissionController. Needed by keystore2.
+aidl_interface {
+ name: "android.os.permissions_aidl",
+ unstable: true,
+ local_include_dir: ".",
+ srcs: [
+ "android/os/IPermissionController.aidl",
+ ],
+ backend: {
+ rust: {
+ enabled: true,
+ },
+ },
+}
+
+// Avoid including Parcelable classes as we don't want to have two copies of
+// Parcelable cross the libraries. This is used by telephony-common (frameworks/opt/telephony)
+// and TeleService app (packages/services/Telephony).
+filegroup {
+ name: "framework-telephony-common-shared-srcs",
+ srcs: [
+ "android/os/RegistrantList.java",
+ "android/os/Registrant.java",
+ "android/util/IndentingPrintWriter.java",
+ "android/util/LocalLog.java",
+ "android/util/TimeUtils.java",
+ "com/android/internal/os/SomeArgs.java",
+ "com/android/internal/util/AsyncChannel.java",
+ "com/android/internal/util/AsyncService.java",
+ "com/android/internal/util/BitwiseInputStream.java",
+ "com/android/internal/util/FastXmlSerializer.java",
+ "com/android/internal/util/HexDump.java",
+ "com/android/internal/util/IState.java",
+ "com/android/internal/util/IndentingPrintWriter.java",
+ "com/android/internal/util/Preconditions.java",
+ "com/android/internal/util/State.java",
+ "com/android/internal/util/StateMachine.java",
+ "com/android/internal/util/UserIcons.java",
+ ],
+}
+
+// Avoid including Parcelable classes as we don't want to have two copies of
+// Parcelable cross the process.
+filegroup {
+ name: "framework-cellbroadcast-shared-srcs",
+ srcs: [
+ "android/os/HandlerExecutor.java",
+ "android/util/LocalLog.java",
+ "com/android/internal/util/IState.java",
+ "com/android/internal/util/Preconditions.java",
+ "com/android/internal/util/State.java",
+ "com/android/internal/util/StateMachine.java",
+ ],
+}
+
+filegroup {
+ name: "framework-ims-common-shared-srcs",
+ srcs: [
+ "android/os/RegistrantList.java",
+ "android/os/Registrant.java",
+ "com/android/internal/os/SomeArgs.java",
+ "com/android/internal/util/Preconditions.java",
+ ],
+}
+
+// utility classes statically linked into wifi-service
+filegroup {
+ name: "framework-wifi-service-shared-srcs",
+ srcs: [
+ "android/net/InterfaceConfiguration.java",
+ "android/util/BackupUtils.java",
+ "android/util/Rational.java",
+ "com/android/internal/util/FastXmlSerializer.java",
+ "com/android/internal/util/HexDump.java",
+ "com/android/internal/util/IState.java",
+ "com/android/internal/util/MessageUtils.java",
+ "com/android/internal/util/State.java",
+ "com/android/internal/util/StateMachine.java",
+ "com/android/internal/util/WakeupMessage.java",
+ ],
+ visibility: [
+ "//frameworks/opt/net/wifi/service",
+ "//packages/modules/Wifi/service",
+ ],
+}
+
+// protolog start
+filegroup {
+ name: "protolog-common-src",
+ srcs: [
+ "com/android/internal/protolog/common/**/*.java",
+ ],
+}
+
+java_library {
+ name: "protolog-lib",
+ platform_apis: true,
+ srcs: [
+ "com/android/internal/protolog/ProtoLogImpl.java",
+ "com/android/internal/protolog/ProtoLogViewerConfigReader.java",
+ ":protolog-common-src",
+ ],
+}
+
+java_library {
+ name: "protolog-groups",
+ srcs: [
+ "com/android/internal/protolog/ProtoLogGroup.java",
+ ":protolog-common-src",
+ ],
+}
+
+// protolog end
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 856ed50..01ea026 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -24,6 +24,7 @@
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TestApi;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.compat.annotation.UnsupportedAppUsage;
@@ -522,6 +523,7 @@
/**
* The component name the accessibility service.
*/
+ @NonNull
private ComponentName mComponentName;
/**
@@ -772,13 +774,15 @@
/**
* @hide
*/
- public void setComponentName(ComponentName component) {
+ public void setComponentName(@NonNull ComponentName component) {
mComponentName = component;
}
/**
* @hide
*/
+ @TestApi
+ @NonNull
public ComponentName getComponentName() {
return mComponentName;
}
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index ec7d159..f7ea381 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -2641,9 +2641,8 @@
// WindowContext's resources.
windowTokenClient.attachContext(windowContext);
- // Step 5. Register the window context's token to the server side to associate with a
- // window manager node.
- windowContext.registerWithServer();
+ // Step 5. Associate the WindowContext's token to a DisplayArea.
+ windowContext.attachToDisplayArea();
return windowContext;
}
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 8284203..7e1df1b 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -2655,7 +2655,7 @@
*/
@NonNull
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
- public static Uri createContentUriAsUser(
+ public static Uri createContentUriForUser(
@NonNull Uri contentUri, @NonNull UserHandle userHandle) {
if (!ContentResolver.SCHEME_CONTENT.equals(contentUri.getScheme())) {
throw new IllegalArgumentException(String.format(
diff --git a/core/java/android/content/pm/DataLoaderParams.java b/core/java/android/content/pm/DataLoaderParams.java
index 93db1e1..f808cfd 100644
--- a/core/java/android/content/pm/DataLoaderParams.java
+++ b/core/java/android/content/pm/DataLoaderParams.java
@@ -17,20 +17,24 @@
package android.content.pm;
import android.annotation.NonNull;
+import android.annotation.SystemApi;
import android.content.ComponentName;
/**
- * This class represents the parameters used to configure a Data Loader.
+ * This class represents the parameters used to configure a DataLoader.
+ *
+ * {@see android.service.dataloader.DataLoaderService.DataLoader}
*/
public class DataLoaderParams {
@NonNull
private final DataLoaderParamsParcel mData;
/**
- * Creates and populates set of Data Loader parameters for Streaming installation.
+ * Creates and populates set of DataLoader parameters for Streaming installation.
*
- * @param componentName Data Loader component supporting Streaming installation.
- * @param arguments free form installation arguments
+ * @param componentName the component implementing a DataLoaderService that is responsible
+ * for providing data blocks while streaming.
+ * @param arguments free form installation arguments.
*/
public static final @NonNull DataLoaderParams forStreaming(@NonNull ComponentName componentName,
@NonNull String arguments) {
@@ -40,9 +44,12 @@
/**
* Creates and populates set of Data Loader parameters for Incremental installation.
*
- * @param componentName Data Loader component supporting Incremental installation.
+ * @param componentName DataLoaderService component supporting Incremental installation.
* @param arguments free form installation arguments
+ *
+ * @hide
*/
+ @SystemApi
public static final @NonNull DataLoaderParams forIncremental(
@NonNull ComponentName componentName, @NonNull String arguments) {
return new DataLoaderParams(DataLoaderType.INCREMENTAL, componentName, arguments);
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 0be77e0..8b380b7 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -229,8 +229,7 @@
/**
* Type of DataLoader for this session. Will be one of
- * {@link #DATA_LOADER_TYPE_NONE}, {@link #DATA_LOADER_TYPE_STREAMING},
- * {@link #DATA_LOADER_TYPE_INCREMENTAL}.
+ * {@link #DATA_LOADER_TYPE_NONE}, {@link #DATA_LOADER_TYPE_STREAMING}.
* <p>
* See the individual types documentation for details.
*
@@ -359,7 +358,9 @@
* Streaming installation using Incremental FileSystem.
*
* @see #EXTRA_DATA_LOADER_TYPE
+ * @hide
*/
+ @SystemApi
public static final int DATA_LOADER_TYPE_INCREMENTAL = DataLoaderType.INCREMENTAL;
/**
@@ -1165,7 +1166,7 @@
}
/**
- * Adds a file to session. On commit this file will be pulled from dataLoader {@code
+ * Adds a file to session. On commit this file will be pulled from DataLoader {@code
* android.service.dataloader.DataLoaderService.DataLoader}.
*
* @param location target location for the file. Possible values:
@@ -1180,7 +1181,7 @@
* @param lengthBytes total size of the file being written.
* The system may clear various caches as needed to allocate
* this space.
- * @param metadata additional info use by dataLoader to pull data for the file.
+ * @param metadata additional info use by DataLoader to pull data for the file.
* @param signature additional file signature, e.g.
* <a href="https://source.android.com/security/apksigning/v4.html">APK Signature Scheme v4</a>
* @throws SecurityException if called after the session has been
@@ -2021,7 +2022,7 @@
/**
* Set the data loader params for the session.
- * This also switches installation into data provider mode and disallow direct writes into
+ * This also switches installation into data loading mode and disallow direct writes into
* staging folder.
*
* @see android.service.dataloader.DataLoaderService.DataLoader
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index c45615d..bba2fd0 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -2639,8 +2639,12 @@
public static final String FEATURE_SE_OMAPI_SD = "android.hardware.se.omapi.sd";
/**
- * Feature for {@link #getSystemAvailableFeatures} and
- * {@link #hasSystemFeature}: The device is compatible with Android’s security model.
+ * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device is
+ * compatible with Android’s security model.
+ *
+ * <p>See sections 2 and 9 in the
+ * <a href="https://source.android.com/compatibility/android-cdd">Android CDD</a> for more
+ * details.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SECURITY_MODEL_COMPATIBLE =
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 7b6e129..ab9e0df 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -1268,12 +1268,17 @@
return context.getString(
com.android.internal.R.string.fingerprint_error_security_update_required);
case FINGERPRINT_ERROR_VENDOR: {
- String[] msgArray = context.getResources().getStringArray(
- com.android.internal.R.array.fingerprint_error_vendor);
- if (vendorCode < msgArray.length) {
+ String[] msgArray = context.getResources().getStringArray(
+ com.android.internal.R.array.fingerprint_error_vendor);
+ if (vendorCode < msgArray.length) {
+ if (Build.IS_ENG || Build.IS_USERDEBUG) {
return msgArray[vendorCode];
+ } else {
+ return context.getString(
+ com.android.internal.R.string.fingerprint_error_unable_to_process);
}
}
+ }
}
Slog.w(TAG, "Invalid error message: " + errMsg + ", " + vendorCode);
return null;
@@ -1302,12 +1307,17 @@
return context.getString(
com.android.internal.R.string.fingerprint_acquired_too_fast);
case FINGERPRINT_ACQUIRED_VENDOR: {
- String[] msgArray = context.getResources().getStringArray(
- com.android.internal.R.array.fingerprint_acquired_vendor);
- if (vendorCode < msgArray.length) {
+ String[] msgArray = context.getResources().getStringArray(
+ com.android.internal.R.array.fingerprint_acquired_vendor);
+ if (vendorCode < msgArray.length) {
+ if (Build.IS_ENG || Build.IS_USERDEBUG) {
return msgArray[vendorCode];
+ } else {
+ return context.getString(
+ com.android.internal.R.string.fingerprint_error_unable_to_process);
}
}
+ }
break;
case FINGERPRINT_ACQUIRED_START:
return null;
diff --git a/core/java/android/hardware/fingerprint/IUdfpsHbmListener.aidl b/core/java/android/hardware/fingerprint/IUdfpsHbmListener.aidl
index b79d6e0..1551e07 100644
--- a/core/java/android/hardware/fingerprint/IUdfpsHbmListener.aidl
+++ b/core/java/android/hardware/fingerprint/IUdfpsHbmListener.aidl
@@ -24,6 +24,13 @@
* @hide
*/
oneway interface IUdfpsHbmListener {
+
+ /** HBM that applies to the whole screen. */
+ const int GLOBAL_HBM = 0;
+
+ /** HBM that only applies to a portion of the screen. */
+ const int LOCAL_HBM = 1;
+
/**
* UdfpsController will call this method when the HBM is enabled.
*
diff --git a/core/java/android/hardware/input/InputDeviceVibrator.java b/core/java/android/hardware/input/InputDeviceVibrator.java
index a4817ae..d8150e4 100644
--- a/core/java/android/hardware/input/InputDeviceVibrator.java
+++ b/core/java/android/hardware/input/InputDeviceVibrator.java
@@ -20,11 +20,13 @@
import android.annotation.NonNull;
import android.app.ActivityThread;
import android.content.Context;
+import android.hardware.vibrator.IVibrator;
import android.os.Binder;
import android.os.IVibratorStateListener;
import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
+import android.os.VibratorInfo;
import android.util.ArrayMap;
import android.util.Log;
@@ -41,7 +43,7 @@
// mDeviceId represents InputDevice ID the vibrator belongs to
private final int mDeviceId;
- private final int mVibratorId;
+ private final VibratorInfo mVibratorInfo;
private final Binder mToken;
private final InputManager mInputManager;
@@ -52,7 +54,13 @@
InputDeviceVibrator(InputManager inputManager, int deviceId, int vibratorId) {
mInputManager = inputManager;
mDeviceId = deviceId;
- mVibratorId = vibratorId;
+ mVibratorInfo = new VibratorInfo.Builder(vibratorId)
+ .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
+ // Set predefined support to empty as we know input devices do not support them.
+ .setSupportedEffects()
+ .setSupportedPrimitives()
+ .setSupportedBraking()
+ .build();
mToken = new Binder();
}
@@ -74,8 +82,8 @@
}
@Override
- public int getId() {
- return mVibratorId;
+ protected VibratorInfo getInfo() {
+ return mVibratorInfo;
}
@Override
@@ -159,7 +167,7 @@
@Override
public boolean hasAmplitudeControl() {
- return true;
+ return mVibratorInfo.hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL);
}
/**
@@ -175,4 +183,9 @@
public void cancel() {
mInputManager.cancelVibrate(mDeviceId, mToken);
}
+
+ @Override
+ public void cancel(int usageFilter) {
+ cancel();
+ }
}
diff --git a/core/java/android/hardware/input/InputDeviceVibratorManager.java b/core/java/android/hardware/input/InputDeviceVibratorManager.java
index ed0efff..7caff72 100644
--- a/core/java/android/hardware/input/InputDeviceVibratorManager.java
+++ b/core/java/android/hardware/input/InputDeviceVibratorManager.java
@@ -134,4 +134,9 @@
public void cancel() {
mInputManager.cancelVibrate(mDeviceId, mToken);
}
+
+ @Override
+ public void cancel(int usageFilter) {
+ cancel();
+ }
}
diff --git a/core/java/android/os/IVibratorManagerService.aidl b/core/java/android/os/IVibratorManagerService.aidl
index c58cc4f..a0d6ce1 100644
--- a/core/java/android/os/IVibratorManagerService.aidl
+++ b/core/java/android/os/IVibratorManagerService.aidl
@@ -32,5 +32,5 @@
in CombinedVibration vibration, in VibrationAttributes attributes);
void vibrate(int uid, String opPkg, in CombinedVibration vibration,
in VibrationAttributes attributes, String reason, IBinder token);
- void cancelVibrate(IBinder token);
+ void cancelVibrate(int usageFilter, IBinder token);
}
diff --git a/core/java/android/os/NullVibrator.java b/core/java/android/os/NullVibrator.java
index 6bb0165..7859b5c 100644
--- a/core/java/android/os/NullVibrator.java
+++ b/core/java/android/os/NullVibrator.java
@@ -54,4 +54,8 @@
@Override
public void cancel() {
}
+
+ @Override
+ public void cancel(int usageFilter) {
+ }
}
diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java
index 2e8ecb5..fd8948c 100644
--- a/core/java/android/os/SystemVibrator.java
+++ b/core/java/android/os/SystemVibrator.java
@@ -28,7 +28,6 @@
import com.android.internal.annotations.GuardedBy;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Objects;
import java.util.concurrent.Executor;
@@ -50,6 +49,9 @@
private final ArrayMap<OnVibratorStateChangedListener, AllVibratorsStateListener>
mRegisteredListeners = new ArrayMap<>();
+ private final Object mLock = new Object();
+ private AllVibratorsInfo mVibratorInfo;
+
@UnsupportedAppUsage
public SystemVibrator(Context context) {
super(context);
@@ -58,6 +60,25 @@
}
@Override
+ protected VibratorInfo getInfo() {
+ synchronized (mLock) {
+ if (mVibratorInfo != null) {
+ return mVibratorInfo;
+ }
+ if (mVibratorManager == null) {
+ Log.w(TAG, "Failed to retrieve vibrator info; no vibrator manager.");
+ return VibratorInfo.EMPTY_VIBRATOR_INFO;
+ }
+ int[] vibratorIds = mVibratorManager.getVibratorIds();
+ VibratorInfo[] vibratorInfos = new VibratorInfo[vibratorIds.length];
+ for (int i = 0; i < vibratorIds.length; i++) {
+ vibratorInfos[i] = mVibratorManager.getVibrator(vibratorIds[i]).getInfo();
+ }
+ return mVibratorInfo = new AllVibratorsInfo(vibratorInfos);
+ }
+ }
+
+ @Override
public boolean hasVibrator() {
if (mVibratorManager == null) {
Log.w(TAG, "Failed to check if vibrator exists; no vibrator manager.");
@@ -144,20 +165,7 @@
@Override
public boolean hasAmplitudeControl() {
- if (mVibratorManager == null) {
- Log.w(TAG, "Failed to check vibrator has amplitude control; no vibrator manager.");
- return false;
- }
- int[] vibratorIds = mVibratorManager.getVibratorIds();
- if (vibratorIds.length == 0) {
- return false;
- }
- for (int vibratorId : vibratorIds) {
- if (!mVibratorManager.getVibrator(vibratorId).hasAmplitudeControl()) {
- return false;
- }
- }
- return true;
+ return getInfo().hasAmplitudeControl();
}
@Override
@@ -184,70 +192,6 @@
}
@Override
- public int[] areEffectsSupported(@VibrationEffect.EffectType int... effectIds) {
- int[] supported = new int[effectIds.length];
- if (mVibratorManager == null) {
- Log.w(TAG, "Failed to check supported effects; no vibrator manager.");
- Arrays.fill(supported, Vibrator.VIBRATION_EFFECT_SUPPORT_NO);
- return supported;
- }
- int[] vibratorIds = mVibratorManager.getVibratorIds();
- if (vibratorIds.length == 0) {
- Arrays.fill(supported, Vibrator.VIBRATION_EFFECT_SUPPORT_NO);
- return supported;
- }
- int[][] vibratorSupportMap = new int[vibratorIds.length][effectIds.length];
- for (int i = 0; i < vibratorIds.length; i++) {
- vibratorSupportMap[i] = mVibratorManager.getVibrator(
- vibratorIds[i]).areEffectsSupported(effectIds);
- }
- Arrays.fill(supported, Vibrator.VIBRATION_EFFECT_SUPPORT_YES);
- for (int effectIdx = 0; effectIdx < effectIds.length; effectIdx++) {
- for (int vibratorIdx = 0; vibratorIdx < vibratorIds.length; vibratorIdx++) {
- int effectSupported = vibratorSupportMap[vibratorIdx][effectIdx];
- if (effectSupported == Vibrator.VIBRATION_EFFECT_SUPPORT_NO) {
- supported[effectIdx] = Vibrator.VIBRATION_EFFECT_SUPPORT_NO;
- break;
- } else if (effectSupported == Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN) {
- supported[effectIdx] = Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN;
- }
- }
- }
- return supported;
- }
-
- @Override
- public boolean[] arePrimitivesSupported(
- @NonNull @VibrationEffect.Composition.PrimitiveType int... primitiveIds) {
- boolean[] supported = new boolean[primitiveIds.length];
- if (mVibratorManager == null) {
- Log.w(TAG, "Failed to check supported primitives; no vibrator manager.");
- Arrays.fill(supported, false);
- return supported;
- }
- int[] vibratorIds = mVibratorManager.getVibratorIds();
- if (vibratorIds.length == 0) {
- Arrays.fill(supported, false);
- return supported;
- }
- boolean[][] vibratorSupportMap = new boolean[vibratorIds.length][primitiveIds.length];
- for (int i = 0; i < vibratorIds.length; i++) {
- vibratorSupportMap[i] = mVibratorManager.getVibrator(
- vibratorIds[i]).arePrimitivesSupported(primitiveIds);
- }
- Arrays.fill(supported, true);
- for (int primitiveIdx = 0; primitiveIdx < primitiveIds.length; primitiveIdx++) {
- for (int vibratorIdx = 0; vibratorIdx < vibratorIds.length; vibratorIdx++) {
- if (!vibratorSupportMap[vibratorIdx][primitiveIdx]) {
- supported[primitiveIdx] = false;
- break;
- }
- }
- }
- return supported;
- }
-
- @Override
public void cancel() {
if (mVibratorManager == null) {
Log.w(TAG, "Failed to cancel vibrate; no vibrator manager.");
@@ -256,6 +200,15 @@
mVibratorManager.cancel();
}
+ @Override
+ public void cancel(int usageFilter) {
+ if (mVibratorManager == null) {
+ Log.w(TAG, "Failed to cancel vibrate; no vibrator manager.");
+ return;
+ }
+ mVibratorManager.cancel(usageFilter);
+ }
+
/**
* Tries to unregister individual {@link android.os.Vibrator.OnVibratorStateChangedListener}
* that were left registered to vibrators after failures to register them to all vibrators.
@@ -295,6 +248,58 @@
}
}
+ /**
+ * Represents all the vibrators information as a single {@link VibratorInfo}.
+ *
+ * <p>This uses the first vibrator on the list as the default one for all hardware spec, but
+ * uses an intersection of all vibrators to decide the capabilities and effect/primitive
+ * support.
+ */
+ private static class AllVibratorsInfo extends VibratorInfo {
+ private final VibratorInfo[] mVibratorInfos;
+
+ AllVibratorsInfo(VibratorInfo[] vibrators) {
+ super(/* id= */ -1, capabilitiesIntersection(vibrators),
+ vibrators.length > 0 ? vibrators[0] : VibratorInfo.EMPTY_VIBRATOR_INFO);
+ mVibratorInfos = vibrators;
+ }
+
+ @Override
+ public int isEffectSupported(int effectId) {
+ int supported = Vibrator.VIBRATION_EFFECT_SUPPORT_YES;
+ for (VibratorInfo info : mVibratorInfos) {
+ int effectSupported = info.isEffectSupported(effectId);
+ if (effectSupported == Vibrator.VIBRATION_EFFECT_SUPPORT_NO) {
+ return effectSupported;
+ } else if (effectSupported == Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN) {
+ supported = effectSupported;
+ }
+ }
+ return supported;
+ }
+
+ @Override
+ public boolean isPrimitiveSupported(int primitiveId) {
+ for (VibratorInfo info : mVibratorInfos) {
+ if (!info.isPrimitiveSupported(primitiveId)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static int capabilitiesIntersection(VibratorInfo[] infos) {
+ if (infos.length == 0) {
+ return 0;
+ }
+ int intersection = ~0;
+ for (VibratorInfo info : infos) {
+ intersection &= info.getCapabilities();
+ }
+ return intersection;
+ }
+ }
+
/** Listener for all vibrators state change. */
private static class AllVibratorsStateListener {
private final Object mLock = new Object();
diff --git a/core/java/android/os/SystemVibratorManager.java b/core/java/android/os/SystemVibratorManager.java
index 84a1016..c33603d 100644
--- a/core/java/android/os/SystemVibratorManager.java
+++ b/core/java/android/os/SystemVibratorManager.java
@@ -146,12 +146,21 @@
@Override
public void cancel() {
+ cancelVibration(/* usageFilter= */ -1);
+ }
+
+ @Override
+ public void cancel(int usageFilter) {
+ cancelVibration(usageFilter);
+ }
+
+ private void cancelVibration(int usageFilter) {
if (mService == null) {
Log.w(TAG, "Failed to cancel vibration; no vibrator manager service.");
return;
}
try {
- mService.cancelVibrate(mToken);
+ mService.cancelVibrate(usageFilter, mToken);
} catch (RemoteException e) {
Log.w(TAG, "Failed to cancel vibration.", e);
}
@@ -185,8 +194,8 @@
}
@Override
- public int getId() {
- return mVibratorInfo.getId();
+ protected VibratorInfo getInfo() {
+ return mVibratorInfo;
}
@Override
@@ -200,86 +209,34 @@
}
@Override
- public float getResonantFrequency() {
- return mVibratorInfo.getResonantFrequency();
- }
-
- @Override
- public float getQFactor() {
- return mVibratorInfo.getQFactor();
- }
-
- @NonNull
- @Override
- public int[] areEffectsSupported(@NonNull int... effectIds) {
- int[] supported = new int[effectIds.length];
- for (int i = 0; i < effectIds.length; i++) {
- supported[i] = mVibratorInfo.isEffectSupported(effectIds[i]);
- }
- return supported;
- }
-
- @Override
- public boolean[] arePrimitivesSupported(
- @NonNull @VibrationEffect.Composition.PrimitiveType int... primitiveIds) {
- boolean[] supported = new boolean[primitiveIds.length];
- for (int i = 0; i < primitiveIds.length; i++) {
- supported[i] = mVibratorInfo.isPrimitiveSupported(primitiveIds[i]);
- }
- return supported;
- }
-
- @Override
public boolean setAlwaysOnEffect(int uid, String opPkg, int alwaysOnId,
@Nullable VibrationEffect effect, @Nullable AudioAttributes attributes) {
- if (mService == null) {
- Log.w(TAG, "Failed to set always-on effect on vibrator " + mVibratorInfo.getId()
- + "; no vibrator manager service.");
- return false;
- }
- try {
- VibrationAttributes attr = new VibrationAttributes.Builder(
- attributes, effect).build();
- CombinedVibration combined = CombinedVibration.startParallel()
- .addVibrator(mVibratorInfo.getId(), effect)
- .combine();
- return mService.setAlwaysOnEffect(uid, opPkg, alwaysOnId, combined, attr);
- } catch (RemoteException e) {
- Log.w(TAG, "Failed to set always-on effect on vibrator " + mVibratorInfo.getId());
- }
- return false;
+ VibrationAttributes attr = new VibrationAttributes.Builder(
+ attributes, effect).build();
+ CombinedVibration combined = CombinedVibration.startParallel()
+ .addVibrator(mVibratorInfo.getId(), effect)
+ .combine();
+ return SystemVibratorManager.this.setAlwaysOnEffect(uid, opPkg, alwaysOnId, combined,
+ attr);
}
@Override
public void vibrate(int uid, String opPkg, @NonNull VibrationEffect vibe, String reason,
@NonNull VibrationAttributes attributes) {
- if (mService == null) {
- Log.w(TAG, "Failed to vibrate on vibrator " + mVibratorInfo.getId()
- + "; no vibrator manager service.");
- return;
- }
- try {
- CombinedVibration combined = CombinedVibration.startParallel()
- .addVibrator(mVibratorInfo.getId(), vibe)
- .combine();
- mService.vibrate(uid, opPkg, combined, attributes, reason, mToken);
- } catch (RemoteException e) {
- Log.w(TAG, "Failed to vibrate.", e);
- }
+ CombinedVibration combined = CombinedVibration.startParallel()
+ .addVibrator(mVibratorInfo.getId(), vibe)
+ .combine();
+ SystemVibratorManager.this.vibrate(uid, opPkg, combined, reason, attributes);
}
@Override
public void cancel() {
- if (mService == null) {
- Log.w(TAG, "Failed to cancel vibration on vibrator " + mVibratorInfo.getId()
- + "; no vibrator manager service.");
- return;
- }
- try {
- mService.cancelVibrate(mToken);
- } catch (RemoteException e) {
- Log.w(TAG, "Failed to cancel vibration on vibrator " + mVibratorInfo.getId(), e);
- }
+ SystemVibratorManager.this.cancel();
+ }
+
+ @Override
+ public void cancel(int usageFilter) {
+ SystemVibratorManager.this.cancel(usageFilter);
}
@Override
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 2119e7b..4a6216e 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -326,16 +326,15 @@
}
/**
- * Returns the uid that is composed from the userHandle and the appId.
+ * Returns the uid representing the given appId for this UserHandle.
*
- * @param userHandle the UserHandle to compose the uid
* @param appId the AppId to compose the uid
- * @return the uid that is composed from the userHandle and the appId
+ * @return the uid representing the given appId for this UserHandle
* @hide
*/
@SystemApi
- public static int getUid(@NonNull UserHandle userHandle, @AppIdInt int appId) {
- return getUid(userHandle.getIdentifier(), appId);
+ public int getUid(@AppIdInt int appId) {
+ return getUid(getIdentifier(), appId);
}
/**
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index a0f70c8..2876775 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -17,6 +17,7 @@
package android.os;
import android.annotation.CallbackExecutor;
+import android.annotation.FloatRange;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -26,12 +27,13 @@
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
+import android.hardware.vibrator.IVibrator;
import android.media.AudioAttributes;
import android.util.Log;
+import android.util.Range;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.util.Arrays;
import java.util.concurrent.Executor;
/**
@@ -156,6 +158,11 @@
return ctx != null ? ctx.getResources().getInteger(resId) : VIBRATION_INTENSITY_MEDIUM;
}
+ /** @hide */
+ protected VibratorInfo getInfo() {
+ return VibratorInfo.EMPTY_VIBRATOR_INFO;
+ }
+
/**
* Get the default vibration intensity for haptic feedback.
*
@@ -190,7 +197,7 @@
* service, or -1 this service is not attached to any physical vibrator.
*/
public int getId() {
- return -1;
+ return getInfo().getId();
}
/**
@@ -208,14 +215,26 @@
public abstract boolean hasAmplitudeControl();
/**
+ * Check whether the vibrator has independent frequency control.
+ *
+ * @return True if the hardware can control the frequency of the vibrations, otherwise false.
+ * @hide
+ */
+ public boolean hasFrequencyControl() {
+ // We currently can only control frequency of the vibration using the compose PWLE method.
+ return getInfo().hasCapability(
+ IVibrator.CAP_FREQUENCY_CONTROL | IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+ }
+
+ /**
* Gets the resonant frequency of the vibrator.
*
* @return the resonant frequency of the vibrator, or {@link Float#NaN NaN} if it's unknown or
- * this vibrator is a composite of multiple physical devices.
+ * this vibrator is a composite of multiple physical devices.
* @hide
*/
public float getResonantFrequency() {
- return Float.NaN;
+ return getInfo().getResonantFrequency();
}
/**
@@ -226,7 +245,44 @@
* @hide
*/
public float getQFactor() {
- return Float.NaN;
+ return getInfo().getQFactor();
+ }
+
+ /**
+ * Return a range of relative frequency values supported by the vibrator.
+ *
+ * <p>These values can be used to create waveforms that controls the vibration frequency via
+ * {@link VibrationEffect.WaveformBuilder}.
+ *
+ * @return A range of relative frequency values supported. The range will always contain the
+ * value 0, representing the device resonant frequency. Devices without frequency control will
+ * return the range [0,0]. Devices with frequency control will always return a range containing
+ * the safe range [-1, 1].
+ * @hide
+ */
+ public Range<Float> getRelativeFrequencyRange() {
+ return getInfo().getFrequencyRange();
+ }
+
+ /**
+ * Return the maximum amplitude the vibrator can play at given relative frequency.
+ *
+ * <p>Devices without frequency control will return 1 for the input zero (resonant frequency),
+ * and 0 to any other input.
+ *
+ * <p>Devices with frequency control will return the supported value, for input in
+ * {@link #getRelativeFrequencyRange()}, and 0 for any other input.
+ *
+ * <p>These values can be used to create waveforms that plays vibrations outside the resonant
+ * frequency via {@link VibrationEffect.WaveformBuilder}.
+ *
+ * @return a value in [0,1] representing the maximum amplitude the device can play at given
+ * relative frequency.
+ * @hide
+ */
+ @FloatRange(from = 0, to = 1)
+ public float getMaximumAmplitude(float relativeFrequency) {
+ return getInfo().getMaxAmplitude(relativeFrequency);
}
/**
@@ -414,9 +470,12 @@
@VibrationEffectSupport
public int[] areEffectsSupported(
@NonNull @VibrationEffect.EffectType int... effectIds) {
- final int[] support = new int[effectIds.length];
- Arrays.fill(support, VIBRATION_EFFECT_SUPPORT_NO);
- return support;
+ VibratorInfo info = getInfo();
+ int[] supported = new int[effectIds.length];
+ for (int i = 0; i < effectIds.length; i++) {
+ supported[i] = info.isEffectSupported(effectIds[i]);
+ }
+ return supported;
}
/**
@@ -468,7 +527,12 @@
@NonNull
public boolean[] arePrimitivesSupported(
@NonNull @VibrationEffect.Composition.PrimitiveType int... primitiveIds) {
- return new boolean[primitiveIds.length];
+ VibratorInfo info = getInfo();
+ boolean[] supported = new boolean[primitiveIds.length];
+ for (int i = 0; i < primitiveIds.length; i++) {
+ supported[i] = info.isPrimitiveSupported(primitiveIds[i]);
+ }
+ return supported;
}
/**
@@ -494,6 +558,16 @@
public abstract void cancel();
/**
+ * Cancel specific types of ongoing vibrations.
+ *
+ * @param usageFilter The type of vibration to be cancelled, represented as a bitwise
+ * combination of {@link VibrationAttributes.Usage} values.
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.VIBRATE)
+ public abstract void cancel(int usageFilter);
+
+ /**
* Check whether the vibrator is vibrating.
*
* @return True if the hardware is vibrating, otherwise false.
diff --git a/core/java/android/os/VibratorInfo.java b/core/java/android/os/VibratorInfo.java
index 671daa0..c7d66f0 100644
--- a/core/java/android/os/VibratorInfo.java
+++ b/core/java/android/os/VibratorInfo.java
@@ -38,9 +38,12 @@
*
* @hide
*/
-public final class VibratorInfo implements Parcelable {
+public class VibratorInfo implements Parcelable {
private static final String TAG = "VibratorInfo";
+ /** @hide */
+ public static final VibratorInfo EMPTY_VIBRATOR_INFO = new VibratorInfo.Builder(-1).build();
+
private final int mId;
private final long mCapabilities;
@Nullable
@@ -74,6 +77,23 @@
mFrequencyMapping = frequencyMapping;
}
+ protected VibratorInfo(int id, int capabilities, VibratorInfo baseVibrator) {
+ mId = id;
+ mCapabilities = capabilities;
+ mSupportedEffects = baseVibrator.mSupportedEffects == null ? null :
+ baseVibrator.mSupportedEffects.clone();
+ mSupportedBraking = baseVibrator.mSupportedBraking == null ? null :
+ baseVibrator.mSupportedBraking.clone();
+ mSupportedPrimitives = baseVibrator.mSupportedPrimitives == null ? null :
+ baseVibrator.mSupportedPrimitives.clone();
+ mQFactor = baseVibrator.mQFactor;
+ mFrequencyMapping = new FrequencyMapping(baseVibrator.mFrequencyMapping.mMinFrequencyHz,
+ baseVibrator.mFrequencyMapping.mResonantFrequencyHz,
+ baseVibrator.mFrequencyMapping.mFrequencyResolutionHz,
+ baseVibrator.mFrequencyMapping.mSuggestedSafeRangeHz,
+ baseVibrator.mFrequencyMapping.mMaxAmplitudes);
+ }
+
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mId);
@@ -145,6 +165,7 @@
* Returns a default value to be applied to composed PWLE effects for braking.
*
* @return a supported braking value, one of android.hardware.vibrator.Braking.*
+ * @hide
*/
public int getDefaultBraking() {
if (mSupportedBraking != null) {
@@ -265,6 +286,10 @@
return mFrequencyMapping.toHertz(relativeFrequency);
}
+ protected long getCapabilities() {
+ return mCapabilities;
+ }
+
private String[] getCapabilitiesNames() {
List<String> names = new ArrayList<>();
if (hasCapability(IVibrator.CAP_ON_CALLBACK)) {
@@ -370,7 +395,7 @@
* <p>The mapping is defined linearly by the following points:
*
* <ol>
- * <li>{@code toHertz(relativeMinFrequency} = minFrequency
+ * <li>{@code toHertz(relativeMinFrequency) = minFrequency}
* <li>{@code toHertz(-1) = resonantFrequency - safeRange / 2}
* <li>{@code toHertz(0) = resonantFrequency}
* <li>{@code toHertz(1) = resonantFrequency + safeRange / 2}
@@ -555,6 +580,75 @@
};
}
+ /** @hide */
+ public static final class Builder {
+ private final int mId;
+ private int mCapabilities = 0;
+ private int[] mSupportedEffects = null;
+ private int[] mSupportedBraking = null;
+ private int[] mSupportedPrimitives = null;
+ private float mQFactor = Float.NaN;
+ private FrequencyMapping mFrequencyMapping =
+ new FrequencyMapping(Float.NaN, Float.NaN, Float.NaN, Float.NaN, null);
+
+ /** A builder class for a {@link VibratorInfo}. */
+ public Builder(int id) {
+ mId = id;
+ }
+
+ /** Configure the vibrator capabilities with a combination of IVibrator.CAP_* values. */
+ @NonNull
+ public Builder setCapabilities(int capabilities) {
+ mCapabilities = capabilities;
+ return this;
+ }
+
+ /** Configure the effects supported with {@link android.hardware.vibrator.Effect} values. */
+ @NonNull
+ public Builder setSupportedEffects(int... supportedEffects) {
+ mSupportedEffects = supportedEffects;
+ return this;
+ }
+
+ /** Configure braking supported with {@link android.hardware.vibrator.Braking} values. */
+ @NonNull
+ public Builder setSupportedBraking(int... supportedBraking) {
+ mSupportedBraking = supportedBraking;
+ return this;
+ }
+
+ /**
+ * Configure the primitives supported with
+ * {@link android.hardware.vibrator.CompositePrimitive} values.
+ */
+ @NonNull
+ public Builder setSupportedPrimitives(int... supportedPrimitives) {
+ mSupportedPrimitives = supportedPrimitives;
+ return this;
+ }
+
+ /** Configure the vibrator quality factor. */
+ @NonNull
+ public Builder setQFactor(float qFactor) {
+ mQFactor = qFactor;
+ return this;
+ }
+
+ /** Configure the vibrator frequency information like resonant frequency and bandwidth. */
+ @NonNull
+ public Builder setFrequencyMapping(FrequencyMapping frequencyMapping) {
+ mFrequencyMapping = frequencyMapping;
+ return this;
+ }
+
+ /** Build the configured {@link VibratorInfo}. */
+ @NonNull
+ public VibratorInfo build() {
+ return new VibratorInfo(mId, mCapabilities, mSupportedEffects, mSupportedBraking,
+ mSupportedPrimitives, mQFactor, mFrequencyMapping);
+ }
+ }
+
@NonNull
public static final Creator<VibratorInfo> CREATOR =
new Creator<VibratorInfo>() {
diff --git a/core/java/android/os/VibratorManager.java b/core/java/android/os/VibratorManager.java
index 7c91116..01cece3 100644
--- a/core/java/android/os/VibratorManager.java
+++ b/core/java/android/os/VibratorManager.java
@@ -136,4 +136,14 @@
*/
@RequiresPermission(android.Manifest.permission.VIBRATE)
public abstract void cancel();
+
+ /**
+ * Cancel specific types of ongoing vibrations.
+ *
+ * @param usageFilter The type of vibration to be cancelled, represented as a bitwise
+ * combination of {@link VibrationAttributes.Usage} values.
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.VIBRATE)
+ public abstract void cancel(int usageFilter);
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 0d60323..9450994 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -8539,13 +8539,16 @@
"one_handed_tutorial_show_count";
/**
- * Indicates whether transform is enabled.
+ * Indicates whether ui translation is enabled.
* <p>
* Type: int (0 for false, 1 for true)
*
* @hide
*/
- public static final String TRANSFORM_ENABLED = "transform_enabled";
+ @SystemApi
+ @Readable
+ @SuppressLint("NoSettingsProvider")
+ public static final String UI_TRANSLATION_ENABLED = "ui_translation_enabled";
/**
* The current night mode that has been selected by the user. Owned
@@ -14724,6 +14727,15 @@
public static final String POWER_BUTTON_VERY_LONG_PRESS =
"power_button_very_long_press";
+ /**
+ * Overrides internal R.integer.config_keyChordPowerVolumeUp.
+ * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+ * Used by PhoneWindowManager.
+ * @hide
+ */
+ @Readable
+ public static final String KEY_CHORD_POWER_VOLUME_UP =
+ "key_chord_power_volume_up";
/**
* Keyguard should be on the left hand side of the screen, for wide screen layouts.
diff --git a/core/java/android/service/dataloader/DataLoaderService.java b/core/java/android/service/dataloader/DataLoaderService.java
index 3ad80d3..63ec252 100644
--- a/core/java/android/service/dataloader/DataLoaderService.java
+++ b/core/java/android/service/dataloader/DataLoaderService.java
@@ -39,24 +39,35 @@
import java.util.Collection;
/**
- * The base class for implementing data loader service to control data loaders. Expecting
- * Installation Session to bind to a children class of this.
+ * The base class for implementing a data loader service.
+ * <p>
+ * After calling commit() on the install session, the DataLoaderService is started and bound to
+ * provide the actual data bytes for the streaming session.
+ * The service will automatically be rebound until the streaming session has enough data to
+ * proceed with the installation.
+ *
+ * @see android.content.pm.DataLoaderParams
+ * @see android.content.pm.PackageInstaller.SessionParams#setDataLoaderParams
*/
public abstract class DataLoaderService extends Service {
private static final String TAG = "DataLoaderService";
private final DataLoaderBinderService mBinder = new DataLoaderBinderService();
/**
- * Managed DataLoader interface. Each instance corresponds to a single installation session.
+ * DataLoader interface. Each instance corresponds to a single installation session.
*/
public interface DataLoader {
/**
* A virtual constructor.
*
* @param dataLoaderParams parameters set in the installation session
- * @param connector FS API wrapper
- * @return True if initialization of a Data Loader was successful. False will be reported to
- * PackageManager and fail the installation
+ * {@link android.content.pm.PackageInstaller.SessionParams#setDataLoaderParams}
+ * @param connector Wrapper providing access to the installation image.
+ * @return true if initialization of a DataLoader was successful. False will notify the
+ * Installer {@link android.content.pm.PackageInstaller#STATUS_PENDING_STREAMING} and
+ * interrupt the session commit. The Installer is supposed to make sure DataLoader can
+ * proceed and then commit the session
+ * {@link android.content.pm.PackageInstaller.Session#commit}.
*/
boolean onCreate(@NonNull DataLoaderParams dataLoaderParams,
@NonNull FileSystemConnector connector);
@@ -64,10 +75,35 @@
/**
* Prepare installation image. After this method succeeds installer will validate the files
* and continue installation.
+ * The method should block until the files are prepared for installation.
+ * This can take up to session lifetime (~day). If the session lifetime is exceeded then
+ * any attempts to write new data will fail.
*
- * @param addedFiles list of files created in this installation session.
- * @param removedFiles list of files removed in this installation session.
- * @return false if unable to create and populate all addedFiles.
+ * Example implementation:
+ * <code>
+ * String localPath = "/data/local/tmp/base.apk";
+ * session.addFile(LOCATION_DATA_APP, "base", 123456, localPath.getBytes(UTF_8), null);
+ * ...
+ * // onPrepareImage
+ * for (InstallationFile file : addedFiles) {
+ * String localPath = new String(file.getMetadata(), UTF_8);
+ * File source = new File(localPath);
+ * ParcelFileDescriptor fd = ParcelFileDescriptor.open(source, MODE_READ_ONLY);
+ * try {
+ * mConnector.writeData(file.getName(), 0, fd.getStatSize(), fd);
+ * } finally {
+ * IoUtils.closeQuietly(fd);
+ * }
+ * }
+ * </code>
+ * It is recommended to stream data into installation session directly from source, e.g.
+ * cloud data storage, to save local disk space.
+ *
+ * @param addedFiles list of files created in this installation session
+ * {@link android.content.pm.PackageInstaller.Session#addFile}
+ * @param removedFiles list of files removed in this installation session
+ * {@link android.content.pm.PackageInstaller.Session#removeFile}
+ * @return false if unable to create and populate all addedFiles. Installation will fail.
*/
boolean onPrepareImage(@NonNull Collection<InstallationFile> addedFiles,
@NonNull Collection<String> removedFiles);
@@ -75,8 +111,7 @@
/**
* DataLoader factory method.
- *
- * @return An instance of a DataLoader.
+ * An installation session uses it to create an instance of DataLoader.
*/
public @Nullable DataLoader onCreateDataLoader(@NonNull DataLoaderParams dataLoaderParams) {
return null;
@@ -142,7 +177,7 @@
}
/**
- * Used by the DataLoaderService implementations.
+ * Provides access to the installation image.
*/
public static final class FileSystemConnector {
/**
@@ -157,7 +192,8 @@
/**
* Write data to an installation file from an arbitrary FD.
*
- * @param name name of file previously added to the installation session.
+ * @param name name of file previously added to the installation session
+ * {@link InstallationFile#getName()}.
* @param offsetBytes offset into the file to begin writing at, or 0 to start at the
* beginning of the file.
* @param lengthBytes total size of the file being written, used to preallocate the
diff --git a/core/java/android/service/displayhash/DisplayHashParams.java b/core/java/android/service/displayhash/DisplayHashParams.java
index 6a176a33..fcce91a 100644
--- a/core/java/android/service/displayhash/DisplayHashParams.java
+++ b/core/java/android/service/displayhash/DisplayHashParams.java
@@ -46,11 +46,6 @@
private final Size mBufferSize;
/**
- * Whether the content captured will use filtering when scaling.
- */
- private final boolean mBufferScaleWithFiltering;
-
- /**
* Whether the content will be captured in grayscale or color.
*/
private final boolean mGrayscaleBuffer;
@@ -61,7 +56,6 @@
public static final class Builder {
@Nullable
private Size mBufferSize;
- private boolean mBufferScaleWithFiltering;
private boolean mGrayscaleBuffer;
/**
@@ -80,15 +74,6 @@
}
/**
- * Whether the content captured will use filtering when scaling.
- */
- @NonNull
- public Builder setBufferScaleWithFiltering(boolean value) {
- mBufferScaleWithFiltering = value;
- return this;
- }
-
- /**
* Whether the content will be captured in grayscale or color.
*/
@NonNull
@@ -100,13 +85,13 @@
/** Builds the instance. This builder should not be touched after calling this! */
@NonNull
public DisplayHashParams build() {
- return new DisplayHashParams(mBufferSize, mBufferScaleWithFiltering, mGrayscaleBuffer);
+ return new DisplayHashParams(mBufferSize, mGrayscaleBuffer);
}
}
- // Code below generated by codegen v1.0.22.
+ // Code below generated by codegen v1.0.23.
//
// DO NOT MODIFY!
// CHECKSTYLE:OFF Generated code
@@ -127,8 +112,6 @@
* buffer given to the {@link DisplayHasherService#onGenerateDisplayHash(byte[], HardwareBuffer,
* Rect, String, DisplayHashResultCallback)} will be stretched based on the value set here.
* If {@code null}, the buffer size will not be changed.
- * @param bufferScaleWithFiltering
- * Whether the content captured will use filtering when scaling.
* @param grayscaleBuffer
* Whether the content will be captured in grayscale or color.
* @hide
@@ -136,10 +119,8 @@
@DataClass.Generated.Member
public DisplayHashParams(
@Nullable Size bufferSize,
- boolean bufferScaleWithFiltering,
boolean grayscaleBuffer) {
this.mBufferSize = bufferSize;
- this.mBufferScaleWithFiltering = bufferScaleWithFiltering;
this.mGrayscaleBuffer = grayscaleBuffer;
// onConstructed(); // You can define this method to get a callback
@@ -157,14 +138,6 @@
}
/**
- * Whether the content captured will use filtering when scaling.
- */
- @DataClass.Generated.Member
- public boolean isBufferScaleWithFiltering() {
- return mBufferScaleWithFiltering;
- }
-
- /**
* Whether the content will be captured in grayscale or color.
*/
@DataClass.Generated.Member
@@ -180,7 +153,6 @@
return "DisplayHashParams { " +
"bufferSize = " + mBufferSize + ", " +
- "bufferScaleWithFiltering = " + mBufferScaleWithFiltering + ", " +
"grayscaleBuffer = " + mGrayscaleBuffer +
" }";
}
@@ -192,8 +164,7 @@
// void parcelFieldName(Parcel dest, int flags) { ... }
byte flg = 0;
- if (mBufferScaleWithFiltering) flg |= 0x2;
- if (mGrayscaleBuffer) flg |= 0x4;
+ if (mGrayscaleBuffer) flg |= 0x2;
if (mBufferSize != null) flg |= 0x1;
dest.writeByte(flg);
if (mBufferSize != null) dest.writeSize(mBufferSize);
@@ -211,12 +182,10 @@
// static FieldType unparcelFieldName(Parcel in) { ... }
byte flg = in.readByte();
- boolean bufferScaleWithFiltering = (flg & 0x2) != 0;
- boolean grayscaleBuffer = (flg & 0x4) != 0;
+ boolean grayscaleBuffer = (flg & 0x2) != 0;
Size bufferSize = (flg & 0x1) == 0 ? null : (Size) in.readSize();
this.mBufferSize = bufferSize;
- this.mBufferScaleWithFiltering = bufferScaleWithFiltering;
this.mGrayscaleBuffer = grayscaleBuffer;
// onConstructed(); // You can define this method to get a callback
@@ -237,10 +206,10 @@
};
@DataClass.Generated(
- time = 1615565493989L,
- codegenVersion = "1.0.22",
+ time = 1617735166254L,
+ codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/service/displayhash/DisplayHashParams.java",
- inputSignatures = "private final @android.annotation.Nullable android.util.Size mBufferSize\nprivate final boolean mBufferScaleWithFiltering\nprivate final boolean mGrayscaleBuffer\nclass DisplayHashParams extends java.lang.Object implements [android.os.Parcelable]\nprivate @android.annotation.Nullable android.util.Size mBufferSize\nprivate boolean mBufferScaleWithFiltering\nprivate boolean mGrayscaleBuffer\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams.Builder setBufferSize(int,int)\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams.Builder setBufferScaleWithFiltering(boolean)\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams.Builder setGrayscaleBuffer(boolean)\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams build()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genAidl=true, genToString=true, genParcelable=true, genHiddenConstructor=true)")
+ inputSignatures = "private final @android.annotation.Nullable android.util.Size mBufferSize\nprivate final boolean mGrayscaleBuffer\nclass DisplayHashParams extends java.lang.Object implements [android.os.Parcelable]\nprivate @android.annotation.Nullable android.util.Size mBufferSize\nprivate boolean mGrayscaleBuffer\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams.Builder setBufferSize(int,int)\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams.Builder setGrayscaleBuffer(boolean)\npublic @android.annotation.NonNull android.service.displayhash.DisplayHashParams build()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genAidl=true, genToString=true, genParcelable=true, genHiddenConstructor=true)")
@Deprecated
private void __metadata() {}
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
index 5d718440..c87407e 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
@@ -98,7 +98,10 @@
intent.setPackage(packageName);
List<ResolveInfo> resolveInfos =
context.getPackageManager().queryIntentServices(intent,
- PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_META_DATA);
+ PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+ | PackageManager.MATCH_DEFAULT_ONLY
+ | PackageManager.GET_META_DATA);
return resolveInfos.isEmpty() ? null : resolveInfos.get(0).serviceInfo;
}
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index bf152cb..c87db65 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -1070,6 +1070,11 @@
if (mDisplayInfo.userDisabledHdrTypes.length == 0) {
return mDisplayInfo.hdrCapabilities;
}
+
+ if (mDisplayInfo.hdrCapabilities == null) {
+ return null;
+ }
+
ArraySet<Integer> enabledTypesSet = new ArraySet<>();
for (int supportedType : mDisplayInfo.hdrCapabilities.getSupportedHdrTypes()) {
boolean typeDisabled = false;
@@ -1083,6 +1088,7 @@
enabledTypesSet.add(supportedType);
}
}
+
int[] enabledTypes = new int[enabledTypesSet.size()];
int index = 0;
for (int enabledType : enabledTypesSet) {
@@ -1107,6 +1113,9 @@
public int[] getReportedHdrTypes() {
synchronized (mLock) {
updateDisplayInfoLocked();
+ if (mDisplayInfo.hdrCapabilities == null) {
+ return new int[0];
+ }
return mDisplayInfo.hdrCapabilities.getSupportedHdrTypes();
}
}
@@ -1120,7 +1129,11 @@
public boolean isHdr() {
synchronized (mLock) {
updateDisplayInfoLocked();
- return !(getHdrCapabilities().getSupportedHdrTypes().length == 0);
+ HdrCapabilities hdrCapabilities = getHdrCapabilities();
+ if (hdrCapabilities == null) {
+ return false;
+ }
+ return !(hdrCapabilities.getSupportedHdrTypes().length == 0);
}
}
diff --git a/core/java/android/view/DisplayEventReceiver.java b/core/java/android/view/DisplayEventReceiver.java
index e6cd252..f695284 100644
--- a/core/java/android/view/DisplayEventReceiver.java
+++ b/core/java/android/view/DisplayEventReceiver.java
@@ -26,7 +26,6 @@
import com.android.internal.annotations.VisibleForTesting;
import dalvik.annotation.optimization.FastNative;
-import dalvik.system.CloseGuard;
import java.lang.ref.WeakReference;
@@ -73,8 +72,6 @@
private static final String TAG = "DisplayEventReceiver";
- private final CloseGuard mCloseGuard = CloseGuard.get();
-
@UnsupportedAppUsage
private long mReceiverPtr;
@@ -114,8 +111,6 @@
mMessageQueue = looper.getQueue();
mReceiverPtr = nativeInit(new WeakReference<DisplayEventReceiver>(this), mMessageQueue,
vsyncSource, eventRegistration);
-
- mCloseGuard.open("dispose");
}
@Override
@@ -135,13 +130,6 @@
}
private void dispose(boolean finalized) {
- if (mCloseGuard != null) {
- if (finalized) {
- mCloseGuard.warnIfOpen();
- }
- mCloseGuard.close();
- }
-
if (mReceiverPtr != 0) {
nativeDispose(mReceiverPtr);
mReceiverPtr = 0;
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index d0a3e4b..0f032e9 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -786,29 +786,60 @@
void setDisplayHashThrottlingEnabled(boolean enable);
/**
- * Registers a listener for a {@link android.window.WindowContext} to handle configuration
- * changes from the server side.
+ * Attaches a {@link android.window.WindowContext} to the DisplayArea specified by {@code type},
+ * {@code displayId} and {@code options}.
* <p>
* Note that this API should be invoked after calling
* {@link android.window.WindowTokenClient#attachContext(Context)}
- * </p>
+ * </p><p>
+ * Generally, this API is used for initializing a {@link android.window.WindowContext}
+ * before obtaining a valid {@link com.android.server.wm.WindowToken}. A WindowToken is usually
+ * generated when calling {@link android.view.WindowManager#addView(View, LayoutParams)}, or
+ * obtained from {@link android.view.WindowManager.LayoutParams#token}.
+ * </p><p>
+ * In some cases, the WindowToken is passed from the server side because it is managed by the
+ * system server. {@link #attachWindowContextToWindowToken(IBinder, IBinder)} could be used in
+ * this case to attach the WindowContext to the WindowToken.</p>
*
- * @param clientToken the window context's token
+ * @param clientToken {@link android.window.WindowContext#getWindowContextToken()
+ * the WindowContext's token}
* @param type Window type of the window context
* @param displayId The display associated with the window context
* @param options A bundle used to pass window-related options and choose the right DisplayArea
*
- * @return {@code true} if the listener was registered successfully.
+ * @return {@code true} if the WindowContext is attached to the DisplayArea successfully.
*/
- boolean registerWindowContextListener(IBinder clientToken, int type, int displayId,
+ boolean attachWindowContextToDisplayArea(IBinder clientToken, int type, int displayId,
in Bundle options);
/**
- * Unregisters a listener which registered with {@link #registerWindowContextListener()}.
+ * Attaches a {@link android.window.WindowContext} to a {@code WindowToken}.
+ * <p>
+ * This API is used when we hold a valid WindowToken and want to associate with the token and
+ * receive its configuration updates.
+ * </p><p>
+ * Note that this API should be invoked after calling
+ * {@link android.window.WindowTokenClient#attachContext(Context)}
+ * </p>
+ *
+ * @param clientToken {@link android.window.WindowContext#getWindowContextToken()
+ * the WindowContext's token}
+ * @param token the WindowToken to attach
+ *
+ * @throws IllegalArgumentException if the {@code clientToken} have not been attached to
+ * the server or the WindowContext's type doesn't match WindowToken {@code token}'s type.
+ *
+ * @see #attachWindowContextToDisplayArea(IBinder, int, int, Bundle)
+ */
+ void attachWindowContextToWindowToken(IBinder clientToken, IBinder token);
+
+ /**
+ * Detaches {@link android.window.WindowContext} from the window manager node it's currently
+ * attached to. It is no-op if the WindowContext is not attached to a window manager node.
*
* @param clientToken the window context's token
*/
- void unregisterWindowContextListener(IBinder clientToken);
+ void detachWindowContextFromWindowContainer(IBinder clientToken);
/**
* Registers a listener, which is to be called whenever cross-window blur is enabled/disabled.
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 85a4f203..e450061 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -185,8 +185,6 @@
private static native void nativeSetGameContentType(IBinder displayToken, boolean on);
private static native void nativeSetDisplayPowerMode(
IBinder displayToken, int mode);
- private static native void nativeDeferTransactionUntil(long transactionObj, long nativeObject,
- long barrierObject, long frame);
private static native void nativeReparent(long transactionObj, long nativeObject,
long newParentNativeObject);
@@ -3028,21 +3026,6 @@
}
/**
- * @hide
- */
- @UnsupportedAppUsage
- public Transaction deferTransactionUntil(SurfaceControl sc, SurfaceControl barrier,
- long frameNumber) {
- if (frameNumber < 0) {
- return this;
- }
- checkPreconditions(sc);
- nativeDeferTransactionUntil(mNativeObject, sc.mNativeObject, barrier.mNativeObject,
- frameNumber);
- return this;
- }
-
- /**
* Re-parents a given layer to a new parent. Children inherit transform (position, scaling)
* crop, visibility, and Z-ordering from their parents, as if the children were pixels within the
* parent Surface.
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index f49aa74..b13cfc0 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.AttrRes;
import android.annotation.ColorInt;
import android.annotation.ColorRes;
import android.annotation.DimenRes;
@@ -228,6 +229,7 @@
private static final int SET_ON_CHECKED_CHANGE_RESPONSE_TAG = 29;
private static final int NIGHT_MODE_REFLECTION_ACTION_TAG = 30;
private static final int SET_REMOTE_COLLECTION_ITEMS_ADAPTER_TAG = 31;
+ private static final int ATTRIBUTE_REFLECTION_ACTION_TAG = 32;
/** @hide **/
@IntDef(prefix = "MARGIN_", value = {
@@ -253,6 +255,19 @@
/** The value will apply to the marginEnd. */
public static final int MARGIN_END = 5;
+ @IntDef(prefix = "VALUE_TYPE_", value = {
+ VALUE_TYPE_RAW,
+ VALUE_TYPE_COMPLEX_UNIT,
+ VALUE_TYPE_RESOURCE,
+ VALUE_TYPE_ATTRIBUTE
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ @interface ValueType {}
+ static final int VALUE_TYPE_RAW = 1;
+ static final int VALUE_TYPE_COMPLEX_UNIT = 2;
+ static final int VALUE_TYPE_RESOURCE = 3;
+ static final int VALUE_TYPE_ATTRIBUTE = 4;
+
/** @hide **/
@IntDef(flag = true, value = {
FLAG_REAPPLY_DISALLOWED,
@@ -1918,6 +1933,88 @@
}
}
+ private final class AttributeReflectionAction extends BaseReflectionAction {
+
+ static final int DIMEN_RESOURCE = 1;
+ static final int COLOR_RESOURCE = 2;
+ static final int STRING_RESOURCE = 3;
+
+ private final int mResourceType;
+ private final int mAttrId;
+
+ AttributeReflectionAction(@IdRes int viewId, String methodName, int parameterType,
+ int resourceType, int attrId) {
+ super(viewId, methodName, parameterType);
+ this.mResourceType = resourceType;
+ this.mAttrId = attrId;
+ }
+
+ AttributeReflectionAction(Parcel in) {
+ super(in);
+ this.mResourceType = in.readInt();
+ this.mAttrId = in.readInt();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeInt(this.mResourceType);
+ dest.writeInt(this.mAttrId);
+ }
+
+ @Override
+ protected @NonNull Object getParameterValue(View view) throws ActionException {
+ try {
+ TypedArray typedArray = view.getContext().obtainStyledAttributes(
+ new int[]{this.mAttrId});
+ try {
+ if (typedArray.getType(0) == TypedValue.TYPE_NULL) {
+ throw new ActionException("Attribute 0x" + Integer.toHexString(this.mAttrId)
+ + " is not defined");
+ }
+ switch (this.mResourceType) {
+ case DIMEN_RESOURCE:
+ if (this.type == BaseReflectionAction.INT) {
+ return typedArray.getDimensionPixelSize(0, 0);
+ }
+ return typedArray.getDimension(0, 0);
+ case COLOR_RESOURCE:
+ switch (this.type) {
+ case BaseReflectionAction.INT:
+ return typedArray.getColor(0, 0);
+ case BaseReflectionAction.COLOR_STATE_LIST:
+ return typedArray.getColorStateList(0);
+ default:
+ throw new ActionException(
+ "Color attribute 0x" + Integer.toHexString(this.mAttrId)
+ + " must be used as int or ColorStateList");
+ }
+ case STRING_RESOURCE:
+ String value = typedArray.getString(0);
+ if (value == null) {
+ throw new ActionException("Attribute 0x"
+ + Integer.toHexString(this.mAttrId)
+ + " is not a defined or is not a string");
+ }
+ return value;
+ default:
+ // Note: This can only be an implementation error.
+ throw new ActionException(
+ "Unknown resource type: " + this.mResourceType);
+ }
+ } finally {
+ typedArray.recycle();
+ }
+ } catch (Throwable t) {
+ throw new ActionException(t);
+ }
+ }
+
+ @Override
+ public int getActionTag() {
+ return ATTRIBUTE_REFLECTION_ACTION_TAG;
+ }
+ }
private final class ComplexUnitDimensionReflectionAction extends BaseReflectionAction {
private final float mValue;
@@ -2792,7 +2889,7 @@
static final int LAYOUT_HEIGHT = 9;
final int mProperty;
- final boolean mIsDimen;
+ final int mValueType;
final int mValue;
/**
@@ -2805,33 +2902,36 @@
@ComplexDimensionUnit int units) {
this.viewId = viewId;
this.mProperty = property;
- this.mIsDimen = false;
+ this.mValueType = VALUE_TYPE_COMPLEX_UNIT;
this.mValue = TypedValue.createComplexDimension(value, units);
}
/**
* @param viewId ID of the view alter
* @param property which layout parameter to alter
- * @param dimen new dimension with the value of the layout parameter
+ * @param value value to set.
+ * @param valueType must be one of {@link #VALUE_TYPE_COMPLEX_UNIT},
+ * {@link #VALUE_TYPE_RESOURCE}, {@link #VALUE_TYPE_ATTRIBUTE} or
+ * {@link #VALUE_TYPE_RAW}.
*/
- LayoutParamAction(@IdRes int viewId, int property, @DimenRes int dimen) {
+ LayoutParamAction(@IdRes int viewId, int property, int value, @ValueType int valueType) {
this.viewId = viewId;
this.mProperty = property;
- this.mIsDimen = true;
- this.mValue = dimen;
+ this.mValueType = valueType;
+ this.mValue = value;
}
public LayoutParamAction(Parcel parcel) {
viewId = parcel.readInt();
mProperty = parcel.readInt();
- mIsDimen = parcel.readBoolean();
+ mValueType = parcel.readInt();
mValue = parcel.readInt();
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(viewId);
dest.writeInt(mProperty);
- dest.writeBoolean(mIsDimen);
+ dest.writeInt(mValueType);
dest.writeInt(mValue);
}
@@ -2897,25 +2997,57 @@
}
private int getPixelOffset(View target) {
- if (mIsDimen) {
- if (mValue == 0) {
- return 0;
+ try {
+ switch (mValueType) {
+ case VALUE_TYPE_ATTRIBUTE:
+ TypedArray typedArray = target.getContext().obtainStyledAttributes(
+ new int[]{this.mValue});
+ try {
+ return typedArray.getDimensionPixelOffset(0, 0);
+ } finally {
+ typedArray.recycle();
+ }
+ case VALUE_TYPE_RESOURCE:
+ if (mValue == 0) {
+ return 0;
+ }
+ return target.getResources().getDimensionPixelOffset(mValue);
+ case VALUE_TYPE_COMPLEX_UNIT:
+ return TypedValue.complexToDimensionPixelOffset(mValue,
+ target.getResources().getDisplayMetrics());
+ default:
+ return mValue;
}
- return target.getResources().getDimensionPixelOffset(mValue);
+ } catch (Throwable t) {
+ throw new ActionException(t);
}
- return TypedValue.complexToDimensionPixelOffset(mValue,
- target.getResources().getDisplayMetrics());
}
private int getPixelSize(View target) {
- if (mIsDimen) {
- if (mValue == 0) {
- return 0;
+ try {
+ switch (mValueType) {
+ case VALUE_TYPE_ATTRIBUTE:
+ TypedArray typedArray = target.getContext().obtainStyledAttributes(
+ new int[]{this.mValue});
+ try {
+ return typedArray.getDimensionPixelSize(0, 0);
+ } finally {
+ typedArray.recycle();
+ }
+ case VALUE_TYPE_RESOURCE:
+ if (mValue == 0) {
+ return 0;
+ }
+ return target.getResources().getDimensionPixelSize(mValue);
+ case VALUE_TYPE_COMPLEX_UNIT:
+ return TypedValue.complexToDimensionPixelSize(mValue,
+ target.getResources().getDisplayMetrics());
+ default:
+ return mValue;
}
- return target.getResources().getDimensionPixelSize(mValue);
+ } catch (Throwable t) {
+ throw new ActionException(t);
}
- return TypedValue.complexToDimensionPixelSize(mValue,
- target.getResources().getDisplayMetrics());
}
@Override
@@ -3170,33 +3302,35 @@
private static class SetViewOutlinePreferredRadiusAction extends Action {
- private final boolean mIsDimen;
+ @ValueType
+ private final int mValueType;
private final int mValue;
- SetViewOutlinePreferredRadiusAction(@IdRes int viewId, @DimenRes int dimenResId) {
+ SetViewOutlinePreferredRadiusAction(@IdRes int viewId, int value,
+ @ValueType int valueType) {
this.viewId = viewId;
- this.mIsDimen = true;
- this.mValue = dimenResId;
+ this.mValueType = valueType;
+ this.mValue = value;
}
SetViewOutlinePreferredRadiusAction(
@IdRes int viewId, float radius, @ComplexDimensionUnit int units) {
this.viewId = viewId;
- this.mIsDimen = false;
+ this.mValueType = VALUE_TYPE_COMPLEX_UNIT;
this.mValue = TypedValue.createComplexDimension(radius, units);
}
SetViewOutlinePreferredRadiusAction(Parcel in) {
viewId = in.readInt();
- mIsDimen = in.readBoolean();
+ mValueType = in.readInt();
mValue = in.readInt();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(viewId);
- dest.writeBoolean(mIsDimen);
+ dest.writeInt(mValueType);
dest.writeInt(mValue);
}
@@ -3206,14 +3340,32 @@
final View target = root.findViewById(viewId);
if (target == null) return;
- float radius;
- if (mIsDimen) {
- radius = mValue == 0 ? 0 : target.getResources().getDimension(mValue);
- } else {
- radius = TypedValue.complexToDimensionPixelSize(mValue,
- target.getResources().getDisplayMetrics());
+ try {
+ float radius;
+ switch (mValueType) {
+ case VALUE_TYPE_ATTRIBUTE:
+ TypedArray typedArray = target.getContext().obtainStyledAttributes(
+ new int[]{mValue});
+ try {
+ radius = typedArray.getDimension(0, 0);
+ } finally {
+ typedArray.recycle();
+ }
+ break;
+ case VALUE_TYPE_RESOURCE:
+ radius = mValue == 0 ? 0 : target.getResources().getDimension(mValue);
+ break;
+ case VALUE_TYPE_COMPLEX_UNIT:
+ radius = TypedValue.complexToDimension(mValue,
+ target.getResources().getDisplayMetrics());
+ break;
+ default:
+ radius = mValue;
+ }
+ target.setOutlineProvider(new RemoteViewOutlineProvider(radius));
+ } catch (Throwable t) {
+ throw new ActionException(t);
}
- target.setOutlineProvider(new RemoteViewOutlineProvider(radius));
}
@Override
@@ -3613,6 +3765,8 @@
return new NightModeReflectionAction(parcel);
case SET_REMOTE_COLLECTION_ITEMS_ADAPTER_TAG:
return new SetRemoteCollectionItemListAdapterAction(parcel);
+ case ATTRIBUTE_REFLECTION_ACTION_TAG:
+ return new AttributeReflectionAction(parcel);
default:
throw new ActionException("Tag " + tag + " not found");
}
@@ -4348,7 +4502,20 @@
*/
public void setViewLayoutMarginDimen(@IdRes int viewId, @MarginType int type,
@DimenRes int dimen) {
- addAction(new LayoutParamAction(viewId, type, dimen));
+ addAction(new LayoutParamAction(viewId, type, dimen, VALUE_TYPE_RESOURCE));
+ }
+
+ /**
+ * Equivalent to calling {@link MarginLayoutParams#setMarginEnd}.
+ * Only works if the {@link View#getLayoutParams()} supports margins.
+ *
+ * @param viewId The id of the view to change
+ * @param type The margin being set e.g. {@link #MARGIN_END}
+ * @param attr a dimension attribute to apply to the margin.
+ */
+ public void setViewLayoutMarginAttr(@IdRes int viewId, @MarginType int type,
+ @AttrRes int attr) {
+ addAction(new LayoutParamAction(viewId, type, attr, VALUE_TYPE_ATTRIBUTE));
}
/**
@@ -4393,7 +4560,19 @@
* @param widthDimen the dimension resource for the view's width
*/
public void setViewLayoutWidthDimen(@IdRes int viewId, @DimenRes int widthDimen) {
- addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_WIDTH, widthDimen));
+ addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_WIDTH, widthDimen,
+ VALUE_TYPE_RESOURCE));
+ }
+
+ /**
+ * Equivalent to setting {@link android.view.ViewGroup.LayoutParams#width} with
+ * the value of the given attribute in the current theme.
+ *
+ * @param widthAttr the dimension attribute for the view's width
+ */
+ public void setViewLayoutWidthAttr(@IdRes int viewId, @AttrRes int widthAttr) {
+ addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_WIDTH, widthAttr,
+ VALUE_TYPE_ATTRIBUTE));
}
/**
@@ -4420,7 +4599,19 @@
* @param heightDimen a dimen resource to read the height from.
*/
public void setViewLayoutHeightDimen(@IdRes int viewId, @DimenRes int heightDimen) {
- addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_HEIGHT, heightDimen));
+ addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_HEIGHT, heightDimen,
+ VALUE_TYPE_RESOURCE));
+ }
+
+ /**
+ * Equivalent to setting {@link android.view.ViewGroup.LayoutParams#height} with
+ * the value of the given attribute in the current theme.
+ *
+ * @param heightAttr a dimen attribute to read the height from.
+ */
+ public void setViewLayoutHeightAttr(@IdRes int viewId, @AttrRes int heightAttr) {
+ addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_HEIGHT, heightAttr,
+ VALUE_TYPE_ATTRIBUTE));
}
/**
@@ -4441,7 +4632,15 @@
* {@code resId}.
*/
public void setViewOutlinePreferredRadiusDimen(@IdRes int viewId, @DimenRes int resId) {
- addAction(new SetViewOutlinePreferredRadiusAction(viewId, resId));
+ addAction(new SetViewOutlinePreferredRadiusAction(viewId, resId, VALUE_TYPE_RESOURCE));
+ }
+
+ /**
+ * Sets an OutlineProvider on the view whose corner radius is a dimension attribute with
+ * {@code attrId}.
+ */
+ public void setViewOutlinePreferredRadiusAttr(@IdRes int viewId, @AttrRes int attrId) {
+ addAction(new SetViewOutlinePreferredRadiusAction(viewId, attrId, VALUE_TYPE_ATTRIBUTE));
}
/**
@@ -4523,6 +4722,23 @@
}
/**
+ * Call a method taking one int, a size in pixels, on a view in the layout for this
+ * RemoteViews.
+ *
+ * The dimension will be resolved from the theme attribute at the time the
+ * {@link RemoteViews} is (re-)applied.
+ *
+ * @param viewId The id of the view on which to call the method.
+ * @param methodName The name of the method to call.
+ * @param dimenAttr The attribute to resolve and pass as argument to the method.
+ */
+ public void setIntDimenAttr(@IdRes int viewId, @NonNull String methodName,
+ @AttrRes int dimenAttr) {
+ addAction(new AttributeReflectionAction(viewId, methodName, BaseReflectionAction.INT,
+ ResourceReflectionAction.DIMEN_RESOURCE, dimenAttr));
+ }
+
+ /**
* Call a method taking one int, a color, on a view in the layout for this RemoteViews.
*
* The Color will be resolved from the resources at the time the {@link RemoteViews} is (re-)
@@ -4541,6 +4757,22 @@
/**
* Call a method taking one int, a color, on a view in the layout for this RemoteViews.
*
+ * The Color will be resolved from the theme attribute at the time the {@link RemoteViews} is
+ * (re-)applied.
+ *
+ * @param viewId The id of the view on which to call the method.
+ * @param methodName The name of the method to call.
+ * @param colorAttribute The theme attribute to resolve and pass as argument to the method.
+ */
+ public void setColorAttr(@IdRes int viewId, @NonNull String methodName,
+ @AttrRes int colorAttribute) {
+ addAction(new AttributeReflectionAction(viewId, methodName, BaseReflectionAction.INT,
+ AttributeReflectionAction.COLOR_RESOURCE, colorAttribute));
+ }
+
+ /**
+ * Call a method taking one int, a color, on a view in the layout for this RemoteViews.
+ *
* @param viewId The id of the view on which to call the method.
* @param methodName The name of the method to call.
* @param notNight The value to pass to the method when the view's configuration is set to
@@ -4618,6 +4850,23 @@
}
/**
+ * Call a method taking one ColorStateList on a view in the layout for this RemoteViews.
+ *
+ * The ColorStateList will be resolved from the theme attribute at the time the
+ * {@link RemoteViews} is (re-)applied.
+ *
+ * @param viewId The id of the view on which to call the method.
+ * @param methodName The name of the method to call.
+ * @param colorAttr The theme attribute to resolve and pass as argument to the method.
+ */
+ public void setColorStateListAttr(@IdRes int viewId, @NonNull String methodName,
+ @AttrRes int colorAttr) {
+ addAction(new AttributeReflectionAction(viewId, methodName,
+ BaseReflectionAction.COLOR_STATE_LIST, ResourceReflectionAction.COLOR_RESOURCE,
+ colorAttr));
+ }
+
+ /**
* Call a method taking one long on a view in the layout for this RemoteViews.
*
* @param viewId The id of the view on which to call the method.
@@ -4676,6 +4925,23 @@
}
/**
+ * Call a method taking one float, a size in pixels, on a view in the layout for this
+ * RemoteViews.
+ *
+ * The dimension will be resolved from the theme attribute at the time the {@link RemoteViews}
+ * is (re-)applied.
+ *
+ * @param viewId The id of the view on which to call the method.
+ * @param methodName The name of the method to call.
+ * @param dimenAttr The attribute to resolve and pass as argument to the method.
+ */
+ public void setFloatDimenAttr(@IdRes int viewId, @NonNull String methodName,
+ @AttrRes int dimenAttr) {
+ addAction(new AttributeReflectionAction(viewId, methodName, BaseReflectionAction.FLOAT,
+ ResourceReflectionAction.DIMEN_RESOURCE, dimenAttr));
+ }
+
+ /**
* Call a method taking one double on a view in the layout for this RemoteViews.
*
* @param viewId The id of the view on which to call the method.
@@ -4738,6 +5004,24 @@
}
/**
+ * Call a method taking one CharSequence on a view in the layout for this RemoteViews.
+ *
+ * The CharSequence will be resolved from the theme attribute at the time the
+ * {@link RemoteViews} is (re-)applied.
+ *
+ * @param viewId The id of the view on which to call the method.
+ * @param methodName The name of the method to call.
+ * @param stringAttribute The attribute to resolve and pass as argument to the method.
+ */
+ public void setCharSequenceAttr(@IdRes int viewId, @NonNull String methodName,
+ @AttrRes int stringAttribute) {
+ addAction(
+ new AttributeReflectionAction(viewId, methodName,
+ BaseReflectionAction.CHAR_SEQUENCE,
+ AttributeReflectionAction.STRING_RESOURCE, stringAttribute));
+ }
+
+ /**
* Call a method taking one Uri on a view in the layout for this RemoteViews.
*
* @param viewId The id of the view on which to call the method.
diff --git a/core/java/android/window/WindowContext.java b/core/java/android/window/WindowContext.java
index 375f4cf..901625b 100644
--- a/core/java/android/window/WindowContext.java
+++ b/core/java/android/window/WindowContext.java
@@ -57,6 +57,8 @@
*
* @param base Base {@link Context} for this new instance.
* @param type Window type to be used with this context.
+ * @param options A bundle used to pass window-related options.
+ *
* @hide
*/
public WindowContext(@NonNull Context base, int type, @Nullable Bundle options) {
@@ -72,11 +74,12 @@
}
/**
- * Registers this {@link WindowContext} with {@link com.android.server.wm.WindowManagerService}
- * to receive configuration changes of the associated {@link WindowManager} node.
+ * Attaches this {@link WindowContext} to the {@link com.android.server.wm.DisplayArea}
+ * specified by {@code mType}, {@link #getDisplayId() display ID} and {@code mOptions}
+ * to receive configuration changes.
*/
- public void registerWithServer() {
- mController.registerListener(mType, getDisplayId(), mOptions);
+ public void attachToDisplayArea() {
+ mController.attachToDisplayArea(mType, getDisplayId(), mOptions);
}
@Override
@@ -96,7 +99,7 @@
/** Used for test to invoke because we can't invoke finalize directly. */
@VisibleForTesting
public void release() {
- mController.unregisterListenerIfNeeded();
+ mController.detachIfNeeded();
destroy();
}
diff --git a/core/java/android/window/WindowContextController.java b/core/java/android/window/WindowContextController.java
index 6143414..88584f4 100644
--- a/core/java/android/window/WindowContextController.java
+++ b/core/java/android/window/WindowContextController.java
@@ -29,22 +29,29 @@
import com.android.internal.annotations.VisibleForTesting;
/**
- * The controller to manage {@link WindowContext} listener, such as registering and unregistering
- * the listener.
+ * The controller to manage {@link WindowContext}, such as attaching to a window manager node or
+ * detaching from the current attached node. The user must call
+ * {@link #attachToDisplayArea(int, int, Bundle)}, call {@link #attachToWindowToken(IBinder)}
+ * after that if necessary, and then call {@link #detachIfNeeded()} for release.
*
* @hide
*/
public class WindowContextController {
private final IWindowManager mWms;
+ /**
+ * {@code true} to indicate that the {@code mToken} is associated with a
+ * {@link com.android.server.wm.DisplayArea}. Note that {@code mToken} is able to attach a
+ * WindowToken after this flag sets to {@code true}.
+ */
@VisibleForTesting
- public boolean mListenerRegistered;
+ public boolean mAttachedToDisplayArea;
@NonNull
private final IBinder mToken;
/**
* Window Context Controller constructor
*
- * @param token The token to register to the window context listener. It is usually from
+ * @param token The token used to attach to a window manager node. It is usually from
* {@link Context#getWindowContextToken()}.
*/
public WindowContextController(@NonNull IBinder token) {
@@ -60,19 +67,21 @@
}
/**
- * Registers the {@code mToken} to the window context listener.
+ * Attaches the {@code mToken} to a {@link com.android.server.wm.DisplayArea}.
*
* @param type The window type of the {@link WindowContext}
* @param displayId The {@link Context#getDisplayId() ID of display} to associate with
* @param options The window context launched option
+ * @throws IllegalStateException if the {@code mToken} has already been attached to a
+ * DisplayArea.
*/
- public void registerListener(@WindowType int type, int displayId, @Nullable Bundle options) {
- if (mListenerRegistered) {
- throw new UnsupportedOperationException("A Window Context can only register a listener"
- + " once.");
+ public void attachToDisplayArea(@WindowType int type, int displayId, @Nullable Bundle options) {
+ if (mAttachedToDisplayArea) {
+ throw new IllegalStateException("A Window Context can be only attached to "
+ + "a DisplayArea once.");
}
try {
- mListenerRegistered = mWms.registerWindowContextListener(mToken, type, displayId,
+ mAttachedToDisplayArea = mWms.attachWindowContextToDisplayArea(mToken, type, displayId,
options);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -80,14 +89,42 @@
}
/**
- * Unregisters the window context listener associated with the {@code mToken} if it has been
- * registered.
+ * Switches to attach the window context to a window token.
+ * <p>
+ * Note that the context should have been attached to a
+ * {@link com.android.server.wm.DisplayArea} by {@link #attachToDisplayArea(int, int, Bundle)}
+ * before attaching to a window token, and the window token's type must match the window
+ * context's type.
+ * </p><p>
+ * A {@link WindowContext} can only attach to a specific window manager node, which is either a
+ * {@link com.android.server.wm.DisplayArea} by calling
+ * {@link #attachToDisplayArea(int, int, Bundle)} or the latest attached {@code windowToken}
+ * although this API is allowed to be called multiple times.
+ * </p>
+ * @throws IllegalStateException if the {@code mClientToken} has not yet attached to
+ * a {@link com.android.server.wm.DisplayArea} by
+ * {@link #attachToDisplayArea(int, int, Bundle)}.
+ *
+ * @see IWindowManager#attachWindowContextToWindowToken(IBinder, IBinder)
*/
- public void unregisterListenerIfNeeded() {
- if (mListenerRegistered) {
+ public void attachToWindowToken(IBinder windowToken) {
+ if (!mAttachedToDisplayArea) {
+ throw new IllegalStateException("The Window Context should have been attached"
+ + " to a DisplayArea.");
+ }
+ try {
+ mWms.attachWindowContextToWindowToken(mToken, windowToken);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /** Detaches the window context from the node it's currently associated with. */
+ public void detachIfNeeded() {
+ if (mAttachedToDisplayArea) {
try {
- mWms.unregisterWindowContextListener(mToken);
- mListenerRegistered = false;
+ mWms.detachWindowContextFromWindowContainer(mToken);
+ mAttachedToDisplayArea = false;
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/com/android/internal/os/BinderLatencyBuckets.java b/core/java/com/android/internal/os/BinderLatencyBuckets.java
index bdee4ca..d7d2d6a 100644
--- a/core/java/com/android/internal/os/BinderLatencyBuckets.java
+++ b/core/java/com/android/internal/os/BinderLatencyBuckets.java
@@ -20,8 +20,7 @@
import com.android.internal.annotations.VisibleForTesting;
-import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Arrays;
/**
* Generates the bucket thresholds (with a custom logarithmic scale) for a histogram to store
@@ -29,7 +28,7 @@
*/
public class BinderLatencyBuckets {
private static final String TAG = "BinderLatencyBuckets";
- private ArrayList<Integer> mBuckets;
+ private final int[] mBuckets;
/**
* @param bucketCount the number of buckets the histogram should have
@@ -37,12 +36,11 @@
* @param scaleFactor the rate in which each consecutive bucket increases (before rounding)
*/
public BinderLatencyBuckets(int bucketCount, int firstBucketSize, float scaleFactor) {
- mBuckets = new ArrayList<>(bucketCount - 1);
- mBuckets.add(firstBucketSize);
+ int[] buffer = new int[bucketCount - 1];
+ buffer[0] = firstBucketSize;
// Last value and the target are disjoint as we never want to create buckets smaller than 1.
double lastTarget = firstBucketSize;
- int lastValue = firstBucketSize;
// First bucket is already created and the last bucket is anything greater than the final
// bucket in the list, so create 'bucketCount' - 2 buckets.
@@ -50,29 +48,29 @@
// Increase the target bucket limit value by the scale factor.
double nextTarget = lastTarget * scaleFactor;
- if (nextTarget > Integer.MAX_VALUE || lastValue == Integer.MAX_VALUE) {
+ if (nextTarget > Integer.MAX_VALUE) {
// Do not throw an exception here as this should not affect binder calls.
Slog.w(TAG, "Attempted to create a bucket larger than maxint");
+ mBuckets = Arrays.copyOfRange(buffer, 0, i);
return;
}
- if ((int) nextTarget > lastValue) {
+ if ((int) nextTarget > buffer[i - 1]) {
// Convert the target bucket limit value to an integer.
- mBuckets.add((int) nextTarget);
- lastValue = (int) nextTarget;
+ buffer[i] = (int) nextTarget;
} else {
// Avoid creating redundant buckets, so bucket size should be 1 at a minimum.
- mBuckets.add(lastValue + 1);
- lastValue = lastValue + 1;
+ buffer[i] = buffer[i - 1] + 1;
}
lastTarget = nextTarget;
}
+ mBuckets = buffer;
}
/** Gets the bucket index to insert the provided sample in. */
public int sampleToBucket(int sample) {
- if (sample > mBuckets.get(mBuckets.size() - 1)) {
- return mBuckets.size();
+ if (sample >= mBuckets[mBuckets.length - 1]) {
+ return mBuckets.length;
}
// Binary search returns the element index if it is contained in the list - in this case the
@@ -80,12 +78,12 @@
// Otherwise, it returns (-(insertion point) - 1), where insertion point is the point where
// to insert the element so that the array remains sorted - in this case the bucket index
// is the insertion point.
- int searchResult = Collections.binarySearch(mBuckets, sample);
+ int searchResult = Arrays.binarySearch(mBuckets, sample);
return searchResult < 0 ? -(1 + searchResult) : searchResult + 1;
}
@VisibleForTesting
- public ArrayList<Integer> getBuckets() {
+ public int[] getBuckets() {
return mBuckets;
}
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 354e3a4..b342755 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -1072,7 +1072,7 @@
return object;
}
-jobject convertDeviceProductInfoToJavaObject(JNIEnv* env, const HdrCapabilities& capabilities) {
+jobject convertHdrCapabilitiesToJavaObject(JNIEnv* env, const HdrCapabilities& capabilities) {
const auto& types = capabilities.getSupportedHdrTypes();
std::vector<int32_t> intTypes;
for (auto type : types) {
@@ -1129,7 +1129,7 @@
static_cast<jint>(info.activeColorMode));
env->SetObjectField(object, gDynamicDisplayInfoClassInfo.hdrCapabilities,
- convertDeviceProductInfoToJavaObject(env, info.hdrCapabilities));
+ convertHdrCapabilitiesToJavaObject(env, info.hdrCapabilities));
env->SetBooleanField(object, gDynamicDisplayInfoClassInfo.autoLowLatencyModeSupported,
info.autoLowLatencyModeSupported);
@@ -1443,14 +1443,6 @@
return JNI_TRUE;
}
-static void nativeDeferTransactionUntil(JNIEnv* env, jclass clazz, jlong transactionObj,
- jlong nativeObject, jlong barrierObject, jlong frameNumber) {
- sp<SurfaceControl> ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
- sp<SurfaceControl> barrier = reinterpret_cast<SurfaceControl*>(barrierObject);
- auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
- transaction->deferTransactionUntil_legacy(ctrl, barrier, frameNumber);
-}
-
static void nativeReparent(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject,
jlong newParentObject) {
@@ -1856,8 +1848,6 @@
(void*)nativeSetDisplayPowerMode },
{"nativeGetProtectedContentSupport", "()Z",
(void*)nativeGetProtectedContentSupport },
- {"nativeDeferTransactionUntil", "(JJJJ)V",
- (void*)nativeDeferTransactionUntil },
{"nativeReparent", "(JJJ)V",
(void*)nativeReparent },
{"nativeCaptureDisplay",
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index b6a5984..8b225b3 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Opgedateer deur jou administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Uitgevee deur jou administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batterybespaarder doen die volgende om die batterylewe te verleng:\n\n• Skakel Donkertema aan\n• Skakel agtergrondaktiwiteit, sommige visuele effekte en ander kenmerke, soos \"Ok Google\", af of beperk dit\n\n"<annotation id="url">"Kom meer te wete"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batterybespaarder doen die volgende om batterylewe te verleng:\n\n• Skakel Donkertema aan\n• Skakel agtergrondaktiwiteit, sommige visuele effekte en ander kenmerke, soos \"Ok Google\", af of beperk dit"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Databespaarder verhoed sommige programme om data in die agtergrond te stuur of te aanvaar om datagebruik te help verminder. \'n Program wat jy tans gebruik kan by data ingaan, maar sal dit dalk minder gereeld doen. Dit kan byvoorbeeld beteken dat prente nie wys totdat jy op hulle tik nie."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Skakel Databespaarder aan?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Skakel aan"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Hierdie kennisgewing is gedegradeer na Stil. Tik om terugvoer te gee."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Hierdie kennisgewing is hoër gegradeer. Tik om terugvoer te gee."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Hierdie kennisgewing is laer gegradeer. Tik om terugvoer te gee."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Roetinemodus-inligtingkennisgewing"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Battery kan afloop voordat dit normaalweg gelaai word"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Batterybespaarder is geaktiveer om batterylewe te verleng"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index e96f505..834eb74 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"በእርስዎ አስተዳዳሪ ተዘምኗል"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"በእርስዎ አስተዳዳሪ ተሰርዟል"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"እሺ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"የባትሪ ዕድሜን ለማራዘም፣ የባትሪ ቆጣቢ፦\n\n•ጨለማ ገጽታን ያበራል\n•የበስተጀርባ እንቅስቃሴን፣ አንዳንድ የሚታዩ ማሳመሪያዎችን፣ እና ሌሎች እንደ «Hey Google» ያሉ ባህሪያትን ያጠፋል ወይም ይገድባል\n\n"<annotation id="url">"የበለጠ ለመረዳት"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"የባትሪ ዕድሜን ለማራዘም የባትሪ ኃይል ቆጣቢ፦\n\n• ጨለማ ገጽታን ያበራል\n• የበስተጀርባ እንቅስቃሴን፣ አንዳንድ ምስላዊ ተጽዕኖዎችን እና ሌሎች እንደ «Hey Google» ያሉ ባህሪያትን ያጠፋል ወይም ይገድባል"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"የውሂብ አጠቃቀም እንዲቀንስ ለማገዝ ውሂብ ቆጣቢ አንዳንድ መተግበሪያዎች ከበስተጀርባ ሆነው ውሂብ እንዳይልኩ ወይም እንዳይቀበሉ ይከለክላቸዋል። በአሁኑ ጊዜ እየተጠቀሙበት ያለ መተግበሪያ ውሂብ ሊደርስ ይችላል፣ ነገር ግን ባነሰ ተደጋጋሚነት ሊሆን ይችላል። ይሄ ማለት ለምሳሌ ምስሎችን መታ እስኪያደርጓቸው ድረስ ላይታዩ ይችላሉ ማለት ነው።"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ውሂብ ቆጣቢ ይጥፋ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"አብራ"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ይህ ማሳወቂያ ወደ ዝምታ ዝቅ ብሏል። ግብረመልስ ለመስጠት መታ ያድርጉ።"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ይህ ማሳወቂያ ከፍተኛ ደረጃ ተሰጥቶታል። ግብረመልስ ለመስጠት መታ ያድርጉ።"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ይህ ማሳወቂያ ዝቅተኛ ደረጃ ተሰጥቶታል። ግብረመልስ ለመስጠት መታ ያድርጉ።"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"የዕለት ተዕለት ሁነታ መረጃ ማሳወቂያዎች"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ባትሪ ከተለመደው ኃይል መሙላት በፊት ሊያልቅ ይችላል"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"የባትሪ ቆጣቢ የባትሪ ዕድሜን ለማራዘም ገብሯል።"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index c68aeab..4623057 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1946,8 +1946,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"تم التحديث بواسطة المشرف"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"تم الحذف بواسطة المشرف"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"حسنًا"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"لإطالة عمر البطارية، تعمل ميزة \"توفير شحن البطارية\" على:\n·تفعيل \"المظهر الداكن\"\n إيقاف أو حظر النشاط في الخلفية وبعض التأثيرات المرئية والميزات الأخرى، مثل \"Ok Google\"\n\n\n"<annotation id="url">"مزيد من المعلومات"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"لإطالة عمر البطارية، تعمل ميزة \"توفير شحن البطارية\" على:\n\n• تفعيل \"المظهر الداكن\"\n• إيقاف أو حظر النشاط في الخلفية وبعض التأثيرات المرئية والميزات الأخرى، مثل \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"للمساعدة في خفض استخدام البيانات، تمنع ميزة \"توفير البيانات\" بعض التطبيقات من إرسال البيانات وتلقّيها في الخلفية. يمكن للتطبيقات المتاحة لديك الآن استخدام البيانات، ولكن لا يمكنها الإكثار من ذلك. وهذا يعني أن الصور مثلاً لا تظهر حتى تنقر عليها."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"هل تريد تفعيل توفير البيانات؟"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"تفعيل"</string>
@@ -2206,6 +2208,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"تم خفض ترتيب هذا الإشعار إلى الوضع \"صامت\". انقر لإرسال ملاحظات وآراء."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"تمت زيادة ترتيب هذا الإشعار. انقر لإرسال ملاحظات وآراء."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"تم خفض ترتيب هذا الإشعار. انقر لإرسال ملاحظات وآراء."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"إشعار معلومات \"وضع سلسلة الإجراءات\""</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"قد تنفد طاقة البطارية قبل الشحن المعتاد"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"تم تفعيل \"توفير شحن البطارية\" لإطالة عمرها."</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 9718df6..a815db7 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"আপোনাৰ প্ৰশাসকে আপেডট কৰিছে"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"আপোনাৰ প্ৰশাসকে মচিছে"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ঠিক আছে"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ, বেটাৰী সঞ্চয়কাৰীয়ে:\n\n•গাঢ় ৰঙৰ থীম অন কৰে\n•নেপথ্যৰ কাৰ্যকলাপ, কিছুমান ভিজুৱেল ইফেক্ট আৰু “Hey Google”ৰ দৰে অন্য সুবিধাসমূহ অফ কৰে অথবা সেইবোৰ সীমাবদ্ধ কৰে\n\n"<annotation id="url">"অধিক জানক"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ বেটাৰী সঞ্চয়কাৰীয়ে:\n\n• গাঢ় ৰঙৰ থীম অন কৰে\n• নেপথ্যৰ কাৰ্যকলাপ, কিছুমান ভিজুৱেল ইফেক্ট আৰু “Hey Google”ৰ দৰে অন্য সুবিধাসমূহ অফ কৰে অথবা সীমাবদ্ধ কৰে"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ডেটা ব্য়ৱহাৰ মাত্ৰা কম কৰিবৰ বাবে ডেটা সঞ্চয়কাৰীয়ে কিছুমান এপক নেপথ্য়ত ডেটা প্ৰেৰণ বা সংগ্ৰহ কৰাত বাধা প্ৰদান কৰে। আপুনি বৰ্তমান ব্য়ৱহাৰ কৰি থকা এটা এপে ডেটা ব্য়ৱহাৰ কৰিব পাৰে, কিন্তু সঘনাই এই কার্য কৰিব নোৱাৰিব পাৰে। ইয়াৰ অৰ্থ এইয়ে হ\'ব পাৰে যে, উদাহৰণস্বৰূপে, আপুনি নিটিপা পর্যন্ত প্ৰতিচ্ছবিসমূহ দেখুওৱা নহ’ব।"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ডেটা সঞ্চয়কাৰী অন কৰিবনে?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"অন কৰক"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"এই জাননীটোৰ গুৰুত্ব নীৰৱলৈ হ্ৰাস কৰা হৈছে। মতামত দিবলৈ টিপক।"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"এই জাননীটোৰ স্থান ওপৰলৈ কৰা হৈছে। মতামত দিবলৈ টিপক।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"এই জাননীটোৰ স্থান তললৈ কৰা হৈছে। মতামত দিবলৈ টিপক।"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ৰুটিন ম’ডৰ তথ্য জাননী"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"চ্চাৰ্জ কৰাৰ সচৰাচৰ সময়ৰ আগতেই বেটাৰি শেষ হ’ব পাৰে"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"বেটাৰিৰ খৰচ কমাবলৈ বেটাৰি সঞ্চয়কাৰী অন কৰা হৈছে"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index e0ea700..70c4534 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Admin tərəfindən yeniləndi"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Admin tərəfindən silindi"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batareyanın ömrünü artırmaq üçün Enerjiyə Qənaət funksiyası:\n\n• Qaranlıq temanı aktiv edir\n• Arxa fondakı fəaliyyəti, bəzi vizual effektləri və “Hey Google” kimi digər funksiyaları deaktiv edir və ya məhdudlaşdırır\n\n"<annotation id="url">"Ətraflı məlumat"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batareyanın ömrünü artırmaq üçün Enerjiyə Qənaət funksiyası:\n\n• Qaranlıq temanı aktiv edir\n• Arxa fondakı fəaliyyəti, bəzi vizual effektləri və “Hey Google” kimi digər funksiyaları deaktiv edir və ya məhdudlaşdırır"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Mobil interneti qənaətlə işlətmək məqsədilə Data Qanaəti bəzi tətbiqlərin fonda data göndərməsinin və qəbulunun qarşısını alır. Hazırda işlətdiyiniz tətbiq nisbətən az müntəzəmliklə data istifadə edə bilər. Örnək olaraq bu, o deməkdir ki, şəkil fayllarına toxunmadıqca onlar açılmayacaq."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Trafikə qənaət edilsin?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivləşdirin"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Bu bildiriş Səssiz rejimə keçirilib. Rəy bildirmək üçün toxunun."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Bu bildiriş yuxarı sıraya keçirilib. Rəy bildirmək üçün toxunun."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Bu bildiriş aşağı sıraya keçirilib. Rəy bildirmək üçün toxunun."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Rejim üçün məlumat bildirişi"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Batareya həmişəki vaxtdan əvvəl bitə bilər"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Enerjiyə Qənaət rejimi batareya istifadəsinin müddətini artırmaq üçün aktiv edilir"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index f9b24b7..1cd4c12 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1875,8 +1875,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao je administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Potvrdi"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Da bi se produžilo trajanje baterije, Ušteda baterije:\n\n• uključuje tamnu temu\n• isključuje ili ograničava aktivnosti u pozadini, neke vizuelne efekte i druge funkcije, na primer „Ok Google“\n\n"<annotation id="url">"Saznajte više"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Da bi se produžilo trajanje baterije, Ušteda baterije:\n\n• uključuje tamnu temu\n• isključuje ili ograničava aktivnosti u pozadini, neke vizuelne efekte i druge funkcije, na primer, „Ok Google“"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjila potrošnja podataka, Ušteda podataka sprečava neke aplikacije da šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može da pristupa podacima, ali će to činiti ređe. Na primer, slike se neće prikazivati dok ih ne dodirnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Želite da uključite Uštedu podataka?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string>
@@ -2105,6 +2107,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Ovo obaveštenje je degradirano u Nečujno. Dodirnite da biste naveli povratne informacije."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Ovo obaveštenje je rangirano više. Dodirnite da biste naveli povratne informacije."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Ovo obaveštenje je rangirano niže. Dodirnite da biste naveli povratne informacije."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Obaveštenje o informacijama Rutinskog režima"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Baterija će se možda isprazniti pre uobičajenog punjenja"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Ušteda baterije je aktivirana da bi se produžilo trajanje baterije"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 24172d9..c1abeca 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1663,7 +1663,7 @@
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Сістэма"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="4214648773120426288">"Bluetooth-аўдыё"</string>
<string name="wireless_display_route_description" msgid="8297563323032966831">"Бесправадны дысплей"</string>
- <string name="media_route_button_content_description" msgid="2299223698196869956">"Перадача"</string>
+ <string name="media_route_button_content_description" msgid="2299223698196869956">"Трансляцыя"</string>
<string name="media_route_chooser_title" msgid="6646594924991269208">"Падключыцца да прылады"</string>
<string name="media_route_chooser_title_for_remote_display" msgid="3105906508794326446">"Трансліраваць экран на прыладу"</string>
<string name="media_route_chooser_searching" msgid="6119673534251329535">"Пошук прылад..."</string>
@@ -1900,8 +1900,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Абноўлены вашым адміністратарам"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Выдалены вашым адміністратарам"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Каб павялічыць тэрмін службы акумулятара, рэжым эканоміі зараду:\n\n•·уключае цёмную тэму;\n• выключае ці абмяжоўвае дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты і іншыя функцыі, напрыклад \"Ok Google\"\n\n"<annotation id="url">"Даведацца больш"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Каб павялічыць тэрмін службы акумулятара, рэжым эканоміі зараду:\n\n• уключае цёмную тэму;\n• выключае ці абмяжоўвае дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты і іншыя функцыі, напрыклад \"Ok Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"У рэжыме \"Эканомія трафіка\" фонавая перадача для некаторых праграмам адключана. Праграма, якую вы зараз выкарыстоўваеце, можа атрымліваць доступ да даных, але радзей, чым звычайна. Напрыклад, відарысы могуць не загружацца, пакуль вы не націсніце на іх."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Уключыць Эканомію трафіка?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Уключыць"</string>
@@ -2140,6 +2142,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Гэта апавяшчэнне пераведзена ў рэжым \"Без гуку\". Націсніце тут і дайце водгук."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Гэта апавяшчэнне ацэнена як важнае. Націсніце тут і дайце водгук."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Гэта апавяшчэнне ацэнена як няважнае. Націсніце тут і дайце водгук."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Апавяшчэнне з інфармацыяй пра ўсталяваны рэжым"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Акумулятар можа разрадзіцца хутчэй, чым прыйдзе час звычайнай зарадкі"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Каб павялічыць тэрмін работы акумулятара, уключаны рэжым эканоміі зараду"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 2d5a885..52e686c92 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Актуализирано от администратора ви"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Изтрито от администратора ви"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"С цел удължаване на живота на батерията режимът за запазването ѝ:\n\n•·включва тъмната тема;\n•·изключва или ограничава активността на заден план, някои визуални ефекти и други функции, като например „Ok Google“.\n\n"<annotation id="url">"Научете повече"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"С цел удължаване на живота на батерията режимът за запазването ѝ:\n\n• включва тъмната тема;\n• изключва или ограничава активността на заден план, някои визуални ефекти и други функции, като например „Ok Google“."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"С цел намаляване на преноса на данни функцията за икономия на данни не позволява на някои приложения да изпращат или получават данни на заден план. Понастоящем използвано от вас приложение може да използва данни, но по-рядко. Това например може да означава, че изображенията не се показват, докато не ги докоснете."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Ще вкл. ли „Икономия на данни“?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Включване"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Това известие бе понижено до беззвучно. Докоснете, за да изпратите отзиви."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Това известие бе класирано по-високо. Докоснете, за да изпратите отзиви."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Това известие бе класирано по-ниско. Докоснете, за да изпратите отзиви."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Известие с информация за режима на поредица"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батерията може да се изтощи преди обичайното зареждане"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Режимът за запазване на батерията е активиран с цел удължаване на живота на батерията"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index cffa00e..17be781 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"আপনার প্রশাসক আপডেট করেছেন"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"আপনার প্রশাসক মুছে দিয়েছেন"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ঠিক আছে"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ব্যাটারি আরও বেশিক্ষণ চালাতে, ব্যাটারি সেভার:\n\n• ডার্ক থিম চালু করে\n• ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজ্যুয়াল এফেক্ট এবং “হ্যালো Google”-এর মতো অন্যান্য ফিচার বন্ধ বা সীমিত করে\n\n"<annotation id="url">"আরও জানুন"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ব্যাটারি আরও বেশিক্ষণ চালাতে, ব্যাটারি সেভার:\n\n• ডার্ক থিম চালু করে\n• ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজ্যুয়াল এফেক্ট এবং “হ্যালো Google”-এর মতো অন্যান্য ফিচার বন্ধ অথবা সীমিত করে"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ডেটার ব্যবহার কমাতে সহায়তা করার জন্য, ডেটা সেভার ব্যাকগ্রাউন্ডে কিছু অ্যাপ্লিকেশনকে ডেটা পাঠাতে বা গ্রহণ করতে বাধা দেয়৷ আপনি বর্তমানে এমন একটি অ্যাপ্লিকেশন ব্যবহার করছেন যেটি ডেটা অ্যাক্সেস করতে পারে, তবে সেটি কমই করে৷ এর ফলে যা হতে পারে, উদাহরণস্বরূপ, আপনি ছবির উপর ট্যাপ না করা পর্যন্ত সেগুলি দেখানো হবে না৷"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ডেটা সেভার চালু করবেন?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"চালু করুন"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"এই বিজ্ঞপ্তির গুরুত্ব কমিয়ে মিউট হিসেবে সেট করা হয়েছে। মতামত জানাতে ট্যাপ করুন।"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"এই বিজ্ঞপ্তির গুরুত্ব বাড়ানো হয়েছে। মতামত জানাতে ট্যাপ করুন।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"এই বিজ্ঞপ্তির গুরুত্ব কমানো হয়েছে। মতামত জানাতে ট্যাপ করুন।"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"রুটিন মোডের তথ্য সংক্রান্ত বিজ্ঞপ্তি"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"সাধারণত যখন চার্জ দেন, তার আগে চার্জ শেষ হয়ে যেতে পারে"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ডিভাইস বেশিক্ষণ চালু রাখতে ব্যাটারি সেভার চালু করা হয়েছে"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 5ab3aa1..b034223 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -542,7 +542,7 @@
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"povezivanje s uparenim Bluetooth uređajima"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Dozvoljava aplikaciji da se poveže s uparenim Bluetooth uređajima"</string>
<string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"oglašavanje na Bluetooth uređajima u blizini"</string>
- <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Aplikaciji omogućuje oglašavanje na Bluetooth uređajima u blizini"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Dozvoljava aplikaciji da vrši oglašavanje na Bluetooth uređajima u blizini"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"određivanje rel. položaja uređaja ultra širokog opsega u blizini"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Dozvolite aplikaciji da odredi relativni položaj između uređaja ultra širokog opsega u blizini"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informacije o preferiranoj usluzi plaćanja putem NFC-a"</string>
@@ -1875,8 +1875,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao je vaš administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je vaš administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Uredu"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n\n• Uključuje Tamnu temu\n• Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Ok Google\"\n\n"<annotation id="url">"Saznajte više"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n\n• Uključuje Tamnu temu\n• Isključuje ili ograničava aktivnost u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Ok Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Radi smanjenja prijenosa podataka, Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupiti podacima, ali će to činiti rjeđe. Naprimjer, to može značiti da se slike ne prikazuju dok ih ne dodirnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Uštedu podataka?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string>
@@ -2105,6 +2107,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Značaj ovog obavještenja je umanjen na Nečujno. Dodirnite da pošaljete povratne informacije."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Značaj ovog obavještenja je povećan. Dodirnite da pošaljete povratne informacije."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Značaj ovog obavještenja je umanjen. Dodirnite da pošaljete povratne informacije."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Obavještenje za informacije Rutinskog načina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Moguće je da će se baterija isprazniti prije uobičajenog punjenja"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Ušteda baterije je aktivirana da bi se produžio vijek trajanja baterije"</string>
@@ -2293,9 +2307,9 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sada možete uvećati dio ekrana"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Uključite u Postavkama"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Odbaci"</string>
- <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Deblokiraj mikrofon uređaja"</string>
- <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Deblokiraj fotoaparat uređaja"</string>
- <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Za <b><xliff:g id="APP">%s</xliff:g></b> i sve aplikacije i usluge"</string>
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Deblokirajte mikrofon uređaja"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Deblokirajte kameru uređaja"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Za aplikaciju <b><xliff:g id="APP">%s</xliff:g></b> te sve aplikacije i usluge"</string>
<string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Deblokiraj"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Privatnost senzora"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Ikona aplikacije"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index da02b0b..96f0b7c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualitzat per l\'administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Suprimit per l\'administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"D\'acord"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Per allargar la durada de la bateria, la funció Estalvi de bateria:\n\n• Activa el tema fosc.\n• Desactiva o restringeix l\'activitat en segon pla, alguns efectes visuals i altres funcions com \"Ok Google\".\n\n"<annotation id="url">"Més informació"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Per allargar la durada de la bateria, la funció Estalvi de bateria:\n\n• Activa el tema fosc.\n• Desactiva o restringeix l\'activitat en segon pla, alguns efectes visuals i altres funcions com \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a les dades, però menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Activar l\'Economitzador de dades?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activa"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"El nivell d\'aquesta notificació s\'ha disminuït a Silenci. Toca per proporcionar suggeriments."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Aquesta notificació s\'ha classificat amb un nivell superior. Toca per proporcionar suggeriments."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Aquesta notificació s\'ha classificat amb un nivell inferior. Toca per proporcionar suggeriments."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificació d\'informació del mode de rutina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"És possible que la bateria s\'esgoti abans de la càrrega habitual"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"S\'ha activat l\'estalvi de bateria per prolongar-ne la durada"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 3a25a8a..0dd472f 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1898,8 +1898,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizováno administrátorem"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Smazáno administrátorem"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Spořič baterie za účelem úspory energie:\n\n• Zapne tmavý motiv.\n• Vypne nebo omezí aktivitu na pozadí, některé vizuální efekty a další funkce jako „Ok Google“.\n\n"<annotation id="url">"Další informace"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Spořič baterie za účelem úspory energie:\n\n• Zapne tmavý motiv.\n• Vypne nebo omezí aktivitu na pozadí, některé vizuální efekty a další funkce jako „Ok Google“."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Z důvodu snížení využití dat brání spořič dat některým aplikacím v odesílání nebo příjmu dat na pozadí. Aplikace, kterou právě používáte, data přenášet může, ale může tak činit méně často. V důsledku toho se například obrázky nemusejí zobrazit, dokud na ně neklepnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Chcete zapnout Spořič dat?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Zapnout"</string>
@@ -2138,6 +2140,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Toto oznámení bylo ztlumeno. Po klepnutí můžete zadat zpětnou vazbu."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"U tohoto oznámení byla zvýšena priorita. Po klepnutí můžete zadat zpětnou vazbu."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"U tohoto oznámení byla snížena priorita. Po klepnutí můžete zadat zpětnou vazbu."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Informační oznámení režimu sledu činností"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Baterie se možná vybije před obvyklým časem nabití"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Byl aktivován spořič baterie za účelem prodloužení výdrže"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 4561a40..94b9a92 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Opdateret af din administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet af din administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batterisparefunktionen gør følgende for at spare på batteriet:\n\n• Aktiverer Mørkt tema\n• Deaktiverer eller begrænser aktivitet i baggrunden, visse visuelle effekter og andre funktioner som f.eks. \"Hey Google\"\n\n"<annotation id="url">"Få flere oplysninger"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batterisparefunktionen gør følgende for at spare på batteriet:\n\n• Aktiverer Mørkt tema\n• Deaktiverer eller begrænser aktivitet i baggrunden, visse visuelle effekter og andre funktioner som f.eks. \"Hey Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Datasparefunktionen forhindrer nogle apps i at sende eller modtage data i baggrunden for at reducere dataforbruget. En app, der er i brug, kan få adgang til data, men gør det måske ikke så ofte. Dette kan f.eks. betyde, at billeder ikke vises, før du trykker på dem."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Vil du aktivere Datasparefunktion?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivér"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Denne notifikation blev angivet som Lydløs. Tryk for at give feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Denne notifikation blev placeret højere. Tryk for at give feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Denne notifikation blev placeret lavere. Tryk for at give feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notifikation med oplysninger om rutinetilstand"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Enheden løber muligvis tør for batteri, inden du normalt oplader den"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Batterisparefunktion er aktiveret for at forlænge batteritiden"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index cb46d91..6e8ab72 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1526,7 +1526,7 @@
<string name="gpsNotifTicker" msgid="3207361857637620780">"Standortabfrage von <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="gpsNotifTitle" msgid="1590033371665669570">"Standortabfrage"</string>
<string name="gpsNotifMessage" msgid="7346649122793758032">"Angefordert von <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string>
- <string name="gpsVerifYes" msgid="3719843080744112940">"\"Ja\""</string>
+ <string name="gpsVerifYes" msgid="3719843080744112940">"„Ja“"</string>
<string name="gpsVerifNo" msgid="1671201856091564741">"Nein"</string>
<string name="sync_too_many_deletes" msgid="6999440774578705300">"Löschbegrenzung überschritten"</string>
<string name="sync_too_many_deletes_desc" msgid="7409327940303504440">"Es sind <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> gelöschte Elemente für <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, Konto <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>, vorhanden. Wie möchtest du fortfahren?"</string>
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Von deinem Administrator aktualisiert"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Von deinem Administrator gelöscht"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Der Energiesparmodus sorgt für eine längere Akkulaufzeit:\n\n• Das dunkle Design wird aktiviert\n• Hintergrundaktivitäten, einige optische Effekte und weitere Funktionen wie \"Ok Google\" werden abgeschaltet oder eingeschränkt\n\n"<annotation id="url">"Weitere Informationen"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Der Energiesparmodus sorgt für eine längere Akkulaufzeit:\n\n• Das dunkle Design wird aktiviert\n• Hintergrundaktivitäten, einige optische Effekte und weitere Funktionen wie \"Ok Google\" werden abgeschaltet oder eingeschränkt"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Der Datensparmodus verhindert zum einen, dass manche Apps im Hintergrund Daten senden oder empfangen, sodass weniger Daten verbraucht werden. Zum anderen werden die Datenzugriffe der gerade aktiven App eingeschränkt, was z. B. dazu führen kann, dass Bilder erst angetippt werden müssen, bevor sie sichtbar werden."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Datensparmodus aktivieren?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivieren"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Diese Benachrichtigung wurde auf „Lautlos“ herabgestuft. Tippe, um Feedback zu geben."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Diese Benachrichtigung wurde hochgestuft. Tippe, um Feedback zu geben."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Diese Benachrichtigung wurde herabgestuft. Tippe, um Feedback zu geben."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Infomitteilung zum Ablaufmodus"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Dein Akku könnte vor der gewöhnlichen Ladezeit leer sein"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Energiesparmodus aktiviert, um die Akkulaufzeit zu verlängern"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 9cb6c24..517ba84 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ενημερώθηκε από τον διαχειριστή σας"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Διαγράφηκε από τον διαχειριστή σας"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Για την επέκταση της διάρκειας ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας:\n\n• Ενεργοποιεί το Σκούρο θέμα\n• Απενεργοποιεί ή περιορίζει τη δραστηριότητα παρασκηνίου, ορισμένα οπτικά εφέ και άλλες λειτουργίες όπως την εντολή Hey Google\n\n"<annotation id="url">"Μάθετε περισσότερα"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Για την επέκταση της διάρκειας ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας:\n\n• Ενεργοποιεί το Σκούρο θέμα\n• Απενεργοποιεί ή περιορίζει τη δραστηριότητα στο παρασκήνιο, ορισμένα οπτικά εφέ και άλλες λειτουργίες, όπως την εντολή Hey Google"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Προκειμένου να μειωθεί η χρήση δεδομένων, η Εξοικονόμηση δεδομένων αποτρέπει την αποστολή ή λήψη δεδομένων από ορισμένες εφαρμογές στο παρασκήνιο. Μια εφαρμογή που χρησιμοποιείτε αυτήν τη στιγμή μπορεί να χρησιμοποιήσει δεδομένα αλλά με μικρότερη συχνότητα. Για παράδειγμα, οι εικόνες μπορεί να μην εμφανίζονται μέχρι να τις πατήσετε."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Ενεργ.Εξοικονόμησης δεδομένων;"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Ενεργοποίηση"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Αυτή η ειδοποίηση υποβιβάστηκε στις Αθόρυβες. Πατήστε για να υποβάλετε σχόλια."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Αυτή η ειδοποίηση κατατάχθηκε ψηλότερα. Πατήστε για να υποβάλετε σχόλια."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Αυτή η ειδοποίηση κατατάχθηκε χαμηλότερα. Πατήστε για να υποβάλετε σχόλια."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Ειδοποίηση πληροφοριών λειτουργίας Ρουτίνας"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Η μπαταρία μπορεί να εξαντληθεί πριν από τη συνηθισμένη φόρτιση"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Η Εξοικονόμηση μπαταρίας ενεργοποιήθηκε για την επέκταση της διάρκειας ζωής της μπαταρίας"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 72c59e0..e841e27 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app you\'re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"This notification was demoted to silent. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"This notification was ranked higher. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"This notification was ranked lower. Tap to provide feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Routine Mode info notification"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Battery may run out before usual charge"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Battery Saver activated to extend battery life"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 03c5007..52d6dc5 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app you\'re currently using can access data, but may do so less frequently. This may mean, for example, that images don\'t display until you tap them."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"This notification was demoted to silent. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"This notification was ranked higher. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"This notification was ranked lower. Tap to provide feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Routine Mode info notification"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Battery may run out before usual charge"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Battery Saver activated to extend battery life"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index f52de96..a25f29c 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"This notification was demoted to silent. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"This notification was ranked higher. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"This notification was ranked lower. Tap to provide feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Routine Mode info notification"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Battery may run out before usual charge"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Battery Saver activated to extend battery life"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 4e770bf..dbb72e9 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"This notification was demoted to silent. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"This notification was ranked higher. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"This notification was ranked lower. Tap to provide feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Routine Mode info notification"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Battery may run out before usual charge"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Battery Saver activated to extend battery life"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index e9959c0..0c50419 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -1852,8 +1852,8 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects, and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation>""</string>
- <string name="battery_saver_description" msgid="6794188153647295212">"To extend battery life, Battery Saver:\n\n• Turns on Dark theme\n• Turns off or restricts background activity, some visual effects, and other features like “Hey Google”"</string>
+ <string name="battery_saver_description_with_learn_more" msgid="7963058670863485450">"Battery Saver turns on Dark theme and limits or turns off background activity, some visual effects, and features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation>""</string>
+ <string name="battery_saver_description" msgid="7695751399533397741">"Battery Saver turns on Dark theme and limits or turns off background activity, some visual effects, and features like “Hey Google”."</string>
<string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string>
@@ -2072,6 +2072,12 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"This notification was demoted to Silent. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"This notification was ranked higher. Tap to provide feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"This notification was ranked lower. Tap to provide feedback."</string>
+ <string name="nas_upgrade_notification_title" msgid="4224351129445073051">"Try enhanced notifications"</string>
+ <string name="nas_upgrade_notification_content" msgid="7036860187157134706">"To keep getting suggested actions, replies, and more, turn on enhanced notifications. Android Adaptive Notifications are no longer supported."</string>
+ <string name="nas_upgrade_notification_enable_action" msgid="4823652531622744798">"Turn on"</string>
+ <string name="nas_upgrade_notification_disable_action" msgid="7561210256700811433">"Not now"</string>
+ <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Learn more"</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="6276343083934111208">"Enhanced notifications can read all notification content, including personal information like contact names and messages. This feature can also dismiss notifications or take actions on buttons in notifications, such as answering phone calls.\n\nThis feature can also turn Priority mode on or off and change related settings."</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Routine Mode info notification"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Battery may run out before usual charge"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Battery Saver activated to extend battery life"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 8534cae..128e2fb 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -538,10 +538,8 @@
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Permite que la app descubra dispositivos Bluetooth cercanos y se conecte a ellos"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"conectarse a dispositivos Bluetooth vinculados"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Permite que la app se conecte a dispositivos Bluetooth vinculados"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"mostrar anuncios a dispositivos Bluetooth cercanos"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Permite que la app muestre anuncios a dispositivos Bluetooth cercanos"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"determinar posición entre disposit. Ultra Wideband"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permite que la app determine la posición relativa con dispositivos Ultra Wideband cercanos"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Información sobre servicio de pago NFC preferido"</string>
@@ -1854,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Tu administrador actualizó este paquete"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Tu administrador borró este paquete"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para extender la duración de batería, el Ahorro de batería hace lo siguiente:\n\n• Activa el Tema oscuro.\n• Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Hey Google\".\n\n"<annotation id="url">"Más información"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para extender la duración de batería, el Ahorro de batería hace lo siguiente:\n\n• Activa el Tema oscuro.\n• Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Hey Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Para reducir el uso de datos, el modo Ahorro de datos evita que algunas apps envíen y reciban datos en segundo plano. La app que estés usando podrá acceder a los datos, pero con menor frecuencia. De esta forma, por ejemplo, las imágenes no se mostrarán hasta que las presiones."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"¿Deseas activar Ahorro de datos?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string>
@@ -2074,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Esta notificación descendió de a Silenciada. Presiona para enviar comentarios."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Esta notificación recibió una clasificación superior. Presiona para enviar comentarios."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Esta notificación recibió una clasificación inferior. Presiona para enviar comentarios."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificación de información del modo de Rutinas"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Es posible que la batería se agote antes de la carga habitual"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Se activó el Ahorro de batería para extender la duración de la batería"</string>
@@ -2261,14 +2273,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Ahora puedes ampliar parte de la pantalla"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activar en Configuración"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Descartar"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Desbloquear el micrófono del dispositivo"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Desbloquear la cámara del dispositivo"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Para <b><xliff:g id="APP">%s</xliff:g></b> y todos los servicios y las apps"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Desbloquear"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Privacidad del sensor"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Ícono de la aplicación"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Imagen de marca de la aplicación"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index eb046bf..7bed3e6 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado por el administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado por el administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para que la batería dure más, Ahorro de batería hace lo siguiente:\n\n• Activa el tema oscuro.\n• Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Ok Google\".\n\n"<annotation id="url">"Más información"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para que la batería dure más, Ahorro de batería hace lo siguiente:\n\n• Activa el tema oscuro.\n• Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"El modo Ahorro de datos evita que algunas aplicaciones envíen o reciban datos en segundo plano, lo que puede reducir el uso de datos. Una aplicación activa puede acceder a los datos, aunque con menos frecuencia. Esto significa que es posible que, por ejemplo, algunas imágenes no se muestren hasta que las toques."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"¿Activar Ahorro de datos?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"La importancia de esta notificación ha disminuido a Silencio. Toca para enviar comentarios."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Esta notificación aparecerá en una posición más alta. Toca para enviar comentarios."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Esta notificación aparecerá en una posición más baja. Toca para enviar comentarios."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificación sobre el modo rutina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Quizás se agote la batería antes de lo habitual"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Se ha activado el modo Ahorro de batería para aumentar la duración de la batería"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 91d9f72..9672e84 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administraator on seda värskendanud"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administraator on selle kustutanud"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Aku tööea pikendamiseks teeb akusäästja järgmist.\n\n• Lülitab sisse tumeda teema.\n• Lülitab välja taustategevused, mõned visuaalsed efektid ja muud funktsioonid (nt „Ok Google”) või piirab neid.\n\n"<annotation id="url">"Lisateave"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Aku tööea pikendamiseks teeb akusäästja järgmist.\n\n• Lülitab sisse tumeda teema.\n• Lülitab välja taustategevused, mõned visuaalsed efektid ja muud funktsioonid (nt „Ok Google”) või piirab neid."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Andmekasutuse vähendamiseks keelab andmemahu säästja mõne rakenduse puhul andmete taustal saatmise ja vastuvõtmise. Rakendus, mida praegu kasutate, pääseb andmesidele juurde, kuid võib seda teha väiksema sagedusega. Seetõttu võidakse näiteks pildid kuvada alles siis, kui neid puudutate."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Lülitada andmemahu säästja sisse?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Lülita sisse"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Sellele märguandele määrati prioriteet Vaikne. Puudutage tagasiside andmiseks."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Sellele märguandele määrati kõrgem prioriteet. Puudutage tagasiside andmiseks."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Sellele märguandele määrati madalam prioriteet. Puudutage tagasiside andmiseks."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Rutiinirežiimi teabe märguanne"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Aku võib enne tavapärast laadimist tühjaks saada"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Akusäästja aktiveeriti aku tööea pikendamiseks"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index d970337..08c4c06 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administratzaileak eguneratu du"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratzaileak ezabatu du"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Ados"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Bateriaren iraupena luzatzeko, erabili bateria-aurrezlea:\n\n• Gai iluna aktibatzen du.\n• Desaktibatu edo murriztu egiten ditu atzeko planoko jarduerak, zenbait efektu bisual eta beste eginbide batzuk, hala nola \"Ok Google\".\n\n"<annotation id="url">"Lortu informazio gehiago"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Bateriaren iraupena luzatzeko, erabili bateria-aurrezlea:\n\n• Gai iluna aktibatzen du.\n• Atzeko planoko jarduerak, zenbait efektu bisual eta beste eginbide batzuk desaktibatzen edo murrizten ditu, hala nola \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Datuen erabilera murrizteko, atzeko planoan datuak bidaltzea eta jasotzea galarazten die datu-aurrezleak aplikazio batzuei. Une honetan erabiltzen ari zaren aplikazioak atzitu egin ahal izango ditu datuak, baina baliteke maiztasun txikiagoarekin atzitzea. Horrela, adibidez, baliteke irudiak ez erakustea haiek sakatu arte."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Datu-aurrezlea aktibatu nahi duzu?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktibatu"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Isilarazi da jakinarazpena. Sakatu hau oharrak bidaltzeko."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Mailaz igo da jakinarazpena. Sakatu hau oharrak bidaltzeko."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Mailaz jaitsi da jakinarazpena. Sakatu hau oharrak bidaltzeko."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Ohitura moduaren informazio-jakinarazpena"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Baliteke bateria ohi baino lehenago agortzea"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Bateria-aurrezlea aktibatuta dago bateriaren iraupena luzatzeko"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 64b56ef..fc9162a 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"توسط سرپرست سیستم بهروزرسانی شد"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"توسط سرپرست سیستم حذف شد"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"تأیید"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"برای افزایش عمر باتری، «بهینهسازی باتری»:\n\n• «طرح زمینه تیره» را روشن میکند\n• فعالیت پسزمینه، برخی جلوههای بصری، و دیگر ویژگیها مانند «Ok Google» را خاموش یا محدود میکند\n\n"<annotation id="url">"بیشتر بدانید"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"برای افزایش عمر باتری، «بهینهسازی باتری»:\n\n• «طرح زمینه تیره» را روشن میکند\n• فعالیت پسزمینه، برخی جلوههای بصری، و دیگر ویژگیها مثل «Ok Google» را خاموش یا محدود میکند"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"برای کمک به کاهش مصرف داده، «صرفهجویی داده» از ارسال و دریافت داده در پسزمینه در بعضی برنامهها جلوگیری میکند. برنامهای که درحالحاضر استفاده میکنید میتواند به دادهها دسترسی داشته باشد اما دفعات دسترسی آن محدود است. این میتواند به این معنی باشد که، برای مثال، تصاویر تازمانیکه روی آنها ضربه نزنید نشان داده نمیشوند."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"«صرفهجویی داده» روشن شود؟"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"روشن کردن"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"این اعلان به «بیصدا» تنزل داده شد. برای ارائه بازخورد، ضربه بزنید."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"این اعلان در رتبه بالاتری قرار گرفت. برای ارائه بازخورد، ضربه بزنید."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"این اعلان در رتبه پایینتری قرار گرفت. برای ارائه بازخورد، ضربه بزنید."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"اعلان اطلاعات حالت روال معمول"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ممکن است شارژ باتری قبل از شارژ معمول تمام شود"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"جهت افزایش عمر باتری، «بهینهسازی باتری» فعال شد"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 1c89295..4ff7593 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Järjestelmänvalvoja päivitti tämän."</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Järjestelmänvalvoja poisti tämän."</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Parantaakseen akunkestoa Virransäästö\n\n• laittaa tumman teeman päälle\n• laittaa pois päältä tai rajoittaa taustatoimintoja, joitakin visuaalisia tehosteita ja muita ominaisuuksia (esim. Ok Google).\n\n"<annotation id="url">"Lue lisää"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Parantaakseen akunkestoa Virransäästö\n\n• laittaa tumman teeman päälle\n• laittaa pois päältä tai rajoittaa taustatoimintoja, joitakin visuaalisia tehosteita ja muita ominaisuuksia (esim. Ok Google)."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Data Saver estää joitakin sovelluksia lähettämästä tai vastaanottamasta tietoja taustalla, jotta datan käyttöä voidaan vähentää. Käytössäsi oleva sovellus voi yhä käyttää dataa, mutta se saattaa tehdä niin tavallista harvemmin. Tämä voi tarkoittaa esimerkiksi sitä, että kuva ladataan vasta, kun kosketat sitä."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Otetaanko Data Saver käyttöön?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Ota käyttöön"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Tämä ilmoitus hiljennettiin. Lähetä palautetta napauttamalla."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Tämän ilmoituksen tasoa nostettiin. Lähetä palautetta napauttamalla."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Tämän ilmoituksen tasoa laskettiin. Lähetä palautetta napauttamalla."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Ohjelmatilan tietoilmoitus"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Akku saattaa loppua ennen normaalia latausaikaa"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Virransäästö otettu käyttöön akunkeston pidentämiseksi"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 0f59525..20365d0 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -538,10 +538,8 @@
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Permet à l\'application de découvrir les appareils Bluetooth à proximité et de s\'y connecter"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"se connecter aux appareils Bluetooth associés"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Permet à l\'application de se connecter aux appareils Bluetooth associés"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"envoyer annonces aux appareils Bluetooth à proxim."</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Permet à l\'application d\'envoyer des annonces aux appareils Bluetooth à proximité"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"déterminer la position relative entre des appareils à bande ultralarge à proximité"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Autorisez l\'application à déterminer la position relative entre des appareils à bande ultralarge à proximité"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Information sur le service préféré de paiement NFC"</string>
@@ -1854,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Mise à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Pour prolonger l\'autonomie de la pile, l\'économiseur de pile effectue les actions suivantes :\n\n•·Active le thème sombre\n•·Désactive ou limite l\'activité en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme « Ok Google »\n\n"<annotation id="url">"En savoir plus"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Pour prolonger l\'autonomie de la pile, l\'économiseur de pile effectue les actions suivantes :\n\n•·Active le thème sombre\n•·Désactive ou limite l\'activité en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme « Ok Google »"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Pour aider à diminuer l\'utilisation des données, la fonctionnalité Économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Une application que vous utilisez actuellement peut accéder à des données, mais peut le faire moins souvent. Cela peut signifier, par exemple, que les images ne s\'affichent pas jusqu\'à ce que vous les touchiez."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'économiseur de données?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activer"</string>
@@ -2074,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Cette notification a été rétrogradée à Silencieuse. Touchez pour envoyer des commentaires."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Cette notification a été élevée d\'un niveau. Touchez pour envoyer des commentaires."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Cette notification a été abaissée d\'un niveau. Touchez pour envoyer des commentaires."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notification d\'information du mode Routine"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"La pile pourrait s\'épuiser avant la charge habituelle"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Le mode Économiseur de pile est activé afin de prolonger l\'autonomie"</string>
@@ -2261,14 +2273,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Vous pouvez agrandir une partie votre écran."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activer dans les paramètres"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Fermer"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Débloquer le microphone de l\'appareil"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Débloquer l\'appareil photo de l\'appareil"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Pour <b><xliff:g id="APP">%s</xliff:g></b> ainsi que toutes les applications et tous les services"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Débloquer"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Confidentialité des capteurs"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Icône de l\'application"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Image de marque de l\'application"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 444cfed..7afe476 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Mis à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie :\n\n • active le thème sombre ;\n • désactive ou restreint les activités en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme \"Hey Google\".\n\n"<annotation id="url">"En savoir plus"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie :\n\n• active le thème sombre ;\n • désactive ou restreint les activités en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme \"Hey Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Pour réduire la consommation de données, l\'économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Ainsi, les applications que vous utilisez peuvent toujours accéder aux données, mais pas en permanence. Par exemple, il se peut que les images ne s\'affichent pas tant que vous n\'appuyez pas dessus."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'économiseur de données ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activer"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Cette notification a été abaissée à la catégorie \"Silencieux\". Appuyez ici pour donner votre avis."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Cette notification a été élevée d\'un niveau. Appuyez ici pour donner votre avis."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Cette notification a été abaissée d\'un niveau. Appuyez ici pour donner votre avis."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notification d\'information du mode Routine"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Vous risquez d\'être à court de batterie plus tôt que prévu"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Économiseur de batterie activé pour prolonger l\'autonomie"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index caa4c03..123419b 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -174,7 +174,7 @@
<string name="httpErrorTooManyRequests" msgid="2149677715552037198">"Estanse a procesar demasiadas solicitudes. Téntao de novo máis tarde."</string>
<string name="notification_title" msgid="5783748077084481121">"Erro de inicio de sesión en <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
<string name="contentServiceSync" msgid="2341041749565687871">"Sincronizar"</string>
- <string name="contentServiceSyncNotificationTitle" msgid="5766411446676388623">"Non se puido realizar a sincronización"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="5766411446676388623">"Non se puido realizar a vinculación"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="4562226280528716090">"Tentáronse eliminar demasiados elementos de <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
<string name="low_memory" product="tablet" msgid="5557552311566179924">"O almacenamento da tableta está cheo. Elimina algúns ficheiros para liberar espazo."</string>
<string name="low_memory" product="watch" msgid="3479447988234030194">"O almacenamento do reloxo está cheo. Elimina algúns ficheiros para liberar espazo."</string>
@@ -368,7 +368,7 @@
<string name="permlab_readCellBroadcasts" msgid="5869884450872137693">"ler mensaxes de difusión móbil"</string>
<string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"Permite á aplicación ler mensaxes de difusión móbil recibidas polo teu dispositivo. As alertas de difusión móbil envíanse nalgunhas localizacións para avisar de situacións de emerxencia. É posible que aplicacións maliciosas afecten ao rendemento ou funcionamento do teu dispositivo cando se recibe unha difusión móbil de emerxencia."</string>
<string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"ler feeds subscritos"</string>
- <string name="permdesc_subscribedFeedsRead" msgid="6911349196661811865">"Permite á aplicación obter detalles acerca dos feeds sincronizados actualmente."</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="6911349196661811865">"Permite á aplicación obter detalles acerca dos feeds vinculados actualmente."</string>
<string name="permlab_sendSms" msgid="7757368721742014252">"enviar e consultar mensaxes de SMS"</string>
<string name="permdesc_sendSms" msgid="6757089798435130769">"Permite á aplicación enviar mensaxes SMS. É posible que esta acción implique custos inesperados. É posible que as aplicacións maliciosas che custen diñeiro debido ao envío de mensaxes sen a túa confirmación."</string>
<string name="permlab_readSms" msgid="5164176626258800297">"ler as túas mensaxes de texto (SMS ou MMS)"</string>
@@ -521,27 +521,25 @@
<string name="permdesc_changeWifiMulticastState" product="tv" msgid="1336952358450652595">"Permite que a aplicación reciba paquetes enviados a todos os dispositivos a través dunha rede wifi utilizando enderezos de emisión múltiple, non só o teu dispositivo Android TV. Utiliza máis enerxía que o modo que non inclúe a emisión múltiple."</string>
<string name="permdesc_changeWifiMulticastState" product="default" msgid="8296627590220222740">"Permite á aplicación recibir paquetes enviados a todos os dispositivos a través dunha rede wifi utilizando enderezos de multidifusión, non só o teu teléfono. Utiliza máis enerxía que o modo que non inclúe a multidifusión."</string>
<string name="permlab_bluetoothAdmin" msgid="6490373569441946064">"acceder á configuración de Bluetooth"</string>
- <string name="permdesc_bluetoothAdmin" product="tablet" msgid="5370837055438574863">"Permite á aplicación configurar a tableta Bluetooth local e descubrir e sincronizar con dispositivos remotos."</string>
+ <string name="permdesc_bluetoothAdmin" product="tablet" msgid="5370837055438574863">"Permite á aplicación configurar a tableta Bluetooth local e descubrir e vincular con dispositivos remotos."</string>
<string name="permdesc_bluetoothAdmin" product="tv" msgid="1623992984547014588">"Permite que a aplicación configure o Bluetooth no dispositivo Android TV, descubra dispositivos remotos e se vincule con eles."</string>
- <string name="permdesc_bluetoothAdmin" product="default" msgid="7381341743021234863">"Permite á aplicación configurar o teléfono Bluetooth local e descubrir e sincronizar con dispositivos remotos."</string>
+ <string name="permdesc_bluetoothAdmin" product="default" msgid="7381341743021234863">"Permite á aplicación configurar o teléfono Bluetooth local e descubrir e vincular con dispositivos remotos."</string>
<string name="permlab_accessWimaxState" msgid="7029563339012437434">"conectar e desconectar de WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="5372734776802067708">"Permite á aplicación determinar se WiMAX está activado e obter información acerca das redes WiMAX que están conectadas."</string>
<string name="permlab_changeWimaxState" msgid="6223305780806267462">"cambiar estado de WiMAX"</string>
<string name="permdesc_changeWimaxState" product="tablet" msgid="4011097664859480108">"Permite á aplicación conectar e desconectar a tableta de redes WiMAX."</string>
<string name="permdesc_changeWimaxState" product="tv" msgid="5373274458799425276">"Permite que a aplicación conecte e desconecte o dispositivo Android TV de redes WiMAX."</string>
<string name="permdesc_changeWimaxState" product="default" msgid="1551666203780202101">"Permite á aplicación conectar e desconectar o teléfono de redes WiMAX."</string>
- <string name="permlab_bluetooth" msgid="586333280736937209">"sincronizar con dispositivos Bluetooth"</string>
- <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite á aplicación ver a configuración do Bluetooth na tableta e efectuar e aceptar conexións con dispositivos sincronizados."</string>
+ <string name="permlab_bluetooth" msgid="586333280736937209">"vincular con dispositivos Bluetooth"</string>
+ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite á aplicación ver a configuración do Bluetooth na tableta e efectuar e aceptar conexións con dispositivos vinculados."</string>
<string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Permite que a aplicación consulte a configuración do Bluetooth no dispositivo Android TV, e efectúe e acepte conexións con dispositivos vinculados."</string>
- <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite á aplicación ver a configuración do Bluetooth no teléfono e efectuar e aceptar conexións con dispositivos sincronizados."</string>
+ <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite á aplicación ver a configuración do Bluetooth no teléfono e efectuar e aceptar conexións con dispositivos vinculados."</string>
<string name="permlab_bluetooth_scan" msgid="5402587142833124594">"detectar e vincular dispositivos Bluetooth"</string>
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Permite que a aplicación detecte dispositivos Bluetooth próximos e se vincule a eles"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"conectarse a dispositivos Bluetooth vinculados"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Permite que a aplicación se conecte aos dispositivos Bluetooth vinculados"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"enviar anuncios a dispositivos Bluetooth próximos"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Permite que a aplicación envíe anuncios a dispositivos Bluetooth próximos"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"determinar posición entre dispositivos próximos"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permite que a aplicación determine a posición relativa entre os dispositivos próximos que usen banda ultralarga"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Información do servizo de pago de NFC preferido"</string>
@@ -663,12 +661,12 @@
<string-array name="face_error_vendor">
</string-array>
<string name="face_icon_content_description" msgid="465030547475916280">"Icona cara"</string>
- <string name="permlab_readSyncSettings" msgid="6250532864893156277">"ler a configuración de sincronización"</string>
- <string name="permdesc_readSyncSettings" msgid="1325658466358779298">"Permite á aplicación ler a configuración de sincronización dunha conta. Por exemplo, esta acción pode determinar se a aplicación Contactos se sincroniza cunha conta."</string>
- <string name="permlab_writeSyncSettings" msgid="6583154300780427399">"activar e desactivar a sincronización"</string>
- <string name="permdesc_writeSyncSettings" msgid="6029151549667182687">"Permite a unha aplicación modificar a configuración de sincronización dunha conta. Por exemplo, esta acción pode utilizarse para activar a sincronización da aplicación Contactos cunha conta."</string>
- <string name="permlab_readSyncStats" msgid="3747407238320105332">"ler as estatísticas de sincronización"</string>
- <string name="permdesc_readSyncStats" msgid="3867809926567379434">"Permite a unha aplicación ler as estatísticas de sincronización dunha conta, incluído o historial de eventos de sincronización e a cantidade de datos sincronizados."</string>
+ <string name="permlab_readSyncSettings" msgid="6250532864893156277">"ler a configuración de vinculación"</string>
+ <string name="permdesc_readSyncSettings" msgid="1325658466358779298">"Permite á aplicación ler a configuración de vinculación dunha conta. Por exemplo, esta acción pode determinar se a aplicación Contactos se vincula cunha conta."</string>
+ <string name="permlab_writeSyncSettings" msgid="6583154300780427399">"activar e desactivar a vinculación"</string>
+ <string name="permdesc_writeSyncSettings" msgid="6029151549667182687">"Permite a unha aplicación modificar a configuración de vinculación dunha conta. Por exemplo, esta acción pode utilizarse para activar a vinculación da aplicación Contactos cunha conta."</string>
+ <string name="permlab_readSyncStats" msgid="3747407238320105332">"ler as estatísticas de vinculación"</string>
+ <string name="permdesc_readSyncStats" msgid="3867809926567379434">"Permite a unha aplicación ler as estatísticas de vinculación dunha conta, incluído o historial de eventos de vinculación e a cantidade de datos vinculados."</string>
<string name="permlab_sdcardRead" msgid="5791467020950064920">"ler o almacenamento compartido"</string>
<string name="permdesc_sdcardRead" msgid="6872973242228240382">"Permite á aplicación ler o almacenamento compartido."</string>
<string name="permlab_sdcardWrite" msgid="4863021819671416668">"modificar ou eliminar o almacenamento compartido"</string>
@@ -1854,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado polo teu administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado polo teu administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para aumentar a duración da batería, a función Aforro de batería fai o seguinte:\n\n• Activa o tema escuro.\n• Desactiva ou restrinxe a actividade en segundo plano, algúns efectos visuais e outras funcións, como \"Ok Google\".\n\n"<annotation id="url">"Máis información"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para aumentar a duración da batería, a función Aforro de batería fai o seguinte:\n\n• Activa o tema escuro\n• Desactiva ou restrinxe a actividade en segundo plano, algúns efectos visuais e outras funcións, como \"Ok Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Para contribuír a reducir o uso de datos, o aforro de datos impide que algunhas aplicacións envíen ou reciban datos en segundo plano. Cando esteas utilizando unha aplicación, esta poderá acceder aos datos, pero é posible que o faga con menos frecuencia. Por exemplo, poida que as imaxes non se mostren ata que as toques."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Queres activar o aforro de datos?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string>
@@ -2074,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"O nivel desta notificación diminuíu a Silenciosa. Toca para compartir a túa opinión."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Esta notificación clasificouse nun nivel superior. Toca para compartir a túa opinión."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Esta notificación clasificouse nun nivel inferior. Toca para compartir a túa opinión."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificación da información do modo de rutina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"A batería pode esgotarse antes do habitual"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Para ampliar a duración da batería activouse a función Aforro de batería"</string>
@@ -2261,14 +2273,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Xa podes ampliar parte da pantalla"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activar en Configuración"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ignorar"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Desbloquea o micrófono do dispositivo"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Desbloquea a cámara do dispositivo"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Para <b><xliff:g id="APP">%s</xliff:g></b> e todas as aplicacións e servizos"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Desbloquear"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Privacidade do sensor"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Icona de aplicación"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Imaxe de marca da aplicación"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 3060391..f0e3f77 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"તમારા વ્યવસ્થાપક દ્વારા અપડેટ કરવામાં આવેલ છે"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"તમારા વ્યવસ્થાપક દ્વારા કાઢી નાખવામાં આવેલ છે"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ઓકે"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"બૅટરીની આવરદા વધારવા માટે, બૅટરી સેવર:\n\n• ઘેરી થીમ ચાલુ કરે છે\n• બૅકગ્રાઉન્ડ પ્રવૃત્તિ, અમુક વિઝ્યુઅલ ઇફેક્ટ અને “Ok Google” જેવી અન્ય સુવિધાઓ બંધ અથવા પ્રતિબંધિત કરે છે\n\n"<annotation id="url">"વધુ જાણો"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"બૅટરીની આવરદા વધારવા માટે, બૅટરી સેવર:\n\n• ઘેરી થીમ ચાલુ કરે છે\n• બૅકગ્રાઉન્ડ પ્રવૃત્તિ, અમુક વિઝ્યુઅલ ઇફેક્ટ અને “ઓકે Google” જેવી અન્ય સુવિધાઓ બંધ અથવા પ્રતિબંધિત કરે છે"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ડેટા વપરાશને ઘટાડવામાં સહાય માટે, ડેટા સેવર કેટલીક ઍપને બૅકગ્રાઉન્ડમાં ડેટા મોકલવા અથવા પ્રાપ્ત કરવાથી અટકાવે છે. તમે હાલમાં ઉપયોગ કરી રહ્યાં છો તે ઍપ ડેટાને ઍક્સેસ કરી શકે છે, પરંતુ તે આ ક્યારેક જ કરી શકે છે. આનો અર્થ એ હોઈ શકે છે, ઉદાહરણ તરીકે, છબીઓ ત્યાં સુધી પ્રદર્શિત થશે નહીં જ્યાં સુધી તમે તેને ટૅપ નહીં કરો."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ડેટા સેવર ચાલુ કરીએ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ચાલુ કરો"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"નોટિફિકેશનને સાઇલન્ટ પર અવનત કરવામાં આવ્યું. પ્રતિસાદ આપવા માટે ટૅપ કરો."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"આ નોટિફિકેશનને ઉપલી રેંક આપવામાં આવી. પ્રતિસાદ આપવા માટે ટૅપ કરો."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"આ નોટિફિકેશનને નીચલી રેંક આપવામાં આવી. પ્રતિસાદ આપવા માટે ટૅપ કરો."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"રૂટિન મોડની માહિતીનું નોટિફિકેશન"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"સામાન્ય રીતે ચાર્જ કરવાના સમય પહેલાં બૅટરી સમાપ્ત થઈ શકે છે"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"બૅટરી આવરદા વધારવા માટે બૅટરી સેવર ચાલુ કર્યું"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 65eb10b..8def350 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"आपके व्यवस्थापक ने अपडेट किया है"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"आपके व्यवस्थापक ने हटा दिया है"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ठीक है"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर:\n\n• गहरे रंग वाली थीम चालू करता है\n• बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या इन्हें बंद कर देता है\n\n"<annotation id="url">"ज़्यादा जानें"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर:\n\n• गहरे रंग वाली थीम चालू करता है\n• बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या इन्हें बंद कर देता है"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"डेटा खर्च को कम करने के लिए, डेटा बचाने की सेटिंग कुछ ऐप्लिकेशन को बैकग्राउंड में डेटा भेजने या डेटा पाने से रोकती है. फ़िलहाल, आप जिस ऐप्लिकेशन का इस्तेमाल कर रहे हैं वह डेटा ऐक्सेस कर सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इमेज तब तक दिखाई नहीं देंगी जब तक कि आप उन पर टैप नहीं करते."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा बचाने की सेटिंग चालू करें?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"चालू करें"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"इस सूचना के मिलने पर होने वाली आवाज़ बंद कर दी गई है. सुझाव/शिकायत/राय देने के लिए टैप करें."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"इस सूचना को रैंकिंग में ऊपर किया गया था. सुझाव/शिकायत/राय देने के लिए टैप करें."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"इस सूचना को रैंकिंग में नीचे किया गया था. सुझाव/शिकायत/राय देने के लिए टैप करें."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"रूटीन मोड जानकारी की सूचना"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"बैटरी आम तौर पर जितने समय चलती है, उससे पहले खत्म हो सकती है"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"बैटरी लाइफ़ बढ़ाने के लिए \'बैटरी सेवर\' चालू हो गया है"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 093257f..8938dd2 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1875,8 +1875,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"U redu"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Da bi se produljilo trajanje baterije, Štednja baterije:\n\n• Uključuje Tamnu temu.\n• Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\".\n\n"<annotation id="url">"Saznajte više"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Da bi se produljilo trajanje baterije, Štednja baterije:\n\n• Uključuje Tamnu temu.\n• Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjio podatkovni promet, značajka Štednja podatkovnog prometa onemogućuje nekim aplikacijama slanje ili primanje podataka u pozadini. Aplikacija koju trenutačno upotrebljavate može pristupiti podacima, no možda će to činiti rjeđe. To može značiti da se, na primjer, slike neće prikazivati dok ih ne dodirnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Štednju podatkovnog prometa?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string>
@@ -2105,6 +2107,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Obavijest je degradirana u bešumnu. Dodirnite da biste poslali povratne informacije."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Obavijest je više rangirana. Dodirnite da biste poslali povratne informacije."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Obavijest je niže rangirana. Dodirnite da biste poslali povratne informacije."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Obavještavanje o informacijama u Rutinskom načinu rada"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Baterija se može isprazniti prije uobičajenog vremena punjenja"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Štednja baterije aktivirana je kako bi se produljilo trajanje baterije"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index ed42173..8a4cfab 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"A rendszergazda által frissítve"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"A rendszergazda által törölve"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Az Akkumulátorkímélő mód az akkumulátor üzemidejének növelése érdekében a következőket teszi:\n\n• Bekapcsolja a sötét témát.\n• Kikapcsolja vagy korlátozza a háttérben futó tevékenységeket, egyes vizuális effekteket, az „Ok Google” parancsot és egyéb funkciókat.\n\n"<annotation id="url">"További információ"</annotation>"."</string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Az Akkumulátorkímélő mód az akkumulátor üzemidejének növelése érdekében a következőket teszi:\n\n• Bekapcsolja a sötét témát.\n• Kikapcsolja vagy korlátozza a háttérben futó tevékenységeket, egyes vizuális effekteket, az „Ok Google” parancsot és egyéb funkciókat."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Az adatforgalom csökkentése érdekében az Adatforgalom-csökkentő megakadályozza, hogy egyes alkalmazások adatokat küldjenek vagy fogadjanak a háttérben. Az Ön által jelenleg használt alkalmazások hozzáférhetnek az adatokhoz, de csak ritkábban. Ez például azt jelentheti, hogy a képek csak rákoppintás után jelennek meg."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Bekapcsolja az Adatforgalom-csökkentőt?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Bekapcsolás"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Ezt az értesítést némára állította a rendszer. Visszajelzés küldéséhez koppintson ide."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Ezt az értesítést előrébb sorolta a rendszer. Visszajelzés küldéséhez koppintson ide."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Ezt az értesítést hátrébb sorolta a rendszer. Visszajelzés küldéséhez koppintson ide."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Információs értesítés a rutinmódról"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Előfordulhat, hogy az akkumulátor lemerül a szokásos töltési időszak előtt"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Akkumulátorkímélő mód aktiválva az akkumulátor üzemidejének növelése érdekében"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 1f0f351..aebdbe6 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Թարմացվել է ձեր ադմինիստրատորի կողմից"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Ջնջվել է ձեր ադմինիստրատորի կողմից"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Եղավ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Մարտկոցի աշխատաժամանակը երկարացնելու համար «Մարտկոցի տնտեսում» գործառույթը՝\n\n• Միացնում է մուգ թեման։\n• Անջատում կամ սահմանափակում է աշխատանքը ֆոնային ռեժիմում, որոշ վիզուալ էֆեկտներ և այլ գործառույթներ, օրինակ՝ «Ok Google» հրահանգը։\n\n"<annotation id="url">"Իմանալ ավելին"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Մարտկոցի աշխատաժամանակը երկարացնելու համար «Մարտկոցի տնտեսում» գործառույթը՝\n\n• Միացնում է մուգ թեման։\n• Անջատում կամ սահմանափակում է աշխատանքը ֆոնային ռեժիմում, որոշ վիզուալ էֆեկտներ և այլ գործառույթներ, օրինակ՝ «Ok Google» հրահանգը։"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Թրաֆիկի տնտեսման ռեժիմում որոշ հավելվածների համար տվյալների ֆոնային փոխանցումն անջատված է։ Հավելվածը, որն օգտագործում եք, կարող է տվյալներ փոխանցել և ստանալ, սակայն ոչ այնքան հաճախ: Օրինակ՝ պատկերները կցուցադրվեն միայն դրանց վրա սեղմելուց հետո։"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Միացնե՞լ թրաֆիկի տնտեսումը"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Միացնել"</string>
@@ -1894,8 +1896,8 @@
<string name="zen_mode_until_next_day" msgid="1403042784161725038">"Մինչև <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_until" msgid="2250286190237669079">"Մինչև <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_alarm" msgid="7046911727540499275">"Մինչև ժ. <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>-ը (հաջորդ զարթուցիչը)"</string>
- <string name="zen_mode_forever" msgid="740585666364912448">"Մինչև չանջատեք"</string>
- <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Մինչև չանջատեք «Չանհանգստացնել» գործառույթը"</string>
+ <string name="zen_mode_forever" msgid="740585666364912448">"Մինչև անջատեք"</string>
+ <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Մինչև անջատեք «Չանհանգստացնել» գործառույթը"</string>
<string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
<string name="toolbar_collapse_description" msgid="8009920446193610996">"Թաքցնել"</string>
<string name="zen_mode_feature_name" msgid="3785547207263754500">"Չանհանգստացնել"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Այս ծանուցման կարևորության մակարդակը իջեցվել է և դարձել անձայն։ Հպեք՝ կարծիք հայտնելու համար։"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Այս ծանուցման կարևորության մակարդակը բարձրացվել է։ Հպեք՝ կարծիք հայտնելու համար։"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Այս ծանուցման կարևորության մակարդակն իջեցվել է։ Հպեք՝ կարծիք հայտնելու համար։"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Ծանուցում լիցքավորման մասին"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Մարտկոցը կարող է սովորականից շուտ սպառվել"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Մարտկոցի կյանքը երկարացնելու համար ակտիվացվել է մարտկոցի տնտեսման ռեժիմը"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 1c55fb8..bae2d48 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Diupdate oleh admin Anda"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Dihapus oleh admin Anda"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Oke"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Untuk memperpanjang masa pakai baterai, Penghemat Baterai akan:\n\n• Mengaktifkan Tema gelap\n• Menonaktifkan atau membatasi aktivitas di latar belakang, beberapa efek visual, dan fitur lain seperti “Ok Google”\n\n"<annotation id="url">"Pelajari lebih lanjut"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Untuk memperpanjang masa pakai baterai, Penghemat Baterai akan:\n\n• Mengaktifkan Tema gelap\n• Menonaktifkan atau membatasi aktivitas di latar belakang, beberapa efek visual, dan fitur lain seperti “Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangi penggunaan data, Penghemat Data mencegah beberapa aplikasi mengirim atau menerima data di latar belakang. Aplikasi yang sedang digunakan dapat mengakses data, tetapi frekuensinya agak lebih jarang. Misalnya saja, gambar hanya akan ditampilkan setelah diketuk."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Aktifkan Penghemat Data?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktifkan"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Notifikasi ini didemosikan menjadi Senyap. Ketuk untuk memberikan masukan."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Notifikasi ini diberi peringkat lebih tinggi. Ketuk untuk memberikan masukan."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Notifikasi ini diberi peringkat lebih rendah. Ketuk untuk memberikan masukan."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notifikasi info Mode Rutinitas"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Baterai mungkin habis sebelum pengisian daya biasanya"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Penghemat Baterai diaktifkan untuk memperpanjang masa pakai baterai"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 3fa5bbf..c23362e 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Kerfisstjóri uppfærði"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Kerfisstjóri eyddi"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Í lagi"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n\n•·Kveikir á dökku þema\n•·Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Ok Google“\n\n"<annotation id="url">"Frekari upplýsingar"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n\n• Kveikir á dökku þema\n• Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Ok Google“"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Gagnasparnaður getur hjálpað til við að draga úr gagnanotkun með því að hindra forrit í að senda eða sækja gögn í bakgrunni. Forrit sem er í notkun getur náð í gögn, en gerir það kannski sjaldnar. Niðurstaðan getur verið að myndir eru ekki birtar fyrr en þú ýtir á þær, svo dæmi sé tekið."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Kveikja á gagnasparnaði?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Kveikja"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Þessi tilkynning var gerð þögul. Ýttu til að senda ábendingu."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Þessi tilkynning fékk hærri stöðu. Ýttu til að senda ábendingu."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Þessi tilkynning fékk lægri stöðu. Ýttu til að senda ábendingu."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Upplýsingatilkynning aðgerðastillingar"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Rafhlaðan kann að tæmast áður en hún kemst í hleðslu"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Kveikt á rafhlöðusparnaði til að lengja endingu rafhlöðunnar"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 451598a..80aaa37 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Aggiornato dall\'amministratore"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminato dall\'amministratore"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Per estendere la durata della batteria, la funzionalità di risparmio energetico:\n\n• Attiva il tema scuro\n• Disattiva o limita le attività in background, alcuni effetti visivi e altre funzionalità come \"Hey Google\"\n\n"<annotation id="url">"Scopri di più"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Per estendere la durata della batteria, la funzionalità di risparmio energetico:\n\n• Attiva il tema scuro\n• Disattiva o limita le attività in background, alcuni effetti visivi e altre funzionalità come \"Hey Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Per contribuire a ridurre l\'utilizzo dei dati, la funzione Risparmio dati impedisce ad alcune app di inviare o ricevere dati in background. Un\'app in uso può accedere ai dati, ma potrebbe farlo con meno frequenza. Esempio: le immagini non vengono visualizzate finché non le tocchi."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Attivare Risparmio dati?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Attiva"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Questa notifica è stata retrocessa a Silenziosa. Tocca per dare un feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Questa notifica è stata posizionata più in alto. Tocca per dare un feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Questa notifica è stata posizionata più in basso. Tocca per dare un feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notifica di informazioni sulla modalità Routine"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"La batteria potrebbe esaurirsi prima della ricarica abituale"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Risparmio energetico attivo per far durare di più la batteria"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index fdb3b16..734224c 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1898,8 +1898,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"עודכנה על ידי מנהל המערכת"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"נמחקה על ידי מנהל המערכת"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"אישור"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n• מפעילה עיצוב כהה\n• מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Hey Google\n\n"<annotation id="url">"למידע נוסף"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n• מפעילה עיצוב כהה\n• משביתה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Hey Google"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"כדי לסייע בהפחתת השימוש בנתונים, חוסך הנתונים (Data Saver) מונע מאפליקציות מסוימות שליחה או קבלה של נתונים ברקע. אפליקציה שבה נעשה שימוש כרגע יכולה לגשת לנתונים, אבל בתדירות נמוכה יותר. המשמעות היא, למשל, שתמונות יוצגו רק לאחר שמקישים עליהן."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"להפעיל את חוסך הנתונים?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"הפעלה"</string>
@@ -2138,6 +2140,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ההתראה הזו הורדה בדרגה ל\'שקטה\'. יש להקיש כדי לשלוח משוב."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"דירוג ההתראה הזו הוגבה. יש להקיש כדי לשלוח משוב."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ההתראה הזו דורגה נמוך יותר. יש להקיש כדי לשלוח משוב."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"התראת מידע לגבי מצב שגרתי"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"הסוללה עלולה להתרוקן לפני המועד הרגיל של הטעינה"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"תכונת החיסכון בסוללה הופעלה כדי להאריך את חיי הסוללה"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 37ad3c4..b38d9dc 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -538,10 +538,8 @@
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"付近の Bluetooth デバイスの検出とペア設定をアプリに許可します"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"ペア設定された Bluetooth デバイスへの接続"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"ペア設定された Bluetooth デバイスへの接続をアプリに許可します"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"付近の Bluetooth デバイスへの広告の配信"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"付近の Bluetooth デバイスへの広告の配信をアプリに許可します"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"付近の Ultra Wideband デバイス間の相対位置の特定"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"付近の Ultra Wideband デバイス間の相対位置の特定をアプリに許可します"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"優先される NFC お支払いサービスの情報"</string>
@@ -1854,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"管理者により更新されています"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"管理者により削除されています"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"電池を長持ちさせるためにバッテリー セーバーが行う操作:\n\n• ダークテーマを ON にする\n• バックグラウンド アクティビティ、一部の視覚効果や、「OK Google」などの機能を OFF にする、または制限する\n\n"<annotation id="url">"詳細"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"電池を長持ちさせるためにバッテリー セーバーが行う操作:\n\n• ダークテーマを ON にする\n• バックグラウンド アクティビティ、一部の視覚効果や、「OK Google」などの機能を OFF にする、または制限する"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"データセーバーは、一部のアプリによるバックグラウンドでのデータ送受信を停止することでデータ使用量を抑制します。使用中のアプリからデータを送受信することはできますが、その頻度は低くなる場合があります。この影響として、たとえば画像はタップしないと表示されないようになります。"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"データセーバーを ON にしますか?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ON にする"</string>
@@ -2074,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"この通知の重要度がサイレントに下がりました。タップしてフィードバックをお送りください。"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"この通知の重要度が上がりました。タップしてフィードバックをお送りください。"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"この通知の重要度が下がりました。タップしてフィードバックをお送りください。"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ルーティン モード情報の通知"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"通常の充電を行う前に電池が切れる可能性があります"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"電池を長持ちさせるため、バッテリー セーバーが有効になりました"</string>
@@ -2261,14 +2273,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"画面の一部を拡大できるようになりました"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"[設定] で ON にする"</string>
<string name="dismiss_action" msgid="1728820550388704784">"閉じる"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"デバイスのマイクのブロックを解除してください"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"デバイスのカメラのブロックを解除してください"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"<b><xliff:g id="APP">%s</xliff:g></b> とすべてのアプリ、サービス"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"ブロックを解除"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"センサー プライバシー"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"アプリのアイコン"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"アプリのブランド イメージ"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 1f1b6de..a14c551 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -538,10 +538,8 @@
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"საშუალებას აძლევს აპს, აღმოაჩინოს ახლომახლო Bluetooth მოწყობილობები დასაწყვილებლად"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"დაწყვილებულ Bluetooth მოწყობილობებთან დაკავშირება"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"საშუალებას აძლევს აპს, დაუკავშირდეს დაწყვილებულ Bluetooth მოწყობილობებს"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"ახლ. Bluetooth მოწყობილობებზე რეკლამის განთავსება"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"საშუალებას აძლევს აპს, რეკლამა განათავსოს ახლომახლო Bluetooth მოწყობილობებზე"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"შედარებითი პოზიციის დადგენა ახლომახლო ულტრაფართო სიხშირის მოწყობილობების შესახებ"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"ნებას რთავს აპს, დაადგინოს შედარებითი პოზიცია ახლომახლო ულტრაფართო სიხშირის მოწყობილობების შესახებ"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"უპირატესი NFC გადახდის სერვისის ინფორმაცია"</string>
@@ -1854,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"განახლებულია თქვენი ადმინისტრატორის მიერ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"წაიშალა თქვენი ადმინისტრატორის მიერ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"კარგი"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ბატარეის მუშაობის გახანგრძლივების მიზნით, ბატარეის დამზოგველი:\n\n• ჩართავს ბნელ თემას\n• გამორთავს ან ზღუდავს ფონურ აქტივობას, გარკვეულ ვიზუალურ ეფექტებს და სხვა ფუნქციებს, მაგალითად, „Hey Google“\n\n"<annotation id="url">"შეიტყვეთ მეტი"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ბატარეის მუშაობის გახანგრძლივების მიზნით, ბატარეის დამზოგი:\n\n• ჩართავს ბნელ თემას\n• გამორთავს ან შეზღუდავს ფონურ აქტივობას, გარკვეულ ვიზუალურ ეფექტებს და სხვა ფუნქციებს, მაგალითად, „Hey Google“"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"მობილური ინტერნეტის მოხმარების შემცირების მიზნით, მონაცემთა დამზოგველი ზოგიერთ აპს ფონურ რეჟიმში მონაცემთა გაგზავნასა და მიღებას შეუზღუდავს. თქვენ მიერ ამჟამად გამოყენებული აპი მაინც შეძლებს მობილურ ინტერნეტზე წვდომას, თუმცა ამას ნაკლები სიხშირით განახორციელებს. ეს ნიშნავს, რომ, მაგალითად, სურათები არ გამოჩნდება მანამ, სანამ მათ საგანგებოდ არ შეეხებით."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ჩაირთოს მონაცემთა დამზოგველი?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ჩართვა"</string>
@@ -2074,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ეს შეტყობინება ჩამოქვეითდა და გახდა „ჩუმი“. შეეხეთ გამოხმაურების მოსაწოდებლად."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ეს შეტყობინება დაწინაურდა. შეეხეთ გამოხმაურების მოსაწოდებლად."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ეს შეტყობინება ჩამოქვეითდა. შეეხეთ გამოხმაურების მოსაწოდებლად."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"რუტინის რეჟიმის საინფორმაციო შეტყობინება"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ბატარეა შეიძლება დაჯდეს დატენის ჩვეულ დრომდე"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ბატარეის დამზოგი გააქტიურდა ბატარეის მუშაობის გასახანგრძლივლებლად"</string>
@@ -2261,14 +2273,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"ახლა უკვე შეგიძლიათ ეკრანის ნაწილის გადიდება"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ჩართვა პარამეტრებში"</string>
<string name="dismiss_action" msgid="1728820550388704784">"უარყოფა"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"მოწყობილობის მიკროფონის განბლოკვა"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"მოწყობილობის კამერის განბლოკვა"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"აპისთვის <b><xliff:g id="APP">%s</xliff:g></b> და სხვა აპებისა და მომსახურებებისთვის"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"განბლოკვა"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"სენსორის კონფიდენციალურობა"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"აპლიკაციის ხატულა"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"აპლიკაციის ბრენდის სურათი"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index b6951f3..8dbe6ee 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Әкімші жаңартқан"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Әкімші жойған"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Жарайды"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Батарея жұмысының ұзақтығын арттыру үшін Батареяны үнемдеу режимі:\n\n•қараңғы тақырыпты іске қосады;\n•фондық әрекеттерді, кейбір көрнекі әсерлерді және \"Ok Google\" сияқты басқа да функцияларды өшіреді не шектейді.\n\n"<annotation id="url">"Толығырақ"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Батарея ұзағырақ жұмыс істеуі үшін, Батареяны үнемдеу режимі:\n\n• қараңғы тақырыпты қосады;\n•фондық жұмысты, кейбір визуалды әсерлерді және \"Ok Google\" сияқты басқа функцияларды өшіреді не шектейді."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Дерек шығынын азайту үшін Трафикті үнемдеу режимінде кейбір қолданбаларға деректі фондық режимде жіберуге және алуға тыйым салынады. Ашық тұрған қолданба деректі шектеулі шамада пайдаланады (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Трафикті үнемдеу функциясын қосу керек пе?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Қосу"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Бұл хабарландырудың маңыздылық деңгейі \"Үнсіз\" санатына төмендетілді. Пікір қалдыру үшін түртіңіз."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Бұл хабарландырудың маңыздылық деңгейі көтерілді. Пікір қалдыру үшін түртіңіз."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Бұл хабарландырудың маңыздылық деңгейі төмендетілді. Пікір қалдыру үшін түртіңіз."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Режим туралы хабарландыру"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батарея заряды азаюы мүмкін"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Батарея ұзаққа жетуі үшін, Батареяны үнемдеу режимі іске қосылды"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 170e160..e294f38 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"ធ្វើបច្ចុប្បន្នភាពដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"លុបដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"យល់ព្រម"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ដើម្បីបង្កើនកម្រិតថាមពលថ្ម មុខងារសន្សំថ្ម៖\n\n• បើករចនាប័ទ្មងងឹត\n• បិទ ឬដាក់កំហិតលើសកម្មភាពផ្ទៃខាងក្រោយ ឥទ្ធិពលជារូបភាពមួយចំនួន និងមុខងារផ្សេងទៀតដូចជា “Hey Google” ជាដើម\n\n"<annotation id="url">"ស្វែងយល់បន្ថែម"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ដើម្បីបង្កើនកម្រិតថាមពលថ្ម មុខងារសន្សំថ្ម៖\n\n• បើករចនាប័ទ្មងងឹត\n• បិទ ឬដាក់កំហិតលើសកម្មភាពផ្ទៃខាងក្រោយ ឥទ្ធិពលរូបភាពមួយចំនួន និងមុខងារផ្សេងទៀតដូចជា “Ok Google” ជាដើម"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ដើម្បីជួយកាត់បន្ថយការប្រើប្រាស់ទិន្នន័យ កម្មវិធីសន្សំសំចៃទិន្នន័យរារាំងកម្មវិធីមួយចំនួនមិនឲ្យបញ្ជូន ឬទទួលទិន្នន័យនៅផ្ទៃខាងក្រោយទេ។ កម្មវិធីដែលអ្នកកំពុងប្រើនាពេលបច្ចុប្បន្នអាចចូលប្រើប្រាស់ទិន្នន័យបាន ប៉ុន្តែអាចនឹងមិនញឹកញាប់ដូចមុនទេ។ ឧទាហរណ៍ រូបភាពមិនបង្ហាញទេ លុះត្រាតែអ្នកប៉ះរូបភាពទាំងនោះ។"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"បើកកម្មវិធីសន្សំសំចៃទិន្នន័យ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"បើក"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ការជូនដំណឹងនេះត្រូវបានបន្ទាបតំណែងទៅស្ងាត់។ សូមចុចដើម្បីផ្ដល់មតិកែលម្អ។"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ការជូនដំណឹងនេះត្រូវបានចាត់ថ្នាក់ខ្ពស់ជាងមុន។ សូមចុចដើម្បីផ្ដល់មតិកែលម្អ។"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ការជូនដំណឹងនេះត្រូវបានចាត់ថ្នាក់ទាបជាងមុន។ សូមចុចដើម្បីផ្ដល់មតិកែលម្អ។"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ការជូនដំណឹងព័ត៌មានរបស់មុខងារទម្លាប់"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ថ្មអាចនឹងអស់ មុនពេលសាកថ្មធម្មតា"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"បានបើកដំណើរការមុខងារសន្សំថ្ម ដើម្បីបង្កើនកម្រិតថាមពលថ្ម"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 48a9169..a030715 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಪ್ಡೇಟ್ ಮಾಡಲ್ಪಟ್ಟಿದೆ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಳಿಸಿದ್ದಾರೆ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ಸರಿ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು, ಬ್ಯಾಟರಿ ಸೇವರ್:\n\n• ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ\n•ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ದೃಶ್ಯಾತ್ಮಕ ಎಫೆಕ್ಟ್ಗಳು ಮತ್ತು “ಹೇ Google” ನಂತಹ ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಆಫ್ ಮಾಡುತ್ತದೆ ಅಥವಾ ನಿರ್ಬಂಧಿಸುತ್ತದೆ\n\n"<annotation id="url">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು, ಬ್ಯಾಟರಿ ಸೇವರ್:\n\n• ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ\n• ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ವಿಷುವಲ್ ಎಫೆಕ್ಟ್ಗಳು ಮತ್ತು “Ok Google” ನಂತಹ ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಆಫ್ ಮಾಡುತ್ತದೆ ಅಥವಾ ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ಡೇಟಾ ಬಳಕೆ ಕಡಿಮೆ ಮಾಡುವ ನಿಟ್ಟಿನಲ್ಲಿ, ಡೇಟಾ ಸೇವರ್ ಕೆಲವು ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಅಥವಾ ಸ್ವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ನೀವು ಪ್ರಸ್ತುತ ಬಳಸುತ್ತಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಆದರೆ ಪದೇ ಪದೇ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಇದರರ್ಥ, ಉದಾಹರಣೆಗೆ, ನೀವು ಅವುಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವವರೆಗೆ ಆ ಚಿತ್ರಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ಡೇಟಾ ಸೇವರ್ ಆನ್ ಮಾಡಬೇಕೇ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ಆನ್ ಮಾಡಿ"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ಈ ಅಧಿಸೂಚನೆಗೆ ಸೈಲೆಂಟ್ಗೆ ಹಿಂಬಡ್ತಿ ನೀಡಲಾಗಿದೆ. ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ಈ ಅಧಿಸೂಚನೆಗೆ ಮೇಲಿನ ಸ್ಥಾನವನ್ನು ನೀಡಲಾಗಿದೆ. ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ಈ ಅಧಿಸೂಚನೆಗೆ ಕೆಳಗಿನ ಸ್ಥಾನವನ್ನು ನೀಡಲಾಗಿದೆ. ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ದೈನಂದಿನ ಸ್ಥಿತಿಯ ಮಾಹಿತಿಯ ಅಧಿಸೂಚನೆ"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ಚಾರ್ಜ್ಗೆ ಮೊದಲೆ ಬ್ಯಾಟರಿ ಮುಗಿದು ಬಿಡಬಹುದು"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ಬ್ಯಾಟರಿ ಅವಧಿ ಹೆಚ್ಚಿಸಲು ಬ್ಯಾಟರಿ ಸೇವರ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index c72222c..aa64179 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"관리자에 의해 업데이트되었습니다."</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"관리자에 의해 삭제되었습니다."</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"확인"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"배터리 수명을 늘리기 위해 절전 모드가 다음과 같이 작동합니다.\n\n• 어두운 테마를 사용 설정합니다.\n• 백그라운드 활동, 일부 시각 효과 및 \'Hey Google\'과 같은 기타 기능을 사용 중지하거나 제한합니다.\n\n"<annotation id="url">"자세히 알아보기"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"배터리 수명을 연장하기 위해 절전 모드가 다음과 같이 작동합니다.\n\n• 어두운 테마를 사용 설정합니다.\n• 백그라운드 활동, 일부 시각 효과 및 \'Hey Google\' 등의 기타 기능을 사용 중지하거나 제한합니다."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"데이터 사용량을 줄이기 위해 데이터 절약 모드는 일부 앱이 백그라운드에서 데이터를 전송하거나 수신하지 못하도록 합니다. 현재 사용 중인 앱에서 데이터에 액세스할 수 있지만 빈도가 줄어듭니다. 예를 들면, 이미지를 탭하기 전에는 이미지가 표시되지 않습니다."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"데이터 절약 모드를 사용 설정하시겠습니까?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"사용 설정"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"이 알림의 중요도가 무음으로 하향되었습니다. 의견을 보내려면 탭하세요."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"이전에 이 알림의 중요도는 더 높았습니다. 의견을 보내려면 탭하세요."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"이전에 이 알림의 중요도는 더 낮았습니다. 의견을 보내려면 탭하세요."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"루틴 모드 정보 알림"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"평소에 충전하는 시간 전에 배터리가 소진될 수 있습니다."</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"배터리 수명을 연장하기 위해 절전 모드가 활성화되었습니다."</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index b27e1ea..86aa419 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Администраторуңуз жаңыртып койгон"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Администраторуңуз жок кылып салган"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ЖАРАЙТ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Батареяны көбүрөөк убакытка жеткирүү үчүн Батареяны үнөмдөгүч режиминде:\n\n• Караңгы тема күйгүзүлөт\n• Фондогу аракеттерди, айрым визуалдык эффекттерди жана \"Окей Google\" сыяктуу башка функцияларды өчүрөт же чектейт\n\n"<annotation id="url">"Кеңири маалымат"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Батареяны көбүрөөк убакытка жеткирүү үчүн Батареяны үнөмдөгүч режими:\n\n• Караңгы тема күйгүзүлөт\n• Фондогу аракеттерди, айрым визуалдык эффекттерди жана \"Окей Google\" сыяктуу башка функцияларды өчүрөт же чектейт"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Трафикти үнөмдөө режиминде айрым колдонмолор маалыматтарды фондо өткөрө алышпайт. Учурда сиз пайдаланып жаткан колдонмо маалыматтарды жөнөтүп/ала алат, бирок адаттагыдан азыраак өткөргөндүктөн, анын айрым функциялары талаптагыдай иштебей коюшу мүмкүн. Мисалы, сүрөттөр басылмайынча жүктөлбөйт."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Трафикти үнөмдөө режимин иштетесизби?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Күйгүзүү"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Бул билдирменин маанилүүлүгү Үнсүз болуп төмөндөтүлдү. Пикир билдирүү үчүн таптап коюңуз."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Бул билдирменин маанилүүлүгү жогорулатылды. Пикир билдирүү үчүн таптап коюңуз."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Бул билдирменин маанилүүлүгү төмөндөтүлдү. Пикир билдирүү үчүн таптап коюңуз."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Режимдин адаттагы билдирмеси"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батарея кубаттоого чейин отуруп калышы мүмкүн"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Батареянын отуруп калбашы үчүн Батареяны үнөмдөгүч режими иштетилди"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 3849183..0b53554 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"ຖືກອັບໂຫລດໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ຖືກລຶບອອກໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ຕົກລົງ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ເພື່ອຍືດອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະ:\n\n• ເປີດໃຊ້ຮູບແບບສີສັນມືດ\n• ປິດ ຫຼື ຈຳກັດການເຄື່ອນໄຫວໃນພື້ນຫຼັງ, ເອັບເຟັກດ້ານພາບບາງຢ່າງ ແລະ ຄຸນສົມບັດອື່ນໆ ເຊັ່ນ: “Ok Google”\n\n"<annotation id="url">"ສຶກສາເພີ່ມເຕີມ"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ເພື່ອຍືດອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະ:\n\n• ເປີດໃຊ້ຮູບແບບສີສັນມືດ\n• ປິດ ຫຼື ຈຳກັດການເຄື່ອນໄຫວໃນພື້ນຫຼັງ, ເອັບເຟັກດ້ານພາບບາງຢ່າງ ແລະ ຄຸນສົມບັດອື່ນໆ ເຊັ່ນ: “Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ເພື່ອຊ່ວຍຫຼຸດຜ່ອນການນຳໃຊ້ຂໍ້ມູນ, ຕົວປະຢັດອິນເຕີເນັດຈະປ້ອງກັນບໍ່ໃຫ້ບາງແອັບສົ່ງ ຫຼື ຮັບຂໍ້ມູນໃນພື້ນຫຼັງ. ແອັບໃດໜຶ່ງທີ່ທ່ານກຳລັງໃຊ້ຢູ່ຈະສາມາດເຂົ້າເຖິງຂໍ້ມູນໄດ້ ແຕ່ອາດເຂົ້າເຖິງໄດ້ຖີ່ໜ້ອຍລົງ. ນີ້ອາດໝາຍຄວາມວ່າ ຮູບພາບຕ່າງໆອາດບໍ່ສະແດງຈົນກວ່າທ່ານຈະແຕະໃສ່ກ່ອນ."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ເປີດຕົວປະຢັດອິນເຕີເນັດບໍ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ເປີດໃຊ້"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ການແຈ້ງເຕືອນນີ້ຖືກຫຼຸດລະດັບເປັນປິດສຽງແລ້ວ. ແຕະເພື່ອສົ່ງຄຳຕິຊົມ."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ການແຈ້ງເຕືອນນີ້ຖືກເລື່ອນລະດັບຂຶ້ນແລ້ວ. ແຕະເພື່ອສົ່ງຄຳຕິຊົມ."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ການແຈ້ງເຕືອນນີ້ຖືກຫຼຸດລະດັບລົງແລ້ວ. ແຕະເພື່ອສົ່ງຄຳຕິຊົມ."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ການແຈ້ງເຕືອນຂໍ້ມູນໂໝດກິດຈະວັດປະຈຳວັນ"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ແບັດເຕີຣີອາດໝົດກ່ອນການສາກຕາມປົກກະຕິ"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ເປີດຕົວປະຢັດແບັດເຕີຣີເພື່ອຂະຫຍາຍອາຍຸແບັດເຕີຣີ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index a4f41de..5a0b665 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -544,10 +544,8 @@
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Leidžiama programai aptikti ir susieti „Bluetooth“ įrenginius netoliese"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"prisijungimas prie susietų „Bluetooth“ įrenginių"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Leidžiama programai prisijungti prie susietų „Bluetooth“ įrenginių"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"reklamuoti netoliese es. „Bluetooth“ įrenginiuose"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Programai leidžiama reklamuoti netoliese esančiuose „Bluetooth“ įrenginiuose"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"nustatyti apyt. netoliese es. itin plataus dažnio juostos įreng. poziciją"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Leisti programai nustatyti apytikslę netoliese esančių itin plataus dažnio juostos įrenginių poziciją"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Pageidaujama ARL mokėjimo paslaugos informacija"</string>
@@ -1900,8 +1898,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atnaujino administratorius"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Ištrynė administratorius"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Gerai"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Kad akumuliatorius veiktų ilgiau, Akumuliatoriaus tausojimo priemonė:\n\n• įjungia tamsiąją temą;\n• išjungia arba apriboja veiklą fone, kai kuriuos vaizdinius efektus ir kitas funkcijas, pvz., „Ok Google“.\n\n"<annotation id="url">"Sužinokite daugiau"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Kad akumuliatorius veiktų ilgiau, Akumuliatoriaus tausojimo priemonė:\n\n• įjungia tamsiąją temą;\n• išjungia arba apriboja veiklą fone, kai kuriuos vaizdinius efektus ir kitas funkcijas, pvz., „Ok Google“."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Kad padėtų sumažinti duomenų naudojimą, Duomenų taupymo priemonė neleidžia kai kurioms programoms siųsti ar gauti duomenų fone. Šiuo metu naudojama programa gali pasiekti duomenis, bet tai bus daroma rečiau. Tai gali reikšti, kad, pvz., vaizdai nebus pateikiami, jei jų nepaliesite."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Įj. Duomenų taupymo priemonę?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Įjungti"</string>
@@ -2140,6 +2140,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Šio pranešimo svarba sumažinta iki begarsio lygio. Palieskite, kad pateiktumėte atsiliepimą."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Šio pranešimo svarba padidinta. Palieskite, kad pateiktumėte atsiliepimą."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Šio pranešimo svarba sumažinta. Palieskite, kad pateiktumėte atsiliepimą."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Veiksmų sekos režimo informacijos pranešimas"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Akumuliatoriaus energija gali išsekti prieš įprastą įkrovimą"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Akumuliatoriaus tausojimo priemonė suaktyvinta, kad akumuliatorius veiktų ilgiau"</string>
@@ -2329,14 +2341,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Dabar galite padidinti dalį ekrano"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Įjungti nustatymuose"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Atmesti"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Panaikinkite įrenginio mikrofono blokavimą"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Panaikinkite įrenginio fotoaparato blokavimą"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"<b><xliff:g id="APP">%s</xliff:g></b> ir visoms programoms bei paslaugoms"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Panaikinti blokavimą"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Jutiklių privatumas"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Programos piktograma"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Programos prekės ženklo vaizdas"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index b80e528..b4edfc6 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1875,8 +1875,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atjaunināja administrators"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Dzēsa administrators"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Labi"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Lai paildzinātu akumulatora darbības laiku, ieslēdzot akumulatora enerģijas taupīšanas režīmu, tiek veiktas tālāk norādītās darbības.\n\n• Tiek ieslēgts tumšais motīvs.\n• Tiek izslēgtas vai ierobežotas fonā veiktās darbības, daži vizuālie efekti un citas funkcijas, piemēram, “Ok Google”.\n\n"<annotation id="url">"Uzzināt vairāk"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Lai paildzinātu akumulatora darbības laiku, ieslēdzot akumulatora enerģijas taupīšanas režīmu, tiek veiktas tālāk norādītās darbības.\n\n• Tiek ieslēgts tumšais motīvs.\n• Tiek izslēgtas vai ierobežotas fonā veiktās darbības, daži vizuālie efekti un citas funkcijas, piemēram, “Ok Google”."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Lai samazinātu datu lietojumu, datu lietojuma samazinātājs neļauj dažām lietotnēm fonā nosūtīt vai saņemt datus. Lietotne, kuru pašlaik izmantojat, var piekļūt datiem, bet, iespējams, piekļūs tiem retāk (piemēram, attēli tiks parādīti tikai tad, kad tiem pieskarsieties)."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Vai ieslēgt datu lietojuma samazinātāju?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Ieslēgt"</string>
@@ -2105,6 +2107,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Šī paziņojuma svarīgums tika pazemināts, un paziņojums tiks rādīts bez skaņas. Lai sniegtu atsauksmes, pieskarieties."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Šī paziņojuma rangs tika paaugstināts. Lai sniegtu atsauksmes, pieskarieties."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Šī paziņojuma rangs tika pazemināts. Lai sniegtu atsauksmes, pieskarieties."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Informatīvs paziņojums par akumulatoru"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Akumulators var izlādēties pirms parastā uzlādes laika"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Aktivizēts akumulatora enerģijas taupīšanas režīms, lai palielinātu akumulatora darbības ilgumu"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 4c32e14..fce03ff 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ажурирано од администраторот"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Избришано од администраторот"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Во ред"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"За да го продолжи траењето на батеријата, „Штедачот на батерија“:\n\n• вклучува темна тема\n• исклучува или ограничува активност во заднина, некои визуелни ефекти и други функции како „Hey Google“\n\n"<annotation id="url">"Дознајте повеќе"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"За да го продолжи траењето на батеријата, „Штедачот на батерија“:\n\n• вклучува темна тема\n• исклучува или ограничува активност во заднина, некои визуелни ефекти и други функции како „Hey Google“"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"За да се намали користењето интернет, „Штедачот на интернет“ спречува дел од апликациите да испраќаат или да примаат податоци во заднина. Одредена апликација што ја користите ќе може да користи интернет, но можеби тоа ќе го прави поретко. Ова значи, на пример, дека сликите нема да се прикажуваат додека не ги допрете."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Да се вклучи „Штедач на интернет“?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Вклучи"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Приоритетноста на известувањево е намалена на „Тивко“. Допрете за да дадете повратни информации."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Известувањево е рангирано повисоко. Допрете за да дадете повратни информации."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Известувањево е рангирано пониско. Допрете за да дадете повратни информации."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Известување за информации за режимот за рутини"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батеријата може да се потроши пред вообичаеното време за полнење"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Активиран е „Штедачот на батерија“ за да се продолжи траењето на батеријата"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 89318ac0..e50fb7bd 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"നിങ്ങളുടെ അഡ്മിൻ അപ്ഡേറ്റ് ചെയ്യുന്നത്"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"നിങ്ങളുടെ അഡ്മിൻ ഇല്ലാതാക്കുന്നത്"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ശരി"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ബാറ്ററി ലെെഫ് വർദ്ധിപ്പിക്കാൻ, \'ബാറ്ററി ലാഭിക്കൽ\' ഇനിപ്പറയുന്നവ ചെയ്യുന്നു:\n\n•ഡാർക്ക് തീം ഓണാക്കുന്നു\n•പശ്ചാത്തല ആക്റ്റിവിറ്റി, ചില വിഷ്വൽ ഇഫക്റ്റുകൾ, “Ok Google” പോലുള്ള മറ്റ് ഫീച്ചറുകൾ എന്നിവ ഓഫാക്കുകയോ നിയന്ത്രിക്കുകയോ ചെയ്യന്നു\n\n"<annotation id="url">"കൂടുതലറിയുക"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ബാറ്ററി ലെെഫ് വർദ്ധിപ്പിക്കാൻ, \'ബാറ്ററി ലാഭിക്കൽ\' ഇനിപ്പറയുന്നവ ചെയ്യുന്നു:\n\n• ഡാർക്ക് തീം ഓണാക്കുന്നു\n• പശ്ചാത്തല ആക്റ്റിവിറ്റി, ചില വിഷ്വൽ ഇഫക്റ്റുകൾ, “Ok Google” പോലുള്ള മറ്റ് ഫീച്ചറുകൾ എന്നിവ ഓഫാക്കുകയോ നിയന്ത്രിക്കുകയോ ചെയ്യുന്നു"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ഡാറ്റാ ഉപയോഗം കുറയ്ക്കാൻ സഹായിക്കുന്നതിനായി പശ്ചാത്തലത്തിൽ ഡാറ്റ അയയ്ക്കുകയോ സ്വീകരിക്കുകയോ ചെയ്യുന്നതിൽ നിന്ന് ചില ആപ്പുകളെ ഡാറ്റാ സേവർ തടയുന്നു. നിങ്ങൾ നിലവിൽ ഉപയോഗിക്കുന്ന ഒരു ആപ്പിന് ഡാറ്റ ആക്സസ് ചെയ്യാനാകും, എന്നാൽ വല്ലപ്പോഴും മാത്രമെ സംഭവിക്കുന്നുള്ളു. ഇതിനർത്ഥം, ഉദാഹരണമായി നിങ്ങൾ ടാപ്പ് ചെയ്യുന്നത് വരെ ചിത്രങ്ങൾ പ്രദർശിപ്പിക്കുകയില്ല എന്നാണ്."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ഡാറ്റ സേവർ ഓണാക്കണോ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ഓണാക്കുക"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ഈ അറിയിപ്പിനെ നിശബ്ദമാക്കി തരം താഴ്ത്തി. ഫീഡ്ബാക്ക് നൽകാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ഈ അറിയിപ്പിന് ഉയർന്ന റാങ്ക് നൽകി. ഫീഡ്ബാക്ക് നൽകാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ഈ അറിയിപ്പിന് താഴ്ന്ന റാങ്ക് നൽകി. ഫീഡ്ബാക്ക് നൽകാൻ ടാപ്പ് ചെയ്യുക."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ദിനചര്യ മോഡ് വിവരത്തെ കുറിച്ചുള്ള അറിയിപ്പ്"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"സാധാരണയുള്ളതിലും നേരത്തെ ബാറ്ററിയുടെ ചാർജ് തീർന്നേക്കാം"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ബാറ്ററി ലൈഫ് വര്ദ്ധിപ്പിക്കാൻ, ബാറ്ററി ലാഭിക്കൽ സജീവമാക്കി"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 87b9958..87ee801 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Таны админ шинэчилсэн"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Таны админ устгасан"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгч:\n\n•Бараан загварыг асаадаг\n•Арын үйл ажиллагаа, зарим визуал эффект болон “Hey Google” зэрэг бусад онцлогийг унтрааж эсвэл хязгаарладаг\n\n"<annotation id="url">"Нэмэлт мэдээлэл авах"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Батарей хэмнэгч нь батарейн ажиллах хугацааг уртасгахын тулд:\n\n• Бараан загварыг асаадаг\n• Арын үйл ажиллагаа, зарим визуал эффект болон “Hey Google” зэрэг бусад онцлогийг унтрааж эсвэл хязгаарладаг"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Дата ашиглалтыг багасгахын тулд дата хэмнэгч нь ар талд ажиллаж буй зарим апп-н өгөгдлийг илгээх болон авахаас сэргийлдэг. Таны одоогийн ашиглаж буй апп нь өгөгдөлд хандах боломжтой хэдий ч тогтмол хандахгүй. Энэ нь жишээлбэл зургийг товших хүртэл харагдахгүй гэсэн үг юм."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Дата хэмнэгчийг асаах уу?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Асаах"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Энэ мэдэгдлийг Чимээгүй болгож зэргийг нь бууруулсан байна. Санал хүсэлт өгөхийн тулд товшино уу."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Энэ мэдэгдлийг дээгүүр зэрэглэсэн байна. Санал хүсэлт өгөхийн тулд товшино уу."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Энэ мэдэгдлийг доогуур зэрэглэсэн байна. Санал хүсэлт өгөхийн тулд товшино уу."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Хэвшлийн горимын мэдээллийн мэдэгдэл"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батарей ихэвчлэн цэнэглэдэг хугацаанаас өмнө дуусаж болзошгүй"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгчийг идэвхжүүллээ"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 89c7ebd..01b767e 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"आपल्या प्रशासकाने अपडेट केले"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"आपल्या प्रशासकाने हटवले"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ओके"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"बॅटरी लाइफ वाढवण्यासाठी बॅटरी सेव्हर:\n\n•गडद थीम सुरू करते\n•बॅकग्राउंड ॲक्टिव्हिटी, काही व्हिज्युअल इफेक्ट आणि \"Ok Google\" यांसारखी वैशिष्ट्ये बंद किंवा मर्यादित करते.\n\n"<annotation id="url">"अधिक जाणून घ्या"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"बॅटरी लाइफ वाढवण्यासाठी बॅटरी सेव्हर:\n\n• गडद थीम सुरू करते\n• बॅकग्राउंड ॲक्टिव्हिटी, काही व्हिज्युअल इफेक्ट आणि “Ok Google” यांसारखी इतर वैशिष्ट्ये बंद किंवा मर्यादित करते"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"डेटाचा वापर कमी करण्यात मदत करण्यासाठी काही अॅप्सना बॅकग्राउंडमध्ये डेटा पाठवण्यास किंवा मिळवण्यास डेटा सर्व्हर प्रतिबंध करतो. तुम्ही सध्या वापरत असलेले अॅप डेटा अॅक्सेस करू शकते, पण तसे खूप कमी वेळा होते. याचाच अर्थ असा की, तुम्ही इमेजवर टॅप करेपर्यंत त्या डिस्प्ले होणार नाहीत असे होऊ शकते."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा सेव्हर सुरू करायचे?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"सुरू करा"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ही सूचना सायलंट करण्यात आली आहे. फीडबॅक देण्यासाठी टॅप करा."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"हा सूचनेला उच्च रँक करण्यात आले. फीडबॅक देण्यासाठी टॅप करा."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"या सूचनेला कमी रँक करण्यात आले. फीडबॅक देण्यासाठी टॅप करा."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"दिनक्रम मोडची माहिती सूचना"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"चार्जिंगची सामान्य पातळी गाठेपर्यंत कदाचित बॅटरी संपू शकते"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"बॅटरी लाइफ वाढवण्यासाठी बॅटरी सेव्हर सुरू केला आहे"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 09c6edc..d5fe785 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1162,7 +1162,7 @@
<string name="redo" msgid="7231448494008532233">"Buat semula"</string>
<string name="autofill" msgid="511224882647795296">"Autolengkap"</string>
<string name="textSelectionCABTitle" msgid="5151441579532476940">"Pemilihan teks"</string>
- <string name="addToDictionary" msgid="8041821113480950096">"Tambah ke kamus"</string>
+ <string name="addToDictionary" msgid="8041821113480950096">"Tambahkan pada kamus"</string>
<string name="deleteText" msgid="4200807474529938112">"Padam"</string>
<string name="inputMethod" msgid="1784759500516314751">"Kaedah input"</string>
<string name="editTextMenuTitle" msgid="857666911134482176">"Tindakan teks"</string>
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Dikemas kini oleh pentadbir anda"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Dipadamkan oleh pentadbir anda"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Untuk melanjutkan hayat bateri, Penjimat Bateri:\n\n• Menghidupkan Tema gelap\n• Mematikan atau mengehadkan aktiviti latar belakang, sesetengah kesan visual dan ciri lain seperti “Ok Google”\n\n"<annotation id="url">"Ketahui lebih lanjut"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Untuk melanjutkan hayat bateri, Penjimat Bateri:\n\n•Menghidupkan Tema gelap\n• Mematikan atau mengehadkan aktiviti latar belakang, sesetengah kesan visual dan ciri-ciri lain seperti “Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangkan penggunaan data, Penjimat Data menghalang sesetengah apl daripada menghantar atau menerima data di latar. Apl yang sedang digunakan boleh mengakses data tetapi mungkin tidak secara kerap. Perkara ini mungkin bermaksud bahawa imej tidak dipaparkan sehingga anda mengetik pada imej itu, contohnya."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Hidupkan Penjimat Data?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Hidupkan"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Pemberitahuan ini telah diturun taraf kepada Senyap. Ketik untuk memberikan maklum balas."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Pemberitahuan ini berada di kedudukan lebih tinggi. Ketik untuk memberikan maklum balas."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Pemberitahuan ini berada di kedudukan lebih rendah. Ketik untuk memberikan maklum balas."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Pemberitahuan maklumat Mod Rutin"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Bateri mungkin habis sebelum pengecasan biasa"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Penjimat Bateri diaktifkan untuk memanjangkan hayat bateri"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 944bf87..5f6a26a5 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -276,7 +276,7 @@
<string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"၉၉၉+"</string>
<string name="notification_hidden_text" msgid="2835519769868187223">"အကြောင်းကြားချက်အသစ်"</string>
<string name="notification_channel_virtual_keyboard" msgid="6465975799223304567">"ပကတိအသွင်ကီးဘုတ်"</string>
- <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"ကီးဘုတ် ခလုတ်ခုံ"</string>
+ <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"စက်၏ ကီးဘုတ်"</string>
<string name="notification_channel_security" msgid="8516754650348238057">"လုံခြုံရေး"</string>
<string name="notification_channel_car_mode" msgid="2123919247040988436">"ကားမုဒ်"</string>
<string name="notification_channel_account" msgid="6436294521740148173">"အကောင့် အခြေအနေ"</string>
@@ -326,7 +326,7 @@
<string name="permgrouplab_phone" msgid="570318944091926620">"ဖုန်း"</string>
<string name="permgroupdesc_phone" msgid="270048070781478204">"ဖုန်းခေါ်ဆိုမှုများ ပြုလုပ်ရန်နှင့် စီမံရန်"</string>
<string name="permgrouplab_sensors" msgid="9134046949784064495">"စက်၏ အာရုံခံစနစ်များ"</string>
- <string name="permgroupdesc_sensors" msgid="2610631290633747752">"သင်၏ အဓိကကျသော လက္ခဏာများအကြောင်း အာရုံခံကိရိယာဒေတာကို ရယူသုံးစွဲရန်"</string>
+ <string name="permgroupdesc_sensors" msgid="2610631290633747752">"သင်၏အရေးပြီးသော ကျန်းမာရေးလက္ခဏာဆိုင်ရာ အာရုံခံကိရိယာဒေတာကို ရယူရန်"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ဝင်းဒိုးတွင် ပါရှိသည်များကို ပြန်လည်ရယူရန်"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"သင်အသုံးပြုနေသော ဝင်းဒိုးတွင် ပါရှိသည်များကို ကြည့်ရှုစစ်ဆေးသည်။"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"တို့ထိခြင်းဖြင့် ရှာဖွေမှုကို ဖွင့်ရန်"</string>
@@ -1386,9 +1386,9 @@
<string name="share_remote_bugreport_action" msgid="7630880678785123682">"မျှဝေပါ"</string>
<string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ငြင်းပယ်ပါ"</string>
<string name="select_input_method" msgid="3971267998568587025">"ထည့်သွင်းရေး နည်းကို ရွေးရန်"</string>
- <string name="show_ime" msgid="6406112007347443383">"စက်၏ကီးဘုတ်ကိုအသုံးပြုနေစဉ် ၎င်းကိုမျက်နှာပြင်ပေါ်တွင် ထားပါ"</string>
+ <string name="show_ime" msgid="6406112007347443383">"စက်၏ကီးဘုတ် ဖွင့်ထားစဉ်တွင် ၎င်းကို ဖန်သားပြင်ပေါ်တွင် ဆက်ထားပါ"</string>
<string name="hardware" msgid="1800597768237606953">"ပကတိအသွင်ကီးဘုတ်ပြရန်"</string>
- <string name="select_keyboard_layout_notification_title" msgid="4427643867639774118">"ရုပ်ပိုင်းဆိုင်ရာ အသွင်အပြင်ကို ပြင်ဆင်သတ်မှတ်ပါ"</string>
+ <string name="select_keyboard_layout_notification_title" msgid="4427643867639774118">"စက်၏ ကီးဘုတ်ကို ပြင်ဆင်သတ်မှတ်ပါ"</string>
<string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ဘာသာစကားနှင့် အသွင်အပြင်ရွေးချယ်ရန် တို့ပါ"</string>
<string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"သင်၏ စီမံခန့်ခွဲသူက အပ်ဒိတ်လုပ်ထားသည်"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"သင်၏ စီမံခန့်ခွဲသူက ဖျက်လိုက်ပါပြီ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ဘက်ထရီသက်တမ်း ပိုရှည်စေရန် \'ဘက်ထရီအားထိန်း\' က- \n\n• မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည်\n• နောက်ခံလုပ်ဆောင်ချက်၊ ပြသမှုဆိုင်ရာ အထူးပြုလုပ်ချက်အချို့နှင့် “Ok Google” ကဲ့သို့ အခြား ဝန်ဆောင်မှုများကို ပိတ်သည် သို့မဟုတ် ကန့်သတ်သည်\n\n"<annotation id="url">"ပိုမိုလေ့လာရန်"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ဘက်ထရီသက်တမ်း ပိုရှည်စေရန် \'ဘက်ထရီအားထိန်း\' က-\n\n•မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည်\n•နောက်ခံလုပ်ဆောင်ချက်၊ ပြသမှုဆိုင်ရာ အထူးပြုလုပ်ချက်အချို့နှင့် “Ok Google” ကဲ့သို့ အခြား ဝန်ဆောင်မှုများကို ပိတ်သည် သို့မဟုတ် ကန့်သတ်သည်"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ဒေတာအသုံးလျှော့ချနိုင်ရန်အတွက် အက်ပ်များကို နောက်ခံတွင် ဒေတာပို့ခြင်းနှင့် လက်ခံခြင်းမပြုရန် \'ဒေတာချွေတာမှု\' စနစ်က တားဆီးထားပါသည်။ ယခုအက်ပ်ဖြင့် ဒေတာအသုံးပြုနိုင်သော်လည်း အကြိမ်လျှော့၍သုံးရပါမည်။ ဥပမာ၊ သင်က မတို့မချင်း ပုံများပေါ်လာမည် မဟုတ်ပါ။"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ဒေတာချွေတာမှုစနစ် ဖွင့်မလား။"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ဖွင့်ပါ"</string>
@@ -2026,7 +2028,7 @@
<string name="autofill_save_type_debit_card" msgid="3169397504133097468">"ဒက်ဘစ် ကတ်"</string>
<string name="autofill_save_type_payment_card" msgid="6555012156728690856">"ငွေပေးချေမှုကတ်"</string>
<string name="autofill_save_type_generic_card" msgid="1019367283921448608">"ကတ်"</string>
- <string name="autofill_save_type_username" msgid="1018816929884640882">"အသုံးပြုသူအမည်"</string>
+ <string name="autofill_save_type_username" msgid="1018816929884640882">"သုံးသူအမည်"</string>
<string name="autofill_save_type_email_address" msgid="1303262336895591924">"အီးမေးလ်လိပ်စာ"</string>
<string name="etws_primary_default_message_earthquake" msgid="8401079517718280669">"စိတ်ငြိမ်ငြိမ်ထားပြီး အနီးအနားတဝိုက်တွင် ခိုနားစရာ နေရာရှာပါ။"</string>
<string name="etws_primary_default_message_tsunami" msgid="5828171463387976279">"ကမ်းရိုးတန်းနှင့် မြစ်ကမ်းရိုးတစ်လျှောက်ရှိ နေရာဒေသတို့မှ ချက်ချင်းထွက်ခွာပြီး ဘေးကင်းရာကုန်းမြင့်ဒေသသို့ ပြောင်းရွှေ့ပါ။"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ဤအကြောင်းကြားချက်ကို \'အသံတိတ်ခြင်း\' သို့ ပြန်ချိန်ညှိထားသည်။ အကြံပြုချက်ပေးရန် တို့ပါ။"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ဤအကြောင်းကြားချက်ကို အဆင့်တိုးထားသည်။ အကြံပြုချက်ပေးရန် တို့ပါ။"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ဤအကြောင်းကြားချက်ကို အဆင့်လျှော့ထားသည်။ အကြံပြုချက်ပေးရန် တို့ပါ။"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ပုံမှန်မုဒ်အတွက် အချက်အလက်ပြသည့် အကြောင်းကြားချက်"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ပုံမှန်အားသွင်းမှုမပြုလုပ်မီ ဘက်ထရီကုန်သွားနိုင်သည်"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ဘက်ထရီသက်တမ်းကို တိုးမြှင့်ရန် \'ဘက်ထရီအားထိန်း\' စတင်ပြီးပါပြီ"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index d7ad0a6..ec8d9d5 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Oppdatert av administratoren din"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet av administratoren din"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"For å forlenge batterilevetiden gjør Batterisparing dette:\n\n• slår på mørkt tema\n• slår av eller begrenser bakgrunnsaktivitet, enkelte visuelle effekter og andre funksjoner, for eksempel «Hey Google»\n\n"<annotation id="url">"Finn ut mer"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"For å forlenge batterilevetiden gjør Batterisparing dette:\n\n• slår på mørkt tema\n• slår av eller begrenser bakgrunnsaktivitet, enkelte visuelle effekter og andre funksjoner, for eksempel «Hey Google»"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Datasparing hindrer noen apper fra å sende og motta data i bakgrunnen, for å redusere dataforbruket. Aktive apper kan bruke data, men kanskje ikke så mye som ellers – for eksempel vises ikke bilder før du trykker på dem."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Vil du slå på Datasparing?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Slå på"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Dette varselet ble nedgradert til lydløst. Trykk for å gi tilbakemelding."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Dette varselet ble rangert høyere. Trykk for å gi tilbakemelding."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Dette varselet ble rangert lavere. Trykk for å gi tilbakemelding."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Varsel med informasjon om rutinemodus"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Batteriet kan gå tomt før den vanlige ladingen"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Batterisparing er aktivert for å forlenge batterilevetiden"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 0eeb548..894edcf 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -748,7 +748,7 @@
<string name="policydesc_resetPassword" msgid="4626419138439341851">"स्क्रिन लक परिवर्तन गर्नुहोस्।"</string>
<string name="policylab_forceLock" msgid="7360335502968476434">"स्क्रिन लक गर्ने"</string>
<string name="policydesc_forceLock" msgid="1008844760853899693">"कसरी र कहिले स्क्रिन लक गर्ने नियन्त्रण गर्नुहोस्।"</string>
- <string name="policylab_wipeData" msgid="1359485247727537311">"सबै डेटा मेट्नुहोस्"</string>
+ <string name="policylab_wipeData" msgid="1359485247727537311">"सबै डेटा मेट्ने"</string>
<string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"एउटा फ्याक्ट्रि डेटा रिसेट गरेर चेतावनी नआउँदै ट्याबल्टको डेटा मेट्नुहोस्।"</string>
<string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"फ्याक्ट्री डेटा रिसेट गरेर चेतावनी नदिइकन आफ्नो Android टिभी डिभाइसको डेटा मेटाउनुहोस्।"</string>
<string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"एउटा फ्याक्ट्रि डेटा रिसेट गरेर चेतावनी नदिइकन फोनको डेटा मेट्न।"</string>
@@ -1866,8 +1866,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"तपाईंका प्रशासकले अद्यावधिक गर्नुभएको"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"तपाईंका प्रशासकले मेट्नुभएको"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ठिक छ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ब्याट्री सेभरले डिभाइसको ब्याट्री बढी समय टिकाउन:\n\n•अँध्यारो थिम सक्रिय गर्छ\n•पृष्ठभूमिका गतिविधि, केही दृश्यात्मक प्रभाव तथा “Hey Google” जस्ता अन्य सुविधाहरू निष्क्रिय वा सीमित पार्छ\n\n"<annotation id="url">"थप जान्नुहोस्"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ब्याट्री सेभरले डिभाइसको ब्याट्री बढी समय टिकाउन:\n\n• अँध्यारो थिम अन गर्छ\n• पृष्ठभूमिका क्रियाकलाप, केही दृश्यात्मक प्रभाव तथा “Hey Google” जस्ता अन्य सुविधाहरू अफ गर्छ वा सीमित पार्छ"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"डेटा सेभरले डेटा खपत कम गर्न केही एपहरूलाई ब्याकग्राउन्डमा डेटा पठाउन वा प्राप्त गर्न दिँदैन। तपाईंले अहिले प्रयोग गरिरहनुभएको एपले सीमित रूपमा मात्र डेटा चलाउन पाउँछ। उदाहरणका लागि, तपाईंले फोटोमा ट्याप गर्नुभयो भने मात्र फोटो देखिन्छ नत्र देखिँदैन।"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा सेभर सक्रिय गर्ने हो?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"सक्रिय गर्नुहोस्"</string>
@@ -2086,6 +2088,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"यस सूचनालाई कम महत्त्वपूर्ण ठानी यसका लागि साइलेन्ट मोड सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"यस सूचनालाई धेरै महत्त्वपूर्ण सूचनाका रूपमा सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"यस सूचनालाई कम महत्त्वपूर्ण सूचनाका रूपमा सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"दिनचर्या मोडको जानकारीमूलक सूचना"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"प्रायः चार्ज गर्ने समय हुनुभन्दा पहिले नै ब्याट्री सकिन सक्छ"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ब्याट्रीको आयु बढाउन ब्याट्री सेभर सक्रिय गरियो"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index e9beece..a8e0c0e 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Geüpdatet door je beheerder"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Verwijderd door je beheerder"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Donkere thema aanzetten\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken\n\n"<annotation id="url">"Meer informatie"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Het donkere thema aanzetten.\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens sturen of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Databesparing aanzetten?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aanzetten"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Deze melding is verlaagd naar Stil. Tik om feedback te geven."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Deze melding is hoger geclassificeerd. Tik om feedback te geven."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Deze melding is lager geclassificeerd. Tik om feedback te geven."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Informatiemelding voor routinemodus"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"De batterij raakt mogelijk leeg voordat deze normaal gesproken wordt opgeladen"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Batterijbesparing is geactiveerd om de batterijduur te verlengen"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 1bcd20e..2536fa0 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"ଆପଣଙ୍କ ଆଡମିନ୍ ଅପଡେଟ୍ କରିଛନ୍ତି"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ଆପଣଙ୍କ ଆଡମିନ୍ ଡିଲିଟ୍ କରିଛନ୍ତି"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ଠିକ୍ ଅଛି"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ବ୍ୟାଟେରୀ ଲାଇଫ୍ ବଢ଼ାଇବାକୁ ବ୍ୟାଟେରୀ ସେଭର୍:\n\n•ଗାଢ଼ା ଥିମ୍ ଚାଲୁ କରେ\n•ପୃଷ୍ଠପଟ କାର୍ଯ୍ୟକଳାପ, କିଛି ଭିଜୁଆଲ୍ ପ୍ରଭାବ ଏବଂ “Hey Google” ପରି ଅନ୍ୟ ଫିଚରଗୁଡ଼ିକୁ ବନ୍ଦ କିମ୍ବା ପ୍ରତିବନ୍ଧିତ କରିଥାଏ\n\n"<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ବ୍ୟାଟେରୀ ଲାଇଫ୍ ବଢ଼ାଇବାକୁ ବ୍ୟାଟେରୀ ସେଭର୍:\n\n• ଗାଢ଼ା ଥିମ୍ ଚାଲୁ କରେ\n• ପୃଷ୍ଠପଟ କାର୍ଯ୍ୟକଳାପ, କିଛି ଭିଜୁଆଲ୍ ପ୍ରଭାବ ଏବଂ “Hey Google” ପରି ଅନ୍ୟ ଫିଚରଗୁଡ଼ିକୁ ବନ୍ଦ କିମ୍ବା ପ୍ରତିବନ୍ଧିତ କରିଥାଏ"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ଡାଟା ବ୍ୟବହାର କମ୍ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଡାଟା ସେଭର୍ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଡାଟା ପଠାଇବା କିମ୍ବା ପ୍ରାପ୍ତ କରିବାକୁ କିଛି ଆପ୍କୁ ବାରଣ କରେ। ଆପଣ ବର୍ତ୍ତମାନ ବ୍ୟବହାର କରୁଥିବା ଆପ୍, ଡାଟା ଆକ୍ସେସ୍ କରିପାରେ, କିନ୍ତୁ ଏହା କମ୍ ଥର କରିପାରେ। ଏହାର ଅର୍ଥ ହୋଇପାରେ ଯେମିତି ଆପଣ ଇମେଜଗୁଡ଼ିକୁ ଟାପ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ସେଗୁଡ଼ିକ ଡିସପ୍ଲେ ହୁଏ ନାହିଁ।"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ଡାଟା ସେଭର୍ ଚାଲୁ କରିବେ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ଚାଲୁ କରନ୍ତୁ"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ଏହି ବିଜ୍ଞପ୍ତିକୁ ନୀରବ ଭାବେ ଡିମୋଟ୍ କରାଯାଇଛି। ମତାମତ ପ୍ରଦାନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ଏହି ବିଜ୍ଞପ୍ତିର ରେଙ୍କ ଉପରକୁ କରାଯାଇଛି। ମତାମତ ପ୍ରଦାନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ଏହି ବିଜ୍ଞପ୍ତିର ରେଙ୍କ ତଳକୁ କରାଯାଇଛି। ମତାମତ ପ୍ରଦାନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ନିୟମିତ ମୋଡ୍ ସୂଚନା ବିଜ୍ଞପ୍ତି"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ସାଧାରଣ ଭାବରେ ଚାର୍ଜ୍ କରିବା ପୂର୍ବରୁ ବ୍ୟାଟେରୀ ସରିଯାଇପାରେ"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ବ୍ୟାଟେରୀର ସମୟକୁ ବଢ଼ାଇବା ପାଇଁ ବ୍ୟଟେରୀ ସେଭର୍କୁ କାର୍ଯ୍ୟକାରୀ କରାଯାଇଛି"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index ee19e04..fc8a56b 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ਠੀਕ ਹੈ"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ:\n\n• ਗੂੜ੍ਹਾ ਥੀਮ ਚਾਲੂ ਕਰਦਾ ਹੈ\n• ਬੈਕਗ੍ਰਾਊਂਡ ਸਰਗਰਮੀ, ਕੁਝ ਦ੍ਰਿਸ਼ਟੀਗਤ ਪ੍ਰਭਾਵਾਂ, ਅਤੇ \"Ok Google\" ਵਰਗੀਆਂ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ ਜਾਂ ਉਹਨਾਂ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦਾ ਹੈ\n\n"<annotation id="url">"ਹੋਰ ਜਾਣੋ"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ:\n\n• ਗੂੜ੍ਹੇ ਥੀਮ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ\n• ਬੈਕਗ੍ਰਾਊਂਡ ਸਰਗਰਮੀ, ਕੁਝ ਦ੍ਰਿਸ਼ਟੀਗਤ ਪ੍ਰਭਾਵਾਂ, ਅਤੇ \"Ok Google\" ਵਰਗੀਆਂ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ ਜਾਂ ਉਹਨਾਂ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦਾ ਹੈ"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ਡਾਟਾ ਵਰਤੋਂ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਲਈ, ਡਾਟਾ ਸੇਵਰ ਕੁਝ ਐਪਾਂ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਡਾਟਾ ਭੇਜਣ ਜਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਵਰਤਮਾਨ ਤੌਰ \'ਤੇ ਵਰਤੀ ਜਾ ਰਹੀ ਐਪ ਡਾਟਾ \'ਤੇ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਉਹ ਇੰਝ ਕਦੇ-ਕਦਾਈਂ ਕਰ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਤਦ ਤੱਕ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ \'ਤੇ ਟੈਪ ਨਹੀਂ ਕਰਦੇ।"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ਕੀ ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ਚਾਲੂ ਕਰੋ"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ਇਸ ਸੂਚਨਾ ਦਾ ਦਰਜਾ ਘਟਾ ਕੇ ਸ਼ਾਂਤ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ। ਵਿਚਾਰ ਮੁਹੱਈਆ ਕਰਵਾਉਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ਇਸ ਸੂਚਨਾ ਦਾ ਦਰਜਾ ਵਧਾ ਦਿੱਤਾ ਗਿਆ। ਵਿਚਾਰ ਮੁਹੱਈਆ ਕਰਵਾਉਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ਇਸ ਸੂਚਨਾ ਦਾ ਦਰਜਾ ਘਟਾ ਦਿੱਤਾ ਗਿਆ। ਵਿਚਾਰ ਮੁਹੱਈਆ ਕਰਵਾਉਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ਨਿਯਮਬੱਧ ਮੋਡ ਦੀ ਜਾਣਕਾਰੀ ਵਾਲੀ ਸੂਚਨਾ"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"ਬੈਟਰੀ ਚਾਰਜ ਕਰਨ ਦੇ ਮਿੱਥੇ ਸਮੇਂ ਤੋਂ ਪਹਿਲਾਂ ਸ਼ਾਇਦ ਬੈਟਰੀ ਖਤਮ ਹੋ ਜਾਵੇ"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 076b966..0d07cab 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1900,8 +1900,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Zaktualizowany przez administratora"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Usunięty przez administratora"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Aby wydłużyć czas pracy na baterii, funkcja Oszczędzanie baterii:\n\n• włącza ciemny motyw,\n• wyłącza lub ogranicza aktywność w tle, niektóre efekty wizualne oraz inne funkcje, np. „OK Google”.\n\n"<annotation id="url">"Więcej informacji"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Aby wydłużyć czas pracy na baterii, Oszczędzanie baterii:\n\n• włącza ciemny motyw,\n• wyłącza lub ogranicza aktywność w tle, niektóre efekty wizualne oraz inne funkcje, np. „OK Google”."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Oszczędzanie danych uniemożliwia niektórym aplikacjom wysyłanie i odbieranie danych w tle, zmniejszając w ten sposób ich użycie. Aplikacja, z której w tej chwili korzystasz, może uzyskiwać dostęp do danych, ale rzadziej. Może to powodować, że obrazy będą się wyświetlać dopiero po kliknięciu."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Włączyć Oszczędzanie danych?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Włącz"</string>
@@ -2140,6 +2142,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"To powiadomienie zostało zmienione na Ciche. Kliknij, by przesłać opinię."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Podniesiono ważność tego powiadomienia. Kliknij, by przesłać opinię."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Obniżono ważność tego powiadomienia. Kliknij, by przesłać opinię."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Powiadomienie z informacją o trybie rutynowym"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Bateria może się wyczerpać przed zwykłą porą ładowania"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Włączono Oszczędzanie baterii, by wydłużyć czas pracy na baterii"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index aedc5c3..69da283 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n• ativa o tema escuro;\n• desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n• ativa o tema escuro;\n• desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar \"Economia de dados\"?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Esta notificação foi rebaixada a Silenciosa. Toque para enviar seu feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Esta notificação foi classificada com maior prioridade. Toque para enviar seu feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Esta notificação foi classificada com menor prioridade. Toque para enviar seu feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificação de informação do modo rotina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"A bateria pode acabar antes da recarga normal"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"A Economia de bateria foi ativada para aumentar a duração da carga"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 537d7e2..04e282f 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu gestor"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado pelo seu gestor"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para prolongar a autonomia da bateria, a Poupança de bateria:\n\n•Ativa o tema escuro.\n•Desativa ou restringe a atividade em segundo plano, alguns efeitos visuais e outras funcionalidades como \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para prolongar a autonomia da bateria, a Poupança de bateria:\n\n• Ativa o tema escuro.\n•·Desativa ou restringe a atividade em segundo plano, alguns efeitos visuais e outras funcionalidades como \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir a utilização de dados, a Poupança de dados impede que algumas aplicações enviem ou recebam dados em segundo plano. Uma determinada app que esteja a utilizar atualmente pode aceder aos dados, mas é possível que o faça com menos frequência. Isto pode significar, por exemplo, que as imagens não são apresentadas até que toque nas mesmas."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Pretende ativar a Poupança de dados?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Esta notificação foi despromovida para Silenciosa. Toque para fornecer feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Esta notificação passou para uma classificação superior. Toque para fornecer feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Esta notificação passou para uma classificação inferior. Toque para fornecer feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificação de informações do Modo rotina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Pode ficar sem bateria antes do carregamento habitual"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Poupança de bateria ativada para prolongar a duração da bateria"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index aedc5c3..69da283 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n• ativa o tema escuro;\n• desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n• ativa o tema escuro;\n• desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar \"Economia de dados\"?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Esta notificação foi rebaixada a Silenciosa. Toque para enviar seu feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Esta notificação foi classificada com maior prioridade. Toque para enviar seu feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Esta notificação foi classificada com menor prioridade. Toque para enviar seu feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificação de informação do modo rotina"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"A bateria pode acabar antes da recarga normal"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"A Economia de bateria foi ativada para aumentar a duração da carga"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index c4f0202..8c145bf2 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1877,8 +1877,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizat de administratorul dvs."</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Șters de administratorul dvs."</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Pentru a mări autonomia bateriei, Economisirea bateriei:\n\n•·activează tema întunecată;\n•·dezactivează sau restricționează activitatea în fundal, unele efecte vizuale și alte funcții, cum ar fi „Ok Google”.\n\n"<annotation id="url">"Aflați mai multe"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Pentru a mări autonomia bateriei, Economisirea bateriei:\n\n• activează tema întunecată;\n• dezactivează sau restricționează activitatea în fundal, unele efecte vizuale și alte funcții, cum ar fi „Ok Google”."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Pentru a contribui la reducerea utilizării de date, Economizorul de date împiedică unele aplicații să trimită sau să primească date în fundal. O aplicație pe care o folosiți poate accesa datele, însă mai rar. Aceasta poate însemna, de exemplu, că imaginile se afișează numai după ce le atingeți."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Activați Economizorul de date?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Activați"</string>
@@ -2107,6 +2109,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Notificarea a fost mutată în jos la Silențioasă. Atingeți pentru a oferi feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Notificarea a fost mutată la un nivel superior. Atingeți pentru a oferi feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Notificarea a fost mutată la un nivel inferior. Atingeți pentru a oferi feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificare pentru informații despre modul Rutină"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Bateria se poate descărca înainte de încărcarea obișnuită"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Economisirea bateriei este activată pentru a prelungi durata de funcționare a bateriei"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index d1125cf..4612662 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1898,8 +1898,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Обновлено администратором"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Удалено администратором"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Чтобы продлить время работы от батареи, в режиме энергосбережения:\n\n• включается тёмная тема;\n• отключаются или ограничиваются фоновые процессы, некоторые визуальные эффекты и другие функции (например, распознавание команды \"Окей, Google\").\n\n"<annotation id="url">"Подробнее…"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Чтобы продлить время работы от батареи, в режиме энергосбережения:\n\n• включается тёмная тема;\n• отключаются или ограничиваются фоновые процессы, некоторые визуальные эффекты и другие функции (например, распознавание команды \"Окей, Google\")."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"В режиме экономии трафика фоновая передача данных для некоторых приложений отключена. Приложение, которым вы пользуетесь, может получать и отправлять данные, но реже, чем обычно. Например, изображения могут не загружаться, пока вы не нажмете на них."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Включить экономию трафика?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Включить"</string>
@@ -2138,6 +2140,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Уровень важности этого уведомления был понижен до \"Без звука\". Нажмите, чтобы отправить отзыв."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Уровень важности этого уведомления был повышен. Нажмите, чтобы отправить отзыв."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Уровень важности этого уведомления был понижен. Нажмите, чтобы отправить отзыв."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Уведомление о батарее"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батарея может разрядиться"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Чтобы увеличить время работы от батареи, был включен режим энергосбережения."</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index d687e42..5523d8f 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"ඔබගේ පරිපාලක මඟින් යාවත්කාලීන කර ඇත"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ඔබගේ පරිපාලක මඟින් මකා දමා ඇත"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"හරි"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"බැටරියේ ජීව කාලය දික් කිරීමට, බැටරි සුරැකුම:\n\n•අඳුරු තේමාව ක්රියාත්මක කරයි\n•පසුබිමේ ක්රියාකාරකම, සමහර දෘශ්ය ප්රයෝග සහ “Hey Google” වැනි වෙනත් විශේෂාංග ක්රියාවිරහිත කරයි නැතහොත් අවහිර කරයි\n\n"<annotation id="url">"තව දැන ගන්න"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"බැටරියේ ජීව කාලය දික් කිරීමට, බැටරි සුරැකුම:\n\n•අඳුරු තේමාව ක්රියාත්මක කරයි\n•පසුබිමේ ක්රියාකාරකම, සමහර දෘශ්ය ප්රයෝග සහ “Hey Google” වැනි වෙනත් විශේෂාංග ක්රියාවිරහිත කරයි නැතහොත් අවහිර කරයි"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"දත්ත භාවිතය අඩු කිරීමට උදවු වීමට, දත්ත සුරැකුම සමහර යෙදුම් පසුබිමින් දත්ත යැවීම සහ ලබා ගැනීම වළක්වයි. ඔබ දැනට භාවිත කරන යෙදුමකට දත්ත වෙත පිවිසීමට හැකිය, නමුත් එසේ කරන්නේ කලාතුරකින් විය හැකිය. මෙයින් අදහස් වන්නේ, උදාහරණයක් ලෙස, එම රූප ඔබ ඒවාට තට්ටු කරන තෙක් සංදර්ශනය නොවන බවය."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"දත්ත සුරැකුම ක්රියාත්මක කරන්නද?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ක්රියාත්මක කරන්න"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"මෙම දැනුම්දීම නිහඬ වෙත පහත දමන ලදී. ප්රතිපෝෂණය ලබා දීමට තට්ටු කරන්න."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"මෙම දැනුම්දීම ඉහළට ශ්රේණිගත කරන ලදී. ප්රතිපෝෂණය ලබා දීමට තට්ටු කරන්න."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"මෙම දැනුම්දීම පහළට ශ්රේණිගත කරන ලදී. ප්රතිපෝෂණය ලබා දීමට තට්ටු කරන්න."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"දිනචරියා ප්රකාර තතු දැනුම්දීම"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"බැටරිය සුපුරුදු ආරෝපණයට පෙර ඉවර විය හැක"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"බැටරි සුරැකුම බැටරි ආයු කාලය දීර්ඝ කිරීමට සක්රිය කෙරිණි"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 9e12d65..b2ee98a 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1898,8 +1898,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizoval správca"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Odstránil správca"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Šetrič batérie predlžuje výdrž batérie:\n\n• zapnutím tmavého motívu;\n• vypnutím alebo obmedzením aktivity na pozadí, niektorých vizuálnych efektov a ďalších funkcií, ako napríklad kľúčového výrazu „Hey Google“.\n\n"<annotation id="url">"Ďalšie informácie"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Šetrič batérie predlžuje výdrž batérie:\n\n• zapnutím tmavého motívu;\n• vypnutím alebo obmedzením aktivity na pozadí, niektorých vizuálnych efektov a ďalších funkcií, ako napríklad kľúčového výrazu „Hey Google“."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"S cieľom znížiť spotrebu dát bráni šetrič dát niektorým aplikáciám odosielať alebo prijímať dáta na pozadí. Aplikácia, ktorú práve používate, môže využívať dáta, ale možno to bude robiť menej často. Môže to napríklad znamenať, že sa obrázky zobrazia, až keď na ne klepnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Chcete zapnúť šetrič dát?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Zapnúť"</string>
@@ -2138,6 +2140,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Toto upozornenie bolo znížené na Tiché. Klepnutím nám poskytnite spätnú väzbu."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Toto upozornenie bolo preradené vyššie. Klepnutím nám poskytnite spätnú väzbu."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Toto upozornenie bolo preradené nižšie. Klepnutím nám poskytnite spätnú väzbu."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Upozornenie s informáciami o rutinnom režime"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Batéria sa môže vybiť pred obvyklým nabitím"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Bol aktivovaný šetrič batérie na predĺženie výdrže batérie"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index f39e558..d62aee7 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1898,8 +1898,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Posodobil skrbnik"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisal skrbnik"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"V redu"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Funkcija varčevanja z energijo baterije podaljša čas delovanja baterije tako:\n\n• vklopi temno temo,\n• izklopi ali omeji dejavnost v ozadju, nekatere vizualne učinke in druge funkcije, kot je »Hey Google«.\n\n"<annotation id="url">"Več o tem"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Funkcija varčevanja z energijo baterije podaljša čas delovanja baterije tako:\n\n• vklopi temno temo;\n• izklopi ali omeji dejavnost v ozadju, nekatere vizualne učinke in druge funkcije, kot je »Hey Google«."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Zaradi zmanjševanja prenesene količine podatkov funkcija varčevanja s podatki nekaterim aplikacijam preprečuje, da bi v ozadju pošiljale ali prejemale podatke. Aplikacija, ki jo trenutno uporabljate, lahko prenaša podatke, vendar to morda počne manj pogosto. To na primer pomeni, da se slike ne prikažejo, dokler se jih ne dotaknete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Vklop varčevanja s podatki?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Vklop"</string>
@@ -2138,6 +2140,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"To obvestilo je bilo uvrščeno nižje – med obvestila brez zvoka. Dotaknite se, če želite poslati povratne informacije."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"To obvestilo je bilo uvrščeno višje. Dotaknite se, če želite poslati povratne informacije."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"To obvestilo je bilo uvrščeno nižje. Dotaknite se, če želite poslati povratne informacije."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Rutinsko informativno obvestilo o načinu delovanja"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Baterija se bo morda izpraznila, preden jo običajno priključite na polnjenje"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Vklopilo se je varčevanje z energijo baterije za podaljšanje časa delovanja baterije"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 91d8b95..5575f16 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Përditësuar nga administratori"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Fshirë nga administratori"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Në rregull"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n\n• Aktivizon \"Temën e errët\"\n• Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”\n\n"<annotation id="url">"Mëso më shumë"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n\n• Aktivizon \"Temën e errët\"\n• Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Për të ndihmuar në reduktimin e përdorimit të të dhënave, \"Kursyesi i të dhënave\" pengon që disa aplikacione të dërgojnë apo të marrin të dhëna në sfond. Një aplikacion që po përdor aktualisht mund të ketë qasje te të dhënat, por këtë mund ta bëjë më rrallë. Kjo mund të nënkuptojë, për shembull, se imazhet nuk shfaqen kur troket mbi to."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Të aktivizohet \"Kursyesi i të dhënave\"?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivizo"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Ky njoftim është ulur në nivel si në heshtje. Trokit për të dhënë komente."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Ky njoftim është renditur më lart. Trokit për të dhënë komente."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Ky njoftim është renditur më poshtë. Trokit për të dhënë komente."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Njoftimi i informacionit të \"Modalitetit rutinë\""</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Bateria mund të mbarojë përpara ngarkimit të zakonshëm"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"\"Kursyesi i baterisë\" u aktivizua për të rritur kohëzgjatjen e baterisë"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 1e01b7b..d404f8c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1875,8 +1875,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ажурирао је администратор"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Избрисао је администратор"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Потврди"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Да би се продужило трајање батерије, Уштеда батерије:\n\n• укључује тамну тему\n• искључује или ограничава активности у позадини, неке визуелне ефекте и друге функције, на пример „Ок Google“\n\n"<annotation id="url">"Сазнајте више"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Да би се продужило трајање батерије, Уштеда батерије:\n\n• укључује тамну тему\n• искључује или ограничава активности у позадини, неке визуелне ефекте и друге функције, на пример, „Ок Google“"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Да би се смањила потрошња података, Уштеда података спречава неке апликације да шаљу или примају податке у позадини. Апликација коју тренутно користите може да приступа подацима, али ће то чинити ређе. На пример, слике се неће приказивати док их не додирнете."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Желите да укључите Уштеду података?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Укључи"</string>
@@ -2105,6 +2107,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Ово обавештење је деградирано у Нечујно. Додирните да бисте навели повратне информације."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Ово обавештење је рангирано више. Додирните да бисте навели повратне информације."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Ово обавештење је рангирано ниже. Додирните да бисте навели повратне информације."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Обавештење о информацијама Рутинског режима"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Батерија ће се можда испразнити пре уобичајеног пуњења"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Уштеда батерије је активирана да би се продужило трајање батерије"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 26bcbf7..4dc2ecf 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administratören uppdaterade paketet"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratören raderade paketet"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batterisparläget förlänger batteritiden genom att\n\n• aktivera mörkt tema\n• inaktivera eller begränsa aktivitet i bakgrunden, vissa visuella effekter och andra funktioner, som ”Hey Google”\n\n"<annotation id="url">"Läs mer"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batterisparläget förlänger batteritiden genom att\n\n• aktivera Mörkt tema\n• inaktivera eller begränsa aktivitet i bakgrunden, vissa visuella effekter och andra funktioner, som ”Hey Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Med databesparing kan du minska dataanvändningen genom att hindra en del appar från att skicka eller ta emot data i bakgrunden. Appar som du använder kan komma åt data, men det sker kanske inte lika ofta. Detta innebär t.ex. att bilder inte visas förrän du trycker på dem."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Vill du aktivera Databesparing?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivera"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Den här aviseringen har ändrats till Tyst. Tryck för att lämna feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Den här aviseringen har fått högre rankning. Tryck för att lämna feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Den här aviseringen har fått lägre rankning. Tryck för att lämna feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Avisering om rutinläge"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Batteriet kan ta slut innan du brukar ladda det"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Batterisparläget har aktiverats för att utöka batteritiden"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 001bd31..0156787 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -538,10 +538,8 @@
<string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Huruhusu programu itambue na kuoanisha kwenye vifaa vyenye Bluetooth vilivyo karibu"</string>
<string name="permlab_bluetooth_connect" msgid="6657463246355003528">"kuunganisha kwenye vifaa vyenye Bluetooth vilivyooanishwa"</string>
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Huruhusu programu iunganishe kwenye vifaa vyenye Bluetooth vilivyooanishwa"</string>
- <!-- no translation found for permlab_bluetooth_advertise (2781147747928853177) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_advertise (6085174451034210183) -->
- <skip />
+ <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"kutangaza kwenye vifaa vyenye Bluetooth vilivyo karibu"</string>
+ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Huruhusu programu itangaze kwenye vifaa vyenye Bluetooth vilivyo karibu"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"kubainisha nafasi kati ya vifaa vyenye Bendi Pana Zaidi vilivyo karibu"</string>
<string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Ruhusu programu ibainishe nafasi kati ya vifaa vyenye Bendi Pana Zaidi vilivyo karibu"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Maelezo ya Huduma Inayopendelewa ya Malipo ya NFC"</string>
@@ -1854,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Imesasishwa na msimamizi wako"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Imefutwa na msimamizi wako"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Sawa"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Ili kuongeza muda wa matumizi ya betri, Kiokoa Betri:\n\n• Huwasha Mandhari meusi\n• Huzima au kuzuia shughuli za chinichini, baadhi ya madoido yanayoonekana na vipengele vingine kama vile \"Ok Google\"\n\n"<annotation id="url">"Pata maelezo zaidi"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Ili kuongeza muda wa matumizi ya betri, Kiokoa Betri:\n\n• Huwasha Mandhari meusi\n• Huzima au kudhibiti shughuli za chinichini, baadhi ya madoido yanayoonekana na vipengele vingine kama vile \"Ok Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Ili kusaidia kupunguza matumizi ya data, Kiokoa Data huzuia baadhi ya programu kupokea na kutuma data chinichini. Programu ambayo unatumia sasa inaweza kufikia data, lakini si kila wakati. Kwa mfano, haitaonyesha picha hadi utakapozifungua."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Ungependa Kuwasha Kiokoa Data?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Washa"</string>
@@ -2074,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Arifa hii ilishushwa hadhi kuwa Kimya. Gusa ili utoe maoni."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Arifa hii imeorodheshwa katika nafasi ya juu. Gusa ili utoe maoni."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Arifa hii imeorodheshwa katika nafasi ya chini. Gusa ili utoe maoni."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Arifa ya maelezo ya Hali ya Kawaida"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Huenda betri itakwisha chaji mapema"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Imewasha Kiokoa Betri ili kurefusha muda wa matumizi ya betri"</string>
@@ -2261,14 +2273,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sasa unaweza kukuza sehemu ya skrini yako"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Washa katika Mipangilio"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ondoa"</string>
- <!-- no translation found for sensor_privacy_start_use_mic_notification_content_title (2420858361276370367) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_camera_notification_content_title (7287720213963466672) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_notification_content_text (7595608891015777346) -->
- <skip />
- <!-- no translation found for sensor_privacy_start_use_dialog_turn_on_button (7089318886628390827) -->
- <skip />
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Ondoa kizuizi kwenye maikrofoni ya kifaa"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Ondoa kizuizi kwenye kamera ya kifaa"</string>
+ <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Kwa ajili ya <b><xliff:g id="APP">%s</xliff:g></b> na programu na huduma zote"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Ondoa kizuizi"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Faragha ya Kitambuzi"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Aikoni ya programu"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Picha ya kuweka chapa kwenye programu"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index a1838e9..e625c8bb 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"உங்கள் நிர்வாகி புதுப்பித்துள்ளார்"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"உங்கள் நிர்வாகி நீக்கியுள்ளார்"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"சரி"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"பேட்டரி நிலையை நீட்டிப்பதற்காக, பேட்டரி சேமிப்பான்:\n\n• டார்க் தீமினை ஆன் செய்யும்\n• பின்னணி செயல்பாடு, சில விஷுவல் எஃபெக்ட்கள், “Ok Google” போன்ற பிற அம்சங்களை ஆஃப் செய்யும் அல்லது கட்டுப்படுத்தும்\n\n"<annotation id="url">"மேலும் அறிக"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"பேட்டரி நிலையை நீட்டிப்பதற்காக, பேட்டரி சேமிப்பான்:\n\n• டார்க் தீமினை ஆன் செய்யும்\n• பின்னணிச் செயல்பாடு, சில விஷுவல் எஃபெக்ட்கள், “Ok Google” போன்ற பிற அம்சங்களை ஆஃப் செய்யும் அல்லது கட்டுப்படுத்தும்"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"டேட்டா உபயோகத்தைக் குறைப்பதற்கு உதவ, பின்புலத்தில் டேட்டாவை அனுப்புவது அல்லது பெறுவதிலிருந்து சில ஆப்ஸை டேட்டா சேமிப்பான் தடுக்கும். தற்போது பயன்படுத்தும் ஆப்ஸானது எப்போதாவது டேட்டாவை அணுகலாம். எடுத்துக்காட்டாக, படங்களை நீங்கள் தட்டும் வரை அவை காட்டப்படாது."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"டேட்டா சேமிப்பானை இயக்கவா?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"இயக்கு"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"இந்த அறிவிப்பின் முக்கியத்துவம் நிசப்த நிலைக்குக் குறைத்து அமைக்கப்பட்டது. கருத்து தெரிவிக்க தட்டவும்."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"இந்த அறிவிப்பின் முக்கியத்துவம் உயர்த்தப்பட்டது. கருத்து தெரிவிக்க தட்டவும்."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"இந்த அறிவிப்பின் முக்கியத்துவம் குறைக்கப்பட்டது. கருத்து தெரிவிக்க தட்டவும்."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"வழக்கமான பேட்டரி சேமிப்பானுக்கான விவர அறிவிப்பு"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"வழக்கமாகச் சார்ஜ் செய்வதற்கு முன்பே பேட்டரி தீர்ந்துபோகக்கூடும்"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"பேட்டரி நிலையை நீட்டிக்க பேட்டரி சேமிப்பான் இயக்கப்பட்டுள்ளது"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 6e104a8..faed275 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"మీ నిర్వాహకులు నవీకరించారు"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"మీ నిర్వాహకులు తొలగించారు"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"సరే"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి, బ్యాటరీ సేవర్ వీటిని చేస్తుంది:\n\n• ముదురు రంగు రూపాన్ని ఆన్ చేస్తుంది\n•బ్యాక్గ్రౌండ్ యాక్టివిటీని, కొన్ని విజువల్ ఎఫెక్ట్లను, అలాగే “Ok Google” వంటి ఇతర ఫీచర్లను ఆఫ్ చేస్తుంది లేదా పరిమితం చేస్తుంది\n\n"<annotation id="url">"మరింత తెలుసుకోండి"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి, బ్యాటరీ సేవర్ వీటిని చేస్తుంది:\n\n•ముదురు రంగు రూపాన్ని ఆన్ చేస్తుంది\n•బ్యాక్గ్రౌండ్ యాక్టివిటీని, కొన్ని విజువల్ ఎఫెక్ట్లను, అలాగే “Ok Google” వంటి ఇతర ఫీచర్లను ఆఫ్ చేస్తుంది లేదా పరిమితం చేస్తుంది"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"డేటా వినియోగాన్ని తగ్గించడంలో డేటా సేవర్ సహాయకరంగా ఉంటుంది. బ్యాక్గ్రౌండ్లో కొన్ని యాప్లు డేటాను పంపకుండా లేదా స్వీకరించకుండా నిరోధిస్తుంది. మీరు ప్రస్తుతం ఉపయోగిస్తోన్న యాప్, డేటాను యాక్సెస్ చేయగలదు. కానీ తక్కువ సార్లు మాత్రమే అలా చేయవచ్చు. ఉదాహరణకు, మీరు నొక్కే వరకు ఫోటోలు ప్రదర్శించబడవు."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"డేటా సేవర్ను ఆన్ చేయాలా?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ఆన్ చేయి"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ఈ నోటిఫికేషన్ స్థాయి నిశ్శబ్దంగా ఉండేలా తగ్గించబడింది. ఫీడ్బ్యాక్ను అందించడానికి ట్యాప్ చేయండి."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ఈ నోటిఫికేషన్కు ఎక్కువ ర్యాంక్ ఇవ్వబడింది. ఫీడ్బ్యాక్ను అందించడానికి ట్యాప్ చేయండి."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ఈ నోటిఫికేషన్కు తక్కువ ర్యాంక్ ఇవ్వబడింది. ఫీడ్బ్యాక్ను అందించడానికి ట్యాప్ చేయండి."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"రొటీన్ మోడ్ సమాచార నోటిఫికేషన్"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"మామూలుగా ఛార్జ్ చేసేలోపు బ్యాటరీ ఖాళీ కావచ్చు"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి బ్యాటరీ సేవర్ యాక్టివేట్ చేయబడింది"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index f62934e..1c00654 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"อัปเดตโดยผู้ดูแลระบบ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ลบโดยผู้ดูแลระบบ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ตกลง"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"โหมดประหยัดแบตเตอรี่จะดำเนินการดังต่อไปนี้เพื่อยืดอายุการใช้งานแบตเตอรี่\n\n• เปิดธีมมืด\n• ปิดหรือจำกัดกิจกรรมในเบื้องหลัง เอฟเฟกต์ภาพบางอย่าง และฟีเจอร์อื่นๆ อย่างเช่น “Ok Google”\n\n"<annotation id="url">"ดูข้อมูลเพิ่มเติม"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"โหมดประหยัดแบตเตอรี่จะดำเนินการดังต่อไปนี้เพื่อยืดอายุการใช้งานแบตเตอรี่\n\n• เปิดธีมมืด\n• ปิดหรือจำกัดกิจกรรมในเบื้องหลัง เอฟเฟกต์ภาพบางอย่าง และฟีเจอร์อื่นๆ อย่างเช่น \"Ok Google\""</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"เพื่อช่วยลดปริมาณการใช้อินเทอร์เน็ต โปรแกรมประหยัดอินเทอร์เน็ตจะช่วยป้องกันไม่ให้บางแอปส่งหรือรับข้อมูลโดยการใช้อินเทอร์เน็ตอยู่เบื้องหลัง แอปที่คุณกำลังใช้งานสามารถเข้าถึงอินเทอร์เน็ตได้ แต่อาจไม่บ่อยเท่าเดิม ตัวอย่างเช่น ภาพต่างๆ จะไม่แสดงจนกว่าคุณจะแตะที่ภาพเหล่านั้น"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"เปิดการประหยัดอินเทอร์เน็ตไหม"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"เปิด"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"การแจ้งเตือนนี้มีการลดระดับเป็นแบบปิดเสียง แตะเพื่อแสดงความคิดเห็น"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"การแจ้งเตือนนี้มีการเพิ่มระดับ แตะเพื่อแสดงความคิดเห็น"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"การแจ้งเตือนนี้มีการลดระดับ แตะเพื่อแสดงความคิดเห็น"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"การแจ้งเตือนข้อมูลโหมดกิจวัตร"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"แบตเตอรี่อาจหมดก่อนการชาร์จปกติ"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"เปิดใช้งานโหมดประหยัดแบตเตอรี่แล้วเพื่อยืดอายุการใช้งานแบตเตอรี่"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 8327c91..c05fe90 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Na-update ng iyong admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Na-delete ng iyong admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Para patagalin ang baterya, ginagawa ng Pantipid ng Baterya na:\n\n• I-on ang Madilim na tema\n• I-off o paghihigpitan ang aktibidad sa background, ilang visual effect, at iba pang feature gaya ng “Hey Google”\n\n"<annotation id="url">"Matuto pa"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Para patagalin ang baterya, ginagawa ng Pantipid ng Baterya na:\n\n• I-on ang Madilim na tema\n• I-off o paghihigpitan ang aktibidad sa background, ilang visual effect, at iba pang feature gaya ng “Hey Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Upang makatulong na mabawasan ang paggamit ng data, pinipigilan ng Data Saver ang ilang app na magpadala o makatanggap ng data sa background. Maaaring mag-access ng data ang isang app na ginagamit mo sa kasalukuyan, ngunit mas bihira na nito magagawa iyon. Halimbawa, maaaring hindi lumabas ang mga larawan hangga\'t hindi mo nata-tap ang mga ito."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"I-on ang Data Saver?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"I-on"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Na-demote sa Naka-silent ang notification na ito. I-tap para magbigay ng feedback."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Itinaas ang ranggo ng notification na ito. I-tap para magbigay ng feedback."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Ibinaba ang ranggo ng notification na ito. I-tap para magbigay ng feedback."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notification ng impormasyon ng Routine Mode"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Maaaring maubos ang baterya bago ang karaniwang pag-charge"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Na-activate ang Pantipid ng Baterya para patagalin ang buhay ng baterya"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 8f248da..87ca8e0 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -209,7 +209,7 @@
<string name="factory_reset_message" msgid="2657049595153992213">"Yönetim uygulaması kullanılamıyor. Cihazınız şimdi silinecek.\n\nSorularınız varsa kuruluşunuzun yöneticisine başvurun."</string>
<string name="printing_disabled_by" msgid="3517499806528864633">"Yazdırma işlemi <xliff:g id="OWNER_APP">%s</xliff:g> tarafından devre dışı bırakıldı."</string>
<string name="personal_apps_suspension_title" msgid="7561416677884286600">"İş profilinizi açın"</string>
- <string name="personal_apps_suspension_text" msgid="6115455688932935597">"İş profilinizi açana kadar kişisel uygulamalarınız engellendi"</string>
+ <string name="personal_apps_suspension_text" msgid="6115455688932935597">"İş profilinizi açana kadar kişisel uygulamalarınız engelleniyor"</string>
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Kişisel uygulamalar <xliff:g id="DATE">%1$s</xliff:g> tarihinde saat <xliff:g id="TIME">%2$s</xliff:g> itibarıyla engellenecektir. BT yöneticiniz, iş profilinizin <xliff:g id="NUMBER">%3$d</xliff:g> günden fazla kapalı kalmasına izin vermiyor."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Aç"</string>
<string name="me" msgid="6207584824693813140">"Ben"</string>
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Yöneticiniz tarafından güncellendi"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Yöneticiniz tarafından silindi"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Tamam"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Pil ömrünü uzatmak için Pil Tasarrufu:\n\n• Koyu temayı açar\n• Arka plan etkinliğini, bazı görsel efektleri ve \"Ok Google\" gibi diğer özellikleri kapatır veya kısıtlar\n\n"<annotation id="url">"Daha fazla bilgi"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Pil ömrünü uzatmak için Pil Tasarrufu:\n\n• Koyu temayı açar\n• Arka plan etkinliğini, bazı görsel efektleri ve \"Ok Google\" gibi diğer özellikleri kapatır veya kısıtlar"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Veri kullanımını azaltmaya yardımcı olması için Veri Tasarrufu, bazı uygulamaların arka planda veri göndermesini veya almasını engeller. Şu anda kullandığınız bir uygulama veri bağlantısına erişebilir, ancak bunu daha seyrek yapabilir. Bu durumda örneğin, siz resimlere dokunmadan resimler görüntülenmez."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Veri Tasarrufu açılsın mı?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aç"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Bu bildirimin önem derecesi, \"Sessiz\" seviyesine düşürüldü. Geri bildirimde bulunmak için dokunun."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Bu bildirimin önem derecesi yükseltildi. Geri bildirimde bulunmak için dokunun."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Bu bildirimin önem derecesi düşürüldü. Geri bildirimde bulunmak için dokunun."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Rutin Modu bilgi bildirimi"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Pil normal şarjdan önce bitebilir"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Pilin ömrünü uzatmak için Pil Tasarrufu etkinleştirildi"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 2d05920..7a74489 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1900,8 +1900,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Оновлено адміністратором"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Видалено адміністратором"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Щоб подовжити час роботи акумулятора, режим енергозбереження:\n\n• вмикає темну тему;\n• припиняє або обмежує фонову активність, вимикає деякі візуальні ефекти та інші енергозатратні функції, зокрема команду \"Ok Google\".\n\n"<annotation id="url">"Докладніше"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Щоб подовжити час роботи акумулятора, режим енергозбереження:\n\n• вмикає темну тему;\n• припиняє або обмежує фонову активність, вимикає деякі візуальні ефекти та інші енергозатратні функції, зокрема команду \"Ok Google\"."</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Щоб зменшити використання трафіку, функція \"Заощадження трафіку\" не дозволяє деяким додаткам надсилати чи отримувати дані у фоновому режимі. Поточний додаток зможе отримувати доступ до таких даних, але рідше. Наприклад, зображення не відображатиметься, доки ви не торкнетеся його."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Увімкнути заощадження трафіку?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Увімкнути"</string>
@@ -2140,6 +2142,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Важливість цього сповіщення знижено до рівня \"Без звуку\". Натисніть, щоб надіслати відгук."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Важливість цього сповіщення підвищено. Натисніть, щоб надіслати відгук."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Важливість цього сповіщення знижено. Натисніть, щоб надіслати відгук."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Сповіщення про послідовнсть дій"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Акумулятор може розрядитися раніше ніж зазвичай"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Режим енергозбереження активовано для збільшення часу роботи акумулятора"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 0aa550f..854741b 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1858,8 +1858,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"آپ کے منتظم کے ذریعے اپ ڈیٹ کیا گیا"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"آپ کے منتظم کے ذریعے حذف کیا گیا"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ٹھیک ہے"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"بیٹری لائف کو بڑھانے کے لیے، بیٹری سیور:\n\n• گہری تھیم کو آن کرتی ہے\n• پس منظر کی سرگرمی، کچھ بصری اثرات اور دیگر خصوصیات جیسے کہ \"Ok Google\" کو آف یا محدود کرتی ہے\n\n"<annotation id="url">"مزید جانیں"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"بیٹری لائف کو بڑھانے کے لیے، بیٹری سیور: \n\n• گہری تھیم کو آن کرتی ہے\n• پس منظر کی سرگرمی، کچھ ویژوئل اثرات اور دیگر خصوصیات جیسے کہ \"Ok Google\" کو آف یا محدود کرتی ہے"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"ڈیٹا کے استعمال کو کم کرنے میں مدد کیلئے، ڈیٹا سیور پس منظر میں کچھ ایپس کو ڈیٹا بھیجنے یا موصول کرنے سے روکتی ہے۔ آپ جو ایپ فی الحال استعمال کر رہے ہیں وہ ڈیٹا تک رسائی کر سکتی ہے مگر ہو سکتا ہے ایسا اکثر نہ ہو۔ اس کا مطلب مثال کے طور پر یہ ہو سکتا ہے کہ تصاویر تھپتھپانے تک ظاہر نہ ہوں۔"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"ڈیٹا سیور آن کریں؟"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"آن کریں"</string>
@@ -2078,6 +2080,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"اس اطلاع کو خاموش پر ڈیموٹ کیا گيا۔ تاثرات فراہم کرنے کے ليے تھپتھپائیں۔"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"اس اطلاع کو اعلی درجہ دیا گیا۔ تاثرات فراہم کرنے کے ليے تھپتھپائیں۔"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"اس اطلاع کو کم درجہ دیا گیا۔ تاثرات فراہم کرنے کے ليے تھپتھپائیں۔"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"روٹین موڈ معلومات کی اطلاع"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"معمول چارج سے پہلے بیٹری ختم ہو سکتی ہے"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"بیٹری لائف کو بڑھانے کے لیے بیٹری سیور کو فعال کر دیا گیا ہے"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index cd5cc09..a40e083 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -1856,8 +1856,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administrator tomonidan yangilangan"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administrator tomonidan o‘chirilgan"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batareya quvvatini uzaytirish uchun Quvvat tejash funksiyasi:\n\n• Tungi mavzuni yoqadi\n• Fondagi harakatlar, vizual effektlar va “Ok Google” kabi boshqa funksiyalarni faolsizlantiradi\n\n"<annotation id="url">"Batafsil"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batareya quvvatini uzaytirish uchun Quvvat tejash funksiyasi:\n\n• Tungi mavzuni yoqadi\n• Fondagi harakatlar, vizual effektlar va “Ok Google” kabi boshqa funksiyalarni faolsizlantiradi"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Trafik tejash rejimida ayrim ilovalar uchun orqa fonda internetdan foydalanish imkoniyati cheklanadi. Siz ishlatayotgan ilova zaruratga qarab internet-trafik sarflashi mumkin, biroq cheklangan miqdorda. Masalan, rasmlar ustiga bosmaguningizcha ular yuklanmaydi."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Trafik tejash yoqilsinmi?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Yoqish"</string>
@@ -2076,6 +2078,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Bu bildirishnoma darajasi Tovushsiz darajaga tushirildi Fikr-mulohaza bildirish uchun bosing."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Bu bildirishnoma darajasi oshirildi. Fikr-mulohaza bildirish uchun bosing."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Bu bildirishnoma darajasi pasaytirildi. Fikr-mulohaza bildirish uchun bosing."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Kun tartibi rejimi haqidagi bildirishnoma"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Batareya quvvati odatdagidan ertaroq tugashi mumkin"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Batareya quvvatini uzoqroq vaqtga yetkazish uchun quvvat tejash rejimi yoqildi"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 4f5cec1..41edab4 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Do quản trị viên của bạn cập nhật"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Do quản trị viên của bạn xóa"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Để tăng thời lượng pin, Trình tiết kiệm pin sẽ:\n\n• Bật Giao diện tối\n• Tắt hoặc hạn chế hoạt động chạy trong nền, một số hiệu ứng hình ảnh và các tính năng khác như lệnh “Ok Google”\n\n"<annotation id="url">"Tìm hiểu thêm"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Để tăng thời lượng pin, Trình tiết kiệm pin sẽ:\n\n• Bật Giao diện tối\n• Tắt hoặc hạn chế hoạt động chạy trong nền, một số hiệu ứng hình ảnh và các tính năng khác như lệnh “Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Để giúp giảm mức sử dụng dữ liệu, Trình tiết kiệm dữ liệu sẽ chặn một số ứng dụng gửi hoặc nhận dữ liệu trong nền. Ứng dụng mà bạn hiện sử dụng có thể dùng dữ liệu nhưng tần suất sẽ giảm. Ví dụ: hình ảnh sẽ không hiển thị cho đến khi bạn nhấn vào hình ảnh đó."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Bật Trình tiết kiệm dữ liệu?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Bật"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Hệ thống đã hạ mức ưu tiên của thông báo này xuống thành Im lặng. Hãy nhấn để chia sẻ ý kiến phản hồi."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Hệ thống đã nâng mức ưu tiên của thông báo này. Hãy nhấn để chia sẻ ý kiến phản hồi."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Hệ thống đã hạ mức ưu tiên của thông báo này. Hãy nhấn để chia sẻ ý kiến phản hồi."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Thông báo cung cấp thông tin về chế độ sạc thông thường"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Pin có thể hết trước khi sạc bình thường"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Trình tiết kiệm pin được kích hoạt để kéo dài thời lượng pin"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index a88cc87..8d8485d 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理员更新"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理员删除"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"确定"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"为了延长电池续航时间,省电模式会执行以下操作:\n\n• 开启深色主题\n• 关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”\n\n"<annotation id="url">"了解详情"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"为了延长电池续航时间,省电模式会执行以下操作:\n\n• 开启深色主题\n• 关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"为了减少流量消耗,流量节省程序会阻止某些应用在后台收发数据。您当前使用的应用可以收发数据,但频率可能会降低。举例而言,这可能意味着图片只有在您点按之后才会显示。"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"要开启流量节省程序吗?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"开启"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"系统已将此通知的重要性降低为“静音”。点按即可提供反馈。"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"系统已提升此通知的重要性。点按即可提供反馈。"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"系统已降低此通知的重要性。点按即可提供反馈。"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"日常安排模式信息通知"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"电池电量可能会在您平时的充电时间之前耗尽"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"已启用省电模式以延长电池续航时间"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 5066f29..68e06b13 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理員更新"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理員刪除"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"好"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"為延長電池壽命,「省電模式」會:\n\n• 開啟深色主題背景\n• 關閉或限制背景活動、某些視覺效果和其他功能 (例如「Hey Google」)\n\n"<annotation id="url">"瞭解詳情"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"為延長電池壽命,「省電模式」會:\n\n• 開啟深色主題背景\n• 停用或限制背景活動、部分視覺效果和其他功能 (例如「Hey Google」)"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。您正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟「數據節省模式」嗎?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"此通知的重要性已降低為「靜音」。輕按即可提供意見。"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"此通知的重要性已提升。輕按即可提供意見。"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"此通知的重要性已降級。輕按即可提供意見。"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"「日常安排模式」資料通知"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"電量可能會在日常充電前耗盡"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"「省電模式」已啟用,以便延長電池壽命"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 5aa1046..78f326b 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1690,8 +1690,8 @@
<string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"同時按住音量調高鍵和調低鍵數秒,即可開啟「<xliff:g id="SERVICE">%1$s</xliff:g>」無障礙功能。這麼做可能會改變裝置的運作方式。\n\n你可以在 [設定] > [無障礙設定] 中變更這個快速鍵觸發的功能。"</string>
<string name="accessibility_shortcut_on" msgid="5463618449556111344">"開啟"</string>
<string name="accessibility_shortcut_off" msgid="3651336255403648739">"不要開啟"</string>
- <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"已開啟"</string>
- <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"已關閉"</string>
+ <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"開啟"</string>
+ <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"關閉"</string>
<string name="accessibility_enable_service_title" msgid="3931558336268541484">"要將裝置的完整控制權授予「<xliff:g id="SERVICE">%1$s</xliff:g>」嗎?"</string>
<string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"如果你開啟「<xliff:g id="SERVICE">%1$s</xliff:g>」,裝置將無法使用螢幕鎖定功能強化資料加密。"</string>
<string name="accessibility_service_warning_description" msgid="291674995220940133">"如果你有無障礙服務需求,可以將完整控制權授予具有相關功能的應用程式,但請勿將完整控制權授予大多數的應用程式。"</string>
@@ -1854,8 +1854,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"已由你的管理員更新"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"已由你的管理員刪除"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"確定"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"為了延長電池續航力,省電模式會執行以下動作:\n\n• 開啟深色主題\n• 關閉或限制背景活動、某些視覺效果和其他功能,例如「Ok Google」啟動字詞\n\n"<annotation id="url">"瞭解詳情"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"為了延長電池續航力,省電模式會執行以下動作:\n\n• 開啟深色主題\n• 關閉或限制背景活動、某些視覺效果和其他功能,例如「Ok Google」啟動字詞"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。你目前使用的應用程式可以存取資料,但存取頻率可能不如平時高。舉例來說,圖片可能不會自動顯示,在你輕觸後才會顯示。"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟數據節省模式嗎?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string>
@@ -2074,6 +2076,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"這則通知的重要性已降低為「靜音」。輕觸即可提供意見。"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"這則通知的重要性順序已調高。輕觸即可提供意見。"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"這則通知的重要性順序已調降。輕觸即可提供意見。"</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"日常安排模式資訊通知"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"電池電力可能會在你平常的充電時間前耗盡"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"已啟用省電模式以延長電池續航力"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 9c9d4d2..1eb8438 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1852,8 +1852,10 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Kubuyekezwe umlawuli wakho"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Kususwe umlawuli wakho"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"KULUNGILE"</string>
- <string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Ukuze unwebe impilo yebhethri, Isilondolozi Sebhethri:\n\n•Sivula itimu emnyama\n• Sivala noma sibeka umkhawulo emsebenzini wangemuva, kweminye imithelela yokubuka, nakwezinye izici ezifana nokuthi “Ok Google”\n\n"<annotation id="url">"Funda kabanzi"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Ukuze unwebe impilo yebhethri, Isilondolozi sebhethri:\n\n•Sivula itimu emnyama\n• Sivala noma sibeka umkhawulo emsebenzini wangemuva, kweminye imithelela yokubuka, nakwezinye izici ezifana nokuthi “Ok Google”"</string>
+ <!-- no translation found for battery_saver_description_with_learn_more (7963058670863485450) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (7695751399533397741) -->
+ <skip />
<string name="data_saver_description" msgid="4995164271550590517">"Ukusiza ukwehlisa ukusetshenziswa kwedatha, iseva yedatha igwema ezinye izinhlelo zokusebenza ukuthi zithumele noma zamukele idatha ngasemuva. Uhlelo lokusebenza olisebenzisa okwamanje lingafinyelela idatha, kodwa lingenza kanjalo kancane. Lokhu kungachaza, isibonelo, ukuthi izithombe azibonisi uze uzithephe."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Vula iseva yedatha?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Vula"</string>
@@ -2072,6 +2074,18 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Lesi saziso sehliselwe esikhundleni Sokuthula. Thepha ukuze unikeze impendulo."</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Lesi saziso sibekwe ezingeni eliphakeme. Thepha ukuze unikeze impendulo."</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Lesi saziso sibekwe ezingeni eliphansi. Thepha ukuze unikeze impendulo."</string>
+ <!-- no translation found for nas_upgrade_notification_title (4224351129445073051) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_content (7036860187157134706) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_enable_action (4823652531622744798) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_disable_action (7561210256700811433) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_action (7011130656195423947) -->
+ <skip />
+ <!-- no translation found for nas_upgrade_notification_learn_more_content (6276343083934111208) -->
+ <skip />
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Isaziso solwazi lwe-Routine Mode"</string>
<string name="dynamic_mode_notification_title" msgid="9205715501274608016">"Ibhethri lingaphela ngaphambi kokushaja okuvamile"</string>
<string name="dynamic_mode_notification_summary" msgid="4141614604437372157">"Isilondolozi sebhethri siyasebenza ngaphandle kwempilo yebhethri"</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 864db5e..e4ea8fb 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -960,6 +960,13 @@
-->
<integer name="config_veryLongPressOnPowerBehavior">0</integer>
+ <!-- Control the behavior when the user presses the power and volume up buttons together.
+ 0 - Nothing
+ 1 - Mute toggle
+ 2 - Global actions menu
+ -->
+ <integer name="config_keyChordPowerVolumeUp">1</integer>
+
<!-- Control the behavior when the user long presses the back button. Non-zero values are only
valid for watches as part of CDD/CTS.
0 - Nothing
@@ -1941,7 +1948,7 @@
<string name="config_systemActivityRecognizer" translatable="false"></string>
<!-- The name of the package that will be allowed to change its components' label/icon. -->
- <string name="config_overrideComponentUiPackage" translatable="false"></string>
+ <string name="config_overrideComponentUiPackage" translatable="false">com.android.stk</string>
<!-- Enable/disable default bluetooth profiles:
HSP_AG, ObexObjectPush, Audio, NAP -->
@@ -4759,7 +4766,7 @@
<bool name="config_cecHdmiCecVersion20_allowed">true</bool>
<bool name="config_cecHdmiCecVersion20_default">false</bool>
- <bool name="config_cecSendStandbyOnSleep_userConfigurable">true</bool>
+ <bool name="config_cecPowerControlMode_userConfigurable">true</bool>
<bool name="config_cecPowerControlModeTv_allowed">true</bool>
<bool name="config_cecPowerControlModeTv_default">true</bool>
<bool name="config_cecPowerControlModeBroadcast_allowed">true</bool>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ff4c123..4bb3236 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -435,6 +435,7 @@
<java-symbol type="integer" name="config_veryLongPressTimeout" />
<java-symbol type="integer" name="config_longPressOnBackBehavior" />
<java-symbol type="bool" name="config_allowStartActivityForLongPressOnPowerInSetup" />
+ <java-symbol type="integer" name="config_keyChordPowerVolumeUp" />
<java-symbol type="integer" name="config_wakeUpToLastStateTimeoutMillis" />
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" />
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" />
@@ -4246,7 +4247,7 @@
<java-symbol type="bool" name="config_cecHdmiCecVersion20_allowed" />
<java-symbol type="bool" name="config_cecHdmiCecVersion20_default" />
- <java-symbol type="bool" name="config_cecSendStandbyOnSleep_userConfigurable" />
+ <java-symbol type="bool" name="config_cecPowerControlMode_userConfigurable" />
<java-symbol type="bool" name="config_cecPowerControlModeTv_allowed" />
<java-symbol type="bool" name="config_cecPowerControlModeTv_default" />
<java-symbol type="bool" name="config_cecPowerControlModeBroadcast_allowed" />
diff --git a/core/tests/coretests/src/android/content/ContentProviderTest.java b/core/tests/coretests/src/android/content/ContentProviderTest.java
index b282064..ceebc62 100644
--- a/core/tests/coretests/src/android/content/ContentProviderTest.java
+++ b/core/tests/coretests/src/android/content/ContentProviderTest.java
@@ -89,9 +89,9 @@
}
@Test
- public void testCreateContentUriAsUser() {
+ public void testCreateContentUriForUser() {
Uri uri = Uri.parse("content://com.example/foo/bar");
Uri expectedUri = Uri.parse("content://7@com.example/foo/bar");
- assertEquals(expectedUri, ContentProvider.createContentUriAsUser(uri, UserHandle.of(7)));
+ assertEquals(expectedUri, ContentProvider.createContentUriForUser(uri, UserHandle.of(7)));
}
}
diff --git a/core/tests/coretests/src/android/os/VibratorInfoTest.java b/core/tests/coretests/src/android/os/VibratorInfoTest.java
index 2521f75..3a80464 100644
--- a/core/tests/coretests/src/android/os/VibratorInfoTest.java
+++ b/core/tests/coretests/src/android/os/VibratorInfoTest.java
@@ -35,6 +35,7 @@
public class VibratorInfoTest {
private static final float TEST_TOLERANCE = 1e-5f;
+ private static final int TEST_VIBRATOR_ID = 1;
private static final float TEST_MIN_FREQUENCY = 50;
private static final float TEST_RESONANT_FREQUENCY = 150;
private static final float TEST_FREQUENCY_RESOLUTION = 25;
@@ -50,9 +51,9 @@
@Test
public void testHasAmplitudeControl() {
- VibratorInfo noCapabilities = new InfoBuilder().build();
+ VibratorInfo noCapabilities = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
assertFalse(noCapabilities.hasAmplitudeControl());
- VibratorInfo composeAndAmplitudeControl = new InfoBuilder()
+ VibratorInfo composeAndAmplitudeControl = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS
| IVibrator.CAP_AMPLITUDE_CONTROL)
.build();
@@ -61,7 +62,7 @@
@Test
public void testHasCapabilities() {
- VibratorInfo info = new InfoBuilder()
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
.build();
assertTrue(info.hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
@@ -70,8 +71,8 @@
@Test
public void testIsEffectSupported() {
- VibratorInfo noEffects = new InfoBuilder().build();
- VibratorInfo canClick = new InfoBuilder()
+ VibratorInfo noEffects = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+ VibratorInfo canClick = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setSupportedEffects(VibrationEffect.EFFECT_CLICK)
.build();
assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN,
@@ -84,7 +85,7 @@
@Test
public void testIsPrimitiveSupported() {
- VibratorInfo info = new InfoBuilder()
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK)
.build();
@@ -92,7 +93,7 @@
assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_TICK));
// Returns false when there is no compose capability.
- info = new InfoBuilder()
+ info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK)
.build();
assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
@@ -100,9 +101,10 @@
@Test
public void testGetDefaultBraking_returnsFirstSupportedBraking() {
- assertEquals(Braking.NONE, new InfoBuilder().build().getDefaultBraking());
+ assertEquals(Braking.NONE, new VibratorInfo.Builder(
+ TEST_VIBRATOR_ID).build().getDefaultBraking());
assertEquals(Braking.CLAB,
- new InfoBuilder()
+ new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setSupportedBraking(Braking.NONE, Braking.CLAB)
.build()
.getDefaultBraking());
@@ -111,33 +113,34 @@
@Test
public void testGetFrequencyRange_invalidFrequencyMappingReturnsEmptyRange() {
// Invalid, contains NaN values or empty array.
- assertEquals(Range.create(0f, 0f), new InfoBuilder().build().getFrequencyRange());
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(
+ TEST_VIBRATOR_ID).build().getFrequencyRange());
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
Float.NaN, 150, 25, 50, TEST_AMPLITUDE_MAP))
.build().getFrequencyRange());
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
50, Float.NaN, 25, 50, TEST_AMPLITUDE_MAP))
.build().getFrequencyRange());
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
50, 150, Float.NaN, 50, TEST_AMPLITUDE_MAP))
.build().getFrequencyRange());
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
50, 150, 25, Float.NaN, TEST_AMPLITUDE_MAP))
.build().getFrequencyRange());
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(50, 150, 25, 50, null))
.build().getFrequencyRange());
// Invalid, minFrequency > resonantFrequency
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
/* minFrequencyHz= */ 250, /* resonantFrequency= */ 150, 25, 50, null))
.build().getFrequencyRange());
// Invalid, maxFrequency < resonantFrequency by changing resolution.
- assertEquals(Range.create(0f, 0f), new InfoBuilder()
+ assertEquals(Range.create(0f, 0f), new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
50, 150, /* frequencyResolutionHz= */10, 50, null))
.build().getFrequencyRange());
@@ -145,7 +148,7 @@
@Test
public void testGetFrequencyRange_safeRangeLimitedByMaxFrequency() {
- VibratorInfo info = new InfoBuilder()
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
/* minFrequencyHz= */ 50, /* resonantFrequencyHz= */ 150,
/* frequencyResolutionHz= */ 25, /* suggestedSafeRangeHz= */ 200,
@@ -159,7 +162,7 @@
@Test
public void testGetFrequencyRange_safeRangeLimitedByMinFrequency() {
- VibratorInfo info = new InfoBuilder()
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
/* minFrequencyHz= */ 50, /* resonantFrequencyHz= */ 150,
/* frequencyResolutionHz= */ 50, /* suggestedSafeRangeHz= */ 200,
@@ -173,7 +176,7 @@
@Test
public void testGetFrequencyRange_validMappingReturnsFullRelativeRange() {
- VibratorInfo info = new InfoBuilder()
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(
/* minFrequencyHz= */ 50, /* resonantFrequencyHz= */ 150,
/* frequencyResolutionHz= */ 50, /* suggestedSafeRangeHz= */ 100,
@@ -187,7 +190,7 @@
@Test
public void testAbsoluteFrequency_emptyMappingReturnsNaN() {
- VibratorInfo info = new InfoBuilder().build();
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
assertTrue(Float.isNaN(info.getAbsoluteFrequency(-1)));
assertTrue(Float.isNaN(info.getAbsoluteFrequency(0)));
assertTrue(Float.isNaN(info.getAbsoluteFrequency(1)));
@@ -195,7 +198,8 @@
@Test
public void testAbsoluteFrequency_validRangeReturnsOriginalValue() {
- VibratorInfo info = new InfoBuilder().setFrequencyMapping(TEST_FREQUENCY_MAPPING).build();
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID).setFrequencyMapping(
+ TEST_FREQUENCY_MAPPING).build();
assertEquals(TEST_RESONANT_FREQUENCY, info.getAbsoluteFrequency(0), TEST_TOLERANCE);
// Safe range [-1, 1] = [125Hz, 175Hz] defined by suggested safe range 100Hz
@@ -213,7 +217,7 @@
@Test
public void testGetMaxAmplitude_emptyMappingReturnsOnlyResonantFrequency() {
- VibratorInfo info = new InfoBuilder().build();
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
assertEquals(1f, info.getMaxAmplitude(0), TEST_TOLERANCE);
assertEquals(0f, info.getMaxAmplitude(0.1f), TEST_TOLERANCE);
assertEquals(0f, info.getMaxAmplitude(-1), TEST_TOLERANCE);
@@ -221,7 +225,7 @@
@Test
public void testGetMaxAmplitude_validMappingReturnsMappedValues() {
- VibratorInfo info = new InfoBuilder()
+ VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setFrequencyMapping(new VibratorInfo.FrequencyMapping(/* minFrequencyHz= */ 50,
/* resonantFrequencyHz= */ 150, /* frequencyResolutionHz= */ 25,
/* suggestedSafeRangeHz= */ 50, TEST_AMPLITUDE_MAP))
@@ -243,8 +247,7 @@
@Test
public void testEquals() {
- InfoBuilder completeBuilder = new InfoBuilder()
- .setId(1)
+ VibratorInfo.Builder completeBuilder = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
.setSupportedEffects(VibrationEffect.EFFECT_CLICK)
.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK)
@@ -298,9 +301,8 @@
.build();
assertNotEquals(complete, completeWithDifferentQFactor);
- VibratorInfo empty = new InfoBuilder().setId(1).build();
- VibratorInfo emptyWithKnownSupport = new InfoBuilder()
- .setId(1)
+ VibratorInfo empty = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+ VibratorInfo emptyWithKnownSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setSupportedEffects()
.setSupportedPrimitives()
.build();
@@ -309,8 +311,7 @@
@Test
public void testParceling() {
- VibratorInfo original = new InfoBuilder()
- .setId(1)
+ VibratorInfo original = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
.setSupportedEffects(VibrationEffect.EFFECT_CLICK)
.setSupportedPrimitives(null)
@@ -324,54 +325,4 @@
VibratorInfo restored = VibratorInfo.CREATOR.createFromParcel(parcel);
assertEquals(original, restored);
}
-
- private static class InfoBuilder {
- private int mId = 0;
- private int mCapabilities = 0;
- private int[] mSupportedEffects = null;
- private int[] mSupportedBraking = null;
- private int[] mSupportedPrimitives = null;
- private float mQFactor = Float.NaN;
- private VibratorInfo.FrequencyMapping mFrequencyMapping = EMPTY_FREQUENCY_MAPPING;
-
- public InfoBuilder setId(int id) {
- mId = id;
- return this;
- }
-
- public InfoBuilder setCapabilities(int capabilities) {
- mCapabilities = capabilities;
- return this;
- }
-
- public InfoBuilder setSupportedEffects(int... supportedEffects) {
- mSupportedEffects = supportedEffects;
- return this;
- }
-
- public InfoBuilder setSupportedBraking(int... supportedBraking) {
- mSupportedBraking = supportedBraking;
- return this;
- }
-
- public InfoBuilder setSupportedPrimitives(int... supportedPrimitives) {
- mSupportedPrimitives = supportedPrimitives;
- return this;
- }
-
- public InfoBuilder setQFactor(float qFactor) {
- mQFactor = qFactor;
- return this;
- }
-
- public InfoBuilder setFrequencyMapping(VibratorInfo.FrequencyMapping frequencyMapping) {
- mFrequencyMapping = frequencyMapping;
- return this;
- }
-
- public VibratorInfo build() {
- return new VibratorInfo(mId, mCapabilities, mSupportedEffects, mSupportedBraking,
- mSupportedPrimitives, mQFactor, mFrequencyMapping);
- }
- }
}
diff --git a/core/tests/coretests/src/android/os/VibratorTest.java b/core/tests/coretests/src/android/os/VibratorTest.java
index 575a1be..6213285 100644
--- a/core/tests/coretests/src/android/os/VibratorTest.java
+++ b/core/tests/coretests/src/android/os/VibratorTest.java
@@ -55,6 +55,11 @@
}
@Test
+ public void getId_returnsDefaultId() {
+ assertEquals(-1, mVibratorSpy.getId());
+ }
+
+ @Test
public void areEffectsSupported_returnsArrayOfSameSize() {
assertEquals(0, mVibratorSpy.areEffectsSupported(new int[0]).length);
assertEquals(1,
diff --git a/core/tests/coretests/src/android/window/WindowContextControllerTest.java b/core/tests/coretests/src/android/window/WindowContextControllerTest.java
index e4fc19c..020f4a0 100644
--- a/core/tests/coretests/src/android/window/WindowContextControllerTest.java
+++ b/core/tests/coretests/src/android/window/WindowContextControllerTest.java
@@ -60,34 +60,39 @@
mMockWms = mock(IWindowManager.class);
mController = new WindowContextController(new Binder(), mMockWms);
- doReturn(true).when(mMockWms).registerWindowContextListener(
- any(), anyInt(), anyInt(), any());
+ doReturn(true).when(mMockWms).attachWindowContextToDisplayArea(any(), anyInt(),
+ anyInt(), any());
}
- @Test(expected = UnsupportedOperationException.class)
- public void testRegisterListenerTwiceThrowException() {
- mController.registerListener(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
+ @Test(expected = IllegalStateException.class)
+ public void testAttachToDisplayAreaTwiceThrowException() {
+ mController.attachToDisplayArea(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
null /* options */);
- mController.registerListener(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
+ mController.attachToDisplayArea(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
null /* options */);
}
@Test
- public void testUnregisterListenerIfNeeded_NotRegisteredYet_DoNothing() throws Exception {
- mController.unregisterListenerIfNeeded();
+ public void testDetachIfNeeded_NotAttachedYet_DoNothing() throws Exception {
+ mController.detachIfNeeded();
- verify(mMockWms, never()).registerWindowContextListener(any(), anyInt(), anyInt(), any());
+ verify(mMockWms, never()).detachWindowContextFromWindowContainer(any());
}
@Test
- public void testRegisterAndUnRegisterListener() {
- mController.registerListener(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
+ public void testAttachAndDetachDisplayArea() {
+ mController.attachToDisplayArea(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
null /* options */);
- assertThat(mController.mListenerRegistered).isTrue();
+ assertThat(mController.mAttachedToDisplayArea).isTrue();
- mController.unregisterListenerIfNeeded();
+ mController.detachIfNeeded();
- assertThat(mController.mListenerRegistered).isFalse();
+ assertThat(mController.mAttachedToDisplayArea).isFalse();
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testAttachToWindowTokenBeforeAttachingToDAThrowException() {
+ mController.attachToWindowToken(new Binder());
}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/BinderLatencyBucketsTest.java b/core/tests/coretests/src/com/android/internal/os/BinderLatencyBucketsTest.java
index 00443a9..b2054f1 100644
--- a/core/tests/coretests/src/com/android/internal/os/BinderLatencyBucketsTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BinderLatencyBucketsTest.java
@@ -36,6 +36,7 @@
public void testBucketThresholds() {
BinderLatencyBuckets latencyBuckets = new BinderLatencyBuckets(10, 2, 1.45f);
assertThat(latencyBuckets.getBuckets())
+ .asList()
.containsExactly(2, 3, 4, 6, 8, 12, 18, 26, 39)
.inOrder();
}
@@ -58,6 +59,7 @@
public void testMaxIntBuckets() {
BinderLatencyBuckets latencyBuckets = new BinderLatencyBuckets(5, Integer.MAX_VALUE / 2, 2);
assertThat(latencyBuckets.getBuckets())
+ .asList()
.containsExactly(Integer.MAX_VALUE / 2, Integer.MAX_VALUE - 1)
.inOrder();
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index efeaf23..fec78f0 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -2029,12 +2029,6 @@
"group": "WM_DEBUG_WINDOW_ORGANIZER",
"at": "com\/android\/server\/wm\/TaskOrganizerController.java"
},
- "236210101": {
- "message": "registerWindowContextListener: trying to add listener to a non-existing display:%d",
- "level": "WARN",
- "group": "WM_ERROR",
- "at": "com\/android\/server\/wm\/WindowManagerService.java"
- },
"240271590": {
"message": "moveFocusableActivityToTop: unfocusable activity=%s",
"level": "DEBUG",
@@ -2473,6 +2467,12 @@
"group": "WM_DEBUG_SCREEN_ON",
"at": "com\/android\/server\/wm\/WindowManagerService.java"
},
+ "666937535": {
+ "message": "attachWindowContextToDisplayArea: trying to attach to a non-existing display:%d",
+ "level": "WARN",
+ "group": "WM_ERROR",
+ "at": "com\/android\/server\/wm\/WindowManagerService.java"
+ },
"674932310": {
"message": "Setting Intent of %s to target %s",
"level": "VERBOSE",
@@ -3307,6 +3307,12 @@
"group": "WM_DEBUG_RECENTS_ANIMATIONS",
"at": "com\/android\/server\/wm\/RecentsAnimation.java"
},
+ "1789321832": {
+ "message": "Then token:%s is invalid. It might be removed",
+ "level": "WARN",
+ "group": "WM_ERROR",
+ "at": "com\/android\/server\/wm\/WindowManagerService.java"
+ },
"1789603530": {
"message": "Removing activity %s hasSavedState=%b stateNotNeeded=%s finishing=%b state=%s callers=%s",
"level": "INFO",
diff --git a/libs/WindowManager/Shell/lint-baseline.xml b/libs/WindowManager/Shell/lint-baseline.xml
new file mode 100644
index 0000000..06094ff
--- /dev/null
+++ b/libs/WindowManager/Shell/lint-baseline.xml
@@ -0,0 +1,5471 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" return mRootTaskInfo != null ? mRootTaskInfo.taskId : INVALID_TASK_ID;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="73"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" return mTaskInfo1 != null ? mTaskInfo1.taskId : INVALID_TASK_ID;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="77"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" return mTaskInfo2 != null ? mTaskInfo2.taskId : INVALID_TASK_ID;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="81"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = task1.taskId; long protoLogParam1 = task2.taskId; String protoLogParam2 = String.valueOf(this); com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -742394458, 5, null, protoLogParam0, protoLogParam1, protoLogParam2); "
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="89"
+ column="113"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = task1.taskId; long protoLogParam1 = task2.taskId; String protoLogParam2 = String.valueOf(this); com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -742394458, 5, null, protoLogParam0, protoLogParam1, protoLogParam2); "
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="89"
+ column="149"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b -> b.setParent(mRootTaskLeash), mDisplayImeController);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="105"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mRootTaskInfo == null || taskInfo.taskId == mRootTaskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="151"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mRootTaskInfo == null || taskInfo.taskId == mRootTaskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="151"
+ column="57"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.taskId == getTaskId1()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="154"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.taskId == getTaskId2()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="157"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" throw new IllegalStateException("Unknown task=" + taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="161"
+ column="63"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(dividerLeash, Integer.MAX_VALUE)"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="172"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (taskInfo.taskId == getRootTaskId()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="186"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.taskId == getTaskId1()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="202"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.taskId == getTaskId2()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="204"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" throw new IllegalStateException("Unknown task=" + taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="207"
+ column="63"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (taskInfo.taskId == getRootTaskId()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="213"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mController.unpair(mRootTaskInfo.taskId, false /* releaseToPool */);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="215"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.taskId == getTaskId1() || taskInfo.taskId == getTaskId2()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="216"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.taskId == getTaskId1() || taskInfo.taskId == getTaskId2()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="216"
+ column="55"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mController.unpair(mRootTaskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="217"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mRootTaskLeash);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="224"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mTaskLeash1);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="226"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mTaskLeash2);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="228"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" pw.println(innerPrefix + "1 taskId=" + mTaskInfo1.taskId"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="242"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" pw.println(innerPrefix + "2 taskId=" + mTaskInfo2.taskId"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="246"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" .setLayer(dividerLeash, Integer.MAX_VALUE)"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java"
+ line="291"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.content.LocusId`"
+ errorLine1=" mLocusId = locus != null ? new LocusId(locus) : null;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="177"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.service.notification.StatusBarNotification#getUid`"
+ errorLine1=" mAppUid = entry.getStatusBarNotification().getUid();"
+ errorLine2=" ~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="449"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.service.notification.NotificationListenerService.Ranking#getConversationShortcutInfo`"
+ errorLine1=" mShortcutInfo = entry.getRanking().getConversationShortcutInfo();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="453"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.app.NotificationChannel#isImportantConversation`"
+ errorLine1=" entry.getRanking().getChannel().isImportantConversation();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="457"
+ column="57"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.app.Notification.BubbleMetadata#getShortcutId`"
+ errorLine1=" mMetadataShortcutId = entry.getBubbleMetadata().getShortcutId();"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="461"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getDesiredHeight`"
+ errorLine1=" mDesiredHeight = entry.getBubbleMetadata().getDesiredHeight();"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="463"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getDesiredHeightResId`"
+ errorLine1=" mDesiredHeightResId = entry.getBubbleMetadata().getDesiredHeightResId();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="464"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getIcon`"
+ errorLine1=" mIcon = entry.getBubbleMetadata().getIcon();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="465"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getIntent`"
+ errorLine1=" mIntent = entry.getBubbleMetadata().getIntent();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="471"
+ column="53"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getIntent`"
+ errorLine1=" } else if (mIntent != null && entry.getBubbleMetadata().getIntent() == null) {"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="475"
+ column="69"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getDeleteIntent`"
+ errorLine1=" mDeleteIntent = entry.getBubbleMetadata().getDeleteIntent();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="481"
+ column="55"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.app.Notification.MessagingStyle.Message#getMessagesFromBundleArray`"
+ errorLine1=" Notification.MessagingStyle.Message.getMessagesFromBundleArray("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="856"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.app.Notification.MessagingStyle.Message#getSenderPerson`"
+ errorLine1=" Person sender = latestMessage.getSenderPerson();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="864"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.app.Person#getName`"
+ errorLine1=" bubbleMessage.senderName = sender != null ? sender.getName() : null;"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="865"
+ column="72"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.app.Person#getIcon`"
+ errorLine1=" bubbleMessage.senderIcon = sender != null ? sender.getIcon() : null;"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java"
+ line="867"
+ column="72"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (task.taskId == b.getTaskId()) {"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="357"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsTypes`"
+ errorLine1=" mWmLayoutParams.setFitInsetsTypes(0);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="553"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 28 (current min is 26): `android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode`"
+ errorLine1=" mWmLayoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="558"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getAutoExpandBubble`"
+ errorLine1=" && !notif.getBubbleMetadata().getAutoExpandBubble())"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="842"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.service.notification.NotificationListenerService.Ranking#canBubble`"
+ errorLine1=" if (isActiveBubble && !mTmpRanking.canBubble()) {"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="919"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification.BubbleMetadata#getIntent`"
+ errorLine1=" ? entry.getBubbleMetadata().getIntent()"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="1217"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.app.Notification.BubbleMetadata#getShortcutId`"
+ errorLine1=" && entry.getBubbleMetadata().getShortcutId() != null) {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java"
+ line="1220"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.LocusId#getId`"
+ errorLine1=" b.locusId?.id"
+ errorLine2=" ~~">
+ <location
+ file="frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDataRepository.kt"
+ line="85"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification#getLocusId`"
+ errorLine1=" return mSbn.getNotification().getLocusId();"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleEntry.java"
+ line="81"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.app.Notification#getBubbleMetadata`"
+ errorLine1=" return getStatusBarNotification().getNotification().getBubbleMetadata();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleEntry.java"
+ line="87"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.service.notification.NotificationListenerService.Ranking#canBubble`"
+ errorLine1=" return mRanking.canBubble();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleEntry.java"
+ line="115"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.Bitmap#createBitmap`"
+ errorLine1=" Bitmap snapshot = Bitmap.createBitmap(p);"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java"
+ line="428"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.graphics.Bitmap#getHardwareBuffer`"
+ errorLine1=" return new SurfaceControl.ScreenshotHardwareBuffer(snapshot.getHardwareBuffer(),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java"
+ line="429"
+ column="73"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceView#getSurfaceControl`"
+ errorLine1=" if (mTaskView == null || mTaskView.getSurfaceControl() == null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java"
+ line="432"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceView#getSurfaceControl`"
+ errorLine1=" mTaskView.getSurfaceControl(),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java"
+ line="436"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" ? mExpandedViewContainerLocation[1] - mPositioner.getInsets().top"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java"
+ line="636"
+ column="55"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.graphics.Outline#setPath`"
+ errorLine1=" outline.setPath(rectPath);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleFlyoutView.java"
+ line="504"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.drawable.Icon#getType`"
+ errorLine1=" if (ic.getType() == Icon.TYPE_URI"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java"
+ line="65"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.drawable.Icon#getType`"
+ errorLine1=" || ic.getType() == Icon.TYPE_URI_ADAPTIVE_BITMAP) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java"
+ line="66"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.drawable.Icon#getUri`"
+ errorLine1=" ic.getUri(),"
+ errorLine2=" ~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java"
+ line="68"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" getContext().getDisplay().getMetrics(displayMetrics);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflowContainerView.java"
+ line="143"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager#getCurrentWindowMetrics`"
+ errorLine1=" WindowMetrics windowMetrics = mWindowManager.getCurrentWindowMetrics();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="93"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowMetrics#getWindowInsets`"
+ errorLine1=" WindowInsets metricInsets = windowMetrics.getWindowInsets();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="97"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets#getInsetsIgnoringVisibility`"
+ errorLine1=" Insets insets = metricInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="99"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#navigationBars`"
+ errorLine1=" Insets insets = metricInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="99"
+ column="84"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#statusBars`"
+ errorLine1=" | WindowInsets.Type.statusBars()"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="100"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#displayCutout`"
+ errorLine1=" | WindowInsets.Type.displayCutout());"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="101"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowMetrics#getBounds`"
+ errorLine1=" + " bounds: " + windowMetrics.getBounds()"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="107"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowMetrics#getBounds`"
+ errorLine1=" updateInternal(orientation, insets, windowMetrics.getBounds());"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="110"
+ column="59"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" mPositionRect.left += mInsets.left;"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="134"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" mPositionRect.top += mInsets.top;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="135"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" mPositionRect.right -= mInsets.right;"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="136"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#bottom`"
+ errorLine1=" mPositionRect.bottom -= mInsets.bottom;"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="137"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager#getCurrentWindowMetrics`"
+ errorLine1=" WindowInsets metricInsets = mWindowManager.getCurrentWindowMetrics().getWindowInsets();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="156"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowMetrics#getWindowInsets`"
+ errorLine1=" WindowInsets metricInsets = mWindowManager.getCurrentWindowMetrics().getWindowInsets();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="156"
+ column="82"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets#getInsetsIgnoringVisibility`"
+ errorLine1=" Insets navBarInsets = metricInsets.getInsetsIgnoringVisibility("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="157"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#navigationBars`"
+ errorLine1=" WindowInsets.Type.navigationBars());"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="158"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" int newInsetLeft = mInsets.left;"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="159"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" int newInsetRight = mInsets.right;"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="160"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" mPositionRect.left -= navBarInsets.left;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="162"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" newInsetLeft -= navBarInsets.left;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="163"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" mPositionRect.right += navBarInsets.right;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="165"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" newInsetRight -= navBarInsets.right;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="166"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.graphics.Insets#of`"
+ errorLine1=" mInsets = Insets.of(newInsetLeft, mInsets.top, newInsetRight, mInsets.bottom);"
+ errorLine2=" ~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="168"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#bottom`"
+ errorLine1=" mInsets = Insets.of(newInsetLeft, mInsets.top, newInsetRight, mInsets.bottom);"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="168"
+ column="75"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" mInsets = Insets.of(newInsetLeft, mInsets.top, newInsetRight, mInsets.bottom);"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="168"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `new android.graphics.PointF`"
+ errorLine1=" mRestingStackPosition = new PointF(position);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java"
+ line="229"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#getAnimationMatrix`"
+ errorLine1=" pw.println(mExpandedViewContainer.getAnimationMatrix());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="295"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setSystemGestureExclusionRects`"
+ errorLine1=" mBubbleContainer.setSystemGestureExclusionRects(mSystemGestureExclusionRects);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1427"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setSystemGestureExclusionRects`"
+ errorLine1=" mBubbleContainer.setSystemGestureExclusionRects(Collections.emptyList());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1430"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix))"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1750"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix))"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1775"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1863"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1894"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="1986"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="2074"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="2091"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.View#setAnimationMatrix`"
+ errorLine1=" mExpandedViewContainer.setAnimationMatrix(null);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="2118"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" int leftPadding = insets.left + mExpandedViewPadding;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="2696"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" int rightPadding = insets.right + mExpandedViewPadding;"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java"
+ line="2697"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.drawable.Icon#getType`"
+ errorLine1=" if (icon.getType() == Icon.TYPE_URI || icon.getType() == Icon.TYPE_URI_ADAPTIVE_BITMAP) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java"
+ line="220"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.drawable.Icon#getType`"
+ errorLine1=" if (icon.getType() == Icon.TYPE_URI || icon.getType() == Icon.TYPE_URI_ADAPTIVE_BITMAP) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java"
+ line="220"
+ column="53"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.drawable.Icon#getUri`"
+ errorLine1=" icon.getUri(), Intent.FLAG_GRANT_READ_URI_PERMISSION);"
+ errorLine2=" ~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java"
+ line="222"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java"
+ line="119"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, transformation.getAlpha());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java"
+ line="237"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java"
+ line="239"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="279"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#ime`"
+ errorLine1=" if ((types & WindowInsets.Type.ime()) == 0) {"
+ errorLine2=" ~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="285"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#ime`"
+ errorLine1=" if ((types & WindowInsets.Type.ime()) == 0) {"
+ errorLine2=" ~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="294"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(mImeSourceControl.getLeash(), alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="396"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="398"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(mImeSourceControl.getLeash(), alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="420"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="424"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(mImeSourceControl.getLeash(), 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="439"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java"
+ line="446"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.view.DisplayCutout#getSafeInsetLeft`"
+ errorLine1=" outInsets.left += displayCutout.getSafeInsetLeft();"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="313"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.view.DisplayCutout#getSafeInsetTop`"
+ errorLine1=" outInsets.top += displayCutout.getSafeInsetTop();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="314"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.view.DisplayCutout#getSafeInsetRight`"
+ errorLine1=" outInsets.right += displayCutout.getSafeInsetRight();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="315"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.view.DisplayCutout#getSafeInsetBottom`"
+ errorLine1=" outInsets.bottom += displayCutout.getSafeInsetBottom();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="316"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.DisplayCutout#getWaterfallInsets`"
+ errorLine1=" final Insets waterfallInsets = rotateInsets(cutout.getWaterfallInsets(), rotation);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="358"
+ column="60"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.DisplayCutout#getWaterfallInsets`"
+ errorLine1=" int leftInset = Math.max(cutout.getWaterfallInsets().left,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="405"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" int leftInset = Math.max(cutout.getWaterfallInsets().left,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="405"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.DisplayCutout#getBoundingRectLeft`"
+ errorLine1=" findCutoutInsetForSide(displaySize, cutout.getBoundingRectLeft(), Gravity.LEFT));"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="406"
+ column="60"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.DisplayCutout#getWaterfallInsets`"
+ errorLine1=" int topInset = Math.max(cutout.getWaterfallInsets().top,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="407"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" int topInset = Math.max(cutout.getWaterfallInsets().top,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="407"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.DisplayCutout#getBoundingRectTop`"
+ errorLine1=" findCutoutInsetForSide(displaySize, cutout.getBoundingRectTop(), Gravity.TOP));"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="408"
+ column="60"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.DisplayCutout#getWaterfallInsets`"
+ errorLine1=" int rightInset = Math.max(cutout.getWaterfallInsets().right,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="409"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" int rightInset = Math.max(cutout.getWaterfallInsets().right,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="409"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.DisplayCutout#getBoundingRectRight`"
+ errorLine1=" findCutoutInsetForSide(displaySize, cutout.getBoundingRectRight(), Gravity.RIGHT));"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="410"
+ column="60"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.DisplayCutout#getWaterfallInsets`"
+ errorLine1=" int bottomInset = Math.max(cutout.getWaterfallInsets().bottom,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="411"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#bottom`"
+ errorLine1=" int bottomInset = Math.max(cutout.getWaterfallInsets().bottom,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="411"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.DisplayCutout#getBoundingRectBottom`"
+ errorLine1=" findCutoutInsetForSide(displaySize, cutout.getBoundingRectBottom(),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java"
+ line="412"
+ column="60"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerImeController.java"
+ line="343"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerImeController.java"
+ line="359"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="406"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="731"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="800"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="878"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(dim, alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="1065"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="1106"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java"
+ line="1171"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 28 (current min is 26): `android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode`"
+ errorLine1=" mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerWindowManager.java"
+ line="64"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java"
+ line="73"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#createWindowContext`"
+ errorLine1=" .createWindowContext(TYPE_APPLICATION_OVERLAY, null);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java"
+ line="89"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 28 (current min is 26): `android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode`"
+ errorLine1=" layoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java"
+ line="101"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsTypes`"
+ errorLine1=" layoutParams.setFitInsetsTypes(0);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java"
+ line="102"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mTransaction.reparent(dragSurface, null);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java"
+ line="229"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mTransaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java"
+ line="230"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" final int iw = w - insets.left - insets.right;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="126"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#right`"
+ errorLine1=" final int iw = w - insets.left - insets.right;"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="126"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#bottom`"
+ errorLine1=" final int ih = h - insets.top - insets.bottom;"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="127"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" final int ih = h - insets.top - insets.bottom;"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="127"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#left`"
+ errorLine1=" final int l = insets.left;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="128"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" final int t = insets.top;"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="129"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" runningTaskId = task.taskId;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java"
+ line="279"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#NONE`"
+ errorLine1=" private Insets mInsets = Insets.NONE;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragLayout.java"
+ line="59"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets#getInsets`"
+ errorLine1=" mInsets = insets.getInsets(Type.systemBars() | Type.displayCutout());"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragLayout.java"
+ line="76"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#displayCutout`"
+ errorLine1=" mInsets = insets.getInsets(Type.systemBars() | Type.displayCutout());"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragLayout.java"
+ line="76"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#systemBars`"
+ errorLine1=" mInsets = insets.getInsets(Type.systemBars() | Type.displayCutout());"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragLayout.java"
+ line="76"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `com.google.android.collect.Sets#newHashSet`"
+ errorLine1=" return Sets.newHashSet("
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedAnimationController.java"
+ line="498"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mLeashByTaskId.get(taskInfo.taskId) != null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="53"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" throw new IllegalStateException("Task appeared more than once: #" + taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="54"
+ column="81"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, -1501874464, 1, null, protoLogParam0); "
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="56"
+ column="113"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mLeashByTaskId.put(taskInfo.taskId, leash);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="58"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="66"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final SurfaceControl leash = mLeashByTaskId.get(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="75"
+ column="57"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mLeashByTaskId.get(taskInfo.taskId) == null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="88"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" Slog.e(TAG, "Task already vanished: #" + taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="89"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mLeashByTaskId.remove(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="92"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, 564235578, 1, null, protoLogParam0); "
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="93"
+ column="113"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.SparseArray#contains`"
+ errorLine1=" if (!mLeashByTaskId.contains(taskId)) {"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="99"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mLeashByTaskId.get(taskId));"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/FullscreenTaskListener.java"
+ line="102"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.os.Handler#hasCallbacks`"
+ errorLine1=" return mHandler.hasCallbacks(r);"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/HandlerExecutor.java"
+ line="55"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" final SurfaceControl.Transaction t = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="86"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="90"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" final SurfaceControl.Transaction tx = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="107"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" final SurfaceControl.Transaction t = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="121"
+ column="50"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" final SurfaceControl.Transaction t = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="167"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#NONE`"
+ errorLine1=" return Insets.NONE;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="185"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.Display#getCutout`"
+ errorLine1=" DisplayCutout cutout = display.getCutout();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="187"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.graphics.Insets#of`"
+ errorLine1=" Insets insets = cutout != null ? Insets.of(cutout.getSafeInsets()) : Insets.NONE;"
+ errorLine2=" ~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="188"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#NONE`"
+ errorLine1=" Insets insets = cutout != null ? Insets.of(cutout.getSafeInsets()) : Insets.NONE;"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="188"
+ column="78"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.graphics.Rect#inset`"
+ errorLine1=" mCurrentDisplayBounds.inset(mCurrentCutoutInsets);"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="239"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" if (mCurrentCutoutInsets.top != 0) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="244"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.Insets#top`"
+ errorLine1=" mCurrentDisplayBounds.top = Math.max(mStatusBarHeight, mCurrentCutoutInsets.top);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="245"
+ column="72"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java"
+ line="287"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" mContext.getResources().getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenController.java"
+ line="465"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { String protoLogParam0 = String.valueOf(TAG); long protoLogParam1 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -1362429294, 4, null, protoLogParam0, protoLogParam1); "
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="129"
+ column="166"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { String protoLogParam0 = String.valueOf(TAG); long protoLogParam1 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, 982027396, 4, null, protoLogParam0, protoLogParam1); "
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="134"
+ column="166"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { String protoLogParam0 = String.valueOf(TAG); long protoLogParam1 = taskInfo.taskId; long protoLogParam2 = winMode; com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -298656957, 20, null, protoLogParam0, protoLogParam1, protoLogParam2); "
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="139"
+ column="166"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" .setParent(mPrimarySurface).setColorLayer()"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="150"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName("Primary Divider Dim")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="151"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" .build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="153"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" .setParent(mSecondarySurface).setColorLayer()"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="155"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName("Secondary Divider Dim")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="156"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" .build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="158"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(mPrimaryDim, Integer.MAX_VALUE);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="160"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(mSecondaryDim, Integer.MAX_VALUE);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="162"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="164"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mPositionByTaskId.remove(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="173"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mLeashByTaskId.remove(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="175"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="192"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (taskInfo.positionInParent.equals(mPositionByTaskId.get(taskInfo.taskId))) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="211"
+ column="76"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mPositionByTaskId.put(taskInfo.taskId, new Point(taskInfo.positionInParent));"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="218"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mLeashByTaskId.put(taskInfo.taskId, leash);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="223"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mPositionByTaskId.put(taskInfo.taskId, new Point(taskInfo.positionInParent));"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="224"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final SurfaceControl leash = mLeashByTaskId.get(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="231"
+ column="57"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="242"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final SurfaceControl leash = mLeashByTaskId.get(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="322"
+ column="65"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.SparseArray#contains`"
+ errorLine1=" if (!mLeashByTaskId.contains(taskId)) {"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="339"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mLeashByTaskId.get(taskId));"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="342"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mPrimary != null) pw.println(innerPrefix + "mPrimary.taskId=" + mPrimary.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="351"
+ column="77"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mSecondary != null) pw.println(innerPrefix + "mSecondary.taskId=" + mSecondary.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java"
+ line="352"
+ column="81"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" && triggerTask.parentTaskId == mListener.mPrimary.taskId)"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="94"
+ column="64"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" transaction.setAlpha(leash, start * (1.f - fraction) + end * fraction);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="132"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="133"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" transaction.setAlpha(leash, end);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="136"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="137"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="180"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="185"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(parentChange.getLeash(), 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="245"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" t.reparent(leash, info.getRootLeash());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="248"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, info.getChanges().size() - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="249"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mFinishTransaction.reparent(leash, parentChange.getLeash());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="251"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, info.getChanges().size() + 1);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="281"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 0.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="294"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="316"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mFinishTransaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java"
+ line="334"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.os.VibrationEffect#createPredefined`"
+ errorLine1=" vibrator.vibrate(VibrationEffect.createPredefined(effectId))"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/magnetictarget/MagnetizedObject.kt"
+ line="465"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Method reference requires API level 29 (current min is 26): `SurfaceControl.Transaction::new`"
+ errorLine1=" mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedAnimationController.java"
+ line="141"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedAnimationController.java"
+ line="286"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedAnimationController.java"
+ line="295"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Method reference requires API level 29 (current min is 26): `SurfaceControl.Transaction::new`"
+ errorLine1=" mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="101"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" .setParent(mParentLeash)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="152"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setBufferSize`"
+ errorLine1=" .setBufferSize(mBkgBounds.width(), mBkgBounds.height())"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="153"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setFormat`"
+ errorLine1=" .setFormat(PixelFormat.RGB_888)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="155"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setOpaque`"
+ errorLine1=" .setOpaque(true)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="156"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName("one-handed-background-panel")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="157"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" .build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="159"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" transaction.setLayer(mBackgroundSurface, -1 /* at bottom-most layer */)"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="179"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" .apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="182"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.remove(mBackgroundSurface).apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java"
+ line="197"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.accessibility.AccessibilityManager#getRecommendedTimeoutMillis`"
+ errorLine1=" .getRecommendedTimeoutMillis(mOneHandedTimeout * 1000"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java"
+ line="150"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.os.RemoteException#rethrowFromSystemServer`"
+ errorLine1=" throw e.rethrowFromSystemServer();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java"
+ line="574"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Method reference requires API level 29 (current min is 26): `SurfaceControl.Transaction::new`"
+ errorLine1=" mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java"
+ line="130"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java"
+ line="241"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" tx.setAlpha(leash, alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSurfaceTransactionHelper.java"
+ line="57"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager#getCurrentWindowMetrics`"
+ errorLine1=" mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java"
+ line="101"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowMetrics#getBounds`"
+ errorLine1=" mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java"
+ line="101"
+ column="64"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsTypes`"
+ errorLine1=" lp.setFitInsetsTypes(0 /* types */);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java"
+ line="200"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Method reference requires API level 29 (current min is 26): `SurfaceControl.Transaction::new`"
+ errorLine1=" mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java"
+ line="244"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java"
+ line="399"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java"
+ line="413"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java"
+ line="499"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java"
+ line="518"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java"
+ line="532"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" mDefaultAspectRatio = res.getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java"
+ line="77"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" mMinAspectRatio = res.getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java"
+ line="93"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" mMaxAspectRatio = res.getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java"
+ line="95"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" mDefaultSizePercent = res.getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java"
+ line="97"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" mMaxAspectRatioForMinSize = res.getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java"
+ line="99"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mPipBoundsState.setDisplayLayout(new DisplayLayout(mContext, mContext.getDisplay()));"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java"
+ line="337"
+ column="79"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" onDisplayChanged(new DisplayLayout(mContext, mContext.getDisplay()),"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java"
+ line="428"
+ column="63"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 28 (current min is 26): `android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode`"
+ errorLine1=" lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java"
+ line="247"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsTypes`"
+ errorLine1=" lp.setFitInsetsTypes(0 /* types */);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java"
+ line="248"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.accessibility.AccessibilityManager#getRecommendedTimeoutMillis`"
+ errorLine1=" int recommendedTimeout = mAccessibilityManager.getRecommendedTimeoutMillis(delay,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java"
+ line="506"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mContext.getDisplay().getRealSize(mMaxSize);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="142"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" mDownPoint.set(ev.getRawX(mFirstIndex), ev.getRawY(mFirstIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="388"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" mDownPoint.set(ev.getRawX(mFirstIndex), ev.getRawY(mFirstIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="388"
+ column="60"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" mDownSecondPoint.set(ev.getRawX(mSecondIndex), ev.getRawY(mSecondIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="389"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" mDownSecondPoint.set(ev.getRawX(mSecondIndex), ev.getRawY(mSecondIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="389"
+ column="67"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" float x0 = ev.getRawX(mFirstIndex);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="403"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" float y0 = ev.getRawY(mFirstIndex);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="404"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" float x1 = ev.getRawX(mSecondIndex);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="405"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" float y1 = ev.getRawY(mSecondIndex);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java"
+ line="406"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" tx.setAlpha(leash, alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java"
+ line="66"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 31 (current min is 26): `android.graphics.Matrix#IDENTITY_MATRIX`"
+ errorLine1=" tx.setMatrix(leash, Matrix.IDENTITY_MATRIX, mTmpFloat9)"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java"
+ line="166"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" t.reparent(snapshot, parent);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java"
+ line="188"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(snapshot, Integer.MAX_VALUE);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java"
+ line="189"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java"
+ line="191"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Method reference requires API level 29 (current min is 26): `SurfaceControl.Transaction::new`"
+ errorLine1=" mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="238"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" .getAnimator(mTaskInfo, mLeash, mPipBoundsState.getBounds(), 1f, 0f)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="397"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" mPipUiEventLoggerLogger.setTaskInfo(mTaskInfo);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="431"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" tx.setAlpha(mLeash, 0f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="462"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="464"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" tx.setAlpha(mLeash, 0f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="502"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="503"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" .getAnimator(mTaskInfo, mLeash, destinationBounds, 0f, 1f)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="506"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="820"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="858"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" transaction.setAlpha(snapshotSurface, alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="991"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="992"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="1000"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" .getAnimator(mTaskInfo, mLeash, baseBounds, currentBounds, destinationBounds,"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java"
+ line="1082"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mContext.getDisplay().getRealSize(displaySize);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java"
+ line="380"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" int displayRotation = mContext.getDisplay().getRotation();"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java"
+ line="674"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" float x = ev.getRawX(pointerIndex);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchState.java"
+ line="138"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" float y = ev.getRawY(pointerIndex);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchState.java"
+ line="139"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" mLastTouch.set(ev.getRawX(newPointerIndex), ev.getRawY(newPointerIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchState.java"
+ line="174"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" mLastTouch.set(ev.getRawX(newPointerIndex), ev.getRawY(newPointerIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchState.java"
+ line="174"
+ column="68"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawX`"
+ errorLine1=" mLastTouch.set(ev.getRawX(pointerIndex), ev.getRawY(pointerIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchState.java"
+ line="197"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.MotionEvent#getRawY`"
+ errorLine1=" mLastTouch.set(ev.getRawX(pointerIndex), ev.getRawY(pointerIndex));"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchState.java"
+ line="197"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" return startEnterAnimation(change.getTaskInfo(), change.getLeash(), t);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java"
+ line="79"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#topActivity`"
+ errorLine1=" setBoundsStateForEntry(taskInfo.topActivity, taskInfo.pictureInPictureParams,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java"
+ line="105"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 0f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java"
+ line="118"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java"
+ line="119"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#topActivity`"
+ errorLine1=" if (taskInfo != null && taskInfo.topActivity != null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipUiEventLogger.java"
+ line="44"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#topActivity`"
+ errorLine1=" mPackageName = taskInfo.topActivity.getPackageName();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipUiEventLogger.java"
+ line="45"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(sc);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/RootTaskDisplayAreaOrganizer.java"
+ line="97"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#baseIntent`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = info.getTaskInfo().taskId; String protoLogParam1 = String.valueOf(info.getTaskInfo().baseIntent); com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -1683614271, 1, null, protoLogParam0, protoLogParam1); "
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="168"
+ column="187"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = info.getTaskInfo().taskId; String protoLogParam1 = String.valueOf(info.getTaskInfo().baseIntent); com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -1683614271, 1, null, protoLogParam0, protoLogParam1); "
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="168"
+ column="121"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = info.getTaskInfo().taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="333"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" notifyLocusVisibilityIfNeeded(info.getTaskInfo());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="341"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, 157713005, 1, null, protoLogParam0); }"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="348"
+ column="117"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final TaskAppearedInfo data = mTasks.get(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="349"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mTasks.put(taskInfo.taskId, new TaskAppearedInfo(taskInfo, data.getLeash()));"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="352"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" notifyLocusVisibilityIfNeeded(taskInfo);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="358"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" if (updated || !taskInfo.equalsForSizeCompat(data.getTaskInfo())) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="359"
+ column="58"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, 980952660, 1, null, protoLogParam0); }"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="369"
+ column="117"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TASK_ORG_enabled) { long protoLogParam0 = taskInfo.taskId; com.android.wm.shell.protolog.ShellProtoLogImpl.v(WM_SHELL_TASK_ORG, -880817403, 1, null, protoLogParam0); }"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="380"
+ column="117"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="381"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `RunningTaskInfo` to `TaskInfo` requires API level 29 (current min is 26)"
+ errorLine1=" notifyLocusVisibilityIfNeeded(taskInfo);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="387"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="417"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#taskId`"
+ errorLine1=" mVisibleTasksWithLocusId.remove(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="437"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mSizeCompatUI.onSizeCompatInfoChanged(taskInfo.displayId, taskInfo.taskId,"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="466"
+ column="71"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mSizeCompatUI.onSizeCompatInfoChanged(taskInfo.displayId, taskInfo.taskId,"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="472"
+ column="67"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = runningTaskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java"
+ line="483"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.SparseArray#contains`"
+ errorLine1=" } else if (mActiveLayouts.contains(taskId)) {"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIController.java"
+ line="96"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, Integer.MAX_VALUE);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUILayout.java"
+ line="314"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName("SizeCompatUILeash")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="63"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" mLeash = builder.build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="67"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mLeash);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="68"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mViewHost = new SurfaceControlViewHost(mContext, mContext.getDisplay(), this);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="78"
+ column="67"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mViewHost = new SurfaceControlViewHost(mContext, mContext.getDisplay(), this);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="94"
+ column="67"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.SurfaceControlViewHost#release`"
+ errorLine1=" mViewHost.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="108"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" new SurfaceControl.Transaction().remove(mLeash).apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="113"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" new SurfaceControl.Transaction().remove(mLeash).apply();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUIWindowManager.java"
+ line="113"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.window.SplashScreenView#getIconView`"
+ errorLine1=" final View iconView = mSplashScreenView.getIconView();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java"
+ line="158"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.graphics.Paint#setBlendMode`"
+ errorLine1=" mVanishPaint.setBlendMode(BlendMode.MODULATE);"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java"
+ line="247"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.graphics.BlendMode#MODULATE`"
+ errorLine1=" mVanishPaint.setBlendMode(BlendMode.MODULATE);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java"
+ line="247"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java"
+ line="284"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" tx.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java"
+ line="303"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#release`"
+ errorLine1=" mFirstWindowSurface.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java"
+ line="304"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager#getMaximumWindowMetrics`"
+ errorLine1=" .getMaximumWindowMetrics()"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java"
+ line="256"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowMetrics#getWindowInsets`"
+ errorLine1=" .getWindowInsets()"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java"
+ line="257"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets#getInsets`"
+ errorLine1=" .getInsets(WindowInsets.Type.navigationBars()"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java"
+ line="258"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#navigationBars`"
+ errorLine1=" .getInsets(WindowInsets.Type.navigationBars()"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java"
+ line="258"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#statusBars`"
+ errorLine1=" | WindowInsets.Type.statusBars()"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java"
+ line="259"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#displayCutout`"
+ errorLine1=" | WindowInsets.Type.displayCutout()).toRect();"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java"
+ line="260"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(parentChange.getLeash(), 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="116"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" t.reparent(leash, info.getRootLeash());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="119"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, info.getChanges().size() - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="120"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mFinishTransaction.reparent(leash, parentChange.getLeash());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="122"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 0.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="158"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="164"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mFinishTransaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="198"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" transaction.setAlpha(leash, start * (1.f - fraction) + end * fraction);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="222"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="223"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" transaction.setAlpha(leash, end);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="226"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="227"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="270"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" transaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java"
+ line="275"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName(TAG)"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="101"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" mLeash = builder.build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="105"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mLeash);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="106"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mViewHost = new SurfaceControlViewHost(mContext, mContext.getDisplay(), this);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="116"
+ column="67"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.SurfaceControlViewHost#release`"
+ errorLine1=" mViewHost.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="145"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" new SurfaceControl.Transaction().remove(mLeash).apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="150"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" new SurfaceControl.Transaction().remove(mLeash).apply();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java"
+ line="150"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `com.google.android.collect.Sets#newHashSet`"
+ errorLine1=" return Sets.newHashSet("
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/StackAnimationController.java"
+ line="692"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" .setLayer(dividerLeash, Integer.MAX_VALUE)"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="399"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" .setLayer(dividerLeash, Integer.MAX_VALUE)"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="515"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" && taskInfo.parentTaskId == mMainStage.mRootTaskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="570"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" && taskInfo.parentTaskId == mSideStage.mRootTaskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="573"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (com.android.wm.shell.protolog.ShellProtoLogCache.WM_SHELL_TRANSITIONS_enabled) { long protoLogParam0 = triggerTask.taskId; String protoLogParam1 = String.valueOf(transitTypeToString(type)); long protoLogParam2 = mMainStage.getChildCount(); long protoLogParam3 = mSideStage.getChildCount(); com.android.wm.shell.protolog.ShellProtoLogImpl.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, 165317020, 81, " split is active so using split" + "Transition to handle request. triggerTask=%d type=%s mainChildren=%d" + " sideChildren=%d", protoLogParam0, protoLogParam1, protoLogParam2, protoLogParam3); "
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="597"
+ column="120"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (!stage.containsTask(taskInfo.taskId)) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="655"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" + " with " + taskInfo.taskId + " before startAnimation().");"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="657"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (stage.containsTask(taskInfo.taskId)) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="660"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" + " with " + taskInfo.taskId + " before startAnimation().");"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="662"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (!mMainStage.containsTask(mainChild.getTaskInfo().taskId)) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="732"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" + " to have been called with " + mainChild.getTaskInfo().taskId"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="734"
+ column="58"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (!mSideStage.containsTask(sideChild.getTaskInfo().taskId)) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="737"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" + " to have been called with " + sideChild.getTaskInfo().taskId"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="739"
+ column="58"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="820"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, Integer.MAX_VALUE);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java"
+ line="821"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.SparseArray#contains`"
+ errorLine1=" return mChildrenTaskInfo.contains(taskId);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="85"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="96"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="97"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mRootTaskInfo.taskId == taskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="116"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mRootTaskInfo.taskId == taskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="116"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="118"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="119"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */,"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="120"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="124"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="140"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mRootTaskInfo.taskId == taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="141"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.SparseArray#contains`"
+ errorLine1=" } else if (mChildrenTaskInfo.contains(taskId)) {"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="144"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mRootTaskInfo.taskId == taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="161"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mRootLeash);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="162"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.SparseArray#contains`"
+ errorLine1=" } else if (mChildrenLeashes.contains(taskId)) {"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="163"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mChildrenLeashes.get(taskId));"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="164"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java"
+ line="194"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java"
+ line="131"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" + Integer.toHexString(theme) + " task= " + taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java"
+ line="141"
+ column="64"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `SplashScreenView` to `View` requires API level 31 (current min is 26)"
+ errorLine1=" win.setContentView(sView);"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java"
+ line="280"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `SplashScreenView` to `View` requires API level 31 (current min is 26)"
+ errorLine1=" win.setContentView(sView);"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java"
+ line="284"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = startingWindowInfo.taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java"
+ line="309"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final TaskSnapshot snapshot = getTaskSnapshot(windowInfo.taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java"
+ line="162"
+ column="63"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" Slog.d(TAG, "isSnapshotCompatible no snapshot " + windowInfo.taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java"
+ line="180"
+ column="71"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" mTaskLaunchingCallback.accept(runningTaskInfo.taskId, suggestionType);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java"
+ line="238"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" mInFlight.onTransactionReady(mInFlight.mId, new SurfaceControl.Transaction());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java"
+ line="55"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java"
+ line="114"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java"
+ line="125"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.SurfaceControlViewHost#release`"
+ errorLine1=" root.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="121"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName("SystemWindowLeash")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="278"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" .setParent(mRootSurface)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="280"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" .setCallsite("SysUiWIndowManager#attachToParentSurface").build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="281"
+ column="76"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(leash);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="285"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" new SurfaceControl.Transaction().remove(mLeashForWindow.get(token))"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="293"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" .apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java"
+ line="294"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = runningTaskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="151"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 28 (current min is 26): `android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode`"
+ errorLine1=" layoutParams.layoutInDisplayCutoutMode = attrs.layoutInDisplayCutoutMode;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="186"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 28 (current min is 26): `android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode`"
+ errorLine1=" layoutParams.layoutInDisplayCutoutMode = attrs.layoutInDisplayCutoutMode;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="186"
+ column="50"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#getFitInsetsTypes`"
+ errorLine1=" layoutParams.setFitInsetsTypes(attrs.getFitInsetsTypes());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="187"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsTypes`"
+ errorLine1=" layoutParams.setFitInsetsTypes(attrs.getFitInsetsTypes());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="187"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#getFitInsetsSides`"
+ errorLine1=" layoutParams.setFitInsetsSides(attrs.getFitInsetsSides());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="188"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsSides`"
+ errorLine1=" layoutParams.setFitInsetsSides(attrs.getFitInsetsSides());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="188"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#isFitInsetsIgnoringVisibility`"
+ errorLine1=" layoutParams.setFitInsetsIgnoringVisibility(attrs.isFitInsetsIgnoringVisibility());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="189"
+ column="59"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowManager.LayoutParams#setFitInsetsIgnoringVisibility`"
+ errorLine1=" layoutParams.setFitInsetsIgnoringVisibility(attrs.isFitInsetsIgnoringVisibility());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="189"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskDescription`"
+ errorLine1=" if (runningTaskInfo.taskDescription != null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="208"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskDescription`"
+ errorLine1=" taskDescription = runningTaskInfo.taskDescription;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="209"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" mTransaction = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="271"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.WindowInsets.Type#systemBars`"
+ errorLine1=" return state.calculateInsets(frame, WindowInsets.Type.systemBars(),"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="328"
+ column="63"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName(mTitle + " - task-snapshot-surface")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="374"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setBufferSize`"
+ errorLine1=" .setBufferSize(buffer.getWidth(), buffer.getHeight())"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="375"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setFormat`"
+ errorLine1=" .setFormat(buffer.getFormat())"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="376"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" .setParent(mSurfaceControl)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="377"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" .build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="379"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mTransaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="406"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.graphics.Rect#inset`"
+ errorLine1=" rect.inset((int) (insets.left * scaleX),"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java"
+ line="435"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" onTaskMovedToFront(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/TaskStackListenerCallback.java"
+ line="52"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `new android.util.CloseGuard`"
+ errorLine1=" private final CloseGuard mGuard = new CloseGuard();"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="73"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="81"
+ column="61"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.CloseGuard#open`"
+ errorLine1=" mGuard.open("release");"
+ errorLine2=" ~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="99"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.CloseGuard#warnIfOpen`"
+ errorLine1=" mGuard.warnIfOpen();"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="204"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.util.CloseGuard#close`"
+ errorLine1=" mGuard.close();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="218"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = mTaskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="239"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, getSurfaceControl())"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="255"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceView#getSurfaceControl`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, getSurfaceControl())"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="255"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" .apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="257"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskDescription`"
+ errorLine1=" if (taskInfo.taskDescription != null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="266"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskDescription`"
+ errorLine1=" setResizeBackgroundColor(taskInfo.taskDescription.getBackgroundColor());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="267"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="271"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="284"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, null).apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="292"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, null).apply();"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="292"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskDescription`"
+ errorLine1=" if (taskInfo.taskDescription != null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="298"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskDescription`"
+ errorLine1=" setResizeBackgroundColor(taskInfo.taskDescription.getBackgroundColor());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="299"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" final int taskId = taskInfo.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="307"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" if (mTaskInfo.taskId != taskId) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="316"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" b.setParent(mTaskLeash);"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="319"
+ column="11"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" return "TaskView" + ":" + (mTaskInfo != null ? mTaskInfo.taskId : "null");"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="331"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, getSurfaceControl())"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="349"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceView#getSurfaceControl`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, getSurfaceControl())"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="349"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" .apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="351"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, null).apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="374"
+ column="53"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" mTransaction.reparent(mTaskLeash, null).apply();"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java"
+ line="374"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" return new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/TransactionPool.java"
+ line="36"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" context.getResources().getFloat("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="117"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#isValid`"
+ errorLine1=" if (info.getRootLeash().isValid()) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="231"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="247"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" t.reparent(leash, info.getRootLeash());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="256"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, zSplitLine + info.getChanges().size() - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="266"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="270"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 0.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="272"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, zSplitLine - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="276"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(leash, 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="277"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, zSplitLine - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="282"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, zSplitLine + info.getChanges().size() - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="285"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, zSplitLine + info.getChanges().size() - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="288"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#isValid`"
+ errorLine1=" if (!info.getRootLeash().isValid()) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="304"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java"
+ line="309"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.graphics.Outline#setPath`"
+ errorLine1=" outline.setPath(mTriangularPath);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/common/TriangleShape.java"
+ line="75"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mPipBoundsState.setDisplayLayout(new DisplayLayout(context, context.getDisplay()));"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java"
+ line="147"
+ column="77"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#taskId`"
+ errorLine1=" mPinnedTaskId = pinnedTask.taskId;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java"
+ line="283"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#topActivity`"
+ errorLine1=" mPipNotificationController.show(pinnedTask.topActivity.getPackageName());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java"
+ line="287"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.content.Context#getDisplay`"
+ errorLine1=" mContext.getDisplay().getDisplayInfo(displayInfo);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java"
+ line="348"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" SurfaceControl.Transaction t = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java"
+ line="134"
+ column="48"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java"
+ line="136"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#isValid`"
+ errorLine1=" if (out != null && out.isValid()) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java"
+ line="188"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" final SurfaceControl.Transaction sft = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/.intermediates/frameworks/base/libs/WindowManager/Shell/wm_shell_protolog_src/gen/wm_shell_protolog.srcjar!/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/WindowManagerProxy.java"
+ line="326"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 26)"
+ errorLine1=" android:bottomLeftRadius="?android:attr/dialogCornerRadius""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/libs/WindowManager/Shell/res/drawable/rounded_bg_full.xml"
+ line="21"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 26)"
+ errorLine1=" android:topLeftRadius="?android:attr/dialogCornerRadius""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/libs/WindowManager/Shell/res/drawable/rounded_bg_full.xml"
+ line="22"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 26)"
+ errorLine1=" android:bottomRightRadius="?android:attr/dialogCornerRadius""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/libs/WindowManager/Shell/res/drawable/rounded_bg_full.xml"
+ line="23"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 26)"
+ errorLine1=" android:topRightRadius="?android:attr/dialogCornerRadius""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/libs/WindowManager/Shell/res/drawable/rounded_bg_full.xml"
+ line="24"
+ column="9"/>
+ </issue>
+
+</issues>
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 4968bd1..cc05ecd 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -4742,6 +4742,25 @@
return mType;
}
+ @Override
+ public boolean equals(Object o) {
+ if (o == null) {
+ return false;
+ }
+ if (!(o instanceof ParameterDescriptor)) {
+ return false;
+ }
+ ParameterDescriptor other = (ParameterDescriptor) o;
+ return this.mName.equals(other.mName) && this.mType == other.mType;
+ }
+
+ @Override
+ public int hashCode() {
+ return Arrays.asList(
+ (Object) mName,
+ (Object) Integer.valueOf(mType)).hashCode();
+ }
+
private String mName;
private @MediaFormat.Type int mType;
}
@@ -4766,7 +4785,8 @@
private native ParameterDescriptor native_getParameterDescriptor(@NonNull String name);
/**
- * Subscribe to vendor parameters, so that changes to these parameters generate
+ * Subscribe to vendor parameters, so that these parameters will be present in
+ * {@link #getOutputFormat} and changes to these parameters generate
* output format change event.
* <p>
* Unrecognized parameter names or standard (non-vendor) parameter names will be ignored.
@@ -4795,8 +4815,9 @@
private native void native_subscribeToVendorParameters(@NonNull List<String> names);
/**
- * Unsubscribe from vendor parameters, so that changes to these parameters
- * no longer generate output format change event.
+ * Unsubscribe from vendor parameters, so that these parameters will not be present in
+ * {@link #getOutputFormat} and changes to these parameters no longer generate
+ * output format change event.
* <p>
* Unrecognized parameter names, standard (non-vendor) parameter names will be ignored.
* {@link #reset} also resets the list of subscribed parameters.
@@ -4804,7 +4825,8 @@
* <p>
* This method can be called in any codec state except for released state. When called in
* running state with newly unsubscribed parameters, it takes effect no later than the
- * processing of the subsequently queued buffer.
+ * processing of the subsequently queued buffer. For the removed parameters, the codec will
+ * generate output format change event.
* <p>
* Note that any vendor parameters set in a {@link #configure} or
* {@link #setParameters} call are automatically subscribed, and with this method
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index cb1c126..0aae940 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -1737,6 +1737,8 @@
fId = static_cast<uint64_t>(id);
}
+ filterClient->getAvSharedHandleInfo();
+
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject filterObj =
env->NewObject(
diff --git a/media/jni/tuner/FilterClient.cpp b/media/jni/tuner/FilterClient.cpp
index 8846e4d6..2995572 100644
--- a/media/jni/tuner/FilterClient.cpp
+++ b/media/jni/tuner/FilterClient.cpp
@@ -62,6 +62,9 @@
mFilter_1_1 = NULL;
mAvSharedHandle = NULL;
mAvSharedMemSize = 0;
+ mIsMediaFilter = false;
+ mFilterMQ = NULL;
+ mFilterMQEventFlag = NULL;
}
// TODO: remove after migration to Tuner Service is done.
@@ -81,7 +84,7 @@
SharedHandleInfo FilterClient::getAvSharedHandleInfo() {
handleAvShareMemory();
SharedHandleInfo info{
- .sharedHandle = mAvSharedHandle,
+ .sharedHandle = mIsMediaFilter ? mAvSharedHandle : NULL,
.size = mAvSharedMemSize,
};
@@ -259,9 +262,10 @@
}
Result FilterClient::close() {
- if (mFilterMQEventFlag != NULL) {
+ if (mFilterMQEventFlag) {
EventFlag::deleteEventFlag(&mFilterMQEventFlag);
}
+ mFilterMQEventFlag = NULL;
mFilterMQ = NULL;
if (mTunerFilter != NULL) {
@@ -943,7 +947,7 @@
}
int FilterClient::copyData(int8_t* buffer, int size) {
- if (mFilter == NULL || mFilterMQ == NULL || mFilterMQEventFlag == NULL) {
+ if (mFilterMQ == NULL || mFilterMQEventFlag == NULL) {
return -1;
}
@@ -964,6 +968,7 @@
if (type.subType.mmtpFilterType() == DemuxMmtpFilterType::AUDIO ||
type.subType.mmtpFilterType() == DemuxMmtpFilterType::VIDEO) {
mIsMediaFilter = true;
+ return;
}
}
@@ -971,15 +976,17 @@
if (type.subType.tsFilterType() == DemuxTsFilterType::AUDIO ||
type.subType.tsFilterType() == DemuxTsFilterType::VIDEO) {
mIsMediaFilter = true;
+ return;
}
}
+
+ mIsMediaFilter = false;
}
void FilterClient::handleAvShareMemory() {
if (mAvSharedHandle != NULL) {
return;
}
-
if (mTunerFilter != NULL && mIsMediaFilter) {
TunerFilterSharedHandleInfo aidlHandleInfo;
Status s = mTunerFilter->getAvSharedHandleInfo(&aidlHandleInfo);
@@ -1001,8 +1008,13 @@
}
void FilterClient::closeAvSharedMemory() {
+ if (mAvSharedHandle == NULL) {
+ mAvSharedMemSize = 0;
+ return;
+ }
native_handle_close(mAvSharedHandle);
native_handle_delete(mAvSharedHandle);
mAvSharedMemSize = 0;
+ mAvSharedHandle = NULL;
}
} // namespace android
diff --git a/media/jni/tuner/FilterClient.h b/media/jni/tuner/FilterClient.h
index 736b8f9..d032749 100644
--- a/media/jni/tuner/FilterClient.h
+++ b/media/jni/tuner/FilterClient.h
@@ -264,8 +264,8 @@
*/
sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1;
- AidlMQ* mFilterMQ;
- EventFlag* mFilterMQEventFlag;
+ AidlMQ* mFilterMQ = NULL;
+ EventFlag* mFilterMQEventFlag = NULL;
native_handle_t* mAvSharedHandle;
uint64_t mAvSharedMemSize;
diff --git a/packages/Android.bp b/packages/Android.bp
new file mode 100644
index 0000000..8b0698b
--- /dev/null
+++ b/packages/Android.bp
@@ -0,0 +1,28 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Defaults for platform apps
+java_defaults {
+ name: "platform_app_defaults",
+ plugins: ["error_prone_android_framework"],
+ errorprone: {
+ javacflags: [
+ // We're less worried about performance in app code
+ "-Xep:AndroidFrameworkEfficientCollections:OFF",
+ "-Xep:AndroidFrameworkEfficientParcelable:OFF",
+ "-Xep:AndroidFrameworkEfficientStrings:OFF",
+ "-Xep:AndroidFrameworkEfficientXml:OFF",
+ ],
+ },
+}
diff --git a/packages/Connectivity/framework/Android.bp b/packages/Connectivity/framework/Android.bp
index 5f5ebf4..c62402d 100644
--- a/packages/Connectivity/framework/Android.bp
+++ b/packages/Connectivity/framework/Android.bp
@@ -105,6 +105,7 @@
"//frameworks/libs/net/common/testutils",
"//frameworks/libs/net/common/tests:__subpackages__",
"//frameworks/opt/telephony/tests/telephonytests",
+ "//packages/modules/CaptivePortalLogin/tests",
"//packages/modules/Connectivity/Tethering/tests:__subpackages__",
"//packages/modules/Connectivity/tests:__subpackages__",
"//packages/modules/NetworkStack/tests:__subpackages__",
diff --git a/packages/Connectivity/framework/lint-baseline.xml b/packages/Connectivity/framework/lint-baseline.xml
new file mode 100644
index 0000000..df37ae8
--- /dev/null
+++ b/packages/Connectivity/framework/lint-baseline.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `new android.net.ParseException`"
+ errorLine1=" ParseException pe = new ParseException(e.reason, e.getCause());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/Connectivity/framework/src/android/net/DnsResolver.java"
+ line="301"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 30): `android.telephony.TelephonyCallback`"
+ errorLine1=" protected class ActiveDataSubscriptionIdListener extends TelephonyCallback"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/Connectivity/framework/src/android/net/util/MultinetworkPolicyTracker.java"
+ line="96"
+ column="62"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 30): `android.telephony.TelephonyCallback.ActiveDataSubscriptionIdListener`"
+ errorLine1=" implements TelephonyCallback.ActiveDataSubscriptionIdListener {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/Connectivity/framework/src/android/net/util/MultinetworkPolicyTracker.java"
+ line="97"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `android.telephony.TelephonyManager#registerTelephonyCallback`"
+ errorLine1=" ctx.getSystemService(TelephonyManager.class).registerTelephonyCallback("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/Connectivity/framework/src/android/net/util/MultinetworkPolicyTracker.java"
+ line="126"
+ column="54"/>
+ </issue>
+
+</issues>
diff --git a/packages/Connectivity/framework/src/android/net/UidRange.java b/packages/Connectivity/framework/src/android/net/UidRange.java
index bc67c74..bd33292 100644
--- a/packages/Connectivity/framework/src/android/net/UidRange.java
+++ b/packages/Connectivity/framework/src/android/net/UidRange.java
@@ -46,8 +46,8 @@
/** Creates a UidRange for the specified user. */
public static UidRange createForUser(UserHandle user) {
final UserHandle nextUser = UserHandle.of(user.getIdentifier() + 1);
- final int start = UserHandle.getUid(user, 0 /* appId */);
- final int end = UserHandle.getUid(nextUser, 0) - 1;
+ final int start = user.getUid(0 /* appId */);
+ final int end = nextUser.getUid(0 /* appId */) - 1;
return new UidRange(start, end);
}
diff --git a/packages/Connectivity/service/lint-baseline.xml b/packages/Connectivity/service/lint-baseline.xml
new file mode 100644
index 0000000..35ea2d3
--- /dev/null
+++ b/packages/Connectivity/service/lint-baseline.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `android.telephony.TelephonyManager#isDataCapable`"
+ errorLine1=" if (tm.isDataCapable()) {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/services/core/java/com/android/server/ConnectivityService.java"
+ line="781"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `android.content.Context#sendStickyBroadcast`"
+ errorLine1=" mUserAllContext.sendStickyBroadcast(intent, options);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/services/core/java/com/android/server/ConnectivityService.java"
+ line="2633"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `android.content.pm.PackageManager#getTargetSdkVersion`"
+ errorLine1=" final int callingVersion = pm.getTargetSdkVersion(callingPackageName);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/services/core/java/com/android/server/ConnectivityService.java"
+ line="5784"
+ column="43"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/ActionBarShadow/lint-baseline.xml b/packages/SettingsLib/ActionBarShadow/lint-baseline.xml
new file mode 100644
index 0000000..4d5de5f
--- /dev/null
+++ b/packages/SettingsLib/ActionBarShadow/lint-baseline.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.view.View#setOnScrollChangeListener`"
+ errorLine1=" mScrollView.setOnScrollChangeListener(mScrollChangeWatcher);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/ActionBarShadow/src/com/android/settingslib/widget/ActionBarShadowController.java"
+ line="81"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.view.View#setOnScrollChangeListener`"
+ errorLine1=" mScrollView.setOnScrollChangeListener(null);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/ActionBarShadow/src/com/android/settingslib/widget/ActionBarShadowController.java"
+ line="88"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 23 (current min is 21): `android.view.View.OnScrollChangeListener`"
+ errorLine1=" final class ScrollChangeWatcher implements View.OnScrollChangeListener {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/ActionBarShadow/src/com/android/settingslib/widget/ActionBarShadowController.java"
+ line="95"
+ column="48"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/ActionButtonsPreference/lint-baseline.xml b/packages/SettingsLib/ActionButtonsPreference/lint-baseline.xml
new file mode 100644
index 0000000..a19f7af
--- /dev/null
+++ b/packages/SettingsLib/ActionButtonsPreference/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="`android:Widget.DeviceDefault.Button.Borderless.Colored` requires API level 28 (current min is 21)"
+ errorLine1=" <style name="SettingsActionButton" parent="android:Widget.DeviceDefault.Button.Borderless.Colored">"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml"
+ line="19"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`android:drawableTint` requires API level 23 (current min is 21)"
+ errorLine1=" <item name="android:drawableTint">@*android:color/btn_colored_borderless_text_material</item>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml"
+ line="21"
+ column="15"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/AdaptiveIcon/lint-baseline.xml b/packages/SettingsLib/AdaptiveIcon/lint-baseline.xml
new file mode 100644
index 0000000..7f16517
--- /dev/null
+++ b/packages/SettingsLib/AdaptiveIcon/lint-baseline.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.res.Resources#getColor`"
+ errorLine1=" .getColor(colorRes, null /* theme */);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveIcon.java"
+ line="78"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.Context#getColor`"
+ errorLine1=" setBackgroundColor(context.getColor(R.color.homepage_generic_icon_background));"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveIcon.java"
+ line="90"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 23 (current min is 21): `android.graphics.drawable.DrawableWrapper`"
+ errorLine1="public class AdaptiveOutlineDrawable extends DrawableWrapper {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java"
+ line="43"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `new android.graphics.drawable.DrawableWrapper`"
+ errorLine1=" super(new AdaptiveIconShapeDrawable(resources));"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java"
+ line="65"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `new android.graphics.drawable.DrawableWrapper`"
+ errorLine1=" super(new AdaptiveIconShapeDrawable(resources));"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java"
+ line="72"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.graphics.drawable.DrawableWrapper#getDrawable`"
+ errorLine1=" getDrawable().setTint(Color.WHITE);"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java"
+ line="80"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.res.Resources#getColor`"
+ errorLine1=" return resources.getColor(resId, /* theme */ null);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java"
+ line="105"
+ column="26"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/BannerMessagePreference/lint-baseline.xml b/packages/SettingsLib/BannerMessagePreference/lint-baseline.xml
new file mode 100644
index 0000000..ba02a1f
--- /dev/null
+++ b/packages/SettingsLib/BannerMessagePreference/lint-baseline.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="`@android:style/Widget.DeviceDefault.Button.Borderless.Colored` requires API level 28 (current min is 21)"
+ errorLine1=" style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/BannerMessagePreference/res/layout/banner_message.xml"
+ line="65"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`@android:style/Widget.DeviceDefault.Button.Borderless.Colored` requires API level 28 (current min is 21)"
+ errorLine1=" style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/BannerMessagePreference/res/layout/banner_message.xml"
+ line="71"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`?android:attr/colorError` requires API level 26 (current min is 21)"
+ errorLine1=" android:fillColor="?android:attr/colorError""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/BannerMessagePreference/res/drawable/ic_warning.xml"
+ line="24"
+ column="9"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/BarChartPreference/lint-baseline.xml b/packages/SettingsLib/BarChartPreference/lint-baseline.xml
new file mode 100644
index 0000000..f1043bb
--- /dev/null
+++ b/packages/SettingsLib/BarChartPreference/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="`@android:style/Widget.DeviceDefault.Button.Borderless.Colored` requires API level 28 (current min is 21)"
+ errorLine1=" parent="@android:style/Widget.DeviceDefault.Button.Borderless.Colored">"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/BarChartPreference/res/values/styles.xml"
+ line="35"
+ column="12"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/EmergencyNumber/lint-baseline.xml b/packages/SettingsLib/EmergencyNumber/lint-baseline.xml
new file mode 100644
index 0000000..e9c687f
--- /dev/null
+++ b/packages/SettingsLib/EmergencyNumber/lint-baseline.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+ errorLine1=" mTelephonyManager = context.getSystemService(TelephonyManager.class);"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="77"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+ errorLine1=" mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="78"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 23 (current min is 21): `android.telephony.CarrierConfigManager`"
+ errorLine1=" mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="78"
+ column="62"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 21): `android.telephony.TelephonyManager#getEmergencyNumberList`"
+ errorLine1=" Map<Integer, List<EmergencyNumber>> allLists = mTelephonyManager.getEmergencyNumberList("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="173"
+ column="74"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 21): `android.telephony.emergency.EmergencyNumber#getEmergencyNumberSources`"
+ errorLine1=" emergencyNumber.getEmergencyNumberSources().contains("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="196"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 24 (current min is 21): `android.telephony.SubscriptionManager#getDefaultSubscriptionId`"
+ errorLine1=" return promotedEmergencyNumberLists.get(SubscriptionManager.getDefaultSubscriptionId());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="219"
+ column="69"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 21): `android.telephony.emergency.EmergencyNumber#getNumber`"
+ errorLine1=" String number = emergencyNumber.getNumber();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="234"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.telephony.CarrierConfigManager#getConfigForSubId`"
+ errorLine1=" PersistableBundle b = carrierConfigManager.getConfigForSubId(subId);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java"
+ line="251"
+ column="52"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/HelpUtils/lint-baseline.xml b/packages/SettingsLib/HelpUtils/lint-baseline.xml
new file mode 100644
index 0000000..940f027
--- /dev/null
+++ b/packages/SettingsLib/HelpUtils/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 21): `android.content.pm.PackageInfo#getLongVersionCode`"
+ errorLine1=" sCachedVersionCode = Long.toString(info.getLongVersionCode());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java"
+ line="239"
+ column="57"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/MainSwitchPreference/lint-baseline.xml b/packages/SettingsLib/MainSwitchPreference/lint-baseline.xml
new file mode 100644
index 0000000..0ecf979
--- /dev/null
+++ b/packages/SettingsLib/MainSwitchPreference/lint-baseline.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="`@android:id/switch_widget` requires API level 24 (current min is 21)"
+ errorLine1=" android:id="@android:id/switch_widget""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/MainSwitchPreference/res/layout/main_switch_bar.xml"
+ line="49"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`@android:style/Widget.Material.CompoundButton.Switch` requires API level 24 (current min is 21)"
+ errorLine1=" <style name="Settings.MainSwitch" parent="@android:style/Widget.Material.CompoundButton.Switch">"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml"
+ line="24"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`@android:style/Widget.Material.CompoundButton.Switch` requires API level 24 (current min is 21)"
+ errorLine1=" <style name="Widget.SwitchBar.Switch" parent="@android:style/Widget.Material.CompoundButton.Switch">"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml"
+ line="28"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="`android:trackTint` requires API level 23 (current min is 21)"
+ errorLine1=" <item name="android:trackTint">@color/switchbar_switch_track_tint</item>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml"
+ line="29"
+ column="15"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/ProgressBar/lint-baseline.xml b/packages/SettingsLib/ProgressBar/lint-baseline.xml
new file mode 100644
index 0000000..03d0f3f
--- /dev/null
+++ b/packages/SettingsLib/ProgressBar/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="`?android:attr/colorSecondary` requires API level 25 (current min is 21)"
+ errorLine1=" android:background="?android:attr/colorSecondary" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/ProgressBar/res/layout/progress_header.xml"
+ line="27"
+ column="9"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/RestrictedLockUtils/lint-baseline.xml b/packages/SettingsLib/RestrictedLockUtils/lint-baseline.xml
new file mode 100644
index 0000000..173c735
--- /dev/null
+++ b/packages/SettingsLib/RestrictedLockUtils/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+ errorLine1=" ComponentName adminComponent = userContext.getSystemService("
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java"
+ line="59"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+ errorLine1=" UserManager um = context.getSystemService(UserManager.class);"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java"
+ line="101"
+ column="34"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/SettingsSpinner/lint-baseline.xml b/packages/SettingsLib/SettingsSpinner/lint-baseline.xml
new file mode 100644
index 0000000..ae1ed38e
--- /dev/null
+++ b/packages/SettingsLib/SettingsSpinner/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `new android.widget.Spinner`"
+ errorLine1=" super(context, attrs, defStyleAttr, defStyleRes, mode, null);"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/settingsspinner/SettingsSpinner.java"
+ line="122"
+ column="9"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/Tile/lint-baseline.xml b/packages/SettingsLib/Tile/lint-baseline.xml
new file mode 100644
index 0000000..4df6bd9
--- /dev/null
+++ b/packages/SettingsLib/Tile/lint-baseline.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 24 (current min is 21): `java.lang.Iterable#forEach`"
+ errorLine1=" controllers.forEach(controller -> {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchesProvider.java"
+ line="79"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 21): `android.os.Parcel#readBoolean`"
+ errorLine1=" final boolean isProviderTile = in.readBoolean();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java"
+ line="83"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 21): `android.os.Parcel#writeBoolean`"
+ errorLine1=" dest.writeBoolean(this instanceof ProviderTile);"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java"
+ line="102"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.graphics.drawable.Icon#createWithResource`"
+ errorLine1=" final Icon icon = Icon.createWithResource(componentInfo.packageName, iconResId);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java"
+ line="314"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.graphics.drawable.Icon#setTint`"
+ errorLine1=" icon.setTint(tintColor);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java"
+ line="320"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 21): `android.os.Parcel#readBoolean`"
+ errorLine1=" final boolean isProviderTile = source.readBoolean();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java"
+ line="364"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 21): `android.content.Context#getAttributionSource`"
+ errorLine1=" return provider.call(context.getAttributionSource(),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java"
+ line="558"
+ column="42"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/Utils/lint-baseline.xml b/packages/SettingsLib/Utils/lint-baseline.xml
new file mode 100644
index 0000000..172bde3
--- /dev/null
+++ b/packages/SettingsLib/Utils/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+ errorLine1=" return context.getSystemService(UserManager.class).isManagedProfile(userId)"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/Utils/src/com/android/settingslib/utils/applications/AppUtils.java"
+ line="58"
+ column="24"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsLib/lint-baseline.xml b/packages/SettingsLib/lint-baseline.xml
new file mode 100644
index 0000000..f6d6ca6
--- /dev/null
+++ b/packages/SettingsLib/lint-baseline.xml
@@ -0,0 +1,895 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.telephony.ims.ImsMmTelManager#getRegistrationState`"
+ errorLine1=" imsMmTelManager.getRegistrationState(executors, stateCallback);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractImsStatusPreferenceController.java"
+ line="116"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.hotspot2.PasspointConfiguration#getUniqueId`"
+ errorLine1=" mPasspointUniqueId = config.getUniqueId();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="379"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.hotspot2.PasspointConfiguration#getSubscriptionExpirationTimeMillis`"
+ errorLine1=" mSubscriptionExpirationTimeInMillis = config.getSubscriptionExpirationTimeMillis();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="382"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.hotspot2.PasspointConfiguration#isOsuProvisioned`"
+ errorLine1=" if (config.isOsuProvisioned()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="383"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiConfiguration#getKey`"
+ errorLine1=" mPasspointUniqueId = config.getKey();"
+ errorLine2=" ~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="400"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiManager#calculateSignalLevel`"
+ errorLine1=" int difference = wifiManager.calculateSignalLevel(other.mRssi)"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="481"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiManager#calculateSignalLevel`"
+ errorLine1=" - wifiManager.calculateSignalLevel(mRssi);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="482"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiConfiguration#getKey`"
+ errorLine1=" return getKey(config.getKey());"
+ errorLine2=" ~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="707"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiConfiguration#getKey`"
+ errorLine1=" return (isPasspoint() && config.getKey().equals(mConfig.getKey()));"
+ errorLine2=" ~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="796"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiConfiguration#getKey`"
+ errorLine1=" return (isPasspoint() && config.getKey().equals(mConfig.getKey()));"
+ errorLine2=" ~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="796"
+ column="69"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiManager#calculateSignalLevel`"
+ errorLine1=" return getWifiManager().calculateSignalLevel(mRssi);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="903"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.hotspot2.PasspointConfiguration#getUniqueId`"
+ errorLine1=" String uniqueId = passpointConfig.getUniqueId();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="1988"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiConfiguration#getKey`"
+ errorLine1=" if (TextUtils.equals(config.getKey(), uniqueId)) {"
+ errorLine2=" ~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java"
+ line="1992"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.util.SparseArray#contains`"
+ errorLine1=" return mEntriesMap.contains(userId);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java"
+ line="1503"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.bluetooth.BluetoothDevice#getAlias`"
+ errorLine1=" + mDevice.getAlias() + ", newProfileState " + newProfileState);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java"
+ line="155"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.bluetooth.BluetoothDevice#getAlias`"
+ errorLine1=" final String aliasName = mDevice.getAlias();"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java"
+ line="431"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.bluetooth.BluetoothDevice#setAlias`"
+ errorLine1=" mDevice.setAlias(name);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java"
+ line="442"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.bluetooth.BluetoothDevice#getAlias`"
+ errorLine1=" return !TextUtils.isEmpty(mDevice.getAlias());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java"
+ line="489"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.bluetooth.BluetoothDevice#getAlias`"
+ errorLine1=" Log.d(TAG, "updating profiles for " + mDevice.getAlias());"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java"
+ line="638"
+ column="59"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.bluetooth.BluetoothDevice#getAlias`"
+ errorLine1=" String name = device.getAlias();"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java"
+ line="171"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.net.wifi.WifiManager.SubsystemRestartTrackingCallback`"
+ errorLine1=" new SubsystemRestartTrackingCallback() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java"
+ line="62"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback`"
+ errorLine1=" private class MobileTelephonyCallback extends TelephonyCallback implements"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java"
+ line="77"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.net.wifi.WifiManager#registerSubsystemRestartTrackingCallback`"
+ errorLine1=" mWifiManager.registerSubsystemRestartTrackingCallback(new HandlerExecutor(mHandler),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java"
+ line="197"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.net.wifi.WifiManager#unregisterSubsystemRestartTrackingCallback`"
+ errorLine1=" mWifiManager.unregisterSubsystemRestartTrackingCallback("
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java"
+ line="202"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.telephony.TelephonyManager#registerTelephonyCallback`"
+ errorLine1=" mTelephonyManager.registerTelephonyCallback(new HandlerExecutor(mHandler),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java"
+ line="207"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.telephony.TelephonyManager#unregisterTelephonyCallback`"
+ errorLine1=" mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java"
+ line="212"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.telephony.TelephonyManager#isDataCapable`"
+ errorLine1=" return getTelephonyManager().isDataCapable()"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java"
+ line="236"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.telephony.TelephonyManager#getSubscriptionId`"
+ errorLine1=" final int mobileDefaultSubId = telephonyManager.getSubscriptionId();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java"
+ line="41"
+ column="57"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getName`"
+ errorLine1=" return mRouteInfo.getName().toString();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java"
+ line="51"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getClientPackageName`"
+ errorLine1=" return mRouteInfo.getClientPackageName() != null"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java"
+ line="56"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getFeatures`"
+ errorLine1=" final List<String> features = mRouteInfo.getFeatures();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java"
+ line="93"
+ column="50"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getId`"
+ errorLine1=" if (info != null && info.getSelectableRoutes().contains(device.mRouteInfo.getId())) {"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="131"
+ column="83"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getSelectableRoutes`"
+ errorLine1=" if (info != null && info.getSelectableRoutes().contains(device.mRouteInfo.getId())) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="131"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getId`"
+ errorLine1=" if (info != null && info.getSelectedRoutes().contains(device.mRouteInfo.getId())) {"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="162"
+ column="81"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getSelectedRoutes`"
+ errorLine1=" if (info != null && info.getSelectedRoutes().contains(device.mRouteInfo.getId())) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="162"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getName`"
+ errorLine1=" Log.d(TAG, route.getName() + " is deselectable for " + mPackageName);"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="238"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getVolumeMax`"
+ errorLine1=" return info.getVolumeMax();"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="320"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getVolume`"
+ errorLine1=" return info.getVolume();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="341"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getName`"
+ errorLine1=" return info.getName();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="357"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getName`"
+ errorLine1=" Log.d(TAG, "buildAllRoutes() route : " + route.getName() + ", volume : ""
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="408"
+ column="64"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getVolume`"
+ errorLine1=" + route.getVolume() + ", type : " + route.getType());"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="409"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#isSystemRoute`"
+ errorLine1=" if (route.isSystemRoute()) {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="411"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getName`"
+ errorLine1=" Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : ""
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="424"
+ column="70"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getVolume`"
+ errorLine1=" + route.getVolume() + ", type : " + route.getType());"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="425"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getId`"
+ errorLine1=" && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="444"
+ column="87"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getSelectedRoutes`"
+ errorLine1=" && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="444"
+ column="52"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getName`"
+ errorLine1=" Log.d(TAG, "onTransferred() oldSession : " + oldSession.getName()"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="509"
+ column="73"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getName`"
+ errorLine1=" + ", newSession : " + newSession.getName());"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java"
+ line="510"
+ column="58"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.RoutingSessionInfo#getId`"
+ errorLine1=" if (TextUtils.equals(sessionId, info.getId())) {"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java"
+ line="342"
+ column="50"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getVolumeMax`"
+ errorLine1=" return mRouteInfo.getVolumeMax();"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java"
+ line="221"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getVolume`"
+ errorLine1=" return mRouteInfo.getVolume();"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java"
+ line="234"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getClientPackageName`"
+ errorLine1=" return mRouteInfo.getClientPackageName();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java"
+ line="247"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getFeatures`"
+ errorLine1=" return mRouteInfo.getFeatures();"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java"
+ line="387"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getId`"
+ errorLine1=" return route.getId();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/MediaDeviceUtils.java"
+ line="57"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.telephony.TelephonyDisplayInfo#getOverrideNetworkType`"
+ errorLine1=" if (telephonyDisplayInfo.getOverrideNetworkType()"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java"
+ line="42"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.telephony.TelephonyDisplayInfo#getNetworkType`"
+ errorLine1=" return toIconKey(telephonyDisplayInfo.getNetworkType());"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java"
+ line="44"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.telephony.TelephonyDisplayInfo#getOverrideNetworkType`"
+ errorLine1=" return toDisplayIconKey(telephonyDisplayInfo.getOverrideNetworkType());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java"
+ line="46"
+ column="58"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.telephony.TelephonyManager#registerTelephonyCallback`"
+ errorLine1=" mPhone.registerTelephonyCallback(mReceiverHandler::post, mTelephonyCallback);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="80"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.telephony.TelephonyManager#unregisterTelephonyCallback`"
+ errorLine1=" mPhone.unregisterTelephonyCallback(mTelephonyCallback);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="82"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback`"
+ errorLine1=" public class MobileTelephonyCallback extends TelephonyCallback implements"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="109"
+ column="50"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.ServiceStateListener`"
+ errorLine1=" TelephonyCallback.ServiceStateListener,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="110"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.SignalStrengthsListener`"
+ errorLine1=" TelephonyCallback.SignalStrengthsListener,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="111"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.DataConnectionStateListener`"
+ errorLine1=" TelephonyCallback.DataConnectionStateListener,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="112"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.DataActivityListener`"
+ errorLine1=" TelephonyCallback.DataActivityListener,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="113"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.CarrierNetworkListener`"
+ errorLine1=" TelephonyCallback.CarrierNetworkListener,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="114"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.ActiveDataSubscriptionIdListener`"
+ errorLine1=" TelephonyCallback.ActiveDataSubscriptionIdListener,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="115"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Class requires API level 31 (current min is 29): `android.telephony.TelephonyCallback.DisplayInfoListener`"
+ errorLine1=" TelephonyCallback.DisplayInfoListener{"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="116"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.telephony.SubscriptionManager#getActiveDataSubscriptionId`"
+ errorLine1=" return SubscriptionManager.getActiveDataSubscriptionId();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java"
+ line="207"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `com.google.android.collect.Lists#newArrayList`"
+ errorLine1=" private ArrayList<NetworkPolicy> mPolicies = Lists.newArrayList();"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/NetworkPolicyEditor.java"
+ line="54"
+ column="56"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.media.MediaRoute2Info#getName`"
+ errorLine1=" name = mRouteInfo.getName();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java"
+ line="71"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.app.admin.DevicePolicyManager#isOrganizationOwnedDeviceWithManagedProfile`"
+ errorLine1=" if (profileAdmin != null && dpm.isOrganizationOwnedDeviceWithManagedProfile()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java"
+ line="280"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.content.Context#bindServiceAsUser`"
+ errorLine1=" mContext.bindServiceAsUser(mServiceIntent, mServiceConnection, Context.BIND_AUTO_CREATE,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionController.java"
+ line="83"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `new android.net.NetworkInfo`"
+ errorLine1=" mNetworkInfo = new NetworkInfo("
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java"
+ line="110"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiManager#getMaxSignalLevel`"
+ errorLine1=" int maxSignalLevel = wifiManager.getMaxSignalLevel();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java"
+ line="131"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.telephony.TelephonyManager#isDataCapable`"
+ errorLine1=" return !context.getSystemService(TelephonyManager.class).isDataCapable();"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/Utils.java"
+ line="447"
+ column="66"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.NetworkRequest.Builder#clearCapabilities`"
+ errorLine1=" .clearCapabilities()"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java"
+ line="72"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.net.wifi.WifiInfo#getSubscriptionId`"
+ errorLine1=" subId = mWifiInfo.getSubscriptionId();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java"
+ line="231"
+ column="39"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 29): `android.net.wifi.WifiInfo#getSubscriptionId`"
+ errorLine1=" subId = mWifiInfo.getSubscriptionId();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java"
+ line="263"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiManager#calculateSignalLevel`"
+ errorLine1=" level = mWifiManager.calculateSignalLevel(rssi);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java"
+ line="279"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.NetworkRequest.Builder#clearCapabilities`"
+ errorLine1=" .clearCapabilities()"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java"
+ line="243"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 29): `android.net.wifi.WifiInfo#getWifiStandard`"
+ errorLine1=" visibility.append(" standard = ").append(info.getWifiStandard());"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.java"
+ line="104"
+ column="59"/>
+ </issue>
+
+</issues>
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
index 0790189..97032dd 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
@@ -127,6 +127,7 @@
VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5));
VALIDATORS.put(
Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1));
+ VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2));
VALIDATORS.put(Global.NOTIFICATION_BUBBLES, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR);
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 3877b1e..150d10d 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -593,6 +593,7 @@
Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER,
Settings.Global.CACHED_APPS_FREEZER_ENABLED,
Settings.Global.APP_INTEGRITY_VERIFICATION_TIMEOUT,
+ Settings.Global.KEY_CHORD_POWER_VOLUME_UP,
Settings.Global.ADVANCED_BATTERY_USAGE_AMOUNT);
private static final Set<String> BACKUP_DENY_LIST_SECURE_SETTINGS =
@@ -750,7 +751,7 @@
Settings.Secure.SUPPRESS_DOZE,
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED,
Settings.Secure.ACCESSIBILITY_SHOW_WINDOW_MAGNIFICATION_PROMPT,
- Settings.Secure.TRANSFORM_ENABLED);
+ Settings.Secure.UI_TRANSLATION_ENABLED);
@Test
public void systemSettingsBackedUpOrDenied() {
diff --git a/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml b/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml
new file mode 100644
index 0000000..2f8f11d
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2021, The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <group>
+ <clip-path
+ android:pathData="M2.15,1.54h20v21h-20z"/>
+ <path
+ android:pathData="M19,21.83H5.35a3.19,3.19 0,0 1,-3.2 -3.19v-7A3.19,3.19 0,0 1,5.35 8.5H19a3.19,3.19 0,0 1,3.19 3.19v7A3.19,3.19 0,0 1,19 21.83ZM5.35,10.44A1.25,1.25 0,0 0,4.1 11.69v7a1.25,1.25 0,0 0,1.25 1.24H19a1.25,1.25 0,0 0,1.25 -1.24v-7A1.25,1.25 0,0 0,19 10.44Z"
+ android:fillColor="#FF000000" />
+ <path
+ android:pathData="M4.7,10.16 L4.21,8.57 16,5a3.56,3.56 0,0 1,3.1 0.25c1,0.67 1.65,2 1.89,4l-1.66,0.2C19.12,8 18.72,7 18.15,6.62a2,2 0,0 0,-1.7 0Z"
+ android:fillColor="#FF000000" />
+ <path
+ android:pathData="M4.43,10.47l-1,-1.34 7.31,-5.44c3,-1.86 5.51,1 6.33,2L15.82,6.77c-2.1,-2.44 -3.23,-2.26 -4.14,-1.7Z"
+ android:fillColor="#FF000000" />
+ </group>
+</vector>
diff --git a/packages/SystemUI/res/drawable/wallet_lockscreen_bg.xml b/packages/SystemUI/res/drawable/wallet_lockscreen_bg.xml
new file mode 100644
index 0000000..1535e72
--- /dev/null
+++ b/packages/SystemUI/res/drawable/wallet_lockscreen_bg.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2021, The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<ripple
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:color="?android:attr/textColorPrimary">
+ <item>
+ <shape
+ android:shape="oval">
+ <solid android:color="?androidprv:attr/colorSurface"/>
+ <size
+ android:width="@dimen/keyguard_affordance_width"
+ android:height="@dimen/keyguard_affordance_height"/>
+ </shape>
+ </item>
+</ripple>
+
diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
index cf9de5e..69d73c1 100644
--- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml
+++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
@@ -90,9 +90,11 @@
android:layout_width="@dimen/keyguard_affordance_width"
android:layout_gravity="bottom|end"
android:scaleType="center"
- android:tint="?attr/wallpaperTextColor"
- android:layout_marginStart="24dp"
- android:layout_marginBottom="48dp"
+ android:tint="?android:attr/textColorPrimary"
+ android:src="@drawable/ic_wallet_lockscreen"
+ android:background="@drawable/wallet_lockscreen_bg"
+ android:layout_marginEnd="@dimen/keyguard_affordance_horizontal_offset"
+ android:layout_marginBottom="@dimen/keyguard_affordance_vertical_offset"
android:visibility="gone" />
<FrameLayout
diff --git a/packages/SystemUI/res/layout/long_screenshot.xml b/packages/SystemUI/res/layout/long_screenshot.xml
index e775de2..fb783a7 100644
--- a/packages/SystemUI/res/layout/long_screenshot.xml
+++ b/packages/SystemUI/res/layout/long_screenshot.xml
@@ -71,6 +71,7 @@
android:layout_height="0px"
android:paddingTop="8dp"
android:paddingBottom="42dp"
+ android:visibility="gone"
app:layout_constrainedHeight="true"
app:layout_constrainedWidth="true"
app:layout_constraintTop_toTopOf="@id/preview"
diff --git a/packages/SystemUI/res/layout/smartspace_card_media.xml b/packages/SystemUI/res/layout/media_smartspace_recommendations.xml
similarity index 97%
rename from packages/SystemUI/res/layout/smartspace_card_media.xml
rename to packages/SystemUI/res/layout/media_smartspace_recommendations.xml
index a03044f..7e944162 100644
--- a/packages/SystemUI/res/layout/smartspace_card_media.xml
+++ b/packages/SystemUI/res/layout/media_smartspace_recommendations.xml
@@ -15,6 +15,7 @@
~ limitations under the License
-->
+<!-- Layout for media recommendations inside QSPanel carousel -->
<com.android.systemui.util.animation.TransitionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/media_recommendations"
diff --git a/packages/SystemUI/res/layout/people_space_placeholder_layout.xml b/packages/SystemUI/res/layout/people_space_placeholder_layout.xml
index 3ced1ff..b85d6b0 100644
--- a/packages/SystemUI/res/layout/people_space_placeholder_layout.xml
+++ b/packages/SystemUI/res/layout/people_space_placeholder_layout.xml
@@ -14,6 +14,7 @@
~ limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/packages/SystemUI/res/layout/people_tile_large_empty.xml b/packages/SystemUI/res/layout/people_tile_large_empty.xml
index 1e00307..69e2770 100644
--- a/packages/SystemUI/res/layout/people_tile_large_empty.xml
+++ b/packages/SystemUI/res/layout/people_tile_large_empty.xml
@@ -14,6 +14,7 @@
~ limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:layout_width="match_parent"
android:layout_height="match_parent">
diff --git a/packages/SystemUI/res/layout/people_tile_large_with_content.xml b/packages/SystemUI/res/layout/people_tile_large_with_content.xml
index 9990244..af2c5de 100644
--- a/packages/SystemUI/res/layout/people_tile_large_with_content.xml
+++ b/packages/SystemUI/res/layout/people_tile_large_with_content.xml
@@ -14,6 +14,7 @@
~ limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:id="@+id/item"
android:background="@drawable/people_space_tile_view_card"
android:layout_width="match_parent"
@@ -90,6 +91,7 @@
<ImageView
android:id="@+id/predefined_icon"
+ android:tint="?android:attr/colorAccent"
android:gravity="start|center_vertical"
android:paddingEnd="6dp"
android:layout_width="24dp"
diff --git a/packages/SystemUI/res/layout/people_tile_medium_empty.xml b/packages/SystemUI/res/layout/people_tile_medium_empty.xml
index c35787e..7d9cbb9 100644
--- a/packages/SystemUI/res/layout/people_tile_medium_empty.xml
+++ b/packages/SystemUI/res/layout/people_tile_medium_empty.xml
@@ -15,6 +15,7 @@
~ limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/packages/SystemUI/res/layout/people_tile_medium_with_content.xml b/packages/SystemUI/res/layout/people_tile_medium_with_content.xml
index db1d46d..c9e4945 100644
--- a/packages/SystemUI/res/layout/people_tile_medium_with_content.xml
+++ b/packages/SystemUI/res/layout/people_tile_medium_with_content.xml
@@ -16,6 +16,7 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -129,6 +130,7 @@
/>
<ImageView
android:id="@+id/predefined_icon"
+ android:tint="?android:attr/colorAccent"
android:gravity="end|center_vertical"
android:paddingStart="6dp"
android:layout_width="24dp"
diff --git a/packages/SystemUI/res/layout/people_tile_small.xml b/packages/SystemUI/res/layout/people_tile_small.xml
index f0ab187..34aa8e4 100644
--- a/packages/SystemUI/res/layout/people_tile_small.xml
+++ b/packages/SystemUI/res/layout/people_tile_small.xml
@@ -14,6 +14,7 @@
~ limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -38,6 +39,7 @@
<ImageView
android:id="@+id/predefined_icon"
+ android:tint="?android:attr/colorAccent"
android:layout_gravity="center"
android:layout_width="18dp"
android:layout_height="22dp"
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index e889822..a19d128 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -865,9 +865,12 @@
+ 8dp. -->
<dimen name="assist_orb_navbar_scrim_height">56dp</dimen>
- <!-- The width/height of the phone/camera icon view on keyguard. -->
- <dimen name="keyguard_affordance_height">56dp</dimen>
- <dimen name="keyguard_affordance_width">56dp</dimen>
+ <!-- The width/height of the keyguard bottom area icon view on keyguard. -->
+ <dimen name="keyguard_affordance_height">48dp</dimen>
+ <dimen name="keyguard_affordance_width">48dp</dimen>
+ <dimen name="keyguard_affordance_horizontal_offset">32dp</dimen>
+ <dimen name="keyguard_affordance_vertical_offset">32dp</dimen>
+
<!-- The width/height of the unlock icon view on keyguard. -->
<dimen name="keyguard_lock_height">42dp</dimen>
diff --git a/packages/SystemUI/res/xml/people_space_widget_info.xml b/packages/SystemUI/res/xml/people_space_widget_info.xml
index b2bf6da..e386147 100644
--- a/packages/SystemUI/res/xml/people_space_widget_info.xml
+++ b/packages/SystemUI/res/xml/people_space_widget_info.xml
@@ -15,12 +15,13 @@
-->
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="120dp"
- android:minHeight="50dp"
+ android:minWidth="136dp"
+ android:minHeight="55dp"
android:minResizeWidth="60dp"
android:minResizeHeight="50dp"
android:maxResizeHeight="207dp"
android:updatePeriodMillis="60000"
+ android:widgetFeatures="reconfigurable"
android:description="@string/people_tile_description"
android:previewLayout="@layout/people_space_placeholder_layout"
android:resizeMode="horizontal|vertical"
diff --git a/packages/SystemUI/shared/lint-baseline.xml b/packages/SystemUI/shared/lint-baseline.xml
new file mode 100644
index 0000000..ec9d8fd
--- /dev/null
+++ b/packages/SystemUI/shared/lint-baseline.xml
@@ -0,0 +1,675 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.os.RemoteException#rethrowFromSystemServer`"
+ errorLine1=" throw e.rethrowFromSystemServer();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java"
+ line="90"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.graphics.Bitmap#getHardwareBuffer`"
+ errorLine1=" mBuffer != null ? mBuffer.getHardwareBuffer() : null, mRect);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/view/AppTransitionAnimationSpecCompat.java"
+ line="39"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `new android.graphics.ParcelableColorSpace`"
+ errorLine1=" ? new ParcelableColorSpace(ColorSpace.get(ColorSpace.Named.SRGB))"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/BitmapUtil.java"
+ line="57"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `new android.graphics.ParcelableColorSpace`"
+ errorLine1=" : new ParcelableColorSpace(bitmap.getColorSpace());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/BitmapUtil.java"
+ line="58"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.graphics.Bitmap#getHardwareBuffer`"
+ errorLine1=" bundle.putParcelable(KEY_BUFFER, bitmap.getHardwareBuffer());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/BitmapUtil.java"
+ line="61"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `ParcelableColorSpace` to `Parcelable` requires API level 31 (current min is 26)"
+ errorLine1=" bundle.putParcelable(KEY_COLOR_SPACE, colorSpace);"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/BitmapUtil.java"
+ line="62"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.graphics.Bitmap#wrapHardwareBuffer`"
+ errorLine1=" return Bitmap.wrapHardwareBuffer(Objects.requireNonNull(buffer),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/BitmapUtil.java"
+ line="84"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.graphics.ParcelableColorSpace#getColorSpace`"
+ errorLine1=" colorSpace.getColorSpace());"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/BitmapUtil.java"
+ line="85"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" final SurfaceControl.Transaction tx = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/pip/PipSurfaceTransactionHelper.java"
+ line="122"
+ column="47"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.util.ArraySet`"
+ errorLine1=" mPluginActions = new ArraySet<>(mSharedPrefs.getStringSet(PLUGIN_ACTIONS, null));"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginPrefs.java"
+ line="41"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.util.ArraySet`"
+ errorLine1=" return new ArraySet<>(mPluginActions);"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginPrefs.java"
+ line="45"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 28 (current min is 26): `android.graphics.Bitmap#createBitmap`"
+ errorLine1=" return Bitmap.createBitmap(picture);"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/view/RecentsTransition.java"
+ line="113"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Builder`"
+ errorLine1=" mSurface = new SurfaceControl.Builder()"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="116"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setName`"
+ errorLine1=" .setName("Transition Unrotate")"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="117"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#setParent`"
+ errorLine1=" .setParent(parent)"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="119"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Builder#build`"
+ errorLine1=" .build();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="120"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" t.reparent(child, mSurface);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="137"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" SurfaceControl.Transaction t = new SurfaceControl.Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="143"
+ column="44"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#reparent`"
+ errorLine1=" t.reparent(mRotateChildren.get(i), rootLeash);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="145"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="148"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(counterLauncher.mSurface, launcherLayer);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="200"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(counterLauncher.mSurface, info.getChanges().size() * 3);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="206"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(leash, info.getChanges().size() * 3 - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="216"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(wallpapersCompat[i].leash.getSurfaceControl(), 1.f);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="223"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(counterWallpaper.mSurface, -1);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="233"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java"
+ line="238"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" taskId = change.getTaskInfo() != null ? change.getTaskInfo().taskId : -1;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java"
+ line="101"
+ column="49"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#isRunning`"
+ errorLine1=" isNotInRecents = !change.getTaskInfo().isRunning;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java"
+ line="116"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#release`"
+ errorLine1=" leash.mSurfaceControl.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java"
+ line="159"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#release`"
+ errorLine1=" mStartLeash.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java"
+ line="161"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(change.getLeash(), info.getChanges().size() * 3 - i);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java"
+ line="97"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(wallpapers[i].leash.mSurfaceControl, 1);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java"
+ line="105"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java"
+ line="107"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#isValid`"
+ errorLine1=" return mSurfaceControl != null && mSurfaceControl.isValid();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceControlCompat.java"
+ line="41"
+ column="59"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.SurfaceControlViewHost#release`"
+ errorLine1=" mSurfaceControlViewHost.release();"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceViewRequestReceiver.java"
+ line="61"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level R (current min is 26): `android.view.SurfaceView#getHostToken`"
+ errorLine1=" bundle.putBinder(KEY_HOST_TOKEN, surfaceView.getHostToken());"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceViewRequestUtils.java"
+ line="34"
+ column="54"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceView#getSurfaceControl`"
+ errorLine1=" bundle.putParcelable(KEY_SURFACE_CONTROL, surfaceView.getSurfaceControl());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceViewRequestUtils.java"
+ line="35"
+ column="63"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Cast from `SurfaceControl` to `Parcelable` requires API level 29 (current min is 26)"
+ errorLine1=" bundle.putParcelable(KEY_SURFACE_CONTROL, surfaceView.getSurfaceControl());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceViewRequestUtils.java"
+ line="35"
+ column="51"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl#isValid`"
+ errorLine1=" if (mBarrierSurfaceControl == null || !mBarrierSurfaceControl.isValid()) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java"
+ line="107"
+ column="79"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" Transaction t = new Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java"
+ line="113"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java"
+ line="122"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" t.setAlpha(surface, alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java"
+ line="361"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" t.setLayer(surface, layer);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java"
+ line="364"
+ column="19"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#origActivity`"
+ errorLine1=" ComponentName sourceComponent = t.origActivity != null"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java"
+ line="73"
+ column="45"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#origActivity`"
+ errorLine1=" ? t.origActivity"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java"
+ line="75"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#taskId`"
+ errorLine1=" this.id = t.taskId;"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java"
+ line="78"
+ column="23"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#baseIntent`"
+ errorLine1=" this.baseIntent = t.baseIntent;"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java"
+ line="80"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#taskDescription`"
+ errorLine1=" ActivityManager.TaskDescription td = taskInfo.taskDescription;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java"
+ line="242"
+ column="46"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#topActivity`"
+ errorLine1=" taskInfo.supportsSplitScreenMultiWindow, isLocked, td, taskInfo.topActivity);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java"
+ line="246"
+ column="72"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#topActivity`"
+ errorLine1=" return info.topActivity;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskInfoCompat.java"
+ line="49"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.TaskInfo#taskDescription`"
+ errorLine1=" return info.taskDescription;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskInfoCompat.java"
+ line="53"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Field requires API level 29 (current min is 26): `android.app.ActivityManager.RunningTaskInfo#taskId`"
+ errorLine1=" onTaskMovedToFront(taskInfo.taskId);"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java"
+ line="70"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.graphics.Bitmap#wrapHardwareBuffer`"
+ errorLine1=" thumbnail = Bitmap.wrapHardwareBuffer(buffer, snapshot.getColorSpace());"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java"
+ line="69"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 26): `android.app.WallpaperColors#getColorHints`"
+ errorLine1=" (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TonalCompat.java"
+ line="42"
+ column="29"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `new android.view.SurfaceControl.Transaction`"
+ errorLine1=" mTransaction = new Transaction();"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java"
+ line="31"
+ column="24"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" mTransaction.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java"
+ line="35"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setBufferSize`"
+ errorLine1=" mTransaction.setBufferSize(surfaceControl.mSurfaceControl, w, h);"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java"
+ line="54"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setLayer`"
+ errorLine1=" mTransaction.setLayer(surfaceControl.mSurfaceControl, z);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java"
+ line="59"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#setAlpha`"
+ errorLine1=" mTransaction.setAlpha(surfaceControl.mSurfaceControl, alpha);"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java"
+ line="64"
+ column="22"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.view.SurfaceControl.Transaction#apply`"
+ errorLine1=" t.apply();"
+ errorLine2=" ~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java"
+ line="64"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`"
+ errorLine1=" .getFloat(Resources.getSystem().getIdentifier("
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperManagerCompat.java"
+ line="46"
+ column="18"/>
+ </issue>
+
+</issues>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
index fa2f32f..dc42a53 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
@@ -92,23 +92,11 @@
return this;
}
- public TransactionCompat deferTransactionUntil(SurfaceControlCompat surfaceControl,
- SurfaceControl barrier, long frameNumber) {
- mTransaction.deferTransactionUntil(surfaceControl.mSurfaceControl, barrier,
- frameNumber);
- return this;
- }
-
public TransactionCompat setColor(SurfaceControlCompat surfaceControl, float[] color) {
mTransaction.setColor(surfaceControl.mSurfaceControl, color);
return this;
}
- public static void deferTransactionUntil(Transaction t, SurfaceControl surfaceControl,
- SurfaceControl barrier, long frameNumber) {
- t.deferTransactionUntil(surfaceControl, barrier, frameNumber);
- }
-
public static void setRelativeLayer(Transaction t, SurfaceControl surfaceControl,
SurfaceControl relativeTo, int z) {
t.setRelativeLayer(surfaceControl, relativeTo, z);
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/HbmTypes.java b/packages/SystemUI/src/com/android/systemui/biometrics/HbmTypes.java
index 96ee0f7..f798005 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/HbmTypes.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/HbmTypes.java
@@ -17,6 +17,7 @@
package com.android.systemui.biometrics;
import android.annotation.IntDef;
+import android.hardware.fingerprint.IUdfpsHbmListener;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -26,10 +27,10 @@
*/
public final class HbmTypes {
/** HBM that applies to the whole screen. */
- public static final int GLOBAL_HBM = 0;
+ public static final int GLOBAL_HBM = IUdfpsHbmListener.GLOBAL_HBM;
/** HBM that only applies to a portion of the screen. */
- public static final int LOCAL_HBM = 1;
+ public static final int LOCAL_HBM = IUdfpsHbmListener.LOCAL_HBM;
@Retention(RetentionPolicy.SOURCE)
@IntDef({GLOBAL_HBM, LOCAL_HBM})
diff --git a/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt
index a375771..ac201a8 100644
--- a/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.android.systemui.media
import android.view.LayoutInflater
@@ -50,7 +66,10 @@
@JvmStatic fun create(inflater: LayoutInflater, parent: ViewGroup):
RecommendationViewHolder {
val itemView =
- inflater.inflate(R.layout.smartspace_card_media, parent, /* attachToRoot= */ false)
+ inflater.inflate(
+ R.layout.media_smartspace_recommendations,
+ parent,
+ false /* attachToRoot */)
// Because this media view (a TransitionLayout) is used to measure and layout the views
// in various states before being attached to its parent, we can't depend on the default
// LAYOUT_DIRECTION_INHERIT to correctly resolve the ltr direction.
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
index 02c12f6..a0b5521 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
@@ -29,7 +29,6 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherApps;
-import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Outline;
@@ -60,7 +59,6 @@
private IPeopleManager mPeopleManager;
private PeopleSpaceWidgetManager mPeopleSpaceWidgetManager;
private INotificationManager mNotificationManager;
- private PackageManager mPackageManager;
private LauncherApps mLauncherApps;
private Context mContext;
private NotificationEntryManager mNotificationEntryManager;
@@ -81,7 +79,6 @@
mContext = getApplicationContext();
mNotificationManager = INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
- mPackageManager = getPackageManager();
mPeopleManager = IPeopleManager.Stub.asInterface(
ServiceManager.getService(Context.PEOPLE_SERVICE));
mLauncherApps = mContext.getSystemService(LauncherApps.class);
@@ -112,7 +109,7 @@
LinearLayout item = findViewById(R.id.item);
GradientDrawable shape = (GradientDrawable) item.getBackground();
final TypedArray ta = mContext.obtainStyledAttributes(
- new int[] {android.R.attr.colorBackgroundFloating});
+ new int[]{android.R.attr.colorBackgroundFloating});
shape.setColor(ta.getColor(0, Color.WHITE));
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
index 3bc91bc..51af47d 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
@@ -33,6 +33,7 @@
import static com.android.systemui.people.PeopleSpaceUtils.convertDrawableToBitmap;
import static com.android.systemui.people.PeopleSpaceUtils.getUserId;
+import android.annotation.ColorInt;
import android.annotation.Nullable;
import android.app.PendingIntent;
import android.app.people.ConversationStatus;
@@ -40,6 +41,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
+import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
@@ -48,12 +50,13 @@
import android.text.TextUtils;
import android.util.IconDrawableFactory;
import android.util.Log;
-import android.util.TypedValue;
+import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.RemoteViews;
import android.widget.TextView;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.people.widget.LaunchConversationActivity;
import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;
@@ -344,10 +347,11 @@
setMaxLines(views);
CharSequence content = mTile.getNotificationContent();
views = setPunctuationRemoteViewsFields(views, content);
- TypedValue typedValue = new TypedValue();
- mContext.getTheme().resolveAttribute(android.R.attr.textColorPrimary, typedValue, true);
- int primaryTextColor = mContext.getColor(typedValue.resourceId);
- views.setInt(R.id.text_content, "setTextColor", primaryTextColor);
+ // TODO(b/184931139): Update to RemoteViews wrapper to set via attribute once available
+ @ColorInt int color = Utils.getColorAttr(mContext,
+ android.R.attr.textColorPrimary).getDefaultColor();
+ views.setInt(R.id.text_content, "setTextColor", color);
+
views.setTextViewText(R.id.text_content, mTile.getNotificationContent());
views.setViewVisibility(R.id.image, View.GONE);
views.setImageViewResource(R.id.predefined_icon, R.drawable.ic_message);
@@ -394,10 +398,9 @@
views.setViewVisibility(R.id.messages_count, View.GONE);
setMaxLines(views);
// Secondary text color for statuses.
- TypedValue typedValue = new TypedValue();
- mContext.getTheme().resolveAttribute(android.R.attr.textColorSecondary, typedValue, true);
- int secondaryTextColor = mContext.getColor(typedValue.resourceId);
- views.setInt(R.id.text_content, "setTextColor", secondaryTextColor);
+ @ColorInt int secondaryColor = Utils.getColorAttr(mContext,
+ android.R.attr.textColorSecondary).getDefaultColor();
+ views.setInt(R.id.text_content, "setTextColor", secondaryColor);
views.setTextViewText(R.id.text_content, statusText);
Icon statusIcon = status.getIcon();
diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
index 117be47..d63dc4a 100644
--- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
+++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
@@ -95,6 +95,7 @@
private PeopleManager mPeopleManager;
private NotificationEntryManager mNotificationEntryManager;
private PackageManager mPackageManager;
+ private PeopleSpaceWidgetProvider mPeopleSpaceWidgetProvider;
public UiEventLogger mUiEventLogger = new UiEventLoggerImpl();
@GuardedBy("mLock")
public static Map<PeopleTileKey, PeopleSpaceWidgetProvider.TileConversationListener>
@@ -119,6 +120,7 @@
mPeopleManager = mContext.getSystemService(PeopleManager.class);
mNotificationEntryManager = Dependency.get(NotificationEntryManager.class);
mPackageManager = mContext.getPackageManager();
+ mPeopleSpaceWidgetProvider = new PeopleSpaceWidgetProvider();
}
/**
@@ -129,7 +131,7 @@
AppWidgetManager appWidgetManager, IPeopleManager iPeopleManager,
PeopleManager peopleManager, LauncherApps launcherApps,
NotificationEntryManager notificationEntryManager, PackageManager packageManager,
- boolean isForTesting) {
+ boolean isForTesting, PeopleSpaceWidgetProvider peopleSpaceWidgetProvider) {
mAppWidgetManager = appWidgetManager;
mIPeopleManager = iPeopleManager;
mPeopleManager = peopleManager;
@@ -137,6 +139,7 @@
mNotificationEntryManager = notificationEntryManager;
mPackageManager = packageManager;
mIsForTesting = isForTesting;
+ mPeopleSpaceWidgetProvider = peopleSpaceWidgetProvider;
}
/**
@@ -616,7 +619,20 @@
return;
}
- mUiEventLogger.log(PeopleSpaceUtils.PeopleSpaceWidgetEvent.PEOPLE_SPACE_WIDGET_ADDED);
+ PeopleTileKey existingKeyIfStored;
+ synchronized (mLock) {
+ existingKeyIfStored = getKeyFromStorageByWidgetId(appWidgetId);
+ }
+ // Delete previous storage if the widget already existed and is just reconfigured.
+ if (existingKeyIfStored.isValid()) {
+ if (DEBUG) Log.d(TAG, "Remove previous storage for widget: " + appWidgetId);
+ deleteWidgets(new int[]{appWidgetId});
+ } else {
+ // Widget newly added.
+ mUiEventLogger.log(
+ PeopleSpaceUtils.PeopleSpaceWidgetEvent.PEOPLE_SPACE_WIDGET_ADDED);
+ }
+
synchronized (mLock) {
if (DEBUG) Log.d(TAG, "Add storage for : " + tile.getId());
PeopleTileKey key = new PeopleTileKey(tile);
@@ -634,8 +650,7 @@
PeopleSpaceUtils.updateAppWidgetOptionsAndView(
mAppWidgetManager, mContext, appWidgetId, tile);
- PeopleSpaceWidgetProvider provider = new PeopleSpaceWidgetProvider();
- provider.onUpdate(mContext, mAppWidgetManager, new int[]{appWidgetId});
+ mPeopleSpaceWidgetProvider.onUpdate(mContext, mAppWidgetManager, new int[]{appWidgetId});
}
/** Registers a conversation listener for {@code appWidgetId} if not already registered. */
@@ -644,12 +659,7 @@
// Retrieve storage needed for registration.
PeopleTileKey key;
synchronized (mLock) {
- SharedPreferences widgetSp = mContext.getSharedPreferences(String.valueOf(widgetId),
- Context.MODE_PRIVATE);
- key = new PeopleTileKey(
- widgetSp.getString(SHORTCUT_ID, EMPTY_STRING),
- widgetSp.getInt(USER_ID, INVALID_USER_ID),
- widgetSp.getString(PACKAGE_NAME, EMPTY_STRING));
+ key = getKeyFromStorageByWidgetId(widgetId);
if (!key.isValid()) {
if (DEBUG) Log.w(TAG, "Could not register listener for widget: " + widgetId);
return;
@@ -669,6 +679,20 @@
mContext.getMainExecutor());
}
+ /**
+ * Attempts to get a key from storage for {@code widgetId}, returning null if an invalid key is
+ * found.
+ */
+ private PeopleTileKey getKeyFromStorageByWidgetId(int widgetId) {
+ SharedPreferences widgetSp = mContext.getSharedPreferences(String.valueOf(widgetId),
+ Context.MODE_PRIVATE);
+ PeopleTileKey key = new PeopleTileKey(
+ widgetSp.getString(SHORTCUT_ID, EMPTY_STRING),
+ widgetSp.getInt(USER_ID, INVALID_USER_ID),
+ widgetSp.getString(PACKAGE_NAME, EMPTY_STRING));
+ return key;
+ }
+
/** Deletes all storage, listeners, and caching for {@code appWidgetIds}. */
public void deleteWidgets(int[] appWidgetIds) {
for (int widgetId : appWidgetIds) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java
index 75a7e8e..de3be78 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java
@@ -34,6 +34,7 @@
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.DeviceControlsController;
import com.android.systemui.statusbar.policy.HotspotController;
+import com.android.systemui.statusbar.policy.WalletController;
import com.android.systemui.util.settings.SecureSettings;
import javax.inject.Named;
@@ -63,6 +64,7 @@
CastController castController,
ReduceBrightColorsController reduceBrightColorsController,
DeviceControlsController deviceControlsController,
+ WalletController walletController,
@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {
AutoTileManager manager = new AutoTileManager(
context,
@@ -77,6 +79,7 @@
castController,
reduceBrightColorsController,
deviceControlsController,
+ walletController,
isReduceBrightColorsAvailable
);
manager.init();
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java
index 9ce0eeb..33041d2 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java
@@ -207,6 +207,7 @@
mLongScreenshot = longScreenshot;
mPreview.setImageDrawable(mLongScreenshot.getDrawable());
updateImageDimensions();
+ mCropView.setVisibility(View.VISIBLE);
mMagnifierView.setDrawable(mLongScreenshot.getDrawable(),
mLongScreenshot.getWidth(), mLongScreenshot.getHeight());
// Original boundaries go from the image tile set's y=0 to y=pageSize, so
@@ -240,6 +241,7 @@
mPreview.setImageDrawable(drawable);
mMagnifierView.setDrawable(drawable, imageResult.bitmap.getWidth(),
imageResult.bitmap.getHeight());
+ mCropView.setVisibility(View.VISIBLE);
mSavedImagePath = imageResult.fileName;
setButtonsEnabled(true);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
index 88e5364..3dd4a3b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
@@ -39,6 +39,7 @@
import com.android.systemui.statusbar.policy.DeviceControlsController;
import com.android.systemui.statusbar.policy.HotspotController;
import com.android.systemui.statusbar.policy.HotspotController.Callback;
+import com.android.systemui.statusbar.policy.WalletController;
import com.android.systemui.util.UserAwareController;
import com.android.systemui.util.settings.SecureSettings;
@@ -60,6 +61,7 @@
public static final String NIGHT = "night";
public static final String CAST = "cast";
public static final String DEVICE_CONTROLS = "controls";
+ public static final String WALLET = "wallet";
public static final String BRIGHTNESS = "reduce_brightness";
static final String SETTING_SEPARATOR = ":";
@@ -77,6 +79,7 @@
private final NightDisplayListener mNightDisplayListener;
private final CastController mCastController;
private final DeviceControlsController mDeviceControlsController;
+ private final WalletController mWalletController;
private final ReduceBrightColorsController mReduceBrightColorsController;
private final boolean mIsReduceBrightColorsAvailable;
private final ArrayList<AutoAddSetting> mAutoAddSettingList = new ArrayList<>();
@@ -92,6 +95,7 @@
CastController castController,
ReduceBrightColorsController reduceBrightColorsController,
DeviceControlsController deviceControlsController,
+ WalletController walletController,
@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {
mContext = context;
mHost = host;
@@ -107,6 +111,7 @@
mReduceBrightColorsController = reduceBrightColorsController;
mIsReduceBrightColorsAvailable = isReduceBrightColorsAvailable;
mDeviceControlsController = deviceControlsController;
+ mWalletController = walletController;
}
/**
@@ -146,6 +151,9 @@
if (!mAutoTracker.isAdded(DEVICE_CONTROLS)) {
mDeviceControlsController.setCallback(mDeviceControlsCallback);
}
+ if (!mAutoTracker.isAdded(WALLET)) {
+ initWalletController();
+ }
int settingsN = mAutoAddSettingList.size();
for (int i = 0; i < settingsN; i++) {
@@ -294,6 +302,16 @@
}
};
+ private void initWalletController() {
+ if (mAutoTracker.isAdded(WALLET)) return;
+ Integer position = mWalletController.getWalletPosition();
+
+ if (position != null) {
+ mHost.addTile(WALLET, position);
+ mAutoTracker.setTileAdded(WALLET);
+ }
+ }
+
@VisibleForTesting
final NightDisplayListener.Callback mNightDisplayCallback =
new NightDisplayListener.Callback() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 411a2a3..c3325b1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -48,8 +48,11 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.MediaStore;
-import android.provider.Settings;
import android.service.media.CameraPrewarmService;
+import android.service.quickaccesswallet.GetWalletCardsError;
+import android.service.quickaccesswallet.GetWalletCardsRequest;
+import android.service.quickaccesswallet.GetWalletCardsResponse;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.telecom.TelecomManager;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -64,6 +67,8 @@
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
@@ -75,6 +80,7 @@
import com.android.systemui.assist.AssistManager;
import com.android.systemui.camera.CameraIntents;
import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.IntentButtonProvider;
import com.android.systemui.plugins.IntentButtonProvider.IntentButton;
import com.android.systemui.plugins.IntentButtonProvider.IntentButton.IconState;
@@ -87,6 +93,9 @@
import com.android.systemui.statusbar.policy.PreviewInflater;
import com.android.systemui.tuner.LockscreenFragment.LockButtonFactory;
import com.android.systemui.tuner.TunerService;
+import com.android.systemui.wallet.ui.WalletActivity;
+
+import java.util.concurrent.Executor;
/**
* Implementation for the bottom area of the Keyguard, including camera/phone affordance and status
@@ -121,7 +130,13 @@
private KeyguardAffordanceView mRightAffordanceView;
private KeyguardAffordanceView mLeftAffordanceView;
+
private ImageView mWalletButton;
+ private boolean mWalletEnabled = false;
+ private boolean mHasCard = false;
+ private WalletCardRetriever mCardRetriever = new WalletCardRetriever();
+ private QuickAccessWalletClient mQuickAccessWalletClient;
+
private ViewGroup mIndicationArea;
private TextView mIndicationText;
private TextView mIndicationTextBottom;
@@ -138,7 +153,7 @@
private AccessibilityController mAccessibilityController;
private StatusBar mStatusBar;
private KeyguardAffordanceHelper mAffordanceHelper;
-
+ private FalsingManager mFalsingManager;
private boolean mUserSetupComplete;
private boolean mPrewarmBound;
private Messenger mPrewarmMessenger;
@@ -170,7 +185,6 @@
private int mBurnInXOffset;
private int mBurnInYOffset;
private ActivityIntentHelper mActivityIntentHelper;
- private int mLockScreenMode;
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
public KeyguardBottomAreaView(Context context) {
@@ -415,10 +429,11 @@
}
private void updateWalletVisibility() {
- if (mDozing) {
+ if (mDozing || !mWalletEnabled) {
mWalletButton.setVisibility(GONE);
} else {
mWalletButton.setVisibility(VISIBLE);
+ mWalletButton.setOnClickListener(this::onWalletClick);
}
}
@@ -871,25 +886,63 @@
return insets;
}
- private void setupWallet() {
- boolean inNewLayout = mLockScreenMode != KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL;
- boolean settingEnabled = Settings.Global.getInt(mContext.getContentResolver(),
- "controls_lockscreen", 0) == 1;
- if (!inNewLayout || !settingEnabled) {
- mWalletButton.setVisibility(View.GONE);
- return;
- }
-
- // TODO: add image
- // mWalletButton.setImageDrawable(list.get(0).loadIcon());
- updateWalletVisibility();
+ /** Set the falsing manager */
+ public void setFalsingManager(FalsingManager falsingManager) {
+ mFalsingManager = falsingManager;
}
/**
- * Optionally add controls when in the new lockscreen mode
+ * Initialize the wallet feature, only enabling if the feature is enabled within the platform.
*/
- public void onLockScreenModeChanged(int mode) {
- mLockScreenMode = mode;
- setupWallet();
+ public void initWallet(QuickAccessWalletClient client, Executor uiExecutor, boolean enabled) {
+ mQuickAccessWalletClient = client;
+ mWalletEnabled = enabled && client.isWalletFeatureAvailable();
+
+ if (mWalletEnabled) {
+ queryWalletCards(uiExecutor);
+ }
+ updateWalletVisibility();
+ }
+
+ private void queryWalletCards(Executor uiExecutor) {
+ GetWalletCardsRequest request =
+ new GetWalletCardsRequest(1 /* cardWidth */, 1 /* cardHeight */,
+ 1 /* iconSizePx */, 2 /* maxCards */);
+ mQuickAccessWalletClient.getWalletCards(uiExecutor, request, mCardRetriever);
+ }
+
+ private void onWalletClick(View v) {
+ // More coming here; need to inform the user about how to proceed
+ mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY);
+
+ if (mHasCard) {
+ Intent intent = new Intent(mContext, WalletActivity.class)
+ .setAction(Intent.ACTION_VIEW)
+ .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ mContext.startActivity(intent);
+ } else {
+ if (mQuickAccessWalletClient.createWalletIntent() == null) {
+ Log.w(TAG, "Could not get intent of the wallet app.");
+ return;
+ }
+ mActivityStarter.postStartActivityDismissingKeyguard(
+ mQuickAccessWalletClient.createWalletIntent(), /* delay= */ 0);
+ }
+ }
+
+ private class WalletCardRetriever implements
+ QuickAccessWalletClient.OnWalletCardsRetrievedCallback {
+
+ @Override
+ public void onWalletCardsRetrieved(@NonNull GetWalletCardsResponse response) {
+ mHasCard = !response.getWalletCards().isEmpty();
+ updateWalletVisibility();
+ }
+
+ @Override
+ public void onWalletCardRetrievalError(@NonNull GetWalletCardsError error) {
+ mHasCard = false;
+ updateWalletVisibility();
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index 7032aef..6a35293 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -53,6 +53,7 @@
import android.os.PowerManager;
import android.os.SystemClock;
import android.os.UserManager;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.util.Log;
import android.util.MathUtils;
import android.view.DisplayCutout;
@@ -154,6 +155,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -517,6 +519,9 @@
private int mOldLayoutDirection;
private NotificationShelfController mNotificationShelfController;
+ private final QuickAccessWalletClient mQuickAccessWalletClient;
+ private final Executor mUiExecutor;
+
private int mLockScreenMode = KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL;
private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() {
@@ -578,7 +583,9 @@
NotificationShadeDepthController notificationShadeDepthController,
AmbientState ambientState,
LockIconViewController lockIconViewController,
- FeatureFlags featureFlags) {
+ FeatureFlags featureFlags,
+ QuickAccessWalletClient quickAccessWalletClient,
+ @Main Executor uiExecutor) {
super(view, falsingManager, dozeLog, keyguardStateController,
(SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
statusBarKeyguardViewManager, latencyTracker, flingAnimationUtilsBuilder.get(),
@@ -624,6 +631,8 @@
mScrimController = scrimController;
mUserManager = userManager;
mMediaDataManager = mediaDataManager;
+ mQuickAccessWalletClient = quickAccessWalletClient;
+ mUiExecutor = uiExecutor;
pulseExpansionHandler.setPulseExpandAbortListener(() -> {
if (mQs != null) {
mQs.animateHeaderSlidingOut();
@@ -975,6 +984,9 @@
mKeyguardBottomArea.setAffordanceHelper(mAffordanceHelper);
mKeyguardBottomArea.setStatusBar(mStatusBar);
mKeyguardBottomArea.setUserSetupComplete(mUserSetupComplete);
+ mKeyguardBottomArea.setFalsingManager(mFalsingManager);
+ mKeyguardBottomArea.initWallet(mQuickAccessWalletClient, mUiExecutor,
+ mFeatureFlags.isQuickAccessWalletEnabled());
}
private void updateMaxDisplayedNotifications(boolean recompute) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
index d3907ae..a4fd647 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
@@ -61,7 +61,7 @@
companion object {
private const val TAG = "DeviceControlsControllerImpl"
- internal const val QS_PRIORITY_POSITION = 3
+ internal const val QS_PRIORITY_POSITION = 2
internal const val QS_DEFAULT_POSITION = POSITION_AT_END
internal const val PREFS_CONTROLS_SEEDING_COMPLETED = "SeedingCompleted"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WalletController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WalletController.kt
new file mode 100644
index 0000000..eaad477
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WalletController.kt
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy
+
+/**
+ * Supports adding a Quick Access Wallet QS tile
+ */
+interface WalletController {
+ /** @return valid position or null to indicate no tile should be set */
+ fun getWalletPosition(): Int?
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WalletControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WalletControllerImpl.kt
new file mode 100644
index 0000000..af12844
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WalletControllerImpl.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy
+
+import android.service.quickaccesswallet.QuickAccessWalletClient
+import android.util.Log
+
+import com.android.systemui.dagger.SysUISingleton
+
+import javax.inject.Inject
+
+/**
+ * Check if the wallet service is available for use, and place the tile.
+ */
+@SysUISingleton
+public class WalletControllerImpl @Inject constructor(
+ private val quickAccessWalletClient: QuickAccessWalletClient
+) : WalletController {
+
+ companion object {
+ private const val TAG = "WalletControllerImpl"
+ internal const val QS_PRIORITY_POSITION = 2
+ }
+
+ /**
+ * @return QS_PRIORITY_POSITION or null to indicate no tile should be set
+ */
+ override fun getWalletPosition(): Int? {
+ return if (quickAccessWalletClient.isWalletServiceAvailable()) {
+ Log.i(TAG, "Setting WalletTile position: $QS_PRIORITY_POSITION")
+ QS_PRIORITY_POSITION
+ } else {
+ Log.i(TAG, "Setting WalletTile position: null")
+ null
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
index 7666022..9fb0453 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
@@ -48,6 +48,8 @@
import com.android.systemui.statusbar.policy.SecurityControllerImpl;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
+import com.android.systemui.statusbar.policy.WalletController;
+import com.android.systemui.statusbar.policy.WalletControllerImpl;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
@@ -120,6 +122,10 @@
/** */
@Binds
+ WalletController provideWalletController(WalletControllerImpl controllerImpl);
+
+ /** */
+ @Binds
NetworkController.AccessPointController provideAccessPointController(
AccessPointControllerImpl accessPointControllerImpl);
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
index c9011f4..fdd929c 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
@@ -138,19 +138,25 @@
mAcceptColorEvents = false;
}
+ final boolean hadWallpaperColors = mSystemColors != null;
if ((which & WallpaperManager.FLAG_SYSTEM) != 0) {
mSystemColors = wallpaperColors;
- if (DEBUG) {
- Log.d(TAG, "got new lock colors: " + wallpaperColors + " where: " + which);
- }
+ if (DEBUG) Log.d(TAG, "got new colors: " + wallpaperColors + " where: " + which);
}
if (mDeviceProvisionedController != null
&& !mDeviceProvisionedController.isCurrentUserSetup()) {
- Log.i(TAG, "Wallpaper color event deferred until setup is finished: "
- + wallpaperColors);
- mDeferredThemeEvaluation = true;
- return;
+ if (hadWallpaperColors) {
+ Log.i(TAG, "Wallpaper color event deferred until setup is finished: "
+ + wallpaperColors);
+ mDeferredThemeEvaluation = true;
+ return;
+ } else {
+ if (DEBUG) {
+ Log.i(TAG, "During user setup, but allowing first color event: had? "
+ + hadWallpaperColors + " has? " + (mSystemColors != null));
+ }
+ }
}
reevaluateSystemTheme(false /* forceReload */);
};
@@ -221,17 +227,31 @@
}
},
UserHandle.USER_ALL);
+
+ if (!mIsMonetEnabled) {
+ return;
+ }
+
mDeviceProvisionedController.addCallback(mDeviceProvisionedListener);
// Upon boot, make sure we have the most up to date colors
- mBgExecutor.execute(() -> {
+ Runnable updateColors = () -> {
WallpaperColors systemColor = mWallpaperManager.getWallpaperColors(
WallpaperManager.FLAG_SYSTEM);
mMainExecutor.execute(() -> {
+ if (DEBUG) Log.d(TAG, "Boot colors: " + systemColor);
mSystemColors = systemColor;
reevaluateSystemTheme(false /* forceReload */);
});
- });
+ };
+
+ // Whenever we're going directly to setup wizard, we need to process colors synchronously,
+ // otherwise we'll see some jank when the activity is recreated.
+ if (!mDeviceProvisionedController.isCurrentUserSetup()) {
+ mMainExecutor.execute(updateColors);
+ } else {
+ mBgExecutor.execute(updateColors);
+ }
mWallpaperManager.addOnColorsChangedListener(mOnColorsChangedListener, null,
UserHandle.USER_ALL);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java
index d91625e..7125500 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java
@@ -186,11 +186,11 @@
mLauncherApps = mock(LauncherApps.class);
mDependency.injectTestDependency(NotificationEntryManager.class, mNotificationEntryManager);
mManager = new PeopleSpaceWidgetManager(mContext);
- mManager.setAppWidgetManager(mAppWidgetManager, mIPeopleManager, mPeopleManager,
- mLauncherApps, mNotificationEntryManager, mPackageManager, true);
- mManager.attach(mListenerService);
mProvider = new PeopleSpaceWidgetProvider();
mProvider.setPeopleSpaceWidgetManager(mManager);
+ mManager.setAppWidgetManager(mAppWidgetManager, mIPeopleManager, mPeopleManager,
+ mLauncherApps, mNotificationEntryManager, mPackageManager, true, mProvider);
+ mManager.attach(mListenerService);
verify(mListenerService).addNotificationHandler(mListenerCaptor.capture());
NotificationHandler serviceListener = requireNonNull(mListenerCaptor.getValue());
@@ -842,6 +842,52 @@
any());
}
+
+ @Test
+ public void testAddThenReconfigureWidgetsUpdatesStorageCacheAndListeners()
+ throws Exception {
+ clearStorage();
+ mManager.addNewWidget(WIDGET_ID_WITH_SHORTCUT, PERSON_TILE);
+ // Check storage.
+ SharedPreferences widgetSp = mContext.getSharedPreferences(
+ String.valueOf(WIDGET_ID_WITH_SHORTCUT),
+ Context.MODE_PRIVATE);
+ assertThat(widgetSp.getString(PACKAGE_NAME, null)).isEqualTo(TEST_PACKAGE_A);
+ assertThat(widgetSp.getString(PeopleSpaceUtils.SHORTCUT_ID, null)).isEqualTo(
+ PERSON_TILE.getId());
+ assertThat(widgetSp.getInt(USER_ID, INVALID_USER_ID)).isEqualTo(0);
+ // Check listener and caching.
+ verify(mPeopleManager).registerConversationListener(eq(TEST_PACKAGE_A), anyInt(),
+ eq(SHORTCUT_ID), any(),
+ any());
+ verify(mLauncherApps, times(1)).cacheShortcuts(
+ eq(TEST_PACKAGE_A),
+ eq(Arrays.asList(SHORTCUT_ID)), eq(UserHandle.of(0)),
+ eq(LauncherApps.FLAG_CACHE_PEOPLE_TILE_SHORTCUTS));
+
+ // Reconfigure WIDGET_ID_WITH_SHORTCUT from PERSON_TILE to PERSON_TILE_WITH_SAME_URI
+ mManager.addNewWidget(WIDGET_ID_WITH_SHORTCUT, PERSON_TILE_WITH_SAME_URI);
+
+ // Check listener is removed and shortcut is uncached.
+ verify(mPeopleManager).unregisterConversationListener(any());
+ verify(mLauncherApps).uncacheShortcuts(eq(TEST_PACKAGE_A),
+ eq(Arrays.asList(PERSON_TILE.getId())), eq(UserHandle.of(0)),
+ eq(LauncherApps.FLAG_CACHE_PEOPLE_TILE_SHORTCUTS));
+ // Check reconfigured storage from TEST_PACKAGE_A to B and SHORTCUT_ID to OTHER_SHORTCUT_ID.
+ assertThat(widgetSp.getString(PACKAGE_NAME, null)).isEqualTo(TEST_PACKAGE_B);
+ assertThat(widgetSp.getString(PeopleSpaceUtils.SHORTCUT_ID, null)).isEqualTo(
+ OTHER_SHORTCUT_ID);
+ assertThat(widgetSp.getInt(USER_ID, INVALID_USER_ID)).isEqualTo(0);
+ // Check listener & caching are reconfigured to TEST_PACKAGE_B and OTHER_SHORTCUT_ID.
+ verify(mPeopleManager, times(1)).registerConversationListener(eq(TEST_PACKAGE_B), anyInt(),
+ eq(OTHER_SHORTCUT_ID), any(),
+ any());
+ verify(mLauncherApps, times(1)).cacheShortcuts(
+ eq(TEST_PACKAGE_B),
+ eq(Arrays.asList(OTHER_SHORTCUT_ID)), eq(UserHandle.of(0)),
+ eq(LauncherApps.FLAG_CACHE_PEOPLE_TILE_SHORTCUTS));
+ }
+
@Test
public void testDeleteAllWidgetsForConversationsUncachesShortcutAndRemovesListeners()
throws Exception {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
index ac160d6..3f5d220 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
@@ -30,6 +30,7 @@
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -56,6 +57,7 @@
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.DeviceControlsController;
import com.android.systemui.statusbar.policy.HotspotController;
+import com.android.systemui.statusbar.policy.WalletController;
import com.android.systemui.util.settings.FakeSettings;
import com.android.systemui.util.settings.SecureSettings;
@@ -95,7 +97,8 @@
@Mock private ManagedProfileController mManagedProfileController;
@Mock private NightDisplayListener mNightDisplayListener;
@Mock private ReduceBrightColorsController mReduceBrightColorsController;
- @Mock private DeviceControlsController mDeviceControlsController;;
+ @Mock private DeviceControlsController mDeviceControlsController;
+ @Mock private WalletController mWalletController;
@Mock(answer = Answers.RETURNS_SELF)
private AutoAddTracker.Builder mAutoAddTrackerBuilder;
@Mock private Context mUserContext;
@@ -142,6 +145,7 @@
CastController castController,
ReduceBrightColorsController reduceBrightColorsController,
DeviceControlsController deviceControlsController,
+ WalletController walletController,
@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {
return new AutoTileManager(context, autoAddTrackerBuilder, mQsTileHost,
Handler.createAsync(TestableLooper.get(this).getLooper()),
@@ -153,6 +157,7 @@
castController,
reduceBrightColorsController,
deviceControlsController,
+ walletController,
isReduceBrightColorsAvailable);
}
@@ -160,7 +165,7 @@
return createAutoTileManager(context, mAutoAddTrackerBuilder, mHotspotController,
mDataSaverController, mManagedProfileController, mNightDisplayListener,
mCastController, mReduceBrightColorsController, mDeviceControlsController,
- mIsReduceBrightColorsAvailable);
+ mWalletController, mIsReduceBrightColorsAvailable);
}
@Test
@@ -175,10 +180,11 @@
CastController cC = mock(CastController.class);
ReduceBrightColorsController rBC = mock(ReduceBrightColorsController.class);
DeviceControlsController dCC = mock(DeviceControlsController.class);
+ WalletController wC = mock(WalletController.class);
AutoTileManager manager =
createAutoTileManager(mock(Context.class), builder, hC, dSC, mPC, nDS, cC, rBC,
- dCC, true);
+ dCC, wC, true);
verify(tracker, never()).initialize();
verify(hC, never()).addCallback(any());
@@ -188,6 +194,7 @@
verify(cC, never()).addCallback(any());
verify(rBC, never()).addCallback(any());
verify(dCC, never()).setCallback(any());
+ verify(wC, never()).getWalletPosition();
assertNull(manager.getSecureSettingForKey(TEST_SETTING));
assertNull(manager.getSecureSettingForKey(TEST_SETTING_COMPONENT));
}
@@ -240,6 +247,8 @@
inOrderDevices.verify(mDeviceControlsController).removeCallback();
inOrderDevices.verify(mDeviceControlsController).setCallback(any());
+ verify(mWalletController, times(2)).getWalletPosition();
+
SecureSetting setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
assertEquals(USER + 1, setting.getCurrentUser());
assertTrue(setting.isListening());
@@ -288,6 +297,8 @@
inOrderDevices.verify(mDeviceControlsController).removeCallback();
inOrderDevices.verify(mDeviceControlsController).setCallback(any());
+ verify(mWalletController, times(2)).getWalletPosition();
+
SecureSetting setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
assertEquals(USER + 1, setting.getCurrentUser());
assertFalse(setting.isListening());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
index 7d052b9..cebf8be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
@@ -39,6 +39,7 @@
import android.hardware.biometrics.BiometricSourceType;
import android.os.PowerManager;
import android.os.UserManager;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.DisplayMetrics;
@@ -98,6 +99,8 @@
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.time.FakeSystemClock;
import com.android.wm.shell.animation.FlingAnimationUtils;
import org.junit.Before;
@@ -235,6 +238,8 @@
private UiEventLogger mUiEventLogger;
@Mock
private LockIconViewController mLockIconViewController;
+ @Mock
+ private QuickAccessWalletClient mQuickAccessWalletClient;
private SysuiStatusBarStateController mStatusBarStateController;
private NotificationPanelViewController mNotificationPanelViewController;
@@ -339,7 +344,9 @@
mNotificationShadeDepthController,
mAmbientState,
mLockIconViewController,
- mFeatureFlags);
+ mFeatureFlags,
+ mQuickAccessWalletClient,
+ new FakeExecutor(new FakeSystemClock()));
mNotificationPanelViewController.initDependencies(
mStatusBar,
mNotificationShelfController);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/WalletControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/WalletControllerImplTest.kt
new file mode 100644
index 0000000..dbc2e347
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/WalletControllerImplTest.kt
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy
+
+import android.service.quickaccesswallet.QuickAccessWalletClient
+import android.testing.AndroidTestingRunner
+
+import androidx.test.filters.SmallTest
+
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.QS_PRIORITY_POSITION
+
+import com.google.common.truth.Truth.assertThat
+
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when`
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class WalletControllerImplTest : SysuiTestCase() {
+
+ @Mock
+ private lateinit var quickAccessWalletClient: QuickAccessWalletClient
+
+ private lateinit var controller: WalletController
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+
+ controller = WalletControllerImpl(quickAccessWalletClient)
+ }
+
+ @Test
+ fun testResultIsNullWhenNoServiceAvailable() {
+ `when`(quickAccessWalletClient.isWalletServiceAvailable()).thenReturn(false)
+ assertThat(controller.getWalletPosition()).isNull()
+ }
+
+ @Test
+ fun testResultIsIntWhenServiceAvailable() {
+ `when`(quickAccessWalletClient.isWalletServiceAvailable()).thenReturn(true)
+ assertThat(controller.getWalletPosition()).isEqualTo(QS_PRIORITY_POSITION)
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
index ddf0537..ddf39d1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
@@ -57,6 +57,8 @@
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.util.settings.SecureSettings;
+import com.google.common.util.concurrent.MoreExecutors;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -201,18 +203,61 @@
}
@Test
- public void onWallpaperColorsChanged_defersUntilSetupIsCompleted() {
+ public void onWallpaperColorsChanged_firstEventBeforeUserSetup_shouldBeAccepted() {
+ // By default, on setup() we make this controller return that the user finished setup
+ // wizard. This test on the other hand, is testing the setup flow.
reset(mDeviceProvisionedController);
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
Color.valueOf(Color.BLUE), null);
mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM);
+ verify(mThemeOverlayApplier).applyCurrentUserOverlays(any(), any(), anyInt(), any());
+ }
+
+ @Test
+ public void onWallpaperColorsChanged_defersUntilSetupIsCompleted_ifHasColors() {
+ mDeviceProvisionedController = mock(DeviceProvisionedController.class);
+ mThemeOverlayApplier = mock(ThemeOverlayApplier.class);
+ mWallpaperManager = mock(WallpaperManager.class);
+
+ // Assume we have some wallpaper colors at boot.
+ when(mWallpaperManager.getWallpaperColors(anyInt()))
+ .thenReturn(new WallpaperColors(Color.valueOf(Color.GRAY), null, null));
+
+ Executor executor = MoreExecutors.directExecutor();
+ mThemeOverlayController = new ThemeOverlayController(null /* context */,
+ mBroadcastDispatcher, mBgHandler, executor, executor, mThemeOverlayApplier,
+ mSecureSettings, mWallpaperManager, mUserManager, mDeviceProvisionedController,
+ mUserTracker, mDumpManager, mFeatureFlags) {
+ @Nullable
+ @Override
+ protected FabricatedOverlay getOverlay(int color, int type) {
+ FabricatedOverlay overlay = mock(FabricatedOverlay.class);
+ when(overlay.getIdentifier())
+ .thenReturn(new OverlayIdentifier(Integer.toHexString(color | 0xff000000)));
+ return overlay;
+ }
+ };
+ mThemeOverlayController.start();
+ verify(mWallpaperManager).addOnColorsChangedListener(mColorsListener.capture(), eq(null),
+ eq(UserHandle.USER_ALL));
+ verify(mDeviceProvisionedController).addCallback(mDeviceProvisionedListener.capture());
+
+ // Colors were applied during controller initialization.
+ verify(mThemeOverlayApplier).applyCurrentUserOverlays(any(), any(), anyInt(), any());
+ clearInvocations(mThemeOverlayApplier);
+
+ WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
+ Color.valueOf(Color.BLUE), null);
+ mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM);
+
+ // Defers event because we already have initial colors.
verify(mThemeOverlayApplier, never())
.applyCurrentUserOverlays(any(), any(), anyInt(), any());
+ // Then event happens after setup phase is over.
when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(true);
mDeviceProvisionedListener.getValue().onUserSetupChanged();
-
verify(mThemeOverlayApplier).applyCurrentUserOverlays(any(), any(), anyInt(), any());
}
diff --git a/services/Android.bp b/services/Android.bp
index 25b270e..ad1406c 100644
--- a/services/Android.bp
+++ b/services/Android.bp
@@ -7,6 +7,22 @@
default_applicable_licenses: ["frameworks_base_license"],
}
+// Defaults for platform code that runs inside system_server
+java_defaults {
+ name: "platform_service_defaults",
+ plugins: ["error_prone_android_framework"],
+ errorprone: {
+ javacflags: [
+ // "-Xep:AndroidFrameworkBinderIdentity:ERROR",
+ "-Xep:AndroidFrameworkCompatChange:ERROR",
+ // "-Xep:AndroidFrameworkUid:ERROR",
+ // NOTE: only enable to generate local patchfiles
+ // "-XepPatchChecks:refaster:frameworks/base/errorprone/refaster/EfficientXml.java.refaster",
+ // "-XepPatchLocation:/tmp/refaster/",
+ ],
+ },
+}
+
filegroup {
name: "services-main-sources",
srcs: [
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 9539494..d9cc4b4 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -9910,7 +9910,7 @@
}
for (final UserHandle ui : users) {
// Add the rules for all users as this policy is device wide.
- uids.get(pref).add(UserHandle.getUid(ui, uid));
+ uids.get(pref).add(ui.getUid(uid));
}
} catch (PackageManager.NameNotFoundException e) {
// Although this may seem like an error scenario, it is ok that uninstalled
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index f591802..0c785da 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -363,6 +363,12 @@
users = ArrayUtils.appendInt(users, userId);
invalidateIsUserUnlockedCache();
}
+ public void appendAll(int[] userIds) {
+ for (int userId : userIds) {
+ users = ArrayUtils.appendInt(users, userId);
+ }
+ invalidateIsUserUnlockedCache();
+ }
public void remove(int userId) {
users = ArrayUtils.removeInt(users, userId);
invalidateIsUserUnlockedCache();
@@ -1099,6 +1105,10 @@
}
try {
+ // Reset vold to tear down existing disks/volumes and start from
+ // a clean state. Exception: already-unlocked user storage will
+ // remain unlocked and is not affected by the reset.
+ //
// TODO(b/135341433): Remove cautious logging when FUSE is stable
Slog.i(TAG, "Resetting vold...");
mVold.reset();
@@ -1113,7 +1123,7 @@
mStoraged.onUserStarted(userId);
}
if (mIsAutomotive) {
- restoreAllUnlockedUsers(userManager, users, systemUnlockedUsers);
+ restoreSystemUnlockedUsers(userManager, users, systemUnlockedUsers);
}
mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing);
mStorageManagerInternal.onReset(mVold);
@@ -1123,7 +1133,7 @@
}
}
- private void restoreAllUnlockedUsers(UserManager userManager, List<UserInfo> allUsers,
+ private void restoreSystemUnlockedUsers(UserManager userManager, List<UserInfo> allUsers,
int[] systemUnlockedUsers) throws Exception {
Arrays.sort(systemUnlockedUsers);
UserManager.invalidateIsUserUnlockedCache();
@@ -1146,6 +1156,31 @@
}
}
+ // If vold knows that some users have their storage unlocked already (which
+ // can happen after a "userspace reboot"), then add those users to
+ // mLocalUnlockedUsers. Do this right away and don't wait until
+ // PHASE_BOOT_COMPLETED, since the system may unlock users before then.
+ private void restoreLocalUnlockedUsers() {
+ final int[] userIds;
+ try {
+ userIds = mVold.getUnlockedUsers();
+ } catch (Exception e) {
+ Slog.e(TAG, "Failed to get unlocked users from vold", e);
+ return;
+ }
+ if (!ArrayUtils.isEmpty(userIds)) {
+ Slog.d(TAG, "CE storage for users " + Arrays.toString(userIds)
+ + " is already unlocked");
+ synchronized (mLock) {
+ // Append rather than replace, just in case we're actually
+ // reconnecting to vold after it crashed and was restarted, in
+ // which case things will be the other way around --- we'll know
+ // about the unlocked users but vold won't.
+ mLocalUnlockedUsers.appendAll(userIds);
+ }
+ }
+ }
+
private void onUnlockUser(int userId) {
Slog.d(TAG, "onUnlockUser " + userId);
@@ -1947,6 +1982,7 @@
connectVold();
}, DateUtils.SECOND_IN_MILLIS);
} else {
+ restoreLocalUnlockedUsers();
onDaemonConnected();
}
}
@@ -3233,19 +3269,24 @@
+ " hasSecret: " + (secret != null));
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
+ if (isUserKeyUnlocked(userId)) {
+ Slog.d(TAG, "User " + userId + "'s CE storage is already unlocked");
+ return;
+ }
+
if (isFsEncrypted) {
- // When a user has secure lock screen, require secret to actually unlock.
- // This check is mostly in place for emulation mode.
- if (StorageManager.isFileEncryptedEmulatedOnly() &&
- mLockPatternUtils.isSecure(userId) && ArrayUtils.isEmpty(secret)) {
- throw new IllegalStateException("Secret required to unlock secure user " + userId);
+ // When a user has a secure lock screen, a secret is required to
+ // unlock the key, so don't bother trying to unlock it without one.
+ // This prevents misleading error messages from being logged. This
+ // is also needed for emulated FBE to behave like native FBE.
+ if (mLockPatternUtils.isSecure(userId) && ArrayUtils.isEmpty(secret)) {
+ Slog.d(TAG, "Not unlocking user " + userId
+ + "'s CE storage yet because a secret is needed");
+ return;
}
try {
mVold.unlockUserKey(userId, serialNumber, encodeBytes(token),
encodeBytes(secret));
- } catch (ServiceSpecificException sse) {
- Slog.d(TAG, "Expected if the user has not unlocked the device.", sse);
- return;
} catch (Exception e) {
Slog.wtf(TAG, e);
return;
@@ -3267,6 +3308,11 @@
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
+ if (!isUserKeyUnlocked(userId)) {
+ Slog.d(TAG, "User " + userId + "'s CE storage is already locked");
+ return;
+ }
+
try {
mVold.lockUserKey(userId);
} catch (Exception e) {
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index c7f2f43..50040e2 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -34,7 +34,6 @@
import static android.os.PowerWhitelistManager.REASON_DENIED;
import static android.os.PowerWhitelistManager.REASON_DEVICE_DEMO_MODE;
import static android.os.PowerWhitelistManager.REASON_DEVICE_OWNER;
-import static android.os.PowerWhitelistManager.REASON_EXEMPTED_PACKAGE;
import static android.os.PowerWhitelistManager.REASON_FGS_BINDING;
import static android.os.PowerWhitelistManager.REASON_INSTR_BACKGROUND_ACTIVITY_PERMISSION;
import static android.os.PowerWhitelistManager.REASON_INSTR_BACKGROUND_FGS_PERMISSION;
@@ -289,13 +288,6 @@
static final long FGS_BG_START_RESTRICTION_CHANGE_ID = 170668199L;
/**
- * If set to false for a package, the system will *not* exempt it from FGS-BG-start,
- * even if it's in {#code ActiveServices.sFgsBgStartExemptedPackages}.
- */
- @ChangeId
- static final long FGS_BG_START_USE_EXEMPTION_LIST_CHANGE_ID = 175801883;
-
- /**
* If a service can not become foreground service due to BG-FGS-launch restriction or other
* reasons, throws an IllegalStateException.
*/
@@ -303,56 +295,6 @@
@EnabledSince(targetSdkVersion = android.os.Build.VERSION_CODES.S)
static final long FGS_START_EXCEPTION_CHANGE_ID = 174041399L;
- /**
- * Special allowlist that contains packages that are allowed to start FGS even if they target S,
- * without using START_FOREGROUND_SERVICES_FROM_BACKGROUND.
- *
- * Note: we exempt FGS starts if either the "callee" or "caller" match any of the emempted
- * packages. This means:
- * - Exempted apps could call Context.startForegroundService() for services owned by any other
- * apps.
- * - Any apps could call Context.startForegroundService() for services owned by any exempted
- * apps.
- * And the call would succeed.
- */
- private static final ArraySet<String> sFgsBgStartExemptedPackages = new ArraySet<>();
-
- private static final ArrayList<String> sFgsBgStartExemptedPackagePrefixes = new ArrayList<>();
-
- /**
- * List of packages that are exempted from the FGS restriction *for now*.
- *
- * STOPSHIP(/b/176844961) Remove it. Also update ActiveServicesTest.java.
- */
- private static final String[] FGS_BG_START_EXEMPTED_PACKAGES = {
- "com.google.pixel.exo.bootstrapping",
- };
-
- /**
- * List of packages that are exempted from the FGS restriction *for now*. We also allow
- * any packages that
- *
- * STOPSHIP(/b/176844961) Remove it. Also update ActiveServicesTest.java.
- */
- private static final String[] FGS_BG_START_EXEMPTED_PACKAGES_PREFIXED_ALLOWED = {
- "com.android.webview",
- "com.google.android.webview",
- "com.android.chrome",
- "com.google.android.apps.chrome",
- "com.chrome",
- };
-
- static {
- for (String s : FGS_BG_START_EXEMPTED_PACKAGES) {
- sFgsBgStartExemptedPackages.add(s);
- }
-
- for (String s : FGS_BG_START_EXEMPTED_PACKAGES_PREFIXED_ALLOWED) {
- sFgsBgStartExemptedPackages.add(s); // Add it for an exact match.
- sFgsBgStartExemptedPackagePrefixes.add(s + "."); // Add it for an prefix match.
- }
- }
-
final Runnable mLastAnrDumpClearer = new Runnable() {
@Override public void run() {
synchronized (mAm) {
@@ -5857,16 +5799,6 @@
}
}
- // NOTE this should always be the last check.
- if (ret == REASON_DENIED) {
- if (isPackageExemptedFromFgsRestriction(callingPackage, callingUid)) {
- ret = REASON_EXEMPTED_PACKAGE;
- } else if (targetService != null && isPackageExemptedFromFgsRestriction(
- targetService.appInfo.packageName, targetService.appInfo.uid)) {
- ret = REASON_EXEMPTED_PACKAGE;
- }
- }
-
if (ret == REASON_DENIED) {
final boolean isCompanionApp = mAm.mInternal.isAssociatedCompanionApp(
UserHandle.getUserId(callingUid), callingUid);
@@ -5889,28 +5821,6 @@
return ret;
}
- @VisibleForTesting
- static boolean isPackageExemptedFromFgsRestriction(String packageName, int uid) {
- boolean exempted = false;
- if (sFgsBgStartExemptedPackages.contains(packageName)) {
- exempted = true;
- } else {
- for (String pkg : sFgsBgStartExemptedPackagePrefixes) {
- if (packageName.startsWith(pkg)) {
- exempted = true;
- break;
- }
- }
- }
- if (!exempted) {
- return false; // Package isn't exempted.
- }
- // Allow exempted packages to be subject to the restriction using this compat ID.
- // (so that, for example, the webview developer will be able to test the restriction
- // locally.)
- return CompatChanges.isChangeEnabled(FGS_BG_START_USE_EXEMPTION_LIST_CHANGE_ID, uid);
- }
-
private static boolean isFgsBgStart(@ReasonCode int code) {
return code != REASON_PROC_STATE_PERSISTENT
&& code != REASON_PROC_STATE_PERSISTENT_UI
diff --git a/services/core/java/com/android/server/connectivity/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
index e952ee5..28f208b 100644
--- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java
+++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
@@ -286,7 +286,7 @@
for (UserHandle user : users) {
if (user == null) continue;
- list.add(UserHandle.getUid(user, app.getKey()));
+ list.add(user.getUid(app.getKey()));
}
}
try {
@@ -555,7 +555,7 @@
final UserHandle handle = UserHandle.of(userId);
if (handle == null) continue;
- final int uid = UserHandle.getUid(handle, appId);
+ final int uid = handle.getUid(appId);
if (range.contains(uid)) {
result.add(uid);
}
diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java
index 4bbd338..67779a2 100644
--- a/services/core/java/com/android/server/display/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/DisplayModeDirector.java
@@ -27,6 +27,7 @@
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.display.DisplayManager;
+import android.hardware.fingerprint.IUdfpsHbmListener;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
@@ -40,14 +41,17 @@
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import android.view.Display;
import android.view.DisplayInfo;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.BackgroundThread;
+import com.android.server.LocalServices;
import com.android.server.display.utils.AmbientFilter;
import com.android.server.display.utils.AmbientFilterFactory;
+import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.utils.DeviceConfigInterface;
import java.io.PrintWriter;
@@ -93,6 +97,7 @@
private final AppRequestObserver mAppRequestObserver;
private final SettingsObserver mSettingsObserver;
private final DisplayObserver mDisplayObserver;
+ private final UdfpsObserver mUdfpsObserver;
private final DeviceConfigInterface mDeviceConfig;
private final DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
@@ -133,6 +138,7 @@
mSettingsObserver = new SettingsObserver(context, handler);
mDisplayObserver = new DisplayObserver(context, handler);
mBrightnessObserver = new BrightnessObserver(context, handler);
+ mUdfpsObserver = new UdfpsObserver();
mDeviceConfigDisplaySettings = new DeviceConfigDisplaySettings();
mDeviceConfig = injector.getDeviceConfig();
mAlwaysRespectAppRequest = false;
@@ -149,6 +155,7 @@
mSettingsObserver.observe();
mDisplayObserver.observe();
mBrightnessObserver.observe(sensorManager);
+ mUdfpsObserver.observe();
synchronized (mLock) {
// We may have a listener already registered before the call to start, so go ahead and
// notify them to pick up our newly initialized state.
@@ -545,6 +552,7 @@
mSettingsObserver.dumpLocked(pw);
mAppRequestObserver.dumpLocked(pw);
mBrightnessObserver.dumpLocked(pw);
+ mUdfpsObserver.dumpLocked(pw);
}
}
@@ -566,7 +574,6 @@
}
final SparseArray<Vote> votes = getOrCreateVotesByDisplay(displayId);
- Vote currentVote = votes.get(priority);
if (vote != null) {
votes.put(priority, vote);
} else {
@@ -649,6 +656,11 @@
return mSettingsObserver;
}
+ @VisibleForTesting
+ UdfpsObserver getUdpfsObserver() {
+ return mUdfpsObserver;
+ }
+
@VisibleForTesting
DesiredDisplayModeSpecs getDesiredDisplayModeSpecsWithInjectedFpsSettings(
@@ -928,11 +940,15 @@
// LOW_POWER_MODE force display to [0, 60HZ] if Settings.Global.LOW_POWER_MODE is on.
public static final int PRIORITY_LOW_POWER_MODE = 6;
+ // The Under-Display Fingerprint Sensor (UDFPS) needs the refresh rate to be locked in order
+ // to function, so this needs to be the highest priority of all votes.
+ public static final int PRIORITY_UDFPS = 7;
+
// Whenever a new priority is added, remember to update MIN_PRIORITY, MAX_PRIORITY, and
// APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF, as well as priorityToString.
public static final int MIN_PRIORITY = PRIORITY_DEFAULT_REFRESH_RATE;
- public static final int MAX_PRIORITY = PRIORITY_LOW_POWER_MODE;
+ public static final int MAX_PRIORITY = PRIORITY_UDFPS;
// The cutoff for the app request refresh rate range. Votes with priorities lower than this
// value will not be considered when constructing the app request refresh rate range.
@@ -989,6 +1005,9 @@
return "PRIORITY_USER_SETTING_PEAK_REFRESH_RATE";
case PRIORITY_LOW_POWER_MODE:
return "PRIORITY_LOW_POWER_MODE";
+ case PRIORITY_UDFPS:
+ return "PRIORITY_UDFPS";
+
default:
return Integer.toString(priority);
}
@@ -1162,7 +1181,7 @@
}
final class AppRequestObserver {
- private SparseArray<Display.Mode> mAppRequestedModeByDisplay;
+ private final SparseArray<Display.Mode> mAppRequestedModeByDisplay;
AppRequestObserver() {
mAppRequestedModeByDisplay = new SparseArray<>();
@@ -1196,7 +1215,6 @@
updateVoteLocked(displayId, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE, refreshRateVote);
updateVoteLocked(displayId, Vote.PRIORITY_APP_REQUEST_SIZE, sizeVote);
- return;
}
private Display.Mode findModeByIdLocked(int displayId, int modeId) {
@@ -1328,7 +1346,8 @@
private SensorManager mSensorManager;
private Sensor mLightSensor;
- private LightSensorEventListener mLightSensorListener = new LightSensorEventListener();
+ private final LightSensorEventListener mLightSensorListener =
+ new LightSensorEventListener();
// Take it as low brightness before valid sensor data comes
private float mAmbientLux = -1.0f;
private AmbientFilter mAmbientFilter;
@@ -1559,8 +1578,7 @@
mLightSensorListener.dumpLocked(pw);
if (mAmbientFilter != null) {
- IndentingPrintWriter ipw = new IndentingPrintWriter(pw);
- ipw.setIndent(" ");
+ IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ");
mAmbientFilter.dump(ipw);
}
}
@@ -1907,7 +1925,7 @@
return false;
}
- private Runnable mInjectSensorEventRunnable = new Runnable() {
+ private final Runnable mInjectSensorEventRunnable = new Runnable() {
@Override
public void run() {
long now = SystemClock.uptimeMillis();
@@ -1926,6 +1944,83 @@
}
}
+ private class UdfpsObserver extends IUdfpsHbmListener.Stub {
+ private final SparseBooleanArray mLocalHbmEnabled = new SparseBooleanArray();
+ private final SparseBooleanArray mGlobalHbmEnabled = new SparseBooleanArray();
+
+ public void observe() {
+ StatusBarManagerInternal statusBar =
+ LocalServices.getService(StatusBarManagerInternal.class);
+ statusBar.setUdfpsHbmListener(this);
+ }
+
+ @Override
+ public void onHbmEnabled(int hbmType, int displayId) {
+ synchronized (mLock) {
+ updateHbmStateLocked(hbmType, displayId, true /*enabled*/);
+ }
+ }
+
+ @Override
+ public void onHbmDisabled(int hbmType, int displayId) {
+ synchronized (mLock) {
+ updateHbmStateLocked(hbmType, displayId, false /*enabled*/);
+ }
+ }
+
+ private void updateHbmStateLocked(int hbmType, int displayId, boolean enabled) {
+ switch (hbmType) {
+ case UdfpsObserver.LOCAL_HBM:
+ mLocalHbmEnabled.put(displayId, enabled);
+ break;
+ case UdfpsObserver.GLOBAL_HBM:
+ mGlobalHbmEnabled.put(displayId, enabled);
+ break;
+ default:
+ Slog.w(TAG, "Unknown HBM type reported. Ignoring.");
+ return;
+ }
+ updateVoteLocked(displayId);
+ }
+
+ private void updateVoteLocked(int displayId) {
+ final Vote vote;
+ if (mGlobalHbmEnabled.get(displayId)) {
+ vote = Vote.forRefreshRates(60f, 60f);
+ } else if (mLocalHbmEnabled.get(displayId)) {
+ Display.Mode[] modes = mSupportedModesByDisplay.get(displayId);
+ float maxRefreshRate = 0f;
+ for (Display.Mode mode : modes) {
+ if (mode.getRefreshRate() > maxRefreshRate) {
+ maxRefreshRate = mode.getRefreshRate();
+ }
+ }
+ vote = Vote.forRefreshRates(maxRefreshRate, maxRefreshRate);
+ } else {
+ vote = null;
+ }
+
+ DisplayModeDirector.this.updateVoteLocked(displayId, Vote.PRIORITY_UDFPS, vote);
+ }
+
+ void dumpLocked(PrintWriter pw) {
+ pw.println(" UdfpsObserver");
+ pw.println(" mLocalHbmEnabled: ");
+ for (int i = 0; i < mLocalHbmEnabled.size(); i++) {
+ final int displayId = mLocalHbmEnabled.keyAt(i);
+ final String enabled = mLocalHbmEnabled.valueAt(i) ? "enabled" : "disabled";
+ pw.println(" Display " + displayId + ": " + enabled);
+ }
+ pw.println(" mGlobalHbmEnabled: ");
+ for (int i = 0; i < mGlobalHbmEnabled.size(); i++) {
+ final int displayId = mGlobalHbmEnabled.keyAt(i);
+ final String enabled = mGlobalHbmEnabled.valueAt(i) ? "enabled" : "disabled";
+ pw.println(" Display " + displayId + ": " + enabled);
+ }
+
+ }
+ }
+
private class DeviceConfigDisplaySettings implements DeviceConfig.OnPropertiesChangedListener {
public DeviceConfigDisplaySettings() {
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
index 6fbb26c..cb05f8f 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
@@ -319,7 +319,7 @@
Setting powerControlMode = registerSetting(
HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE,
- R.bool.config_cecSendStandbyOnSleep_userConfigurable);
+ R.bool.config_cecPowerControlMode_userConfigurable);
powerControlMode.registerValue(HdmiControlManager.POWER_CONTROL_MODE_TV,
R.bool.config_cecPowerControlModeTv_allowed,
R.bool.config_cecPowerControlModeTv_default);
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index 202b315..5d61fef 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -1769,10 +1769,17 @@
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
if (userManager != null) {
int currentUserId = ActivityManager.getCurrentUser();
- List<UserInfo> profiles = userManager.getProfiles(currentUserId);
+ List<UserInfo> unlockedProfiles = new ArrayList<>();
+ for (UserInfo user : userManager.getProfiles(currentUserId)) {
+ // Dependencies throw if we call APIs on a locked user. Only include
+ // unlocked users.
+ if (userManager.isUserUnlocked(user.id)) {
+ unlockedProfiles.add(user);
+ }
+ }
synchronized (mCurrentProfiles) {
mCurrentProfiles.clear();
- for (UserInfo user : profiles) {
+ for (UserInfo user : unlockedProfiles) {
mCurrentProfiles.put(user.id, user);
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index bd442bd..3ddfe6c 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -212,6 +212,7 @@
import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.provider.DeviceConfig;
@@ -1076,23 +1077,8 @@
(status & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0;
if (disableNotificationEffects(null) != null) {
// cancel whatever's going on
- final long identity = Binder.clearCallingIdentity();
- try {
- final IRingtonePlayer player = mAudioManager.getRingtonePlayer();
- if (player != null) {
- player.stopAsync();
- }
- } catch (RemoteException e) {
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
-
- final long identity2 = Binder.clearCallingIdentity();
- try {
- mVibrator.cancel();
- } finally {
- Binder.restoreCallingIdentity(identity2);
- }
+ clearSoundLocked();
+ clearVibrateLocked();
}
}
}
@@ -1582,7 +1568,10 @@
mVibrateNotificationKey = null;
final long identity = Binder.clearCallingIdentity();
try {
- mVibrator.cancel();
+ // Stop all vibrations with usage of class alarm (ringtone, alarm, notification usages).
+ int usageFilter =
+ VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK;
+ mVibrator.cancel(usageFilter);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -1791,6 +1780,8 @@
}
} else if (action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) {
int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ // Work profile user may now be locked. Refresh cache.
+ mUserProfiles.updateCache(context);
if (userHandle >= 0) {
cancelAllNotificationsInt(MY_UID, MY_PID, null, null, 0, 0, true, userHandle,
REASON_PROFILE_TURNED_OFF, null);
@@ -8301,29 +8292,12 @@
// sound
if (canceledKey.equals(mSoundNotificationKey)) {
- mSoundNotificationKey = null;
- final long identity = Binder.clearCallingIdentity();
- try {
- final IRingtonePlayer player = mAudioManager.getRingtonePlayer();
- if (player != null) {
- player.stopAsync();
- }
- } catch (RemoteException e) {
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
+ clearSoundLocked();
}
// vibrate
if (canceledKey.equals(mVibrateNotificationKey)) {
- mVibrateNotificationKey = null;
- final long identity = Binder.clearCallingIdentity();
- try {
- mVibrator.cancel();
- }
- finally {
- Binder.restoreCallingIdentity(identity);
- }
+ clearVibrateLocked();
}
// light
diff --git a/services/core/java/com/android/server/os/SchedulingPolicyService.java b/services/core/java/com/android/server/os/SchedulingPolicyService.java
index c3ed7d7..e53c436 100644
--- a/services/core/java/com/android/server/os/SchedulingPolicyService.java
+++ b/services/core/java/com/android/server/os/SchedulingPolicyService.java
@@ -92,6 +92,12 @@
prio > PRIORITY_MAX || Process.getThreadGroupLeader(tid) != pid) {
return PackageManager.PERMISSION_DENIED;
}
+ // If the calling UID is audio server, and this call is not for an app,
+ // then it must be for the audio HAL. Validate the UID of the thread.
+ if (Binder.getCallingUid() == Process.AUDIOSERVER_UID && !isForApp
+ && Process.getUidForPid(tid) != Process.AUDIOSERVER_UID) {
+ return PackageManager.PERMISSION_DENIED;
+ }
if (Binder.getCallingUid() != Process.BLUETOOTH_UID) {
try {
// make good use of our CAP_SYS_NICE capability
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 6802ae0..5b333e1 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -273,6 +273,11 @@
static final int VERY_LONG_PRESS_POWER_NOTHING = 0;
static final int VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
+ // must match: config_keyChordPowerVolumeUp in config.xml
+ static final int POWER_VOLUME_UP_BEHAVIOR_NOTHING = 0;
+ static final int POWER_VOLUME_UP_BEHAVIOR_MUTE = 1;
+ static final int POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS = 2;
+
// must match: config_doublePressOnPowerBehavior in config.xml
static final int MULTI_PRESS_POWER_NOTHING = 0;
static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
@@ -489,6 +494,7 @@
int mLongPressOnBackBehavior;
int mShortPressOnSleepBehavior;
int mShortPressOnWindowBehavior;
+ int mPowerVolUpBehavior;
boolean mHasSoftInput = false;
boolean mHapticTextHandleEnabled;
boolean mUseTvRouting;
@@ -729,6 +735,9 @@
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS), false, this,
UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.KEY_CHORD_POWER_VOLUME_UP), false, this,
+ UserHandle.USER_ALL);
+ resolver.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.POWER_BUTTON_SUPPRESSION_DELAY_AFTER_GESTURE_WAKE), false, this,
UserHandle.USER_ALL);
updateSettings();
@@ -1268,6 +1277,10 @@
mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
}
+ private void cancelGlobalActionsAction() {
+ mHandler.removeMessages(MSG_DISPATCH_SHOW_GLOBAL_ACTIONS);
+ }
+
boolean isDeviceProvisioned() {
return Settings.Global.getInt(
mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) != 0;
@@ -1836,20 +1849,48 @@
}
});
+ // Volume up + power can either be the "ringer toggle chord" or as another way to
+ // launch GlobalActions. This behavior can change at runtime so we must check behavior
+ // inside the TwoKeysCombinationRule.
mKeyCombinationManager.addRule(
new TwoKeysCombinationRule(KEYCODE_VOLUME_UP, KEYCODE_POWER) {
@Override
boolean preCondition() {
- return mRingerToggleChord != VOLUME_HUSH_OFF;
+ switch (mPowerVolUpBehavior) {
+ case POWER_VOLUME_UP_BEHAVIOR_MUTE:
+ return mRingerToggleChord != VOLUME_HUSH_OFF;
+ default:
+ return true;
+ }
}
@Override
void execute() {
- mPowerKeyHandled = true;
- interceptRingerToggleChord();
+ switch (mPowerVolUpBehavior) {
+ case POWER_VOLUME_UP_BEHAVIOR_MUTE:
+ // no haptic feedback here since
+ interceptRingerToggleChord();
+ mPowerKeyHandled = true;
+ break;
+ case POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS:
+ performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
+ "Power + Volume Up - Global Actions");
+ showGlobalActions();
+ mPowerKeyHandled = true;
+ break;
+ default:
+ break;
+ }
}
@Override
void cancel() {
- cancelPendingRingerToggleChordAction();
+ switch (mPowerVolUpBehavior) {
+ case POWER_VOLUME_UP_BEHAVIOR_MUTE:
+ cancelPendingRingerToggleChordAction();
+ break;
+ case POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS:
+ cancelGlobalActionsAction();
+ break;
+ }
}
});
@@ -2055,6 +2096,10 @@
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS,
mContext.getResources().getInteger(
com.android.internal.R.integer.config_veryLongPressOnPowerBehavior));
+ mPowerVolUpBehavior = Settings.Global.getInt(resolver,
+ Settings.Global.KEY_CHORD_POWER_VOLUME_UP,
+ mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_keyChordPowerVolumeUp));
}
if (updateRotation) {
updateRotation(true);
@@ -5230,6 +5275,9 @@
pw.print("mTriplePressOnPowerBehavior=");
pw.println(multiPressOnPowerBehaviorToString(mTriplePressOnPowerBehavior));
pw.print(prefix);
+ pw.print("mPowerVolUpBehavior=");
+ pw.println(powerVolumeUpBehaviorToString(mPowerVolUpBehavior));
+ pw.print(prefix);
pw.print("mShortPressOnSleepBehavior=");
pw.println(shortPressOnSleepBehaviorToString(mShortPressOnSleepBehavior));
pw.print(prefix);
@@ -5403,6 +5451,19 @@
}
}
+ private static String powerVolumeUpBehaviorToString(int behavior) {
+ switch (behavior) {
+ case POWER_VOLUME_UP_BEHAVIOR_NOTHING:
+ return "POWER_VOLUME_UP_BEHAVIOR_NOTHING";
+ case POWER_VOLUME_UP_BEHAVIOR_MUTE:
+ return "POWER_VOLUME_UP_BEHAVIOR_MUTE";
+ case POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS:
+ return "POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS";
+ default:
+ return Integer.toString(behavior);
+ }
+ }
+
private static String multiPressOnPowerBehaviorToString(int behavior) {
switch (behavior) {
case MULTI_PRESS_POWER_NOTHING:
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 970420a..a436e6b 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -18,6 +18,7 @@
import android.annotation.Nullable;
import android.app.ITransientNotificationCallback;
+import android.hardware.fingerprint.IUdfpsHbmListener;
import android.os.Bundle;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
@@ -166,4 +167,11 @@
* boolean)
*/
void setNavigationBarLumaSamplingEnabled(int displayId, boolean enable);
+
+ /**
+ * Sets the system-wide listener for UDFPS HBM status changes.
+ *
+ * @see com.android.internal.statusbar.IStatusBar#setUdfpsHbmListener(IUdfpsHbmListener)
+ */
+ void setUdfpsHbmListener(IUdfpsHbmListener listener);
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index c4f5575..e37edeb 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -107,15 +107,15 @@
private final Context mContext;
- private Handler mHandler = new Handler();
+ private final Handler mHandler = new Handler();
private NotificationDelegate mNotificationDelegate;
private volatile IStatusBar mBar;
- private ArrayMap<String, StatusBarIcon> mIcons = new ArrayMap<>();
+ private final ArrayMap<String, StatusBarIcon> mIcons = new ArrayMap<>();
// for disabling the status bar
private final ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>();
private GlobalActionsProvider.GlobalActionsListener mGlobalActionListener;
- private IBinder mSysUiVisToken = new Binder();
+ private final IBinder mSysUiVisToken = new Binder();
private final Object mLock = new Object();
private final DeathRecipient mDeathRecipient = new DeathRecipient();
@@ -123,7 +123,9 @@
private int mCurrentUserId;
private boolean mTracingEnabled;
- private SparseArray<UiState> mDisplayUiState = new SparseArray<>();
+ private final SparseArray<UiState> mDisplayUiState = new SparseArray<>();
+ @GuardedBy("mLock")
+ private IUdfpsHbmListener mUdfpsHbmListener;
private class DeathRecipient implements IBinder.DeathRecipient {
public void binderDied() {
@@ -598,6 +600,18 @@
} catch (RemoteException ex) { }
}
}
+
+ @Override
+ public void setUdfpsHbmListener(IUdfpsHbmListener listener) {
+ synchronized (mLock) {
+ mUdfpsHbmListener = listener;
+ }
+ if (mBar != null) {
+ try {
+ mBar.setUdfpsHbmListener(listener);
+ } catch (RemoteException ex) { }
+ }
+ }
};
private final GlobalActionsProvider mGlobalActionsProvider = new GlobalActionsProvider() {
@@ -1204,6 +1218,14 @@
if (mGlobalActionListener == null) return;
mGlobalActionListener.onGlobalActionsAvailableChanged(mBar != null);
});
+ // If StatusBarService dies, system_server doesn't get killed with it, so we need to make
+ // sure the UDFPS listener is refreshed as well. Deferring to the handler just so to avoid
+ // making registerStatusBar re-entrant.
+ mHandler.post(() -> {
+ synchronized (mLock) {
+ setUdfpsHbmListener(mUdfpsHbmListener);
+ }
+ });
}
/**
diff --git a/services/core/java/com/android/server/utils/ManagedApplicationService.java b/services/core/java/com/android/server/utils/ManagedApplicationService.java
index c103e0e..4cf0e32 100644
--- a/services/core/java/com/android/server/utils/ManagedApplicationService.java
+++ b/services/core/java/com/android/server/utils/ManagedApplicationService.java
@@ -304,7 +304,8 @@
}
if (mSettingsAction != null) {
intent.putExtra(Intent.EXTRA_CLIENT_INTENT,
- PendingIntent.getActivity(mContext, 0, new Intent(mSettingsAction), PendingIntent.FLAG_MUTABLE_UNAUDITED));
+ PendingIntent.getActivity(mContext, 0, new Intent(mSettingsAction),
+ PendingIntent.FLAG_IMMUTABLE));
}
mConnection = new ServiceConnection() {
diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
index 83ac36f..1d55ba4 100644
--- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
+++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
@@ -23,6 +23,7 @@
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
+import static android.net.ipsec.ike.exceptions.IkeProtocolException.ERROR_TYPE_AUTHENTICATION_FAILED;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_CONFIG_ERROR;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_INTERNAL_ERROR;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_NETWORK_ERROR;
@@ -57,7 +58,6 @@
import android.net.ipsec.ike.IkeSessionCallback;
import android.net.ipsec.ike.IkeSessionConfiguration;
import android.net.ipsec.ike.IkeSessionParams;
-import android.net.ipsec.ike.exceptions.AuthenticationFailedException;
import android.net.ipsec.ike.exceptions.IkeException;
import android.net.ipsec.ike.exceptions.IkeInternalException;
import android.net.ipsec.ike.exceptions.IkeProtocolException;
@@ -1051,12 +1051,21 @@
sessionLostWithoutCallback(token, exception);
}
+ private static boolean isIkeAuthFailure(@NonNull Exception exception) {
+ if (!(exception instanceof IkeProtocolException)) {
+ return false;
+ }
+
+ return ((IkeProtocolException) exception).getErrorType()
+ == ERROR_TYPE_AUTHENTICATION_FAILED;
+ }
+
private void notifyStatusCallbackForSessionClosed(@NonNull Exception exception) {
final int errorCode;
final String exceptionClass;
final String exceptionMessage;
- if (exception instanceof AuthenticationFailedException) {
+ if (isIkeAuthFailure(exception)) {
errorCode = VCN_ERROR_CODE_CONFIG_ERROR;
exceptionClass = exception.getClass().getName();
exceptionMessage = exception.getMessage();
diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
index 5d2b1b1..06a5077 100644
--- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java
+++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
@@ -383,7 +383,7 @@
}
@Override // Binder call
- public void cancelVibrate(IBinder token) {
+ public void cancelVibrate(int usageFilter, IBinder token) {
Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "cancelVibrate");
try {
mContext.enforceCallingOrSelfPermission(
@@ -392,16 +392,24 @@
synchronized (mLock) {
if (DEBUG) {
- Slog.d(TAG, "Canceling vibration.");
+ Slog.d(TAG, "Canceling vibration");
}
final long ident = Binder.clearCallingIdentity();
try {
- mNextVibration = null;
+ if (mNextVibration != null
+ && shouldCancelVibration(mNextVibration.getVibration(),
+ usageFilter, token)) {
+ mNextVibration = null;
+ }
if (mCurrentVibration != null
- && mCurrentVibration.getVibration().token == token) {
+ && shouldCancelVibration(mCurrentVibration.getVibration(),
+ usageFilter, token)) {
mCurrentVibration.cancel();
}
- if (mCurrentExternalVibration != null) {
+ if (mCurrentExternalVibration != null
+ && shouldCancelVibration(
+ mCurrentExternalVibration.externalVibration.getVibrationAttributes(),
+ usageFilter)) {
mCurrentExternalVibration.end(Vibration.Status.CANCELLED);
mVibratorManagerRecords.record(mCurrentExternalVibration);
mCurrentExternalVibration.externalVibration.mute();
@@ -693,6 +701,30 @@
}
/**
+ * Return true if the vibration has the same token and usage belongs to given usage class.
+ *
+ * @param vib The ongoing or pending vibration to be cancelled.
+ * @param usageFilter The vibration usages to be cancelled, any bitwise combination of
+ * VibrationAttributes.USAGE_* values.
+ * @param token The binder token to identify the vibration origin. Only vibrations
+ * started with the same token can be cancelled with it.
+ */
+ private boolean shouldCancelVibration(Vibration vib, int usageFilter, IBinder token) {
+ return (vib.token == token) && shouldCancelVibration(vib.attrs, usageFilter);
+ }
+
+ /**
+ * Return true if the external vibration usage belongs to given usage class.
+ *
+ * @param attrs The attributes of an ongoing or pending vibration to be cancelled.
+ * @param usageFilter The vibration usages to be cancelled, any bitwise combination of
+ * VibrationAttributes.USAGE_* values.
+ */
+ private boolean shouldCancelVibration(VibrationAttributes attrs, int usageFilter) {
+ return (usageFilter & attrs.getUsage()) == attrs.getUsage();
+ }
+
+ /**
* Check which mode should be set for a vibration with given {@code uid}, {@code opPkg} and
* {@code attrs}. This will return one of the AppOpsManager.MODE_*.
*/
@@ -1501,7 +1533,7 @@
}
private int runCancel() {
- cancelVibrate(mToken);
+ cancelVibrate(/* usageFilter= */ -1, mToken);
return 0;
}
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index e0724fd..5b4e6a0 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7430,6 +7430,10 @@
getPid(), info.applicationInfo.uid) == PERMISSION_GRANTED) {
return false;
}
+ // Do not sandbox to activity window bounds if the feature is disabled.
+ if (mDisplayContent != null && !mDisplayContent.sandboxDisplayApis()) {
+ return false;
+ }
// Max bounds should be sandboxed where an activity is letterboxed (activity bounds will be
// smaller than task bounds).
if (!matchParentBounds()) {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 74e90e0..4b735c2 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -348,6 +348,14 @@
int mBaseDisplayWidth = 0;
int mBaseDisplayHeight = 0;
boolean mIsSizeForced = false;
+
+ /**
+ * Overridden display size and metrics to activity window bounds. Set via
+ * "adb shell wm set-sandbox-display-apis". Default to true, since only disable for debugging.
+ * @see WindowManagerService#setSandboxDisplayApis(int, boolean)
+ */
+ private boolean mSandboxDisplayApis = true;
+
/**
* Overridden display density for current user. Initialized with {@link #mInitialDisplayDensity}
* but can be set from Settings or via shell command "adb shell wm density".
@@ -5736,6 +5744,21 @@
return true;
}
+ /**
+ * Sets if Display APIs should be sandboxed to the activity window bounds.
+ */
+ void setSandboxDisplayApis(boolean sandboxDisplayApis) {
+ mSandboxDisplayApis = sandboxDisplayApis;
+ }
+
+ /**
+ * Returns {@code true} is Display APIs should be sandboxed to the activity window bounds,
+ * {@code false} otherwise. Default to true, unless set for debugging purposes.
+ */
+ boolean sandboxDisplayApis() {
+ return mSandboxDisplayApis;
+ }
+
/** The entry for proceeding to handle {@link #mFixedRotationLaunchingApp}. */
class FixedRotationTransitionListener extends WindowManagerInternal.AppTransitionListener {
diff --git a/services/core/java/com/android/server/wm/FadeRotationAnimationController.java b/services/core/java/com/android/server/wm/FadeRotationAnimationController.java
index 5ee6928..b14d4a1 100644
--- a/services/core/java/com/android/server/wm/FadeRotationAnimationController.java
+++ b/services/core/java/com/android/server/wm/FadeRotationAnimationController.java
@@ -39,6 +39,9 @@
private final Runnable mFrozenTimeoutRunnable;
private final WindowToken mNavBarToken;
+ /** A runnable which gets called when the {@link #show()} is called. */
+ private Runnable mOnShowRunnable;
+
public FadeRotationAnimationController(DisplayContent displayContent) {
super(displayContent);
mService = displayContent.mWmService;
@@ -81,6 +84,10 @@
if (mFrozenTimeoutRunnable != null) {
mService.mH.removeCallbacks(mFrozenTimeoutRunnable);
}
+ if (mOnShowRunnable != null) {
+ mOnShowRunnable.run();
+ mOnShowRunnable = null;
+ }
}
/**
@@ -115,6 +122,10 @@
return token == mNavBarToken || mTargetWindowTokens.contains(token);
}
+ void setOnShowRunnable(Runnable onShowRunnable) {
+ mOnShowRunnable = onShowRunnable;
+ }
+
@Override
public Animation getFadeInAnimation() {
if (mFrozenTimeoutRunnable != null) {
diff --git a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
index 567b6c2..b94bc5b 100644
--- a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
+++ b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
@@ -390,7 +390,7 @@
final Bundle options = getOptionsForWindowContext(rootDisplayAreaId);
final IWindowManager wms = WindowManagerGlobal.getWindowManagerService();
try {
- wms.registerWindowContextListener(mWindowContext.getWindowContextToken(),
+ wms.attachWindowContextToDisplayArea(mWindowContext.getWindowContextToken(),
IMMERSIVE_MODE_CONFIRMATION_WINDOW_TYPE, mContext.getDisplayId(), options);
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index c1d5b5c..129a6ce 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -669,21 +669,33 @@
}
navWindow.setSurfaceTranslationY(0);
- if (navWindow.mToken == null) {
+ final WindowToken navToken = navWindow.mToken;
+ if (navToken == null) {
return;
}
final SurfaceControl.Transaction t = mDisplayContent.getPendingTransaction();
- final WindowContainer parent = navWindow.mToken.getParent();
- // Reparent the SurfaceControl of nav bar token back.
- t.reparent(navWindow.mToken.getSurfaceControl(), parent.getSurfaceControl());
-
+ final WindowContainer parent = navToken.getParent();
if (animate) {
- // Run fade-in animation to show navigation bar back to bottom of the display.
- final NavBarFadeAnimationController controller =
+ final NavBarFadeAnimationController navBarFadeAnimationController =
mDisplayContent.getDisplayPolicy().getNavBarFadeAnimationController();
- if (controller != null) {
- controller.fadeWindowToken(true);
+ final Runnable fadeInAnim = () -> {
+ // Reparent the SurfaceControl of nav bar token back.
+ t.reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
+ // Run fade-in animation to show navigation bar back to bottom of the display.
+ if (navBarFadeAnimationController != null) {
+ navBarFadeAnimationController.fadeWindowToken(true);
+ }
+ };
+ final FadeRotationAnimationController fadeRotationAnimationController =
+ mDisplayContent.getFadeRotationAnimationController();
+ if (fadeRotationAnimationController != null) {
+ fadeRotationAnimationController.setOnShowRunnable(fadeInAnim);
+ } else {
+ fadeInAnim.run();
}
+ } else {
+ // Reparent the SurfaceControl of nav bar token back.
+ t.reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
}
}
diff --git a/services/core/java/com/android/server/wm/WindowContextListenerController.java b/services/core/java/com/android/server/wm/WindowContextListenerController.java
index 8b08314..5e75996 100644
--- a/services/core/java/com/android/server/wm/WindowContextListenerController.java
+++ b/services/core/java/com/android/server/wm/WindowContextListenerController.java
@@ -103,7 +103,11 @@
listener.unregister();
}
- boolean assertCallerCanRemoveListener(IBinder clientToken, boolean callerCanManageAppTokens,
+ /**
+ * Verifies if the caller is allowed to do the operation to the listener specified by
+ * {@code clientToken}.
+ */
+ boolean assertCallerCanModifyListener(IBinder clientToken, boolean callerCanManageAppTokens,
int callingUid) {
final WindowContextListenerImpl listener = mListeners.get(clientToken);
if (listener == null) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index e5ec3c9..43dceed 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -56,6 +56,7 @@
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
+import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
@@ -2474,29 +2475,12 @@
win.mResizedWhileGone = false;
}
- // We must always send the latest {@link MergedConfiguration}, regardless of whether we
- // have already reported it. The client might not have processed the previous value yet
- // and needs process it before handling the corresponding window frame. the variable
- // {@code mergedConfiguration} is an out parameter that will be passed back to the
- // client over IPC and checked there.
- // Note: in the cases where the window is tied to an activity, we should not send a
- // configuration update when the window has requested to be hidden. Doing so can lead
- // to the client erroneously accepting a configuration that would have otherwise caused
- // an activity restart. We instead hand back the last reported
- // {@link MergedConfiguration}.
- if (shouldRelayout && (!win.shouldCheckTokenVisibleRequested()
- || win.mToken.isVisibleRequested())) {
- win.getMergedConfiguration(mergedConfiguration);
- } else {
- win.getLastReportedMergedConfiguration(mergedConfiguration);
- }
-
- win.setLastReportedMergedConfiguration(mergedConfiguration);
+ win.fillClientWindowFramesAndConfiguration(outFrames, mergedConfiguration,
+ false /* useLatestConfig */, shouldRelayout);
// Set resize-handled here because the values are sent back to the client.
win.onResizeHandled();
- win.fillClientWindowFrames(outFrames);
outInsetsState.set(win.getCompatInsetsState(), win.isClientLocal());
if (DEBUG) {
Slog.v(TAG_WM, "Relayout given client " + client.asBinder()
@@ -2717,30 +2701,19 @@
}
}
- /**
- * Registers a listener for a {@link android.window.WindowContext} to subscribe to configuration
- * changes of a {@link DisplayArea}.
- *
- * @param clientToken the window context's token
- * @param type Window type of the window context
- * @param displayId The display associated with the window context
- * @param options A bundle used to pass window-related options and choose the right DisplayArea
- *
- * @return {@code true} if the listener was registered successfully.
- */
@Override
- public boolean registerWindowContextListener(IBinder clientToken, int type, int displayId,
+ public boolean attachWindowContextToDisplayArea(IBinder clientToken, int type, int displayId,
Bundle options) {
final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
- "registerWindowContextListener", false /* printLog */);
+ "attachWindowContextToDisplayArea", false /* printLog */);
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
final DisplayContent dc = mRoot.getDisplayContentOrCreate(displayId);
if (dc == null) {
- ProtoLog.w(WM_ERROR, "registerWindowContextListener: trying to add listener to"
- + " a non-existing display:%d", displayId);
+ ProtoLog.w(WM_ERROR, "attachWindowContextToDisplayArea: trying to attach"
+ + " to a non-existing display:%d", displayId);
return false;
}
// TODO(b/155340867): Investigate if we still need roundedCornerOverlay after
@@ -2757,14 +2730,50 @@
}
@Override
- public void unregisterWindowContextListener(IBinder clientToken) {
+ public void attachWindowContextToWindowToken(IBinder clientToken, IBinder token) {
final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
- "unregisterWindowContextListener", false /* printLog */);
+ "attachWindowContextToWindowToken", false /* printLog */);
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
- if (!mWindowContextListenerController.assertCallerCanRemoveListener(clientToken,
+ final WindowToken windowToken = mRoot.getWindowToken(token);
+ if (windowToken == null) {
+ ProtoLog.w(WM_ERROR, "Then token:%s is invalid. It might be "
+ + "removed", token);
+ return;
+ }
+ final int type = mWindowContextListenerController.getWindowType(clientToken);
+ if (type == INVALID_WINDOW_TYPE) {
+ throw new IllegalArgumentException("The clientToken:" + clientToken
+ + " should have been attached.");
+ }
+ if (type != windowToken.windowType) {
+ throw new IllegalArgumentException("The WindowToken's type should match"
+ + " the created WindowContext's type. WindowToken's type is "
+ + windowToken.windowType + ", while WindowContext's is " + type);
+ }
+ if (!mWindowContextListenerController.assertCallerCanModifyListener(clientToken,
+ callerCanManageAppTokens, callingUid)) {
+ return;
+ }
+ mWindowContextListenerController.registerWindowContainerListener(clientToken,
+ windowToken, callingUid, windowToken.windowType, windowToken.mOptions);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(origId);
+ }
+ }
+
+ @Override
+ public void detachWindowContextFromWindowContainer(IBinder clientToken) {
+ final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
+ "detachWindowContextFromWindowContainer", false /* printLog */);
+ final int callingUid = Binder.getCallingUid();
+ final long origId = Binder.clearCallingIdentity();
+ try {
+ synchronized (mGlobalLock) {
+ if (!mWindowContextListenerController.assertCallerCanModifyListener(clientToken,
callerCanManageAppTokens, callingUid)) {
return;
}
@@ -5571,6 +5580,25 @@
}
}
+ void setSandboxDisplayApis(int displayId, boolean sandboxDisplayApis) {
+ if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
+ }
+
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized (mGlobalLock) {
+ final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
+ if (displayContent != null) {
+ displayContent.setSandboxDisplayApis(sandboxDisplayApis);
+ }
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
/** The global settings only apply to default display. */
private boolean applyForcedPropertiesForDefaultDisplay() {
boolean changed = false;
diff --git a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
index 9d016d1..5942f34 100644
--- a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
+++ b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
@@ -143,6 +143,8 @@
return runSetLetterboxBackgroundWallpaperDarkScrimAlpha(pw);
case "get-letterbox-background-wallpaper-dark-scrim-alpha":
return runGetLetterboxBackgroundWallpaperDarkScrimAlpha(pw);
+ case "set-sandbox-display-apis":
+ return runSandboxDisplayApis(pw);
case "reset":
return runReset(pw);
case "disable-blur":
@@ -353,6 +355,37 @@
return 0;
}
+ /**
+ * Override display size and metrics to reflect the DisplayArea of the calling activity.
+ */
+ private int runSandboxDisplayApis(PrintWriter pw) throws RemoteException {
+ int displayId = Display.DEFAULT_DISPLAY;
+ String arg = getNextArgRequired();
+ if ("-d".equals(arg)) {
+ displayId = Integer.parseInt(getNextArgRequired());
+ arg = getNextArgRequired();
+ }
+
+ final boolean sandboxDisplayApis;
+ switch (arg) {
+ case "true":
+ case "1":
+ sandboxDisplayApis = true;
+ break;
+ case "false":
+ case "0":
+ sandboxDisplayApis = false;
+ break;
+ default:
+ getErrPrintWriter().println("Error: expecting true, 1, false, 0, but we "
+ + "get " + arg);
+ return -1;
+ }
+
+ mInternal.setSandboxDisplayApis(displayId, sandboxDisplayApis);
+ return 0;
+ }
+
private int runDismissKeyguard(PrintWriter pw) throws RemoteException {
mInterface.dismissKeyguard(null /* callback */, null /* message */);
return 0;
@@ -855,6 +888,9 @@
// set-letterbox-background-wallpaper-dark-scrim-alpha
mInternal.resetLetterboxBackgroundWallpaperDarkScrimAlpha();
+ // set-sandbox-display-apis
+ mInternal.setSandboxDisplayApis(displayId, /* sandboxDisplayApis= */ true);
+
pw.println("Reset all settings for displayId=" + displayId);
return 0;
}
@@ -918,6 +954,10 @@
pw.println(" letterbox background. If alpha < 0 or >= 1 both it and");
pw.println(" R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha are ignored and ");
pw.println(" 0.0 (transparent) is used instead.");
+ pw.println(" set-sandbox-display-apis [true|1|false|0]");
+ pw.println(" Sets override of Display APIs getRealSize / getRealMetrics to reflect ");
+ pw.println(" DisplayArea of the activity, or the window bounds if in letterbox or");
+ pw.println(" Size Compat Mode.");
pw.println(" reset [-d DISPLAY_ID]");
pw.println(" Reset all override settings.");
if (!IS_USER) {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index ee9c8ff..46d923b 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -2916,21 +2916,6 @@
return processConfig;
}
- void getMergedConfiguration(MergedConfiguration outConfiguration) {
- final Configuration globalConfig = getProcessGlobalConfiguration();
- final Configuration overrideConfig = getMergedOverrideConfiguration();
- outConfiguration.setConfiguration(globalConfig, overrideConfig);
- }
-
- void setLastReportedMergedConfiguration(MergedConfiguration config) {
- mLastReportedConfiguration.setTo(config);
- mLastConfigReportedToClient = true;
- }
-
- void getLastReportedMergedConfiguration(MergedConfiguration config) {
- config.setTo(mLastReportedConfiguration);
- }
-
private Configuration getLastReportedConfiguration() {
return mLastReportedConfiguration.getMergedConfiguration();
}
@@ -3709,7 +3694,17 @@
return wpc != null && wpc.registeredForDisplayAreaConfigChanges();
}
- void fillClientWindowFrames(ClientWindowFrames outFrames) {
+ /**
+ * Fills the given window frames and merged configuration for the client.
+ *
+ * @param outFrames The frames that will be sent to the client.
+ * @param outMergedConfiguration The configuration that will be sent to the client.
+ * @param useLatestConfig Whether to use the latest configuration.
+ * @param relayoutVisible Whether to consider visibility to use the latest configuration.
+ */
+ void fillClientWindowFramesAndConfiguration(ClientWindowFrames outFrames,
+ MergedConfiguration outMergedConfiguration, boolean useLatestConfig,
+ boolean relayoutVisible) {
outFrames.frame.set(mWindowFrames.mCompatFrame);
outFrames.displayFrame.set(mWindowFrames.mDisplayFrame);
if (mInvGlobalScale != 1.0f && hasCompatScale()) {
@@ -3734,6 +3729,23 @@
final DisplayInfo displayInfo = getDisplayInfo();
backdropFrame.set(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight);
}
+
+ // Note: in the cases where the window is tied to an activity, we should not send a
+ // configuration update when the window has requested to be hidden. Doing so can lead to
+ // the client erroneously accepting a configuration that would have otherwise caused an
+ // activity restart. We instead hand back the last reported {@link MergedConfiguration}.
+ if (useLatestConfig || (relayoutVisible && (shouldCheckTokenVisibleRequested()
+ || mToken.isVisibleRequested()))) {
+ final Configuration globalConfig = getProcessGlobalConfiguration();
+ final Configuration overrideConfig = getMergedOverrideConfiguration();
+ outMergedConfiguration.setConfiguration(globalConfig, overrideConfig);
+ if (outMergedConfiguration != mLastReportedConfiguration) {
+ mLastReportedConfiguration.setTo(outMergedConfiguration);
+ }
+ } else {
+ outMergedConfiguration.setTo(mLastReportedConfiguration);
+ }
+ mLastConfigReportedToClient = true;
}
void reportResized() {
@@ -3761,9 +3773,6 @@
ProtoLog.i(WM_DEBUG_ORIENTATION, "Resizing %s WITH DRAW PENDING", this);
}
- getMergedConfiguration(mLastReportedConfiguration);
- mLastConfigReportedToClient = true;
-
final boolean reportOrientation = mReportOrientationChanged;
// Always reset these states first, so if {@link IWindow#resized} fails, this
// window won't be added to {@link WindowManagerService#mResizingWindows} and set
@@ -3773,18 +3782,20 @@
mDragResizingChangeReported = true;
mWindowFrames.clearReportResizeHints();
- final MergedConfiguration mergedConfiguration = mLastReportedConfiguration;
+ fillClientWindowFramesAndConfiguration(mClientWindowFrames, mLastReportedConfiguration,
+ true /* useLatestConfig */, false /* relayoutVisible */);
final boolean reportDraw = drawPending || useBLASTSync() || !mRedrawForSyncReported;
final boolean forceRelayout = reportOrientation || isDragResizeChanged() || !mRedrawForSyncReported;
- final int displayId = getDisplayId();
- fillClientWindowFrames(mClientWindowFrames);
+ final DisplayContent displayContent = getDisplayContent();
+ final boolean alwaysConsumeSystemBars =
+ displayContent.getDisplayPolicy().areSystemBarsForcedShownLw(this);
+ final int displayId = displayContent.getDisplayId();
markRedrawForSyncReported();
try {
- mClient.resized(mClientWindowFrames, reportDraw, mergedConfiguration, forceRelayout,
- getDisplayContent().getDisplayPolicy().areSystemBarsForcedShownLw(this),
- displayId);
+ mClient.resized(mClientWindowFrames, reportDraw, mLastReportedConfiguration,
+ forceRelayout, alwaysConsumeSystemBars, displayId);
if (drawPending && reportOrientation && mOrientationChanging) {
mOrientationChangeRedrawRequestTime = SystemClock.elapsedRealtime();
ProtoLog.v(WM_DEBUG_ORIENTATION,
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 66e640d6..1ba57fd 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -11698,9 +11698,18 @@
@Override
public boolean isLockTaskPermitted(String pkg) {
- final int userHandle = mInjector.userHandleGetCallingUserId();
+ // Check policy-exempt apps first, as it doesn't require the lock
+ if (listPolicyExemptAppsUnchecked().contains(pkg)) {
+ if (VERBOSE_LOG) {
+ Slogf.v(LOG_TAG, "isLockTaskPermitted(%s): returning true for policy-exempt app",
+ pkg);
+ }
+ return true;
+ }
+
+ final int userId = mInjector.userHandleGetCallingUserId();
synchronized (getLockObject()) {
- return getUserData(userHandle).mLockTaskPackages.contains(pkg);
+ return getUserData(userId).mLockTaskPackages.contains(pkg);
}
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ActiveServicesTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ActiveServicesTest.java
deleted file mode 100644
index 0633ab9..0000000
--- a/services/tests/mockingservicestests/src/com/android/server/am/ActiveServicesTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.server.am;
-
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
-import static com.android.server.am.ActiveServices.FGS_BG_START_USE_EXEMPTION_LIST_CHANGE_ID;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-
-import android.app.compat.CompatChanges;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoSession;
-import org.mockito.quality.Strictness;
-
-
-
-@RunWith(AndroidJUnit4.class)
-public class ActiveServicesTest {
-
- private MockitoSession mMockingSession;
-
- @Before
- public void setUp() {
- mMockingSession = mockitoSession()
- .initMocks(this)
- .strictness(Strictness.LENIENT)
- .mockStatic(CompatChanges.class)
- .startMocking();
- }
-
- @After
- public void tearDown() {
- if (mMockingSession != null) {
- mMockingSession.finishMocking();
- }
- }
-
- private void checkPackageExempted(String pkg, int uid, boolean expected) {
- assertEquals("Package=" + pkg + " uid=" + uid,
- expected, ActiveServices.isPackageExemptedFromFgsRestriction(pkg, uid));
- }
-
- @Test
- public void isPackageExemptedFromFgsRestriction() {
- // Compat changes are enabled by default.
- when(CompatChanges.isChangeEnabled(anyLong(), anyInt())).thenReturn(true);
-
- checkPackageExempted("", 1, false);
- checkPackageExempted("abc", 1, false);
- checkPackageExempted("com.random", 1, false);
-
- // This package is exempted but not its subpackages.
- checkPackageExempted("com.google.pixel.exo.bootstrapping", 1, true);
- checkPackageExempted("com.google.pixel.exo.bootstrapping.subpackage", 1, false);
-
- // Subpackages are also exempted.
- checkPackageExempted("com.android.webview", 1, true);
- checkPackageExempted("com.android.webview.beta", 1, true);
- checkPackageExempted("com.chrome", 1, true);
- checkPackageExempted("com.chrome.canary", 1, true);
-
- checkPackageExempted("com.android.webviewx", 1, false);
-
- // Now toggle the compat ID for a specific UID.
- when(CompatChanges.isChangeEnabled(FGS_BG_START_USE_EXEMPTION_LIST_CHANGE_ID, 10))
- .thenReturn(false);
- // Exempted package, but compat id is disabled for the UID.
- checkPackageExempted("com.android.webview", 10, false);
-
- // Exempted package, but compat id is still enabled for the UID.
- checkPackageExempted("com.android.webview", 11, true);
- }
-}
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java
index c8099e2..cda659f 100644
--- a/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java
@@ -27,10 +27,13 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -45,6 +48,7 @@
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.display.DisplayManager;
+import android.hardware.fingerprint.IUdfpsHbmListener;
import android.os.Handler;
import android.os.Looper;
import android.provider.DeviceConfig;
@@ -61,9 +65,11 @@
import com.android.internal.util.Preconditions;
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.internal.util.test.FakeSettingsProviderRule;
+import com.android.server.LocalServices;
import com.android.server.display.DisplayModeDirector.BrightnessObserver;
import com.android.server.display.DisplayModeDirector.DesiredDisplayModeSpecs;
import com.android.server.display.DisplayModeDirector.Vote;
+import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.testutils.FakeDeviceConfigInterface;
import org.junit.Before;
@@ -71,6 +77,7 @@
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;
@@ -95,6 +102,8 @@
private Handler mHandler;
@Rule
public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+ @Mock
+ public StatusBarManagerInternal mStatusBarMock;
@Before
public void setUp() throws Exception {
@@ -104,6 +113,9 @@
when(mContext.getContentResolver()).thenReturn(resolver);
mInjector = new FakesInjector();
mHandler = new Handler(Looper.getMainLooper());
+
+ LocalServices.removeServiceForTest(StatusBarManagerInternal.class);
+ LocalServices.addService(StatusBarManagerInternal.class, mStatusBarMock);
}
private DisplayModeDirector createDirectorFromRefreshRateArray(
@@ -338,7 +350,7 @@
void verifyBrightnessObserverCall(DisplayModeDirector director, float minFps, float peakFps,
float defaultFps, float brightnessObserverMin, float brightnessObserverMax) {
- BrightnessObserver brightnessObserver = Mockito.mock(BrightnessObserver.class);
+ BrightnessObserver brightnessObserver = mock(BrightnessObserver.class);
director.injectBrightnessObserver(brightnessObserver);
director.getDesiredDisplayModeSpecsWithInjectedFpsSettings(minFps, peakFps, defaultFps);
verify(brightnessObserver)
@@ -581,7 +593,7 @@
listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 20 /*lux*/));
Vote vote = director.getVote(Display.DEFAULT_DISPLAY, PRIORITY_FLICKER);
- assertVoteForRefreshRateLocked(vote, 90 /*fps*/);
+ assertVoteForRefreshRate(vote, 90 /*fps*/);
setBrightness(125);
// Sensor reads 1000 lux,
@@ -611,7 +623,7 @@
ArgumentCaptor<SensorEventListener> listenerCaptor =
ArgumentCaptor.forClass(SensorEventListener.class);
- Mockito.verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1)))
+ verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1)))
.registerListener(
listenerCaptor.capture(),
eq(lightSensor),
@@ -631,7 +643,7 @@
listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 9000));
vote = director.getVote(Display.DEFAULT_DISPLAY, PRIORITY_FLICKER);
- assertVoteForRefreshRateLocked(vote, 60 /*fps*/);
+ assertVoteForRefreshRate(vote, 60 /*fps*/);
}
@Test
@@ -654,21 +666,21 @@
director.start(sensorManager);
ArgumentCaptor<SensorEventListener> listenerCaptor =
ArgumentCaptor.forClass(SensorEventListener.class);
- Mockito.verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1)))
+ verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1)))
.registerListener(
listenerCaptor.capture(),
eq(lightSensor),
anyInt(),
any(Handler.class));
- // Dispaly state changed from On to Doze
+ // Display state changed from On to Doze
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_DOZE);
- Mockito.verify(sensorManager)
+ verify(sensorManager)
.unregisterListener(listenerCaptor.capture());
- // Dispaly state changed from Doze to On
+ // Display state changed from Doze to On
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
- Mockito.verify(sensorManager, times(2))
+ verify(sensorManager, times(2))
.registerListener(
listenerCaptor.capture(),
eq(lightSensor),
@@ -677,7 +689,42 @@
}
- private void assertVoteForRefreshRateLocked(Vote vote, float refreshRate) {
+ @Test
+ public void testUdfpsListenerGetsRegistered() {
+ DisplayModeDirector director =
+ createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0);
+ verify(mStatusBarMock, never()).setUdfpsHbmListener(any());
+
+ director.start(createMockSensorManager());
+ verify(mStatusBarMock).setUdfpsHbmListener(eq(director.getUdpfsObserver()));
+ }
+
+ @Test
+ public void testGbhmVotesFor60hz() throws Exception {
+ DisplayModeDirector director =
+ createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0);
+ director.start(createMockSensorManager());
+ ArgumentCaptor<IUdfpsHbmListener> captor =
+ ArgumentCaptor.forClass(IUdfpsHbmListener.class);
+ verify(mStatusBarMock).setUdfpsHbmListener(captor.capture());
+ IUdfpsHbmListener hbmListener = captor.getValue();
+
+ // Should be no vote initially
+ Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_UDFPS);
+ assertNull(vote);
+
+ // Enabling GHBM votes for 60hz
+ hbmListener.onHbmEnabled(IUdfpsHbmListener.GLOBAL_HBM, DISPLAY_ID);
+ vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_UDFPS);
+ assertVoteForRefreshRate(vote, 60.f);
+
+ // Disabling GHBM removes the vote
+ hbmListener.onHbmDisabled(IUdfpsHbmListener.GLOBAL_HBM, DISPLAY_ID);
+ vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_UDFPS);
+ assertNull(vote);
+ }
+
+ private void assertVoteForRefreshRate(Vote vote, float refreshRate) {
assertThat(vote).isNotNull();
final DisplayModeDirector.RefreshRateRange expectedRange =
new DisplayModeDirector.RefreshRateRange(refreshRate, refreshRate);
@@ -787,7 +834,7 @@
}
private static SensorManager createMockSensorManager(Sensor... sensors) {
- SensorManager sensorManager = Mockito.mock(SensorManager.class);
+ SensorManager sensorManager = mock(SensorManager.class);
when(sensorManager.getSensorList(anyInt())).then((invocation) -> {
List<Sensor> requestedSensors = new ArrayList<>();
int type = invocation.getArgument(0);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java
index 375704e..e2b6a99 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java
@@ -65,7 +65,7 @@
R.bool.config_cecHdmiCecVersion20_default);
doReturn(true).when(resources).getBoolean(
- R.bool.config_cecSendStandbyOnSleep_userConfigurable);
+ R.bool.config_cecPowerControlMode_userConfigurable);
doReturn(true).when(resources).getBoolean(
R.bool.config_cecPowerControlModeTv_allowed);
doReturn(true).when(resources).getBoolean(
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
index c834510..a37f94b 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
@@ -403,7 +403,7 @@
@Test
public void setStringValue_NotConfigurable() {
- setBooleanResource(R.bool.config_cecSendStandbyOnSleep_userConfigurable, false);
+ setBooleanResource(R.bool.config_cecPowerControlMode_userConfigurable, false);
HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.setStringValue(
diff --git a/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java
index 958b23f..7d86961 100644
--- a/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java
@@ -91,7 +91,7 @@
private HandlerThread mThread;
- private long mUptimeMillis;
+ private long mElapsedTime;
AppTimeLimitController.TimeLimitCallbackListener mListener =
new AppTimeLimitController.TimeLimitCallbackListener() {
@@ -116,8 +116,8 @@
}
@Override
- protected long getUptimeMillis() {
- return mUptimeMillis;
+ protected long getElapsedRealtime() {
+ return mElapsedTime;
}
@Override
@@ -1108,6 +1108,6 @@
}
private void setTime(long time) {
- mUptimeMillis = time;
+ mElapsedTime = time;
}
}
diff --git a/services/tests/servicestests/src/com/android/server/uwb/OWNERS b/services/tests/servicestests/src/com/android/server/uwb/OWNERS
new file mode 100644
index 0000000..c31a2f1
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/uwb/OWNERS
@@ -0,0 +1 @@
+include platform/frameworks/base:/core/java/android/uwb/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java b/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java
index c29593f..f659698 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java
@@ -182,7 +182,9 @@
private static VibratorInfo createVibratorInfo(VibratorInfo.FrequencyMapping frequencyMapping,
int... capabilities) {
int cap = IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0);
- return new VibratorInfo(/* id= */ 0, cap, null, null, null, /* qFactor= */ Float.NaN,
- frequencyMapping);
+ return new VibratorInfo.Builder(0)
+ .setCapabilities(cap)
+ .setFrequencyMapping(frequencyMapping)
+ .build();
}
}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
index 014bfd2..e739a76 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
@@ -76,4 +76,8 @@
@Override
public void cancel() {
}
+
+ @Override
+ public void cancel(int usageFilter) {
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java
index 2e9aad1..59370e2 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java
@@ -298,8 +298,10 @@
VibratorInfo.FrequencyMapping frequencyMapping = new VibratorInfo.FrequencyMapping(
Float.NaN, Float.NaN, Float.NaN, Float.NaN, null);
when(mNativeWrapperMock.getInfo(/* suggestedFrequencyRange= */ 100)).thenReturn(
- new VibratorInfo(VIBRATOR_ID, capabilities, null, null, null, Float.NaN,
- frequencyMapping));
+ new VibratorInfo.Builder(VIBRATOR_ID)
+ .setCapabilities(capabilities)
+ .setFrequencyMapping(frequencyMapping)
+ .build());
}
private PrebakedSegment createPrebaked(int effectId, int effectStrength) {
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
index e367b74..b4c1de1 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
@@ -234,7 +234,7 @@
CombinedVibration effect = CombinedVibration.createParallel(
VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
- service.cancelVibrate(service);
+ service.cancelVibrate(/* usageFilter= */ -1, service);
assertTrue(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
@@ -880,17 +880,42 @@
}
@Test
- public void cancelVibrate_stopsVibrating() throws Exception {
+ public void cancelVibrate_withoutUsageFilter_stopsVibrating() throws Exception {
mockVibrators(1);
VibratorManagerService service = createSystemReadyService();
- service.cancelVibrate(service);
+ service.cancelVibrate(/* usageFilter= */ -1, service);
assertFalse(service.isVibrating(1));
- vibrate(service, VibrationEffect.createOneShot(10_000, 100), ALARM_ATTRS);
+ vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), ALARM_ATTRS);
assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
- service.cancelVibrate(service);
+ service.cancelVibrate(/* usageFilter= */ -1, service);
+ assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+ }
+
+ @Test
+ public void cancelVibrate_withFilter_onlyCancelsVibrationWithFilteredUsage() throws Exception {
+ mockVibrators(1);
+ VibratorManagerService service = createSystemReadyService();
+
+ vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), ALARM_ATTRS);
+ assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+ // Vibration is not cancelled with a different usage.
+ service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
+ assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
+
+ // Vibration is not cancelled with a different usage class used as filter.
+ service.cancelVibrate(
+ VibrationAttributes.USAGE_CLASS_FEEDBACK | ~VibrationAttributes.USAGE_CLASS_MASK,
+ service);
+ assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
+
+ // Vibration is cancelled with usage class as filter.
+ service.cancelVibrate(
+ VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK,
+ service);
assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java
index ff88174..00eb0f2 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java
@@ -64,6 +64,7 @@
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
+import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.provider.Settings;
@@ -444,11 +445,14 @@
}
private void verifyStopVibrate() {
- verify(mVibrator, times(1)).cancel();
+ int alarmClassUsageFilter =
+ VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK;
+ verify(mVibrator, times(1)).cancel(eq(alarmClassUsageFilter));
}
- private void verifyNeverStopVibrate() throws RemoteException {
+ private void verifyNeverStopVibrate() {
verify(mVibrator, never()).cancel();
+ verify(mVibrator, never()).cancel(anyInt());
}
private void verifyNeverLights() {
diff --git a/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java
index 78074d6..1b9308d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java
@@ -77,7 +77,7 @@
dc.getImeContainer(), 1000 /* ownerUid */, TYPE_INPUT_METHOD_DIALOG,
null /* options */);
return true;
- }).when(wms).registerWindowContextListener(any(), eq(TYPE_INPUT_METHOD_DIALOG),
+ }).when(wms).attachWindowContextToDisplayArea(any(), eq(TYPE_INPUT_METHOD_DIALOG),
anyInt(), any());
mSecondaryDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1000).build();
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
index 7d137bc..153fd3a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
@@ -567,6 +567,37 @@
}
@Test
+ public void testFadeRotationAfterAttachAndBeforeRestore_notRestoreNavImmediately() {
+ setupForShouldAttachNavBarDuringTransition();
+ final ActivityRecord activity = createActivityRecord(mDefaultDisplay);
+ final ActivityRecord homeActivity = createHomeActivity();
+ initializeRecentsAnimationController(mController, homeActivity);
+
+ final WindowToken navToken = mDefaultDisplay.getDisplayPolicy().getNavigationBar().mToken;
+ final SurfaceControl.Transaction transaction = navToken.getPendingTransaction();
+
+ verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled(
+ mDefaultDisplay.mDisplayId, false);
+ verify(transaction).reparent(navToken.getSurfaceControl(), activity.getSurfaceControl());
+
+ final WindowContainer parent = navToken.getParent();
+ final NavBarFadeAnimationController navBarFadeAnimationController =
+ mDefaultDisplay.getDisplayPolicy().getNavBarFadeAnimationController();
+
+ FadeRotationAnimationController mockController =
+ mock(FadeRotationAnimationController.class);
+ doReturn(mockController).when(mDefaultDisplay).getFadeRotationAnimationController();
+
+ mController.cleanupAnimation(REORDER_MOVE_TO_TOP);
+ verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled(
+ mDefaultDisplay.mDisplayId, true);
+ verify(mockController).setOnShowRunnable(any());
+ verify(transaction, times(0)).reparent(navToken.getSurfaceControl(),
+ parent.getSurfaceControl());
+ verify(navBarFadeAnimationController, times(0)).fadeWindowToken(true);
+ }
+
+ @Test
public void testAttachNavBarInSplitScreenMode() {
setupForShouldAttachNavBarDuringTransition();
final ActivityRecord primary = createActivityRecordWithParentTask(mDefaultDisplay,
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 97cead1..7c2cfab 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -1360,6 +1360,31 @@
}
@Test
+ public void testSandboxDisplayApis_letterboxAppNotSandboxed() {
+ // Set up a display in landscape with an unresizable app.
+ setUpDisplaySizeWithApp(2500, 1000);
+ mActivity.mDisplayContent.setSandboxDisplayApis(false /* sandboxDisplayApis */);
+ prepareUnresizable(mActivity, 1.5f, SCREEN_ORIENTATION_LANDSCAPE);
+ assertFitted();
+
+ // Activity max bounds not be sandboxed since sandboxing is disabled.
+ assertThat(mActivity.getMaxBounds()).isEqualTo(mActivity.mDisplayContent.getBounds());
+ }
+
+ @Test
+ public void testSandboxDisplayApis_letterboxAppSandboxed() {
+ // Set up a display in landscape with an unresizable app.
+ setUpDisplaySizeWithApp(2500, 1000);
+ mActivity.mDisplayContent.setSandboxDisplayApis(true /* sandboxDisplayApis */);
+ prepareUnresizable(mActivity, 1.5f, SCREEN_ORIENTATION_LANDSCAPE);
+ assertFitted();
+
+ // Activity max bounds should be sandboxed since sandboxing is enabled.
+ assertActivityMaxBoundsSandboxed();
+ }
+
+
+ @Test
public void testTaskDisplayAreaNotFillDisplay() {
setUpDisplaySizeWithApp(1400, 2800);
final DisplayContent display = mActivity.mDisplayContent;
diff --git a/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java b/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
index bb9e24f..f3616da6c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
+++ b/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
@@ -146,12 +146,6 @@
}
@Override
- public SurfaceControl.Transaction deferTransactionUntil(SurfaceControl sc,
- SurfaceControl barrier, long frameNumber) {
- return this;
- }
-
- @Override
public SurfaceControl.Transaction reparent(SurfaceControl sc, SurfaceControl newParent) {
return this;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java
index 268969d..73b9173 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java
@@ -130,35 +130,35 @@
}
@Test
- public void testCanCallerRemoveListener_NullListener_ReturnFalse() {
- assertFalse(mController.assertCallerCanRemoveListener(mClientToken,
+ public void testAssertCallerCanModifyListener_NullListener_ReturnFalse() {
+ assertFalse(mController.assertCallerCanModifyListener(mClientToken,
true /* callerCanManagerAppTokens */, TEST_UID));
}
@Test
- public void testCanCallerRemoveListener_CanManageAppTokens_ReturnTrue() {
+ public void testAssertCallerCanModifyListener_CanManageAppTokens_ReturnTrue() {
mController.registerWindowContainerListener(mClientToken, mContainer, TEST_UID,
TYPE_APPLICATION_OVERLAY, null /* options */);
- assertTrue(mController.assertCallerCanRemoveListener(mClientToken,
+ assertTrue(mController.assertCallerCanModifyListener(mClientToken,
true /* callerCanManagerAppTokens */, ANOTHER_UID));
}
@Test
- public void testCanCallerRemoveListener_SameUid_ReturnTrue() {
+ public void testAssertCallerCanModifyListener_SameUid_ReturnTrue() {
mController.registerWindowContainerListener(mClientToken, mContainer, TEST_UID,
TYPE_APPLICATION_OVERLAY, null /* options */);
- assertTrue(mController.assertCallerCanRemoveListener(mClientToken,
+ assertTrue(mController.assertCallerCanModifyListener(mClientToken,
false /* callerCanManagerAppTokens */, TEST_UID));
}
@Test(expected = UnsupportedOperationException.class)
- public void testCanCallerRemoveListener_DifferentUid_ThrowException() {
+ public void testAssertCallerCanModifyListener_DifferentUid_ThrowException() {
mController.registerWindowContainerListener(mClientToken, mContainer, TEST_UID,
TYPE_APPLICATION_OVERLAY, null /* options */);
- mController.assertCallerCanRemoveListener(mClientToken,
+ mController.assertCallerCanModifyListener(mClientToken,
false /* callerCanManagerAppTokens */, ANOTHER_UID);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index baf072d..dd0c9e6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -21,7 +21,9 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST;
@@ -37,11 +39,15 @@
import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import android.content.pm.PackageManager;
+import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
@@ -179,4 +185,69 @@
assertThat(windowToken.getDisplayContent()).isEqualTo(mDefaultDisplay);
}
+
+ @Test
+ public void testAttachWindowContextToWindowToken_InvalidToken_EarlyReturn() {
+ spyOn(mWm.mWindowContextListenerController);
+
+ mWm.attachWindowContextToWindowToken(new Binder(), new Binder());
+
+ verify(mWm.mWindowContextListenerController, never()).getWindowType(any());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testAttachWindowContextToWindowToken_InvalidWindowType_ThrowException() {
+ spyOn(mWm.mWindowContextListenerController);
+
+ final WindowToken windowToken = createTestWindowToken(TYPE_INPUT_METHOD, mDefaultDisplay);
+ doReturn(INVALID_WINDOW_TYPE).when(mWm.mWindowContextListenerController)
+ .getWindowType(any());
+
+ mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testAttachWindowContextToWindowToken_DifferentWindowType_ThrowException() {
+ spyOn(mWm.mWindowContextListenerController);
+
+ final WindowToken windowToken = createTestWindowToken(TYPE_INPUT_METHOD, mDefaultDisplay);
+ doReturn(TYPE_APPLICATION).when(mWm.mWindowContextListenerController)
+ .getWindowType(any());
+
+ mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+ }
+
+ @Test
+ public void testAttachWindowContextToWindowToken_CallerNotValid_EarlyReturn() {
+ spyOn(mWm.mWindowContextListenerController);
+
+ final WindowToken windowToken = createTestWindowToken(TYPE_INPUT_METHOD, mDefaultDisplay);
+ doReturn(TYPE_INPUT_METHOD).when(mWm.mWindowContextListenerController)
+ .getWindowType(any());
+ doReturn(false).when(mWm.mWindowContextListenerController)
+ .assertCallerCanModifyListener(any(), anyBoolean(), anyInt());
+
+ mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+
+ verify(mWm.mWindowContextListenerController, never()).registerWindowContainerListener(
+ any(), any(), anyInt(), anyInt(), any());
+ }
+
+ @Test
+ public void testAttachWindowContextToWindowToken_CallerValid_DoRegister() {
+ spyOn(mWm.mWindowContextListenerController);
+
+ final WindowToken windowToken = createTestWindowToken(TYPE_INPUT_METHOD, mDefaultDisplay);
+ doReturn(TYPE_INPUT_METHOD).when(mWm.mWindowContextListenerController)
+ .getWindowType(any());
+ doReturn(true).when(mWm.mWindowContextListenerController)
+ .assertCallerCanModifyListener(any(), anyBoolean(), anyInt());
+
+ final IBinder clientToken = new Binder();
+ mWm.attachWindowContextToWindowToken(clientToken, windowToken.token);
+
+ verify(mWm.mWindowContextListenerController).registerWindowContainerListener(
+ eq(clientToken), eq(windowToken), anyInt(), eq(TYPE_INPUT_METHOD),
+ eq(windowToken.mOptions));
+ }
}
diff --git a/services/usage/java/com/android/server/usage/AppTimeLimitController.java b/services/usage/java/com/android/server/usage/AppTimeLimitController.java
index 4986d18..1dc1e77 100644
--- a/services/usage/java/com/android/server/usage/AppTimeLimitController.java
+++ b/services/usage/java/com/android/server/usage/AppTimeLimitController.java
@@ -536,14 +536,13 @@
long getUsageRemaining() {
// If there is currently an active session, account for its usage
if (mActives > 0) {
- return mTimeLimitMs - mUsageTimeMs - (getUptimeMillis() - mLastKnownUsageTimeMs);
+ return mTimeLimitMs - mUsageTimeMs - (getElapsedRealtime() - mLastKnownUsageTimeMs);
} else {
return mTimeLimitMs - mUsageTimeMs;
}
}
}
-
private class MyHandler extends Handler {
static final int MSG_CHECK_TIMEOUT = 1;
static final int MSG_INFORM_LIMIT_REACHED_LISTENER = 2;
@@ -558,7 +557,7 @@
switch (msg.what) {
case MSG_CHECK_TIMEOUT:
synchronized (mLock) {
- ((UsageGroup) msg.obj).checkTimeout(getUptimeMillis());
+ ((UsageGroup) msg.obj).checkTimeout(getElapsedRealtime());
}
break;
case MSG_INFORM_LIMIT_REACHED_LISTENER:
@@ -585,8 +584,8 @@
/** Overrideable by a test */
@VisibleForTesting
- protected long getUptimeMillis() {
- return SystemClock.uptimeMillis();
+ protected long getElapsedRealtime() {
+ return SystemClock.elapsedRealtime();
}
/** Overrideable for testing purposes */
@@ -760,7 +759,7 @@
}
user.addUsageGroup(group);
- noteActiveLocked(user, group, getUptimeMillis());
+ noteActiveLocked(user, group, getElapsedRealtime());
}
}
@@ -813,7 +812,7 @@
observerApp.sessionUsageGroups.append(observerId, group);
user.addUsageGroup(group);
- noteActiveLocked(user, group, getUptimeMillis());
+ noteActiveLocked(user, group, getElapsedRealtime());
}
}
@@ -869,7 +868,7 @@
}
user.addUsageGroup(group);
- noteActiveLocked(user, group, getUptimeMillis());
+ noteActiveLocked(user, group, getElapsedRealtime());
}
}
@@ -914,7 +913,7 @@
return;
}
}
- final long currentTime = getUptimeMillis();
+ final long currentTime = getElapsedRealtime();
user.currentlyActive.put(name, ONE);
@@ -964,7 +963,7 @@
}
user.currentlyActive.removeAt(index);
- final long currentTime = getUptimeMillis();
+ final long currentTime = getElapsedRealtime();
// Check if any of the groups need to watch for this entity
ArrayList<UsageGroup> groups = user.observedMap.get(name);
diff --git a/services/uwb/OWNERS b/services/uwb/OWNERS
new file mode 100644
index 0000000..c31a2f1
--- /dev/null
+++ b/services/uwb/OWNERS
@@ -0,0 +1 @@
+include platform/frameworks/base:/core/java/android/uwb/OWNERS
diff --git a/telephony/java/android/telephony/ims/RcsConfig.java b/telephony/java/android/telephony/ims/RcsConfig.java
index 8a31211..d7c3f98 100644
--- a/telephony/java/android/telephony/ims/RcsConfig.java
+++ b/telephony/java/android/telephony/ims/RcsConfig.java
@@ -48,8 +48,12 @@
private static final String LOG_TAG = "RcsConfig";
private static final boolean DBG = Build.IS_ENG;
- // Tag for Rcs Volte single registration defined in RCC.07 A.1.6.2
- private static final String TAG_SINGLE_REGISTRATION = "rcsVolteSingleRegistration";
+ // Tag and attribute defined in RCC.07 A.2
+ private static final String TAG_PARM = "parm";
+ private static final String ATTRIBUTE_NAME = "name";
+ private static final String ATTRIBUTE_VALUE = "value";
+ // Keyword for Rcs Volte single registration defined in RCC.07 A.1.6.2
+ private static final String PARM_SINGLE_REGISTRATION = "rcsVolteSingleRegistration";
private final HashMap<String, String> mValues = new HashMap<>();
@@ -71,7 +75,27 @@
String tag = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
- tag = xpp.getName().trim();
+ tag = xpp.getName().trim().toLowerCase();
+ if (tag.equals(TAG_PARM)) {
+ int count = xpp.getAttributeCount();
+ String key = null;
+ String value = null;
+ if (count > 1) {
+ for (int i = 0; i < count; i++) {
+ String name = xpp.getAttributeName(i).trim().toLowerCase();
+ if (name.equals(ATTRIBUTE_NAME)) {
+ key = xpp.getAttributeValue(xpp.getAttributeNamespace(i),
+ name).trim().toLowerCase();
+ } else if (name.equals(ATTRIBUTE_VALUE)) {
+ value = xpp.getAttributeValue(xpp.getAttributeNamespace(i),
+ name).trim();
+ }
+ }
+ }
+ if (key != null && value != null) {
+ mValues.put(key, value);
+ }
+ }
} else if (eventType == XmlPullParser.END_TAG) {
tag = null;
} else if (eventType == XmlPullParser.TEXT) {
@@ -102,6 +126,7 @@
* @return Returns the config value if it exists, or defaultVal.
*/
public @Nullable String getString(@NonNull String tag, @Nullable String defaultVal) {
+ tag = tag.trim().toLowerCase();
return mValues.containsKey(tag) ? mValues.get(tag) : defaultVal;
}
@@ -114,6 +139,7 @@
* @return Returns the config value if it exists and is a valid int, or defaultVal.
*/
public int getInteger(@NonNull String tag, int defaultVal) {
+ tag = tag.trim().toLowerCase();
try {
return Integer.parseInt(mValues.get(tag));
} catch (NumberFormatException e) {
@@ -131,6 +157,7 @@
* @return Returns the config value if it exists, or defaultVal.
*/
public boolean getBoolean(@NonNull String tag, boolean defaultVal) {
+ tag = tag.trim().toLowerCase();
if (!mValues.containsKey(tag)) {
return defaultVal;
}
@@ -145,15 +172,15 @@
* @return Returns true if it exists, or false.
*/
public boolean hasConfig(@NonNull String tag) {
- return mValues.containsKey(tag);
+ return mValues.containsKey(tag.trim().toLowerCase());
}
/**
* Check whether Rcs Volte single registration is supported by the config.
*/
public boolean isRcsVolteSingleRegistrationSupported() {
- return getBoolean(TAG_SINGLE_REGISTRATION, false)
- || getInteger(TAG_SINGLE_REGISTRATION, 0) != 0;
+ return getBoolean(PARM_SINGLE_REGISTRATION, false)
+ || getInteger(PARM_SINGLE_REGISTRATION, 0) != 0;
}
@Override
diff --git a/tests/net/common/java/android/net/NetworkAgentConfigTest.kt b/tests/net/common/java/android/net/NetworkAgentConfigTest.kt
index db939f9..454d5b5 100644
--- a/tests/net/common/java/android/net/NetworkAgentConfigTest.kt
+++ b/tests/net/common/java/android/net/NetworkAgentConfigTest.kt
@@ -63,8 +63,10 @@
setPartialConnectivityAcceptable(false)
setUnvalidatedConnectivityAcceptable(true)
setLegacyTypeName("TEST_NETWORK")
- setNat64DetectionEnabled(false)
- setProvisioningNotificationEnabled(false)
+ if (isAtLeastS()) {
+ setNat64DetectionEnabled(false)
+ setProvisioningNotificationEnabled(false)
+ }
}.build()
assertTrue(config.isExplicitlySelected())
@@ -73,7 +75,12 @@
assertFalse(config.isPartialConnectivityAcceptable())
assertTrue(config.isUnvalidatedConnectivityAcceptable())
assertEquals("TEST_NETWORK", config.getLegacyTypeName())
- assertFalse(config.isNat64DetectionEnabled())
- assertFalse(config.isProvisioningNotificationEnabled())
+ if (isAtLeastS()) {
+ assertFalse(config.isNat64DetectionEnabled())
+ assertFalse(config.isProvisioningNotificationEnabled())
+ } else {
+ assertTrue(config.isNat64DetectionEnabled())
+ assertTrue(config.isProvisioningNotificationEnabled())
+ }
}
}
diff --git a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java
index fec5ef3..d7535a9 100644
--- a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java
+++ b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java
@@ -197,7 +197,7 @@
} else {
pkgInfo = packageInfoWithPermissions(REQUESTED_PERMISSION_GRANTED, new String[] {}, "");
}
- pkgInfo.applicationInfo.uid = UserHandle.getUid(user, UserHandle.getAppId(uid));
+ pkgInfo.applicationInfo.uid = user.getUid(UserHandle.getAppId(uid));
return pkgInfo;
}
@@ -390,7 +390,7 @@
public void expectPermission(Boolean permission, UserHandle[] users, int[] apps) {
for (final UserHandle user : users) {
for (final int app : apps) {
- final int uid = UserHandle.getUid(user, app);
+ final int uid = user.getUid(app);
if (!mApps.containsKey(uid)) {
fail("uid " + uid + " does not exist.");
}
@@ -404,7 +404,7 @@
public void expectNoPermission(UserHandle[] users, int[] apps) {
for (final UserHandle user : users) {
for (final int app : apps) {
- final int uid = UserHandle.getUid(user, app);
+ final int uid = user.getUid(app);
if (mApps.containsKey(uid)) {
fail("uid " + uid + " has listed permissions, expected none.");
}
@@ -502,9 +502,9 @@
// When MOCK_UID1 package is uninstalled and reinstalled, expect Netd to be updated
mPermissionMonitor.onPackageRemoved(
- MOCK_PACKAGE1, UserHandle.getUid(MOCK_USER1, MOCK_UID1));
+ MOCK_PACKAGE1, MOCK_USER1.getUid(MOCK_UID1));
verify(mNetdService).firewallRemoveUidInterfaceRules(aryEq(new int[] {MOCK_UID1}));
- mPermissionMonitor.onPackageAdded(MOCK_PACKAGE1, UserHandle.getUid(MOCK_USER1, MOCK_UID1));
+ mPermissionMonitor.onPackageAdded(MOCK_PACKAGE1, MOCK_USER1.getUid(MOCK_UID1));
verify(mNetdService).firewallAddUidInterfaceRules(eq("tun0"),
aryEq(new int[] {MOCK_UID1}));
@@ -541,13 +541,13 @@
mPermissionMonitor.onVpnUidRangesAdded("tun0", vpnRange, VPN_UID);
// Newly-installed package should have uid rules added
- mPermissionMonitor.onPackageAdded(MOCK_PACKAGE1, UserHandle.getUid(MOCK_USER1, MOCK_UID1));
+ mPermissionMonitor.onPackageAdded(MOCK_PACKAGE1, MOCK_USER1.getUid(MOCK_UID1));
verify(mNetdService).firewallAddUidInterfaceRules(eq("tun0"),
aryEq(new int[] {MOCK_UID1}));
// Removed package should have its uid rules removed
mPermissionMonitor.onPackageRemoved(
- MOCK_PACKAGE1, UserHandle.getUid(MOCK_USER1, MOCK_UID1));
+ MOCK_PACKAGE1, MOCK_USER1.getUid(MOCK_UID1));
verify(mNetdService).firewallRemoveUidInterfaceRules(aryEq(new int[] {MOCK_UID1}));
}
@@ -557,13 +557,13 @@
// called multiple times with the uid corresponding to each user.
private void addPackageForUsers(UserHandle[] users, String packageName, int uid) {
for (final UserHandle user : users) {
- mPermissionMonitor.onPackageAdded(packageName, UserHandle.getUid(user, uid));
+ mPermissionMonitor.onPackageAdded(packageName, user.getUid(uid));
}
}
private void removePackageForUsers(UserHandle[] users, String packageName, int uid) {
for (final UserHandle user : users) {
- mPermissionMonitor.onPackageRemoved(packageName, UserHandle.getUid(user, uid));
+ mPermissionMonitor.onPackageRemoved(packageName, user.getUid(uid));
}
}
diff --git a/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java b/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java
index 7cd2c23..e0f3f03 100644
--- a/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java
+++ b/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java
@@ -140,7 +140,7 @@
@Test
public void testCancelVibrateFails() throws RemoteException {
expectSecurityException("VIBRATE");
- mVibratorService.cancelVibrate(new Binder());
+ mVibratorService.cancelVibrate(/* usageFilter= */ -1, new Binder());
}
private void expectSecurityException(String expectedPermission) {
diff --git a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
index bbc9bb6..9a66343 100644
--- a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
+++ b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
@@ -39,6 +39,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.argThat;
import static org.mockito.Mockito.doAnswer;
@@ -59,7 +60,6 @@
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
-import android.net.NetworkCapabilities.Transport;
import android.net.NetworkRequest;
import android.net.TelephonyNetworkSpecifier;
import android.net.vcn.IVcnStatusCallback;
@@ -657,7 +657,7 @@
private void verifyMergedNetworkCapabilities(
NetworkCapabilities mergedCapabilities,
- @Transport int transportType,
+ int transportType,
boolean isVcnManaged,
boolean isRestricted) {
assertTrue(mergedCapabilities.hasTransport(transportType));
@@ -779,7 +779,7 @@
.registerNetworkCallback(
eq(new NetworkRequest.Builder().clearCapabilities().build()),
captor.capture());
- captor.getValue().onCapabilitiesChanged(new Network(0), caps);
+ captor.getValue().onCapabilitiesChanged(mock(Network.class, CALLS_REAL_METHODS), caps);
}
@Test
diff --git a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
index bb67593..a2223e8 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
@@ -20,6 +20,8 @@
import static android.net.IpSecManager.DIRECTION_OUT;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
+import static android.net.ipsec.ike.exceptions.IkeProtocolException.ERROR_TYPE_AUTHENTICATION_FAILED;
+import static android.net.ipsec.ike.exceptions.IkeProtocolException.ERROR_TYPE_TEMPORARY_FAILURE;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_CONFIG_ERROR;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_INTERNAL_ERROR;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_NETWORK_ERROR;
@@ -41,6 +43,7 @@
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.net.ConnectivityManager;
import android.net.LinkAddress;
@@ -48,10 +51,9 @@
import android.net.NetworkAgent;
import android.net.NetworkCapabilities;
import android.net.ipsec.ike.ChildSaProposal;
-import android.net.ipsec.ike.exceptions.AuthenticationFailedException;
import android.net.ipsec.ike.exceptions.IkeException;
import android.net.ipsec.ike.exceptions.IkeInternalException;
-import android.net.ipsec.ike.exceptions.TemporaryFailureException;
+import android.net.ipsec.ike.exceptions.IkeProtocolException;
import android.net.vcn.VcnControlPlaneIkeConfig;
import android.net.vcn.VcnManager.VcnErrorCode;
@@ -470,10 +472,17 @@
any());
}
+ private static IkeProtocolException buildMockIkeProtocolException(int errorCode) {
+ final IkeProtocolException exception = mock(IkeProtocolException.class);
+ when(exception.getErrorType()).thenReturn(errorCode);
+ return exception;
+ }
+
@Test
public void testIkeSessionClosedExceptionallyAuthenticationFailure() throws Exception {
verifyIkeSessionClosedExceptionalltyNotifiesStatusCallback(
- new AuthenticationFailedException("vcn test"), VCN_ERROR_CODE_CONFIG_ERROR);
+ buildMockIkeProtocolException(ERROR_TYPE_AUTHENTICATION_FAILED),
+ VCN_ERROR_CODE_CONFIG_ERROR);
}
@Test
@@ -485,7 +494,8 @@
@Test
public void testIkeSessionClosedExceptionallyInternalFailure() throws Exception {
verifyIkeSessionClosedExceptionalltyNotifiesStatusCallback(
- new TemporaryFailureException("vcn test"), VCN_ERROR_CODE_INTERNAL_ERROR);
+ buildMockIkeProtocolException(ERROR_TYPE_TEMPORARY_FAILURE),
+ VCN_ERROR_CODE_INTERNAL_ERROR);
}
@Test
diff --git a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTest.java b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTest.java
index d08af9d..ced8745 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTest.java
@@ -25,7 +25,10 @@
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.CALLS_REAL_METHODS;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -83,31 +86,30 @@
super.setUp();
mWifiInfo = mock(WifiInfo.class);
+ doReturn(mWifiInfo).when(mWifiInfo).makeCopy(anyLong());
}
private void verifyBuildNetworkCapabilitiesCommon(int transportType) {
- final NetworkCapabilities underlyingCaps = new NetworkCapabilities();
- underlyingCaps.addTransportType(transportType);
- underlyingCaps.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED);
- underlyingCaps.addCapability(NET_CAPABILITY_NOT_METERED);
- underlyingCaps.addCapability(NET_CAPABILITY_NOT_ROAMING);
+ final NetworkCapabilities.Builder capBuilder = new NetworkCapabilities.Builder();
+ capBuilder.addTransportType(transportType);
+ capBuilder.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED);
+ capBuilder.addCapability(NET_CAPABILITY_NOT_METERED);
+ capBuilder.addCapability(NET_CAPABILITY_NOT_ROAMING);
if (transportType == TRANSPORT_WIFI) {
- underlyingCaps.setTransportInfo(mWifiInfo);
- underlyingCaps.setOwnerUid(TEST_UID);
+ capBuilder.setTransportInfo(mWifiInfo);
+ capBuilder.setOwnerUid(TEST_UID);
} else if (transportType == TRANSPORT_CELLULAR) {
- underlyingCaps.setAdministratorUids(new int[] {TEST_UID});
- underlyingCaps.setNetworkSpecifier(
+ capBuilder.setNetworkSpecifier(
new TelephonyNetworkSpecifier(TEST_SUBSCRIPTION_ID_1));
}
-
- UnderlyingNetworkRecord record =
- new UnderlyingNetworkRecord(
- new Network(0), underlyingCaps, new LinkProperties(), false);
+ capBuilder.setAdministratorUids(new int[] {TEST_UID});
+ UnderlyingNetworkRecord record = new UnderlyingNetworkRecord(
+ mock(Network.class, CALLS_REAL_METHODS),
+ capBuilder.build(), new LinkProperties(), false);
final NetworkCapabilities vcnCaps =
VcnGatewayConnection.buildNetworkCapabilities(
VcnGatewayConnectionConfigTest.buildTestConfig(), record);
-
assertTrue(vcnCaps.hasTransport(TRANSPORT_CELLULAR));
assertTrue(vcnCaps.hasCapability(NET_CAPABILITY_NOT_METERED));
assertTrue(vcnCaps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
diff --git a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTestBase.java b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTestBase.java
index dc73be2..98d553d 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTestBase.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionTestBase.java
@@ -26,6 +26,7 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -93,7 +94,7 @@
protected static final UnderlyingNetworkRecord TEST_UNDERLYING_NETWORK_RECORD_1 =
new UnderlyingNetworkRecord(
- new Network(0),
+ mock(Network.class, CALLS_REAL_METHODS),
new NetworkCapabilities(),
new LinkProperties(),
false /* blocked */);
@@ -104,7 +105,7 @@
protected static final UnderlyingNetworkRecord TEST_UNDERLYING_NETWORK_RECORD_2 =
new UnderlyingNetworkRecord(
- new Network(1),
+ mock(Network.class, CALLS_REAL_METHODS),
new NetworkCapabilities(),
new LinkProperties(),
false /* blocked */);
diff --git a/tests/vcn/java/com/android/server/vcn/VcnNetworkProviderTest.java b/tests/vcn/java/com/android/server/vcn/VcnNetworkProviderTest.java
index c2c6200..f943f34 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnNetworkProviderTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnNetworkProviderTest.java
@@ -22,8 +22,6 @@
import android.annotation.NonNull;
import android.content.Context;
-import android.net.ConnectivityManager;
-import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.test.TestLooper;
@@ -36,9 +34,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.util.ArrayList;
-import java.util.List;
-
/** Tests for TelephonySubscriptionTracker */
@RunWith(AndroidJUnit4.class)
@SmallTest
@@ -46,8 +41,6 @@
private static final int TEST_SCORE_UNSATISFIED = 0;
private static final int TEST_SCORE_HIGH = 100;
private static final int TEST_PROVIDER_ID = 1;
- private static final int TEST_LEGACY_TYPE = ConnectivityManager.TYPE_MOBILE;
- private static final NetworkRequest.Type TEST_REQUEST_TYPE = NetworkRequest.Type.REQUEST;
@NonNull private final Context mContext;
@NonNull private final TestLooper mTestLooper;
@@ -94,28 +87,4 @@
mVcnNetworkProvider.onNetworkRequested(request, TEST_SCORE_UNSATISFIED, TEST_PROVIDER_ID);
verifyNoMoreInteractions(mListener);
}
-
- @Test
- public void testCachedRequestsPassedOnRegister() throws Exception {
- final List<NetworkRequest> requests = new ArrayList<>();
-
- for (int i = 0; i < 10; i++) {
- final NetworkRequest request =
- new NetworkRequest(
- new NetworkCapabilities(),
- TEST_LEGACY_TYPE,
- i /* requestId */,
- TEST_REQUEST_TYPE);
-
- requests.add(request);
- mVcnNetworkProvider.onNetworkRequested(request, i, i + 1);
- }
-
- mVcnNetworkProvider.registerListener(mListener);
- for (int i = 0; i < requests.size(); i++) {
- final NetworkRequest request = requests.get(i);
- verify(mListener).onNetworkRequested(request, i, i + 1);
- }
- verifyNoMoreInteractions(mListener);
- }
}
diff --git a/tools/fonts/Android.bp b/tools/fonts/Android.bp
new file mode 100644
index 0000000..8ea114f
--- /dev/null
+++ b/tools/fonts/Android.bp
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+python_defaults {
+ name: "fonts_python_defaults",
+ version: {
+ py2: {
+ enabled: false,
+ embedded_launcher: false,
+ },
+ py3: {
+ enabled: true,
+ embedded_launcher: true,
+ },
+ },
+}
+
+python_binary_host {
+ name: "fontchain_linter",
+ defaults: ["fonts_python_defaults"],
+ main: "fontchain_linter.py",
+ srcs: [
+ "fontchain_linter.py",
+ ],
+ libs: [
+ "fontTools",
+ ],
+}
+
+python_binary_host {
+ name: "update_font_metadata",
+ defaults: ["fonts_python_defaults"],
+ main: "update_font_metadata.py",
+ srcs: [
+ "update_font_metadata.py",
+ ],
+ libs: [
+ "fontTools",
+ ],
+}