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);
    method public void disconnect();
    method public int getCarConnectionType();
    method public java.lang.Object getCarManager(java.lang.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 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_FUEL = "android.car.permission.CAR_FUEL";
    field public static final java.lang.String PERMISSION_MILEAGE = "android.car.permission.CAR_MILEAGE";
    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 int VERSION = 1; // 0x1
  }

  public final class CarAppFocusManager {
    method public void abandonAppFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback, int);
    method public void abandonAppFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback);
    method public void addFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener, int) throws android.car.CarNotConnectedException;
    method public boolean isOwningFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback, int) throws android.car.CarNotConnectedException;
    method public void removeFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener, int);
    method public void removeFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener);
    method public int requestAppFocus(int, android.car.CarAppFocusManager.OnAppFocusOwnershipCallback) throws android.car.CarNotConnectedException, java.lang.SecurityException;
    field public static final int APP_FOCUS_REQUEST_FAILED = 0; // 0x0
    field public static final int APP_FOCUS_REQUEST_SUCCEEDED = 1; // 0x1
    field public static final int APP_FOCUS_TYPE_NAVIGATION = 1; // 0x1
    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 abstract interface CarAppFocusManager.OnAppFocusOwnershipCallback {
    method public abstract void onAppFocusOwnershipGranted(int);
    method public abstract void onAppFocusOwnershipLost(int);
  }

  public final class CarInfoManager {
    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;
  }

  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);
  }

}

package android.car.app.menu {

  public abstract class CarMenuCallbacks {
    ctor public CarMenuCallbacks();
    method public abstract android.car.app.menu.RootMenu getRootMenu(android.os.Bundle);
    method public abstract void onCarMenuClosed();
    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 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);
  }

  public class CarMenuConstants {
    ctor public CarMenuConstants();
  }

  public static class CarMenuConstants.MenuItemConstants {
    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 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 {
  }

  public static abstract class CarMenuConstants.MenuItemConstants.WidgetTypes implements java.lang.annotation.Annotation {
  }

  public abstract class CarUiEntry {
    ctor public CarUiEntry(android.content.Context, android.content.Context);
    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 void hideMenuButton();
    method public abstract void hideTitle();
    method public abstract void onPause();
    method public abstract void onRestoreInstanceState(android.os.Bundle);
    method public abstract void onResume();
    method public abstract void onSaveInstanceState(android.os.Bundle);
    method public abstract void onStart();
    method public abstract void onStop();
    method public abstract void openDrawer();
    method public abstract void restoreMenuDrawable();
    method public abstract void setAutoLightDarkMode();
    method public abstract void setBackground(android.graphics.Bitmap);
    method public abstract void setCarMenuCallbacks(android.car.app.menu.CarMenuCallbacks);
    method public abstract void setDarkMode();
    method public abstract void setLightMode();
    method public abstract void setMenuButtonBitmap(android.graphics.Bitmap);
    method public abstract void setMenuButtonColor(int);
    method public abstract void setScrimColor(int);
    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 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 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);
    method public android.os.Bundle getBundle();
    method public java.lang.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);
  }

  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);
  }

}

package android.car.content.pm {

  public final class CarPackageManager {
    method public boolean isActivityAllowedWhileDriving(java.lang.String, java.lang.String) throws android.car.CarNotConnectedException;
    method public boolean isServiceAllowedWhileDriving(java.lang.String, java.lang.String) throws android.car.CarNotConnectedException;
  }

}

package android.car.hardware {

  public class CarSensorEvent implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.car.hardware.CarSensorEvent> CREATOR;
    field public static final int DRIVE_STATUS_FULLY_RESTRICTED = 31; // 0x1f
    field public static final int DRIVE_STATUS_LIMIT_MESSAGE_LEN = 16; // 0x10
    field public static final int DRIVE_STATUS_NO_CONFIG = 8; // 0x8
    field public static final int DRIVE_STATUS_NO_KEYBOARD_INPUT = 2; // 0x2
    field public static final int DRIVE_STATUS_NO_VIDEO = 1; // 0x1
    field public static final int DRIVE_STATUS_NO_VOICE_INPUT = 4; // 0x4
    field public static final int DRIVE_STATUS_UNRESTRICTED = 0; // 0x0
    field public static final int GEAR_DRIVE = 100; // 0x64
    field public static final int GEAR_EIGHTH = 8; // 0x8
    field public static final int GEAR_FIFTH = 5; // 0x5
    field public static final int GEAR_FIRST = 1; // 0x1
    field public static final int GEAR_FOURTH = 4; // 0x4
    field public static final int GEAR_NEUTRAL = 0; // 0x0
    field public static final int GEAR_NINTH = 9; // 0x9
    field public static final int GEAR_PARK = 101; // 0x65
    field public static final int GEAR_REVERSE = 102; // 0x66
    field public static final int GEAR_SECOND = 2; // 0x2
    field public static final int GEAR_SEVENTH = 7; // 0x7
    field public static final int GEAR_SIXTH = 6; // 0x6
    field public static final int GEAR_TENTH = 10; // 0xa
    field public static final int GEAR_THIRD = 3; // 0x3
    field public static final int INDEX_ENVIRONMENT_PRESSURE = 1; // 0x1
    field public static final int INDEX_ENVIRONMENT_TEMPERATURE = 0; // 0x0
    field public static final int INDEX_FUEL_LEVEL_IN_DISTANCE = 1; // 0x1
    field public static final int INDEX_FUEL_LEVEL_IN_PERCENTILE = 0; // 0x0
    field public static final int INDEX_FUEL_LOW_WARNING = 0; // 0x0
    field public final float[] floatValues;
    field public final int[] intValues;
    field public int sensorType;
    field public long timestamp;
  }

  public static class CarSensorEvent.EnvironmentData {
    field public float pressure;
    field public float temperature;
    field public long timestamp;
  }

  public final class CarSensorManager {
    method public android.car.hardware.CarSensorEvent getLatestSensorEvent(int) throws android.car.CarNotConnectedException;
    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 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 = 1; // 0x1
    field public static final int SENSOR_RATE_FASTEST = 0; // 0x0
    field public static final int SENSOR_RATE_NORMAL = 3; // 0x3
    field public static final int SENSOR_RATE_UI = 2; // 0x2
    field public static final int SENSOR_TYPE_CAR_SPEED = 2; // 0x2
    field public static final int SENSOR_TYPE_DRIVING_STATUS = 11; // 0xb
    field public static final int SENSOR_TYPE_ENVIRONMENT = 12; // 0xc
    field public static final int SENSOR_TYPE_FUEL_LEVEL = 5; // 0x5
    field public static final int SENSOR_TYPE_GEAR = 7; // 0x7
    field public static final int SENSOR_TYPE_NIGHT = 9; // 0x9
    field public static final int SENSOR_TYPE_ODOMETER = 4; // 0x4
    field public static final int SENSOR_TYPE_PARKING_BRAKE = 6; // 0x6
    field public static final int SENSOR_TYPE_RPM = 3; // 0x3
    field public static final int SENSOR_TYPE_VENDOR_EXTENSION_END = 1879048191; // 0x6fffffff
  }

  public static abstract interface CarSensorManager.OnSensorChangedListener {
    method public abstract void onSensorChanged(android.car.hardware.CarSensorEvent);
  }

}

package android.car.media {

  public final class CarAudioManager {
    method public void abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
    method public android.media.AudioAttributes getAudioAttributesForCarUsage(int) throws android.car.CarNotConnectedException;
    method public int getStreamMaxVolume(int) throws android.car.CarNotConnectedException;
    method public int getStreamMinVolume(int) throws android.car.CarNotConnectedException;
    method public int getStreamVolume(int) throws android.car.CarNotConnectedException;
    method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
    method public void setStreamVolume(int, int, int) throws android.car.CarNotConnectedException;
    field public static final int CAR_AUDIO_USAGE_ALARM = 6; // 0x6
    field public static final int CAR_AUDIO_USAGE_DEFAULT = 0; // 0x0
    field public static final int CAR_AUDIO_USAGE_MUSIC = 1; // 0x1
    field public static final int CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE = 3; // 0x3
    field public static final int CAR_AUDIO_USAGE_NOTIFICATION = 7; // 0x7
    field public static final int CAR_AUDIO_USAGE_RADIO = 2; // 0x2
    field public static final int CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT = 9; // 0x9
    field public static final int CAR_AUDIO_USAGE_SYSTEM_SOUND = 8; // 0x8
    field public static final int CAR_AUDIO_USAGE_VOICE_CALL = 4; // 0x4
    field public static final int CAR_AUDIO_USAGE_VOICE_COMMAND = 5; // 0x5
  }

}

package android.car.settings {

  public class CarSettings {
    ctor public CarSettings();
  }

  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";
  }

}

