11e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato/* 21e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * Copyright (C) 2010 The Android Open Source Project 31e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * 41e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 51e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * you may not use this file except in compliance with the License. 61e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * You may obtain a copy of the License at 71e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * 81e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 91e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * 101e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * Unless required by applicable law or agreed to in writing, software 111e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 121e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * See the License for the specific language governing permissions and 141e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * limitations under the License. 151e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato */ 161e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 171e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratopackage com.android.systemui.statusbar.policy; 181e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 191e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.content.Context; 201e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.content.res.Resources; 2175362101ac12a15c111f249ade5e7d15787d9e81Joe Onoratoimport android.content.res.TypedArray; 221e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.graphics.drawable.Drawable; 231e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.util.AttributeSet; 241e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.util.Slog; 251e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.view.View; 261e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.widget.CompoundButton; 274b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onoratoimport android.widget.ProgressBar; 281e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.widget.RelativeLayout; 291e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.widget.SeekBar; 301e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.widget.TextView; 311e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 321e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport com.android.systemui.R; 331e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 341e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratopublic class ToggleSlider extends RelativeLayout 351e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato implements CompoundButton.OnCheckedChangeListener, SeekBar.OnSeekBarChangeListener { 361e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private static final String TAG = "StatusBar.ToggleSlider"; 371e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 381e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public interface Listener { 3948f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock public void onInit(ToggleSlider v); 401e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value); 411e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 421e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 431e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private Listener mListener; 441e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private boolean mTracking; 451e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 4675362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato private CompoundButton mToggle; 471e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private SeekBar mSlider; 481e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private TextView mLabel; 491e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 501e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public ToggleSlider(Context context) { 511e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato this(context, null); 521e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 531e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 541e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public ToggleSlider(Context context, AttributeSet attrs) { 551e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato this(context, attrs, 0); 561e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 571e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 581e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public ToggleSlider(Context context, AttributeSet attrs, int defStyle) { 591e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato super(context, attrs, defStyle); 601e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato View.inflate(context, R.layout.status_bar_toggle_slider, this); 611e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 6275362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato final Resources res = context.getResources(); 6375362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ToggleSlider, 6475362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato defStyle, 0); 6575362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato 6675362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato mToggle = (CompoundButton)findViewById(R.id.toggle); 671e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mToggle.setOnCheckedChangeListener(this); 6875362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato mToggle.setBackgroundDrawable(res.getDrawable(R.drawable.status_bar_toggle_button)); 691e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 701e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider = (SeekBar)findViewById(R.id.slider); 711e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setOnSeekBarChangeListener(this); 721e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 731e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mLabel = (TextView)findViewById(R.id.label); 7475362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato mLabel.setText(a.getString(R.styleable.ToggleSlider_text)); 7575362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato 7675362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato a.recycle(); 771e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 781e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 7948f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock @Override 8048f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock protected void onAttachedToWindow() { 8148f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock super.onAttachedToWindow(); 8248f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock if (mListener != null) { 8348f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock mListener.onInit(this); 8448f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock } 8548f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock } 8648f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock 871e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onCheckedChanged(CompoundButton toggle, boolean checked) { 881e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato Drawable thumb; 894b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato Drawable slider; 901e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato final Resources res = getContext().getResources(); 911e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (checked) { 92e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler thumb = res.getDrawable( 93e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler com.android.internal.R.drawable.scrubber_control_disabled_holo); 94e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler slider = res.getDrawable( 95e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler R.drawable.status_bar_settings_slider_disabled); 961e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } else { 97e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler thumb = res.getDrawable( 98e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler com.android.internal.R.drawable.scrubber_control_selector_holo); 994b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato slider = res.getDrawable( 1004b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato com.android.internal.R.drawable.scrubber_progress_horizontal_holo_dark); 1011e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1021e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setThumb(thumb); 1034b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato mSlider.setProgressDrawable(slider); 1041e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1051e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1061e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, checked, mSlider.getProgress()); 1071e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1081e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1091e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1101e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 1111e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1121e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, mToggle.isChecked(), progress); 1131e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1141e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1151e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1161e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onStartTrackingTouch(SeekBar seekBar) { 1171e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mTracking = true; 1181e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1191e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress()); 1201e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1211e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mToggle.setChecked(false); 1221e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1231e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1241e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onStopTrackingTouch(SeekBar seekBar) { 1251e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mTracking = false; 1261e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1271e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress()); 1281e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1291e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1301e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1311e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setOnChangedListener(Listener l) { 1321e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener = l; 1331e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1341e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1351e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setChecked(boolean checked) { 1361e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mToggle.setChecked(checked); 1371e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1381e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1391e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public boolean isChecked() { 1401e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato return mToggle.isChecked(); 1411e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1421e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1431e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setMax(int max) { 1441e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setMax(max); 1451e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1461e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1471e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setValue(int value) { 1481e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setProgress(value); 1491e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1501e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato} 1511e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 152