HvacTestFragment.java revision 6f0a2fde32ec16046139dda3819c6f4ae475e36b
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.hvac;
18
19import android.car.CarNotConnectedException;
20import android.car.VehicleZoneUtil;
21import android.car.hardware.hvac.CarHvacEvent;
22import android.car.hardware.hvac.CarHvacManager.CarHvacBaseProperty;
23import android.car.hardware.hvac.CarHvacManager.CarHvacBooleanValue;
24import android.car.hardware.hvac.CarHvacManager.CarHvacFloatProperty;
25import android.car.hardware.hvac.CarHvacManager.CarHvacFloatValue;
26import android.car.hardware.hvac.CarHvacManager.CarHvacIntProperty;
27import android.car.hardware.hvac.CarHvacManager.CarHvacIntValue;
28import android.car.hardware.hvac.CarHvacManager;
29import android.os.Bundle;
30import android.support.v4.app.Fragment;
31import android.util.Log;
32import android.view.LayoutInflater;
33import android.view.View;
34import android.view.ViewGroup;
35import android.widget.Button;
36import android.widget.RadioButton;
37import android.widget.RadioGroup;
38import android.widget.TextView;
39import android.widget.ToggleButton;
40
41import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleHvacFanDirection;
42import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleWindow;
43import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZone;
44
45import com.google.android.car.kitchensink.R;
46
47import java.lang.Override;
48import java.util.List;
49
50public class HvacTestFragment extends Fragment {
51    private final boolean DBG = true;
52    private final String TAG = "HvacTestFragment";
53    private RadioButton mRbFanPositionFace;
54    private RadioButton mRbFanPositionFloor;
55    private RadioButton mRbFanPositionFaceAndFloor;
56    private ToggleButton mTbAc;
57    private ToggleButton mTbDefrostFront;
58    private ToggleButton mTbDefrostRear;
59    private TextView mTvFanSpeed;
60    private TextView mTvDTemp;
61    private TextView mTvPTemp;
62    private int mCurFanSpeed = 1;
63    private float mCurDTemp = 23;
64    private float mCurPTemp = 23;
65    private CarHvacManager mCarHvacManager;
66    private int mZoneForAcOn;
67    private int mZoneForSetTempD;
68    private int mZoneForSetTempP;
69    private int mZoneForFanSpeed;
70    private int mZoneForFanPosition;
71
72    private final CarHvacManager.CarHvacEventListener mHvacListener =
73            new CarHvacManager.CarHvacEventListener () {
74                @Override
75                public void onChangeEvent(final CarHvacManager.CarHvacBaseProperty value) {
76                    int zones = value.getZones();
77                    switch(value.getPropertyId()) {
78                        case CarHvacManager.HVAC_ZONED_AC_ON:
79                            mTbAc.setChecked(((CarHvacBooleanValue)value).getValue());
80                            break;
81                        case CarHvacManager.HVAC_ZONED_FAN_POSITION:
82                            switch(((CarHvacIntValue)value).getValue()) {
83                                case VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FACE:
84                                    mRbFanPositionFace.setChecked(true);
85                                    break;
86                                case VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FLOOR:
87                                    mRbFanPositionFloor.setChecked(true);
88                                    break;
89                                case VehicleHvacFanDirection.
90                                        VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR:
91                                    mRbFanPositionFaceAndFloor.setChecked(true);
92                                    break;
93                                default:
94                                    Log.e(TAG, "Unknown fan position: " +
95                                            ((CarHvacIntValue)value).getValue());
96                                    break;
97                            }
98                            break;
99                        case CarHvacManager.HVAC_ZONED_FAN_SPEED_SETPOINT:
100                            if ((zones & mZoneForFanSpeed) != 0) {
101                                mCurFanSpeed = ((CarHvacIntValue)value).getValue();
102                                mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
103                            }
104                            break;
105                        case CarHvacManager.HVAC_ZONED_TEMP_SETPOINT:
106                            if ((zones & mZoneForSetTempD) != 0) {
107                                mCurDTemp = ((CarHvacFloatValue)value).getValue();
108                                mTvDTemp.setText(String.valueOf(mCurDTemp));
109                            }
110                            if ((zones & mZoneForSetTempP) != 0) {
111                                mCurPTemp = ((CarHvacFloatValue)value).getValue();
112                                mTvPTemp.setText(String.valueOf(mCurPTemp));
113                            }
114                            break;
115                        case CarHvacManager.HVAC_WINDOW_DEFROSTER_ON:
116                            if((zones & VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD) ==
117                                    VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD) {
118                                mTbDefrostFront.setChecked(((CarHvacBooleanValue)value).getValue());
119                            }
120                            if((zones & VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD) ==
121                                    VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD) {
122                                mTbDefrostRear.setChecked(((CarHvacBooleanValue)value).getValue());
123                            }
124                            break;
125                        default:
126                            Log.d(TAG, "onChangeEvent(): unknown property id = " + value
127                                    .getPropertyId());
128                    }
129                }
130
131                @Override
132                public void onErrorEvent(final int propertyId, final int zone) {
133                    Log.d(TAG, "Error:  propertyId=" + propertyId + "  zone=" + zone);
134                }
135            };
136
137    @Override
138    public void onCreate(Bundle savedInstanceState) {
139        super.onCreate(savedInstanceState);
140        try {
141            mCarHvacManager.registerListener(mHvacListener);
142        } catch (CarNotConnectedException e) {
143            Log.e(TAG, "Car is not connected!");
144        }
145    }
146
147    @Override
148    public void onDestroy() {
149        super.onDestroy();
150        mCarHvacManager.unregisterListener();
151    }
152
153    @Override
154    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
155        View v = inflater.inflate(R.layout.hvac_test, container, false);
156
157        List<CarHvacBaseProperty> props = mCarHvacManager.getPropertyList();
158
159        for(CarHvacBaseProperty prop : props) {
160            int propId = prop.getPropertyId();
161            int type = prop.getType();
162
163            if(DBG) {
164                Log.d(TAG, prop.toString());
165            }
166
167            switch(propId) {
168                case CarHvacManager.HVAC_ZONED_AC_ON:
169                    configureAcOn(v, prop);
170                    break;
171                case CarHvacManager.HVAC_ZONED_FAN_POSITION:
172                    configureFanPosition(v, prop);
173                    break;
174                case CarHvacManager.HVAC_ZONED_FAN_SPEED_SETPOINT:
175                    configureFanSpeed(v, prop);
176                    break;
177                case CarHvacManager.HVAC_ZONED_TEMP_SETPOINT:
178                    configureTempSetpoint(v, prop);
179                    break;
180                case CarHvacManager.HVAC_WINDOW_DEFROSTER_ON:
181                    configureDefrosterOn(v, prop.getZones());
182                    break;
183                default:
184                    Log.w(TAG, "propertyId " + propId + " is not handled");
185                    break;
186            }
187        }
188
189        mTvFanSpeed = (TextView) v.findViewById(R.id.tvFanSpeed);
190        mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
191        mTvDTemp = (TextView) v.findViewById(R.id.tvDTemp);
192        mTvDTemp.setText(String.valueOf(mCurDTemp));
193        mTvPTemp = (TextView) v.findViewById(R.id.tvPTemp);
194        mTvPTemp.setText(String.valueOf(mCurPTemp));
195
196        if(DBG) {
197            Log.d(TAG, "Starting HvacTestFragment");
198        }
199
200        return v;
201    }
202
203    public void setHvacManager(CarHvacManager hvacManager) {
204        Log.d(TAG, "setHvacManager()");
205        mCarHvacManager = hvacManager;
206    }
207
208    private void configureAcOn(View v, CarHvacBaseProperty prop) {
209        mZoneForAcOn = VehicleZoneUtil.getFirstZone(prop.getZones());
210        mTbAc = (ToggleButton)v.findViewById(R.id.tbAc);
211        mTbAc.setEnabled(true);
212        mTbAc.setOnClickListener(new View.OnClickListener() {
213            public void onClick(View v) {
214                // TODO handle zone properly
215                mCarHvacManager.setBooleanProperty(CarHvacManager.HVAC_ZONED_AC_ON, mZoneForAcOn,
216                        mTbAc.isChecked());
217            }
218        });
219    }
220
221    private void configureFanPosition(View v, CarHvacBaseProperty prop) {
222        mZoneForFanPosition = VehicleZoneUtil.getFirstZone(prop.getZones());
223        RadioGroup rg = (RadioGroup)v.findViewById(R.id.rgFanPosition);
224        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
225            @Override
226            public void onCheckedChanged(RadioGroup group, int checkedId) {
227                switch(checkedId) {
228                    case R.id.rbPositionFace:
229                        mCarHvacManager.setIntProperty(CarHvacManager.HVAC_ZONED_FAN_POSITION,
230                                mZoneForFanPosition,
231                                VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FACE);
232                        break;
233                    case R.id.rbPositionFloor:
234                        mCarHvacManager.setIntProperty(CarHvacManager.HVAC_ZONED_FAN_POSITION,
235                                mZoneForFanPosition,
236                                VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FLOOR);
237                        break;
238                    case R.id.rbPositionFaceAndFloor:
239                        mCarHvacManager.setIntProperty(CarHvacManager.HVAC_ZONED_FAN_POSITION,
240                                mZoneForFanPosition,
241                                VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR);
242                        break;
243                }
244            }
245        });
246
247        mRbFanPositionFace = (RadioButton)v.findViewById(R.id.rbPositionFace);
248        mRbFanPositionFace.setClickable(true);
249        mRbFanPositionFloor = (RadioButton)v.findViewById(R.id.rbPositionFloor);
250        mRbFanPositionFaceAndFloor = (RadioButton)v.findViewById(R.id.rbPositionFaceAndFloor);
251        mRbFanPositionFaceAndFloor.setClickable(true);
252        mRbFanPositionFloor.setClickable(true);
253    }
254
255    private void configureFanSpeed(View v, CarHvacBaseProperty prop) {
256        mZoneForFanSpeed = VehicleZoneUtil.getFirstZone(prop.getZones());
257        mCurFanSpeed = mCarHvacManager.getIntProperty(
258                CarHvacManager.HVAC_ZONED_FAN_SPEED_SETPOINT,
259                mZoneForFanSpeed);
260
261        Button btnFanSpeedUp = (Button) v.findViewById(R.id.btnFanSpeedUp);
262        btnFanSpeedUp.setEnabled(true);
263        btnFanSpeedUp.setOnClickListener(new View.OnClickListener() {
264            public void onClick(View v) {
265                if(mCurFanSpeed < 7) {
266                    mCurFanSpeed++;
267                    mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
268                    mCarHvacManager.setIntProperty(CarHvacManager.HVAC_ZONED_FAN_SPEED_SETPOINT,
269                            mZoneForFanSpeed, mCurFanSpeed);
270                }
271            }
272        });
273
274        Button btnFanSpeedDn = (Button) v.findViewById(R.id.btnFanSpeedDn);
275        btnFanSpeedDn.setEnabled(true);
276        btnFanSpeedDn.setOnClickListener(new View.OnClickListener() {
277            public void onClick(View v) {
278                if (mCurFanSpeed > 1) {
279                    mCurFanSpeed--;
280                    mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
281                    mCarHvacManager.setIntProperty(CarHvacManager.HVAC_ZONED_FAN_SPEED_SETPOINT,
282                            mZoneForFanSpeed, mCurFanSpeed);
283                }
284            }
285        });
286    }
287
288    private void configureTempSetpoint(View v, CarHvacBaseProperty prop) {
289        mZoneForSetTempD = 0;
290        if ((prop.getZones() & VehicleZone.VEHICLE_ZONE_ROW_1_LEFT) != 0) {
291            mZoneForSetTempD = VehicleZone.VEHICLE_ZONE_ROW_1_LEFT;
292        }
293        mZoneForSetTempP = 0;
294        if ((prop.getZones() & VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT) != 0) {
295            mZoneForSetTempP = VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT;
296        }
297        if (mZoneForSetTempD == 0) {
298            mZoneForSetTempD = VehicleZoneUtil.getFirstZone(prop.getZones());
299        }
300        if (mZoneForSetTempP == 0) {
301            mZoneForSetTempP = VehicleZoneUtil.getNextZone(prop.getZones(), mZoneForSetTempD);
302        }
303        int numZones = VehicleZoneUtil.getNumBerOfZones(prop.getZones());
304        if (numZones < 2) {
305            mZoneForSetTempP = 0;
306        }
307        Button btnDTempUp = (Button) v.findViewById(R.id.btnDTempUp);
308        if (mZoneForSetTempD != 0) {
309            mCurDTemp = mCarHvacManager.getFloatProperty(
310                    CarHvacManager.HVAC_ZONED_TEMP_SETPOINT,
311                    mZoneForSetTempD);
312            btnDTempUp.setEnabled(true);
313            btnDTempUp.setOnClickListener(new View.OnClickListener() {
314                public void onClick(View v) {
315                    if(mCurDTemp < 29.5) {
316                        mCurDTemp += 0.5;
317                        mTvDTemp.setText(String.valueOf(mCurDTemp));
318                        mCarHvacManager.setFloatProperty(CarHvacManager.HVAC_ZONED_TEMP_SETPOINT,
319                                mZoneForSetTempD, mCurDTemp);
320                    }
321                }
322            });
323
324            Button btnDTempDn = (Button) v.findViewById(R.id.btnDTempDn);
325            btnDTempDn.setEnabled(true);
326            btnDTempDn.setOnClickListener(new View.OnClickListener() {
327                public void onClick(View v) {
328                    if(mCurDTemp > 15.5) {
329                        mCurDTemp -= 0.5;
330                        mTvDTemp.setText(String.valueOf(mCurDTemp));
331                        mCarHvacManager.setFloatProperty(CarHvacManager.HVAC_ZONED_TEMP_SETPOINT,
332                                mZoneForSetTempD, mCurDTemp);
333                    }
334                }
335            });
336        } else {
337            btnDTempUp.setEnabled(false);
338        }
339
340        Button btnPTempUp = (Button) v.findViewById(R.id.btnPTempUp);
341        if (mZoneForSetTempP !=0 ) {
342            mCurPTemp = mCarHvacManager.getFloatProperty(
343                    CarHvacManager.HVAC_ZONED_TEMP_SETPOINT,
344                    mZoneForSetTempP);
345            btnPTempUp.setEnabled(true);
346            btnPTempUp.setOnClickListener(new View.OnClickListener() {
347                public void onClick(View v) {
348                    if (mCurPTemp < 29.5) {
349                        mCurPTemp += 0.5;
350                        mTvPTemp.setText(String.valueOf(mCurPTemp));
351                        mCarHvacManager.setFloatProperty(CarHvacManager.HVAC_ZONED_TEMP_SETPOINT,
352                                mZoneForSetTempP, mCurPTemp);
353                    }
354                }
355            });
356
357            Button btnPTempDn = (Button) v.findViewById(R.id.btnPTempDn);
358            btnPTempDn.setEnabled(true);
359            btnPTempDn.setOnClickListener(new View.OnClickListener() {
360                public void onClick(View v) {
361                    if (mCurPTemp > 15.5) {
362                        mCurPTemp -= 0.5;
363                        mTvPTemp.setText(String.valueOf(mCurPTemp));
364                        mCarHvacManager.setFloatProperty(CarHvacManager.HVAC_ZONED_TEMP_SETPOINT,
365                                mZoneForSetTempP, mCurPTemp);
366                    }
367                }
368            });
369        } else {
370            btnPTempUp.setEnabled(false);
371        }
372    }
373
374    private void configureDefrosterOn(View v, int zone) {
375        if((zone & VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD) ==
376                VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD) {
377            mTbDefrostFront = (ToggleButton)v.findViewById(R.id.tbDefrostFront);
378            mTbDefrostFront.setEnabled(true);
379            mTbDefrostFront.setOnClickListener(new View.OnClickListener() {
380                public void onClick(View v) {
381                    mCarHvacManager.setBooleanProperty(CarHvacManager.HVAC_WINDOW_DEFROSTER_ON,
382                            VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD,
383                            mTbDefrostFront.isChecked());
384                }
385            });
386        }
387        if((zone & VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD) ==
388                VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD) {
389            mTbDefrostRear = (ToggleButton)v.findViewById(R.id.tbDefrostRear);
390            mTbDefrostRear.setEnabled(true);
391            mTbDefrostRear.setOnClickListener(new View.OnClickListener() {
392                public void onClick(View v) {
393                    mCarHvacManager.setBooleanProperty(CarHvacManager.HVAC_WINDOW_DEFROSTER_ON,
394                            VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD,
395                            mTbDefrostRear.isChecked());
396                }
397            });
398        }
399    }
400}
401
402