ToggleSlider.java revision e989b32b3a8afec1146b741f7a5d79550e3768a4
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