1a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park/* 2a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * Copyright (C) 2015 The Android Open Source Project 3a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * 4a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * Licensed under the Apache License, Version 2.0 (the "License"); 5a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * you may not use this file except in compliance with the License. 6a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * You may obtain a copy of the License at 7a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * 8a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * http://www.apache.org/licenses/LICENSE-2.0 9a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * 10a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * Unless required by applicable law or agreed to in writing, software 11a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * distributed under the License is distributed on an "AS IS" BASIS, 12a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * See the License for the specific language governing permissions and 14a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park * limitations under the License. 15a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park */ 16a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 17a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkpackage com.google.android.car.kitchensink; 18a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 19a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.car.hardware.camera.CarCameraManager; 20a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.car.hardware.hvac.CarHvacManager; 21a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.content.ComponentName; 22a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.content.Context; 23a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.content.pm.PackageManager; 24a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.graphics.Color; 25a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.os.Bundle; 26a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.Car; 27a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.CarAppContextManager; 28a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.CarNotConnectedException; 29e4c731ea3ed22615783efb02818b0b3d184bba33Jason Tholstrupimport android.support.car.CarNotSupportedException; 30a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.ServiceConnectionListener; 31a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.app.menu.CarDrawerActivity; 32a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.app.menu.CarMenu; 33a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.app.menu.CarMenuCallbacks; 34a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.app.menu.RootMenu; 35a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.hardware.CarSensorEvent; 36a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.hardware.CarSensorManager; 37a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.support.car.navigation.CarNavigationManager; 38a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport android.util.Log; 39a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 40235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.audio.AudioTestFragment; 41235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.camera.CameraTestFragment; 42235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.cluster.InstrumentClusterFragment; 43235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.hvac.HvacTestFragment; 44235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.input.InputTestFragment; 45235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.job.JobSchedulerFragment; 46235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport com.google.android.car.kitchensink.keyboard.KeyboardFragment; 47235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv 48a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport java.util.ArrayList; 49a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkimport java.util.List; 50a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 51a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Parkpublic class KitchenSinkActivity extends CarDrawerActivity { 52a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String TAG = "KitchenSinkActivity"; 53a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 54a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_AUDIO = "audio"; 55a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_CAMERA = "camera"; 56a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_HVAC = "hvac"; 57a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_QUIT = "quit"; 58a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_JOB = "job_scheduler"; 59a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_KEYBOARD = "keyboard"; 60a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String MENU_CLUSTER = "inst cluster"; 61a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park private static final String MENU_INPUT_TEST = "input test"; 62a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 63a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private Car mCarApi; 64a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private CarCameraManager mCameraManager; 65a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private CarHvacManager mHvacManager; 66a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private CarSensorManager mCarSensorManager; 67a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private CarNavigationManager mCarNavigationManager; 68a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private CarAppContextManager mCarAppContextManager; 69a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 70a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 71a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private AudioTestFragment mAudioTestFragment; 72a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private CameraTestFragment mCameraTestFragment; 73a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private HvacTestFragment mHvacTestFragment; 74a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private JobSchedulerFragment mJobFragment; 75a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private KeyboardFragment mKeyboardFragment; 76a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private InstrumentClusterFragment mInstrumentClusterFragment; 77a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park private InputTestFragment mInputTestFragment; 78a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 79a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private final CarSensorManager.CarSensorEventListener mListener = 80a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park new CarSensorManager.CarSensorEventListener() { 81a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 82a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onSensorChanged(CarSensorEvent event) { 83a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park switch (event.sensorType) { 84a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park case CarSensorManager.SENSOR_TYPE_DRIVING_STATUS: 85a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.d(TAG, "driving status:" + event.intValues[0]); 86a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park break; 87a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 88a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 89a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park }; 90a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 91a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public KitchenSinkActivity(Proxy proxy, Context context, Car car) { 92a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super(proxy, context, car); 93a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 94a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 95a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 96a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onCreate(Bundle savedInstanceState) { 97a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onCreate(savedInstanceState); 98a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park resetTitle(); 99a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setScrimColor(Color.LTGRAY); 100a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setLightMode(); 101a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setCarMenuCallbacks(new MyCarMenuCallbacks()); 102a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentView(R.layout.kitchen_sink_activity); 103a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 104a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park // Connection to Car Service does not work for non-automotive yet. 105a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) { 106a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarApi = Car.createCar(getContext(), mServiceConnectionListener); 107a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarApi.connect(); 108a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 109a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onCreate"); 110a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 111a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 112a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 113a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onStart() { 114a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onStart(); 115a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onStart"); 116a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 117a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 118a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 119a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onRestart() { 120a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onRestart(); 121a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onRestart"); 122a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 123a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 124a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 125a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onResume() { 126a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onResume(); 127a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onResume"); 128a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 129a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 130a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 131a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onPause() { 132a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onPause(); 133a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onPause"); 134a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 135a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 136a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 137a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onStop() { 138a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onStop(); 139a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onStop"); 140a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 141a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 142a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 143a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park protected void onDestroy() { 144a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park super.onDestroy(); 145a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mCarSensorManager != null) { 146235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv try { 147235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv mCarSensorManager.unregisterListener(mListener); 148235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv } catch (CarNotConnectedException e) { 149235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv Log.e(TAG, "Failed to unregister car seonsor listener", e); 150235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv } 151a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 152a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mCarApi != null) { 153a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarApi.disconnect(); 154a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 155a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.i(TAG, "onDestroy"); 156a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 157a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 158a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private void resetTitle() { 159a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setTitle(getContext().getString(R.string.app_title)); 160a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 161a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 162a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private final ServiceConnectionListener mServiceConnectionListener = 163a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park new ServiceConnectionListener() { 164a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 165e4c731ea3ed22615783efb02818b0b3d184bba33Jason Tholstrup public void onServiceConnected(ComponentName name) { 166a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.d(TAG, "Connected to Car Service"); 167a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park try { 168a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCameraManager = (CarCameraManager) mCarApi.getCarManager(android.car.Car 169a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park .CAMERA_SERVICE); 170a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mHvacManager = (CarHvacManager) mCarApi.getCarManager(android.car.Car.HVAC_SERVICE); 171a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarNavigationManager = (CarNavigationManager) mCarApi.getCarManager( 172a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park android.car.Car.CAR_NAVIGATION_SERVICE); 173a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarSensorManager = (CarSensorManager) mCarApi.getCarManager(Car.SENSOR_SERVICE); 174a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarSensorManager.registerListener(mListener, 175a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, 176a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park CarSensorManager.SENSOR_RATE_NORMAL); 177a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCarAppContextManager = 178a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park (CarAppContextManager) mCarApi.getCarManager(Car.APP_CONTEXT_SERVICE); 179a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } catch (CarNotConnectedException e) { 180235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv Log.e(TAG, "Car is not connected!", e); 181e4c731ea3ed22615783efb02818b0b3d184bba33Jason Tholstrup } catch (CarNotSupportedException e) { 182235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv Log.e(TAG, "Car is not supported!", e); 183a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 184a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 185a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 186a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 187a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onServiceDisconnected(ComponentName name) { 188a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.d(TAG, "Disconnect from Car Service"); 189a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 190a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 191a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 192a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onServiceSuspended(int cause) { 193a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.d(TAG, "Car Service connection suspended"); 194a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 195a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 196a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 197a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onServiceConnectionFailed(int cause) { 198a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.d(TAG, "Car Service connection failed"); 199a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 200a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park }; 201a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 202a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private final class MyCarMenuCallbacks extends CarMenuCallbacks { 203a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park /** Id for the root menu */ 204a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park private static final String ROOT = "ROOT"; 205a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 206a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 207a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public RootMenu onGetRoot(Bundle hints) { 208a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park return new RootMenu(ROOT); 209a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 210a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 211a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 212a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onLoadChildren(String parentId, CarMenu result) { 213a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park List<CarMenu.Item> items = new ArrayList<>(); 214a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (parentId.equals(ROOT)) { 215a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park String[] allMenus = { 216a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park MENU_AUDIO, MENU_CAMERA, MENU_HVAC, MENU_JOB, MENU_KEYBOARD, MENU_CLUSTER, 217a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park MENU_INPUT_TEST, MENU_QUIT 218a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park }; 219a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park for (String menu : allMenus) { 220a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park items.add(new CarMenu.Builder(menu).setText(menu).build()); 221a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 222a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 223a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park result.sendResult(items); 224a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 225a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 226a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 227a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onItemClicked(String id) { 228a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park Log.d(TAG, "onItemClicked id=" + id); 229a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (id.equals(MENU_AUDIO)) { 230a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mAudioTestFragment == null) { 231a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park mAudioTestFragment = new AudioTestFragment(); 232a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 233a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentFragment(mAudioTestFragment); 234a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } else if (id.equals(MENU_CAMERA)) { 235a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mCameraManager != null) { 236a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mCameraTestFragment == null) { 237a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCameraTestFragment = new CameraTestFragment(); 238a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mCameraTestFragment.setCameraManager(mCameraManager); 239a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 240a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park // Don't allow camera fragment to start if we don't have a manager. 241a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentFragment(mCameraTestFragment); 242a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 243a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } else if (id.equals(MENU_HVAC)) { 244a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mHvacManager != null) { 245a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mHvacTestFragment == null) { 246a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mHvacTestFragment = new HvacTestFragment(); 247a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mHvacTestFragment.setHvacManager(mHvacManager); 248a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 249a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park // Don't allow HVAC fragment to start if we don't have a manager. 250a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentFragment(mHvacTestFragment); 251a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 252a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } else if (id.equals(MENU_JOB)) { 253a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mJobFragment == null) { 254a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mJobFragment = new JobSchedulerFragment(); 255a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 256a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentFragment(mJobFragment); 257a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } else if (id.equals(MENU_KEYBOARD)) { 258a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mKeyboardFragment == null) { 259a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mKeyboardFragment = new KeyboardFragment(); 260a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 261a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentFragment(mKeyboardFragment); 262a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } else if (id.equals(MENU_CLUSTER)) { 263a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park if (mInstrumentClusterFragment == null) { 264a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mInstrumentClusterFragment = new InstrumentClusterFragment(); 265a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mInstrumentClusterFragment.setCarNavigationManager(mCarNavigationManager); 266a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park mInstrumentClusterFragment.setCarAppContextManager(mCarAppContextManager); 267a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 268a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park setContentFragment(mInstrumentClusterFragment); 269a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park } else if (id.equals(MENU_INPUT_TEST)) { 270a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park if (mInputTestFragment == null) { 271a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park mInputTestFragment = new InputTestFragment(); 272a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park } 273a28d7b201584823286f26e21a9f30d07c416eb3eKeun-young Park setContentFragment(mInputTestFragment); 274a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } else if (id.equals(MENU_QUIT)) { 275a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park finish(); 276a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 277a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 278a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park 279a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park @Override 280a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park public void onCarMenuClosed() { 281a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park resetTitle(); 282a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 283a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park } 284a6521cd799e509b03ecbeea3b05f1dd5c0379387Keun-young Park} 285