1 /* 2 * Copyright (c) 2016, 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 package com.android.car.hvac.controllers; 17 18 import android.car.hardware.CarPropertyValue; 19 import com.android.car.hvac.HvacController; 20 import com.android.car.hvac.ui.TemperatureBarOverlay; 21 22 /** 23 * A controller that handles temperature updates for the driver and passenger. 24 */ 25 public class TemperatureController { 26 private final TemperatureBarOverlay mDriverTempBarExpanded; 27 private final TemperatureBarOverlay mPassengerTempBarExpanded; 28 private final TemperatureBarOverlay mDriverTempBarCollapsed; 29 private final TemperatureBarOverlay mPassengerTempBarCollapsed; 30 private final HvacController mHvacController; 31 32 //TODO: builder pattern for clarity 33 public TemperatureController(TemperatureBarOverlay passengerTemperatureBarExpanded, 34 TemperatureBarOverlay driverTemperatureBarExpanded, 35 TemperatureBarOverlay passengerTemperatureBarCollapsed, 36 TemperatureBarOverlay driverTemperatureBarCollapsed, 37 HvacController controller) { 38 mDriverTempBarExpanded = driverTemperatureBarExpanded; 39 mPassengerTempBarExpanded = passengerTemperatureBarExpanded; 40 mPassengerTempBarCollapsed = passengerTemperatureBarCollapsed; 41 mDriverTempBarCollapsed = driverTemperatureBarCollapsed; 42 mHvacController = controller; 43 44 mHvacController.registerCallback(mCallback); 45 mDriverTempBarExpanded.setTemperatureChangeListener(mDriverTempClickListener); 46 mPassengerTempBarExpanded.setTemperatureChangeListener(mPassengerTempClickListener); 47 48 final boolean isDriverTempControlAvailable = 49 mHvacController.isDriverTemperatureControlAvailable(); 50 mDriverTempBarExpanded.setAvailable(isDriverTempControlAvailable); 51 mDriverTempBarCollapsed.setAvailable(isDriverTempControlAvailable); 52 if (isDriverTempControlAvailable) { 53 mDriverTempBarExpanded.setTemperature(mHvacController.getDriverTemperature()); 54 mDriverTempBarCollapsed.setTemperature(mHvacController.getDriverTemperature()); 55 } 56 57 final boolean isPassengerTempControlAvailable = 58 mHvacController.isPassengerTemperatureControlAvailable(); 59 mPassengerTempBarExpanded.setAvailable(isPassengerTempControlAvailable); 60 mPassengerTempBarCollapsed.setAvailable(isPassengerTempControlAvailable); 61 if (isPassengerTempControlAvailable) { 62 mPassengerTempBarExpanded.setTemperature(mHvacController.getPassengerTemperature()); 63 mPassengerTempBarCollapsed.setTemperature(mHvacController.getPassengerTemperature()); 64 } 65 } 66 67 private final HvacController.Callback mCallback = new HvacController.Callback() { 68 @Override 69 public void onPassengerTemperatureChange(CarPropertyValue value) { 70 final boolean available = value.getStatus() == CarPropertyValue.STATUS_AVAILABLE; 71 mPassengerTempBarExpanded.setAvailable(available); 72 mPassengerTempBarCollapsed.setAvailable(available); 73 if (available) { 74 final int temp = ((Float)value.getValue()).intValue(); 75 mPassengerTempBarExpanded.setTemperature(temp); 76 mPassengerTempBarCollapsed.setTemperature(temp); 77 } 78 } 79 80 @Override 81 public void onDriverTemperatureChange(CarPropertyValue value) { 82 final boolean available = value.getStatus() == CarPropertyValue.STATUS_AVAILABLE; 83 mDriverTempBarExpanded.setAvailable(available); 84 mDriverTempBarExpanded.setAvailable(available); 85 if (available) { 86 final int temp = ((Float)value.getValue()).intValue(); 87 mDriverTempBarCollapsed.setTemperature(temp); 88 mDriverTempBarExpanded.setTemperature(temp); 89 } 90 } 91 }; 92 93 private final TemperatureBarOverlay.TemperatureAdjustClickListener mPassengerTempClickListener = 94 new TemperatureBarOverlay.TemperatureAdjustClickListener() { 95 @Override 96 public void onTemperatureChanged(int temperature) { 97 mHvacController.setPassengerTemperature(temperature); 98 mPassengerTempBarCollapsed.setTemperature(temperature); 99 } 100 }; 101 102 private final TemperatureBarOverlay.TemperatureAdjustClickListener mDriverTempClickListener = 103 new TemperatureBarOverlay.TemperatureAdjustClickListener() { 104 @Override 105 public void onTemperatureChanged(int temperature) { 106 mHvacController.setDriverTemperature(temperature); 107 mDriverTempBarCollapsed.setTemperature(temperature); 108 } 109 }; 110 } 111