DO NOT MERGE - Merge pi-dev@5234907 into stage-aosp-master

Bug: 120848293
Change-Id: Id40dd7bc0c358a489750f01c26f642576a503a9e
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..b59c421
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,2 @@
+# Each subdirectory should have its OWNERS.
+# Owned by Android Automotive Embedded (go/aae).
diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index 57975a2..d8f7736 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -1,34 +1,35 @@
+// Signature format: 2.0
 package android.car {
 
   public final class Car {
     method public void connect() throws java.lang.IllegalStateException;
-    method public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection, android.os.Handler);
+    method public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection, @Nullable android.os.Handler);
     method public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection);
     method public void disconnect();
     method public int getCarConnectionType();
-    method public java.lang.Object getCarManager(java.lang.String) throws android.car.CarNotConnectedException;
+    method public Object getCarManager(String) throws android.car.CarNotConnectedException;
     method public boolean isConnected();
     method public boolean isConnecting();
-    field public static final java.lang.String APP_FOCUS_SERVICE = "app_focus";
-    field public static final java.lang.String AUDIO_SERVICE = "audio";
-    field public static final java.lang.String CAR_CONFIGURATION_SERVICE = "configuration";
-    field public static final java.lang.String CAR_EXTRA_MEDIA_PACKAGE = "android.car.intent.extra.MEDIA_PACKAGE";
-    field public static final java.lang.String CAR_INTENT_ACTION_MEDIA_TEMPLATE = "android.car.intent.action.MEDIA_TEMPLATE";
-    field public static final java.lang.String CAR_NAVIGATION_SERVICE = "car_navigation_service";
-    field public static final java.lang.String CAR_UX_RESTRICTION_SERVICE = "uxrestriction";
+    field public static final String APP_FOCUS_SERVICE = "app_focus";
+    field public static final String AUDIO_SERVICE = "audio";
+    field public static final String CAR_CONFIGURATION_SERVICE = "configuration";
+    field public static final String CAR_EXTRA_MEDIA_PACKAGE = "android.car.intent.extra.MEDIA_PACKAGE";
+    field public static final String CAR_INTENT_ACTION_MEDIA_TEMPLATE = "android.car.intent.action.MEDIA_TEMPLATE";
+    field public static final String CAR_NAVIGATION_SERVICE = "car_navigation_service";
+    field public static final String CAR_UX_RESTRICTION_SERVICE = "uxrestriction";
     field public static final int CONNECTION_TYPE_EMBEDDED = 5; // 0x5
-    field public static final java.lang.String INFO_SERVICE = "info";
-    field public static final java.lang.String PACKAGE_SERVICE = "package";
-    field public static final java.lang.String PERMISSION_CAR_CONTROL_AUDIO_VOLUME = "android.car.permission.CAR_CONTROL_AUDIO_VOLUME";
-    field public static final java.lang.String PERMISSION_CAR_INFO = "android.car.permission.CAR_INFO";
-    field public static final java.lang.String PERMISSION_CAR_NAVIGATION_MANAGER = "android.car.permission.CAR_NAVIGATION_MANAGER";
-    field public static final java.lang.String PERMISSION_ENERGY = "android.car.permission.CAR_ENERGY";
-    field public static final java.lang.String PERMISSION_ENERGY_PORTS = "android.car.permission.CAR_ENERGY_PORTS";
-    field public static final java.lang.String PERMISSION_EXTERIOR_ENVIRONMENT = "android.car.permission.CAR_EXTERIOR_ENVIRONMENT";
-    field public static final java.lang.String PERMISSION_IDENTIFICATION = "android.car.permission.CAR_IDENTIFICATION";
-    field public static final java.lang.String PERMISSION_POWERTRAIN = "android.car.permission.CAR_POWERTRAIN";
-    field public static final java.lang.String PERMISSION_SPEED = "android.car.permission.CAR_SPEED";
-    field public static final java.lang.String SENSOR_SERVICE = "sensor";
+    field public static final String INFO_SERVICE = "info";
+    field public static final String PACKAGE_SERVICE = "package";
+    field public static final String PERMISSION_CAR_CONTROL_AUDIO_VOLUME = "android.car.permission.CAR_CONTROL_AUDIO_VOLUME";
+    field public static final String PERMISSION_CAR_INFO = "android.car.permission.CAR_INFO";
+    field public static final String PERMISSION_CAR_NAVIGATION_MANAGER = "android.car.permission.CAR_NAVIGATION_MANAGER";
+    field public static final String PERMISSION_ENERGY = "android.car.permission.CAR_ENERGY";
+    field public static final String PERMISSION_ENERGY_PORTS = "android.car.permission.CAR_ENERGY_PORTS";
+    field public static final String PERMISSION_EXTERIOR_ENVIRONMENT = "android.car.permission.CAR_EXTERIOR_ENVIRONMENT";
+    field public static final String PERMISSION_IDENTIFICATION = "android.car.permission.CAR_IDENTIFICATION";
+    field public static final String PERMISSION_POWERTRAIN = "android.car.permission.CAR_POWERTRAIN";
+    field public static final String PERMISSION_SPEED = "android.car.permission.CAR_SPEED";
+    field public static final String SENSOR_SERVICE = "sensor";
     field public static final int VERSION = 3; // 0x3
   }
 
@@ -46,13 +47,13 @@
     field public static final int APP_FOCUS_TYPE_VOICE_COMMAND = 2; // 0x2
   }
 
-  public static abstract interface CarAppFocusManager.OnAppFocusChangedListener {
-    method public abstract void onAppFocusChanged(int, boolean);
+  public static interface CarAppFocusManager.OnAppFocusChangedListener {
+    method public void onAppFocusChanged(int, boolean);
   }
 
-  public static abstract interface CarAppFocusManager.OnAppFocusOwnershipCallback {
-    method public abstract void onAppFocusOwnershipGranted(int);
-    method public abstract void onAppFocusOwnershipLost(int);
+  public static interface CarAppFocusManager.OnAppFocusOwnershipCallback {
+    method public void onAppFocusOwnershipGranted(int);
+    method public void onAppFocusOwnershipLost(int);
   }
 
   public final class CarInfoManager {
@@ -60,22 +61,22 @@
     method public int[] getEvConnectorTypes() throws android.car.CarNotConnectedException;
     method public float getFuelCapacity() throws android.car.CarNotConnectedException;
     method public int[] getFuelTypes() throws android.car.CarNotConnectedException;
-    method public java.lang.String getManufacturer() throws android.car.CarNotConnectedException;
-    method public java.lang.String getModel() throws android.car.CarNotConnectedException;
-    method public java.lang.String getModelYear() throws android.car.CarNotConnectedException;
-    method public java.lang.String getVehicleId() throws android.car.CarNotConnectedException;
+    method @Nullable public String getManufacturer() throws android.car.CarNotConnectedException;
+    method @Nullable public String getModel() throws android.car.CarNotConnectedException;
+    method @Nullable public String getModelYear() throws android.car.CarNotConnectedException;
+    method public String getVehicleId() throws android.car.CarNotConnectedException;
   }
 
   public class CarNotConnectedException extends java.lang.Exception {
     ctor public CarNotConnectedException();
-    ctor public CarNotConnectedException(java.lang.String);
-    ctor public CarNotConnectedException(java.lang.String, java.lang.Throwable);
-    ctor public CarNotConnectedException(java.lang.Exception);
+    ctor public CarNotConnectedException(String);
+    ctor public CarNotConnectedException(String, Throwable);
+    ctor public CarNotConnectedException(Exception);
   }
 
   public final class VehiclePropertyIds {
     ctor public VehiclePropertyIds();
-    method public static java.lang.String toString(int);
+    method public static 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
@@ -204,11 +205,11 @@
     method public abstract void onCarMenuClosing();
     method public abstract void onCarMenuOpened();
     method public abstract void onCarMenuOpening();
-    method public abstract void onItemClicked(java.lang.String);
-    method public abstract boolean onItemLongClicked(java.lang.String);
+    method public abstract void onItemClicked(String);
+    method public abstract boolean onItemLongClicked(String);
     method public abstract boolean onMenuClicked();
-    method public abstract void subscribe(java.lang.String, android.car.app.menu.SubscriptionCallbacks);
-    method public abstract void unsubscribe(java.lang.String, android.car.app.menu.SubscriptionCallbacks);
+    method public abstract void subscribe(String, android.car.app.menu.SubscriptionCallbacks);
+    method public abstract void unsubscribe(String, android.car.app.menu.SubscriptionCallbacks);
   }
 
   public class CarMenuConstants {
@@ -219,25 +220,25 @@
     ctor public CarMenuConstants.MenuItemConstants();
     field public static final int FLAG_BROWSABLE = 1; // 0x1
     field public static final int FLAG_FIRSTITEM = 2; // 0x2
-    field public static final java.lang.String KEY_EMPTY_PLACEHOLDER = "android.car.app.menu.empty_placeholder";
-    field public static final java.lang.String KEY_FLAGS = "android.car.app.menu.flags";
-    field public static final java.lang.String KEY_ID = "android.car.app.menu.id";
-    field public static final java.lang.String KEY_LEFTICON = "android.car.app.menu.leftIcon";
-    field public static final java.lang.String KEY_REMOTEVIEWS = "android.car.app.menu.remoteViews";
-    field public static final java.lang.String KEY_RIGHTICON = "android.car.app.menu.rightIcon";
-    field public static final java.lang.String KEY_RIGHTTEXT = "android.car.app.menu.rightText";
-    field public static final java.lang.String KEY_TEXT = "android.car.app.menu.text";
-    field public static final java.lang.String KEY_TITLE = "android.car.app.menu.title";
-    field public static final java.lang.String KEY_WIDGET = "android.car.app.menu.widget";
-    field public static final java.lang.String KEY_WIDGET_STATE = "android.car.app.menu.widget_state";
+    field public static final String KEY_EMPTY_PLACEHOLDER = "android.car.app.menu.empty_placeholder";
+    field public static final String KEY_FLAGS = "android.car.app.menu.flags";
+    field public static final String KEY_ID = "android.car.app.menu.id";
+    field public static final String KEY_LEFTICON = "android.car.app.menu.leftIcon";
+    field public static final String KEY_REMOTEVIEWS = "android.car.app.menu.remoteViews";
+    field public static final String KEY_RIGHTICON = "android.car.app.menu.rightIcon";
+    field public static final String KEY_RIGHTTEXT = "android.car.app.menu.rightText";
+    field public static final String KEY_TEXT = "android.car.app.menu.text";
+    field public static final String KEY_TITLE = "android.car.app.menu.title";
+    field public static final String KEY_WIDGET = "android.car.app.menu.widget";
+    field public static final String KEY_WIDGET_STATE = "android.car.app.menu.widget_state";
     field public static final int WIDGET_CHECKBOX = 1; // 0x1
     field public static final int WIDGET_TEXT_VIEW = 2; // 0x2
   }
 
-  public static abstract class CarMenuConstants.MenuItemConstants.MenuItemFlags implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef(flag=true, value={android.car.app.menu.CarMenuConstants.MenuItemConstants.FLAG_BROWSABLE, android.car.app.menu.CarMenuConstants.MenuItemConstants.FLAG_FIRSTITEM}) public static @interface CarMenuConstants.MenuItemConstants.MenuItemFlags {
   }
 
-  public static abstract class CarMenuConstants.MenuItemConstants.WidgetTypes implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.app.menu.CarMenuConstants.MenuItemConstants.WIDGET_CHECKBOX, android.car.app.menu.CarMenuConstants.MenuItemConstants.WIDGET_TEXT_VIEW}) public static @interface CarMenuConstants.MenuItemConstants.WidgetTypes {
   }
 
   public abstract class CarUiEntry {
@@ -245,7 +246,7 @@
     method public abstract void closeDrawer();
     method public abstract android.view.View getContentView();
     method public abstract int getFragmentContainerId();
-    method public abstract java.lang.CharSequence getSearchBoxText();
+    method public abstract CharSequence getSearchBoxText();
     method public abstract void hideMenuButton();
     method public abstract void hideTitle();
     method public abstract void onPause();
@@ -267,35 +268,35 @@
     method public abstract void setSearchBoxColors(int, int, int, int);
     method public abstract void setSearchBoxEditListener(android.car.app.menu.SearchBoxEditListener);
     method public abstract void setSearchBoxEndView(android.view.View);
-    method public abstract void setTitle(java.lang.CharSequence);
-    method public abstract void showMenu(java.lang.String, java.lang.String);
+    method public abstract void setTitle(CharSequence);
+    method public abstract void showMenu(String, String);
     method public abstract void showSearchBox(android.view.View.OnClickListener);
     method public abstract void showTitle();
-    method public abstract void showToast(java.lang.String, long);
-    method public abstract android.widget.EditText startInput(java.lang.String, android.view.View.OnClickListener);
+    method public abstract void showToast(String, long);
+    method public abstract android.widget.EditText startInput(String, android.view.View.OnClickListener);
     method public abstract void stopInput();
     field protected final android.content.Context mAppContext;
     field protected final android.content.Context mUiLibContext;
   }
 
   public class RootMenu {
-    ctor public RootMenu(java.lang.String);
-    ctor public RootMenu(java.lang.String, android.os.Bundle);
+    ctor public RootMenu(String);
+    ctor public RootMenu(String, android.os.Bundle);
     method public android.os.Bundle getBundle();
-    method public java.lang.String getId();
+    method public String getId();
   }
 
   public abstract class SearchBoxEditListener {
     ctor public SearchBoxEditListener();
-    method public abstract void onEdit(java.lang.String);
-    method public abstract void onSearch(java.lang.String);
+    method public abstract void onEdit(String);
+    method public abstract void onSearch(String);
   }
 
   public abstract class SubscriptionCallbacks {
     ctor public SubscriptionCallbacks();
-    method public abstract void onChildChanged(java.lang.String, android.os.Bundle);
-    method public abstract void onChildrenLoaded(java.lang.String, java.util.List<android.os.Bundle>);
-    method public abstract void onError(java.lang.String);
+    method public abstract void onChildChanged(String, android.os.Bundle);
+    method public abstract void onChildrenLoaded(String, java.util.List<android.os.Bundle>);
+    method public abstract void onError(String);
   }
 
 }
@@ -303,8 +304,8 @@
 package android.car.content.pm {
 
   public final class CarPackageManager {
-    method public boolean isActivityDistractionOptimized(java.lang.String, java.lang.String) throws android.car.CarNotConnectedException;
-    method public boolean isServiceDistractionOptimized(java.lang.String, java.lang.String) throws android.car.CarNotConnectedException;
+    method public boolean isActivityDistractionOptimized(String, String) throws android.car.CarNotConnectedException;
+    method public boolean isServiceDistractionOptimized(String, String) throws android.car.CarNotConnectedException;
   }
 
 }
@@ -314,7 +315,7 @@
   public class CarUxRestrictions implements android.os.Parcelable {
     ctor public CarUxRestrictions(android.car.drivingstate.CarUxRestrictions);
     method public int describeContents();
-    method public int getActiveRestrictions();
+    method @android.car.drivingstate.CarUxRestrictions.CarUxRestrictionsInfo public int getActiveRestrictions();
     method public int getMaxContentDepth();
     method public int getMaxCumulativeContentItems();
     method public int getMaxRestrictedStringLength();
@@ -337,24 +338,24 @@
   }
 
   public static class CarUxRestrictions.Builder {
-    ctor public CarUxRestrictions.Builder(boolean, int, long);
+    ctor public CarUxRestrictions.Builder(boolean, @android.car.drivingstate.CarUxRestrictions.CarUxRestrictionsInfo int, long);
     method public android.car.drivingstate.CarUxRestrictions build();
     method public android.car.drivingstate.CarUxRestrictions.Builder setMaxContentDepth(int);
     method public android.car.drivingstate.CarUxRestrictions.Builder setMaxCumulativeContentItems(int);
     method public android.car.drivingstate.CarUxRestrictions.Builder setMaxStringLength(int);
   }
 
-  public static abstract class CarUxRestrictions.CarUxRestrictionsInfo implements java.lang.annotation.Annotation {
+  @IntDef(flag=true, prefix={"UX_RESTRICTIONS_"}, value={android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_BASELINE, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_FILTERING, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_LIMIT_STRING_LENGTH, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_KEYBOARD, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_LIMIT_CONTENT, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_TEXT_MESSAGE, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_VOICE_TRANSCRIPTION}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CarUxRestrictions.CarUxRestrictionsInfo {
   }
 
   public final class CarUxRestrictionsManager {
-    method public android.car.drivingstate.CarUxRestrictions getCurrentCarUxRestrictions() throws android.car.CarNotConnectedException;
-    method public synchronized void registerListener(android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
-    method public synchronized void unregisterListener() throws android.car.CarNotConnectedException;
+    method @Nullable public android.car.drivingstate.CarUxRestrictions getCurrentCarUxRestrictions() throws android.car.CarNotConnectedException;
+    method public void registerListener(@NonNull android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method public void unregisterListener() throws android.car.CarNotConnectedException;
   }
 
-  public static abstract interface CarUxRestrictionsManager.OnUxRestrictionsChangedListener {
-    method public abstract void onUxRestrictionsChanged(android.car.drivingstate.CarUxRestrictions);
+  public static interface CarUxRestrictionsManager.OnUxRestrictionsChangedListener {
+    method public void onUxRestrictionsChanged(android.car.drivingstate.CarUxRestrictions);
   }
 
 }
@@ -409,7 +410,7 @@
     method public int[] getSupportedSensors() throws android.car.CarNotConnectedException;
     method public boolean isSensorSupported(int) throws android.car.CarNotConnectedException;
     method public static boolean isSensorSupported(int[], int);
-    method public boolean registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.car.Car.PERMISSION_SPEED, "android.car.permission.CAR_MILEAGE", android.car.Car.PERMISSION_ENERGY, "android.car.permission.CAR_DYNAMICS_STATE"}, conditional=true) public boolean registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
     method public void unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener);
     method public void unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int);
     field public static final int SENSOR_RATE_FAST = 10; // 0xa
@@ -435,8 +436,8 @@
     field public static final int SENSOR_TYPE_WHEEL_TICK_DISTANCE = 290521862; // 0x11510306
   }
 
-  public static abstract interface CarSensorManager.OnSensorChangedListener {
-    method public abstract void onSensorChanged(android.car.hardware.CarSensorEvent);
+  public static interface CarSensorManager.OnSensorChangedListener {
+    method public void onSensorChanged(android.car.hardware.CarSensorEvent);
   }
 
 }
@@ -444,23 +445,23 @@
 package android.car.media {
 
   public final class CarAudioManager {
-    method public android.car.media.CarAudioPatchHandle createAudioPatch(java.lang.String, int, int) throws android.car.CarNotConnectedException;
-    method public java.lang.String[] getExternalSources() throws android.car.CarNotConnectedException;
+    method public android.car.media.CarAudioPatchHandle createAudioPatch(String, int, int) throws android.car.CarNotConnectedException;
+    method @NonNull public String[] getExternalSources() throws android.car.CarNotConnectedException;
     method public int getGroupMaxVolume(int) throws android.car.CarNotConnectedException;
     method public int getGroupMinVolume(int) throws android.car.CarNotConnectedException;
     method public int getGroupVolume(int) throws android.car.CarNotConnectedException;
-    method public int[] getUsagesForVolumeGroupId(int) throws android.car.CarNotConnectedException;
+    method @NonNull public int[] getUsagesForVolumeGroupId(int) throws android.car.CarNotConnectedException;
     method public int getVolumeGroupCount() throws android.car.CarNotConnectedException;
     method public int getVolumeGroupIdForUsage(int) throws android.car.CarNotConnectedException;
-    method public static java.lang.String getVolumeSettingsKeyForGroup(int);
-    method public void registerVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void registerVolumeChangeObserver(android.database.ContentObserver);
+    method public static String getVolumeSettingsKeyForGroup(int);
+    method public void registerVolumeCallback(@NonNull android.os.IBinder) throws android.car.CarNotConnectedException;
+    method public void registerVolumeChangeObserver(@NonNull android.database.ContentObserver);
     method public void releaseAudioPatch(android.car.media.CarAudioPatchHandle) throws android.car.CarNotConnectedException;
     method public void setBalanceTowardRight(float) throws android.car.CarNotConnectedException;
     method public void setFadeTowardFront(float) throws android.car.CarNotConnectedException;
     method public void setGroupVolume(int, int, int) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeChangeObserver(android.database.ContentObserver);
+    method public void unregisterVolumeCallback(@NonNull android.os.IBinder) throws android.car.CarNotConnectedException;
+    method public void unregisterVolumeChangeObserver(@NonNull android.database.ContentObserver);
   }
 
   public final class CarAudioPatchHandle implements android.os.Parcelable {
@@ -493,9 +494,9 @@
 
   public static final class CarSettings.Global {
     ctor public CarSettings.Global();
-    field public static final java.lang.String KEY_GARAGE_MODE_ENABLED = "android.car.GARAGE_MODE_ENABLED";
-    field public static final java.lang.String KEY_GARAGE_MODE_MAINTENANCE_WINDOW = "android.car.GARAGE_MODE_MAINTENANCE_WINDOW";
-    field public static final java.lang.String KEY_GARAGE_MODE_WAKE_UP_TIME = "android.car.GARAGE_MODE_WAKE_UP_TIME";
+    field public static final String KEY_GARAGE_MODE_ENABLED = "android.car.GARAGE_MODE_ENABLED";
+    field public static final String KEY_GARAGE_MODE_MAINTENANCE_WINDOW = "android.car.GARAGE_MODE_MAINTENANCE_WINDOW";
+    field public static final String KEY_GARAGE_MODE_WAKE_UP_TIME = "android.car.GARAGE_MODE_WAKE_UP_TIME";
   }
 
   public final class SpeedBumpConfiguration implements android.os.Parcelable {
diff --git a/car-lib/api/released/3.txt b/car-lib/api/released/3.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car-lib/api/released/3.txt
diff --git a/car-lib/api/removed.txt b/car-lib/api/removed.txt
index e69de29..d802177 100644
--- a/car-lib/api/removed.txt
+++ b/car-lib/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index df6b85e..1f80136 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -1,41 +1,42 @@
+// Signature format: 2.0
 package android.car {
 
   public final class Car {
-    field public static final java.lang.String CABIN_SERVICE = "cabin";
-    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_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";
-    field public static final java.lang.String PERMISSION_CAR_DYNAMICS_STATE = "android.car.permission.CAR_DYNAMICS_STATE";
-    field public static final java.lang.String PERMISSION_CAR_ENGINE_DETAILED = "android.car.permission.CAR_ENGINE_DETAILED";
-    field public static final java.lang.String PERMISSION_CAR_INSTRUMENT_CLUSTER_CONTROL = "android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL";
-    field public static final java.lang.String PERMISSION_CAR_POWER = "android.car.permission.CAR_POWER";
-    field public static final java.lang.String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
-    field public static final java.lang.String PERMISSION_CAR_TEST_SERVICE = "android.car.permission.CAR_TEST_SERVICE";
-    field public static final java.lang.String PERMISSION_CONTROL_APP_BLOCKING = "android.car.permission.CONTROL_APP_BLOCKING";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_CLIMATE = "android.car.permission.CONTROL_CAR_CLIMATE";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_DOORS = "android.car.permission.CONTROL_CAR_DOORS";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_MIRRORS = "android.car.permission.CONTROL_CAR_MIRRORS";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_SEATS = "android.car.permission.CONTROL_CAR_SEATS";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_WINDOWS = "android.car.permission.CONTROL_CAR_WINDOWS";
-    field public static final java.lang.String PERMISSION_CONTROL_EXTERIOR_LIGHTS = "android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS";
-    field public static final java.lang.String PERMISSION_EXTERIOR_LIGHTS = "android.car.permission.CAR_EXTERIOR_LIGHTS";
-    field public static final java.lang.String PERMISSION_MILEAGE = "android.car.permission.CAR_MILEAGE";
-    field public static final deprecated java.lang.String PERMISSION_MOCK_VEHICLE_HAL = "android.car.permission.CAR_MOCK_VEHICLE_HAL";
-    field public static final java.lang.String PERMISSION_STORAGE_MONITORING = "android.car.permission.STORAGE_MONITORING";
-    field public static final java.lang.String PERMISSION_TIRES = "android.car.permission.CAR_TIRES";
-    field public static final java.lang.String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
-    field public static final java.lang.String PERMISSION_VMS_PUBLISHER = "android.car.permission.VMS_PUBLISHER";
-    field public static final java.lang.String PERMISSION_VMS_SUBSCRIBER = "android.car.permission.VMS_SUBSCRIBER";
-    field public static final java.lang.String POWER_SERVICE = "power";
-    field public static final java.lang.String PROJECTION_SERVICE = "projection";
-    field public static final java.lang.String PROPERTY_SERVICE = "property";
-    field public static final java.lang.String STORAGE_MONITORING_SERVICE = "storage_monitoring";
-    field public static final java.lang.String TEST_SERVICE = "car-service-test";
-    field public static final java.lang.String VENDOR_EXTENSION_SERVICE = "vendor_extension";
-    field public static final java.lang.String VMS_SUBSCRIBER_SERVICE = "vehicle_map_subscriber_service";
+    field public static final String CABIN_SERVICE = "cabin";
+    field public static final String CAR_DRIVING_STATE_SERVICE = "drivingstate";
+    field public static final String DIAGNOSTIC_SERVICE = "diagnostic";
+    field public static final String HVAC_SERVICE = "hvac";
+    field public static final String PERMISSION_CAR_DIAGNOSTIC_CLEAR = "android.car.permission.CLEAR_CAR_DIAGNOSTICS";
+    field public static final String PERMISSION_CAR_DIAGNOSTIC_READ_ALL = "android.car.permission.CAR_DIAGNOSTICS";
+    field public static final String PERMISSION_CAR_DRIVING_STATE = "android.car.permission.CAR_DRIVING_STATE";
+    field public static final String PERMISSION_CAR_DYNAMICS_STATE = "android.car.permission.CAR_DYNAMICS_STATE";
+    field public static final String PERMISSION_CAR_ENGINE_DETAILED = "android.car.permission.CAR_ENGINE_DETAILED";
+    field public static final String PERMISSION_CAR_INSTRUMENT_CLUSTER_CONTROL = "android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL";
+    field public static final String PERMISSION_CAR_POWER = "android.car.permission.CAR_POWER";
+    field public static final String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
+    field public static final String PERMISSION_CAR_TEST_SERVICE = "android.car.permission.CAR_TEST_SERVICE";
+    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";
+    field public static final String PERMISSION_CONTROL_CAR_DOORS = "android.car.permission.CONTROL_CAR_DOORS";
+    field public static final String PERMISSION_CONTROL_CAR_MIRRORS = "android.car.permission.CONTROL_CAR_MIRRORS";
+    field public static final String PERMISSION_CONTROL_CAR_SEATS = "android.car.permission.CONTROL_CAR_SEATS";
+    field public static final String PERMISSION_CONTROL_CAR_WINDOWS = "android.car.permission.CONTROL_CAR_WINDOWS";
+    field public static final String PERMISSION_CONTROL_EXTERIOR_LIGHTS = "android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS";
+    field public static final String PERMISSION_EXTERIOR_LIGHTS = "android.car.permission.CAR_EXTERIOR_LIGHTS";
+    field public static final String PERMISSION_MILEAGE = "android.car.permission.CAR_MILEAGE";
+    field @Deprecated public static final String PERMISSION_MOCK_VEHICLE_HAL = "android.car.permission.CAR_MOCK_VEHICLE_HAL";
+    field public static final String PERMISSION_STORAGE_MONITORING = "android.car.permission.STORAGE_MONITORING";
+    field public static final String PERMISSION_TIRES = "android.car.permission.CAR_TIRES";
+    field public static final String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
+    field public static final String PERMISSION_VMS_PUBLISHER = "android.car.permission.VMS_PUBLISHER";
+    field public static final String PERMISSION_VMS_SUBSCRIBER = "android.car.permission.VMS_SUBSCRIBER";
+    field public static final String POWER_SERVICE = "power";
+    field public static final String PROJECTION_SERVICE = "projection";
+    field public static final String PROPERTY_SERVICE = "property";
+    field public static final String STORAGE_MONITORING_SERVICE = "storage_monitoring";
+    field public static final String TEST_SERVICE = "car-service-test";
+    field public static final String VENDOR_EXTENSION_SERVICE = "vendor_extension";
+    field public static final String VMS_SUBSCRIBER_SERVICE = "vehicle_map_subscriber_service";
   }
 
   public final class CarProjectionManager {
@@ -48,8 +49,8 @@
     field public static final int PROJECTION_VOICE_SEARCH = 1; // 0x1
   }
 
-  public static abstract interface CarProjectionManager.CarProjectionListener {
-    method public abstract void onVoiceAssistantRequest(boolean);
+  public static interface CarProjectionManager.CarProjectionListener {
+    method public void onVoiceAssistantRequest(boolean);
   }
 
   public final class VehicleAreaDoor {
@@ -123,15 +124,15 @@
 package android.car.cluster {
 
   public class CarInstrumentClusterManager {
-    method public void registerCallback(java.lang.String, android.car.cluster.CarInstrumentClusterManager.Callback) throws android.car.CarNotConnectedException;
+    method public void registerCallback(String, android.car.cluster.CarInstrumentClusterManager.Callback) throws android.car.CarNotConnectedException;
     method public void startActivity(android.content.Intent) throws android.car.CarNotConnectedException;
     method public void unregisterCallback(android.car.cluster.CarInstrumentClusterManager.Callback) throws android.car.CarNotConnectedException;
-    field public static final java.lang.String CATEGORY_NAVIGATION = "android.car.cluster.NAVIGATION";
-    field public static final java.lang.String KEY_EXTRA_ACTIVITY_STATE = "android.car.cluster.ClusterActivityState";
+    field public static final String CATEGORY_NAVIGATION = "android.car.cluster.NAVIGATION";
+    field public static final String KEY_EXTRA_ACTIVITY_STATE = "android.car.cluster.ClusterActivityState";
   }
 
-  public static abstract interface CarInstrumentClusterManager.Callback {
-    method public abstract void onClusterActivityStateChanged(java.lang.String, android.os.Bundle);
+  public static interface CarInstrumentClusterManager.Callback {
+    method public void onClusterActivityStateChanged(String, android.os.Bundle);
   }
 
 }
@@ -141,8 +142,8 @@
   public abstract class InstrumentClusterRenderer {
     ctor public InstrumentClusterRenderer();
     method protected abstract android.car.cluster.renderer.NavigationRenderer createNavigationRenderer();
-    method public synchronized android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
-    method public final synchronized void initialize();
+    method @Nullable public android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
+    method @UiThread public final void initialize();
     method public abstract void onCreate(android.content.Context);
     method public abstract void onStart();
     method public abstract void onStop();
@@ -150,12 +151,12 @@
 
   public abstract class InstrumentClusterRenderingService extends android.app.Service {
     ctor public InstrumentClusterRenderingService();
-    method protected abstract android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
-    method public android.os.IBinder onBind(android.content.Intent);
-    method protected void onKeyEvent(android.view.KeyEvent);
+    method @MainThread protected abstract android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method @MainThread protected void onKeyEvent(android.view.KeyEvent);
   }
 
-  public abstract class NavigationRenderer {
+  @UiThread public abstract class NavigationRenderer {
     ctor public NavigationRenderer();
     method public abstract android.car.navigation.CarNavigationInstrumentCluster getNavigationProperties();
     method public abstract void onEvent(int, android.os.Bundle);
@@ -166,18 +167,18 @@
 package android.car.content.pm {
 
   public class AppBlockingPackageInfo implements android.os.Parcelable {
-    ctor public AppBlockingPackageInfo(java.lang.String, int, int, int, android.content.pm.Signature[], java.lang.String[]);
+    ctor public AppBlockingPackageInfo(String, int, int, int, @Nullable android.content.pm.Signature[], @Nullable String[]);
     ctor public AppBlockingPackageInfo(android.os.Parcel);
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.content.pm.AppBlockingPackageInfo> CREATOR;
     field public static final int FLAG_SYSTEM_APP = 1; // 0x1
     field public static final int FLAG_WHOLE_ACTIVITY = 2; // 0x2
-    field public final java.lang.String[] activities;
+    field public final String[] activities;
     field public final int flags;
     field public final int maxRevisionCode;
     field public final int minRevisionCode;
-    field public final java.lang.String packageName;
+    field public final String packageName;
     field public final android.content.pm.Signature[] signatures;
   }
 
@@ -195,12 +196,12 @@
     ctor public CarAppBlockingPolicyService();
     method protected abstract android.car.content.pm.CarAppBlockingPolicy getAppBlockingPolicy();
     method public android.os.IBinder onBind(android.content.Intent);
-    field public static final java.lang.String SERVICE_INTERFACE = "android.car.content.pm.CarAppBlockingPolicyService";
+    field public static final String SERVICE_INTERFACE = "android.car.content.pm.CarAppBlockingPolicyService";
   }
 
   public final class CarPackageManager {
     method public boolean isActivityBackedBySafeActivity(android.content.ComponentName) throws android.car.CarNotConnectedException;
-    method public void setAppBlockingPolicy(java.lang.String, android.car.content.pm.CarAppBlockingPolicy, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method public void setAppBlockingPolicy(String, android.car.content.pm.CarAppBlockingPolicy, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException, java.lang.SecurityException;
     field public static final int FLAG_SET_POLICY_ADD = 2; // 0x2
     field public static final int FLAG_SET_POLICY_REMOVE = 4; // 0x4
     field public static final int FLAG_SET_POLICY_WAIT_FOR_CHANGE = 1; // 0x1
@@ -213,24 +214,24 @@
   public class CarDiagnosticEvent implements android.os.Parcelable {
     ctor public CarDiagnosticEvent(android.os.Parcel);
     method public int describeContents();
-    method public java.lang.Integer getFuelSystemStatus();
-    method public java.lang.Integer getFuelType();
-    method public android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors getIgnitionMonitors();
-    method public java.lang.Integer getSecondaryAirStatus();
+    method @Nullable @android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.Status public Integer getFuelSystemStatus();
+    method @Nullable @android.car.diagnostic.CarDiagnosticEvent.FuelType.Type public Integer getFuelType();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors getIgnitionMonitors();
+    method @Nullable @android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.Status public Integer getSecondaryAirStatus();
     method public float getSystemFloatSensor(int, float);
-    method public java.lang.Float getSystemFloatSensor(int);
+    method @Nullable public Float getSystemFloatSensor(int);
     method public int getSystemIntegerSensor(int, int);
-    method public java.lang.Integer getSystemIntegerSensor(int);
+    method @Nullable public Integer getSystemIntegerSensor(int);
     method public float getVendorFloatSensor(int, float);
-    method public java.lang.Float getVendorFloatSensor(int);
+    method @Nullable public Float getVendorFloatSensor(int);
     method public int getVendorIntegerSensor(int, int);
-    method public java.lang.Integer getVendorIntegerSensor(int);
+    method @Nullable public Integer getVendorIntegerSensor(int);
     method public boolean isFreezeFrame();
     method public boolean isLiveFrame();
     method public void writeToJson(android.util.JsonWriter) throws java.io.IOException;
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.diagnostic.CarDiagnosticEvent> CREATOR;
-    field public final java.lang.String dtc;
+    field public final String dtc;
     field public final int frameType;
     field public final long timestamp;
   }
@@ -240,14 +241,14 @@
     method public android.car.diagnostic.CarDiagnosticEvent build();
     method public static android.car.diagnostic.CarDiagnosticEvent.Builder newFreezeFrameBuilder();
     method public static android.car.diagnostic.CarDiagnosticEvent.Builder newLiveFrameBuilder();
-    method public android.car.diagnostic.CarDiagnosticEvent.Builder withDtc(java.lang.String);
+    method public android.car.diagnostic.CarDiagnosticEvent.Builder withDtc(String);
     method public android.car.diagnostic.CarDiagnosticEvent.Builder withFloatValue(int, float);
     method public android.car.diagnostic.CarDiagnosticEvent.Builder withIntValue(int, int);
   }
 
   public static class CarDiagnosticEvent.CommonIgnitionMonitors {
-    method public android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors asCompressionIgnitionMonitors();
-    method public android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors asSparkIgnitionMonitors();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors asCompressionIgnitionMonitors();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors asSparkIgnitionMonitors();
     field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor components;
     field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor fuelSystem;
     field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor misfire;
@@ -270,7 +271,7 @@
     field public static final int OPEN_SYSTEM_FAILURE = 8; // 0x8
   }
 
-  public static abstract class CarDiagnosticEvent.FuelSystemStatus.Status implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.OPEN_INSUFFICIENT_ENGINE_TEMPERATURE, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.CLOSED_LOOP, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.OPEN_ENGINE_LOAD_OR_DECELERATION, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.OPEN_SYSTEM_FAILURE, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.CLOSED_LOOP_BUT_FEEDBACK_FAULT}) public static @interface CarDiagnosticEvent.FuelSystemStatus.Status {
   }
 
   public static final class CarDiagnosticEvent.FuelType {
@@ -300,7 +301,7 @@
     field public static final int PROPANE = 7; // 0x7
   }
 
-  public static abstract class CarDiagnosticEvent.FuelType.Type implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticEvent.FuelType.NOT_AVAILABLE, android.car.diagnostic.CarDiagnosticEvent.FuelType.GASOLINE, android.car.diagnostic.CarDiagnosticEvent.FuelType.METHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.ETHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.DIESEL, android.car.diagnostic.CarDiagnosticEvent.FuelType.LPG, android.car.diagnostic.CarDiagnosticEvent.FuelType.CNG, android.car.diagnostic.CarDiagnosticEvent.FuelType.PROPANE, android.car.diagnostic.CarDiagnosticEvent.FuelType.ELECTRIC, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_GASOLINE, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_METHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_ETHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_LPG, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_CNG, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_PROPANE, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_ELECTRIC, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_GASOLINE, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_ETHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_DIESEL, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_ELECTRIC, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_REGENERATIVE, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_DIESEL}) public static @interface CarDiagnosticEvent.FuelType.Type {
   }
 
   public static final class CarDiagnosticEvent.IgnitionMonitor {
@@ -315,7 +316,7 @@
     field public static final int UPSTREAM = 1; // 0x1
   }
 
-  public static abstract class CarDiagnosticEvent.SecondaryAirStatus.Status implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.UPSTREAM, android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.DOWNSTREAM_OF_CATALYCIC_CONVERTER, android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.FROM_OUTSIDE_OR_OFF, android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.PUMP_ON_FOR_DIAGNOSTICS}) public static @interface CarDiagnosticEvent.SecondaryAirStatus.Status {
   }
 
   public static final class CarDiagnosticEvent.SparkIgnitionMonitors extends android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors {
@@ -331,26 +332,26 @@
 
   public final class CarDiagnosticManager {
     method public boolean clearFreezeFrames(long...) throws android.car.CarNotConnectedException;
-    method public android.car.diagnostic.CarDiagnosticEvent getFreezeFrame(long) throws android.car.CarNotConnectedException;
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent getFreezeFrame(long) throws android.car.CarNotConnectedException;
     method public long[] getFreezeFrameTimestamps() throws android.car.CarNotConnectedException;
-    method public android.car.diagnostic.CarDiagnosticEvent getLatestLiveFrame() throws android.car.CarNotConnectedException;
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent getLatestLiveFrame() throws android.car.CarNotConnectedException;
     method public boolean isClearFreezeFramesSupported() throws android.car.CarNotConnectedException;
     method public boolean isFreezeFrameNotificationSupported() throws android.car.CarNotConnectedException;
     method public boolean isGetFreezeFrameSupported() throws android.car.CarNotConnectedException;
     method public boolean isLiveFrameSupported() throws android.car.CarNotConnectedException;
     method public boolean isSelectiveClearFreezeFramesSupported() throws android.car.CarNotConnectedException;
     method public void onCarDisconnected();
-    method public boolean registerListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method public boolean registerListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener, @android.car.diagnostic.CarDiagnosticManager.FrameType int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
     method public void unregisterListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener);
     field public static final int FRAME_TYPE_FREEZE = 1; // 0x1
     field public static final int FRAME_TYPE_LIVE = 0; // 0x0
   }
 
-  public static abstract class CarDiagnosticManager.FrameType implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticManager.FRAME_TYPE_LIVE, android.car.diagnostic.CarDiagnosticManager.FRAME_TYPE_FREEZE}) public static @interface CarDiagnosticManager.FrameType {
   }
 
-  public static abstract interface CarDiagnosticManager.OnDiagnosticEventListener {
-    method public abstract void onDiagnosticEvent(android.car.diagnostic.CarDiagnosticEvent);
+  public static interface CarDiagnosticManager.OnDiagnosticEventListener {
+    method public void onDiagnosticEvent(android.car.diagnostic.CarDiagnosticEvent);
   }
 
   public final class FloatSensorIndex {
@@ -484,13 +485,13 @@
   }
 
   public final class CarDrivingStateManager {
-    method public android.car.drivingstate.CarDrivingStateEvent getCurrentCarDrivingState() throws android.car.CarNotConnectedException;
-    method public synchronized void registerListener(android.car.drivingstate.CarDrivingStateManager.CarDrivingStateEventListener) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
-    method public synchronized void unregisterListener() throws android.car.CarNotConnectedException;
+    method @Nullable public android.car.drivingstate.CarDrivingStateEvent getCurrentCarDrivingState() throws android.car.CarNotConnectedException;
+    method public void registerListener(@NonNull android.car.drivingstate.CarDrivingStateManager.CarDrivingStateEventListener) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method public void unregisterListener() throws android.car.CarNotConnectedException;
   }
 
-  public static abstract interface CarDrivingStateManager.CarDrivingStateEventListener {
-    method public abstract void onDrivingStateChanged(android.car.drivingstate.CarDrivingStateEvent);
+  public static interface CarDrivingStateManager.CarDrivingStateEventListener {
+    method public void onDrivingStateChanged(android.car.drivingstate.CarDrivingStateEvent);
   }
 
 }
@@ -505,28 +506,28 @@
     method public int getAreaType();
     method public int getChangeMode();
     method public java.util.List<java.lang.Integer> getConfigArray();
-    method public java.lang.String getConfigString();
+    method public String getConfigString();
     method public int getFirstAndOnlyAreaId();
     method public float getMaxSampleRate();
-    method public T getMaxValue(int);
-    method public T getMaxValue();
+    method @Nullable public T getMaxValue(int);
+    method @Nullable public T getMaxValue();
     method public float getMinSampleRate();
-    method public T getMinValue(int);
-    method public T getMinValue();
+    method @Nullable public T getMinValue(int);
+    method @Nullable public T getMinValue();
     method public int getPropertyId();
-    method public java.lang.Class<T> getPropertyType();
+    method public Class<T> getPropertyType();
     method public boolean hasArea(int);
     method public boolean isGlobalProperty();
-    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(java.lang.Class<T>, int, int, int);
-    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(java.lang.Class<T>, int, int);
+    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(Class<T>, int, int, int);
+    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(Class<T>, int, int);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.hardware.CarPropertyConfig> CREATOR;
   }
 
   public static class CarPropertyConfig.AreaConfig<T> implements android.os.Parcelable {
     method public int describeContents();
-    method public T getMaxValue();
-    method public T getMinValue();
+    method @Nullable public T getMaxValue();
+    method @Nullable public T getMinValue();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.hardware.CarPropertyConfig.AreaConfig<java.lang.Object>> CREATOR;
   }
@@ -539,7 +540,7 @@
     method public android.car.hardware.CarPropertyConfig.Builder<T> setAccess(int);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setChangeMode(int);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setConfigArray(java.util.ArrayList<java.lang.Integer>);
-    method public android.car.hardware.CarPropertyConfig.Builder<T> setConfigString(java.lang.String);
+    method public android.car.hardware.CarPropertyConfig.Builder<T> setConfigString(String);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setMaxSampleRate(float);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setMinSampleRate(float);
   }
@@ -559,19 +560,19 @@
   }
 
   public final class CarVendorExtensionManager {
-    method public <E> E getGlobalProperty(java.lang.Class<E>, int) throws android.car.CarNotConnectedException;
+    method public <E> E getGlobalProperty(Class<E>, int) throws android.car.CarNotConnectedException;
     method public java.util.List<android.car.hardware.CarPropertyConfig> getProperties() throws android.car.CarNotConnectedException;
-    method public <E> E getProperty(java.lang.Class<E>, int, int) throws android.car.CarNotConnectedException;
+    method public <E> E getProperty(Class<E>, int, int) throws android.car.CarNotConnectedException;
     method public boolean isPropertyAvailable(int, int) throws android.car.CarNotConnectedException;
     method public void registerCallback(android.car.hardware.CarVendorExtensionManager.CarVendorExtensionCallback) throws android.car.CarNotConnectedException;
-    method public <E> void setGlobalProperty(java.lang.Class<E>, int, E) throws android.car.CarNotConnectedException;
-    method public <E> void setProperty(java.lang.Class<E>, int, int, E) throws android.car.CarNotConnectedException;
+    method public <E> void setGlobalProperty(Class<E>, int, E) throws android.car.CarNotConnectedException;
+    method public <E> void setProperty(Class<E>, int, int, E) throws android.car.CarNotConnectedException;
     method public void unregisterCallback(android.car.hardware.CarVendorExtensionManager.CarVendorExtensionCallback) throws android.car.CarNotConnectedException;
   }
 
-  public static abstract interface CarVendorExtensionManager.CarVendorExtensionCallback {
-    method public abstract void onChangeEvent(android.car.hardware.CarPropertyValue);
-    method public abstract void onErrorEvent(int, int);
+  public static interface CarVendorExtensionManager.CarVendorExtensionCallback {
+    method public void onChangeEvent(android.car.hardware.CarPropertyValue);
+    method public void onErrorEvent(int, int);
   }
 
 }
@@ -584,11 +585,11 @@
     method public int getIntProperty(int, int) throws android.car.CarNotConnectedException;
     method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList() throws android.car.CarNotConnectedException;
     method public static boolean isZonedProperty(int);
-    method public synchronized void registerCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback) throws android.car.CarNotConnectedException;
+    method public void registerCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback) throws android.car.CarNotConnectedException;
     method public void setBooleanProperty(int, int, boolean) throws android.car.CarNotConnectedException;
     method public void setFloatProperty(int, int, float) throws android.car.CarNotConnectedException;
     method public void setIntProperty(int, int, int) throws android.car.CarNotConnectedException;
-    method public synchronized void unregisterCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback) throws android.car.CarNotConnectedException;
+    method public void unregisterCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback) throws android.car.CarNotConnectedException;
     field public static final int ID_DOOR_LOCK = 371198722; // 0x16200b02
     field public static final int ID_DOOR_MOVE = 373295873; // 0x16400b01
     field public static final int ID_DOOR_POS = 373295872; // 0x16400b00
@@ -630,9 +631,9 @@
     field public static final int ID_WINDOW_POS = 322964416; // 0x13400bc0
   }
 
-  public static abstract interface CarCabinManager.CarCabinEventCallback {
-    method public abstract void onChangeEvent(android.car.hardware.CarPropertyValue);
-    method public abstract void onErrorEvent(int, int);
+  public static interface CarCabinManager.CarCabinEventCallback {
+    method public void onChangeEvent(android.car.hardware.CarPropertyValue);
+    method public void onErrorEvent(int, int);
   }
 
 }
@@ -645,11 +646,11 @@
     method public int getIntProperty(int, int) throws android.car.CarNotConnectedException;
     method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList() throws android.car.CarNotConnectedException;
     method public boolean isPropertyAvailable(int, int) throws android.car.CarNotConnectedException;
-    method public synchronized void registerCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback) throws android.car.CarNotConnectedException;
+    method public void registerCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback) throws android.car.CarNotConnectedException;
     method public void setBooleanProperty(int, int, boolean) throws android.car.CarNotConnectedException;
     method public void setFloatProperty(int, int, float) throws android.car.CarNotConnectedException;
     method public void setIntProperty(int, int, int) throws android.car.CarNotConnectedException;
-    method public synchronized void unregisterCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback);
+    method public void unregisterCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback);
     field public static final int FAN_DIRECTION_DEFROST = 4; // 0x4
     field public static final int FAN_DIRECTION_FACE = 1; // 0x1
     field public static final int FAN_DIRECTION_FLOOR = 2; // 0x2
@@ -675,9 +676,9 @@
     field public static final int ID_ZONED_TEMP_SETPOINT = 358614275; // 0x15600503
   }
 
-  public static abstract interface CarHvacManager.CarHvacEventCallback {
-    method public abstract void onChangeEvent(android.car.hardware.CarPropertyValue);
-    method public abstract void onErrorEvent(int, int);
+  public static interface CarHvacManager.CarHvacEventCallback {
+    method public void onChangeEvent(android.car.hardware.CarPropertyValue);
+    method public void onErrorEvent(int, int);
   }
 
 }
@@ -692,8 +693,8 @@
     field public static final int BOOT_REASON_USER_POWER_ON = 1; // 0x1
   }
 
-  public static abstract interface CarPowerManager.CarPowerStateListener {
-    method public abstract void onStateChanged(int);
+  public static interface CarPowerManager.CarPowerStateListener {
+    method public void onStateChanged(int);
     field public static final int SHUTDOWN_CANCELLED = 0; // 0x0
     field public static final int SHUTDOWN_ENTER = 1; // 0x1
     field public static final int SUSPEND_ENTER = 2; // 0x2
@@ -706,10 +707,10 @@
 
   public abstract class CarInputHandlingService extends android.app.Service {
     ctor protected CarInputHandlingService(android.car.input.CarInputHandlingService.InputFilter[]);
-    method public android.os.IBinder onBind(android.content.Intent);
-    method protected abstract void onKeyEvent(android.view.KeyEvent, int);
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method @MainThread protected abstract void onKeyEvent(android.view.KeyEvent, int);
     field public static final int INPUT_CALLBACK_BINDER_CODE = 1; // 0x1
-    field public static final java.lang.String INPUT_CALLBACK_BINDER_KEY = "callback_binder";
+    field public static final String INPUT_CALLBACK_BINDER_KEY = "callback_binder";
   }
 
   public static class CarInputHandlingService.InputFilter implements android.os.Parcelable {
@@ -726,22 +727,22 @@
 package android.car.media {
 
   public final class CarAudioManager {
-    method public android.car.media.CarAudioPatchHandle createAudioPatch(java.lang.String, int, int) throws android.car.CarNotConnectedException;
-    method public java.lang.String[] getExternalSources() throws android.car.CarNotConnectedException;
+    method public android.car.media.CarAudioPatchHandle createAudioPatch(String, int, int) throws android.car.CarNotConnectedException;
+    method @NonNull public String[] getExternalSources() throws android.car.CarNotConnectedException;
     method public int getGroupMaxVolume(int) throws android.car.CarNotConnectedException;
     method public int getGroupMinVolume(int) throws android.car.CarNotConnectedException;
     method public int getGroupVolume(int) throws android.car.CarNotConnectedException;
-    method public int[] getUsagesForVolumeGroupId(int) throws android.car.CarNotConnectedException;
+    method @NonNull public int[] getUsagesForVolumeGroupId(int) throws android.car.CarNotConnectedException;
     method public int getVolumeGroupCount() throws android.car.CarNotConnectedException;
     method public int getVolumeGroupIdForUsage(int) throws android.car.CarNotConnectedException;
-    method public void registerVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void registerVolumeChangeObserver(android.database.ContentObserver);
+    method public void registerVolumeCallback(@NonNull android.os.IBinder) throws android.car.CarNotConnectedException;
+    method public void registerVolumeChangeObserver(@NonNull android.database.ContentObserver);
     method public void releaseAudioPatch(android.car.media.CarAudioPatchHandle) throws android.car.CarNotConnectedException;
     method public void setBalanceTowardRight(float) throws android.car.CarNotConnectedException;
     method public void setFadeTowardFront(float) throws android.car.CarNotConnectedException;
     method public void setGroupVolume(int, int, int) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeChangeObserver(android.database.ContentObserver);
+    method public void unregisterVolumeCallback(@NonNull android.os.IBinder) throws android.car.CarNotConnectedException;
+    method public void unregisterVolumeChangeObserver(@NonNull android.database.ContentObserver);
   }
 
 }
@@ -770,16 +771,16 @@
 package android.car.storagemonitoring {
 
   public final class CarStorageMonitoringManager {
-    method public java.util.List<android.car.storagemonitoring.IoStatsEntry> getAggregateIoStats() throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.storagemonitoring.IoStatsEntry> getBootIoStats() throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.storagemonitoring.IoStats> getIoStatsDeltas() throws android.car.CarNotConnectedException;
-    method public int getPreEolIndicatorStatus() throws android.car.CarNotConnectedException;
-    method public long getShutdownDiskWriteAmount() throws android.car.CarNotConnectedException;
-    method public android.car.storagemonitoring.WearEstimate getWearEstimate() throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.storagemonitoring.WearEstimateChange> getWearEstimateHistory() throws android.car.CarNotConnectedException;
-    method public void registerListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener) throws android.car.CarNotConnectedException;
-    method public void unregisterListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener) throws android.car.CarNotConnectedException;
-    field public static final java.lang.String INTENT_EXCESSIVE_IO = "android.car.storagemonitoring.EXCESSIVE_IO";
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.IoStatsEntry> getAggregateIoStats() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.IoStatsEntry> getBootIoStats() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.IoStats> getIoStatsDeltas() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public int getPreEolIndicatorStatus() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public long getShutdownDiskWriteAmount() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public android.car.storagemonitoring.WearEstimate getWearEstimate() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.WearEstimateChange> getWearEstimateHistory() throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public void registerListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener) throws android.car.CarNotConnectedException;
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public void unregisterListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener) throws android.car.CarNotConnectedException;
+    field public static final String INTENT_EXCESSIVE_IO = "android.car.storagemonitoring.EXCESSIVE_IO";
     field public static final int PRE_EOL_INFO_NORMAL = 1; // 0x1
     field public static final int PRE_EOL_INFO_UNKNOWN = 0; // 0x0
     field public static final int PRE_EOL_INFO_URGENT = 3; // 0x3
@@ -787,8 +788,8 @@
     field public static final long SHUTDOWN_COST_INFO_MISSING = -1L; // 0xffffffffffffffffL
   }
 
-  public static abstract interface CarStorageMonitoringManager.IoStatsListener {
-    method public abstract void onSnapshot(android.car.storagemonitoring.IoStats);
+  public static interface CarStorageMonitoringManager.IoStatsListener {
+    method public void onSnapshot(android.car.storagemonitoring.IoStats);
   }
 
   public class IoStats implements android.os.Parcelable {
@@ -838,15 +839,15 @@
   }
 
   public class LifetimeWriteInfo implements android.os.Parcelable {
-    ctor public LifetimeWriteInfo(java.lang.String, java.lang.String, long);
+    ctor public LifetimeWriteInfo(String, String, long);
     ctor public LifetimeWriteInfo(android.os.Parcel);
     ctor public LifetimeWriteInfo(org.json.JSONObject) throws org.json.JSONException;
     method public int describeContents();
     method public void writeToJson(android.util.JsonWriter) throws java.io.IOException;
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.storagemonitoring.IoStats> CREATOR;
-    field public final java.lang.String fstype;
-    field public final java.lang.String partition;
+    field public final String fstype;
+    field public final String partition;
     field public final long writtenBytes;
   }
 
@@ -874,8 +875,8 @@
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.storagemonitoring.WearEstimate> CREATOR;
     field public static final int UNKNOWN = -1; // 0xffffffff
-    field public final int typeA;
-    field public final int typeB;
+    field @IntRange(from=0xffffffff, to=100) public final int typeA;
+    field @IntRange(from=0xffffffff, to=100) public final int typeB;
   }
 
   public class WearEstimateChange implements android.os.Parcelable {
@@ -884,10 +885,10 @@
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.storagemonitoring.WearEstimateChange> CREATOR;
-    field public final java.time.Instant dateAtChange;
+    field @NonNull public final java.time.Instant dateAtChange;
     field public final boolean isAcceptableDegradation;
-    field public final android.car.storagemonitoring.WearEstimate newEstimate;
-    field public final android.car.storagemonitoring.WearEstimate oldEstimate;
+    field @NonNull public final android.car.storagemonitoring.WearEstimate newEstimate;
+    field @NonNull public final android.car.storagemonitoring.WearEstimate oldEstimate;
     field public final long uptimeAtChange;
   }
 
@@ -967,7 +968,7 @@
   public abstract class VmsPublisherClientService extends android.app.Service {
     ctor public VmsPublisherClientService();
     method public final int getPublisherId(byte[]);
-    method public final android.car.vms.VmsSubscriptionState getSubscriptions();
+    method @Nullable public final android.car.vms.VmsSubscriptionState getSubscriptions();
     method public android.os.IBinder onBind(android.content.Intent);
     method protected abstract void onVmsPublisherServiceReady();
     method public abstract void onVmsSubscriptionChange(android.car.vms.VmsSubscriptionState);
@@ -979,7 +980,7 @@
     method public void clearVmsSubscriberClientCallback() throws android.car.CarNotConnectedException;
     method public android.car.vms.VmsAvailableLayers getAvailableLayers() throws android.car.CarNotConnectedException, java.lang.IllegalStateException;
     method public byte[] getPublisherInfo(int) throws android.car.CarNotConnectedException, java.lang.IllegalStateException;
-    method public void setVmsSubscriberClientCallback(java.util.concurrent.Executor, android.car.vms.VmsSubscriberManager.VmsSubscriberClientCallback) throws android.car.CarNotConnectedException;
+    method public void setVmsSubscriberClientCallback(@NonNull java.util.concurrent.Executor, @NonNull android.car.vms.VmsSubscriberManager.VmsSubscriberClientCallback) throws android.car.CarNotConnectedException;
     method public void startMonitoring() throws android.car.CarNotConnectedException;
     method public void stopMonitoring();
     method public void subscribe(android.car.vms.VmsLayer) throws android.car.CarNotConnectedException;
@@ -988,9 +989,9 @@
     method public void unsubscribe(android.car.vms.VmsLayer, int);
   }
 
-  public static abstract interface VmsSubscriberManager.VmsSubscriberClientCallback {
-    method public abstract void onLayersAvailabilityChanged(android.car.vms.VmsAvailableLayers);
-    method public abstract void onVmsMessageReceived(android.car.vms.VmsLayer, byte[]);
+  public static interface VmsSubscriberManager.VmsSubscriberClientCallback {
+    method public void onLayersAvailabilityChanged(android.car.vms.VmsAvailableLayers);
+    method public void onVmsMessageReceived(android.car.vms.VmsLayer, byte[]);
   }
 
 }
diff --git a/car-lib/api/system-removed.txt b/car-lib/api/system-removed.txt
index e69de29..d802177 100644
--- a/car-lib/api/system-removed.txt
+++ b/car-lib/api/system-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index c1bf502..8eef0a8 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -18,6 +18,8 @@
 
 import android.annotation.IntDef;
 import android.annotation.Nullable;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemApi;
 import android.car.cluster.CarInstrumentClusterManager;
 import android.car.content.pm.CarPackageManager;
@@ -439,6 +441,7 @@
      * package name of the media app which user wants to play media on.
      * <p>Output: nothing.
      */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String CAR_INTENT_ACTION_MEDIA_TEMPLATE =
             "android.car.intent.action.MEDIA_TEMPLATE";
 
diff --git a/car-lib/src/android/car/CarInfoManager.java b/car-lib/src/android/car/CarInfoManager.java
index d90883b..b3a2933 100644
--- a/car-lib/src/android/car/CarInfoManager.java
+++ b/car-lib/src/android/car/CarInfoManager.java
@@ -148,8 +148,8 @@
      * @return Unique identifier for the car. This is not VIN, and vehicle id is
      * persistent until user resets it. This ID is guaranteed to be always
      * available.
-     * TODO: BASIC_INFO_KEY_VEHICLE_ID property?
      */
+    // TODO: BASIC_INFO_KEY_VEHICLE_ID property?
     public String getVehicleId() throws CarNotConnectedException {
         return "";
     }
diff --git a/car-support-lib/api/current.txt b/car-support-lib/api/current.txt
index 7ee1246..7cb8bf7 100644
--- a/car-support-lib/api/current.txt
+++ b/car-support-lib/api/current.txt
@@ -1,21 +1,22 @@
+// Signature format: 2.0
 package android.support.car {
 
   public class Car {
     method public void connect() throws java.lang.IllegalStateException;
-    method public static android.support.car.Car createCar(android.content.Context, android.support.car.CarConnectionCallback, android.os.Handler);
+    method public static android.support.car.Car createCar(android.content.Context, android.support.car.CarConnectionCallback, @Nullable android.os.Handler);
     method public static android.support.car.Car createCar(android.content.Context, android.support.car.CarConnectionCallback);
     method public void disconnect();
-    method public java.lang.Object getCarManager(java.lang.String) throws android.support.car.CarNotConnectedException;
-    method public <T> T getCarManager(java.lang.Class<T>) throws android.support.car.CarNotConnectedException;
+    method public Object getCarManager(String) throws android.support.car.CarNotConnectedException;
+    method public <T> T getCarManager(Class<T>) throws android.support.car.CarNotConnectedException;
     method public boolean isConnected();
     method public boolean isConnecting();
-    field public static final java.lang.String APP_FOCUS_SERVICE = "app_focus";
-    field public static final java.lang.String AUDIO_SERVICE = "audio";
-    field public static final java.lang.String INFO_SERVICE = "info";
-    field public static final java.lang.String NAVIGATION_STATUS_SERVICE = "car_navigation_service";
-    field public static final java.lang.String PERMISSION_CAR_NAVIGATION_MANAGER = "android.car.permission.PERMISSION_CAR_NAVIGATION_MANAGER";
-    field public static final java.lang.String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
-    field public static final java.lang.String SENSOR_SERVICE = "sensor";
+    field public static final String APP_FOCUS_SERVICE = "app_focus";
+    field public static final String AUDIO_SERVICE = "audio";
+    field public static final String INFO_SERVICE = "info";
+    field public static final String NAVIGATION_STATUS_SERVICE = "car_navigation_service";
+    field public static final String PERMISSION_CAR_NAVIGATION_MANAGER = "android.car.permission.PERMISSION_CAR_NAVIGATION_MANAGER";
+    field public static final String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
+    field public static final String SENSOR_SERVICE = "sensor";
   }
 
   public abstract class CarAppFocusManager {
@@ -32,13 +33,13 @@
     field public static final int APP_FOCUS_TYPE_NAVIGATION = 1; // 0x1
   }
 
-  public static abstract interface CarAppFocusManager.OnAppFocusChangedListener {
-    method public abstract void onAppFocusChanged(android.support.car.CarAppFocusManager, int, boolean);
+  public static interface CarAppFocusManager.OnAppFocusChangedListener {
+    method public void onAppFocusChanged(android.support.car.CarAppFocusManager, int, boolean);
   }
 
-  public static abstract interface CarAppFocusManager.OnAppFocusOwnershipCallback {
-    method public abstract void onAppFocusOwnershipGranted(android.support.car.CarAppFocusManager, int);
-    method public abstract void onAppFocusOwnershipLost(android.support.car.CarAppFocusManager, int);
+  public static interface CarAppFocusManager.OnAppFocusOwnershipCallback {
+    method public void onAppFocusOwnershipGranted(android.support.car.CarAppFocusManager, int);
+    method public void onAppFocusOwnershipLost(android.support.car.CarAppFocusManager, int);
   }
 
   public abstract class CarConnectionCallback {
@@ -54,14 +55,14 @@
     method public abstract int[] getEvConnectorTypes() throws android.support.car.CarNotConnectedException;
     method public abstract float getFuelCapacity() throws android.support.car.CarNotConnectedException;
     method public abstract int[] getFuelTypes() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getHeadunitManufacturer() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getHeadunitModel() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getHeadunitSoftwareBuild() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getHeadunitSoftwareVersion() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getManufacturer() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getModel() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getModelYear() throws android.support.car.CarNotConnectedException;
-    method public abstract java.lang.String getVehicleId() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getHeadunitManufacturer() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getHeadunitModel() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getHeadunitSoftwareBuild() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getHeadunitSoftwareVersion() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getManufacturer() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getModel() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getModelYear() throws android.support.car.CarNotConnectedException;
+    method @Nullable public abstract String getVehicleId() throws android.support.car.CarNotConnectedException;
     field public static final int DRIVER_SIDE_CENTER = 3; // 0x3
     field public static final int DRIVER_SIDE_LEFT = 1; // 0x1
     field public static final int DRIVER_SIDE_RIGHT = 2; // 0x2
@@ -70,19 +71,21 @@
 
   public class CarNotConnectedException extends java.lang.Exception {
     ctor public CarNotConnectedException();
-    ctor public CarNotConnectedException(java.lang.String);
-    ctor public CarNotConnectedException(java.lang.String, java.lang.Throwable);
-    ctor public CarNotConnectedException(java.lang.Exception);
+    ctor public CarNotConnectedException(String);
+    ctor public CarNotConnectedException(String, Throwable);
+    ctor public CarNotConnectedException(Exception);
   }
 
 }
 
 package android.support.car.annotation {
 
-  public abstract class ValueTypeDef implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.FIELD) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface ValueTypeDef {
+    method public abstract Class<?> type() default java.lang.Object.class;
   }
 
-  public abstract class VersionDef implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.FIELD) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public @interface VersionDef {
+    method public abstract int version() default 1;
   }
 
 }
@@ -146,7 +149,7 @@
 
   public abstract class CarSensorManager {
     ctor public CarSensorManager();
-    method public abstract boolean addListener(android.support.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) throws android.support.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_FINE_LOCATION, "android.car.permission.CAR_SPEED", "android.car.permission.CAR_MILEAGE", "android.car.permission.CAR_ENERGY", "android.car.permission.VEHICLE_DYNAMICS_STATE"}, conditional=true) public abstract boolean addListener(android.support.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) throws android.support.car.CarNotConnectedException, java.lang.IllegalArgumentException;
     method public abstract android.support.car.hardware.CarSensorEvent getLatestSensorEvent(int) throws android.support.car.CarNotConnectedException;
     method public abstract int[] getSupportedSensors() throws android.support.car.CarNotConnectedException;
     method public abstract boolean isSensorSupported(int) throws android.support.car.CarNotConnectedException;
@@ -168,8 +171,8 @@
     field public static final int SENSOR_TYPE_WHEEL_TICK_DISTANCE = 23; // 0x17
   }
 
-  public static abstract interface CarSensorManager.OnSensorChangedListener {
-    method public abstract void onSensorChanged(android.support.car.hardware.CarSensorManager, android.support.car.hardware.CarSensorEvent);
+  public static interface CarSensorManager.OnSensorChangedListener {
+    method public void onSensorChanged(android.support.car.hardware.CarSensorManager, android.support.car.hardware.CarSensorEvent);
   }
 
 }
@@ -178,7 +181,7 @@
 
   public abstract class CarAudioManager {
     ctor public CarAudioManager();
-    method public abstract android.support.car.media.CarAudioRecord createCarAudioRecord(int) throws android.support.car.CarNotConnectedException, java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public abstract android.support.car.media.CarAudioRecord createCarAudioRecord(int) throws android.support.car.CarNotConnectedException, java.lang.SecurityException;
     method public abstract android.media.AudioFormat getAudioRecordAudioFormat() throws android.support.car.CarNotConnectedException;
     method public abstract int getAudioRecordMaxBufferSize() throws android.support.car.CarNotConnectedException;
     method public abstract int getAudioRecordMinBufferSize() throws android.support.car.CarNotConnectedException;
@@ -219,9 +222,9 @@
     method public abstract void sendEvent(int, android.os.Bundle) throws android.support.car.CarNotConnectedException;
   }
 
-  public static abstract interface CarNavigationStatusManager.CarNavigationCallback {
-    method public abstract void onInstrumentClusterStarted(android.support.car.navigation.CarNavigationStatusManager, android.support.car.navigation.CarNavigationInstrumentCluster);
-    method public abstract void onInstrumentClusterStopped(android.support.car.navigation.CarNavigationStatusManager);
+  public static interface CarNavigationStatusManager.CarNavigationCallback {
+    method public void onInstrumentClusterStarted(android.support.car.navigation.CarNavigationStatusManager, android.support.car.navigation.CarNavigationInstrumentCluster);
+    method public void onInstrumentClusterStopped(android.support.car.navigation.CarNavigationStatusManager);
   }
 
 }
diff --git a/car-support-lib/api/removed.txt b/car-support-lib/api/removed.txt
index e69de29..d802177 100644
--- a/car-support-lib/api/removed.txt
+++ b/car-support-lib/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/car_product/sepolicy/private/procfsinspector.te b/car_product/sepolicy/private/procfsinspector.te
index e2aa062..7d22e42 100644
--- a/car_product/sepolicy/private/procfsinspector.te
+++ b/car_product/sepolicy/private/procfsinspector.te
@@ -10,3 +10,4 @@
 
 dontaudit procfsinspector domain:dir getattr;
 
+binder_service(procfsinspector)
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index ed51a78..41b71a7 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -607,7 +607,7 @@
                                     && !mAllowedAppInstallSources.contains(installerName))) {
                                 Log.w(CarLog.TAG_PACKAGE,
                                         info.packageName + " not installed from permitted sources "
-                                                + installerName == null ? "NULL" : installerName);
+                                                + (installerName == null ? "NULL" : installerName));
                                 continue;
                             }
                         }