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