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