blob: a04159d2bfc221dbf5d50df55acc48ff156b1b81 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.car;
import android.car.annotation.ValueTypeDef;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
/**
* Utility to retrieve various static information from car. For given string keys, there can be
* different types of values and right query API like {@link #getFloat(String)} for float
* type, and {@link #getInt(String)} for int type, should be used. Passing a key string to wrong
* API will lead into {@link IllegalArgumentException}. All get* apis return null if requested
* property is not supported by the car. So caller should always check for null result.
*/
public class CarInfoManager implements CarManagerBase {
/**
* Manufacturer of the car.
*/
@ValueTypeDef(type = String.class)
public static final String KEY_MANUFACTURER = "manufacturer";
/**
* Model name of the car. This information may not necessarily allow distinguishing different
* car models as the same name may be used for different cars depending on manufacturers.
*/
@ValueTypeDef(type = String.class)
public static final String KEY_MODEL = "model";
/**
* Model year of the car in AC.
*/
@ValueTypeDef(type = Integer.class)
public static final String KEY_MODEL_YEAR = "model-year";
/**
* Unique identifier for the car. This is not VIN, and id is persistent until user resets it.
*/
@ValueTypeDef(type = String.class)
public static final String KEY_VEHICLE_ID = "vehicle-id";
//TODO
//@ValueTypeDef(type = Integer.class)
//public static final String KEY_DRIVER_POSITION = "driver-position";
//TODO
//@ValueTypeDef(type = int[].class)
//public static final String KEY_SEAT_CONFIGURATION = "seat-configuration";
//TODO
//@ValueTypeDef(type = Integer.class)
//public static final String KEY_WINDOW_CONFIGURATION = "window-configuration";
//TODO: MT, AT, CVT, ...
//@ValueTypeDef(type = Integer.class)
//public static final String KEY_TRANSMISSION_TYPE = "transmission-type";
//TODO add: transmission gear available selection, gear available steps
// drive wheel: FWD, RWD, AWD, 4WD
private final ICarInfo mService;
/**
* Retrieve floating point information for car.
* @param key
* @return null if the key is not supported.
* @throws CarNotConnectedException
* @throws IllegalArgumentException
*/
public Float getFloat(String key) throws CarNotConnectedException, IllegalArgumentException {
try {
float[] v = mService.getFloat(key);
if (v != null) {
return v[0];
}
} catch (IllegalStateException e) {
CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
} catch (RemoteException e) {
throw new CarNotConnectedException(e);
}
return null;
}
public Integer getInt(String key) throws CarNotConnectedException, IllegalArgumentException {
try {
int[] v = mService.getInt(key);
if (v != null) {
return v[0];
}
} catch (IllegalStateException e) {
CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
} catch (RemoteException e) {
throw new CarNotConnectedException(e);
}
return null;
}
public Long getLong(String key) throws CarNotConnectedException, IllegalArgumentException {
try {
long[] v = mService.getLong(key);
if (v != null) {
return v[0];
}
} catch (IllegalStateException e) {
CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
} catch (RemoteException e) {
throw new CarNotConnectedException(e);
}
return null;
}
public String getString(String key) throws CarNotConnectedException, IllegalArgumentException {
try {
return mService.getString(key);
} catch (IllegalStateException e) {
CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
} catch (RemoteException e) {
throw new CarNotConnectedException(e);
}
return null;
}
/**
* get Bundle for the given key. This is intended for passing vendor specific data for key
* defined only for the car vendor. Vendor extension can be used for other APIs like
* getInt / getString, but this is for passing more complex data.
* @param key
* @return
* @throws CarNotConnectedException
* @throws IllegalArgumentException
* @hide
*/
public Bundle getBundle(String key) throws CarNotConnectedException, IllegalArgumentException {
try {
return mService.getBundle(key);
} catch (IllegalStateException e) {
CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
} catch (RemoteException e) {
throw new CarNotConnectedException(e);
}
return null;
}
/** @hide */
CarInfoManager(IBinder service) {
mService = ICarInfo.Stub.asInterface(service);
}
/** @hide */
@Override
public void onCarDisconnected() {
//nothing to do
}
}