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