blob: 9df731e50c07b3321fdcf842c2e40cb5133952c9 [file] [log] [blame]
/*
* 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));
}
};
}