141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio/*
241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * Copyright (C) 2014 The Android Open Source Project
341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio *
441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License");
541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * you may not use this file except in compliance with the License.
641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * You may obtain a copy of the License at
741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio *
841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio *      http://www.apache.org/licenses/LICENSE-2.0
941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio *
1041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * Unless required by applicable law or agreed to in writing, software
1141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS,
1241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * See the License for the specific language governing permissions and
1441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio * limitations under the License.
1541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio */
1641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
1741937766981423c9252e12e3319b2e7532739627Fabrice Di Megliopackage com.android.settings.widget;
1841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
1941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.content.Context;
201b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglioimport android.content.res.TypedArray;
21138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglioimport android.os.Parcel;
22138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglioimport android.os.Parcelable;
2341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.util.AttributeSet;
241b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglioimport android.util.TypedValue;
2541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.view.LayoutInflater;
2641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.view.View;
271b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglioimport android.view.ViewGroup;
2841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.widget.CompoundButton;
2941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.widget.LinearLayout;
3041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
3141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.widget.Switch;
3241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport android.widget.TextView;
3341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport com.android.settings.R;
3441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
3541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport java.util.ArrayList;
3641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
37e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Megliopublic class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedChangeListener,
38e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio        View.OnClickListener {
3941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
4041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public static interface OnSwitchChangeListener {
4141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        /**
4241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio         * Called when the checked state of the Switch has changed.
4341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio         *
4441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio         * @param switchView The Switch view whose state has changed.
4541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio         * @param isChecked  The new checked state of switchView.
4641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio         */
4741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        void onSwitchChanged(Switch switchView, boolean isChecked);
4841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
4941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
501b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio    private ToggleSwitch mSwitch;
511b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio    private TextView mTextView;
521b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio
531b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio    private ArrayList<OnSwitchChangeListener> mSwitchChangeListeners =
541b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio            new ArrayList<OnSwitchChangeListener>();
551b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio
561b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio    private static int[] MARGIN_ATTRIBUTES = {
571b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio            R.attr.switchBarMarginStart, R.attr.switchBarMarginEnd};
581b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio
5941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public SwitchBar(Context context) {
6041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        this(context, null);
6141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
6241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
6341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public SwitchBar(Context context, AttributeSet attrs) {
6441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        this(context, attrs, 0);
6541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
6641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
6741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public SwitchBar(Context context, AttributeSet attrs, int defStyleAttr) {
6841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        this(context, attrs, defStyleAttr, 0);
6941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
7041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
7141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public SwitchBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
7241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        super(context, attrs, defStyleAttr, defStyleRes);
7341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
7441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        LayoutInflater.from(context).inflate(R.layout.switch_bar, this);
7541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
761b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        final TypedArray a = context.obtainStyledAttributes(attrs, MARGIN_ATTRIBUTES);
771b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        int switchBarMarginStart = (int) a.getDimension(0, 0);
781b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        int switchBarMarginEnd = (int) a.getDimension(1, 0);
791b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        a.recycle();
801b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio
8141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        mTextView = (TextView) findViewById(R.id.switch_text);
8241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        mTextView.setText(R.string.switch_off_text);
831b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        ViewGroup.MarginLayoutParams lp = (MarginLayoutParams) mTextView.getLayoutParams();
841b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        lp.setMarginStart(switchBarMarginStart);
8541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
866220275d6dec8ffc6f1df2cbfbf42934d09d41f0Fabrice Di Meglio        mSwitch = (ToggleSwitch) findViewById(R.id.switch_widget);
87d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio        // Prevent onSaveInstanceState() to be called as we are managing the state of the Switch
88d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio        // on our own
89d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio        mSwitch.setSaveEnabled(false);
901b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        lp = (MarginLayoutParams) mSwitch.getLayoutParams();
911b18665dbc49663f290859ce9cdf3237b8a30b7cFabrice Di Meglio        lp.setMarginEnd(switchBarMarginEnd);
9241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
9341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        addOnSwitchChangeListener(new OnSwitchChangeListener() {
9441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio            @Override
9541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio            public void onSwitchChanged(Switch switchView, boolean isChecked) {
96138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                setTextViewLabel(isChecked);
9741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio            }
9841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        });
9941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
100e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio        setOnClickListener(this);
101e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio
10241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        // Default is hide
10341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        setVisibility(View.GONE);
10441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
10541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
106138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public void setTextViewLabel(boolean isChecked) {
107138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        mTextView.setText(isChecked ? R.string.switch_on_text : R.string.switch_off_text);
108138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
109138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
110138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public void setChecked(boolean checked) {
111138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        setTextViewLabel(checked);
112138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        mSwitch.setChecked(checked);
113138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
114138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
115006b2cca1311e61472a8b66fb0c50854fc36d2e7Fabrice Di Meglio    public void setCheckedInternal(boolean checked) {
116006b2cca1311e61472a8b66fb0c50854fc36d2e7Fabrice Di Meglio        setTextViewLabel(checked);
117006b2cca1311e61472a8b66fb0c50854fc36d2e7Fabrice Di Meglio        mSwitch.setCheckedInternal(checked);
118006b2cca1311e61472a8b66fb0c50854fc36d2e7Fabrice Di Meglio    }
119006b2cca1311e61472a8b66fb0c50854fc36d2e7Fabrice Di Meglio
120138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public boolean isChecked() {
121138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        return mSwitch.isChecked();
122138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
123138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
124138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public void setEnabled(boolean enabled) {
125138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        super.setEnabled(enabled);
126138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        mTextView.setEnabled(enabled);
127b18e2423667b132d8de428fdbdb32572a1befe62Lifu Tang        mSwitch.setEnabled(enabled);
128138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
129138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
130138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public final ToggleSwitch getSwitch() {
13141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        return mSwitch;
13241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
13341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
13441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public void show() {
135138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        if (!isShowing()) {
136138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            setVisibility(View.VISIBLE);
137138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            mSwitch.setOnCheckedChangeListener(this);
138138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        }
13941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
14041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
14141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public void hide() {
142138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        if (isShowing()) {
143138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            setVisibility(View.GONE);
144138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            mSwitch.setOnCheckedChangeListener(null);
145138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        }
14641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
14741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
14841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public boolean isShowing() {
14941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        return (getVisibility() == View.VISIBLE);
15041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
15141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
15241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    @Override
153e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio    public void onClick(View v) {
154e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio        final boolean isChecked = !mSwitch.isChecked();
155d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio        setChecked(isChecked);
156e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio    }
157e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio
158e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio    public void propagateChecked(boolean isChecked) {
15941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        final int count = mSwitchChangeListeners.size();
16041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        for (int n = 0; n < count; n++) {
161e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio            mSwitchChangeListeners.get(n).onSwitchChanged(mSwitch, isChecked);
16241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        }
16341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
16441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
165e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio    @Override
166e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
167e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio        propagateChecked(isChecked);
168e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio    }
169e9cb75c636234e44c94b38a877f3c60091d907dcFabrice Di Meglio
17041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public void addOnSwitchChangeListener(OnSwitchChangeListener listener) {
17141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        if (mSwitchChangeListeners.contains(listener)) {
17241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio            throw new IllegalStateException("Cannot add twice the same OnSwitchChangeListener");
17341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        }
17441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        mSwitchChangeListeners.add(listener);
17541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
17641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio
17741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    public void removeOnSwitchChangeListener(OnSwitchChangeListener listener) {
17841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        if (!mSwitchChangeListeners.contains(listener)) {
17941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio            throw new IllegalStateException("Cannot remove OnSwitchChangeListener");
18041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        }
18141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio        mSwitchChangeListeners.remove(listener);
18241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio    }
183138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
184138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    static class SavedState extends BaseSavedState {
185138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        boolean checked;
186138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        boolean visible;
187138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
188138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        SavedState(Parcelable superState) {
189138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            super(superState);
190138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        }
191138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
192138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        /**
193138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio         * Constructor called from {@link #CREATOR}
194138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio         */
195138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        private SavedState(Parcel in) {
196138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            super(in);
197138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            checked = (Boolean)in.readValue(null);
198138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            visible = (Boolean)in.readValue(null);
199138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        }
200138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
201138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        @Override
202138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        public void writeToParcel(Parcel out, int flags) {
203138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            super.writeToParcel(out, flags);
204138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            out.writeValue(checked);
205138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            out.writeValue(visible);
206138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        }
207138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
208138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        @Override
209138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        public String toString() {
210138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            return "SwitchBar.SavedState{"
211138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                    + Integer.toHexString(System.identityHashCode(this))
212138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                    + " checked=" + checked
213138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                    + " visible=" + visible + "}";
214138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        }
215138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
216138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        public static final Parcelable.Creator<SavedState> CREATOR
217138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                = new Parcelable.Creator<SavedState>() {
218138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            public SavedState createFromParcel(Parcel in) {
219138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                return new SavedState(in);
220138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            }
221138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
222138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            public SavedState[] newArray(int size) {
223138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                return new SavedState[size];
224138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            }
225138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        };
226138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
227138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
228138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    @Override
229138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public Parcelable onSaveInstanceState() {
230138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        Parcelable superState = super.onSaveInstanceState();
231138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
232138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        SavedState ss = new SavedState(superState);
233138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        ss.checked = mSwitch.isChecked();
234138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        ss.visible = isShowing();
235138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        return ss;
236138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
237138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
238138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    @Override
239138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public void onRestoreInstanceState(Parcelable state) {
240138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        SavedState ss = (SavedState) state;
241138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
242138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        super.onRestoreInstanceState(ss.getSuperState());
243d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio
244d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio        mSwitch.setCheckedInternal(ss.checked);
245138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        setTextViewLabel(ss.checked);
246138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        setVisibility(ss.visible ? View.VISIBLE : View.GONE);
247d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio        mSwitch.setOnCheckedChangeListener(ss.visible ? this : null);
248d2b1e441b7314640b2c51ca367c6cc3925147a81Fabrice Di Meglio
249138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        requestLayout();
250138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    }
25141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio}
252