1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.car; 18 19 import android.car.annotation.ValueTypeDef; 20 import android.os.Bundle; 21 import android.os.IBinder; 22 import android.os.RemoteException; 23 24 /** 25 * Utility to retrieve various static information from car. For given string keys, there can be 26 * different types of values and right query API like {@link #getFloat(String)} for float 27 * type, and {@link #getInt(String)} for int type, should be used. Passing a key string to wrong 28 * API will lead into {@link IllegalArgumentException}. All get* apis return null if requested 29 * property is not supported by the car. So caller should always check for null result. 30 */ 31 public class CarInfoManager implements CarManagerBase { 32 33 /** 34 * Manufacturer of the car. 35 */ 36 @ValueTypeDef(type = String.class) 37 public static final String KEY_MANUFACTURER = "manufacturer"; 38 /** 39 * Model name of the car. This information may not necessarily allow distinguishing different 40 * car models as the same name may be used for different cars depending on manufacturers. 41 */ 42 @ValueTypeDef(type = String.class) 43 public static final String KEY_MODEL = "model"; 44 /** 45 * Model year of the car in AC. 46 */ 47 @ValueTypeDef(type = Integer.class) 48 public static final String KEY_MODEL_YEAR = "model-year"; 49 /** 50 * Unique identifier for the car. This is not VIN, and id is persistent until user resets it. 51 */ 52 @ValueTypeDef(type = String.class) 53 public static final String KEY_VEHICLE_ID = "vehicle-id"; 54 55 //TODO 56 //@ValueTypeDef(type = Integer.class) 57 //public static final String KEY_DRIVER_POSITION = "driver-position"; 58 59 //TODO 60 //@ValueTypeDef(type = int[].class) 61 //public static final String KEY_SEAT_CONFIGURATION = "seat-configuration"; 62 63 //TODO 64 //@ValueTypeDef(type = Integer.class) 65 //public static final String KEY_WINDOW_CONFIGURATION = "window-configuration"; 66 67 //TODO: MT, AT, CVT, ... 68 //@ValueTypeDef(type = Integer.class) 69 //public static final String KEY_TRANSMISSION_TYPE = "transmission-type"; 70 71 //TODO add: transmission gear available selection, gear available steps 72 // drive wheel: FWD, RWD, AWD, 4WD 73 74 private final ICarInfo mService; 75 76 /** 77 * Retrieve floating point information for car. 78 * @param key 79 * @return null if the key is not supported. 80 * @throws CarNotConnectedException 81 * @throws IllegalArgumentException 82 */ 83 public Float getFloat(String key) throws CarNotConnectedException, IllegalArgumentException { 84 try { 85 float[] v = mService.getFloat(key); 86 if (v != null) { 87 return v[0]; 88 } 89 } catch (IllegalStateException e) { 90 CarApiUtil.checkCarNotConnectedExceptionFromCarService(e); 91 } catch (RemoteException e) { 92 throw new CarNotConnectedException(e); 93 } 94 return null; 95 } 96 97 public Integer getInt(String key) throws CarNotConnectedException, IllegalArgumentException { 98 try { 99 int[] v = mService.getInt(key); 100 if (v != null) { 101 return v[0]; 102 } 103 } catch (IllegalStateException e) { 104 CarApiUtil.checkCarNotConnectedExceptionFromCarService(e); 105 } catch (RemoteException e) { 106 throw new CarNotConnectedException(e); 107 } 108 return null; 109 } 110 111 public Long getLong(String key) throws CarNotConnectedException, IllegalArgumentException { 112 try { 113 long[] v = mService.getLong(key); 114 if (v != null) { 115 return v[0]; 116 } 117 } catch (IllegalStateException e) { 118 CarApiUtil.checkCarNotConnectedExceptionFromCarService(e); 119 } catch (RemoteException e) { 120 throw new CarNotConnectedException(e); 121 } 122 return null; 123 } 124 125 public String getString(String key) throws CarNotConnectedException, IllegalArgumentException { 126 try { 127 return mService.getString(key); 128 } catch (IllegalStateException e) { 129 CarApiUtil.checkCarNotConnectedExceptionFromCarService(e); 130 } catch (RemoteException e) { 131 throw new CarNotConnectedException(e); 132 } 133 return null; 134 } 135 136 /** 137 * get Bundle for the given key. This is intended for passing vendor specific data for key 138 * defined only for the car vendor. Vendor extension can be used for other APIs like 139 * getInt / getString, but this is for passing more complex data. 140 * @param key 141 * @return 142 * @throws CarNotConnectedException 143 * @throws IllegalArgumentException 144 * @hide 145 */ 146 public Bundle getBundle(String key) throws CarNotConnectedException, IllegalArgumentException { 147 try { 148 return mService.getBundle(key); 149 } catch (IllegalStateException e) { 150 CarApiUtil.checkCarNotConnectedExceptionFromCarService(e); 151 } catch (RemoteException e) { 152 throw new CarNotConnectedException(e); 153 } 154 return null; 155 } 156 157 /** @hide */ 158 CarInfoManager(IBinder service) { 159 mService = ICarInfo.Stub.asInterface(service); 160 } 161 162 /** @hide */ 163 @Override 164 public void onCarDisconnected() { 165 //nothing to do 166 } 167 } 168