summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format2
-rw-r--r--Android.bp13
-rw-r--r--OWNERS1
-rw-r--r--SQLITE_OWNERS2
-rw-r--r--apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java2
-rw-r--r--api/Android.bp5
-rw-r--r--api/ApiDocs.bp (renamed from ApiDocs.bp)10
-rw-r--r--api/StubLibraries.bp (renamed from StubLibraries.bp)59
l---------api/docs1
-rw-r--r--cmds/bootanimation/FORMAT.md4
-rw-r--r--cmds/incidentd/Android.bp64
-rw-r--r--cmds/incidentd/fuzzers/IncidentServiceFuzzer.cpp31
-rw-r--r--cmds/incidentd/src/IncidentService.cpp5
-rw-r--r--core/api/system-lint-baseline.txt4
-rw-r--r--core/java/Android.bp18
-rw-r--r--core/java/android/app/Activity.java4
-rw-r--r--core/java/android/app/assist/OWNERS5
-rw-r--r--core/java/android/database/sqlite/OWNERS1
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDeviceImpl.java6
-rw-r--r--core/java/android/os/BatteryStatsManager.java12
-rw-r--r--core/java/android/os/image/DynamicSystemManager.java12
-rw-r--r--core/java/android/os/image/IDynamicSystemService.aidl6
-rw-r--r--core/java/android/provider/Settings.java12
-rw-r--r--core/java/android/text/TextUtils.java60
-rw-r--r--core/java/android/view/contentcapture/OWNERS8
-rw-r--r--core/java/com/android/internal/app/IBatteryStats.aidl2
-rw-r--r--core/java/com/android/internal/jank/OWNERS3
-rw-r--r--core/jni/OWNERS3
-rw-r--r--core/jni/com_android_internal_security_VerityUtils.cpp19
-rw-r--r--core/proto/android/os/system_properties.proto4
-rw-r--r--core/proto/android/providers/settings/global.proto4
-rw-r--r--core/tests/coretests/src/android/database/sqlite/OWNERS1
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java7
-rw-r--r--libs/incident/src/IncidentReportArgs.cpp7
-rw-r--r--libs/services/Android.bp7
-rw-r--r--mime/java/Android.bp5
-rw-r--r--packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java5
-rw-r--r--packages/PackageInstaller/Android.bp12
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java6
-rw-r--r--packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java7
-rw-r--r--services/core/Android.bp1
-rw-r--r--services/core/java/com/android/server/DynamicSystemService.java15
-rw-r--r--services/core/java/com/android/server/NetworkManagementService.java74
-rw-r--r--services/core/java/com/android/server/OWNERS3
-rw-r--r--services/core/java/com/android/server/TEST_MAPPING5
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java7
-rw-r--r--services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java2
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java26
-rw-r--r--services/core/java/com/android/server/audio/AudioDeviceBroker.java2
-rw-r--r--services/core/java/com/android/server/connectivity/Vpn.java7
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java52
-rw-r--r--services/core/java/com/android/server/oemlock/OemLockService.java14
-rw-r--r--services/core/java/com/android/server/oemlock/VendorLockAidl.java115
-rw-r--r--services/core/java/com/android/server/oemlock/VendorLockHidl.java (renamed from services/core/java/com/android/server/oemlock/VendorLock.java)46
-rw-r--r--services/core/java/com/android/server/os/OWNERS3
-rw-r--r--services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java13
-rw-r--r--services/tests/RemoteProvisioningServiceTests/Android.bp1
-rw-r--r--services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java7
-rw-r--r--services/tests/servicestests/src/com/android/server/contentprotection/OWNERS3
-rw-r--r--services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java17
-rw-r--r--services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java70
62 files changed, 646 insertions, 278 deletions
diff --git a/.clang-format b/.clang-format
index 03af56d64062..021d9382d62b 100644
--- a/.clang-format
+++ b/.clang-format
@@ -2,7 +2,7 @@ BasedOnStyle: Google
AccessModifierOffset: -4
AlignOperands: false
-AllowShortFunctionsOnASingleLine: Inline
+AllowShortFunctionsOnASingleLine: Empty
AlwaysBreakBeforeMultilineStrings: false
ColumnLimit: 100
CommentPragmas: NOLINT:.*
diff --git a/Android.bp b/Android.bp
index 93d1e4e5b020..b4e02c0a092f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -532,7 +532,7 @@ filegroup {
"core/java/**/*.logtags",
"**/package.html",
],
- visibility: ["//visibility:private"],
+ visibility: ["//frameworks/base/api"],
}
// Defaults for all stubs that include the non-updatable framework. These defaults do not include
@@ -546,12 +546,10 @@ stubs_defaults {
java_version: "1.8",
arg_files: [":frameworks-base-core-AndroidManifest.xml"],
aidl: {
- local_include_dirs: [
- "media/aidl",
- "telephony/java",
- ],
include_dirs: [
"frameworks/av/aidl",
+ "frameworks/base/media/aidl",
+ "frameworks/base/telephony/java",
"frameworks/native/libs/permission/aidl",
"packages/modules/Bluetooth/framework/aidl-export",
"packages/modules/Connectivity/framework/aidl-export",
@@ -583,7 +581,7 @@ stubs_defaults {
annotations_enabled: true,
previous_api: ":android.api.public.latest",
merge_annotations_dirs: ["metalava-manual"],
- defaults_visibility: ["//visibility:private"],
+ defaults_visibility: ["//frameworks/base/api"],
visibility: ["//frameworks/base/api"],
}
@@ -611,12 +609,9 @@ stubs_defaults {
// NOTE: The below can be removed once the prebuilt stub contains IKE.
"sdk_system_current_android.net.ipsec.ike",
],
- defaults_visibility: ["//visibility:private"],
}
build = [
- "StubLibraries.bp",
- "ApiDocs.bp",
"ProtoLibraries.bp",
"TestProtoLibraries.bp",
]
diff --git a/OWNERS b/OWNERS
index dad8bfe3340c..4860acc530f8 100644
--- a/OWNERS
+++ b/OWNERS
@@ -38,3 +38,4 @@ per-file TestProtoLibraries.bp = file:platform/platform_testing:/libraries/healt
per-file TestProtoLibraries.bp = file:platform/tools/tradefederation:/OWNERS
per-file ZYGOTE_OWNERS = file:/ZYGOTE_OWNERS
+per-file SQLITE_OWNERS = file:/SQLITE_OWNERS
diff --git a/SQLITE_OWNERS b/SQLITE_OWNERS
new file mode 100644
index 000000000000..1ff72e7689a7
--- /dev/null
+++ b/SQLITE_OWNERS
@@ -0,0 +1,2 @@
+shayba@google.com
+shombert@google.com
diff --git a/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java b/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java
index b995b0688970..3910a0827aad 100644
--- a/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java
+++ b/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java
@@ -52,7 +52,7 @@ public class ExpensiveObjectsPerfTest {
}
}
- @Test
+ @Test(timeout = 900)
public void timeClonedDateFormatTimeInstance() {
DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
diff --git a/api/Android.bp b/api/Android.bp
index 9d20eca75f8f..f40f0c990f72 100644
--- a/api/Android.bp
+++ b/api/Android.bp
@@ -252,3 +252,8 @@ java_genrule {
out: ["api_fingerprint.txt"],
cmd: "cat $(in) | md5sum | cut -d' ' -f1 > $(out)",
}
+
+build = [
+ "ApiDocs.bp",
+ "StubLibraries.bp",
+]
diff --git a/ApiDocs.bp b/api/ApiDocs.bp
index a46ecce5c721..fbcaa52f9bb4 100644
--- a/ApiDocs.bp
+++ b/api/ApiDocs.bp
@@ -182,10 +182,10 @@ droidstubs {
// using droiddoc
/////////////////////////////////////////////////////////////////////
-framework_docs_only_args = " -android -manifest $(location core/res/AndroidManifest.xml) " +
+framework_docs_only_args = " -android -manifest $(location :frameworks-base-core-AndroidManifest.xml) " +
"-metalavaApiSince " +
"-werror -lerror -hide 111 -hide 113 -hide 125 -hide 126 -hide 127 -hide 128 " +
- "-overview $(location core/java/overview.html) " +
+ "-overview $(location :frameworks-base-java-overview) " +
// Federate Support Library references against local API file.
"-federate SupportLib https://developer.android.com " +
"-federationapi SupportLib $(location :current-support-api) " +
@@ -218,16 +218,16 @@ doc_defaults {
"sdk.preview 0",
],
arg_files: [
- "core/res/AndroidManifest.xml",
- "core/java/overview.html",
+ ":frameworks-base-core-AndroidManifest.xml",
+ ":frameworks-base-java-overview",
":current-support-api",
":current-androidx-api",
],
// TODO(b/169090544): remove below aidl includes.
aidl: {
- local_include_dirs: ["media/aidl"],
include_dirs: [
"frameworks/av/aidl",
+ "frameworks/base/media/aidl",
"frameworks/native/libs/permission/aidl",
],
},
diff --git a/StubLibraries.bp b/api/StubLibraries.bp
index b005591980c0..93d20dd199bf 100644
--- a/StubLibraries.bp
+++ b/api/StubLibraries.bp
@@ -213,7 +213,6 @@ java_defaults {
system_modules: "none",
java_version: "1.8",
compile_dex: true,
- defaults_visibility: ["//visibility:private"],
visibility: ["//visibility:public"],
}
@@ -230,8 +229,6 @@ java_defaults {
tag: ".jar",
dest: "android-non-updatable.jar",
},
- defaults_visibility: ["//visibility:private"],
- visibility: ["//visibility:private"],
}
java_library {
@@ -283,6 +280,57 @@ java_library {
}
java_defaults {
+ name: "non_updatable_api_library_defaults",
+ static_libs: ["framework-res-package-jar"],
+ libs: ["stub-annotations"],
+}
+
+java_api_library {
+ name: "android-non-updatable.stubs.from-text",
+ api_surface: "public",
+ api_files: [
+ ":non-updatable-current.txt",
+ ],
+ defaults: ["non_updatable_api_library_defaults"],
+ dep_api_srcs: "android_stubs_current.from-text",
+}
+
+java_api_library {
+ name: "android-non-updatable.stubs.system.from-text",
+ api_surface: "system",
+ api_files: [
+ ":non-updatable-current.txt",
+ ":non-updatable-system-current.txt",
+ ],
+ defaults: ["non_updatable_api_library_defaults"],
+ dep_api_srcs: "android_system_stubs_current.from-text",
+}
+
+java_api_library {
+ name: "android-non-updatable.stubs.test.from-text",
+ api_surface: "test",
+ api_files: [
+ ":non-updatable-current.txt",
+ ":non-updatable-system-current.txt",
+ ":non-updatable-test-current.txt",
+ ],
+ defaults: ["non_updatable_api_library_defaults"],
+ dep_api_srcs: "android_test_stubs_current.from-text",
+}
+
+java_api_library {
+ name: "android-non-updatable.stubs.module_lib.from-text",
+ api_surface: "module_lib",
+ api_files: [
+ ":non-updatable-current.txt",
+ ":non-updatable-system-current.txt",
+ ":non-updatable-module-lib-current.txt",
+ ],
+ defaults: ["non_updatable_api_library_defaults"],
+ dep_api_srcs: "android_module_lib_stubs_current_full.from-text",
+}
+
+java_defaults {
name: "android_stubs_dists_default",
dist: {
targets: ["sdk"],
@@ -402,7 +450,6 @@ java_library {
java_genrule {
name: "android_stubs_private_hjar",
- visibility: ["//visibility:private"],
srcs: [":android_stubs_private_jar{.hjar}"],
out: ["android_stubs_private.jar"],
cmd: "cp $(in) $(out)",
@@ -411,7 +458,6 @@ java_genrule {
java_library {
name: "android_stubs_private",
defaults: ["android_stubs_dists_default"],
- visibility: ["//visibility:private"],
sdk_version: "none",
system_modules: "none",
static_libs: ["android_stubs_private_hjar"],
@@ -422,7 +468,6 @@ java_library {
java_genrule {
name: "android_stubs_private_framework_aidl",
- visibility: ["//visibility:private"],
tools: ["sdkparcelables"],
srcs: [":android_stubs_private"],
out: ["framework.aidl"],
@@ -515,6 +560,7 @@ droidstubs {
],
api_levels_sdk_type: "public",
extensions_info_file: ":sdk-extensions-info",
+ visibility: ["//frameworks/base"],
}
droidstubs {
@@ -585,7 +631,6 @@ droidstubs {
"metalava-manual",
],
args: priv_apps,
- visibility: ["//visibility:private"],
}
java_library {
diff --git a/api/docs b/api/docs
new file mode 120000
index 000000000000..a9594bfe4ab6
--- /dev/null
+++ b/api/docs
@@ -0,0 +1 @@
+../docs \ No newline at end of file
diff --git a/cmds/bootanimation/FORMAT.md b/cmds/bootanimation/FORMAT.md
index 64814c8a25e2..4abffd7770c8 100644
--- a/cmds/bootanimation/FORMAT.md
+++ b/cmds/bootanimation/FORMAT.md
@@ -153,14 +153,14 @@ based on animation progression.
To enable it, add the following line as the second line of desc.txt:
- dynamic_colors PATH #RGBHEX0 #RGBHEX1 #RGBHEX2 #RGBHEX3
+ dynamic_colors PATH #RGBHEX1 #RGBHEX2 #RGBHEX3 #RGBHEX4
* **PATH:** file path of the part to apply dynamic color transition to.
Any part before this part will be rendered in the start colors.
Any part after will be rendered in the end colors.
* **RGBHEX1:** the first start color (masked by the R channel), specified as `#RRGGBB`.
* **RGBHEX2:** the second start color (masked by the G channel), specified as `#RRGGBB`.
- * **RGBHEX3:** the thrid start color (masked by the B channel), specified as `#RRGGBB`.
+ * **RGBHEX3:** the third start color (masked by the B channel), specified as `#RRGGBB`.
* **RGBHEX4:** the forth start color (masked by the A channel), specified as `#RRGGBB`.
The end colors will be read from the following system properties:
diff --git a/cmds/incidentd/Android.bp b/cmds/incidentd/Android.bp
index b0b23f569664..bd30404848a3 100644
--- a/cmds/incidentd/Android.bp
+++ b/cmds/incidentd/Android.bp
@@ -82,17 +82,11 @@ cc_binary {
},
},
-
init_rc: ["incidentd.rc"],
}
-// ==============
-// incidentd_test
-// ==============
-
-cc_test {
- name: "incidentd_test",
- test_suites: ["device-tests"],
+cc_defaults {
+ name: "incidentd_test_defaults",
cflags: [
"-Werror",
@@ -110,8 +104,6 @@ cc_test {
generated_headers: ["framework-cppstream-protos"],
srcs: [
- "tests/**/*.cpp",
- "tests/**/*.proto",
"src/FdBuffer.cpp",
"src/Privacy.cpp",
"src/PrivacyFilter.cpp",
@@ -125,13 +117,11 @@ cc_test {
"src/**/*.proto",
],
- data: ["testdata/**/*"],
-
static_libs: [
- "libgmock",
"libincidentcompanion",
"libplatformprotos-test",
],
+
shared_libs: [
"libbase",
"libbinder",
@@ -144,6 +134,30 @@ cc_test {
"libservices",
"libutils",
],
+}
+
+// ==============
+// incidentd_test
+// ==============
+cc_test {
+ name: "incidentd_test",
+
+ defaults: [
+ "incidentd_test_defaults",
+ ],
+
+ test_suites: ["device-tests"],
+
+ srcs: [
+ "tests/**/*.cpp",
+ "tests/**/*.proto",
+ ],
+
+ data: ["testdata/**/*"],
+
+ static_libs: [
+ "libgmock",
+ ],
target: {
android: {
@@ -160,3 +174,27 @@ genrule {
out: ["section_list.cpp"],
cmd: "$(location incident-section-gen) incidentd > $(out)",
}
+
+cc_fuzz {
+ name: "incidentd_service_fuzzer",
+ defaults: [
+ "service_fuzzer_defaults",
+ "fuzzer_disable_leaks",
+ "incidentd_test_defaults",
+ ],
+
+ fuzz_config: {
+ cc: [
+ "yaochen@google.com",
+ "yanmin@google.com",
+ ],
+ triage_assignee: "waghpawan@google.com",
+ },
+
+ srcs: [
+ "fuzzers/IncidentServiceFuzzer.cpp",
+ "src/IncidentService.cpp",
+ "src/Broadcaster.cpp",
+ ":incidentd_section_list",
+ ],
+}
diff --git a/cmds/incidentd/fuzzers/IncidentServiceFuzzer.cpp b/cmds/incidentd/fuzzers/IncidentServiceFuzzer.cpp
new file mode 100644
index 000000000000..14c969b30ee6
--- /dev/null
+++ b/cmds/incidentd/fuzzers/IncidentServiceFuzzer.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <fuzzbinder/libbinder_driver.h>
+#include <utils/Looper.h>
+
+#include "IncidentService.h"
+
+using ::android::fuzzService;
+using ::android::os::incidentd::IncidentService;
+using ::android::Looper;
+using ::android::sp;
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ sp<Looper> looper(Looper::prepare(0));
+ sp<IncidentService> service = sp<IncidentService>::make(looper);
+ fuzzService(service, FuzzedDataProvider(data, size));
+ return 0;
+}
diff --git a/cmds/incidentd/src/IncidentService.cpp b/cmds/incidentd/src/IncidentService.cpp
index 5af02f405ed9..05a43ad7d936 100644
--- a/cmds/incidentd/src/IncidentService.cpp
+++ b/cmds/incidentd/src/IncidentService.cpp
@@ -513,6 +513,9 @@ status_t IncidentService::onTransact(uint32_t code, const Parcel& data, Parcel*
sp<IShellCallback> shellCallback = IShellCallback::asInterface(data.readStrongBinder());
sp<IResultReceiver> resultReceiver =
IResultReceiver::asInterface(data.readStrongBinder());
+ if (resultReceiver == nullptr) {
+ return BAD_VALUE;
+ }
FILE* fin = fdopen(in, "r");
FILE* fout = fdopen(out, "w");
@@ -533,7 +536,7 @@ status_t IncidentService::onTransact(uint32_t code, const Parcel& data, Parcel*
fflush(fout);
fclose(fout);
}
- if (fout != NULL) {
+ if (ferr != NULL) {
fflush(ferr);
fclose(ferr);
}
diff --git a/core/api/system-lint-baseline.txt b/core/api/system-lint-baseline.txt
index 025e8629fc20..0100f0e76285 100644
--- a/core/api/system-lint-baseline.txt
+++ b/core/api/system-lint-baseline.txt
@@ -143,12 +143,16 @@ SamShouldBeLast: android.media.AudioFocusRequest.Builder#setOnAudioFocusChangeLi
SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioFocusRequest.Builder.setOnAudioFocusChangeListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
SamShouldBeLast: android.media.AudioManager#requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int):
SAM-compatible parameters (such as parameter 1, "l", in android.media.AudioManager.requestAudioFocus) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioRecord#addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler):
+ SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioRecord.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
SamShouldBeLast: android.media.AudioRecord#addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler):
SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioRecord.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
SamShouldBeLast: android.media.AudioRouting#addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler):
SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioRouting.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
SamShouldBeLast: android.media.AudioTrack#addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler):
SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioTrack.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioTrack#addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler):
+ SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioTrack.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
SamShouldBeLast: android.media.MediaCodec#setOnFrameRenderedListener(android.media.MediaCodec.OnFrameRenderedListener, android.os.Handler):
SAM-compatible parameters (such as parameter 1, "listener", in android.media.MediaCodec.setOnFrameRenderedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
SamShouldBeLast: android.media.MediaPlayer#addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler):
diff --git a/core/java/Android.bp b/core/java/Android.bp
index 7df3d1e13aa0..5d7d7ba2379c 100644
--- a/core/java/Android.bp
+++ b/core/java/Android.bp
@@ -31,9 +31,14 @@ filegroup {
srcs: ["android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl"],
}
-filegroup {
- name: "IDropBoxManagerService.aidl",
- srcs: ["com/android/internal/os/IDropBoxManagerService.aidl"],
+aidl_library {
+ name: "IDropBoxManagerService_aidl",
+ srcs: [
+ "com/android/internal/os/IDropBoxManagerService.aidl",
+ ],
+ hdrs: [
+ "android/os/DropBoxManager.aidl",
+ ],
}
filegroup {
@@ -146,7 +151,7 @@ filegroup {
],
}
-filegroup {
+aidl_library {
name: "ILogcatManagerService_aidl",
srcs: ["android/os/logcat/ILogcatManagerService.aidl"],
}
@@ -429,6 +434,11 @@ aidl_interface {
},
}
+filegroup {
+ name: "frameworks-base-java-overview",
+ srcs: ["overview.html"],
+}
+
// 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).
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index e85fa9d46d10..1807fb66da8f 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -5369,8 +5369,8 @@ public class Activity extends ContextThemeWrapper
* result callbacks including {@link #onRequestPermissionsResult(int, String[], int[])}.
* </p>
* <p>
- * The <a href="https://github.com/android/permissions-samples">
- * RuntimePermissions</a> sample apps demonstrate how to use this method to
+ * The <a href="https://github.com/android/platform-samples/tree/main/samples/privacy/permissions">
+ * permissions samples</a> repo demonstrates how to use this method to
* request permissions at run time.
* </p>
*
diff --git a/core/java/android/app/assist/OWNERS b/core/java/android/app/assist/OWNERS
index 80ecaa41dbf3..e4ffd7f41aa0 100644
--- a/core/java/android/app/assist/OWNERS
+++ b/core/java/android/app/assist/OWNERS
@@ -1,7 +1,2 @@
-augale@google.com
-joannechung@google.com
-markpun@google.com
-lpeter@google.com
-tymtsai@google.com
hackz@google.com
volnov@google.com \ No newline at end of file
diff --git a/core/java/android/database/sqlite/OWNERS b/core/java/android/database/sqlite/OWNERS
new file mode 100644
index 000000000000..3bebc7c56f61
--- /dev/null
+++ b/core/java/android/database/sqlite/OWNERS
@@ -0,0 +1 @@
+include /SQLITE_OWNERS
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index a6c79b3a289f..9179f5de1a4f 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -2228,6 +2228,12 @@ public class CameraDeviceImpl extends CameraDevice
} else {
List<CaptureResult> partialResults =
mFrameNumberTracker.popPartialResults(frameNumber);
+ if (mBatchOutputMap.containsKey(requestId)) {
+ int requestCount = mBatchOutputMap.get(requestId);
+ for (int i = 1; i < requestCount; i++) {
+ mFrameNumberTracker.popPartialResults(frameNumber - (requestCount - i));
+ }
+ }
final long sensorTimestamp =
result.get(CaptureResult.SENSOR_TIMESTAMP);
diff --git a/core/java/android/os/BatteryStatsManager.java b/core/java/android/os/BatteryStatsManager.java
index 071bdea5e3ac..955fad3d1a48 100644
--- a/core/java/android/os/BatteryStatsManager.java
+++ b/core/java/android/os/BatteryStatsManager.java
@@ -520,14 +520,10 @@ public final class BatteryStatsManager {
* @param uid calling package uid
* @param reason why Bluetooth has been turned on
* @param packageName package responsible for this change
+ * @Deprecated Bluetooth self report its state and no longer call this
*/
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
public void reportBluetoothOn(int uid, int reason, @NonNull String packageName) {
- try {
- mBatteryStats.noteBluetoothOn(uid, reason, packageName);
- } catch (RemoteException e) {
- e.rethrowFromSystemServer();
- }
}
/**
@@ -536,14 +532,10 @@ public final class BatteryStatsManager {
* @param uid calling package uid
* @param reason why Bluetooth has been turned on
* @param packageName package responsible for this change
+ * @Deprecated Bluetooth self report its state and no longer call this
*/
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
public void reportBluetoothOff(int uid, int reason, @NonNull String packageName) {
- try {
- mBatteryStats.noteBluetoothOff(uid, reason, packageName);
- } catch (RemoteException e) {
- e.rethrowFromSystemServer();
- }
}
/**
diff --git a/core/java/android/os/image/DynamicSystemManager.java b/core/java/android/os/image/DynamicSystemManager.java
index 9610b16a312c..536795bafb1c 100644
--- a/core/java/android/os/image/DynamicSystemManager.java
+++ b/core/java/android/os/image/DynamicSystemManager.java
@@ -285,4 +285,16 @@ public class DynamicSystemManager {
throw new RuntimeException(e.toString());
}
}
+
+ /**
+ * Returns the active DSU slot
+ */
+ @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
+ public String getActiveDsuSlot() {
+ try {
+ return mService.getActiveDsuSlot();
+ } catch (RemoteException e) {
+ throw new RuntimeException(e.toString());
+ }
+ }
}
diff --git a/core/java/android/os/image/IDynamicSystemService.aidl b/core/java/android/os/image/IDynamicSystemService.aidl
index 755368a85c40..0280ebbd87ab 100644
--- a/core/java/android/os/image/IDynamicSystemService.aidl
+++ b/core/java/android/os/image/IDynamicSystemService.aidl
@@ -145,4 +145,10 @@ interface IDynamicSystemService
*/
@EnforcePermission("MANAGE_DYNAMIC_SYSTEM")
long suggestScratchSize();
+
+ /**
+ * Get the active DSU slot
+ */
+ @EnforcePermission("MANAGE_DYNAMIC_SYSTEM")
+ String getActiveDsuSlot();
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index fe0c1dd65bef..038beabcf22f 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -14615,18 +14615,6 @@ public final class Settings {
public static final String ANGLE_EGL_FEATURES = "angle_egl_features";
/**
- * Comma-separated list of package names that ANGLE may have issues with
- * @hide
- */
- public static final String ANGLE_DEFERLIST = "angle_deferlist";
-
- /**
- * Integer mode of the logic for applying `angle_deferlist`
- * @hide
- */
- public static final String ANGLE_DEFERLIST_MODE = "angle_deferlist_mode";
-
- /**
* Show the "ANGLE In Use" dialog box to the user when ANGLE is the OpenGL driver.
* The value is a boolean (1 or 0).
* @hide
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 7ac6ae186cc3..c4ae963c1312 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -871,126 +871,128 @@ public class TextUtils {
if (kind == 0)
break;
+ final Object span;
switch (kind) {
case ALIGNMENT_SPAN:
- readSpan(p, sp, new AlignmentSpan.Standard(p));
+ span = new AlignmentSpan.Standard(p);
break;
case FOREGROUND_COLOR_SPAN:
- readSpan(p, sp, new ForegroundColorSpan(p));
+ span = new ForegroundColorSpan(p);
break;
case RELATIVE_SIZE_SPAN:
- readSpan(p, sp, new RelativeSizeSpan(p));
+ span = new RelativeSizeSpan(p);
break;
case SCALE_X_SPAN:
- readSpan(p, sp, new ScaleXSpan(p));
+ span = new ScaleXSpan(p);
break;
case STRIKETHROUGH_SPAN:
- readSpan(p, sp, new StrikethroughSpan(p));
+ span = new StrikethroughSpan(p);
break;
case UNDERLINE_SPAN:
- readSpan(p, sp, new UnderlineSpan(p));
+ span = new UnderlineSpan(p);
break;
case STYLE_SPAN:
- readSpan(p, sp, new StyleSpan(p));
+ span = new StyleSpan(p);
break;
case BULLET_SPAN:
- readSpan(p, sp, new BulletSpan(p));
+ span = new BulletSpan(p);
break;
case QUOTE_SPAN:
- readSpan(p, sp, new QuoteSpan(p));
+ span = new QuoteSpan(p);
break;
case LEADING_MARGIN_SPAN:
- readSpan(p, sp, new LeadingMarginSpan.Standard(p));
+ span = new LeadingMarginSpan.Standard(p);
break;
case URL_SPAN:
- readSpan(p, sp, new URLSpan(p));
+ span = new URLSpan(p);
break;
case BACKGROUND_COLOR_SPAN:
- readSpan(p, sp, new BackgroundColorSpan(p));
+ span = new BackgroundColorSpan(p);
break;
case TYPEFACE_SPAN:
- readSpan(p, sp, new TypefaceSpan(p));
+ span = new TypefaceSpan(p);
break;
case SUPERSCRIPT_SPAN:
- readSpan(p, sp, new SuperscriptSpan(p));
+ span = new SuperscriptSpan(p);
break;
case SUBSCRIPT_SPAN:
- readSpan(p, sp, new SubscriptSpan(p));
+ span = new SubscriptSpan(p);
break;
case ABSOLUTE_SIZE_SPAN:
- readSpan(p, sp, new AbsoluteSizeSpan(p));
+ span = new AbsoluteSizeSpan(p);
break;
case TEXT_APPEARANCE_SPAN:
- readSpan(p, sp, new TextAppearanceSpan(p));
+ span = new TextAppearanceSpan(p);
break;
case ANNOTATION:
- readSpan(p, sp, new Annotation(p));
+ span = new Annotation(p);
break;
case SUGGESTION_SPAN:
- readSpan(p, sp, new SuggestionSpan(p));
+ span = new SuggestionSpan(p);
break;
case SPELL_CHECK_SPAN:
- readSpan(p, sp, new SpellCheckSpan(p));
+ span = new SpellCheckSpan(p);
break;
case SUGGESTION_RANGE_SPAN:
- readSpan(p, sp, new SuggestionRangeSpan(p));
+ span = new SuggestionRangeSpan(p);
break;
case EASY_EDIT_SPAN:
- readSpan(p, sp, new EasyEditSpan(p));
+ span = new EasyEditSpan(p);
break;
case LOCALE_SPAN:
- readSpan(p, sp, new LocaleSpan(p));
+ span = new LocaleSpan(p);
break;
case TTS_SPAN:
- readSpan(p, sp, new TtsSpan(p));
+ span = new TtsSpan(p);
break;
case ACCESSIBILITY_CLICKABLE_SPAN:
- readSpan(p, sp, new AccessibilityClickableSpan(p));
+ span = new AccessibilityClickableSpan(p);
break;
case ACCESSIBILITY_URL_SPAN:
- readSpan(p, sp, new AccessibilityURLSpan(p));
+ span = new AccessibilityURLSpan(p);
break;
case LINE_BACKGROUND_SPAN:
- readSpan(p, sp, new LineBackgroundSpan.Standard(p));
+ span = new LineBackgroundSpan.Standard(p);
break;
case LINE_HEIGHT_SPAN:
- readSpan(p, sp, new LineHeightSpan.Standard(p));
+ span = new LineHeightSpan.Standard(p);
break;
case ACCESSIBILITY_REPLACEMENT_SPAN:
- readSpan(p, sp, new AccessibilityReplacementSpan(p));
+ span = new AccessibilityReplacementSpan(p);
break;
default:
throw new RuntimeException("bogus span encoding " + kind);
}
+ readSpan(p, sp, span);
}
return sp;
diff --git a/core/java/android/view/contentcapture/OWNERS b/core/java/android/view/contentcapture/OWNERS
index d1eda9648520..e4b09524ede7 100644
--- a/core/java/android/view/contentcapture/OWNERS
+++ b/core/java/android/view/contentcapture/OWNERS
@@ -1,9 +1,5 @@
# Bug component: 544200
-augale@google.com
-joannechung@google.com
-markpun@google.com
-lpeter@google.com
-tymtsai@google.com
hackz@google.com
-volnov@google.com \ No newline at end of file
+shivanker@google.com
+volnov@google.com
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 629a1b36b9e6..ee2084722cc5 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -145,8 +145,6 @@ interface IBatteryStats {
long getAwakeTimeBattery();
long getAwakeTimePlugged();
- void noteBluetoothOn(int uid, int reason, String packageName);
- void noteBluetoothOff(int uid, int reason, String packageName);
void noteBleScanStarted(in WorkSource ws, boolean isUnoptimized);
void noteBleScanStopped(in WorkSource ws, boolean isUnoptimized);
void noteBleScanReset();
diff --git a/core/java/com/android/internal/jank/OWNERS b/core/java/com/android/internal/jank/OWNERS
index 352c132fda4f..2f3bbeef0d77 100644
--- a/core/java/com/android/internal/jank/OWNERS
+++ b/core/java/com/android/internal/jank/OWNERS
@@ -3,4 +3,5 @@ include /services/core/java/com/android/server/wm/OWNERS
# Jank people
ahanwu@google.com
vadimt@google.com
-marcinoc@google.com \ No newline at end of file
+marcinoc@google.com
+pmuetschard@google.com \ No newline at end of file
diff --git a/core/jni/OWNERS b/core/jni/OWNERS
index 84b050cdfbdb..a17048c27763 100644
--- a/core/jni/OWNERS
+++ b/core/jni/OWNERS
@@ -102,3 +102,6 @@ per-file com_android_internal_os_*MultiStateCounter* = file:/BATTERY_STATS_OWNER
# PM
per-file com_android_internal_content_* = file:/PACKAGE_MANAGER_OWNERS
+
+# SQLite
+per-file android_database_SQLite* = file:/SQLITE_OWNERS
diff --git a/core/jni/com_android_internal_security_VerityUtils.cpp b/core/jni/com_android_internal_security_VerityUtils.cpp
index 5553d28db066..6eab12b0eb42 100644
--- a/core/jni/com_android_internal_security_VerityUtils.cpp
+++ b/core/jni/com_android_internal_security_VerityUtils.cpp
@@ -79,7 +79,11 @@ int enableFsverity(JNIEnv *env, jobject /* clazz */, jstring filePath, jbyteArra
int statxForFsverity(JNIEnv *env, jobject /* clazz */, jstring filePath) {
ScopedUtfChars path(env, filePath);
- // Call statx and check STATX_ATTR_VERITY.
+ // There are two ways to check whether a file has fs-verity enabled: statx() and FS_IOC_GETFLAGS
+ // (See https://www.kernel.org/doc/html/latest/filesystems/fsverity.html#statx and
+ // https://www.kernel.org/doc/html/latest/filesystems/fsverity.html#fs-ioc-getflags.)
+ // We try statx() first, since it doesn't require opening the file.
+
struct statx out = {};
if (statx(AT_FDCWD, path.c_str(), 0 /* flags */, STATX_ALL, &out) != 0) {
return -errno;
@@ -89,8 +93,12 @@ int statxForFsverity(JNIEnv *env, jobject /* clazz */, jstring filePath) {
return (out.stx_attributes & STATX_ATTR_VERITY) != 0;
}
- // STATX_ATTR_VERITY is not supported for the file path.
- // In this case, call ioctl(FS_IOC_GETFLAGS) and check FS_VERITY_FL.
+ // The filesystem doesn't support STATX_ATTR_VERITY. This normally means that it doesn't
+ // support fs-verity, in which case we should simply return 0. Unfortunately, virtio-fs is an
+ // exception, since it doesn't support STATX_ATTR_VERITY but does support querying FS_VERITY_FL
+ // via FS_IOC_GETFLAGS. So we have to fall back to FS_IOC_GETFLAGS. Note: despite being an
+ // ioctl, FS_IOC_GETFLAGS doesn't require the "ioctl" SELinux permission but rather "getattr".
+
::android::base::unique_fd rfd(open(path.c_str(), O_RDONLY | O_CLOEXEC));
if (rfd.get() < 0) {
ALOGE("open failed at %s", path.c_str());
@@ -99,6 +107,11 @@ int statxForFsverity(JNIEnv *env, jobject /* clazz */, jstring filePath) {
unsigned int flags;
if (ioctl(rfd.get(), FS_IOC_GETFLAGS, &flags) < 0) {
+ if (errno == ENOTTY) {
+ // If the filesystem supports neither STATX_ATTR_VERITY nor FS_IOC_GETFLAGS, then assume
+ // that it doesn't support fs-verity.
+ return 0;
+ }
ALOGE("ioctl(FS_IOC_GETFLAGS) failed at %s", path.c_str());
return -errno;
}
diff --git a/core/proto/android/os/system_properties.proto b/core/proto/android/os/system_properties.proto
index 84c82e094dd4..3cedba0632aa 100644
--- a/core/proto/android/os/system_properties.proto
+++ b/core/proto/android/os/system_properties.proto
@@ -434,9 +434,8 @@ message SystemPropertiesProto {
optional string vibrator = 37;
optional string virtual_device = 38;
optional string vulkan = 39;
- optional string egl_legacy = 40;
- // Next Tag: 41
+ // Next Tag: 40
}
optional Hardware hardware = 27;
@@ -559,3 +558,4 @@ message SystemPropertiesProto {
// Next Tag: 32
}
+
diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto
index e165b079f450..3c2a48a51b09 100644
--- a/core/proto/android/providers/settings/global.proto
+++ b/core/proto/android/providers/settings/global.proto
@@ -468,10 +468,6 @@ message GlobalSettingsProto {
optional SettingProto updatable_driver_prerelease_opt_in_apps = 18;
optional SettingProto angle_egl_features = 19;
- // ANGLE - List of Apps that ANGLE may have issues with
- optional SettingProto angle_deferlist = 20;
- // ANGLE - Integer mode of the logic for applying `angle_deferlist`
- optional SettingProto angle_deferlist_mode = 21;
}
optional Gpu gpu = 59;
diff --git a/core/tests/coretests/src/android/database/sqlite/OWNERS b/core/tests/coretests/src/android/database/sqlite/OWNERS
new file mode 100644
index 000000000000..3bebc7c56f61
--- /dev/null
+++ b/core/tests/coretests/src/android/database/sqlite/OWNERS
@@ -0,0 +1 @@
+include /SQLITE_OWNERS
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
index 83bc7c0e6e7d..889652950389 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
@@ -597,6 +597,13 @@ public class PipTouchHandler {
return true;
}
+ // Ignore the motion event When the entry animation is waiting to be started
+ if (!mTouchState.isUserInteracting() && mPipTaskOrganizer.isEntryScheduled()) {
+ ProtoLog.wtf(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ "%s: Waiting to start the entry animation, skip the motion event.", TAG);
+ return true;
+ }
+
// Update the touch state
mTouchState.onTouchEvent(ev);
diff --git a/libs/incident/src/IncidentReportArgs.cpp b/libs/incident/src/IncidentReportArgs.cpp
index db495cfbf7e1..d344a981ecea 100644
--- a/libs/incident/src/IncidentReportArgs.cpp
+++ b/libs/incident/src/IncidentReportArgs.cpp
@@ -133,13 +133,12 @@ IncidentReportArgs::readFromParcel(const Parcel* in)
mSections.insert(section);
}
- int32_t headerCount;
- err = in->readInt32(&headerCount);
+ err = in->resizeOutVector<vector<uint8_t>>(&mHeaders);
if (err != NO_ERROR) {
return err;
}
- mHeaders.resize(headerCount);
- for (int i=0; i<headerCount; i++) {
+
+ for (int i=0; i<mHeaders.size(); i++) {
err = in->readByteVector(&mHeaders[i]);
if (err != NO_ERROR) {
return err;
diff --git a/libs/services/Android.bp b/libs/services/Android.bp
index f656ebfc3b77..0b7e7d37718d 100644
--- a/libs/services/Android.bp
+++ b/libs/services/Android.bp
@@ -26,8 +26,6 @@ package {
cc_library_shared {
name: "libservices",
srcs: [
- ":IDropBoxManagerService.aidl",
- ":ILogcatManagerService_aidl",
"src/content/ComponentName.cpp",
"src/os/DropBoxManager.cpp",
],
@@ -42,7 +40,10 @@ cc_library_shared {
"libbase_headers",
],
aidl: {
- include_dirs: ["frameworks/base/core/java/"],
+ libs: [
+ "ILogcatManagerService_aidl",
+ "IDropBoxManagerService_aidl",
+ ],
},
export_include_dirs: ["include"],
diff --git a/mime/java/Android.bp b/mime/java/Android.bp
index 07cada8e1372..a267d6593f65 100644
--- a/mime/java/Android.bp
+++ b/mime/java/Android.bp
@@ -10,5 +10,8 @@ package {
filegroup {
name: "framework-mime-sources",
srcs: ["**/*.java"],
- visibility: ["//frameworks/base"],
+ visibility: [
+ "//frameworks/base",
+ "//frameworks/base/api",
+ ],
}
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
index 5e42f705cf4b..e78de4957e22 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
@@ -423,7 +423,10 @@ public class DynamicSystemInstallationService extends Service
Log.e(TAG, "It's already running in normal system.");
return;
}
-
+ if (mDynSystem.getActiveDsuSlot().endsWith(".lock")) {
+ Log.e(TAG, "Ignore the reboot intent for a locked DSU slot");
+ return;
+ }
if (!mDynSystem.setEnable(/* enable = */ false, /* oneShot = */ false)) {
Log.e(TAG, "Failed to disable DynamicSystem.");
diff --git a/packages/PackageInstaller/Android.bp b/packages/PackageInstaller/Android.bp
index 47575137558a..565a51ff6aae 100644
--- a/packages/PackageInstaller/Android.bp
+++ b/packages/PackageInstaller/Android.bp
@@ -46,6 +46,10 @@ android_app {
"xz-java",
"androidx.leanback_leanback",
],
+
+ lint: {
+ error_checks: ["Recycle"],
+ },
}
android_app {
@@ -64,6 +68,10 @@ android_app {
"androidx.leanback_leanback",
],
aaptflags: ["--product tablet"],
+
+ lint: {
+ error_checks: ["Recycle"],
+ },
}
android_app {
@@ -82,4 +90,8 @@ android_app {
"androidx.leanback_leanback",
],
aaptflags: ["--product tv"],
+
+ lint: {
+ error_checks: ["Recycle"],
+ },
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index 17078c4c81f2..a78faaf90c37 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -771,12 +771,6 @@ class SettingsProtoDumpUtil {
Settings.Global.ANGLE_EGL_FEATURES,
GlobalSettingsProto.Gpu.ANGLE_EGL_FEATURES);
dumpSetting(s, p,
- Settings.Global.ANGLE_DEFERLIST,
- GlobalSettingsProto.Gpu.ANGLE_DEFERLIST);
- dumpSetting(s, p,
- Settings.Global.ANGLE_DEFERLIST_MODE,
- GlobalSettingsProto.Gpu.ANGLE_DEFERLIST_MODE);
- dumpSetting(s, p,
Settings.Global.SHOW_ANGLE_IN_USE_DIALOG_BOX,
GlobalSettingsProto.Gpu.SHOW_ANGLE_IN_USE_DIALOG);
dumpSetting(s, p,
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 22d629422e62..3c2aefdaa8fb 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -515,8 +515,6 @@ public class SettingsBackupTest {
Settings.Global.ANGLE_GL_DRIVER_SELECTION_PKGS,
Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES,
Settings.Global.ANGLE_EGL_FEATURES,
- Settings.Global.ANGLE_DEFERLIST,
- Settings.Global.ANGLE_DEFERLIST_MODE,
Settings.Global.UPDATABLE_DRIVER_ALL_APPS,
Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS,
Settings.Global.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS,
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java
index d10e890f3c02..534049b65cb4 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java
@@ -75,7 +75,12 @@ public class UsbContaminantActivity extends Activity implements View.OnClickList
mLearnMore.setVisibility(View.VISIBLE);
}
- mEnableUsb.setOnClickListener(this);
+ if (!mUsbPort.supportsEnableContaminantPresenceDetection()) {
+ mEnableUsb.setVisibility(View.GONE);
+ } else {
+ mEnableUsb.setOnClickListener(this);
+ }
+
mGotIt.setOnClickListener(this);
mLearnMore.setOnClickListener(this);
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index d885cd197387..81f600e80c45 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -164,6 +164,7 @@ java_library_static {
"android.hardware.biometrics.fingerprint-V2.3-java",
"android.hardware.biometrics.fingerprint-V2-java",
"android.hardware.oemlock-V1.0-java",
+ "android.hardware.oemlock-V1-java",
"android.hardware.configstore-V1.1-java",
"android.hardware.ir-V1-java",
"android.hardware.rebootescrow-V1-java",
diff --git a/services/core/java/com/android/server/DynamicSystemService.java b/services/core/java/com/android/server/DynamicSystemService.java
index b0c1d05b0dd4..cbacee6ba72c 100644
--- a/services/core/java/com/android/server/DynamicSystemService.java
+++ b/services/core/java/com/android/server/DynamicSystemService.java
@@ -226,9 +226,7 @@ public class DynamicSystemService extends IDynamicSystemService.Stub {
IGsiService gsiService = getGsiService();
if (enable) {
try {
- if (mDsuSlot == null) {
- mDsuSlot = gsiService.getActiveDsuSlot();
- }
+ getActiveDsuSlot();
GsiServiceCallback callback = new GsiServiceCallback();
synchronized (callback) {
gsiService.enableGsiAsync(oneShot, mDsuSlot, callback);
@@ -287,4 +285,15 @@ public class DynamicSystemService extends IDynamicSystemService.Stub {
return getGsiService().suggestScratchSize();
}
+
+ @Override
+ @EnforcePermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
+ public String getActiveDsuSlot() throws RemoteException {
+ super.getActiveDsuSlot_enforcePermission();
+
+ if (mDsuSlot == null) {
+ mDsuSlot = getGsiService().getActiveDsuSlot();
+ }
+ return mDsuSlot;
+ }
}
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 2aa93783c501..17cdfdb29b98 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -56,7 +56,6 @@ import android.net.NetworkPolicyManager;
import android.net.NetworkStack;
import android.net.NetworkStats;
import android.net.RouteInfo;
-import android.net.UidRangeParcel;
import android.net.util.NetdService;
import android.os.BatteryStats;
import android.os.Binder;
@@ -97,7 +96,6 @@ import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -1346,70 +1344,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
}
}
- private void closeSocketsForFirewallChainLocked(int chain, String chainName) {
- // UID ranges to close sockets on.
- UidRangeParcel[] ranges;
- // UID ranges whose sockets we won't touch.
- int[] exemptUids;
-
- int numUids = 0;
- if (DBG) Slog.d(TAG, "Closing sockets after enabling chain " + chainName);
- if (getFirewallType(chain) == FIREWALL_ALLOWLIST) {
- // Close all sockets on all non-system UIDs...
- ranges = new UidRangeParcel[] {
- // TODO: is there a better way of finding all existing users? If so, we could
- // specify their ranges here.
- new UidRangeParcel(Process.FIRST_APPLICATION_UID, Integer.MAX_VALUE),
- };
- // ... except for the UIDs that have allow rules.
- synchronized (mRulesLock) {
- final SparseIntArray rules = getUidFirewallRulesLR(chain);
- exemptUids = new int[rules.size()];
- for (int i = 0; i < exemptUids.length; i++) {
- if (rules.valueAt(i) == FIREWALL_RULE_ALLOW) {
- exemptUids[numUids] = rules.keyAt(i);
- numUids++;
- }
- }
- }
- // Normally, allowlist chains only contain deny rules, so numUids == exemptUids.length.
- // But the code does not guarantee this in any way, and at least in one case - if we add
- // a UID rule to the firewall, and then disable the firewall - the chains can contain
- // the wrong type of rule. In this case, don't close connections that we shouldn't.
- //
- // TODO: tighten up this code by ensuring we never set the wrong type of rule, and
- // fix setFirewallEnabled to grab mQuotaLock and clear rules.
- if (numUids != exemptUids.length) {
- exemptUids = Arrays.copyOf(exemptUids, numUids);
- }
- } else {
- // Close sockets for every UID that has a deny rule...
- synchronized (mRulesLock) {
- final SparseIntArray rules = getUidFirewallRulesLR(chain);
- ranges = new UidRangeParcel[rules.size()];
- for (int i = 0; i < ranges.length; i++) {
- if (rules.valueAt(i) == FIREWALL_RULE_DENY) {
- int uid = rules.keyAt(i);
- ranges[numUids] = new UidRangeParcel(uid, uid);
- numUids++;
- }
- }
- }
- // As above; usually numUids == ranges.length, but not always.
- if (numUids != ranges.length) {
- ranges = Arrays.copyOf(ranges, numUids);
- }
- // ... with no exceptions.
- exemptUids = new int[0];
- }
-
- try {
- mNetdService.socketDestroy(ranges, exemptUids);
- } catch(RemoteException | ServiceSpecificException e) {
- Slog.e(TAG, "Error closing sockets after enabling chain " + chainName + ": " + e);
- }
- }
-
@Override
public void setFirewallChainEnabled(int chain, boolean enable) {
enforceSystemUid();
@@ -1434,14 +1368,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
} catch (RuntimeException e) {
throw new IllegalStateException(e);
}
-
- // Close any sockets that were opened by the affected UIDs. This has to be done after
- // disabling network connectivity, in case they react to the socket close by reopening
- // the connection and race with the iptables commands that enable the firewall. All
- // allowlist and denylist chains allow RSTs through.
- if (enable) {
- closeSocketsForFirewallChainLocked(chain, chainName);
- }
}
}
diff --git a/services/core/java/com/android/server/OWNERS b/services/core/java/com/android/server/OWNERS
index 123cd3288343..55130e4cbbe6 100644
--- a/services/core/java/com/android/server/OWNERS
+++ b/services/core/java/com/android/server/OWNERS
@@ -1,3 +1,6 @@
+# BootReceiver
+per-file BootReceiver.java = gaillard@google.com
+
# Connectivity / Networking
per-file ConnectivityService.java,ConnectivityServiceInitializer.java,NetworkManagementService.java,NsdService.java,VpnManagerService.java = file:/services/core/java/com/android/server/net/OWNERS
diff --git a/services/core/java/com/android/server/TEST_MAPPING b/services/core/java/com/android/server/TEST_MAPPING
index d9da1c7999df..a317d23457be 100644
--- a/services/core/java/com/android/server/TEST_MAPPING
+++ b/services/core/java/com/android/server/TEST_MAPPING
@@ -48,6 +48,11 @@
}
],
"file_patterns": ["BinaryTransparencyService\\.java"]
+ },
+ {
+ // GWP-ASan's CTS test ensures that recoverable tombstones work,
+ // which is emitted by the NativeTombstoneManager.
+ "name": "CtsGwpAsanTestCases"
}
],
"presubmit-large": [
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 175f6c1c5655..148688fc4aa5 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -10784,6 +10784,13 @@ public class ActivityManagerService extends IActivityManager.Stub
pw.println("\n\n** Cache info for pid " + pid + " [" + r.processName + "] **");
pw.flush();
try {
+ if (pid == Process.myPid()) {
+ // Directly dump to target fd for local dump to avoid hang.
+ try (ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFd(fd.getInt$())) {
+ thread.dumpCacheInfo(pfd, args);
+ }
+ continue;
+ }
TransferPipe tp = new TransferPipe();
try {
thread.dumpCacheInfo(tp.getWriteFd(), args);
diff --git a/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java b/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java
index ff78355121d5..62680823588d 100644
--- a/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java
+++ b/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java
@@ -338,7 +338,7 @@ abstract class BaseAppStateTimeSlotEventsTracker
pw.print(prefix);
pw.print(mKeyNumOfEventsThreshold);
pw.print('=');
- pw.println(mDefaultNumOfEventsThreshold);
+ pw.println(mNumOfEventsThreshold);
}
pw.print(prefix);
pw.print("event_time_slot_size=");
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 8439a7d9b743..5ae06c065204 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -1982,32 +1982,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub
}
}
- /**
- * Bluetooth on stat logging
- */
- public void noteBluetoothOn(int uid, int reason, String packageName) {
- if (Binder.getCallingPid() != Process.myPid()) {
- mContext.enforcePermission(android.Manifest.permission.BLUETOOTH_CONNECT,
- Binder.getCallingPid(), uid, null);
- }
- FrameworkStatsLog.write_non_chained(FrameworkStatsLog.BLUETOOTH_ENABLED_STATE_CHANGED,
- uid, null, FrameworkStatsLog.BLUETOOTH_ENABLED_STATE_CHANGED__STATE__ENABLED,
- reason, packageName);
- }
-
- /**
- * Bluetooth off stat logging
- */
- public void noteBluetoothOff(int uid, int reason, String packageName) {
- if (Binder.getCallingPid() != Process.myPid()) {
- mContext.enforcePermission(android.Manifest.permission.BLUETOOTH_CONNECT,
- Binder.getCallingPid(), uid, null);
- }
- FrameworkStatsLog.write_non_chained(FrameworkStatsLog.BLUETOOTH_ENABLED_STATE_CHANGED,
- uid, null, FrameworkStatsLog.BLUETOOTH_ENABLED_STATE_CHANGED__STATE__DISABLED,
- reason, packageName);
- }
-
@Override
public void noteBleScanStarted(final WorkSource ws, final boolean isUnoptimized) {
enforceCallingPermission();
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index e1ae8d93e091..c161d8d472bd 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -1787,7 +1787,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
try {
mCb.unlinkToDeath(this, 0);
} catch (NoSuchElementException e) {
- Log.w(TAG, "CommunicationRouteClient could not not unregistered to binder");
+ Log.w(TAG, "CommunicationRouteClient could not unlink to " + mCb + " binder death");
}
}
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index c678a92af13a..4208a12f91d4 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -3677,8 +3677,11 @@ public class Vpn {
encapType = IkeSessionParams.ESP_ENCAP_TYPE_NONE;
break;
default:
- ipVersion = IkeSessionParams.ESP_IP_VERSION_AUTO;
- encapType = IkeSessionParams.ESP_ENCAP_TYPE_AUTO;
+ // By default, PREFERRED_IKE_PROTOCOL_IPV4_UDP is used for safety. This is
+ // because some carriers' networks do not support IPv6 very well, and using
+ // IPv4 can help to prevent problems.
+ ipVersion = IkeSessionParams.ESP_IP_VERSION_IPV4;
+ encapType = IkeSessionParams.ESP_ENCAP_TYPE_UDP;
break;
}
return new CarrierConfigInfo(mccMnc, natKeepalive, encapType, ipVersion);
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index dcf19062834c..d2853370fa69 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -220,6 +220,7 @@ import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.SubscriptionPlan;
+import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.format.DateUtils;
@@ -801,6 +802,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
return buckets;
}
+
+ /** Require IPC call. Don't call when holding a lock. */
+ int getDefaultDataSubId() {
+ return SubscriptionManager.getDefaultDataSubscriptionId();
+ }
+
+ /** Require IPC call. Don't call when holding a lock. */
+ int getActivateDataSubId() {
+ return SubscriptionManager.getActiveDataSubscriptionId();
+ }
}
@VisibleForTesting
@@ -828,7 +839,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
mSuppressDefaultPolicy = suppressDefaultPolicy;
mDeps = Objects.requireNonNull(deps, "missing Dependencies");
-
+ mActiveDataSubIdListener = new ActiveDataSubIdListener();
mPolicyFile = new AtomicFile(new File(systemDir, "netpolicy.xml"), "net-policy");
mAppOps = context.getSystemService(AppOpsManager.class);
@@ -1088,6 +1099,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
});
+ // Listen for active data sub Id change, upon which data notifications is shown/hidden.
+ mContext.getSystemService(TelephonyManager.class).registerTelephonyCallback(executor,
+ mActiveDataSubIdListener);
+
// tell systemReady() that the service has been initialized
initCompleteSignal.countDown();
} finally {
@@ -1257,6 +1272,38 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
};
/**
+ * Listener that watches for active data sub Id change, upon which data notifications are
+ * shown/hidden.
+ */
+ private final ActiveDataSubIdListener mActiveDataSubIdListener;
+ private class ActiveDataSubIdListener extends TelephonyCallback implements
+ TelephonyCallback.ActiveDataSubscriptionIdListener {
+ /**
+ * In most cases active data sub is the same as the default data sub, but if user enabled
+ * auto data switch {@link TelephonyManager#MOBILE_DATA_POLICY_AUTO_DATA_SWITCH},
+ * active data sub could be the non-default data sub.
+ *
+ * If the listener is initialized before the phone process is up, the IPC call to the
+ * static method of SubscriptionManager lead to INVALID_SUBSCRIPTION_ID to be returned,
+ * indicating the phone process is unable to determine a valid data sub Id at this point, in
+ * which case no data notifications should be shown anyway. Later on when an active data
+ * sub is known, notifications will be re-evaluated by this callback.
+ */
+ private int mDefaultDataSubId = mDeps.getDefaultDataSubId();
+ private int mActiveDataSubId = mDeps.getActivateDataSubId();
+ // Only listen to active data sub change is sufficient because default data sub change
+ // leads to active data sub change as well.
+ @Override
+ public void onActiveDataSubscriptionIdChanged(int subId) {
+ mActiveDataSubId = subId;
+ mDefaultDataSubId = mDeps.getDefaultDataSubId();
+ synchronized (mNetworkPoliciesSecondLock) {
+ updateNotificationsNL();
+ }
+ }
+ }
+
+ /**
* Listener that watches for {@link NetworkStatsManager} updates, which
* NetworkPolicyManagerService uses to check against {@link NetworkPolicy#warningBytes}.
*/
@@ -1445,6 +1492,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// ignore policies that aren't relevant to user
if (subId == INVALID_SUBSCRIPTION_ID) continue;
+ // ignore if the data sub is neither default nor active for data at the moment.
+ if (subId != mActiveDataSubIdListener.mDefaultDataSubId
+ && subId != mActiveDataSubIdListener.mActiveDataSubId) continue;
if (!policy.hasCycle()) continue;
final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager
diff --git a/services/core/java/com/android/server/oemlock/OemLockService.java b/services/core/java/com/android/server/oemlock/OemLockService.java
index f19d353a1f7b..ef23a448be00 100644
--- a/services/core/java/com/android/server/oemlock/OemLockService.java
+++ b/services/core/java/com/android/server/oemlock/OemLockService.java
@@ -21,7 +21,6 @@ import android.annotation.Nullable;
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.hardware.oemlock.V1_0.IOemLock;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
@@ -54,15 +53,18 @@ public class OemLockService extends SystemService {
private OemLock mOemLock;
public static boolean isHalPresent() {
- return VendorLock.getOemLockHalService() != null;
+ return (VendorLockHidl.getOemLockHalService() != null)
+ || (VendorLockAidl.getOemLockHalService() != null);
}
/** Select the OEM lock implementation */
private static OemLock getOemLock(Context context) {
- final IOemLock oemLockHal = VendorLock.getOemLockHalService();
- if (oemLockHal != null) {
- Slog.i(TAG, "Using vendor lock via the HAL");
- return new VendorLock(context, oemLockHal);
+ if (VendorLockAidl.getOemLockHalService() != null) {
+ Slog.i(TAG, "Using vendor lock via the HAL(aidl)");
+ return new VendorLockAidl(context);
+ } else if (VendorLockHidl.getOemLockHalService() != null) {
+ Slog.i(TAG, "Using vendor lock via the HAL(hidl)");
+ return new VendorLockHidl(context);
} else {
Slog.i(TAG, "Using persistent data block based lock");
return new PersistentDataBlockLock(context);
diff --git a/services/core/java/com/android/server/oemlock/VendorLockAidl.java b/services/core/java/com/android/server/oemlock/VendorLockAidl.java
new file mode 100644
index 000000000000..82d45ab7c49c
--- /dev/null
+++ b/services/core/java/com/android/server/oemlock/VendorLockAidl.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.oemlock;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.hardware.oemlock.IOemLock;
+import android.hardware.oemlock.OemLockSecureStatus;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.util.Slog;
+
+/** Uses the OEM lock HAL. */
+class VendorLockAidl extends OemLock {
+ private static final String TAG = "OemLock";
+ private IOemLock mOemLock;
+
+ static IOemLock getOemLockHalService() {
+ return IOemLock.Stub.asInterface(
+ ServiceManager.waitForDeclaredService(IOemLock.DESCRIPTOR + "/default"));
+ }
+
+ VendorLockAidl(Context context) {
+ mOemLock = getOemLockHalService();
+ }
+
+ @Override
+ @Nullable
+ String getLockName() {
+ try {
+ return mOemLock.getName();
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to get name from HAL", e);
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ @Override
+ void setOemUnlockAllowedByCarrier(boolean allowed, @Nullable byte[] signature) {
+ try {
+ final int status;
+ if (signature == null) {
+ status = mOemLock.setOemUnlockAllowedByCarrier(allowed, new byte[0]);
+ } else {
+ status = mOemLock.setOemUnlockAllowedByCarrier(allowed, signature);
+ }
+ switch (status) {
+ case OemLockSecureStatus.OK:
+ Slog.i(TAG, "Updated carrier allows OEM lock state to: " + allowed);
+ return;
+
+ case OemLockSecureStatus.INVALID_SIGNATURE:
+ if (signature == null) {
+ throw new IllegalArgumentException("Signature required for carrier unlock");
+ }
+ throw new SecurityException(
+ "Invalid signature used in attempt to carrier unlock");
+
+ default:
+ Slog.e(TAG, "Unknown return value indicates code is out of sync with HAL");
+ // Fallthrough
+ case OemLockSecureStatus.FAILED:
+ throw new RuntimeException("Failed to set carrier OEM unlock state");
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to set carrier state with HAL", e);
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ @Override
+ boolean isOemUnlockAllowedByCarrier() {
+ try {
+ return mOemLock.isOemUnlockAllowedByCarrier();
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to get carrier state from HAL");
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ @Override
+ void setOemUnlockAllowedByDevice(boolean allowedByDevice) {
+ try {
+ mOemLock.setOemUnlockAllowedByDevice(allowedByDevice);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to set device state with HAL", e);
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ @Override
+ boolean isOemUnlockAllowedByDevice() {
+
+ try {
+ return mOemLock.isOemUnlockAllowedByDevice();
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to get devie state from HAL");
+ throw e.rethrowFromSystemServer();
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/oemlock/VendorLock.java b/services/core/java/com/android/server/oemlock/VendorLockHidl.java
index 9c876da320a9..fe76787e8bd8 100644
--- a/services/core/java/com/android/server/oemlock/VendorLock.java
+++ b/services/core/java/com/android/server/oemlock/VendorLockHidl.java
@@ -27,10 +27,8 @@ import android.util.Slog;
import java.util.ArrayList;
import java.util.NoSuchElementException;
-/**
- * Uses the OEM lock HAL.
- */
-class VendorLock extends OemLock {
+/** Uses the OEM lock HAL. */
+class VendorLockHidl extends OemLock {
private static final String TAG = "OemLock";
private Context mContext;
@@ -40,29 +38,30 @@ class VendorLock extends OemLock {
try {
return IOemLock.getService(/* retry */ true);
} catch (NoSuchElementException e) {
- Slog.i(TAG, "OemLock HAL not present on device");
+ Slog.i(TAG, "OemLock Hidl HAL not present on device");
return null;
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
- VendorLock(Context context, IOemLock oemLock) {
+ VendorLockHidl(Context context) {
mContext = context;
- mOemLock = oemLock;
+ mOemLock = getOemLockHalService();
}
@Override
@Nullable
String getLockName() {
- final Integer[] requestStatus = new Integer[1];
final String[] lockName = new String[1];
+ final Integer[] requestStatus = new Integer[1];
try {
- mOemLock.getName((status, name) -> {
- requestStatus[0] = status;
- lockName[0] = name;
- });
+ mOemLock.getName(
+ (status, name) -> {
+ requestStatus[0] = status;
+ lockName[0] = name;
+ });
} catch (RemoteException e) {
Slog.e(TAG, "Failed to get name from HAL", e);
throw e.rethrowFromSystemServer();
@@ -113,14 +112,14 @@ class VendorLock extends OemLock {
@Override
boolean isOemUnlockAllowedByCarrier() {
- final Integer[] requestStatus = new Integer[1];
final Boolean[] allowedByCarrier = new Boolean[1];
-
+ final Integer[] requestStatus = new Integer[1];
try {
- mOemLock.isOemUnlockAllowedByCarrier((status, allowed) -> {
- requestStatus[0] = status;
- allowedByCarrier[0] = allowed;
- });
+ mOemLock.isOemUnlockAllowedByCarrier(
+ (status, allowed) -> {
+ requestStatus[0] = status;
+ allowedByCarrier[0] = allowed;
+ });
} catch (RemoteException e) {
Slog.e(TAG, "Failed to get carrier state from HAL");
throw e.rethrowFromSystemServer();
@@ -161,14 +160,15 @@ class VendorLock extends OemLock {
@Override
boolean isOemUnlockAllowedByDevice() {
- final Integer[] requestStatus = new Integer[1];
final Boolean[] allowedByDevice = new Boolean[1];
+ final Integer[] requestStatus = new Integer[1];
try {
- mOemLock.isOemUnlockAllowedByDevice((status, allowed) -> {
- requestStatus[0] = status;
- allowedByDevice[0] = allowed;
- });
+ mOemLock.isOemUnlockAllowedByDevice(
+ (status, allowed) -> {
+ requestStatus[0] = status;
+ allowedByDevice[0] = allowed;
+ });
} catch (RemoteException e) {
Slog.e(TAG, "Failed to get devie state from HAL");
throw e.rethrowFromSystemServer();
diff --git a/services/core/java/com/android/server/os/OWNERS b/services/core/java/com/android/server/os/OWNERS
index 19573323e5ad..70be161ba9a8 100644
--- a/services/core/java/com/android/server/os/OWNERS
+++ b/services/core/java/com/android/server/os/OWNERS
@@ -1,2 +1,5 @@
# Bugreporting
per-file Bugreport* = file:/platform/frameworks/native:/cmds/dumpstate/OWNERS
+
+# NativeTombstone
+per-file NativeTombstone* = gaillard@google.com
diff --git a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
index 8f23ae4ff33b..4007672a0599 100644
--- a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
+++ b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
@@ -34,6 +34,8 @@ import android.os.SystemProperties;
import android.os.UpdateEngine;
import android.os.UpdateEngineCallback;
import android.provider.DeviceConfig;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import com.android.internal.R;
@@ -332,8 +334,17 @@ public final class ProfcollectForwardingService extends SystemService {
Context context = getContext();
BackgroundThread.get().getThreadHandler().post(() -> {
try {
+ int usageSetting = -1;
+ try {
+ // Get "Usage & diagnostics" checkbox status. 1 is for enabled, 0 is for
+ // disabled.
+ usageSetting = Settings.Global.getInt(context.getContentResolver(), "multi_cb");
+ } catch (SettingNotFoundException e) {
+ Log.i(LOG_TAG, "Usage setting not found: " + e.getMessage());
+ }
+
// Prepare profile report
- String reportName = mIProfcollect.report() + ".zip";
+ String reportName = mIProfcollect.report(usageSetting) + ".zip";
if (!context.getResources().getBoolean(
R.bool.config_profcollectReportUploaderEnabled)) {
diff --git a/services/tests/RemoteProvisioningServiceTests/Android.bp b/services/tests/RemoteProvisioningServiceTests/Android.bp
index 075680a51af3..fc2c0857146b 100644
--- a/services/tests/RemoteProvisioningServiceTests/Android.bp
+++ b/services/tests/RemoteProvisioningServiceTests/Android.bp
@@ -31,6 +31,7 @@ android_test {
"service-rkp.impl",
"services.core",
"truth-prebuilt",
+ "truth-java8-extension-jar",
],
test_suites: [
"device-tests",
diff --git a/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java b/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java
index 77c339646400..2d93120681ec 100644
--- a/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java
+++ b/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java
@@ -17,6 +17,7 @@
package com.android.server.security.rkp;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth8.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -42,7 +43,6 @@ import org.junit.runner.RunWith;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
-import java.util.Arrays;
import java.util.Base64;
import java.util.Map;
@@ -119,6 +119,7 @@ public class RemoteProvisioningShellCommandTest {
assertThat(res.getErr()).isEmpty();
assertThat(res.getCode()).isEqualTo(0);
assertThat(res.getOut()).isEmpty();
+ assertThat(res.getOut().lines()).isEmpty();
}
@Test
@@ -128,7 +129,7 @@ public class RemoteProvisioningShellCommandTest {
CommandResult res = exec(cmd, new String[] {"list"});
assertThat(res.getErr()).isEmpty();
assertThat(res.getCode()).isEqualTo(0);
- assertThat(Arrays.asList(res.getOut().split("\n"))).containsExactly("default");
+ assertThat(res.getOut().lines()).containsExactly("default");
}
@Test
@@ -140,7 +141,7 @@ public class RemoteProvisioningShellCommandTest {
CommandResult res = exec(cmd, new String[] {"list"});
assertThat(res.getErr()).isEmpty();
assertThat(res.getCode()).isEqualTo(0);
- assertThat(Arrays.asList(res.getOut().split("\n"))).containsExactly("default", "strongbox");
+ assertThat(res.getOut().lines()).containsExactly("default", "strongbox");
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/contentprotection/OWNERS b/services/tests/servicestests/src/com/android/server/contentprotection/OWNERS
new file mode 100644
index 000000000000..24561c59bba6
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/contentprotection/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 544200
+
+include /core/java/android/view/contentcapture/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
index 035249e32d74..a4a35dc42472 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
@@ -344,6 +344,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_succeedsWithCertFile() throws Exception {
int uid = Binder.getCallingUid();
@@ -365,6 +366,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(mRecoverableKeyStoreDb.getRecoveryServicePublicKey(userId, uid)).isNull();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_updatesShouldCreatesnapshotOnCertUpdate() throws Exception {
int uid = Binder.getCallingUid();
@@ -392,6 +394,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_triesToFilterRootAlias() throws Exception {
int uid = Binder.getCallingUid();
@@ -413,6 +416,7 @@ public class RecoverableKeyStoreManagerTest {
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_usesProdCertificateForEmptyRootAlias() throws Exception {
int uid = Binder.getCallingUid();
@@ -433,6 +437,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(activeRootAlias).isEqualTo(DEFAULT_ROOT_CERT_ALIAS);
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_usesProdCertificateForNullRootAlias() throws Exception {
int uid = Binder.getCallingUid();
@@ -453,6 +458,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(activeRootAlias).isEqualTo(DEFAULT_ROOT_CERT_ALIAS);
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_regeneratesCounterId() throws Exception {
int uid = Binder.getCallingUid();
@@ -483,6 +489,7 @@ public class RecoverableKeyStoreManagerTest {
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_updatesWithLargerSerial() throws Exception {
int uid = Binder.getCallingUid();
@@ -500,6 +507,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_throwsExceptionOnSmallerSerial() throws Exception {
int uid = Binder.getCallingUid();
@@ -565,6 +573,7 @@ public class RecoverableKeyStoreManagerTest {
TestData.getInsecureCertPathForEndpoint1());
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_ignoresTheSameSerial() throws Exception {
int uid = Binder.getCallingUid();
@@ -615,6 +624,7 @@ public class RecoverableKeyStoreManagerTest {
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryServiceWithSigFile_succeeds() throws Exception {
int uid = Binder.getCallingUid();
@@ -630,6 +640,7 @@ public class RecoverableKeyStoreManagerTest {
assertThat(mRecoverableKeyStoreDb.getRecoveryServicePublicKey(userId, uid)).isNull();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryServiceWithSigFile_usesProdCertificateForNullRootAlias()
throws Exception {
@@ -723,6 +734,7 @@ public class RecoverableKeyStoreManagerTest {
eq(Manifest.permission.RECOVER_KEYSTORE), any());
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_storesTheSessionInfo() throws Exception {
mRecoverableKeyStoreManager.startRecoverySessionWithCertPath(
@@ -740,6 +752,7 @@ public class RecoverableKeyStoreManagerTest {
assertEquals(KEY_CLAIMANT_LENGTH_BYTES, entry.getKeyClaimant().length);
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_checksPermissionFirst() throws Exception {
mRecoverableKeyStoreManager.startRecoverySessionWithCertPath(
@@ -809,6 +822,7 @@ public class RecoverableKeyStoreManagerTest {
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySession_throwsIfBadNumberOfSecrets() throws Exception {
try {
@@ -825,6 +839,7 @@ public class RecoverableKeyStoreManagerTest {
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySession_throwsIfPublicKeysMismatch() throws Exception {
byte[] vaultParams = TEST_VAULT_PARAMS.clone();
@@ -843,6 +858,7 @@ public class RecoverableKeyStoreManagerTest {
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_throwsIfBadNumberOfSecrets() throws Exception {
try {
@@ -860,6 +876,7 @@ public class RecoverableKeyStoreManagerTest {
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_throwsIfPublicKeysMismatch() throws Exception {
byte[] vaultParams = TEST_VAULT_PARAMS.clone();
diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
index 7c7e2ee53f3c..012596e4327e 100644
--- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
@@ -151,6 +151,7 @@ import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionPlan;
+import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.MediumTest;
import android.text.TextUtils;
@@ -241,6 +242,7 @@ public class NetworkPolicyManagerServiceTest {
private static final String TEST_WIFI_NETWORK_KEY = "TestWifiNetworkKey";
private static final String TEST_IMSI = "310210";
private static final int TEST_SUB_ID = 42;
+ private static final int TEST_SUB_ID2 = 24;
private static final Network TEST_NETWORK = mock(Network.class, CALLS_REAL_METHODS);
private static NetworkTemplate sTemplateWifi = new NetworkTemplate.Builder(MATCH_WIFI)
@@ -282,6 +284,8 @@ public class NetworkPolicyManagerServiceTest {
private ArgumentCaptor<ConnectivityManager.NetworkCallback> mNetworkCallbackCaptor =
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
+ private TelephonyCallback.ActiveDataSubscriptionIdListener mActiveDataSubIdListener;
+
private ActivityManagerInternal mActivityManagerInternal;
private PackageManagerInternal mPackageManagerInternal;
@@ -357,6 +361,8 @@ public class NetworkPolicyManagerServiceTest {
private class TestDependencies extends NetworkPolicyManagerService.Dependencies {
private final SparseArray<NetworkStats.Bucket> mMockedStats = new SparseArray<>();
+ private int mMockDefaultDataSubId;
+ private int mMockedActiveDataSubId;
TestDependencies(Context context) {
super(context);
@@ -394,6 +400,21 @@ public class NetworkPolicyManagerServiceTest {
final NetworkStats.Bucket bucket = mMockedStats.get(uid);
setMockedTotalBytes(uid, bucket.getRxBytes() + rxBytes, bucket.getTxBytes() + txBytes);
}
+
+ void setDefaultAndActiveDataSubId(int defaultDataSubId, int activeDataSubId) {
+ mMockDefaultDataSubId = defaultDataSubId;
+ mMockedActiveDataSubId = activeDataSubId;
+ }
+
+ @Override
+ int getDefaultDataSubId() {
+ return mMockDefaultDataSubId;
+ }
+
+ @Override
+ int getActivateDataSubId() {
+ return mMockedActiveDataSubId;
+ }
}
@Before
@@ -551,6 +572,14 @@ public class NetworkPolicyManagerServiceTest {
NetworkPolicy defaultPolicy = mService.buildDefaultCarrierPolicy(0, "");
mDefaultWarningBytes = defaultPolicy.warningBytes;
mDefaultLimitBytes = defaultPolicy.limitBytes;
+
+ // Catch TelephonyCallback during systemReady().
+ ArgumentCaptor<TelephonyCallback> telephonyCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(TelephonyCallback.class);
+ verify(mTelephonyManager).registerTelephonyCallback(any(),
+ telephonyCallbackArgumentCaptor.capture());
+ mActiveDataSubIdListener = (TelephonyCallback.ActiveDataSubscriptionIdListener)
+ telephonyCallbackArgumentCaptor.getValue();
}
@After
@@ -1243,6 +1272,7 @@ public class NetworkPolicyManagerServiceTest {
reset(mTelephonyManager, mNetworkManager, mNotifManager);
TelephonyManager tmSub = expectMobileDefaults();
+ clearInvocations(mNotifManager);
mService.updateNetworks();
@@ -1258,6 +1288,7 @@ public class NetworkPolicyManagerServiceTest {
reset(mTelephonyManager, mNetworkManager, mNotifManager);
TelephonyManager tmSub = expectMobileDefaults();
+ clearInvocations(mNotifManager);
mService.updateNetworks();
@@ -1275,6 +1306,7 @@ public class NetworkPolicyManagerServiceTest {
reset(mTelephonyManager, mNetworkManager, mNotifManager);
TelephonyManager tmSub = expectMobileDefaults();
expectDefaultCarrierConfig();
+ clearInvocations(mNotifManager);
mService.updateNetworks();
@@ -1291,6 +1323,7 @@ public class NetworkPolicyManagerServiceTest {
reset(mTelephonyManager, mNetworkManager, mNotifManager);
TelephonyManager tmSub = expectMobileDefaults();
+ clearInvocations(mNotifManager);
mService.updateNetworks();
@@ -1304,6 +1337,7 @@ public class NetworkPolicyManagerServiceTest {
{
reset(mTelephonyManager, mNetworkManager, mNotifManager);
TelephonyManager tmSub = expectMobileDefaults();
+ clearInvocations(mNotifManager);
mService.snoozeLimit(sTemplateCarrierMetered);
mService.updateNetworks();
@@ -1314,6 +1348,31 @@ public class NetworkPolicyManagerServiceTest {
verify(mNotifManager, atLeastOnce()).notifyAsUser(any(), eq(TYPE_LIMIT_SNOOZED),
isA(Notification.class), eq(UserHandle.ALL));
}
+ // The sub is no longer used for data(e.g. user uses another sub), hide the notifications.
+ {
+ reset(mTelephonyManager, mNetworkManager, mNotifManager);
+
+ notifyDefaultAndActiveDataSubIdChange(TEST_SUB_ID2, TEST_SUB_ID2);
+ verify(mNotifManager, atLeastOnce()).cancel(any(), eq(TYPE_LIMIT_SNOOZED));
+ }
+ // The sub is not active for data(e.g. due to auto data switch), but still default for data,
+ // show notification.
+ {
+ reset(mTelephonyManager, mNetworkManager, mNotifManager);
+
+ notifyDefaultAndActiveDataSubIdChange(TEST_SUB_ID, TEST_SUB_ID2);
+ verify(mNotifManager, atLeastOnce()).notifyAsUser(any(), eq(TYPE_LIMIT_SNOOZED),
+ isA(Notification.class), eq(UserHandle.ALL));
+ }
+ // The sub is active for data, but not the default(e.g. due to auto data switch),
+ // show notification.
+ {
+ reset(mTelephonyManager, mNetworkManager, mNotifManager);
+
+ notifyDefaultAndActiveDataSubIdChange(TEST_SUB_ID2, TEST_SUB_ID);
+ verify(mNotifManager, atLeastOnce()).notifyAsUser(any(), eq(TYPE_LIMIT_SNOOZED),
+ isA(Notification.class), eq(UserHandle.ALL));
+ }
}
@Test
@@ -2377,6 +2436,7 @@ public class NetworkPolicyManagerServiceTest {
String subscriberId) {
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(
createSubscriptionInfoList(subscriptionId));
+ notifyDefaultAndActiveDataSubIdChange(subscriptionId, subscriptionId);
TelephonyManager subTelephonyManager;
subTelephonyManager = mock(TelephonyManager.class);
@@ -2388,6 +2448,16 @@ public class NetworkPolicyManagerServiceTest {
}
/**
+ * Telephony Manager callback notifies data sub Id changes.
+ * @param defaultDataSubId The mock default data sub Id.
+ * @param activeDataSubId The mock active data sub Id.
+ */
+ private void notifyDefaultAndActiveDataSubIdChange(int defaultDataSubId, int activeDataSubId) {
+ mDeps.setDefaultAndActiveDataSubId(defaultDataSubId, activeDataSubId);
+ mActiveDataSubIdListener.onActiveDataSubscriptionIdChanged(activeDataSubId);
+ }
+
+ /**
* Creates mock {@link SubscriptionInfo} from subscription id.
*/
private List<SubscriptionInfo> createSubscriptionInfoList(int subId) {