Merge "Cache CarPropertyConfigs in CarPropertyService" into pi-dev
diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index 8a380ff..57975a2 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -73,6 +73,126 @@
ctor public CarNotConnectedException(java.lang.Exception);
}
+ public final class VehiclePropertyIds {
+ ctor public VehiclePropertyIds();
+ method public static java.lang.String toString(int);
+ field public static final int ABS_ACTIVE = 287310858; // 0x1120040a
+ field public static final int AP_POWER_BOOTUP_REASON = 289409538; // 0x11400a02
+ field public static final int AP_POWER_STATE_REPORT = 289475073; // 0x11410a01
+ field public static final int AP_POWER_STATE_REQ = 289475072; // 0x11410a00
+ field public static final int CURRENT_GEAR = 289408001; // 0x11400401
+ field public static final int DISPLAY_BRIGHTNESS = 289409539; // 0x11400a03
+ field public static final int DOOR_LOCK = 371198722; // 0x16200b02
+ field public static final int DOOR_MOVE = 373295873; // 0x16400b01
+ field public static final int DOOR_POS = 373295872; // 0x16400b00
+ field public static final int ENGINE_COOLANT_TEMP = 291504897; // 0x11600301
+ field public static final int ENGINE_OIL_LEVEL = 289407747; // 0x11400303
+ field public static final int ENGINE_OIL_TEMP = 291504900; // 0x11600304
+ field public static final int ENGINE_RPM = 291504901; // 0x11600305
+ field public static final int ENV_OUTSIDE_TEMPERATURE = 291505923; // 0x11600703
+ field public static final int EV_BATTERY_INSTANTANEOUS_CHARGE_RATE = 291504908; // 0x1160030c
+ field public static final int EV_BATTERY_LEVEL = 291504905; // 0x11600309
+ field public static final int EV_CHARGE_PORT_CONNECTED = 287310603; // 0x1120030b
+ field public static final int EV_CHARGE_PORT_OPEN = 287310602; // 0x1120030a
+ field public static final int FOG_LIGHTS_STATE = 289410562; // 0x11400e02
+ field public static final int FOG_LIGHTS_SWITCH = 289410578; // 0x11400e12
+ field public static final int FUEL_DOOR_OPEN = 287310600; // 0x11200308
+ field public static final int FUEL_LEVEL = 291504903; // 0x11600307
+ field public static final int FUEL_LEVEL_LOW = 287310853; // 0x11200405
+ field public static final int GEAR_SELECTION = 289408000; // 0x11400400
+ field public static final int HAZARD_LIGHTS_STATE = 289410563; // 0x11400e03
+ field public static final int HAZARD_LIGHTS_SWITCH = 289410579; // 0x11400e13
+ field public static final int HEADLIGHTS_STATE = 289410560; // 0x11400e00
+ field public static final int HEADLIGHTS_SWITCH = 289410576; // 0x11400e10
+ field public static final int HIGH_BEAM_LIGHTS_STATE = 289410561; // 0x11400e01
+ field public static final int HIGH_BEAM_LIGHTS_SWITCH = 289410577; // 0x11400e11
+ field public static final int HVAC_ACTUAL_FAN_SPEED_RPM = 356517135; // 0x1540050f
+ field public static final int HVAC_AC_ON = 354419973; // 0x15200505
+ field public static final int HVAC_AUTO_ON = 354419978; // 0x1520050a
+ field public static final int HVAC_AUTO_RECIRC_ON = 354419986; // 0x15200512
+ field public static final int HVAC_DEFROSTER = 320865540; // 0x13200504
+ field public static final int HVAC_DUAL_ON = 354419977; // 0x15200509
+ field public static final int HVAC_FAN_DIRECTION = 356517121; // 0x15400501
+ field public static final int HVAC_FAN_DIRECTION_AVAILABLE = 356582673; // 0x15410511
+ field public static final int HVAC_FAN_SPEED = 356517120; // 0x15400500
+ field public static final int HVAC_MAX_AC_ON = 354419974; // 0x15200506
+ field public static final int HVAC_MAX_DEFROST_ON = 354419975; // 0x15200507
+ field public static final int HVAC_POWER_ON = 354419984; // 0x15200510
+ field public static final int HVAC_RECIRC_ON = 354419976; // 0x15200508
+ field public static final int HVAC_SEAT_TEMPERATURE = 356517131; // 0x1540050b
+ field public static final int HVAC_SEAT_VENTILATION = 356517139; // 0x15400513
+ field public static final int HVAC_SIDE_MIRROR_HEAT = 339739916; // 0x1440050c
+ field public static final int HVAC_STEERING_WHEEL_HEAT = 289408269; // 0x1140050d
+ field public static final int HVAC_TEMPERATURE_CURRENT = 358614274; // 0x15600502
+ field public static final int HVAC_TEMPERATURE_DISPLAY_UNITS = 289408270; // 0x1140050e
+ field public static final int HVAC_TEMPERATURE_SET = 358614275; // 0x15600503
+ field public static final int HW_KEY_INPUT = 289475088; // 0x11410a10
+ field public static final int IGNITION_STATE = 289408009; // 0x11400409
+ field public static final int INFO_DRIVER_SEAT = 356516106; // 0x1540010a
+ field public static final int INFO_EV_BATTERY_CAPACITY = 291504390; // 0x11600106
+ field public static final int INFO_EV_CONNECTOR_TYPE = 289472775; // 0x11410107
+ field public static final int INFO_EV_PORT_LOCATION = 289407241; // 0x11400109
+ field public static final int INFO_FUEL_CAPACITY = 291504388; // 0x11600104
+ field public static final int INFO_FUEL_DOOR_LOCATION = 289407240; // 0x11400108
+ field public static final int INFO_FUEL_TYPE = 289472773; // 0x11410105
+ field public static final int INFO_MAKE = 286261505; // 0x11100101
+ field public static final int INFO_MODEL = 286261506; // 0x11100102
+ field public static final int INFO_MODEL_YEAR = 289407235; // 0x11400103
+ field public static final int INFO_VIN = 286261504; // 0x11100100
+ field public static final int INVALID = 0; // 0x0
+ field public static final int MIRROR_FOLD = 287312709; // 0x11200b45
+ field public static final int MIRROR_LOCK = 287312708; // 0x11200b44
+ field public static final int MIRROR_Y_MOVE = 339741507; // 0x14400b43
+ field public static final int MIRROR_Y_POS = 339741506; // 0x14400b42
+ field public static final int MIRROR_Z_MOVE = 339741505; // 0x14400b41
+ field public static final int MIRROR_Z_POS = 339741504; // 0x14400b40
+ field public static final int NIGHT_MODE = 287310855; // 0x11200407
+ field public static final int OBD2_FREEZE_FRAME = 299896065; // 0x11e00d01
+ field public static final int OBD2_FREEZE_FRAME_CLEAR = 299896067; // 0x11e00d03
+ field public static final int OBD2_FREEZE_FRAME_INFO = 299896066; // 0x11e00d02
+ field public static final int OBD2_LIVE_FRAME = 299896064; // 0x11e00d00
+ field public static final int PARKING_BRAKE_AUTO_APPLY = 287310851; // 0x11200403
+ field public static final int PARKING_BRAKE_ON = 287310850; // 0x11200402
+ field public static final int PERF_ODOMETER = 291504644; // 0x11600204
+ field public static final int PERF_VEHICLE_SPEED = 291504647; // 0x11600207
+ field public static final int RANGE_REMAINING = 291504904; // 0x11600308
+ field public static final int SEAT_BACKREST_ANGLE_1_MOVE = 356518792; // 0x15400b88
+ field public static final int SEAT_BACKREST_ANGLE_1_POS = 356518791; // 0x15400b87
+ field public static final int SEAT_BACKREST_ANGLE_2_MOVE = 356518794; // 0x15400b8a
+ field public static final int SEAT_BACKREST_ANGLE_2_POS = 356518793; // 0x15400b89
+ field public static final int SEAT_BELT_BUCKLED = 354421634; // 0x15200b82
+ field public static final int SEAT_BELT_HEIGHT_MOVE = 356518788; // 0x15400b84
+ field public static final int SEAT_BELT_HEIGHT_POS = 356518787; // 0x15400b83
+ field public static final int SEAT_DEPTH_MOVE = 356518798; // 0x15400b8e
+ field public static final int SEAT_DEPTH_POS = 356518797; // 0x15400b8d
+ field public static final int SEAT_FORE_AFT_MOVE = 356518790; // 0x15400b86
+ field public static final int SEAT_FORE_AFT_POS = 356518789; // 0x15400b85
+ field public static final int SEAT_HEADREST_ANGLE_MOVE = 356518808; // 0x15400b98
+ field public static final int SEAT_HEADREST_ANGLE_POS = 356518807; // 0x15400b97
+ field public static final int SEAT_HEADREST_FORE_AFT_MOVE = 356518810; // 0x15400b9a
+ field public static final int SEAT_HEADREST_FORE_AFT_POS = 356518809; // 0x15400b99
+ field public static final int SEAT_HEADREST_HEIGHT_MOVE = 356518806; // 0x15400b96
+ field public static final int SEAT_HEADREST_HEIGHT_POS = 289409941; // 0x11400b95
+ field public static final int SEAT_HEIGHT_MOVE = 356518796; // 0x15400b8c
+ field public static final int SEAT_HEIGHT_POS = 356518795; // 0x15400b8b
+ field public static final int SEAT_LUMBAR_FORE_AFT_MOVE = 356518802; // 0x15400b92
+ field public static final int SEAT_LUMBAR_FORE_AFT_POS = 356518801; // 0x15400b91
+ field public static final int SEAT_LUMBAR_SIDE_SUPPORT_MOVE = 356518804; // 0x15400b94
+ field public static final int SEAT_LUMBAR_SIDE_SUPPORT_POS = 356518803; // 0x15400b93
+ field public static final int SEAT_MEMORY_SELECT = 356518784; // 0x15400b80
+ field public static final int SEAT_MEMORY_SET = 356518785; // 0x15400b81
+ field public static final int SEAT_TILT_MOVE = 356518800; // 0x15400b90
+ field public static final int SEAT_TILT_POS = 356518799; // 0x15400b8f
+ field public static final int TIRE_PRESSURE = 392168201; // 0x17600309
+ field public static final int TRACTION_CONTROL_ACTIVE = 287310859; // 0x1120040b
+ field public static final int TURN_SIGNAL_STATE = 289408008; // 0x11400408
+ field public static final int VEHICLE_MAP_SERVICE = 299895808; // 0x11e00c00
+ field public static final int WHEEL_TICK = 290521862; // 0x11510306
+ field public static final int WINDOW_LOCK = 320867268; // 0x13200bc4
+ field public static final int WINDOW_MOVE = 322964417; // 0x13400bc1
+ field public static final int WINDOW_POS = 322964416; // 0x13400bc0
+ }
+
}
package android.car.app.menu {
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index d611932..df6b85e 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -5,7 +5,6 @@
field public static final java.lang.String CAR_DRIVING_STATE_SERVICE = "drivingstate";
field public static final java.lang.String DIAGNOSTIC_SERVICE = "diagnostic";
field public static final java.lang.String HVAC_SERVICE = "hvac";
- field public static final java.lang.String PERMISSION_ADJUST_CAR_CABIN = "android.car.permission.ADJUST_CAR_CABIN";
field public static final java.lang.String PERMISSION_CAR_DIAGNOSTIC_CLEAR = "android.car.permission.CLEAR_CAR_DIAGNOSTICS";
field public static final java.lang.String PERMISSION_CAR_DIAGNOSTIC_READ_ALL = "android.car.permission.CAR_DIAGNOSTICS";
field public static final java.lang.String PERMISSION_CAR_DRIVING_STATE = "android.car.permission.CAR_DRIVING_STATE";
@@ -112,6 +111,13 @@
field public static final int WINDOW_ROW_3_RIGHT = 16384; // 0x4000
}
+ public final class VehiclePropertyAccess {
+ field public static final int NONE = 0; // 0x0
+ field public static final int READ = 1; // 0x1
+ field public static final int READ_WRITE = 3; // 0x3
+ field public static final int WRITE = 2; // 0x2
+ }
+
}
package android.car.cluster {
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index 738a423..c1bf502 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -281,14 +281,6 @@
"android.car.permission.CONTROL_APP_BLOCKING";
/**
- * Permission necessary to access Car Cabin APIs.
- * @hide
- */
- @SystemApi
- public static final String PERMISSION_ADJUST_CAR_CABIN =
- "android.car.permission.ADJUST_CAR_CABIN";
-
- /**
* Permission necessary to access car's engine information.
* @hide
*/
diff --git a/car-lib/src/android/car/PortLocationType.java b/car-lib/src/android/car/PortLocationType.java
new file mode 100644
index 0000000..3006a29
--- /dev/null
+++ b/car-lib/src/android/car/PortLocationType.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.car;
+
+/**
+ * Used by INFO_FUEL_DOOR_LOCATION/INFO_CHARGE_PORT_LOCATION to enumerate fuel door or
+ * ev port location.
+ * Use getProperty and setProperty in {@link android.car.hardware.property.CarPropertyManager} to
+ * set and get this VHAL property.
+ * @hide
+ */
+public final class PortLocationType {
+ public static final int UNKNOWN = 0;
+ public static final int FRONT_LEFT = 1;
+ public static final int FRONT_RIGHT = 2;
+ public static final int REAR_RIGHT = 3;
+ public static final int REAR_LEFT = 4;
+ public static final int FRONT = 5;
+ public static final int REAR = 6;
+
+ private PortLocationType() {}
+}
diff --git a/car-lib/src/android/car/VehicleLightState.java b/car-lib/src/android/car/VehicleLightState.java
new file mode 100644
index 0000000..55f74f9
--- /dev/null
+++ b/car-lib/src/android/car/VehicleLightState.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.car;
+
+/**
+ * Used by Lights state properties to enumerate the current state of the lights.
+ * Use getProperty and setProperty in {@link android.car.hardware.property.CarPropertyManager} to
+ * set and get this VHAL property.
+ * @hide
+ */
+public final class VehicleLightState {
+ public static final int OFF = 0;
+ public static final int ON = 1;
+ public static final int DAYTIME_RUNNING = 2;
+
+ private VehicleLightState() {}
+
+}
diff --git a/car-lib/src/android/car/VehicleLightSwitch.java b/car-lib/src/android/car/VehicleLightSwitch.java
new file mode 100644
index 0000000..03780bb
--- /dev/null
+++ b/car-lib/src/android/car/VehicleLightSwitch.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.car;
+
+/**
+ * Used by lights switch properties to enumerate user selected switch setting.
+ * Use getProperty and setProperty in {@link android.car.hardware.property.CarPropertyManager} to
+ * set and get this VHAL property.
+ * @hide
+ */
+public final class VehicleLightSwitch {
+ public static final int OFF = 0;
+ public static final int ON = 1;
+ public static final int DAYTIME_RUNNING = 2;
+ public static final int AUTOMATIC = 0x100;
+
+ private VehicleLightSwitch() {}
+}
diff --git a/car-lib/src/android/car/VehiclePropertyAccess.java b/car-lib/src/android/car/VehiclePropertyAccess.java
new file mode 100644
index 0000000..22801de
--- /dev/null
+++ b/car-lib/src/android/car/VehiclePropertyAccess.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.car;
+
+import android.annotation.SystemApi;
+
+/**
+ * Define value for getAccess() in {@link android.car.hardware.CarPropertyConfig}
+ * @hide
+ */
+@SystemApi
+public final class VehiclePropertyAccess {
+ /**
+ * List of VehiclePropertyAccess from VHAL
+ */
+ public static final int NONE = 0x00;
+ public static final int READ = 0x01;
+ public static final int WRITE = 0x02;
+ public static final int READ_WRITE = 0x03;
+
+ private VehiclePropertyAccess() {}
+}
diff --git a/car-lib/src/android/car/VehiclePropertyIds.java b/car-lib/src/android/car/VehiclePropertyIds.java
new file mode 100644
index 0000000..12d2698
--- /dev/null
+++ b/car-lib/src/android/car/VehiclePropertyIds.java
@@ -0,0 +1,888 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.car;
+
+/**
+ * Copy from android.hardware.automotive.vehicle-V2.0-java_gen_java/gen/android/hardware/automotive
+ * /vehicle/V2_0. Need to update this file when vehicle propertyId is changed in VHAL.
+ * Use it as PorpertyId in getProperty() and setProperty() in
+ * {@link android.car.hardware.property.CarPropertyManager}
+ */
+public final class VehiclePropertyIds {
+ /**
+ * Undefined property. */
+ public static final int INVALID = 0;
+ /**
+ * VIN of vehicle
+ */
+ public static final int INFO_VIN = 286261504;
+ /**
+ * Manufacturer of vehicle
+ */
+ public static final int INFO_MAKE = 286261505;
+ /**
+ * Model of vehicle
+ */
+ public static final int INFO_MODEL = 286261506;
+ /**
+ * Model year of vehicle.
+ */
+ public static final int INFO_MODEL_YEAR = 289407235;
+ /**
+ * Fuel capacity of the vehicle in milliliters
+ */
+ public static final int INFO_FUEL_CAPACITY = 291504388;
+ /**
+ * List of fuels the vehicle may use
+ */
+ public static final int INFO_FUEL_TYPE = 289472773;
+ /**
+ * Battery capacity of the vehicle, if EV or hybrid. This is the nominal
+ * battery capacity when the vehicle is new.
+ */
+ public static final int INFO_EV_BATTERY_CAPACITY = 291504390;
+ /**
+ * List of connectors this EV may use
+ */
+ public static final int INFO_EV_CONNECTOR_TYPE = 289472775;
+ /**
+ * Fuel door location
+ */
+ public static final int INFO_FUEL_DOOR_LOCATION = 289407240;
+ /**
+ * EV port location
+ */
+ public static final int INFO_EV_PORT_LOCATION = 289407241;
+ /**
+ * Driver's seat location
+ */
+ public static final int INFO_DRIVER_SEAT = 356516106;
+ /**
+ * Current odometer value of the vehicle
+ */
+ public static final int PERF_ODOMETER = 291504644;
+ /**
+ * Speed of the vehicle
+ */
+ public static final int PERF_VEHICLE_SPEED = 291504647;
+ /**
+ * Temperature of engine coolant
+ */
+ public static final int ENGINE_COOLANT_TEMP = 291504897;
+ /**
+ * Engine oil level
+ */
+ public static final int ENGINE_OIL_LEVEL = 289407747;
+ /**
+ * Temperature of engine oil
+ */
+ public static final int ENGINE_OIL_TEMP = 291504900;
+ /**
+ * Engine rpm
+ */
+ public static final int ENGINE_RPM = 291504901;
+ /**
+ * Reports wheel ticks
+ */
+ public static final int WHEEL_TICK = 290521862;
+ /**
+ * Fuel remaining in the the vehicle, in milliliters
+ */
+ public static final int FUEL_LEVEL = 291504903;
+ /**
+ * Fuel door open
+ */
+ public static final int FUEL_DOOR_OPEN = 287310600;
+ /**
+ * EV battery level in WH, if EV or hybrid
+ */
+ public static final int EV_BATTERY_LEVEL = 291504905;
+ /**
+ * EV charge port open
+ */
+ public static final int EV_CHARGE_PORT_OPEN = 287310602;
+ /**
+ * EV charge port connected
+ */
+ public static final int EV_CHARGE_PORT_CONNECTED = 287310603;
+ /**
+ * EV instantaneous charge rate in milliwatts
+ */
+ public static final int EV_BATTERY_INSTANTANEOUS_CHARGE_RATE = 291504908;
+ /**
+ * Range remaining
+ */
+ public static final int RANGE_REMAINING = 291504904;
+ /**
+ * Tire pressure
+ *
+ * min/max value indicates tire pressure sensor range. Each tire will have a separate min/max
+ * value denoted by its areaConfig.areaId.
+ */
+ public static final int TIRE_PRESSURE = 392168201;
+ /**
+ * Currently selected gear
+ *
+ * This is the gear selected by the user.
+ */
+ public static final int GEAR_SELECTION = 289408000;
+ /**
+ * Current gear. In non-manual case, selected gear may not
+ * match the current gear. For example, if the selected gear is GEAR_DRIVE,
+ * the current gear will be one of GEAR_1, GEAR_2 etc, which reflects
+ * the actual gear the transmission is currently running in.
+ */
+ public static final int CURRENT_GEAR = 289408001;
+ /**
+ * Parking brake state.
+ */
+ public static final int PARKING_BRAKE_ON = 287310850;
+ /**
+ * Auto-apply parking brake.
+ */
+ public static final int PARKING_BRAKE_AUTO_APPLY = 287310851;
+ /**
+ * Warning for fuel low level.
+ */
+ public static final int FUEL_LEVEL_LOW = 287310853;
+ /**
+ * Night mode
+ */
+ public static final int NIGHT_MODE = 287310855;
+ /**
+ * State of the vehicles turn signals
+ */
+ public static final int TURN_SIGNAL_STATE = 289408008;
+ /**
+ * Represents ignition state
+ */
+ public static final int IGNITION_STATE = 289408009;
+ /**
+ * ABS is active
+ */
+ public static final int ABS_ACTIVE = 287310858;
+ /**
+ * Traction Control is active
+ */
+ public static final int TRACTION_CONTROL_ACTIVE = 287310859;
+ /**
+ * Fan speed setting
+ */
+ public static final int HVAC_FAN_SPEED = 356517120;
+ /**
+ * Fan direction setting
+ */
+ public static final int HVAC_FAN_DIRECTION = 356517121;
+ /**
+ * HVAC current temperature.
+ */
+ public static final int HVAC_TEMPERATURE_CURRENT = 358614274;
+ /**
+ * HVAC, target temperature set.
+ */
+ public static final int HVAC_TEMPERATURE_SET = 358614275;
+ /**
+ * On/off defrost for designated window
+ */
+ public static final int HVAC_DEFROSTER = 320865540;
+ /**
+ * On/off AC for designated areaId
+ */
+ public static final int HVAC_AC_ON = 354419973;
+ /**
+ * On/off max AC
+ */
+ public static final int HVAC_MAX_AC_ON = 354419974;
+ /**
+ * On/off max defrost
+ */
+ public static final int HVAC_MAX_DEFROST_ON = 354419975;
+ /**
+ * Recirculation on/off
+ */
+ public static final int HVAC_RECIRC_ON = 354419976;
+ /**
+ * Enable temperature coupling between areas.
+ */
+ public static final int HVAC_DUAL_ON = 354419977;
+ /**
+ * On/off automatic mode
+ */
+ public static final int HVAC_AUTO_ON = 354419978;
+ /**
+ * Seat heating/cooling
+ *
+ */
+ public static final int HVAC_SEAT_TEMPERATURE = 356517131;
+ /**
+ * Side Mirror Heat
+ */
+ public static final int HVAC_SIDE_MIRROR_HEAT = 339739916;
+ /**
+ * Steering Wheel Heating/Cooling
+ */
+ public static final int HVAC_STEERING_WHEEL_HEAT = 289408269;
+ /**
+ * Temperature units for display
+ */
+ public static final int HVAC_TEMPERATURE_DISPLAY_UNITS = 289408270;
+ /**
+ * Actual fan speed
+ */
+ public static final int HVAC_ACTUAL_FAN_SPEED_RPM = 356517135;
+ /**
+ * Represents global power state for HVAC. Setting this property to false
+ * MAY mark some properties that control individual HVAC features/subsystems
+ * to UNAVAILABLE state. Setting this property to true MAY mark some
+ * properties that control individual HVAC features/subsystems to AVAILABLE
+ * state (unless any/all of them are UNAVAILABLE on their own individual
+ * merits).
+ */
+ public static final int HVAC_POWER_ON = 354419984;
+ /**
+ * Fan Positions Available
+ */
+ public static final int HVAC_FAN_DIRECTION_AVAILABLE = 356582673;
+ /**
+ * Automatic recirculation on/off
+ */
+ public static final int HVAC_AUTO_RECIRC_ON = 354419986;
+ /**
+ * Seat ventilation
+ */
+ public static final int HVAC_SEAT_VENTILATION = 356517139;
+ /**
+ * Outside temperature
+ */
+ public static final int ENV_OUTSIDE_TEMPERATURE = 291505923;
+ /**
+ * Property to control power state of application processor
+ *
+ * It is assumed that AP's power state is controller by separate power
+ * controller.
+ */
+ public static final int AP_POWER_STATE_REQ = 289475072;
+ /**
+ * Property to report power state of application processor
+ *
+ * It is assumed that AP's power state is controller by separate power
+ * controller.
+ */
+ public static final int AP_POWER_STATE_REPORT = 289475073;
+ /**
+ * Property to report bootup reason for the current power on. This is a
+ * static property that will not change for the whole duration until power
+ * off. For example, even if user presses power on button after automatic
+ * power on with door unlock, bootup reason must stay with
+ * VehicleApPowerBootupReason#USER_UNLOCK.
+ */
+ public static final int AP_POWER_BOOTUP_REASON = 289409538;
+ /**
+ * Property to represent brightness of the display. Some cars have single
+ * control for the brightness of all displays and this property is to share
+ * change in that control.
+ */
+ public static final int DISPLAY_BRIGHTNESS = 289409539;
+ /**
+ * Property to feed H/W input events to android
+ */
+ public static final int HW_KEY_INPUT = 289475088;
+ /**
+ * Door position
+ *
+ * This is an integer in case a door may be set to a particular position.
+ * Max value indicates fully open, min value (0) indicates fully closed.
+ */
+ public static final int DOOR_POS = 373295872;
+ /**
+ * Door move
+ */
+ public static final int DOOR_MOVE = 373295873;
+ /**
+ * Door lock
+ */
+ public static final int DOOR_LOCK = 371198722;
+ /**
+ * Mirror Z Position
+ */
+ public static final int MIRROR_Z_POS = 339741504;
+ /**
+ * Mirror Z Move
+ */
+ public static final int MIRROR_Z_MOVE = 339741505;
+ /**
+ * Mirror Y Position
+ */
+ public static final int MIRROR_Y_POS = 339741506;
+ /**
+ * Mirror Y Move
+ */
+ public static final int MIRROR_Y_MOVE = 339741507;
+ /**
+ * Mirror Lock
+ */
+ public static final int MIRROR_LOCK = 287312708;
+ /**
+ * Mirror Fold
+ */
+ public static final int MIRROR_FOLD = 287312709;
+ /**
+ * Seat memory select
+ *
+ * This parameter selects the memory preset to use to select the seat
+ * position. The minValue is always 0, and the maxValue determines the
+ * number of seat positions available.
+ */
+ public static final int SEAT_MEMORY_SELECT = 356518784;
+ /**
+ * Seat memory set
+ *
+ * This setting allows the user to save the current seat position settings
+ * into the selected preset slot. The maxValue for each seat position
+ * must match the maxValue for SEAT_MEMORY_SELECT.
+ */
+ public static final int SEAT_MEMORY_SET = 356518785;
+ /**
+ * Seatbelt buckled
+ *
+ * True indicates belt is buckled.
+ */
+ public static final int SEAT_BELT_BUCKLED = 354421634;
+ /**
+ * Seatbelt height position
+ */
+ public static final int SEAT_BELT_HEIGHT_POS = 356518787;
+ /**
+ * Seatbelt height move
+ */
+ public static final int SEAT_BELT_HEIGHT_MOVE = 356518788;
+ /**
+ * Seat fore/aft position
+ */
+ public static final int SEAT_FORE_AFT_POS = 356518789;
+ /**
+ * Seat fore/aft move
+ */
+ public static final int SEAT_FORE_AFT_MOVE = 356518790;
+ /**
+ * Seat backrest angle 1 position
+ */
+ public static final int SEAT_BACKREST_ANGLE_1_POS = 356518791;
+ /**
+ * Seat backrest angle 1 move
+ *
+ * Moves the backrest forward or recline.
+ */
+ public static final int SEAT_BACKREST_ANGLE_1_MOVE = 356518792;
+ /**
+ * Seat backrest angle 2 position
+ */
+ public static final int SEAT_BACKREST_ANGLE_2_POS = 356518793;
+ /**
+ * Seat backrest angle 2 move
+ */
+ public static final int SEAT_BACKREST_ANGLE_2_MOVE = 356518794;
+ /**
+ * Seat height position
+ */
+ public static final int SEAT_HEIGHT_POS = 356518795;
+ /**
+ * Seat height move
+ */
+ public static final int SEAT_HEIGHT_MOVE = 356518796;
+ /**
+ * Seat depth position
+ */
+ public static final int SEAT_DEPTH_POS = 356518797;
+ /**
+ * Seat depth move
+ */
+ public static final int SEAT_DEPTH_MOVE = 356518798;
+ /**
+ * Seat tilt position
+ */
+ public static final int SEAT_TILT_POS = 356518799;
+ /**
+ * Seat tilt move
+ */
+ public static final int SEAT_TILT_MOVE = 356518800;
+ /**
+ * Lumber fore/aft position
+ */
+ public static final int SEAT_LUMBAR_FORE_AFT_POS = 356518801;
+ /**
+ * Lumbar fore/aft move
+ */
+ public static final int SEAT_LUMBAR_FORE_AFT_MOVE = 356518802;
+ /**
+ * Lumbar side support position
+ */
+ public static final int SEAT_LUMBAR_SIDE_SUPPORT_POS = 356518803;
+ /**
+ * Lumbar side support move
+ */
+ public static final int SEAT_LUMBAR_SIDE_SUPPORT_MOVE = 356518804;
+ /**
+ * Headrest height position
+ */
+ public static final int SEAT_HEADREST_HEIGHT_POS = 289409941;
+ /**
+ * Headrest height move
+ */
+ public static final int SEAT_HEADREST_HEIGHT_MOVE = 356518806;
+ /**
+ * Headrest angle position
+ */
+ public static final int SEAT_HEADREST_ANGLE_POS = 356518807;
+ /**
+ * Headrest angle move
+ */
+ public static final int SEAT_HEADREST_ANGLE_MOVE = 356518808;
+ /**
+ * Headrest fore/aft position
+ */
+ public static final int SEAT_HEADREST_FORE_AFT_POS = 356518809;
+ /**
+ * Headrest fore/aft move
+ */
+ public static final int SEAT_HEADREST_FORE_AFT_MOVE = 356518810;
+ /**
+ * Window Position
+ */
+ public static final int WINDOW_POS = 322964416;
+ /**
+ * Window Move
+ */
+ public static final int WINDOW_MOVE = 322964417;
+ /**
+ * Window Lock
+ */
+ public static final int WINDOW_LOCK = 320867268;
+ /**
+ * Vehicle Maps Service (VMS) message
+ */
+ public static final int VEHICLE_MAP_SERVICE = 299895808;
+ /**
+ * OBD2 Live Sensor Data
+ *
+ * Reports a snapshot of the current (live) values of the OBD2 sensors available.
+ */
+ public static final int OBD2_LIVE_FRAME = 299896064;
+ /**
+ * OBD2 Freeze Frame Sensor Data
+ *
+ * Reports a snapshot of the value of the OBD2 sensors available at the time that a fault
+ * occurred and was detected.
+ */
+ public static final int OBD2_FREEZE_FRAME = 299896065;
+ /**
+ * OBD2 Freeze Frame Information
+ */
+ public static final int OBD2_FREEZE_FRAME_INFO = 299896066;
+ /**
+ * OBD2 Freeze Frame Clear
+ *
+ * This property allows deletion of any of the freeze frames stored in
+ * vehicle memory, as described by OBD2_FREEZE_FRAME_INFO.
+ */
+ public static final int OBD2_FREEZE_FRAME_CLEAR = 299896067;
+ /**
+ * Headlights State
+ */
+ public static final int HEADLIGHTS_STATE = 289410560;
+ /**
+ * High beam lights state
+ */
+ public static final int HIGH_BEAM_LIGHTS_STATE = 289410561;
+ /**
+ * Fog light state
+ */
+ public static final int FOG_LIGHTS_STATE = 289410562;
+ /**
+ * Hazard light status
+ */
+ public static final int HAZARD_LIGHTS_STATE = 289410563;
+ /**
+ * Headlight switch
+ */
+ public static final int HEADLIGHTS_SWITCH = 289410576;
+ /**
+ * High beam light switch
+ */
+ public static final int HIGH_BEAM_LIGHTS_SWITCH = 289410577;
+ /**
+ * Fog light switch
+ */
+ public static final int FOG_LIGHTS_SWITCH = 289410578;
+ /**
+ * Hazard light switch
+ */
+ public static final int HAZARD_LIGHTS_SWITCH = 289410579;
+
+ /**
+ * @param o Integer
+ * @return String
+ */
+ public static String toString(int o) {
+ if (o == INVALID) {
+ return "INVALID";
+ }
+ if (o == INFO_VIN) {
+ return "INFO_VIN";
+ }
+ if (o == INFO_MAKE) {
+ return "INFO_MAKE";
+ }
+ if (o == INFO_MODEL) {
+ return "INFO_MODEL";
+ }
+ if (o == INFO_MODEL_YEAR) {
+ return "INFO_MODEL_YEAR";
+ }
+ if (o == INFO_FUEL_CAPACITY) {
+ return "INFO_FUEL_CAPACITY";
+ }
+ if (o == INFO_FUEL_TYPE) {
+ return "INFO_FUEL_TYPE";
+ }
+ if (o == INFO_EV_BATTERY_CAPACITY) {
+ return "INFO_EV_BATTERY_CAPACITY";
+ }
+ if (o == INFO_EV_CONNECTOR_TYPE) {
+ return "INFO_EV_CONNECTOR_TYPE";
+ }
+ if (o == INFO_FUEL_DOOR_LOCATION) {
+ return "INFO_FUEL_DOOR_LOCATION";
+ }
+ if (o == INFO_EV_PORT_LOCATION) {
+ return "INFO_EV_PORT_LOCATION";
+ }
+ if (o == INFO_DRIVER_SEAT) {
+ return "INFO_DRIVER_SEAT";
+ }
+ if (o == PERF_ODOMETER) {
+ return "PERF_ODOMETER";
+ }
+ if (o == PERF_VEHICLE_SPEED) {
+ return "PERF_VEHICLE_SPEED";
+ }
+ if (o == ENGINE_COOLANT_TEMP) {
+ return "ENGINE_COOLANT_TEMP";
+ }
+ if (o == ENGINE_OIL_LEVEL) {
+ return "ENGINE_OIL_LEVEL";
+ }
+ if (o == ENGINE_OIL_TEMP) {
+ return "ENGINE_OIL_TEMP";
+ }
+ if (o == ENGINE_RPM) {
+ return "ENGINE_RPM";
+ }
+ if (o == WHEEL_TICK) {
+ return "WHEEL_TICK";
+ }
+ if (o == FUEL_LEVEL) {
+ return "FUEL_LEVEL";
+ }
+ if (o == FUEL_DOOR_OPEN) {
+ return "FUEL_DOOR_OPEN";
+ }
+ if (o == EV_BATTERY_LEVEL) {
+ return "EV_BATTERY_LEVEL";
+ }
+ if (o == EV_CHARGE_PORT_OPEN) {
+ return "EV_CHARGE_PORT_OPEN";
+ }
+ if (o == EV_CHARGE_PORT_CONNECTED) {
+ return "EV_CHARGE_PORT_CONNECTED";
+ }
+ if (o == EV_BATTERY_INSTANTANEOUS_CHARGE_RATE) {
+ return "EV_BATTERY_INSTANTANEOUS_CHARGE_RATE";
+ }
+ if (o == RANGE_REMAINING) {
+ return "RANGE_REMAINING";
+ }
+ if (o == TIRE_PRESSURE) {
+ return "TIRE_PRESSURE";
+ }
+ if (o == GEAR_SELECTION) {
+ return "GEAR_SELECTION";
+ }
+ if (o == CURRENT_GEAR) {
+ return "CURRENT_GEAR";
+ }
+ if (o == PARKING_BRAKE_ON) {
+ return "PARKING_BRAKE_ON";
+ }
+ if (o == PARKING_BRAKE_AUTO_APPLY) {
+ return "PARKING_BRAKE_AUTO_APPLY";
+ }
+ if (o == FUEL_LEVEL_LOW) {
+ return "FUEL_LEVEL_LOW";
+ }
+ if (o == NIGHT_MODE) {
+ return "NIGHT_MODE";
+ }
+ if (o == TURN_SIGNAL_STATE) {
+ return "TURN_SIGNAL_STATE";
+ }
+ if (o == IGNITION_STATE) {
+ return "IGNITION_STATE";
+ }
+ if (o == ABS_ACTIVE) {
+ return "ABS_ACTIVE";
+ }
+ if (o == TRACTION_CONTROL_ACTIVE) {
+ return "TRACTION_CONTROL_ACTIVE";
+ }
+ if (o == HVAC_FAN_SPEED) {
+ return "HVAC_FAN_SPEED";
+ }
+ if (o == HVAC_FAN_DIRECTION) {
+ return "HVAC_FAN_DIRECTION";
+ }
+ if (o == HVAC_TEMPERATURE_CURRENT) {
+ return "HVAC_TEMPERATURE_CURRENT";
+ }
+ if (o == HVAC_TEMPERATURE_SET) {
+ return "HVAC_TEMPERATURE_SET";
+ }
+ if (o == HVAC_DEFROSTER) {
+ return "HVAC_DEFROSTER";
+ }
+ if (o == HVAC_AC_ON) {
+ return "HVAC_AC_ON";
+ }
+ if (o == HVAC_MAX_AC_ON) {
+ return "HVAC_MAX_AC_ON";
+ }
+ if (o == HVAC_MAX_DEFROST_ON) {
+ return "HVAC_MAX_DEFROST_ON";
+ }
+ if (o == HVAC_RECIRC_ON) {
+ return "HVAC_RECIRC_ON";
+ }
+ if (o == HVAC_DUAL_ON) {
+ return "HVAC_DUAL_ON";
+ }
+ if (o == HVAC_AUTO_ON) {
+ return "HVAC_AUTO_ON";
+ }
+ if (o == HVAC_SEAT_TEMPERATURE) {
+ return "HVAC_SEAT_TEMPERATURE";
+ }
+ if (o == HVAC_SIDE_MIRROR_HEAT) {
+ return "HVAC_SIDE_MIRROR_HEAT";
+ }
+ if (o == HVAC_STEERING_WHEEL_HEAT) {
+ return "HVAC_STEERING_WHEEL_HEAT";
+ }
+ if (o == HVAC_TEMPERATURE_DISPLAY_UNITS) {
+ return "HVAC_TEMPERATURE_DISPLAY_UNITS";
+ }
+ if (o == HVAC_ACTUAL_FAN_SPEED_RPM) {
+ return "HVAC_ACTUAL_FAN_SPEED_RPM";
+ }
+ if (o == HVAC_POWER_ON) {
+ return "HVAC_POWER_ON";
+ }
+ if (o == HVAC_FAN_DIRECTION_AVAILABLE) {
+ return "HVAC_FAN_DIRECTION_AVAILABLE";
+ }
+ if (o == HVAC_AUTO_RECIRC_ON) {
+ return "HVAC_AUTO_RECIRC_ON";
+ }
+ if (o == HVAC_SEAT_VENTILATION) {
+ return "HVAC_SEAT_VENTILATION";
+ }
+ if (o == ENV_OUTSIDE_TEMPERATURE) {
+ return "ENV_OUTSIDE_TEMPERATURE";
+ }
+ if (o == AP_POWER_STATE_REQ) {
+ return "AP_POWER_STATE_REQ";
+ }
+ if (o == AP_POWER_STATE_REPORT) {
+ return "AP_POWER_STATE_REPORT";
+ }
+ if (o == AP_POWER_BOOTUP_REASON) {
+ return "AP_POWER_BOOTUP_REASON";
+ }
+ if (o == DISPLAY_BRIGHTNESS) {
+ return "DISPLAY_BRIGHTNESS";
+ }
+ if (o == HW_KEY_INPUT) {
+ return "HW_KEY_INPUT";
+ }
+ if (o == DOOR_POS) {
+ return "DOOR_POS";
+ }
+ if (o == DOOR_MOVE) {
+ return "DOOR_MOVE";
+ }
+ if (o == DOOR_LOCK) {
+ return "DOOR_LOCK";
+ }
+ if (o == MIRROR_Z_POS) {
+ return "MIRROR_Z_POS";
+ }
+ if (o == MIRROR_Z_MOVE) {
+ return "MIRROR_Z_MOVE";
+ }
+ if (o == MIRROR_Y_POS) {
+ return "MIRROR_Y_POS";
+ }
+ if (o == MIRROR_Y_MOVE) {
+ return "MIRROR_Y_MOVE";
+ }
+ if (o == MIRROR_LOCK) {
+ return "MIRROR_LOCK";
+ }
+ if (o == MIRROR_FOLD) {
+ return "MIRROR_FOLD";
+ }
+ if (o == SEAT_MEMORY_SELECT) {
+ return "SEAT_MEMORY_SELECT";
+ }
+ if (o == SEAT_MEMORY_SET) {
+ return "SEAT_MEMORY_SET";
+ }
+ if (o == SEAT_BELT_BUCKLED) {
+ return "SEAT_BELT_BUCKLED";
+ }
+ if (o == SEAT_BELT_HEIGHT_POS) {
+ return "SEAT_BELT_HEIGHT_POS";
+ }
+ if (o == SEAT_BELT_HEIGHT_MOVE) {
+ return "SEAT_BELT_HEIGHT_MOVE";
+ }
+ if (o == SEAT_FORE_AFT_POS) {
+ return "SEAT_FORE_AFT_POS";
+ }
+ if (o == SEAT_FORE_AFT_MOVE) {
+ return "SEAT_FORE_AFT_MOVE";
+ }
+ if (o == SEAT_BACKREST_ANGLE_1_POS) {
+ return "SEAT_BACKREST_ANGLE_1_POS";
+ }
+ if (o == SEAT_BACKREST_ANGLE_1_MOVE) {
+ return "SEAT_BACKREST_ANGLE_1_MOVE";
+ }
+ if (o == SEAT_BACKREST_ANGLE_2_POS) {
+ return "SEAT_BACKREST_ANGLE_2_POS";
+ }
+ if (o == SEAT_BACKREST_ANGLE_2_MOVE) {
+ return "SEAT_BACKREST_ANGLE_2_MOVE";
+ }
+ if (o == SEAT_HEIGHT_POS) {
+ return "SEAT_HEIGHT_POS";
+ }
+ if (o == SEAT_HEIGHT_MOVE) {
+ return "SEAT_HEIGHT_MOVE";
+ }
+ if (o == SEAT_DEPTH_POS) {
+ return "SEAT_DEPTH_POS";
+ }
+ if (o == SEAT_DEPTH_MOVE) {
+ return "SEAT_DEPTH_MOVE";
+ }
+ if (o == SEAT_TILT_POS) {
+ return "SEAT_TILT_POS";
+ }
+ if (o == SEAT_TILT_MOVE) {
+ return "SEAT_TILT_MOVE";
+ }
+ if (o == SEAT_LUMBAR_FORE_AFT_POS) {
+ return "SEAT_LUMBAR_FORE_AFT_POS";
+ }
+ if (o == SEAT_LUMBAR_FORE_AFT_MOVE) {
+ return "SEAT_LUMBAR_FORE_AFT_MOVE";
+ }
+ if (o == SEAT_LUMBAR_SIDE_SUPPORT_POS) {
+ return "SEAT_LUMBAR_SIDE_SUPPORT_POS";
+ }
+ if (o == SEAT_LUMBAR_SIDE_SUPPORT_MOVE) {
+ return "SEAT_LUMBAR_SIDE_SUPPORT_MOVE";
+ }
+ if (o == SEAT_HEADREST_HEIGHT_POS) {
+ return "SEAT_HEADREST_HEIGHT_POS";
+ }
+ if (o == SEAT_HEADREST_HEIGHT_MOVE) {
+ return "SEAT_HEADREST_HEIGHT_MOVE";
+ }
+ if (o == SEAT_HEADREST_ANGLE_POS) {
+ return "SEAT_HEADREST_ANGLE_POS";
+ }
+ if (o == SEAT_HEADREST_ANGLE_MOVE) {
+ return "SEAT_HEADREST_ANGLE_MOVE";
+ }
+ if (o == SEAT_HEADREST_FORE_AFT_POS) {
+ return "SEAT_HEADREST_FORE_AFT_POS";
+ }
+ if (o == SEAT_HEADREST_FORE_AFT_MOVE) {
+ return "SEAT_HEADREST_FORE_AFT_MOVE";
+ }
+ if (o == WINDOW_POS) {
+ return "WINDOW_POS";
+ }
+ if (o == WINDOW_MOVE) {
+ return "WINDOW_MOVE";
+ }
+ if (o == WINDOW_LOCK) {
+ return "WINDOW_LOCK";
+ }
+ if (o == VEHICLE_MAP_SERVICE) {
+ return "VEHICLE_MAP_SERVICE";
+ }
+ if (o == OBD2_LIVE_FRAME) {
+ return "OBD2_LIVE_FRAME";
+ }
+ if (o == OBD2_FREEZE_FRAME) {
+ return "OBD2_FREEZE_FRAME";
+ }
+ if (o == OBD2_FREEZE_FRAME_INFO) {
+ return "OBD2_FREEZE_FRAME_INFO";
+ }
+ if (o == OBD2_FREEZE_FRAME_CLEAR) {
+ return "OBD2_FREEZE_FRAME_CLEAR";
+ }
+ if (o == HEADLIGHTS_STATE) {
+ return "HEADLIGHTS_STATE";
+ }
+ if (o == HIGH_BEAM_LIGHTS_STATE) {
+ return "HIGH_BEAM_LIGHTS_STATE";
+ }
+ if (o == FOG_LIGHTS_STATE) {
+ return "FOG_LIGHTS_STATE";
+ }
+ if (o == HAZARD_LIGHTS_STATE) {
+ return "HAZARD_LIGHTS_STATE";
+ }
+ if (o == HEADLIGHTS_SWITCH) {
+ return "HEADLIGHTS_SWITCH";
+ }
+ if (o == HIGH_BEAM_LIGHTS_SWITCH) {
+ return "HIGH_BEAM_LIGHTS_SWITCH";
+ }
+ if (o == FOG_LIGHTS_SWITCH) {
+ return "FOG_LIGHTS_SWITCH";
+ }
+ if (o == HAZARD_LIGHTS_SWITCH) {
+ return "HAZARD_LIGHTS_SWITCH";
+ }
+ return "0x" + Integer.toHexString(o);
+ }
+}
diff --git a/car-lib/src/android/car/drivingstate/CarUxRestrictions.java b/car-lib/src/android/car/drivingstate/CarUxRestrictions.java
index c6c22bc..87dfa3a 100644
--- a/car-lib/src/android/car/drivingstate/CarUxRestrictions.java
+++ b/car-lib/src/android/car/drivingstate/CarUxRestrictions.java
@@ -24,30 +24,32 @@
import java.lang.annotation.RetentionPolicy;
/**
- * Car UX Restrictions event. This contains information on the set of UX restrictions
- * that is in place due to the car's driving state.
+ * Car UX Restrictions event. This contains information on the set of UX restrictions that is in
+ * place due to the car's driving state.
* <p>
* The restriction information is organized as follows:
* <ul>
* <li> When there are no restrictions in place, for example when the car is parked,
* <ul>
- * <li> {@link #mRequiresDistractionOptimization} is set to false. Apps can display activities
+ * <li> {@link #isRequiresDistractionOptimization()} returns false. Apps can display activities
* that are not distraction optimized.
- * <li> {@link #mActiveRestrictions} should contain UX_RESTRICTIONS_UNRESTRICTED. Apps don't
- * have to check for this since {@code mRequiresDistractionOptimization} is false.
+ * <li> When {@link #isRequiresDistractionOptimization()} returns false, apps don't have to call
+ * {@link #getActiveRestrictions()}, since there is no distraction optimization required.
* </ul>
* <li> When the driving state changes, causing the UX restrictions to come in effect,
* <ul>
- * <li> {@code mRequiresDistractionOptimization} is set to true. Apps can only display
- * activities that are distraction optimized. Distraction optimized activities follow the base
- * design guidelines that provide a distraction free driving user experience.
- * <li> In addition, apps will have to check for the content of mActiveRestrictions.
- * {@code mActiveRestrictions} will have additional granular information on the set of UX
- * restrictions that are in place for the current driving state. The content of
- * {@code mActiveRestrictions}, for the same driving state of the vehicle, could vary depending
- * on the car maker and the market. For example, when the car is idling, the set of active
- * UX restrictions contained in the {@code mActiveRestrictions} will depend on the car maker
- * and the safety standards of the market that the vehicle is deployed in.
+ * <li> {@link #isRequiresDistractionOptimization()} returns true. Apps can only display activities
+ * that are distraction optimized. Distraction optimized activities must follow the base design
+ * guidelines to ensure a distraction free driving experience for the user.
+ * <li> When {@link #isRequiresDistractionOptimization()} returns true, apps must call
+ * {@link #getActiveRestrictions()}, to get the currently active UX restrictions to adhere to.
+ * {@link #getActiveRestrictions()} provides additional information on the set of UX
+ * restrictions that are in place for the current driving state.
+ * <p>
+ * The UX restrictions returned by {@link #getActiveRestrictions()}, for the same driving state of
+ * the vehicle, could vary depending on the OEM and the market. For example, when the car is
+ * idling, the set of active UX restrictions will depend on the car maker and the safety standards
+ * of the market that the vehicle is deployed in.
* </ul>
* </ul>
* <p>
diff --git a/car-support-lib/proguard-release.flags b/car-support-lib/proguard-release.flags
index 91cab7e..4f5f917 100644
--- a/car-support-lib/proguard-release.flags
+++ b/car-support-lib/proguard-release.flags
@@ -7201,6 +7201,7 @@
public int enabledSetting;
public int flags;
public int fullBackupContent;
+ public boolean hiddenUntilInstalled;
public int installLocation;
public int largestWidthLimitDp;
public long longVersionCode;
@@ -7646,6 +7647,8 @@
public abstract java.lang.String[] setPackagesSuspendedAsUser(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String, java.lang.String, int);
public abstract void setPermissionEnforced(java.lang.String, boolean);
public abstract boolean setRequiredForSystemUser(java.lang.String, boolean);
+ public abstract void setSystemAppHiddenUntilInstalled(java.lang.String, boolean);
+ public abstract boolean setSystemAppInstallState(java.lang.String, boolean, int);
public abstract void setUpdateAvailable(java.lang.String, boolean);
public abstract boolean shouldShowRequestPermissionRationale(java.lang.String, java.lang.String, int);
public abstract void systemReady();
@@ -8589,6 +8592,7 @@
public static int MATCH_DISABLED_UNTIL_USED_COMPONENTS;
public static int MATCH_EXPLICITLY_VISIBLE_ONLY;
public static int MATCH_FACTORY_ONLY;
+ public static int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS;
public static int MATCH_INSTANT;
public static int MATCH_KNOWN_PACKAGES;
public static int MATCH_STATIC_SHARED_LIBRARIES;
@@ -17003,8 +17007,8 @@
public boolean equals(java.lang.Object);
public static android.view.DisplayCutout fromBoundingRect(int, int, int, int);
- public static android.view.DisplayCutout fromBounds(android.graphics.Path);
- public static android.view.DisplayCutout fromResources(android.content.res.Resources, int, int);
+ public static android.view.DisplayCutout fromBounds(android.graphics.Region);
+ public static android.view.DisplayCutout fromResourcesRectApproximation(android.content.res.Resources, int, int);
public static android.view.DisplayCutout fromSpec(java.lang.String, int, int, float);
public java.util.List getBoundingRects();
public android.graphics.Region getBounds();
diff --git a/car_product/sepolicy/private/carservice_app.te b/car_product/sepolicy/private/carservice_app.te
index d02c377..fa2577f 100644
--- a/car_product/sepolicy/private/carservice_app.te
+++ b/car_product/sepolicy/private/carservice_app.te
@@ -28,12 +28,14 @@
input_method_service
input_service
location_service
+ media_session_service
network_management_service
power_service
procfsinspector_service
sensorservice_service
surfaceflinger_service
uimode_service
+ voiceinteraction_service
}:service_manager find;
# Read and write /data/data subdirectory.
diff --git a/evs/app/RenderDirectView.cpp b/evs/app/RenderDirectView.cpp
index 24eb485..f0d26e4 100644
--- a/evs/app/RenderDirectView.cpp
+++ b/evs/app/RenderDirectView.cpp
@@ -133,6 +133,9 @@
glDisableVertexAttribArray(1);
+ // Now that everything is submitted, release our hold on the texture resource
+ detachRenderTarget();
+
// Wait for the rendering to finish
glFinish();
diff --git a/evs/app/RenderTopView.cpp b/evs/app/RenderTopView.cpp
index bff2b3c..80ccb11 100644
--- a/evs/app/RenderTopView.cpp
+++ b/evs/app/RenderTopView.cpp
@@ -212,6 +212,9 @@
// Draw the car image
renderCarTopView();
+ // Now that everythign is submitted, release our hold on the texture resource
+ detachRenderTarget();
+
// Wait for the rendering to finish
glFinish();
diff --git a/evs/sampleDriver/GlWrapper.cpp b/evs/sampleDriver/GlWrapper.cpp
index 3055ba0..fbd36a2 100644
--- a/evs/sampleDriver/GlWrapper.cpp
+++ b/evs/sampleDriver/GlWrapper.cpp
@@ -308,6 +308,11 @@
return false;
}
+ // Turn off mip-mapping for the created texture surface
+ // (the inbound camera imagery doesn't have MIPs)
+ glBindTexture(GL_TEXTURE_2D, mTextureMap);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glBindTexture(GL_TEXTURE_2D, 0);
return true;
}
diff --git a/evs/sampleDriver/ServiceNames.h b/evs/sampleDriver/ServiceNames.h
index 1178da5..6458b1b 100644
--- a/evs/sampleDriver/ServiceNames.h
+++ b/evs/sampleDriver/ServiceNames.h
@@ -13,5 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_0_SERVICENAMES_H
+#define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_0_SERVICENAMES_H
const static char kEnumeratorServiceName[] = "EvsEnumeratorHw";
+
+#endif // ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_0_SERVICENAMES_H
diff --git a/evs/sampleDriver/VideoCapture.h b/evs/sampleDriver/VideoCapture.h
index f2d1175..63305b9 100644
--- a/evs/sampleDriver/VideoCapture.h
+++ b/evs/sampleDriver/VideoCapture.h
@@ -13,6 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_0_VIDEOCAPTURE_H
+#define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_0_VIDEOCAPTURE_H
+
#include <atomic>
#include <thread>
#include <functional>
@@ -73,3 +76,4 @@
};
};
+#endif // ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_0_VIDEOCAPTURE_
diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml
index 5212448..870ed10 100644
--- a/service/AndroidManifest.xml
+++ b/service/AndroidManifest.xml
@@ -27,11 +27,6 @@
android:description="@string/car_permission_desc"
android:label="@string/car_permission_label" />
<permission
- android:name="android.car.permission.ADJUST_CAR_CABIN"
- android:protectionLevel="system|signature"
- android:label="@string/car_permission_label_cabin"
- android:description="@string/car_permission_desc_cabin" />
- <permission
android:name="android.car.permission.CAR_ENERGY"
android:permissionGroup="android.car.permission-group.CAR_MONITORING"
android:protectionLevel="dangerous"
diff --git a/service/src/com/android/car/CarUxRestrictionsManagerService.java b/service/src/com/android/car/CarUxRestrictionsManagerService.java
index 23c4d32..b90939b 100644
--- a/service/src/com/android/car/CarUxRestrictionsManagerService.java
+++ b/service/src/com/android/car/CarUxRestrictionsManagerService.java
@@ -27,11 +27,17 @@
import android.car.hardware.property.CarPropertyEvent;
import android.car.hardware.property.ICarPropertyEventListener;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.os.Binder;
+import android.os.Build;
import android.os.IBinder;
+import android.os.Process;
import android.os.RemoteException;
import android.util.Log;
+import com.android.internal.annotations.GuardedBy;
+
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
@@ -60,6 +66,9 @@
private CarUxRestrictions mCurrentUxRestrictions;
private float mCurrentMovingSpeed;
private boolean mFallbackToDefaults;
+ // Flag to disable broadcasting UXR changes - for development purposes
+ @GuardedBy("this")
+ private boolean mUxRChangeBroadcastEnabled = true;
// For dumpsys logging
private final LinkedList<Utils.TransitionLog> mTransitionLogs = new LinkedList<>();
@@ -224,6 +233,42 @@
}
/**
+ * Enable/disable UX restrictions change broadcast blocking.
+ * Setting this to true will stop broadcasts of UX restriction change to listeners.
+ * This method works only on debug builds and the caller of this method needs to have the same
+ * signature of the car service.
+ *
+ */
+ public synchronized void setUxRChangeBroadcastEnabled(boolean enable) {
+ if (!isDebugBuild()) {
+ Log.e(TAG, "Cannot set UX restriction change broadcast.");
+ return;
+ }
+ // Check if the caller has the same signature as that of the car service.
+ if (mContext.getPackageManager().checkSignatures(Process.myUid(), Binder.getCallingUid())
+ != PackageManager.SIGNATURE_MATCH) {
+ throw new SecurityException(
+ "Caller " + mContext.getPackageManager().getNameForUid(Binder.getCallingUid())
+ + " does not have the right signature");
+ }
+ if (enable) {
+ // if enabling it back, send the current restrictions
+ mUxRChangeBroadcastEnabled = enable;
+ handleDispatchUxRestrictions(mDrivingStateService.getCurrentDrivingState().eventValue,
+ getCurrentSpeed());
+ } else {
+ // fake parked state, so if the system is currently restricted, the restrictions are
+ // relaxed.
+ handleDispatchUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED, 0);
+ mUxRChangeBroadcastEnabled = enable;
+ }
+ }
+
+ private boolean isDebugBuild() {
+ return Build.IS_USERDEBUG || Build.IS_ENG;
+ }
+
+ /**
* Class that holds onto client related information - listener interface, process that hosts the
* binder object etc.
* It also registers for death notifications of the host.
@@ -282,6 +327,9 @@
writer.println(
"Requires DO? " + mCurrentUxRestrictions.isRequiresDistractionOptimization());
writer.println("Current UXR: " + mCurrentUxRestrictions.getActiveRestrictions());
+ if (isDebugBuild()) {
+ writer.println("mUxRChangeBroadcastEnabled? " + mUxRChangeBroadcastEnabled);
+ }
mHelper.dump(writer);
writer.println("UX Restriction change log:");
for (Utils.TransitionLog tlog : mTransitionLogs) {
@@ -377,6 +425,11 @@
*/
private synchronized void handleDispatchUxRestrictions(@CarDrivingState int currentDrivingState,
float speed) {
+ if (isDebugBuild() && !mUxRChangeBroadcastEnabled) {
+ Log.d(TAG, "Not dispatching UX Restriction due to setting");
+ return;
+ }
+
CarUxRestrictions uxRestrictions;
// Get UX restrictions from the parsed configuration XML or fall back to defaults if not
// available.
@@ -428,7 +481,7 @@
break;
case CarDrivingStateEvent.DRIVING_STATE_IDLING:
restrictions = CarUxRestrictions.UX_RESTRICTIONS_BASELINE;
- requiresOpt = true;
+ requiresOpt = false;
break;
case CarDrivingStateEvent.DRIVING_STATE_MOVING:
default:
diff --git a/service/src/com/android/car/CarUxRestrictionsServiceHelper.java b/service/src/com/android/car/CarUxRestrictionsServiceHelper.java
index 236d915..348d3be 100644
--- a/service/src/com/android/car/CarUxRestrictionsServiceHelper.java
+++ b/service/src/com/android/car/CarUxRestrictionsServiceHelper.java
@@ -83,6 +83,10 @@
public boolean loadUxRestrictionsFromXml() throws IOException, XmlPullParserException {
mRestrictionsMap.clear();
XmlResourceParser parser = mContext.getResources().getXml(mXmlResource);
+ if (parser == null) {
+ Log.e(TAG, "Invalid Xml resource");
+ return false;
+ }
AttributeSet attrs = Xml.asAttributeSet(parser);
int type;
// Traverse till we get to the first tag
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 3f3f051..ed51a78 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -46,6 +46,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.Process;
+import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.ArraySet;
import android.util.Log;
@@ -541,8 +542,10 @@
// Add the blocking overlay activity to the whitelist, since that needs to run in a
// restricted state to communicate the reason an app was blocked.
Set<String> defaultActivity = new ArraySet<>();
- defaultActivity.add(mActivityBlockingActivity.getClassName());
- configWhitelist.put(mActivityBlockingActivity.getPackageName(), defaultActivity);
+ if (mActivityBlockingActivity != null) {
+ defaultActivity.add(mActivityBlockingActivity.getClassName());
+ configWhitelist.put(mActivityBlockingActivity.getPackageName(), defaultActivity);
+ }
List<PackageInfo> packages = mPackageManager.getInstalledPackages(
PackageManager.GET_SIGNATURES | PackageManager.GET_ACTIVITIES
@@ -678,6 +681,11 @@
}
for (String pkg : configBlacklist.keySet()) {
+ if (TextUtils.isEmpty(pkg)) {
+ // This means there is nothing to blacklist
+ Log.d(CarLog.TAG_PACKAGE, "Empty string in blacklist pkg");
+ continue;
+ }
int flags = 0;
PackageInfo pkgInfo;
String[] activities;
@@ -688,7 +696,7 @@
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
} catch (NameNotFoundException e) {
- Log.e(CarLog.TAG_PACKAGE, pkg + " not found to blacklist " + e);
+ Log.e(CarLog.TAG_PACKAGE, pkg + " not found to blacklist ", e);
continue;
}
@@ -977,8 +985,18 @@
}
}
+ /**
+ * Enable/Disable activity blocking by correspondingly enabling/disabling broadcasting UXR
+ * changes in {@link CarUxRestrictionsManagerService}. This is only available in
+ * engineering builds for development convenience.
+ *
+ */
@Override
public synchronized void setEnableActivityBlocking(boolean enable) {
+ if (!isDebugBuild()) {
+ Log.e(CarLog.TAG_PACKAGE, "Cannot enable/disable activity blocking");
+ return;
+ }
// Check if the caller has the same signature as that of the car service.
if (mPackageManager.checkSignatures(Process.myUid(), Binder.getCallingUid())
!= PackageManager.SIGNATURE_MATCH) {
@@ -986,7 +1004,7 @@
"Caller " + mPackageManager.getNameForUid(Binder.getCallingUid())
+ " does not have the right signature");
}
- mEnableActivityBlocking = enable;
+ mCarUxRestrictionsService.setUxRChangeBroadcastEnabled(enable);
}
/**
diff --git a/service/src/com/android/car/user/CarUserService.java b/service/src/com/android/car/user/CarUserService.java
index c63a2fd..82e981f 100644
--- a/service/src/com/android/car/user/CarUserService.java
+++ b/service/src/com/android/car/user/CarUserService.java
@@ -44,7 +44,7 @@
public class CarUserService extends BroadcastReceiver implements CarServiceBase {
// Place holder for user name of the first user created.
@VisibleForTesting
- static final String OWNER_NAME = "Owner";
+ static final String OWNER_NAME = "Driver";
private static final String TAG = "CarUserService";
private final Context mContext;
private final CarUserManagerHelper mCarUserManagerHelper;
diff --git a/tests/carservice_test/AndroidManifest.xml b/tests/carservice_test/AndroidManifest.xml
index 2be5a83..19a5552 100644
--- a/tests/carservice_test/AndroidManifest.xml
+++ b/tests/carservice_test/AndroidManifest.xml
@@ -19,7 +19,10 @@
<uses-permission android:name="android.Manifest.permission.MODIFY_AUDIO_ROUTING" />
<uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE" />
- <uses-permission android:name="android.car.permission.ADJUST_CAR_CABIN" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_DOORS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_WINDOWS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_MIRRORS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_SEATS" />
<uses-permission android:name="android.car.permission.CAR_ENERGY" />
<uses-permission android:name="android.car.permission.CONTROL_APP_BLOCKING" />
<uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME" />
diff --git a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
index 3a50b45..c63c980 100644
--- a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
+++ b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
@@ -173,7 +173,7 @@
protected MockContext getCarServiceContext() throws NameNotFoundException {
if (mMockContext == null) {
mMockContext = new MockContext(getContext()
- .createPackageContext("com.android.car", Context.CONTEXT_IGNORE_SECURITY));
+ .createPackageContext("com.android.car.test", Context.CONTEXT_IGNORE_SECURITY));
}
return mMockContext;
}