/* * Copyright (c) 2016, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.car.hvac.controllers; import android.car.hardware.hvac.CarHvacManager; import android.util.Log; import android.util.SparseIntArray; import com.android.car.hvac.HvacController; import com.android.car.hvac.ui.FanDirectionButtons; /** * A controller to handle changes in the fan direction. Also maps fan directions specified * in the {@link FanDirectionButtons} to the {@link CarHvacManager}{@code #FAN_DIRECTION_*} * constants in the vehicle hardware. */ public class FanDirectionButtonsController { private static final String TAG = "FanDirectionButtonsController"; private final FanDirectionButtons mFanDirectionButtons; private final HvacController mHvacController; private final SparseIntArray mFanDirectionMap = new SparseIntArray(FanDirectionButtons.FAN_DIRECTION_COUNT); public FanDirectionButtonsController(FanDirectionButtons speedBar, HvacController controller) { mFanDirectionButtons = speedBar; mHvacController = controller; initialize(); } private void initialize() { // Note Car specific values are being used here, as not all cars have the floor // and defroster fan direction. mFanDirectionMap.put(FanDirectionButtons.FAN_DIRECTION_FACE, CarHvacManager.FAN_DIRECTION_FACE); mFanDirectionMap.put(FanDirectionButtons.FAN_DIRECTION_FACE_FLOOR, (CarHvacManager.FAN_DIRECTION_FACE | CarHvacManager.FAN_DIRECTION_FLOOR)); mFanDirectionMap.put(FanDirectionButtons.FAN_DIRECTION_FLOOR, CarHvacManager.FAN_DIRECTION_FLOOR); mFanDirectionMap.put(FanDirectionButtons.FAN_DIRECTION_FLOOR_DEFROSTER, (CarHvacManager.FAN_DIRECTION_DEFROST | CarHvacManager.FAN_DIRECTION_FLOOR)); mFanDirectionButtons.setFanDirectionClickListener(mListener); mHvacController.registerCallback(mCallback); } private final FanDirectionButtons.FanDirectionClickListener mListener = new FanDirectionButtons.FanDirectionClickListener() { @Override public void onFanDirectionClicked(@FanDirectionButtons.FanDirection int direction) { mHvacController.setFanDirection(mFanDirectionMap.get(direction)); } }; private HvacController.Callback mCallback = new HvacController.Callback() { @Override public void onFanDirectionChange(int direction) { int index = mFanDirectionMap.indexOfValue(direction); if (index == -1) { Log.w(TAG, "Unexpected fan direction: " + direction); return; } mFanDirectionButtons.setFanDirection(mFanDirectionMap.keyAt(index)); } }; }