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