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.ui; 17 18 import android.content.Context; 19 import android.content.res.Resources; 20 import android.graphics.drawable.Drawable; 21 import android.support.annotation.IntDef; 22 import android.util.AttributeSet; 23 import android.view.View; 24 import android.widget.ImageView; 25 import com.android.car.hvac.R; 26 27 /** 28 * A seat warmer button that has 3 heating levels. 29 */ 30 public class SeatWarmerButton extends ImageView { 31 public static final int HEAT_OFF = 0; 32 public static final int HEAT_LEVEL_ONE = 1; 33 public static final int HEAT_LEVEL_TWO = 2; 34 public static final int HEAT_LEVEL_THREE = 3; 35 36 public interface SeatWarmerButtonClickListener{ 37 void onSeatWarmerButtonClicked(@HeatingLevel int level); 38 } 39 40 @IntDef({HEAT_OFF, HEAT_LEVEL_ONE, HEAT_LEVEL_TWO, HEAT_LEVEL_THREE}) 41 public @interface HeatingLevel {} 42 43 private @HeatingLevel int mCurrentHeatSetting; 44 45 private final Drawable mStateDrawables[] = new Drawable[4]; 46 47 private SeatWarmerButtonClickListener mListener; 48 49 public SeatWarmerButton(Context context) { 50 super(context); 51 init(); 52 } 53 54 public SeatWarmerButton(Context context, AttributeSet attrs) { 55 super(context, attrs); 56 init(); 57 } 58 59 public SeatWarmerButton(Context context, AttributeSet attrs, int defStyleAttr) { 60 super(context, attrs, defStyleAttr); 61 init(); 62 } 63 64 private void init() { 65 Resources res = getResources(); 66 mStateDrawables[0] = res.getDrawable(R.drawable.ic_seat_heat_off); 67 mStateDrawables[1] = res.getDrawable(R.drawable.ic_seat_heat_level_1); 68 mStateDrawables[2] = res.getDrawable(R.drawable.ic_seat_heat_level_2); 69 mStateDrawables[3] = res.getDrawable(R.drawable.ic_seat_heat_level_3); 70 71 setOnClickListener(new OnClickListener() { 72 @Override 73 public void onClick(View v) { 74 mCurrentHeatSetting = getNextHeatSetting(mCurrentHeatSetting); 75 Drawable d = getDrawableForState(mCurrentHeatSetting); 76 setImageDrawable(d); 77 if (mListener != null) { 78 mListener.onSeatWarmerButtonClicked(mCurrentHeatSetting); 79 } 80 } 81 }); 82 } 83 84 public void setSeatWarmerClickListener(SeatWarmerButtonClickListener listener) { 85 mListener = listener; 86 } 87 88 public void setHeatLevel(@HeatingLevel int level) { 89 mCurrentHeatSetting = level; 90 setImageDrawable(getDrawableForState(mCurrentHeatSetting)); 91 } 92 93 private Drawable getDrawableForState(@HeatingLevel int level) { 94 switch (level) { 95 case HEAT_LEVEL_ONE: 96 return mStateDrawables[1]; 97 case HEAT_LEVEL_TWO: 98 return mStateDrawables[2]; 99 case HEAT_LEVEL_THREE: 100 return mStateDrawables[3]; 101 case HEAT_OFF: 102 default: 103 return mStateDrawables[0]; 104 } 105 } 106 107 private @HeatingLevel int getNextHeatSetting(@HeatingLevel int level) { 108 switch (level) { 109 case HEAT_OFF: 110 return HEAT_LEVEL_ONE; 111 case HEAT_LEVEL_ONE: 112 return HEAT_LEVEL_TWO; 113 case HEAT_LEVEL_TWO: 114 return HEAT_LEVEL_THREE; 115 case HEAT_LEVEL_THREE: 116 return HEAT_OFF; 117 default: 118 return HEAT_OFF; 119 } 120 } 121 } 122