ToggleSlider.java revision 890e1892feac29b5bfe9b5f172a006e161e588d2
1/* 2 * Copyright (C) 2013 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.android.systemui.settings; 18 19import android.content.Context; 20import android.content.res.Resources; 21import android.content.res.TypedArray; 22import android.util.AttributeSet; 23import android.view.View; 24import android.widget.CompoundButton; 25import android.widget.CompoundButton.OnCheckedChangeListener; 26import android.widget.RelativeLayout; 27import android.widget.SeekBar; 28import android.widget.SeekBar.OnSeekBarChangeListener; 29import android.widget.TextView; 30 31import com.android.systemui.R; 32 33public class ToggleSlider extends RelativeLayout { 34 public interface Listener { 35 public void onInit(ToggleSlider v); 36 public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value); 37 } 38 39 private Listener mListener; 40 private boolean mTracking; 41 42 private CompoundButton mToggle; 43 private SeekBar mSlider; 44 private TextView mLabel; 45 46 public ToggleSlider(Context context) { 47 this(context, null); 48 } 49 50 public ToggleSlider(Context context, AttributeSet attrs) { 51 this(context, attrs, 0); 52 } 53 54 public ToggleSlider(Context context, AttributeSet attrs, int defStyle) { 55 super(context, attrs, defStyle); 56 57 View.inflate(context, R.layout.status_bar_toggle_slider, this); 58 59 final Resources res = context.getResources(); 60 final TypedArray a = context.obtainStyledAttributes( 61 attrs, R.styleable.ToggleSlider, defStyle, 0); 62 63 mToggle = (CompoundButton) findViewById(R.id.toggle); 64 mToggle.setOnCheckedChangeListener(mCheckListener); 65 66 mSlider = (SeekBar) findViewById(R.id.slider); 67 mSlider.setOnSeekBarChangeListener(mSeekListener); 68 69 mLabel = (TextView) findViewById(R.id.label); 70 mLabel.setText(a.getString(R.styleable.ToggleSlider_text)); 71 72 a.recycle(); 73 } 74 75 @Override 76 protected void onAttachedToWindow() { 77 super.onAttachedToWindow(); 78 if (mListener != null) { 79 mListener.onInit(this); 80 } 81 } 82 83 public void setOnChangedListener(Listener l) { 84 mListener = l; 85 } 86 87 public void setChecked(boolean checked) { 88 mToggle.setChecked(checked); 89 } 90 91 public boolean isChecked() { 92 return mToggle.isChecked(); 93 } 94 95 public void setMax(int max) { 96 mSlider.setMax(max); 97 } 98 99 public void setValue(int value) { 100 mSlider.setProgress(value); 101 } 102 103 private final OnCheckedChangeListener mCheckListener = new OnCheckedChangeListener() { 104 @Override 105 public void onCheckedChanged(CompoundButton toggle, boolean checked) { 106 mSlider.setEnabled(!checked); 107 108 if (mListener != null) { 109 mListener.onChanged( 110 ToggleSlider.this, mTracking, checked, mSlider.getProgress()); 111 } 112 } 113 }; 114 115 private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() { 116 @Override 117 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 118 if (mListener != null) { 119 mListener.onChanged( 120 ToggleSlider.this, mTracking, mToggle.isChecked(), progress); 121 } 122 } 123 124 @Override 125 public void onStartTrackingTouch(SeekBar seekBar) { 126 mTracking = true; 127 128 if (mListener != null) { 129 mListener.onChanged( 130 ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress()); 131 } 132 133 mToggle.setChecked(false); 134 } 135 136 @Override 137 public void onStopTrackingTouch(SeekBar seekBar) { 138 mTracking = false; 139 140 if (mListener != null) { 141 mListener.onChanged( 142 ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress()); 143 } 144 } 145 }; 146} 147 148