16904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/* 26904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Copyright (C) 2015 The Android Open Source Project 36904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 46904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 56904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * you may not use this file except in compliance with the License. 66904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * You may obtain a copy of the License at 76904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 86904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 96904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Unless required by applicable law or agreed to in writing, software 116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * See the License for the specific language governing permissions and 146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * limitations under the License 156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpackage android.support.v7.preference; 186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.Context; 206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.res.TypedArray; 216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.os.Parcel; 226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.os.Parcelable; 236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.text.TextUtils; 246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.util.AttributeSet; 256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.View; 266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.TextView; 276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/** 296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Common base class for preferences that have two selectable states, persist a 306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * boolean value in SharedPreferences, and may have dependent preferences that are 316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * enabled/disabled based on the current state. 326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpublic abstract class TwoStatePreference extends Preference { 346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private CharSequence mSummaryOn; 366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private CharSequence mSummaryOff; 376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean mChecked; 386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mCheckedSet; 396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mDisableDependentsState; 406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference( 426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(context, attrs, defStyleAttr, defStyleRes); 446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference(Context context, AttributeSet attrs, int defStyleAttr) { 476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, defStyleAttr, 0); 486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference(Context context, AttributeSet attrs) { 516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, 0); 526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference(Context context) { 556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, null); 566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onClick() { 606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onClick(); 616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final boolean newValue = !isChecked(); 636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (callChangeListener(newValue)) { 646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setChecked(newValue); 656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 694c867cf4f0537d940d512aad679acacbcdf16765Tony Mantler * Sets the checked state and saves it to the {@link android.content.SharedPreferences}. 706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param checked The checked state. 726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setChecked(boolean checked) { 746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Always persist/notify the first time; don't assume the field's default of false. 756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final boolean changed = mChecked != checked; 766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (changed || !mCheckedSet) { 776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mChecked = checked; 786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mCheckedSet = true; 796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler persistBoolean(checked); 806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (changed) { 816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyDependencyChange(shouldDisableDependents()); 826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the checked state. 896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The checked state. 916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean isChecked() { 936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mChecked; 946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean shouldDisableDependents() { 986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler boolean shouldDisable = mDisableDependentsState ? mChecked : !mChecked; 996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return shouldDisable || super.shouldDisableDependents(); 1006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the summary to be shown when checked. 1046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summary The summary to be shown when checked. 1066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOn(CharSequence summary) { 1086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mSummaryOn = summary; 1096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (isChecked()) { 1106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 1116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setSummaryOn(CharSequence) 1166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summaryResId The summary as a resource. 1176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOn(int summaryResId) { 1196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setSummaryOn(getContext().getString(summaryResId)); 1206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the summary to be shown when checked. 1246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The summary. 1256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CharSequence getSummaryOn() { 1276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mSummaryOn; 1286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the summary to be shown when unchecked. 1326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summary The summary to be shown when unchecked. 1346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOff(CharSequence summary) { 1366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mSummaryOff = summary; 1376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!isChecked()) { 1386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 1396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setSummaryOff(CharSequence) 1446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summaryResId The summary as a resource. 1456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOff(int summaryResId) { 1476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setSummaryOff(getContext().getString(summaryResId)); 1486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the summary to be shown when unchecked. 1526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The summary. 1536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CharSequence getSummaryOff() { 1556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mSummaryOff; 1566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns whether dependents are disabled when this preference is on ({@code true}) 1606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * or when this preference is off ({@code false}). 1616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return Whether dependents are disabled when this preference is on ({@code true}) 1636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * or when this preference is off ({@code false}). 1646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean getDisableDependentsState() { 1666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mDisableDependentsState; 1676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether dependents are disabled when this preference is on ({@code true}) 1716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * or when this preference is off ({@code false}). 1726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param disableDependentsState The preference state that should disable dependents. 1746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setDisableDependentsState(boolean disableDependentsState) { 1766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDisableDependentsState = disableDependentsState; 1776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 1806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Object onGetDefaultValue(TypedArray a, int index) { 1816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return a.getBoolean(index, false); 1826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 1856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 1866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setChecked(restoreValue ? getPersistedBoolean(mChecked) 1876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler : (Boolean) defaultValue); 1886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sync a summary holder contained within holder's subhierarchy with the correct summary text. 1926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param holder PreferenceViewHolder which holds a reference to the summary view 1936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void syncSummaryView(PreferenceViewHolder holder) { 1956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Sync the summary holder 196c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav View view = holder.findViewById(android.R.id.summary); 197c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav syncSummaryView(view); 198c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 1996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 200c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav /** 201c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav * @hide 202c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav */ 203c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav protected void syncSummaryView(View view) { 204c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!(view instanceof TextView)) { 205c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav return; 206c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 207c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav TextView summaryView = (TextView) view; 208c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav boolean useDefaultSummary = true; 209c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (mChecked && !TextUtils.isEmpty(mSummaryOn)) { 210c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setText(mSummaryOn); 211c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav useDefaultSummary = false; 212c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } else if (!mChecked && !TextUtils.isEmpty(mSummaryOff)) { 213c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setText(mSummaryOff); 214c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav useDefaultSummary = false; 215c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 216c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (useDefaultSummary) { 217c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav final CharSequence summary = getSummary(); 218c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!TextUtils.isEmpty(summary)) { 219c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setText(summary); 220c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav useDefaultSummary = false; 2216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 223c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav int newVisibility = View.GONE; 224c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!useDefaultSummary) { 225c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav // Someone has written to it 226c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav newVisibility = View.VISIBLE; 227c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 228c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (newVisibility != summaryView.getVisibility()) { 229c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setVisibility(newVisibility); 230c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 2316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 2346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Parcelable onSaveInstanceState() { 2356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final Parcelable superState = super.onSaveInstanceState(); 2366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (isPersistent()) { 2376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // No need to save instance state since it's persistent 2386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return superState; 2396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final SavedState myState = new SavedState(superState); 2426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler myState.checked = isChecked(); 2436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return myState; 2446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 2476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onRestoreInstanceState(Parcelable state) { 2486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (state == null || !state.getClass().equals(SavedState.class)) { 2496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Didn't save state for us in onSaveInstanceState 2506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onRestoreInstanceState(state); 2516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return; 2526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SavedState myState = (SavedState) state; 2556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onRestoreInstanceState(myState.getSuperState()); 2566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setChecked(myState.checked); 2576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler static class SavedState extends BaseSavedState { 2606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler boolean checked; 2616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState(Parcel source) { 2636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(source); 2646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler checked = source.readInt() == 1; 2656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 2686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void writeToParcel(Parcel dest, int flags) { 2696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.writeToParcel(dest, flags); 2706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dest.writeInt(checked ? 1 : 0); 2716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState(Parcelable superState) { 2746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(superState); 2756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public static final Parcelable.Creator<SavedState> CREATOR = 2786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler new Parcelable.Creator<SavedState>() { 2796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState createFromParcel(Parcel in) { 2806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return new SavedState(in); 2816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState[] newArray(int size) { 2846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return new SavedState[size]; 2856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler }; 2876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler} 289