KitchenSinkActivity.java revision 5cbe009f1d436e55dfea5bfcddce5e0b29847f9a
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 17package com.google.android.car.kitchensink; 18 19import android.car.hardware.camera.CarCameraManager; 20import android.car.hardware.hvac.CarHvacManager; 21import android.content.ComponentName; 22import android.content.Context; 23import android.content.pm.PackageManager; 24import android.graphics.Color; 25import android.os.Bundle; 26import android.support.car.Car; 27import android.support.car.CarAppContextManager; 28import android.support.car.CarNotConnectedException; 29import android.support.car.CarNotSupportedException; 30import android.support.car.ServiceConnectionListener; 31import android.support.car.app.menu.CarDrawerActivity; 32import android.support.car.app.menu.CarMenu; 33import android.support.car.app.menu.CarMenuCallbacks; 34import android.support.car.app.menu.RootMenu; 35import android.support.car.hardware.CarSensorEvent; 36import android.support.car.hardware.CarSensorManager; 37import android.support.car.navigation.CarNavigationManager; 38import android.util.Log; 39 40import com.google.android.car.kitchensink.audio.AudioTestFragment; 41import com.google.android.car.kitchensink.camera.CameraTestFragment; 42import com.google.android.car.kitchensink.cluster.InstrumentClusterFragment; 43import com.google.android.car.kitchensink.hvac.HvacTestFragment; 44import com.google.android.car.kitchensink.input.InputTestFragment; 45import com.google.android.car.kitchensink.job.JobSchedulerFragment; 46import com.google.android.car.kitchensink.keyboard.KeyboardFragment; 47import com.google.android.car.kitchensink.radio.RadioTestFragment; 48import com.google.android.car.kitchensink.sensor.SensorsTestFragment; 49import com.google.android.car.kitchensink.touch.TouchTestFragment; 50import com.google.android.car.kitchensink.volume.VolumeTestFragment; 51 52import java.util.ArrayList; 53import java.util.List; 54 55public class KitchenSinkActivity extends CarDrawerActivity { 56 private static final String TAG = "KitchenSinkActivity"; 57 58 private static final String MENU_AUDIO = "audio"; 59 private static final String MENU_CAMERA = "camera"; 60 private static final String MENU_HVAC = "hvac"; 61 private static final String MENU_QUIT = "quit"; 62 private static final String MENU_JOB = "job_scheduler"; 63 private static final String MENU_KEYBOARD = "keyboard"; 64 private static final String MENU_CLUSTER = "inst cluster"; 65 private static final String MENU_INPUT_TEST = "input test"; 66 private static final String MENU_RADIO = "radio"; 67 private static final String MENU_SENSORS = "sensors"; 68 private static final String MENU_VOLUME_TEST = "volume test"; 69 private static final String MENU_TOUCH_TEST = "touch test"; 70 71 private Car mCarApi; 72 private CarCameraManager mCameraManager; 73 private CarHvacManager mHvacManager; 74 private CarSensorManager mCarSensorManager; 75 private CarNavigationManager mCarNavigationManager; 76 private CarAppContextManager mCarAppContextManager; 77 78 79 private AudioTestFragment mAudioTestFragment; 80 private RadioTestFragment mRadioTestFragment; 81 private SensorsTestFragment mSensorsTestFragment; 82 private CameraTestFragment mCameraTestFragment; 83 private HvacTestFragment mHvacTestFragment; 84 private JobSchedulerFragment mJobFragment; 85 private KeyboardFragment mKeyboardFragment; 86 private InstrumentClusterFragment mInstrumentClusterFragment; 87 private InputTestFragment mInputTestFragment; 88 private VolumeTestFragment mVolumeTestFragment; 89 private TouchTestFragment mTouchTestFragment; 90 91 private final CarSensorManager.CarSensorEventListener mListener = 92 new CarSensorManager.CarSensorEventListener() { 93 @Override 94 public void onSensorChanged(CarSensorEvent event) { 95 switch (event.sensorType) { 96 case CarSensorManager.SENSOR_TYPE_DRIVING_STATUS: 97 Log.d(TAG, "driving status:" + event.intValues[0]); 98 break; 99 } 100 } 101 }; 102 103 public KitchenSinkActivity(Proxy proxy, Context context, Car car) { 104 super(proxy, context, car); 105 } 106 107 @Override 108 protected void onCreate(Bundle savedInstanceState) { 109 super.onCreate(savedInstanceState); 110 resetTitle(); 111 setScrimColor(Color.LTGRAY); 112 setLightMode(); 113 setCarMenuCallbacks(new MyCarMenuCallbacks()); 114 setContentView(R.layout.kitchen_sink_activity); 115 116 // Connection to Car Service does not work for non-automotive yet. 117 if (getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) { 118 mCarApi = Car.createCar(getContext(), mServiceConnectionListener); 119 mCarApi.connect(); 120 } 121 Log.i(TAG, "onCreate"); 122 } 123 124 @Override 125 protected void onStart() { 126 super.onStart(); 127 Log.i(TAG, "onStart"); 128 } 129 130 @Override 131 protected void onRestart() { 132 super.onRestart(); 133 Log.i(TAG, "onRestart"); 134 } 135 136 @Override 137 protected void onResume() { 138 super.onResume(); 139 Log.i(TAG, "onResume"); 140 } 141 142 @Override 143 protected void onPause() { 144 super.onPause(); 145 Log.i(TAG, "onPause"); 146 } 147 148 @Override 149 protected void onStop() { 150 super.onStop(); 151 Log.i(TAG, "onStop"); 152 } 153 154 @Override 155 protected void onDestroy() { 156 super.onDestroy(); 157 if (mCarSensorManager != null) { 158 try { 159 mCarSensorManager.unregisterListener(mListener); 160 } catch (CarNotConnectedException e) { 161 Log.e(TAG, "Failed to unregister car seonsor listener", e); 162 } 163 } 164 if (mCarApi != null) { 165 mCarApi.disconnect(); 166 } 167 Log.i(TAG, "onDestroy"); 168 } 169 170 private void resetTitle() { 171 setTitle(getContext().getString(R.string.app_title)); 172 } 173 174 private final ServiceConnectionListener mServiceConnectionListener = 175 new ServiceConnectionListener() { 176 @Override 177 public void onServiceConnected(ComponentName name) { 178 Log.d(TAG, "Connected to Car Service"); 179 try { 180 mCameraManager = (CarCameraManager) mCarApi.getCarManager(android.car.Car 181 .CAMERA_SERVICE); 182 mHvacManager = (CarHvacManager) mCarApi.getCarManager(android.car.Car.HVAC_SERVICE); 183 mCarNavigationManager = (CarNavigationManager) mCarApi.getCarManager( 184 android.car.Car.CAR_NAVIGATION_SERVICE); 185 mCarSensorManager = (CarSensorManager) mCarApi.getCarManager(Car.SENSOR_SERVICE); 186 mCarSensorManager.registerListener(mListener, 187 CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, 188 CarSensorManager.SENSOR_RATE_NORMAL); 189 mCarAppContextManager = 190 (CarAppContextManager) mCarApi.getCarManager(Car.APP_CONTEXT_SERVICE); 191 } catch (CarNotConnectedException e) { 192 Log.e(TAG, "Car is not connected!", e); 193 } catch (CarNotSupportedException e) { 194 Log.e(TAG, "Car is not supported!", e); 195 } 196 } 197 198 @Override 199 public void onServiceDisconnected(ComponentName name) { 200 Log.d(TAG, "Disconnect from Car Service"); 201 } 202 203 @Override 204 public void onServiceSuspended(int cause) { 205 Log.d(TAG, "Car Service connection suspended"); 206 } 207 208 @Override 209 public void onServiceConnectionFailed(int cause) { 210 Log.d(TAG, "Car Service connection failed"); 211 } 212 }; 213 214 private final class MyCarMenuCallbacks extends CarMenuCallbacks { 215 /** Id for the root menu */ 216 private static final String ROOT = "ROOT"; 217 218 @Override 219 public RootMenu onGetRoot(Bundle hints) { 220 return new RootMenu(ROOT); 221 } 222 223 @Override 224 public void onLoadChildren(String parentId, CarMenu result) { 225 List<CarMenu.Item> items = new ArrayList<>(); 226 if (parentId.equals(ROOT)) { 227 String[] allMenus = { 228 MENU_AUDIO, MENU_RADIO, MENU_CAMERA, MENU_HVAC, MENU_JOB, MENU_KEYBOARD, 229 MENU_CLUSTER, MENU_INPUT_TEST, MENU_SENSORS, MENU_VOLUME_TEST, 230 MENU_TOUCH_TEST, MENU_QUIT 231 }; 232 for (String menu : allMenus) { 233 items.add(new CarMenu.Builder(menu).setText(menu).build()); 234 } 235 } 236 result.sendResult(items); 237 } 238 239 @Override 240 public void onItemClicked(String id) { 241 Log.d(TAG, "onItemClicked id=" + id); 242 if (id.equals(MENU_AUDIO)) { 243 if (mAudioTestFragment == null) { 244 mAudioTestFragment = new AudioTestFragment(); 245 } 246 setContentFragment(mAudioTestFragment); 247 } else if (id.equals(MENU_RADIO)) { 248 if (mRadioTestFragment == null) { 249 mRadioTestFragment = new RadioTestFragment(); 250 } 251 setContentFragment(mRadioTestFragment); 252 } else if (id.equals(MENU_SENSORS)) { 253 if (mSensorsTestFragment == null) { 254 mSensorsTestFragment = new SensorsTestFragment(); 255 } 256 setContentFragment(mSensorsTestFragment); 257 } else if (id.equals(MENU_CAMERA)) { 258 if (mCameraManager != null) { 259 if (mCameraTestFragment == null) { 260 mCameraTestFragment = new CameraTestFragment(); 261 mCameraTestFragment.setCameraManager(mCameraManager); 262 } 263 // Don't allow camera fragment to start if we don't have a manager. 264 setContentFragment(mCameraTestFragment); 265 } 266 } else if (id.equals(MENU_HVAC)) { 267 if (mHvacManager != null) { 268 if (mHvacTestFragment == null) { 269 mHvacTestFragment = new HvacTestFragment(); 270 mHvacTestFragment.setHvacManager(mHvacManager); 271 } 272 // Don't allow HVAC fragment to start if we don't have a manager. 273 setContentFragment(mHvacTestFragment); 274 } 275 } else if (id.equals(MENU_JOB)) { 276 if (mJobFragment == null) { 277 mJobFragment = new JobSchedulerFragment(); 278 } 279 setContentFragment(mJobFragment); 280 } else if (id.equals(MENU_KEYBOARD)) { 281 if (mKeyboardFragment == null) { 282 mKeyboardFragment = new KeyboardFragment(); 283 } 284 setContentFragment(mKeyboardFragment); 285 } else if (id.equals(MENU_CLUSTER)) { 286 if (mInstrumentClusterFragment == null) { 287 mInstrumentClusterFragment = new InstrumentClusterFragment(); 288 mInstrumentClusterFragment.setCarNavigationManager(mCarNavigationManager); 289 mInstrumentClusterFragment.setCarAppContextManager(mCarAppContextManager); 290 } 291 setContentFragment(mInstrumentClusterFragment); 292 } else if (id.equals(MENU_INPUT_TEST)) { 293 if (mInputTestFragment == null) { 294 mInputTestFragment = new InputTestFragment(); 295 } 296 setContentFragment(mInputTestFragment); 297 } else if (id.equals(MENU_VOLUME_TEST)) { 298 if (mVolumeTestFragment == null) { 299 mVolumeTestFragment = new VolumeTestFragment(); 300 } 301 setContentFragment(mVolumeTestFragment); 302 } else if (id.equals(MENU_TOUCH_TEST)) { 303 if (mTouchTestFragment == null) { 304 mTouchTestFragment = new TouchTestFragment(); 305 } 306 setContentFragment(mTouchTestFragment); 307 } else if (id.equals(MENU_QUIT)) { 308 finish(); 309 } 310 } 311 312 @Override 313 public void onCarMenuClosed() { 314 resetTitle(); 315 } 316 } 317} 318