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/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-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
