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