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 { 391e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value); 401e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 411e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 421e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private Listener mListener; 431e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private boolean mTracking; 441e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 4575362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato private CompoundButton mToggle; 461e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private SeekBar mSlider; 471e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private TextView mLabel; 481e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 491e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public ToggleSlider(Context context) { 501e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato this(context, null); 511e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 521e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 531e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public ToggleSlider(Context context, AttributeSet attrs) { 541e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato this(context, attrs, 0); 551e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 561e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 571e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public ToggleSlider(Context context, AttributeSet attrs, int defStyle) { 581e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato super(context, attrs, defStyle); 591e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato View.inflate(context, R.layout.status_bar_toggle_slider, this); 601e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 6175362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato final Resources res = context.getResources(); 6275362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ToggleSlider, 6375362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato defStyle, 0); 6475362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato 6575362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato mToggle = (CompoundButton)findViewById(R.id.toggle); 661e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mToggle.setOnCheckedChangeListener(this); 6775362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato mToggle.setBackgroundDrawable(res.getDrawable(R.drawable.status_bar_toggle_button)); 681e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 691e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider = (SeekBar)findViewById(R.id.slider); 701e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setOnSeekBarChangeListener(this); 711e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 721e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mLabel = (TextView)findViewById(R.id.label); 7375362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato mLabel.setText(a.getString(R.styleable.ToggleSlider_text)); 7475362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato 7575362101ac12a15c111f249ade5e7d15787d9e81Joe Onorato a.recycle(); 761e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 771e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 781e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onCheckedChanged(CompoundButton toggle, boolean checked) { 791e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato Drawable thumb; 804b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato Drawable slider; 811e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato final Resources res = getContext().getResources(); 821e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (checked) { 83e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler thumb = res.getDrawable( 84e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler com.android.internal.R.drawable.scrubber_control_disabled_holo); 85e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler slider = res.getDrawable( 86e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler R.drawable.status_bar_settings_slider_disabled); 871e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } else { 88e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler thumb = res.getDrawable( 89e989b32b3a8afec1146b741f7a5d79550e3768a4Daniel Sandler com.android.internal.R.drawable.scrubber_control_selector_holo); 904b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato slider = res.getDrawable( 914b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato com.android.internal.R.drawable.scrubber_progress_horizontal_holo_dark); 921e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 931e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setThumb(thumb); 944b0912d4903d81e7ce8a45dd694b1ae01fe438c1Joe Onorato mSlider.setProgressDrawable(slider); 951e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 961e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 971e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, checked, mSlider.getProgress()); 981e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 991e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1001e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1011e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 1021e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1031e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, mToggle.isChecked(), progress); 1041e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1051e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1061e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1071e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onStartTrackingTouch(SeekBar seekBar) { 1081e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mTracking = true; 1091e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1101e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress()); 1111e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1121e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mToggle.setChecked(false); 1131e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1141e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1151e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onStopTrackingTouch(SeekBar seekBar) { 1161e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mTracking = false; 1171e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mListener != null) { 1181e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress()); 1191e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1201e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1211e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1221e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setOnChangedListener(Listener l) { 1231e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mListener = l; 1241e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1251e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1261e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setChecked(boolean checked) { 1271e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mToggle.setChecked(checked); 1281e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1291e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1301e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public boolean isChecked() { 1311e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato return mToggle.isChecked(); 1321e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1331e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1341e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setMax(int max) { 1351e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setMax(max); 1361e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1371e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 1381e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void setValue(int value) { 1391e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mSlider.setProgress(value); 1401e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 1411e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato} 1421e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 143