Merge "Vendor API level 202504 is now frozen" into main
diff --git a/audio/aidl/Android.bp b/audio/aidl/Android.bp
index ff16029..cec1276 100644
--- a/audio/aidl/Android.bp
+++ b/audio/aidl/Android.bp
@@ -60,7 +60,7 @@
ndk: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
min_sdk_version: "31",
},
diff --git a/audio/common/5.0/Android.bp b/audio/common/5.0/Android.bp
index 02f66a3..d9c4f58 100644
--- a/audio/common/5.0/Android.bp
+++ b/audio/common/5.0/Android.bp
@@ -23,6 +23,6 @@
gen_java_constants: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
}
diff --git a/automotive/audiocontrol/1.0/vts/functional/Android.bp b/automotive/audiocontrol/1.0/vts/functional/Android.bp
index fe5be81..9dcb600 100644
--- a/automotive/audiocontrol/1.0/vts/functional/Android.bp
+++ b/automotive/audiocontrol/1.0/vts/functional/Android.bp
@@ -26,6 +26,7 @@
cc_test {
name: "VtsHalAudioControlV1_0TargetTest",
+ team: "trendy_team_aaos_audio_triage",
srcs: [
"VtsHalAudioControlV1_0TargetTest.cpp",
],
diff --git a/automotive/audiocontrol/2.0/vts/functional/Android.bp b/automotive/audiocontrol/2.0/vts/functional/Android.bp
index 597aaa3..7499bc4 100644
--- a/automotive/audiocontrol/2.0/vts/functional/Android.bp
+++ b/automotive/audiocontrol/2.0/vts/functional/Android.bp
@@ -26,6 +26,7 @@
cc_test {
name: "VtsHalAudioControlV2_0TargetTest",
+ team: "trendy_team_aaos_audio_triage",
defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalAudioControlV2_0TargetTest.cpp"],
static_libs: [
diff --git a/automotive/audiocontrol/aidl/default/converter/test/Android.bp b/automotive/audiocontrol/aidl/default/converter/test/Android.bp
index 70d4a20..fb2d52c 100644
--- a/automotive/audiocontrol/aidl/default/converter/test/Android.bp
+++ b/automotive/audiocontrol/aidl/default/converter/test/Android.bp
@@ -33,6 +33,7 @@
cc_test {
name: "AudioControlConverterUnitTest",
+ team: "trendy_team_aaos_audio_triage",
vendor: true,
require_root: true,
srcs: ["*.cpp"],
diff --git a/automotive/audiocontrol/aidl/vts/Android.bp b/automotive/audiocontrol/aidl/vts/Android.bp
index 57c6ae4..d7e5927 100644
--- a/automotive/audiocontrol/aidl/vts/Android.bp
+++ b/automotive/audiocontrol/aidl/vts/Android.bp
@@ -43,6 +43,7 @@
cc_test {
name: "VtsAidlHalAudioControlTest",
+ team: "trendy_team_aaos_audio_triage",
defaults: [
"latest_android_hardware_audio_common_cpp_static",
"latest_android_hardware_automotive_audiocontrol_cpp_static",
diff --git a/automotive/remoteaccess/hal/default/test/Android.bp b/automotive/remoteaccess/hal/default/test/Android.bp
index 378a330..6eaad8b 100644
--- a/automotive/remoteaccess/hal/default/test/Android.bp
+++ b/automotive/remoteaccess/hal/default/test/Android.bp
@@ -19,6 +19,7 @@
cc_test {
name: "RemoteAccessServiceUnitTest",
+ team: "trendy_team_aaos_power_triage",
vendor: true,
srcs: ["*.cpp"],
whole_static_libs: [
diff --git a/automotive/remoteaccess/test_grpc_server/impl/Android.bp b/automotive/remoteaccess/test_grpc_server/impl/Android.bp
index 8d8d72a..6a31900 100644
--- a/automotive/remoteaccess/test_grpc_server/impl/Android.bp
+++ b/automotive/remoteaccess/test_grpc_server/impl/Android.bp
@@ -65,6 +65,7 @@
cc_test_host {
name: "TestWakeupClientServerHostUnitTest",
+ team: "trendy_team_aaos_power_triage",
srcs: [
"test/*.cpp",
"src/TestWakeupClientServiceImpl.cpp",
diff --git a/automotive/remoteaccess/vts/Android.bp b/automotive/remoteaccess/vts/Android.bp
index 043cafa..823c410 100644
--- a/automotive/remoteaccess/vts/Android.bp
+++ b/automotive/remoteaccess/vts/Android.bp
@@ -26,6 +26,7 @@
cc_test {
name: "VtsHalAutomotiveRemoteAccess_TargetTest",
+ team: "trendy_team_aaos_power_triage",
srcs: [
"src/*.cpp",
],
diff --git a/automotive/vehicle/2.0/default/Android.bp b/automotive/vehicle/2.0/default/Android.bp
index 76d44f8..05f2294 100644
--- a/automotive/vehicle/2.0/default/Android.bp
+++ b/automotive/vehicle/2.0/default/Android.bp
@@ -163,6 +163,7 @@
cc_test {
name: "android.hardware.automotive.vehicle@2.0-manager-unit-tests",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["vhal_v2_0_target_defaults"],
whole_static_libs: ["android.hardware.automotive.vehicle@2.0-manager-lib"],
@@ -197,6 +198,7 @@
cc_test {
name: "android.hardware.automotive.vehicle@2.0-default-impl-unit-tests",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["vhal_v2_0_target_defaults"],
srcs: [
@@ -231,6 +233,7 @@
cc_test {
name: "android.hardware.automotive.vehicle@2.0-default-config-test",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["vhal_v2_0_target_defaults"],
srcs: [
diff --git a/automotive/vehicle/2.0/utils/Android.bp b/automotive/vehicle/2.0/utils/Android.bp
index 802b4b3..ccc376b 100644
--- a/automotive/vehicle/2.0/utils/Android.bp
+++ b/automotive/vehicle/2.0/utils/Android.bp
@@ -38,6 +38,7 @@
cc_test {
name: "android.hardware.automotive.vehicle@2.0-utils-unit-tests",
+ team: "trendy_team_aaos_carframework_triage",
defaults: ["vhal_v2_0_defaults"],
vendor: true,
tidy_timeout_srcs: [
diff --git a/automotive/vehicle/aidl/aidl_test/Android.bp b/automotive/vehicle/aidl/aidl_test/Android.bp
index 8edd636..a87af02 100644
--- a/automotive/vehicle/aidl/aidl_test/Android.bp
+++ b/automotive/vehicle/aidl/aidl_test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "VehicleHalAidlHidlCompatibilityTest",
+ team: "trendy_team_aaos_carframework_triage",
srcs: ["AidlHidlCompatibilityTest.cpp"],
shared_libs: [
"libbinder_ndk",
@@ -39,6 +40,7 @@
cc_test {
name: "VehiclePropertyAnnotationCppTest",
+ team: "trendy_team_aaos_carframework_triage",
srcs: ["VehiclePropertyAnnotationCppTest.cpp"],
header_libs: ["IVehicleGeneratedHeaders-V4"],
defaults: ["VehicleHalInterfaceDefaults"],
@@ -47,6 +49,7 @@
android_test {
name: "VehiclePropertyAnnotationJavaTest",
+ team: "trendy_team_aaos_carframework_triage",
srcs: [
"VehiclePropertyAnnotationJavaTest.java",
":IVehicleGeneratedJavaFiles-V4",
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
index 1720628..9ca4366 100644
--- a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
@@ -29,142 +29,156 @@
int areaId;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * The optional minimum int32 value at boot time.
+ *
+ * Assume unspecified if both {@code minInt32Value} and
+ * {@code maxInt32Value} is 0. If either one is not 0, then we assume min
+ * and max both take effect. If no minimum or maximum value is available at
+ * boot time, both {@code minInt32Value} and {@code maxInt32Value} must be
+ * set to 0.
+ *
+ * Note that this property only represents the minimum value at boot time
+ * and may not represent the current actual minimum value.
*
* Only applicable for {@code INT32} type property. Ignored for other types.
*
- * The optional minimum value at boot time.
+ * For certain properties, this field must be specified, see
+ * {@code VehicleProperty} documentation.
*
- * For backward compatibility,
- * if {@code HasSupportedValueInfo.hasMinSupportedValue} is {@code true},
- * and {@code HasSupportedValueInfo.hasMaxSupportedValue} is {@code true},
- * this must be equal to the min supported value
- * ({@code MinMaxSupportedValueResult.minSupportedValue}) at boot time.
- *
- * If no minimum or maximum value is available at boot time, both
- * {@code minInt32Value} and {@code maxInt32Value} must be set to 0.
- *
- * If either one is not 0, then we assume min and max both take effect.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * specified, {@code HasSupportedValueInfo.hasMinSupportedValue} must be
+ * {@code true}.
*/
int minInt32Value;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * The optional maximum int32 value at boot time.
+ *
+ * Assume unspecified if both {@code minInt32Value} and
+ * {@code maxInt32Value} is 0. If either one is not 0, then we assume min
+ * and max both take effect. If no minimum or maximum value is available at
+ * boot time, both {@code minInt32Value} and {@code maxInt32Value} must be
+ * set to 0.
+ *
+ * Note that this property only represents the minimum value at boot time
+ * and may not represent the current actual minimum value.
*
* Only applicable for {@code INT32} type property. Ignored for other types.
*
- * The optional maximum value at boot time.
+ * For certain properties, this field must be specified, see
+ * {@code VehicleProperty} documentation.
*
- * For backward compatibility,
- * if {@code HasSupportedValueInfo.hasMinSupportedValue} is {@code true},
- * and {@code HasSupportedValueInfo.hasMaxSupportedValue} is {@code true},
- * this must be equal to the max supported value
- * ({@code MinMaxSupportedValueResult.maxSupportedValue}) at boot time.
- *
- * If no minimum or maximum value is available at boot time, both
- * {@code minInt32Value} and {@code maxInt32Value} must be set to 0.
- *
- * If either one is not 0, then we assume min and max both take effect.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * specified, {@code HasSupportedValueInfo.hasMaxSupportedValue} must be
+ * {@code true}.
*/
int maxInt32Value;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * The optional minimum int64 value at boot time.
+ *
+ * Assume unspecified if both {@code minInt64Value} and
+ * {@code maxInt64Value} is 0. If either one is not 0, then we assume min
+ * and max both take effect. If no minimum or maximum value is available at
+ * boot time, both {@code minInt64Value} and {@code maxInt64Value} must be
+ * set to 0.
+ *
+ * Note that this property only represents the minimum value at boot time
+ * and may not represent the current actual minimum value.
*
* Only applicable for {@code INT64} type property. Ignored for other types.
*
- * The optional minimum value at boot time.
+ * For certain properties, this field must be specified, see
+ * {@code VehicleProperty} documentation.
*
- * For backward compatibility,
- * if {@code HasSupportedValueInfo.hasMinSupportedValue} is {@code true},
- * and {@code HasSupportedValueInfo.hasMaxSupportedValue} is {@code true},
- * this must be equal to the min supported value
- * ({@code MinMaxSupportedValueResult.minSupportedValue}) at boot time.
- *
- * If no minimum or maximum value is available at boot time, both
- * {@code minInt64Value} and {@code maxInt64Value} must be set to 0.
- *
- * If either one is not 0, then we assume min and max both take effect.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * specified, {@code HasSupportedValueInfo.hasMinSupportedValue} must be
+ * {@code true}.
*/
long minInt64Value;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * The optional maximum int64 value at boot time.
+ *
+ * Assume unspecified if both {@code minInt64Value} and
+ * {@code maxInt64Value} is 0. If either one is not 0, then we assume min
+ * and max both take effect. If no minimum or maximum value is available at
+ * boot time, both {@code minInt64Value} and {@code maxInt64Value} must be
+ * set to 0.
+ *
+ * Note that this property only represents the minimum value at boot time
+ * and may not represent the current actual minimum value.
*
* Only applicable for {@code INT64} type property. Ignored for other types.
*
- * The optional maximum value at boot time.
+ * For certain properties, this field must be specified, see
+ * {@code VehicleProperty} documentation.
*
- * For backward compatibility,
- * if {@code HasSupportedValueInfo.hasMinSupportedValue} is {@code true},
- * and {@code HasSupportedValueInfo.hasMaxSupportedValue} is {@code true},
- * this must be equal to the max supported value
- * ({@code MinMaxSupportedValueResult.maxSupportedValue}) at boot time.
- *
- * If no minimum or maximum value is available at boot time, both
- * {@code minInt64Value} and {@code maxInt64Value} must be set to 0.
- *
- * If either one is not 0, then we assume min and max both take effect.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * specified, {@code HasSupportedValueInfo.hasMaxSupportedValue} must be
+ * {@code true}.
*/
long maxInt64Value;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * The optional minimum float value at boot time.
+ *
+ * Assume unspecified if both {@code minFloatValue} and
+ * {@code maxFloatValue} is 0. If either one is not 0, then we assume min
+ * and max both take effect. If no minimum or maximum value is available at
+ * boot time, both {@code minFloatValue} and {@code maxFloatValue} must be
+ * set to 0.
+ *
+ * Note that this property only represents the minimum value at boot time
+ * and may not represent the current actual minimum value.
*
* Only applicable for {@code FLOAT} type property. Ignored for other types.
*
- * The optional minimum value at boot time.
+ * For certain properties, this field must be specified, see
+ * {@code VehicleProperty} documentation.
*
- * For backward compatibility,
- * if {@code HasSupportedValueInfo.hasMinSupportedValue} is {@code true},
- * and {@code HasSupportedValueInfo.hasMaxSupportedValue} is {@code true},
- * this must be equal to the min supported value
- * ({@code MinMaxSupportedValueResult.minSupportedValue}) at boot time.
- *
- * If no minimum or maximum value is available at boot time, both
- * {@code minFloatValue} and {@code maxFloatValue} must be set to 0.
- *
- * If either one is not 0, then we assume min and max both take effect.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * specified, {@code HasSupportedValueInfo.hasMinSupportedValue} must be
+ * {@code true}.
*/
float minFloatValue;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * The optional maximum float value at boot time.
+ *
+ * Assume unspecified if both {@code minFloatValue} and
+ * {@code maxFloatValue} is 0. If either one is not 0, then we assume min
+ * and max both take effect. If no minimum or maximum value is available at
+ * boot time, both {@code minFloatValue} and {@code maxFloatValue} must be
+ * set to 0.
+ *
+ * Note that this property only represents the minimum value at boot time
+ * and may not represent the current actual minimum value.
*
* Only applicable for {@code FLOAT} type property. Ignored for other types.
*
- * The optional maximum value at boot time.
+ * For certain properties, this field must be specified, see
+ * {@code VehicleProperty} documentation.
*
- * For backward compatibility,
- * if {@code HasSupportedValueInfo.hasMinSupportedValue} is {@code true},
- * and {@code HasSupportedValueInfo.hasMaxSupportedValue} is {@code true},
- * this must be equal to the max supported value
- * ({@code MinMaxSupportedValueResult.maxSupportedValue}) at boot time.
- *
- * If no minimum or maximum value is available at boot time, both
- * {@code minFloatValue} and {@code maxFloatValue} must be set to 0.
- *
- * If either one is not 0, then we assume min and max both take effect.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * specified, {@code HasSupportedValueInfo.hasMinSupportedValue} must be
+ * {@code true}.
*/
float maxFloatValue;
/**
- * client should use {@code getMinMaxSupportedValue} instead.
+ * Optional supported subset of supported enum values at boot time.
*
* Only applicable for property with {@code @data_enum} annotation. Ignored
* for other properties.
*
- * Optional supported subset of supported values at boot time.
- *
* If the property has a @data_enum and supportedEnumValues is {@code null},
* then it is assumed all @data_enum values are supported unless specified
* through another mechanism.
*
- * For backward compatibility, if
- * {@code HasSupportedValueInfo.hasSupportedValuesList} is {@code true}
- * and this property has {@code data_enum} annotation,
- * this must be set to the same as
- * {@code SupportedValuesListResult.supportedValuesList} at boot time.
+ * If {@code HasSupportedValueInfo} is not {@code null} and this field is
+ * not {@code null}, {@code HasSupportedValueInfo.hasSupportedValuesList}
+ * must be {@code true}.
*/
@nullable long[] supportedEnumValues;
@@ -237,7 +251,19 @@
* {@code getSupportedValuesLists}, {@code subscribeSupportedValueChange},
* {@code unsubscribeSupportedValueChange}.
*
- * If this is {@code null} for legacy properties, the APIs mentioned before are not supported.
+ * If this is not {@code null}. The VHAL implementation must implement
+ * {@code getMinMaxSupportedValue}, {@code getSupportedValuesLists},
+ * {@code subscribeSupportedValueChange} for the [propId, areaId].
+ *
+ * This should be non-null if the VHAL implementation wants to expose
+ * min/max supported value or supported values list that may change dynamically. For example,
+ * if the max HVAC fan speed may change due to HVAC power settings.
+ *
+ * This should not be non-null if the VHAL implementation wants to expose supported
+ * values list for property ID that is not an enum type (hence do not support
+ * {@code VehicleAreaConfig#supportedEnumValues}).
+ *
+ * If this is {@code null}, the APIs mentioned before are not supported.
* Client must fallback to use static supported value information in {@code VehicleAreaConfig}.
*
* For VHAL implementation < V4, this is always {@code null}.
diff --git a/automotive/vehicle/aidl/impl/3/default_config/JsonConfigLoader/test/Android.bp b/automotive/vehicle/aidl/impl/3/default_config/JsonConfigLoader/test/Android.bp
index 1ed4df7..0d5b6dd 100644
--- a/automotive/vehicle/aidl/impl/3/default_config/JsonConfigLoader/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/default_config/JsonConfigLoader/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "JsonConfigLoaderUnitTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
static_libs: [
@@ -35,6 +36,7 @@
cc_test {
name: "JsonConfigLoaderUnitTestEnableTestProperties-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
static_libs: [
diff --git a/automotive/vehicle/aidl/impl/3/default_config/test/Android.bp b/automotive/vehicle/aidl/impl/3/default_config/test/Android.bp
index d125d43..1b344f9 100644
--- a/automotive/vehicle/aidl/impl/3/default_config/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/default_config/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "VehicleHalDefaultConfigTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["VehicleHalDefaults-V3"],
srcs: ["*.cpp"],
@@ -42,6 +43,7 @@
cc_test {
name: "VehicleHalDefaultConfigTestEnableTestProperties-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["VehicleHalDefaults-V3"],
srcs: ["*.cpp"],
diff --git a/automotive/vehicle/aidl/impl/3/fake_impl/GeneratorHub/test/Android.bp b/automotive/vehicle/aidl/impl/3/fake_impl/GeneratorHub/test/Android.bp
index 623417b..399d688 100644
--- a/automotive/vehicle/aidl/impl/3/fake_impl/GeneratorHub/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/fake_impl/GeneratorHub/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeVehicleHalValueGeneratorsTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
defaults: ["VehicleHalDefaults-V3"],
diff --git a/automotive/vehicle/aidl/impl/3/fake_impl/hardware/test/Android.bp b/automotive/vehicle/aidl/impl/3/fake_impl/hardware/test/Android.bp
index e7e5ba7..2239b24 100644
--- a/automotive/vehicle/aidl/impl/3/fake_impl/hardware/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/fake_impl/hardware/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeVehicleHardwareTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: [
"*.cpp",
diff --git a/automotive/vehicle/aidl/impl/3/fake_impl/obd2frame/test/Android.bp b/automotive/vehicle/aidl/impl/3/fake_impl/obd2frame/test/Android.bp
index 8b30477..e1548ed 100644
--- a/automotive/vehicle/aidl/impl/3/fake_impl/obd2frame/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/fake_impl/obd2frame/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeObd2FrameTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
defaults: ["VehicleHalDefaults-V3"],
diff --git a/automotive/vehicle/aidl/impl/3/fake_impl/userhal/test/Android.bp b/automotive/vehicle/aidl/impl/3/fake_impl/userhal/test/Android.bp
index 55178dc..050078f 100644
--- a/automotive/vehicle/aidl/impl/3/fake_impl/userhal/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/fake_impl/userhal/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeUserHalTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
defaults: ["VehicleHalDefaults-V3"],
diff --git a/automotive/vehicle/aidl/impl/3/grpc/test/Android.bp b/automotive/vehicle/aidl/impl/3/grpc/test/Android.bp
index 1ab946b..df44cab 100644
--- a/automotive/vehicle/aidl/impl/3/grpc/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/grpc/test/Android.bp
@@ -19,6 +19,7 @@
cc_test {
name: "GRPCVehicleHardwareUnitTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["GRPCVehicleHardwareUnitTest.cpp"],
whole_static_libs: [
@@ -48,6 +49,7 @@
cc_test {
name: "GRPCVehicleProxyServerUnitTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["GRPCVehicleProxyServerUnitTest.cpp"],
header_libs: [
diff --git a/automotive/vehicle/aidl/impl/3/grpc/utils/proto_message_converter/Android.bp b/automotive/vehicle/aidl/impl/3/grpc/utils/proto_message_converter/Android.bp
index 5ae94b5..63d27b0 100644
--- a/automotive/vehicle/aidl/impl/3/grpc/utils/proto_message_converter/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/grpc/utils/proto_message_converter/Android.bp
@@ -44,6 +44,7 @@
cc_test_host {
name: "VehicleHalProtoMessageConverterTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
srcs: [
"test/*.cpp",
],
diff --git a/automotive/vehicle/aidl/impl/3/utils/common/test/Android.bp b/automotive/vehicle/aidl/impl/3/utils/common/test/Android.bp
index 0450e99..2613d68 100644
--- a/automotive/vehicle/aidl/impl/3/utils/common/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/utils/common/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "VehicleHalVehicleUtilsTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
srcs: ["*.cpp"],
vendor: true,
static_libs: [
diff --git a/automotive/vehicle/aidl/impl/3/vhal/test/Android.bp b/automotive/vehicle/aidl/impl/3/vhal/test/Android.bp
index e86bc81..8df544f 100644
--- a/automotive/vehicle/aidl/impl/3/vhal/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/3/vhal/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "DefaultVehicleHalTest-V3",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
static_libs: [
diff --git a/automotive/vehicle/aidl/impl/current/default_config/JsonConfigLoader/test/Android.bp b/automotive/vehicle/aidl/impl/current/default_config/JsonConfigLoader/test/Android.bp
index 90ea027..658b1e1 100644
--- a/automotive/vehicle/aidl/impl/current/default_config/JsonConfigLoader/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/default_config/JsonConfigLoader/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "JsonConfigLoaderUnitTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
static_libs: [
@@ -35,6 +36,7 @@
cc_test {
name: "JsonConfigLoaderUnitTestEnableTestProperties",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
static_libs: [
diff --git a/automotive/vehicle/aidl/impl/current/default_config/test/Android.bp b/automotive/vehicle/aidl/impl/current/default_config/test/Android.bp
index a88913e..f31ccbd 100644
--- a/automotive/vehicle/aidl/impl/current/default_config/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/default_config/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "VehicleHalDefaultConfigTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["VehicleHalDefaults"],
srcs: ["*.cpp"],
@@ -42,6 +43,7 @@
cc_test {
name: "VehicleHalDefaultConfigTestEnableTestProperties",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
defaults: ["VehicleHalDefaults"],
srcs: ["*.cpp"],
diff --git a/automotive/vehicle/aidl/impl/current/fake_impl/GeneratorHub/test/Android.bp b/automotive/vehicle/aidl/impl/current/fake_impl/GeneratorHub/test/Android.bp
index 0d814ea..7772d04 100644
--- a/automotive/vehicle/aidl/impl/current/fake_impl/GeneratorHub/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/fake_impl/GeneratorHub/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeVehicleHalValueGeneratorsTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
defaults: ["VehicleHalDefaults"],
diff --git a/automotive/vehicle/aidl/impl/current/fake_impl/hardware/test/Android.bp b/automotive/vehicle/aidl/impl/current/fake_impl/hardware/test/Android.bp
index 62c1147..cd635f4 100644
--- a/automotive/vehicle/aidl/impl/current/fake_impl/hardware/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/fake_impl/hardware/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeVehicleHardwareTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: [
"*.cpp",
diff --git a/automotive/vehicle/aidl/impl/current/fake_impl/obd2frame/test/Android.bp b/automotive/vehicle/aidl/impl/current/fake_impl/obd2frame/test/Android.bp
index 7c7c0ab..d3ebe3c 100644
--- a/automotive/vehicle/aidl/impl/current/fake_impl/obd2frame/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/fake_impl/obd2frame/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeObd2FrameTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
defaults: ["VehicleHalDefaults"],
diff --git a/automotive/vehicle/aidl/impl/current/fake_impl/userhal/test/Android.bp b/automotive/vehicle/aidl/impl/current/fake_impl/userhal/test/Android.bp
index 30411f2..5448d33 100644
--- a/automotive/vehicle/aidl/impl/current/fake_impl/userhal/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/fake_impl/userhal/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "FakeUserHalTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
defaults: ["VehicleHalDefaults"],
diff --git a/automotive/vehicle/aidl/impl/current/grpc/test/Android.bp b/automotive/vehicle/aidl/impl/current/grpc/test/Android.bp
index b3c6089..d3e61fe 100644
--- a/automotive/vehicle/aidl/impl/current/grpc/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/grpc/test/Android.bp
@@ -19,6 +19,7 @@
cc_test {
name: "GRPCVehicleHardwareUnitTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["GRPCVehicleHardwareUnitTest.cpp"],
whole_static_libs: [
@@ -48,6 +49,7 @@
cc_test {
name: "GRPCVehicleProxyServerUnitTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["GRPCVehicleProxyServerUnitTest.cpp"],
header_libs: [
diff --git a/automotive/vehicle/aidl/impl/current/grpc/utils/proto_message_converter/Android.bp b/automotive/vehicle/aidl/impl/current/grpc/utils/proto_message_converter/Android.bp
index 94c09aa..cf41843 100644
--- a/automotive/vehicle/aidl/impl/current/grpc/utils/proto_message_converter/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/grpc/utils/proto_message_converter/Android.bp
@@ -44,6 +44,7 @@
cc_test_host {
name: "VehicleHalProtoMessageConverterTest",
+ team: "trendy_team_aaos_carframework_triage",
srcs: [
"test/*.cpp",
],
diff --git a/automotive/vehicle/aidl/impl/current/utils/common/test/Android.bp b/automotive/vehicle/aidl/impl/current/utils/common/test/Android.bp
index 69ec7a2..bb654d7 100644
--- a/automotive/vehicle/aidl/impl/current/utils/common/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/utils/common/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "VehicleHalVehicleUtilsTest",
+ team: "trendy_team_aaos_carframework_triage",
srcs: ["*.cpp"],
vendor: true,
static_libs: [
diff --git a/automotive/vehicle/aidl/impl/current/vhal/test/Android.bp b/automotive/vehicle/aidl/impl/current/vhal/test/Android.bp
index d6c2f8e..eaaea1d 100644
--- a/automotive/vehicle/aidl/impl/current/vhal/test/Android.bp
+++ b/automotive/vehicle/aidl/impl/current/vhal/test/Android.bp
@@ -21,6 +21,7 @@
cc_test {
name: "DefaultVehicleHalTest",
+ team: "trendy_team_aaos_carframework_triage",
vendor: true,
srcs: ["*.cpp"],
static_libs: [
diff --git a/automotive/vehicle/vts/Android.bp b/automotive/vehicle/vts/Android.bp
index d55dc33..219119d 100644
--- a/automotive/vehicle/vts/Android.bp
+++ b/automotive/vehicle/vts/Android.bp
@@ -26,6 +26,7 @@
cc_test {
name: "VtsHalAutomotiveVehicle_TargetTest",
+ team: "trendy_team_aaos_carframework_triage",
srcs: [
"src/*.cpp",
],
diff --git a/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/virtualhal/IVirtualHal.aidl b/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/virtualhal/IVirtualHal.aidl
index 5af84ed..d9a60a5 100644
--- a/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/virtualhal/IVirtualHal.aidl
+++ b/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/virtualhal/IVirtualHal.aidl
@@ -311,7 +311,7 @@
void setSensorStrength(in SensorStrength strength);
void setMaxEnrollmentPerUser(in int max);
void setSensorLocation(in SensorLocation loc);
- void setNavigationGuesture(in boolean v);
+ void setNavigationGesture(in boolean v);
void setDetectInteraction(in boolean v);
void setDisplayTouch(in boolean v);
void setControlIllumination(in boolean v);
diff --git a/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp b/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp
index 7a43d7b..175e310 100644
--- a/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp
+++ b/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp
@@ -414,41 +414,60 @@
return ndk::ScopedAStatus::ok();
}
-bool FakeFingerprintEngine::getSensorLocationConfig(SensorLocation& out) {
- auto loc = Fingerprint::cfg().get<std::string>("sensor_location");
+bool FakeFingerprintEngine::getSensorLocationConfig(std::vector<SensorLocation>& out) {
+ auto locStr = Fingerprint::cfg().get<std::string>("sensor_location");
auto isValidStr = false;
- auto dim = Util::split(loc, ":");
- if (dim.size() < 3 or dim.size() > 4) {
- if (!loc.empty()) LOG(WARNING) << "Invalid sensor location input (x:y:radius):" + loc;
- return false;
- } else {
- int32_t x, y, r;
- std::string d = "";
- if (dim.size() >= 3) {
- isValidStr = ParseInt(dim[0], &x) && ParseInt(dim[1], &y) && ParseInt(dim[2], &r);
+ // sensor_location format: x:y:r:d,x:y:r:d,...
+ // x: x location in pixel, y: y location in pixel, r: radus in pixel, d:display in string
+ auto locations = Util::split(locStr, ",");
+ for (int i = 0; i < locations.size(); i++) {
+ auto loc = locations[i];
+
+ // expect loc in the format: x:y:r or x:y:d:r
+ auto dim = Util::split(loc, ":");
+
+ if (dim.size() < 3) {
+ if (!loc.empty()) LOG(WARNING) << "Invalid sensor location input (x:y:radius):" + loc;
+ out.clear();
+ return false;
+ } else {
+ int32_t x, y, r;
+ std::string d = "";
+ if (dim.size() >= 3) {
+ isValidStr = ParseInt(dim[0], &x) && ParseInt(dim[1], &y) && ParseInt(dim[2], &r);
+ }
+ if (dim.size() >= 4) {
+ for (int i = 3; i < dim.size(); i++) {
+ if (i > 3) d += ':';
+ d += dim[i];
+ }
+ }
+ if (isValidStr) {
+ out.push_back(SensorLocation{.sensorLocationX = x,
+ .sensorLocationY = y,
+ .sensorRadius = r,
+ .display = d});
+ }
}
- if (dim.size() >= 4) {
- d = dim[3];
+ }
+
+ LOG(INFO) << "getSensorLocationConfig: isValidStr=" << isValidStr << " locStr=" << locStr;
+ if (isValidStr) {
+ for (auto loc : out) {
+ LOG(INFO) << loc.toString();
}
- if (isValidStr)
- out = {.sensorLocationX = x, .sensorLocationY = y, .sensorRadius = r, .display = d};
-
- return isValidStr;
- }
-}
-SensorLocation FakeFingerprintEngine::getSensorLocation() {
- SensorLocation location;
-
- if (getSensorLocationConfig(location)) {
- return location;
} else {
- return defaultSensorLocation();
+ out.clear();
}
+
+ return isValidStr;
}
-SensorLocation FakeFingerprintEngine::defaultSensorLocation() {
- return SensorLocation();
+void FakeFingerprintEngine::getSensorLocation(std::vector<SensorLocation>& location) {
+ if (!getSensorLocationConfig(location)) {
+ getDefaultSensorLocation(location);
+ }
}
std::pair<AcquiredInfo, int32_t> FakeFingerprintEngine::convertAcquiredInfo(int32_t code) {
diff --git a/biometrics/fingerprint/aidl/default/FakeFingerprintEngineSide.cpp b/biometrics/fingerprint/aidl/default/FakeFingerprintEngineSide.cpp
index acb792d..e823d75 100644
--- a/biometrics/fingerprint/aidl/default/FakeFingerprintEngineSide.cpp
+++ b/biometrics/fingerprint/aidl/default/FakeFingerprintEngineSide.cpp
@@ -26,12 +26,17 @@
using namespace ::android::fingerprint::virt;
namespace aidl::android::hardware::biometrics::fingerprint {
+SensorLocation FakeFingerprintEngineSide::defaultLocation[] = {
+ // default to CF display
+ {.sensorLocationX = 0, 200, 90, "local:4619827353912518656"}};
FakeFingerprintEngineSide::FakeFingerprintEngineSide() : FakeFingerprintEngine() {}
-SensorLocation FakeFingerprintEngineSide::defaultSensorLocation() {
- return SensorLocation{.sensorLocationX = defaultSensorLocationX,
- .sensorLocationY = defaultSensorLocationY,
- .sensorRadius = defaultSensorRadius};
+void FakeFingerprintEngineSide::getDefaultSensorLocation(
+ std::vector<SensorLocation>& sensorLocation) {
+ for (int i = 0; i < (sizeof(defaultLocation) / sizeof(defaultLocation[0])); i++) {
+ sensorLocation.push_back(defaultLocation[i]);
+ }
}
+
} // namespace aidl::android::hardware::biometrics::fingerprint
diff --git a/biometrics/fingerprint/aidl/default/FakeFingerprintEngineUdfps.cpp b/biometrics/fingerprint/aidl/default/FakeFingerprintEngineUdfps.cpp
index 496b5e3..f2d5687 100644
--- a/biometrics/fingerprint/aidl/default/FakeFingerprintEngineUdfps.cpp
+++ b/biometrics/fingerprint/aidl/default/FakeFingerprintEngineUdfps.cpp
@@ -34,10 +34,14 @@
FakeFingerprintEngineUdfps::FakeFingerprintEngineUdfps()
: FakeFingerprintEngine(), mPointerDownTime(0), mUiReadyTime(0) {}
-SensorLocation FakeFingerprintEngineUdfps::defaultSensorLocation() {
- return SensorLocation{.sensorLocationX = defaultSensorLocationX,
- .sensorLocationY = defaultSensorLocationY,
- .sensorRadius = defaultSensorRadius};
+void FakeFingerprintEngineUdfps::getDefaultSensorLocation(
+ std::vector<SensorLocation>& sensorLocation) {
+ sensorLocation.clear();
+ sensorLocation.push_back(SensorLocation{
+ .sensorLocationX = defaultSensorLocationX,
+ .sensorLocationY = defaultSensorLocationY,
+ .sensorRadius = defaultSensorRadius,
+ });
}
ndk::ScopedAStatus FakeFingerprintEngineUdfps::onPointerDownImpl(int32_t /*pointerId*/,
diff --git a/biometrics/fingerprint/aidl/default/Fingerprint.cpp b/biometrics/fingerprint/aidl/default/Fingerprint.cpp
index 143e231..6d39e12 100644
--- a/biometrics/fingerprint/aidl/default/Fingerprint.cpp
+++ b/biometrics/fingerprint/aidl/default/Fingerprint.cpp
@@ -74,7 +74,7 @@
auto sensorId = Fingerprint::cfg().get<std::int32_t>("sensor_id");
auto sensorStrength = Fingerprint::cfg().get<std::int32_t>("sensor_strength");
auto maxEnrollments = Fingerprint::cfg().get<std::int32_t>("max_enrollments");
- auto navigationGuesture = Fingerprint::cfg().get<bool>("navigation_guesture");
+ auto navigationGesture = Fingerprint::cfg().get<bool>("navigation_gesture");
auto detectInteraction = Fingerprint::cfg().get<bool>("detect_interaction");
auto displayTouch = Fingerprint::cfg().get<bool>("display_touch");
auto controlIllumination = Fingerprint::cfg().get<bool>("control_illumination");
@@ -82,19 +82,15 @@
common::CommonProps commonProps = {sensorId, (common::SensorStrength)sensorStrength,
maxEnrollments, componentInfo};
- SensorLocation sensorLocation = mEngine->getSensorLocation();
+ std::vector<SensorLocation> sensorLocation;
+ mEngine->getSensorLocation(sensorLocation);
+ LOG(INFO) << "sensor type:" << ::android::internal::ToString(mSensorType);
+ for (auto location : sensorLocation) {
+ LOG(INFO) << "sensor location: " << location.toString();
+ }
- LOG(INFO) << "sensor type:" << ::android::internal::ToString(mSensorType)
- << " location:" << sensorLocation.toString();
-
- *out = {{commonProps,
- mSensorType,
- {sensorLocation},
- navigationGuesture,
- detectInteraction,
- displayTouch,
- controlIllumination,
- std::nullopt}};
+ *out = {{commonProps, mSensorType, sensorLocation, navigationGesture, detectInteraction,
+ displayTouch, controlIllumination, std::nullopt}};
return ndk::ScopedAStatus::ok();
}
@@ -204,7 +200,7 @@
RESET_CONFIG_O(sensor_id);
RESET_CONFIG_O(sensor_strength);
RESET_CONFIG_O(max_enrollments);
- RESET_CONFIG_O(navigation_guesture);
+ RESET_CONFIG_O(navigation_gesture);
RESET_CONFIG_O(detect_interaction);
RESET_CONFIG_O(display_touch);
RESET_CONFIG_O(control_illumination);
diff --git a/biometrics/fingerprint/aidl/default/FingerprintConfig.cpp b/biometrics/fingerprint/aidl/default/FingerprintConfig.cpp
index 82c5403..2a87a55 100644
--- a/biometrics/fingerprint/aidl/default/FingerprintConfig.cpp
+++ b/biometrics/fingerprint/aidl/default/FingerprintConfig.cpp
@@ -56,7 +56,7 @@
CREATE_GETTER_SETTER_WRAPPER(operation_detect_interaction_duration, OptInt32)
CREATE_GETTER_SETTER_WRAPPER(operation_detect_interaction_acquired, OptString)
CREATE_GETTER_SETTER_WRAPPER(max_enrollments, OptBool)
-CREATE_GETTER_SETTER_WRAPPER(navigation_guesture, OptBool)
+CREATE_GETTER_SETTER_WRAPPER(navigation_gesture, OptBool)
CREATE_GETTER_SETTER_WRAPPER(detect_interaction, OptBool)
CREATE_GETTER_SETTER_WRAPPER(display_touch, OptBool)
CREATE_GETTER_SETTER_WRAPPER(control_illumination, OptBool)
@@ -90,7 +90,7 @@
{NGS(operation_detect_interaction_duration), &Config::parseInt32, "10"},
{NGS(operation_detect_interaction_acquired), &Config::parseString, "1"},
{NGS(max_enrollments), &Config::parseInt32, "5"},
- {NGS(navigation_guesture), &Config::parseBool, "false"},
+ {NGS(navigation_gesture), &Config::parseBool, "false"},
{NGS(detect_interaction), &Config::parseBool, "false"},
{NGS(display_touch), &Config::parseBool, "true"},
{NGS(control_illumination), &Config::parseBool, "false"},
diff --git a/biometrics/fingerprint/aidl/default/VirtualHal.cpp b/biometrics/fingerprint/aidl/default/VirtualHal.cpp
index d161765..7e0d40b 100644
--- a/biometrics/fingerprint/aidl/default/VirtualHal.cpp
+++ b/biometrics/fingerprint/aidl/default/VirtualHal.cpp
@@ -266,9 +266,9 @@
return ndk::ScopedAStatus::ok();
}
-::ndk::ScopedAStatus VirtualHal::setNavigationGuesture(bool in_v) {
+::ndk::ScopedAStatus VirtualHal::setNavigationGesture(bool in_v) {
Fingerprint::cfg().sourcedFromAidl();
- Fingerprint::cfg().set<bool>("navigation_guesture", in_v);
+ Fingerprint::cfg().set<bool>("navigation_gesture", in_v);
return ndk::ScopedAStatus::ok();
}
@@ -338,4 +338,13 @@
*pFp = mFp;
return ndk::ScopedAStatus::ok();
}
+
+binder_status_t VirtualHal::dump(int fd, const char** args, uint32_t nargs) {
+ return mFp->dump(fd, args, nargs);
+}
+
+binder_status_t VirtualHal::handleShellCommand(int in, int out, int err, const char** args,
+ uint32_t numArgs) {
+ return mFp->handleShellCommand(in, out, err, args, numArgs);
+}
} // namespace aidl::android::hardware::biometrics::fingerprint
diff --git a/biometrics/fingerprint/aidl/default/api/android.hardware.biometrics.fingerprint.VirtualProps-current.txt b/biometrics/fingerprint/aidl/default/api/android.hardware.biometrics.fingerprint.VirtualProps-current.txt
index ad6f9e0..0d31768 100644
--- a/biometrics/fingerprint/aidl/default/api/android.hardware.biometrics.fingerprint.VirtualProps-current.txt
+++ b/biometrics/fingerprint/aidl/default/api/android.hardware.biometrics.fingerprint.VirtualProps-current.txt
@@ -75,9 +75,9 @@
prop_name: "persist.vendor.fingerprint.virtual.max_enrollments"
}
prop {
- api_name: "navigation_guesture"
+ api_name: "navigation_gesture"
access: ReadWrite
- prop_name: "persist.vendor.fingerprint.virtual.navigation_guesture"
+ prop_name: "persist.vendor.fingerprint.virtual.navigation_gesture"
}
prop {
api_name: "next_enrollment"
diff --git a/biometrics/fingerprint/aidl/default/fingerprint.sysprop b/biometrics/fingerprint/aidl/default/fingerprint.sysprop
index 1d64c48..7582329 100644
--- a/biometrics/fingerprint/aidl/default/fingerprint.sysprop
+++ b/biometrics/fingerprint/aidl/default/fingerprint.sysprop
@@ -149,7 +149,8 @@
}
# sensor location
-# <x>:<y>:<radius> in pixel
+# <display1>[,display2] ...
+# display format: <x>:<y>:<radius>[:displayString]
prop {
prop_name: "persist.vendor.fingerprint.virtual.sensor_location"
type: String
@@ -218,13 +219,13 @@
api_name: "max_enrollments"
}
-# whether support navigation guestures (default: false)
+# whether support navigation gestures (default: false)
prop {
- prop_name: "persist.vendor.fingerprint.virtual.navigation_guesture"
+ prop_name: "persist.vendor.fingerprint.virtual.navigation_gesture"
type: Boolean
scope: Public
access: ReadWrite
- api_name: "navigation_guesture"
+ api_name: "navigation_gesture"
}
# whether support detect interaction (default: false)
diff --git a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h
index 362d0df..bb8fd40 100644
--- a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h
+++ b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h
@@ -53,7 +53,7 @@
void getAuthenticatorIdImpl(ISessionCallback* cb);
void invalidateAuthenticatorIdImpl(ISessionCallback* cb);
void resetLockoutImpl(ISessionCallback* cb, const keymaster::HardwareAuthToken& /*hat*/);
- bool getSensorLocationConfig(SensorLocation& out);
+ bool getSensorLocationConfig(std::vector<SensorLocation>& out);
virtual ndk::ScopedAStatus onPointerDownImpl(int32_t pointerId, int32_t x, int32_t y,
float minor, float major);
@@ -62,9 +62,9 @@
virtual ndk::ScopedAStatus onUiReadyImpl();
- virtual SensorLocation getSensorLocation();
+ virtual void getSensorLocation(std::vector<SensorLocation>& loc);
- virtual SensorLocation defaultSensorLocation();
+ virtual void getDefaultSensorLocation(std::vector<SensorLocation>&) {}
virtual void fingerDownAction();
diff --git a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineRear.h b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineRear.h
index 14d5399..12091ee 100644
--- a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineRear.h
+++ b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineRear.h
@@ -23,6 +23,8 @@
// A fake engine that is backed by system properties instead of hardware.
class FakeFingerprintEngineRear : public FakeFingerprintEngine {
+ static SensorLocation defaultSensorLocation[];
+
public:
FakeFingerprintEngineRear() : FakeFingerprintEngine() {}
~FakeFingerprintEngineRear() {}
diff --git a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineSide.h b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineSide.h
index 67a3ebc..aa09327 100644
--- a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineSide.h
+++ b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineSide.h
@@ -24,14 +24,12 @@
// A fake engine that is backed by system properties instead of hardware.
class FakeFingerprintEngineSide : public FakeFingerprintEngine {
public:
- static constexpr int32_t defaultSensorLocationX = 0;
- static constexpr int32_t defaultSensorLocationY = 600;
- static constexpr int32_t defaultSensorRadius = 150;
+ static SensorLocation defaultLocation[];
+
+ void getDefaultSensorLocation(std::vector<SensorLocation>& sensorLocation) override;
FakeFingerprintEngineSide();
~FakeFingerprintEngineSide() {}
-
- virtual SensorLocation defaultSensorLocation() override;
};
} // namespace aidl::android::hardware::biometrics::fingerprint
diff --git a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineUdfps.h b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineUdfps.h
index 2270eca..75f1971 100644
--- a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineUdfps.h
+++ b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngineUdfps.h
@@ -40,7 +40,7 @@
ndk::ScopedAStatus onUiReadyImpl() override;
- SensorLocation defaultSensorLocation() override;
+ void getDefaultSensorLocation(std::vector<SensorLocation>& sensorLocation) override;
void updateContext(WorkMode mode, ISessionCallback* cb, std::future<void>& cancel,
int64_t operationId, const keymaster::HardwareAuthToken& hat);
diff --git a/biometrics/fingerprint/aidl/default/include/VirtualHal.h b/biometrics/fingerprint/aidl/default/include/VirtualHal.h
index 5488383..dd77888 100644
--- a/biometrics/fingerprint/aidl/default/include/VirtualHal.h
+++ b/biometrics/fingerprint/aidl/default/include/VirtualHal.h
@@ -63,13 +63,16 @@
::ndk::ScopedAStatus setSensorLocation(
const ::aidl::android::hardware::biometrics::fingerprint::SensorLocation& in_loc)
override;
- ::ndk::ScopedAStatus setNavigationGuesture(bool in_v) override;
+ ::ndk::ScopedAStatus setNavigationGesture(bool in_v) override;
::ndk::ScopedAStatus setDetectInteraction(bool in_v) override;
::ndk::ScopedAStatus setDisplayTouch(bool in_v) override;
::ndk::ScopedAStatus setControlIllumination(bool in_v) override;
::ndk::ScopedAStatus getFingerprintHal(
std::shared_ptr<::aidl::android::hardware::biometrics::fingerprint::IFingerprint>*
_aidl_return);
+ binder_status_t dump(int fd, const char** args, uint32_t nargs);
+ binder_status_t handleShellCommand(int in, int out, int err, const char** args,
+ uint32_t numArgs);
private:
OptIntVec intVec2OptIntVec(const std::vector<int32_t>& intVec);
diff --git a/biometrics/fingerprint/aidl/default/tests/FakeFingerprintEngineUdfpsTest.cpp b/biometrics/fingerprint/aidl/default/tests/FakeFingerprintEngineUdfpsTest.cpp
index eb45f98..ea0824d 100644
--- a/biometrics/fingerprint/aidl/default/tests/FakeFingerprintEngineUdfpsTest.cpp
+++ b/biometrics/fingerprint/aidl/default/tests/FakeFingerprintEngineUdfpsTest.cpp
@@ -112,30 +112,52 @@
sc.sensorRadius == FakeFingerprintEngineUdfps::defaultSensorRadius && sc.display == "");
}
-TEST_F(FakeFingerprintEngineUdfpsTest, getSensorLocationOk) {
+TEST_F(FakeFingerprintEngineUdfpsTest, getSensorLocationOkSimple) {
auto loc = "100:200:30";
Fingerprint::cfg().set<std::string>("sensor_location", loc);
- SensorLocation sc = mEngine.getSensorLocation();
- ASSERT_TRUE(sc.sensorLocationX == 100);
- ASSERT_TRUE(sc.sensorLocationY == 200);
- ASSERT_TRUE(sc.sensorRadius == 30);
+ std::vector<SensorLocation> sc;
+ mEngine.getSensorLocation(sc);
+ ASSERT_TRUE(sc[0].sensorLocationX == 100);
+ ASSERT_TRUE(sc[0].sensorLocationY == 200);
+ ASSERT_TRUE(sc[0].sensorRadius == 30);
+}
- loc = "100:200:30:screen1";
+TEST_F(FakeFingerprintEngineUdfpsTest, getSensorLocationOkWithOneDisplay) {
+ auto loc = "100:200:30:screen1";
Fingerprint::cfg().set<std::string>("sensor_location", loc);
- sc = mEngine.getSensorLocation();
- ASSERT_TRUE(sc.sensorLocationX == 100);
- ASSERT_TRUE(sc.sensorLocationY == 200);
- ASSERT_TRUE(sc.sensorRadius == 30);
- ASSERT_TRUE(sc.display == "screen1");
+ std::vector<SensorLocation> sc;
+ mEngine.getSensorLocation(sc);
+ ASSERT_TRUE(sc[0].sensorLocationX == 100);
+ ASSERT_TRUE(sc[0].sensorLocationY == 200);
+ ASSERT_TRUE(sc[0].sensorRadius == 30);
+ ASSERT_TRUE(sc[0].display == "screen1");
+}
+
+TEST_F(FakeFingerprintEngineUdfpsTest, getSensorLocationOkWithMultipleDisplays) {
+ auto loc = "100:200:30:screen1,200:400:60:screen2";
+ Fingerprint::cfg().set<std::string>("sensor_location", loc);
+ std::vector<SensorLocation> sc;
+ mEngine.getSensorLocation(sc);
+ ASSERT_TRUE(sc.size() == 2);
+ ASSERT_TRUE(sc[0].sensorLocationX == 100);
+ ASSERT_TRUE(sc[0].sensorLocationY == 200);
+ ASSERT_TRUE(sc[0].sensorRadius == 30);
+ ASSERT_TRUE(sc[0].display == "screen1");
+ ASSERT_TRUE(sc[1].sensorLocationX == 200);
+ ASSERT_TRUE(sc[1].sensorLocationY == 400);
+ ASSERT_TRUE(sc[1].sensorRadius == 60);
+ ASSERT_TRUE(sc[1].display == "screen2");
}
TEST_F(FakeFingerprintEngineUdfpsTest, getSensorLocationBad) {
- const std::vector<std::string> badStr{"", "100", "10:20", "10,20,5", "a:b:c"};
- SensorLocation sc;
+ const std::vector<std::string> badStr{
+ "", "100", "10:20", "10,20,5", "a:b:c", "10:20:30:d1,40", "10:20:30:d1,40:50"};
+ std::vector<SensorLocation> sc;
for (const auto& s : badStr) {
Fingerprint::cfg().set<std::string>("sensor_location", s);
- sc = mEngine.getSensorLocation();
- ASSERT_TRUE(isDefaultLocation(sc));
+ sc.clear();
+ mEngine.getSensorLocation(sc);
+ ASSERT_TRUE(isDefaultLocation(sc[0]));
}
}
diff --git a/biometrics/fingerprint/aidl/default/tests/VirtualHalTest.cpp b/biometrics/fingerprint/aidl/default/tests/VirtualHalTest.cpp
index 25abffe..dd6534c 100644
--- a/biometrics/fingerprint/aidl/default/tests/VirtualHalTest.cpp
+++ b/biometrics/fingerprint/aidl/default/tests/VirtualHalTest.cpp
@@ -242,7 +242,7 @@
mVhal->setLockoutEnable(false);
mVhal->setSensorId(5);
mVhal->setMaxEnrollmentPerUser(6);
- mVhal->setNavigationGuesture(false);
+ mVhal->setNavigationGesture(false);
mVhal->setDetectInteraction(false);
mVhal->setDisplayTouch(false);
mVhal->setControlIllumination(false);
diff --git a/bluetooth/1.0/Android.bp b/bluetooth/1.0/Android.bp
index bd1ca69..3ffc203 100644
--- a/bluetooth/1.0/Android.bp
+++ b/bluetooth/1.0/Android.bp
@@ -23,6 +23,6 @@
gen_java: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
}
diff --git a/bluetooth/1.1/Android.bp b/bluetooth/1.1/Android.bp
index f8a05f1..9c65b62 100644
--- a/bluetooth/1.1/Android.bp
+++ b/bluetooth/1.1/Android.bp
@@ -23,6 +23,6 @@
gen_java: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
}
diff --git a/bluetooth/aidl/Android.bp b/bluetooth/aidl/Android.bp
index 721be73..0daecf7 100644
--- a/bluetooth/aidl/Android.bp
+++ b/bluetooth/aidl/Android.bp
@@ -32,7 +32,7 @@
ndk: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
min_sdk_version: "33",
},
diff --git a/bluetooth/audio/2.0/Android.bp b/bluetooth/audio/2.0/Android.bp
index 725ec11..61f9a35 100644
--- a/bluetooth/audio/2.0/Android.bp
+++ b/bluetooth/audio/2.0/Android.bp
@@ -26,6 +26,6 @@
gen_java: false,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
}
diff --git a/bluetooth/audio/2.1/Android.bp b/bluetooth/audio/2.1/Android.bp
index 4ca0bef..4d01a00 100644
--- a/bluetooth/audio/2.1/Android.bp
+++ b/bluetooth/audio/2.1/Android.bp
@@ -25,7 +25,7 @@
],
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
gen_java: false,
}
diff --git a/bluetooth/audio/aidl/Android.bp b/bluetooth/audio/aidl/Android.bp
index 356398d..3a0d0d6 100644
--- a/bluetooth/audio/aidl/Android.bp
+++ b/bluetooth/audio/aidl/Android.bp
@@ -48,7 +48,7 @@
ndk: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
min_sdk_version: "31",
},
diff --git a/bluetooth/ranging/aidl/Android.bp b/bluetooth/ranging/aidl/Android.bp
index 4a60f87..0b1ab7c 100644
--- a/bluetooth/ranging/aidl/Android.bp
+++ b/bluetooth/ranging/aidl/Android.bp
@@ -31,7 +31,7 @@
ndk: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
min_sdk_version: "33",
},
diff --git a/bluetooth/socket/aidl/Android.bp b/bluetooth/socket/aidl/Android.bp
index 21856d0..8b412b2 100644
--- a/bluetooth/socket/aidl/Android.bp
+++ b/bluetooth/socket/aidl/Android.bp
@@ -37,7 +37,7 @@
ndk: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
min_sdk_version: "33",
},
diff --git a/compatibility_matrices/bump.py b/compatibility_matrices/bump.py
index bcb0fa6..63aa386 100755
--- a/compatibility_matrices/bump.py
+++ b/compatibility_matrices/bump.py
@@ -110,14 +110,11 @@
"kernel_configs", "-a", " ".join(next_kernel_configs), android_bp
])
- # update the SYSTEM_MATRIX_DEPS variable and the phony module's
- # product_variables entry.
+ # Replace the phony module's product_variables entry to add the new FCM
+ # to the development targets (trunk* configs).
lines = []
with open(android_bp) as f:
for line in f:
- if f" \"{self.device_module_name}\",\n" in line:
- lines.append(f" \"{self.current_module_name}\",\n")
-
if f" \"{self.current_module_name}\",\n" in line:
lines.append(f" \"{self.next_module_name}\",\n")
else:
diff --git a/compatibility_matrices/finalize.py b/compatibility_matrices/finalize.py
new file mode 100755
index 0000000..ae048ea
--- /dev/null
+++ b/compatibility_matrices/finalize.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2025 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+"""
+Finalizes the current compatibility matrix and allows `next` targets to
+use the new FCM.
+"""
+
+import argparse
+import os
+import pathlib
+import re
+import subprocess
+import textwrap
+
+
+def check_call(*args, **kwargs):
+ print(args)
+ subprocess.check_call(*args, **kwargs)
+
+def check_output(*args, **kwargs):
+ print(args)
+ return subprocess.check_output(*args, **kwargs)
+
+class Bump(object):
+
+ def __init__(self, cmdline_args):
+ self.top = pathlib.Path(os.environ["ANDROID_BUILD_TOP"])
+ self.interfaces_dir = self.top / "hardware/interfaces"
+
+ self.current_level = cmdline_args.current_level
+ self.current_module_name = f"framework_compatibility_matrix.{self.current_level}.xml"
+ self.device_module_name = "framework_compatibility_matrix.device.xml"
+
+ def run(self):
+ self.edit_android_bp()
+
+ def edit_android_bp(self):
+ android_bp = self.interfaces_dir / "compatibility_matrices/Android.bp"
+
+ # update the SYSTEM_MATRIX_DEPS variable to unconditionally include the
+ # latests FCM. This adds the file to `next` configs so releasing devices
+ # can use the latest interfaces.
+ lines = []
+ with open(android_bp) as f:
+ for line in f:
+ if f" \"{self.device_module_name}\",\n" in line:
+ lines.append(f" \"{self.current_module_name}\",\n")
+
+ lines.append(line)
+
+ with open(android_bp, "w") as f:
+ f.write("".join(lines))
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument("current_level",
+ type=str,
+ help="VINTF level of the current version (e.g. 202404)")
+ cmdline_args = parser.parse_args()
+
+ Bump(cmdline_args).run()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/contexthub/aidl/Android.bp b/contexthub/aidl/Android.bp
index d49607d..df6e063 100644
--- a/contexthub/aidl/Android.bp
+++ b/contexthub/aidl/Android.bp
@@ -35,7 +35,7 @@
ndk: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
min_sdk_version: "33",
apps_enabled: true,
diff --git a/graphics/bufferqueue/1.0/Android.bp b/graphics/bufferqueue/1.0/Android.bp
index c7c6453..87c3892 100644
--- a/graphics/bufferqueue/1.0/Android.bp
+++ b/graphics/bufferqueue/1.0/Android.bp
@@ -25,7 +25,7 @@
gen_java: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
"com.android.media",
"com.android.media.swcodec",
],
diff --git a/graphics/bufferqueue/2.0/Android.bp b/graphics/bufferqueue/2.0/Android.bp
index e9f75c1..54f68c6 100644
--- a/graphics/bufferqueue/2.0/Android.bp
+++ b/graphics/bufferqueue/2.0/Android.bp
@@ -27,7 +27,7 @@
gen_java: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
"com.android.media",
"com.android.media.swcodec",
],
diff --git a/graphics/common/1.0/Android.bp b/graphics/common/1.0/Android.bp
index b876bf3..1683c22 100644
--- a/graphics/common/1.0/Android.bp
+++ b/graphics/common/1.0/Android.bp
@@ -20,7 +20,7 @@
gen_java_constants: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
"com.android.media.swcodec",
"test_com.android.media.swcodec",
],
diff --git a/graphics/common/1.1/Android.bp b/graphics/common/1.1/Android.bp
index ff6c9b7..81df887 100644
--- a/graphics/common/1.1/Android.bp
+++ b/graphics/common/1.1/Android.bp
@@ -23,7 +23,7 @@
gen_java_constants: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
"com.android.media.swcodec",
"test_com.android.media.swcodec",
],
diff --git a/graphics/common/1.2/Android.bp b/graphics/common/1.2/Android.bp
index b4663e5..e1f4fe0 100644
--- a/graphics/common/1.2/Android.bp
+++ b/graphics/common/1.2/Android.bp
@@ -24,7 +24,7 @@
gen_java_constants: true,
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
"com.android.media.swcodec",
"test_com.android.media.swcodec",
],
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.cpp b/graphics/composer/aidl/vts/VtsComposerClient.cpp
index 9b6a005..f09482c 100644
--- a/graphics/composer/aidl/vts/VtsComposerClient.cpp
+++ b/graphics/composer/aidl/vts/VtsComposerClient.cpp
@@ -696,4 +696,10 @@
return {mComposerClient->getMaxLayerPictureProfiles(display, &outMaxProfiles), outMaxProfiles};
}
+std::pair<ScopedAStatus, std::vector<Luts>> VtsComposerClient::getLuts(
+ int64_t display, const std::vector<Buffer>& buffers) {
+ std::vector<Luts> outLuts;
+ return {mComposerClient->getLuts(display, buffers, &outLuts), std::move(outLuts)};
+}
+
} // namespace aidl::android::hardware::graphics::composer3::vts
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.h b/graphics/composer/aidl/vts/VtsComposerClient.h
index 53f5fae..f0dbe57 100644
--- a/graphics/composer/aidl/vts/VtsComposerClient.h
+++ b/graphics/composer/aidl/vts/VtsComposerClient.h
@@ -200,6 +200,9 @@
std::pair<ScopedAStatus, int32_t> getMaxLayerPictureProfiles(int64_t display);
+ std::pair<ScopedAStatus, std::vector<Luts>> getLuts(int64_t display,
+ const std::vector<Buffer>& buffers);
+
static constexpr int32_t kMaxFrameIntervalNs = 50000000; // 20fps
static constexpr int32_t kNoFrameIntervalNs = 0;
diff --git a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
index c1900d7..6b43cc8 100644
--- a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
+++ b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
@@ -3356,6 +3356,30 @@
}
}
+// @NonApiTest = check the status if calling getLuts
+TEST_P(GraphicsComposerAidlCommandV4Test, GetLuts) {
+ for (auto& display : mDisplays) {
+ int64_t displayId = display.getDisplayId();
+ auto& writer = getWriter(displayId);
+ const auto layer = createOnScreenLayer(display);
+ const auto buffer = allocate(::android::PIXEL_FORMAT_RGBA_8888);
+ ASSERT_NE(nullptr, buffer->handle);
+ writer.setLayerBuffer(displayId, layer, /*slot*/ 0, buffer->handle,
+ /*acquireFence*/ -1);
+ Buffer aidlbuffer;
+ aidlbuffer.handle = ::android::dupToAidl(buffer->handle);
+ std::vector<Buffer> buffers;
+ buffers.push_back(std::move(aidlbuffer));
+ const auto& [status, _] = mComposerClient->getLuts(displayId, buffers);
+ if (!status.isOk() && status.getExceptionCode() == EX_SERVICE_SPECIFIC &&
+ status.getServiceSpecificError() == IComposerClient::EX_UNSUPPORTED) {
+ GTEST_SKIP() << "getLuts is not supported";
+ return;
+ }
+ ASSERT_TRUE(status.isOk());
+ }
+}
+
TEST_P(GraphicsComposerAidlCommandV4Test, SetUnsupportedLayerLuts) {
auto& writer = getWriter(getPrimaryDisplayId());
const auto& [layerStatus, layer] =
diff --git a/radio/1.0/Android.bp b/radio/1.0/Android.bp
index e49a50d..09cf9aa 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -25,7 +25,7 @@
],
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
gen_java: true,
}
diff --git a/radio/aidl/Android.bp b/radio/aidl/Android.bp
index a9ca3fa..a79c807 100644
--- a/radio/aidl/Android.bp
+++ b/radio/aidl/Android.bp
@@ -251,7 +251,7 @@
java: {
apex_available: [
"//apex_available:platform",
- "com.android.btservices",
+ "com.android.bt",
],
sdk_version: "module_current",
min_sdk_version: "Tiramisu",
diff --git a/security/keymint/aidl/default/hal/lib.rs b/security/keymint/aidl/default/hal/lib.rs
index fad807f..196cf17 100644
--- a/security/keymint/aidl/default/hal/lib.rs
+++ b/security/keymint/aidl/default/hal/lib.rs
@@ -20,6 +20,19 @@
use kmr_hal::env::get_property;
use log::error;
+/// Retrieve the most significant attestation property for `name`.
+fn attestation_property(name: &str) -> Vec<u8> {
+ let prop_val = get_property(&format!("ro.product.vendor.{}", name)).unwrap_or_default();
+ if !prop_val.is_empty() {
+ prop_val
+ } else {
+ get_property(&format!("ro.product.{}", name))
+ .unwrap_or_else(|prop_name| format!("{} unavailable", prop_name))
+ }
+ .as_bytes()
+ .to_vec()
+}
+
/// Populate attestation ID information based on properties (where available).
/// Retrieving the serial number requires SELinux permission.
pub fn attestation_id_info() -> kmr_wire::AttestationIdInfo {
@@ -30,12 +43,12 @@
.to_vec()
};
kmr_wire::AttestationIdInfo {
- brand: prop("ro.product.brand"),
- device: prop("ro.product.device"),
- product: prop("ro.product.name"),
+ brand: attestation_property("brand"),
+ device: attestation_property("device"),
+ product: attestation_property("name"),
serial: prop("ro.serialno"),
- manufacturer: prop("ro.product.manufacturer"),
- model: prop("ro.product.model"),
+ manufacturer: attestation_property("manufacturer"),
+ model: attestation_property("model"),
// Currently modem_simulator always returns one fixed value. See `handleGetIMEI` in
// device/google/cuttlefish/host/commands/modem_simulator/misc_service.cpp for more details.
// TODO(b/263188546): Use device-specific IMEI values when available.
diff --git a/virtualization/capabilities_service/README.md b/virtualization/capabilities_service/README.md
new file mode 100644
index 0000000..7dc141e
--- /dev/null
+++ b/virtualization/capabilities_service/README.md
@@ -0,0 +1,9 @@
+The IVmCapabilitiesService HAL is used in a flow to grant a pVM a capability to
+issue vendor-specific SMCs. For more information see: TODO(ioffe): link the docs
+
+Here is a brief overview of the subdirectories structure:
+
+* default/ - a reference implementation of the HAL that partners can integrate
+ in their products.
+* noop/ - a no-op implementation is used in cuttlefish for mixed build testing.
+* vts/ - VTS tests for this HAL.
diff --git a/virtualization/capabilities_service/noop/Android.bp b/virtualization/capabilities_service/noop/Android.bp
new file mode 100644
index 0000000..37dc1a7
--- /dev/null
+++ b/virtualization/capabilities_service/noop/Android.bp
@@ -0,0 +1,34 @@
+package {
+ default_team: "trendy_team_virtualization",
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+rust_binary {
+ name: "android.hardware.virtualization.capabilities.capabilities_service-noop",
+ relative_install_path: "hw",
+ vendor: true,
+ installable: true,
+ prefer_rlib: true,
+ rustlibs: [
+ "android.hardware.virtualization.capabilities.capabilities_service-V1-rust",
+ "libanyhow",
+ "libandroid_logger",
+ "libbinder_rs",
+ "liblog_rust",
+ ],
+ srcs: [
+ "src/main.rs",
+ ],
+ init_rc: [
+ "android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.rc",
+ ],
+ vintf_fragment_modules: [
+ "android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.xml",
+ ],
+}
+
+vintf_fragment {
+ name: "android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.xml",
+ src: "android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.xml",
+ vendor: true,
+}
diff --git a/virtualization/capabilities_service/noop/android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.rc b/virtualization/capabilities_service/noop/android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.rc
new file mode 100644
index 0000000..58c554a
--- /dev/null
+++ b/virtualization/capabilities_service/noop/android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.rc
@@ -0,0 +1,6 @@
+service vendor.vm_capabilities_service /vendor/bin/hw/android.hardware.virtualization.capabilities.capabilities_service-noop
+ interface aidl android.hardware.virtualization.capabilities.IVmCapabilitiesService/noop
+ class hal
+ disabled
+ user nobody
+ group nobody
diff --git a/virtualization/capabilities_service/noop/android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.xml b/virtualization/capabilities_service/noop/android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.xml
new file mode 100644
index 0000000..8ecb9e5
--- /dev/null
+++ b/virtualization/capabilities_service/noop/android.hardware.virtualization.capabilities.no_op_vm_capabilities_service.xml
@@ -0,0 +1,10 @@
+<manifest version="1.0" type="device">
+ <hal format="aidl">
+ <name>android.hardware.virtualization.capabilities</name>
+ <version>1</version>
+ <interface>
+ <name>IVmCapabilitiesService</name>
+ <instance>noop</instance>
+ </interface>
+ </hal>
+</manifest>
diff --git a/virtualization/capabilities_service/noop/src/aidl.rs b/virtualization/capabilities_service/noop/src/aidl.rs
new file mode 100644
index 0000000..8d85e49
--- /dev/null
+++ b/virtualization/capabilities_service/noop/src/aidl.rs
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//! No-op implementation of the IVmCapabilitiesService AIDL interface.
+
+use android_hardware_virtualization_capabilities_capabilities_service::aidl::android::hardware::virtualization::capabilities::IVmCapabilitiesService::IVmCapabilitiesService;
+use binder::{Interface, ParcelFileDescriptor};
+use log::info;
+
+/// No-op implementation of IVmCapabilitiesService
+pub struct NoOpVmCapabilitiesService {}
+
+impl NoOpVmCapabilitiesService {
+ pub fn init() -> NoOpVmCapabilitiesService {
+ let service = NoOpVmCapabilitiesService {};
+ service
+ }
+}
+
+impl Interface for NoOpVmCapabilitiesService {}
+
+impl IVmCapabilitiesService for NoOpVmCapabilitiesService {
+
+ fn grantAccessToVendorTeeServices(&self,
+ vm_fd: &ParcelFileDescriptor, tee_services: &[String]) -> binder::Result<()> {
+ info!("received {vm_fd:?} {tee_services:?}");
+ Ok(())
+ }
+}
diff --git a/virtualization/capabilities_service/noop/src/main.rs b/virtualization/capabilities_service/noop/src/main.rs
new file mode 100644
index 0000000..9440996
--- /dev/null
+++ b/virtualization/capabilities_service/noop/src/main.rs
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//! No-op implementation of the IVmCapabilitiesService.
+
+mod aidl;
+
+use crate::aidl::NoOpVmCapabilitiesService;
+use anyhow::{bail, Context, Result};
+use log::{error, info, LevelFilter};
+use binder::{register_lazy_service, BinderFeatures, ProcessState};
+use android_hardware_virtualization_capabilities_capabilities_service::aidl::android::hardware::virtualization::capabilities::IVmCapabilitiesService::BnVmCapabilitiesService;
+
+const SERVICE_NAME: &str = "android.hardware.virtualization.capabilities.IVmCapabilitiesService/noop";
+
+fn try_main() -> Result<()> {
+ // Initialize Android logging.
+ android_logger::init_once(
+ android_logger::Config::default()
+ .with_tag("NoOpIVmCapabilitiesService")
+ .with_max_level(LevelFilter::Info)
+ .with_log_buffer(android_logger::LogId::System),
+ );
+
+ ProcessState::start_thread_pool();
+ let service_impl = NoOpVmCapabilitiesService::init();
+ let service = BnVmCapabilitiesService::new_binder(service_impl, BinderFeatures::default());
+ register_lazy_service(SERVICE_NAME, service.as_binder())
+ .with_context(|| format!("failed to register {SERVICE_NAME}"))?;
+ info!("Registered Binder service, joining threadpool.");
+ ProcessState::join_thread_pool();
+ bail!("thread pool unexpectedly ended");
+}
+
+fn main() {
+ if let Err(e) = try_main() {
+ error!("failed with {e:?}");
+ std::process::exit(1);
+ }
+}
diff --git a/virtualization/capabilities_service/vts/Android.bp b/virtualization/capabilities_service/vts/Android.bp
new file mode 100644
index 0000000..1aa21c9
--- /dev/null
+++ b/virtualization/capabilities_service/vts/Android.bp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package {
+ default_team: "trendy_team_virtualization",
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+rust_test {
+ name: "VtsVmCapabilitiesServiceTest",
+ srcs: ["tests.rs"],
+ defaults: [
+ "rdroidtest.defaults",
+ ],
+ test_suites: [
+ "general-tests",
+ "vts",
+ ],
+ test_config: "AndroidTest.xml",
+ rustlibs: [
+ "android.hardware.virtualization.capabilities.capabilities_service-V1-rust",
+ "libbinder_rs",
+ ],
+ require_root: true,
+}
diff --git a/virtualization/capabilities_service/vts/AndroidTest.xml b/virtualization/capabilities_service/vts/AndroidTest.xml
new file mode 100644
index 0000000..2c3dadb
--- /dev/null
+++ b/virtualization/capabilities_service/vts/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2025 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VmCapabilitiesService VTS tests.">
+ <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
+
+ <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+ <option name="push-file" key="VtsVmCapabilitiesServiceTest"
+ value="/data/local/tmp/VtsVmCapabilitiesServiceTest" />
+ </target_preparer>
+
+ <test class="com.android.tradefed.testtype.rust.RustBinaryTest" >
+ <option name="test-device-path" value="/data/local/tmp" />
+ <option name="module-name" value="VtsVmCapabilitiesServiceTest" />
+ </test>
+</configuration>
diff --git a/virtualization/capabilities_service/vts/tests.rs b/virtualization/capabilities_service/vts/tests.rs
new file mode 100644
index 0000000..9f0b7fd
--- /dev/null
+++ b/virtualization/capabilities_service/vts/tests.rs
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+use android_hardware_virtualization_capabilities_capabilities_service::aidl::android::hardware::virtualization::capabilities::IVmCapabilitiesService::IVmCapabilitiesService;
+use rdroidtest::rdroidtest;
+use std::fs::File;
+
+const VM_CAPABILITIES_SERVICE: &str =
+ "android.hardware.virtualization.capabilities.IVmCapabilitiesService";
+
+/// Returns all available instances of VmCapabilitiesService.
+/// Note: it actually returns a pair of (<instance_name>, <instance_name)). This is a requirement
+/// of the rdroidtest framework for parameterized tests. See
+/// platform_testing/libraries/rdroidtest/README.md for more information.
+fn get_instances() -> Vec<(String, String)> {
+ binder::get_declared_instances(VM_CAPABILITIES_SERVICE)
+ .unwrap_or_default()
+ .into_iter()
+ .map(|v| (v.clone(), v))
+ .collect()
+}
+
+fn connect(instance: &str) -> binder::Strong<dyn IVmCapabilitiesService> {
+ let name = format!("{VM_CAPABILITIES_SERVICE}/{instance}");
+ binder::wait_for_interface(&name).unwrap()
+}
+
+/// A very basic test that simply connects to the service and send bogus data.
+#[rdroidtest(get_instances())]
+fn connect_to_service(instance: String) {
+ let service = connect(&instance);
+ let dev_null = File::open("/dev/null").expect("failed to open /dev/null");
+ let fd = binder::ParcelFileDescriptor::new(dev_null);
+ // In this test we don't care what service returns.
+ let _ = service.grantAccessToVendorTeeServices(&fd, &[]);
+}
+
+rdroidtest::test_main!();
diff --git a/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp b/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp
index aca1364..7f5de5c 100644
--- a/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp
+++ b/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp
@@ -37,6 +37,8 @@
using aidl::android::hardware::wifi::RttBw;
using aidl::android::hardware::wifi::RttCapabilities;
using aidl::android::hardware::wifi::RttConfig;
+using aidl::android::hardware::wifi::RttLciInformation;
+using aidl::android::hardware::wifi::RttLcrInformation;
using aidl::android::hardware::wifi::RttPeerType;
using aidl::android::hardware::wifi::RttPreamble;
using aidl::android::hardware::wifi::RttResponder;
@@ -171,6 +173,7 @@
RttResponder responder = {};
EXPECT_TRUE(wifi_rtt_controller_->getResponderInfo(&responder).isOk());
EXPECT_TRUE(wifi_rtt_controller_->enableResponder(cmdId, channelInfo, 10, responder).isOk());
+ EXPECT_TRUE(wifi_rtt_controller_->disableResponder(cmdId).isOk());
}
/*
@@ -361,6 +364,31 @@
sleep(2);
}
+/*
+ * GetBoundIface
+ */
+TEST_P(WifiRttControllerAidlTest, GetBoundIface) {
+ std::shared_ptr<IWifiStaIface> boundIface;
+ EXPECT_TRUE(wifi_rtt_controller_->getBoundIface(&boundIface).isOk());
+ EXPECT_NE(boundIface, nullptr);
+}
+
+/*
+ * Set LCI and LCR
+ */
+TEST_P(WifiRttControllerAidlTest, SetLciAndLcr) {
+ RttCapabilities caps = getCapabilities();
+ if (!caps.responderSupported) {
+ GTEST_SKIP() << "Skipping because responder is not supported";
+ }
+
+ int cmdId = 55;
+ RttLciInformation lci = {};
+ RttLcrInformation lcr = {};
+ EXPECT_TRUE(wifi_rtt_controller_->setLci(cmdId, lci).isOk());
+ EXPECT_TRUE(wifi_rtt_controller_->setLcr(cmdId, lcr).isOk());
+}
+
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WifiRttControllerAidlTest);
INSTANTIATE_TEST_SUITE_P(WifiTest, WifiRttControllerAidlTest,
testing::ValuesIn(android::getAidlHalInstanceNames(IWifi::descriptor)),
diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp b/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp
index 257607f..2f27119 100644
--- a/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp
+++ b/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp
@@ -48,7 +48,6 @@
using aidl::android::hardware::wifi::supplicant::QosCharacteristics;
using aidl::android::hardware::wifi::supplicant::QosPolicyScsData;
using aidl::android::hardware::wifi::supplicant::QosPolicyScsRequestStatus;
-using aidl::android::hardware::wifi::supplicant::RxFilterType;
using aidl::android::hardware::wifi::supplicant::SignalPollResult;
using aidl::android::hardware::wifi::supplicant::UsdBaseConfig;
using aidl::android::hardware::wifi::supplicant::UsdCapabilities;
@@ -977,17 +976,6 @@
}
/*
- * Test that we can add, remove, start, and stop an RX filter.
- */
-TEST_P(SupplicantStaIfaceAidlTest, ConfigureRxFilter) {
- RxFilterType filterType = RxFilterType::V4_MULTICAST;
- EXPECT_TRUE(sta_iface_->addRxFilter(filterType).isOk());
- EXPECT_TRUE(sta_iface_->startRxFilter().isOk());
- EXPECT_TRUE(sta_iface_->stopRxFilter().isOk());
- EXPECT_TRUE(sta_iface_->removeRxFilter(filterType).isOk());
-}
-
-/*
* Test that we can start and cancel all WPS methods.
*/
TEST_P(SupplicantStaIfaceAidlTest, StartAndCancelWps) {