Home | History | Annotate | Download | only in controllers
      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.util.Log;
     19 import com.android.car.hvac.HvacController;
     20 import com.android.car.hvac.ui.FanSpeedBar;
     21 
     22 /**
     23  * Controller for the fan speed bar to adjust fan speed.
     24  */
     25 public class FanSpeedBarController {
     26     private final static String TAG = "FanSpeedBarCtrl";
     27 
     28     private final FanSpeedBar mFanSpeedBar;
     29     private final HvacController mHvacController;
     30     private int mCurrentFanSpeed;
     31 
     32     // Note the following are car specific values.
     33     private static final int MAX_FAN_SPEED = 6;
     34     private static final int MIN_FAN_SPEED = 1;
     35 
     36     public FanSpeedBarController(FanSpeedBar speedBar, HvacController controller) {
     37         mFanSpeedBar = speedBar;
     38         mHvacController = controller;
     39         initialize();
     40     }
     41 
     42     private void initialize() {
     43         mFanSpeedBar.setFanspeedButtonClickListener(mClickListener);
     44         mHvacController.registerCallback(mCallback);
     45         // During initialization, we do not need to animate the changes.
     46         handleFanSpeedUpdate(mHvacController.getFanSpeed(), false /* animateUpdate */);
     47     }
     48 
     49     private void handleFanSpeedUpdate(int speed, boolean animateUpdate) {
     50         if (Log.isLoggable(TAG, Log.DEBUG)) {
     51             Log.d(TAG, "Fan speed bar being set to value: " + speed);
     52         }
     53 
     54         mCurrentFanSpeed = speed;
     55         if (mCurrentFanSpeed == MIN_FAN_SPEED) {
     56             mFanSpeedBar.setOff();
     57         } else if (mCurrentFanSpeed >= MAX_FAN_SPEED) {
     58             mFanSpeedBar.setMax();
     59         } else if (mCurrentFanSpeed < MAX_FAN_SPEED && mCurrentFanSpeed > MIN_FAN_SPEED) {
     60             // Note car specific values being used:
     61             // The lowest fanspeed is represented by the off button, the first segment
     62             // actually represents the second fan speed setting.
     63             if (animateUpdate) {
     64                 mFanSpeedBar.animateToSpeedSegment(mCurrentFanSpeed - 1);
     65             } else {
     66                 mFanSpeedBar.setSpeedSegment(mCurrentFanSpeed - 1);
     67             }
     68         }
     69     }
     70 
     71     private FanSpeedBar.FanSpeedButtonClickListener mClickListener
     72             = new FanSpeedBar.FanSpeedButtonClickListener() {
     73         @Override
     74         public void onMaxButtonClicked() {
     75             mHvacController.setFanSpeed(MAX_FAN_SPEED);
     76         }
     77 
     78         @Override
     79         public void onOffButtonClicked() {
     80             mHvacController.setFanSpeed(MIN_FAN_SPEED);
     81         }
     82 
     83         @Override
     84         public void onFanSpeedSegmentClicked(int position) {
     85             // Note car specific values being used:
     86             // The lowest fanspeed is represented by the off button, the first segment
     87             // actually represents the second fan speed setting.
     88             mHvacController.setFanSpeed(position + 1);
     89         }
     90     };
     91 
     92     private HvacController.Callback mCallback = new HvacController.Callback() {
     93         @Override
     94         public void onFanSpeedChange(int speed) {
     95             handleFanSpeedUpdate(speed, true /* animateUpdate */);
     96         }
     97     };
     98 }
     99