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