Merge "Add Unix_time and STORAGE_ENCRYPTION_BINDING_SEED" into sc-dev
diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index 8f32e14..8d812f8 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -349,10 +349,12 @@
field @RequiresPermission("android.car.permission.CONTROL_CAR_SEATS") public static final int SEAT_OCCUPANCY = 356518832; // 0x15400bb0
field @RequiresPermission("android.car.permission.CONTROL_CAR_SEATS") public static final int SEAT_TILT_MOVE = 356518800; // 0x15400b90
field @RequiresPermission("android.car.permission.CONTROL_CAR_SEATS") public static final int SEAT_TILT_POS = 356518799; // 0x15400b8f
+ field @RequiresPermission("android.car.permission.STORAGE_ENCRYPTION_BINDING_SEED") public static final int STORAGE_ENCRYPTION_BINDING_SEED = 292554247; // 0x11700607
field @RequiresPermission("android.car.permission.CAR_TIRES") public static final int TIRE_PRESSURE = 392168201; // 0x17600309
field @RequiresPermission.Read(@androidx.annotation.RequiresPermission(android.car.Car.PERMISSION_READ_DISPLAY_UNITS)) @RequiresPermission.Write(@androidx.annotation.RequiresPermission(allOf={android.car.Car.PERMISSION_CONTROL_DISPLAY_UNITS, "android.car.permission.CAR_VENDOR_EXTENSION"})) public static final int TIRE_PRESSURE_DISPLAY_UNITS = 289408514; // 0x11400602
field @RequiresPermission("android.car.permission.CAR_DYNAMICS_STATE") public static final int TRACTION_CONTROL_ACTIVE = 287310859; // 0x1120040b
field @RequiresPermission("android.car.permission.CAR_EXTERIOR_LIGHTS") public static final int TURN_SIGNAL_STATE = 289408008; // 0x11400408
+ field @RequiresPermission("android.car.permission.CAR_UNIX_TIME") public static final int UNIX_TIME = 290457094; // 0x11500606
field @RequiresPermission(anyOf={"android.car.permission.VMS_PUBLISHER", "android.car.permission.VMS_SUBSCRIBER"}) public static final int VEHICLE_MAP_SERVICE = 299895808; // 0x11e00c00
field @RequiresPermission(android.car.Car.PERMISSION_SPEED) public static final int WHEEL_TICK = 290521862; // 0x11510306
field @RequiresPermission("android.car.permission.CONTROL_CAR_WINDOWS") public static final int WINDOW_LOCK = 320867268; // 0x13200bc4
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index 38926ca..6096688 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -45,6 +45,7 @@
field public static final String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
field public static final String PERMISSION_CAR_PROJECTION_STATUS = "android.car.permission.ACCESS_CAR_PROJECTION_STATUS";
field public static final String PERMISSION_CAR_TEST_SERVICE = "android.car.permission.CAR_TEST_SERVICE";
+ field public static final String PERMISSION_CAR_UNIX_TIME = "android.car.permission.CAR_UNIX_TIME";
field public static final String PERMISSION_COLLECT_CAR_WATCHDOG_METRICS = "android.car.permission.COLLECT_CAR_WATCHDOG_METRICS";
field public static final String PERMISSION_CONTROL_APP_BLOCKING = "android.car.permission.CONTROL_APP_BLOCKING";
field public static final String PERMISSION_CONTROL_CAR_CLIMATE = "android.car.permission.CONTROL_CAR_CLIMATE";
@@ -65,6 +66,7 @@
field public static final String PERMISSION_READ_CAR_OCCUPANT_AWARENESS_STATE = "android.car.permission.READ_CAR_OCCUPANT_AWARENESS_STATE";
field public static final String PERMISSION_READ_CAR_VENDOR_PERMISSION_INFO = "android.car.permission.READ_CAR_VENDOR_PERMISSION_INFO";
field public static final String PERMISSION_RECEIVE_CAR_AUDIO_DUCKING_EVENTS = "android.car.permission.RECEIVE_CAR_AUDIO_DUCKING_EVENTS";
+ field public static final String PERMISSION_STORAGE_ENCRYPTION_BINDING_SEED = "android.car.permission.STORAGE_ENCRYPTION_BINDING_SEED";
field public static final String PERMISSION_STORAGE_MONITORING = "android.car.permission.STORAGE_MONITORING";
field public static final String PERMISSION_TEMPLATE_RENDERER = "android.car.permission.TEMPLATE_RENDERER";
field public static final String PERMISSION_TIRES = "android.car.permission.CAR_TIRES";
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index 8aa8bf9..5ee38ce 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -527,6 +527,22 @@
public static final String PERMISSION_TIRES = "android.car.permission.CAR_TIRES";
/**
+ * Permission necessary to access car's property {@link VehiclePropertyIds#UNIX_TIME}.
+ * @hide
+ */
+ @SystemApi
+ public static final String PERMISSION_CAR_UNIX_TIME = "android.car.permission.CAR_UNIX_TIME";
+
+ /**
+ * Permission necessary to access car's property
+ * {@link VehiclePropertyIds#STORAGE_ENCRYPTION_BINDING_SEED}.
+ * @hide
+ */
+ @SystemApi
+ public static final String PERMISSION_STORAGE_ENCRYPTION_BINDING_SEED =
+ "android.car.permission.STORAGE_ENCRYPTION_BINDING_SEED";
+
+ /**
* Permission necessary to access car's steering angle information.
*/
public static final String PERMISSION_READ_STEERING_STATE =
diff --git a/car-lib/src/android/car/VehiclePropertyIds.java b/car-lib/src/android/car/VehiclePropertyIds.java
index 4961662..0d2d3f0 100644
--- a/car-lib/src/android/car/VehiclePropertyIds.java
+++ b/car-lib/src/android/car/VehiclePropertyIds.java
@@ -1170,6 +1170,25 @@
public static final int CLUSTER_NAVIGATION_STATE_LEGACY = 292556600;
/**
+ * Current date and time, encoded as Unix time.
+ *
+ * <p>This value denotes the number of milliseconds that have elapsed since 1/1/1970 UTC.
+ */
+ @RequiresPermission(Car.PERMISSION_CAR_UNIX_TIME)
+ public static final int UNIX_TIME = 290457094;
+
+ /**
+ * External encryption binding seed.
+ *
+ * <p>This value is mixed with the local storage encryption seed. This property holds 16 bytes,
+ * and is expected to be persisted on an ECU separate from the IVI. The property is initially
+ * set by AAOS, who generates it using a CSRNG. AAOS will then read the property on subsequent
+ * boots.
+ */
+ @RequiresPermission(Car.PERMISSION_STORAGE_ENCRYPTION_BINDING_SEED)
+ public static final int STORAGE_ENCRYPTION_BINDING_SEED = 292554247;
+
+ /**
* Gets a user-friendly representation of a property.
*/
public static String toString(int property) {
@@ -1470,6 +1489,10 @@
return "CLUSTER_REQUEST_DISPLAY";
case CLUSTER_NAVIGATION_STATE_LEGACY:
return "CLUSTER_NAVIGATION_STATE_LEGACY";
+ case UNIX_TIME:
+ return "UNIX_TIME";
+ case STORAGE_ENCRYPTION_BINDING_SEED:
+ return "STORAGE_ENCRYPTION_BINDING_SEED";
default:
return "0x" + Integer.toHexString(property);
}
diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml
index bb462ca..43423ae 100644
--- a/service/AndroidManifest.xml
+++ b/service/AndroidManifest.xml
@@ -246,6 +246,22 @@
android:label="@string/car_permission_label_car_exterior_environment"
android:description="@string/car_permission_desc_car_exterior_environment"/>
+ <!-- Allows an application to read and write car's unix time.
+ <p>Protection level: signature|privileged
+ -->
+ <permission android:name="android.car.permission.CAR_UNIX_TIME"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_unix_time"
+ android:description="@string/car_permission_desc_car_unix_time"/>
+
+ <!-- Allows an application to read and write car's storage encryption binding seed.
+ <p>Protection level: signature|privileged
+ -->
+ <permission android:name="android.car.permission.STORAGE_ENCRYPTION_BINDING_SEED"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_encryption_binding_seed"
+ android:description="@string/car_permission_desc_encryption_binding_seed"/>
+
<!-- Allows an application to read the vehicle exterior lights state.
<p>Protection level: signature|privileged
-->
diff --git a/service/res/values/strings.xml b/service/res/values/strings.xml
index 5c43400..e5b9292 100644
--- a/service/res/values/strings.xml
+++ b/service/res/values/strings.xml
@@ -240,6 +240,16 @@
<!-- Permission text: apps access car's exterior lights state [CHAR LIMIT=NONE] -->
<string name="car_permission_desc_car_exterior_lights">Access car\u2019s exterior lights state.</string>
+ <!-- Permission text: apps access car's UNIX time [CHAR LIMIT=NONE] -->
+ <string name="car_permission_label_car_unix_time">access car\u2019s UNIX time</string>
+ <!-- Permission text: apps access car's UNIX time [CHAR LIMIT=NONE] -->
+ <string name="car_permission_desc_car_unix_time">Access car\u2019s UNIX time.</string>
+
+ <!-- Permission text: apps access car's encryption binding seed [CHAR LIMIT=NONE] -->
+ <string name="car_permission_label_encryption_binding_seed">access car\u2019s encryption binding seed </string>
+ <!-- Permission text: apps access car's encryption binding seed [CHAR LIMIT=NONE] -->
+ <string name="car_permission_desc_encryption_binding_seed">Access car\u2019s encryption binding seed.</string>
+
<!-- Permission text: apps control car's exterior lights [CHAR LIMIT=NONE] -->
<string name="car_permission_label_control_car_exterior_lights">read car\u2019s exterior lights</string>
<!-- Permission text: apps control car's exterior lights [CHAR LIMIT=NONE] -->
diff --git a/service/src/com/android/car/hal/PropertyHalServiceIds.java b/service/src/com/android/car/hal/PropertyHalServiceIds.java
index 2c61640..51cfe12 100644
--- a/service/src/com/android/car/hal/PropertyHalServiceIds.java
+++ b/service/src/com/android/car/hal/PropertyHalServiceIds.java
@@ -509,6 +509,12 @@
mProps.put(VehicleProperty.CABIN_LIGHTS_SWITCH, new Pair<>(
Car.PERMISSION_CONTROL_INTERIOR_LIGHTS,
Car.PERMISSION_CONTROL_INTERIOR_LIGHTS));
+ mProps.put(VehicleProperty.UNIX_TIME, new Pair<>(
+ Car.PERMISSION_CAR_UNIX_TIME,
+ Car.PERMISSION_CAR_UNIX_TIME));
+ mProps.put(VehicleProperty.STORAGE_ENCRYPTION_BINDING_SEED, new Pair<>(
+ Car.PERMISSION_STORAGE_ENCRYPTION_BINDING_SEED,
+ Car.PERMISSION_STORAGE_ENCRYPTION_BINDING_SEED));
// Display_Units
mProps.put(VehicleProperty.DISTANCE_DISPLAY_UNITS, new Pair<>(
Car.PERMISSION_READ_DISPLAY_UNITS,
diff --git a/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java b/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java
index 699301f..ecf7c25 100644
--- a/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java
+++ b/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java
@@ -196,6 +196,9 @@
mProps.add(VehiclePropertyIds.EV_BATTERY_DISPLAY_UNITS);
mProps.add(VehiclePropertyIds.FUEL_CONSUMPTION_UNITS_DISTANCE_OVER_VOLUME);
mProps.add(VehiclePropertyIds.VEHICLE_SPEED_DISPLAY_UNITS);
+ // Properties in S
+ mProps.add(VehiclePropertyIds.UNIX_TIME);
+ mProps.add(VehiclePropertyIds.STORAGE_ENCRYPTION_BINDING_SEED);
}
@After
diff --git a/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java b/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java
index 52477b3..0681985 100644
--- a/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java
@@ -334,6 +334,10 @@
assertEquals("USER_IDENTIFICATION_ASSOCIATION",
VehiclePropertyIds.toString(VehiclePropertyIds.USER_IDENTIFICATION_ASSOCIATION));
assertEquals("0x3", VehiclePropertyIds.toString(3));
+ // Properties in S
+ assertEquals("UNIX_TIME", VehiclePropertyIds.toString(VehiclePropertyIds.UNIX_TIME));
+ assertEquals("STORAGE_ENCRYPTION_BINDING_SEED",
+ VehiclePropertyIds.toString(VehiclePropertyIds.STORAGE_ENCRYPTION_BINDING_SEED));
}
private static List<Integer> getListOfConstantValues(Class clazz) {