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; 23c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo; 246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.text.TextUtils; 256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.util.AttributeSet; 266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.View; 276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.TextView; 286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 29c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport static android.support.annotation.RestrictTo.Scope.GROUP_ID; 30c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viverette 316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/** 326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Common base class for preferences that have two selectable states, persist a 336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * boolean value in SharedPreferences, and may have dependent preferences that are 346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * enabled/disabled based on the current state. 356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpublic abstract class TwoStatePreference extends Preference { 376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private CharSequence mSummaryOn; 396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private CharSequence mSummaryOff; 406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean mChecked; 416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mCheckedSet; 426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mDisableDependentsState; 436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference( 456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(context, attrs, defStyleAttr, defStyleRes); 476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference(Context context, AttributeSet attrs, int defStyleAttr) { 506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, defStyleAttr, 0); 516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference(Context context, AttributeSet attrs) { 546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, 0); 556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public TwoStatePreference(Context context) { 586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, null); 596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onClick() { 636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onClick(); 646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final boolean newValue = !isChecked(); 666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (callChangeListener(newValue)) { 676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setChecked(newValue); 686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 724c867cf4f0537d940d512aad679acacbcdf16765Tony Mantler * Sets the checked state and saves it to the {@link android.content.SharedPreferences}. 736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param checked The checked state. 756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setChecked(boolean checked) { 776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Always persist/notify the first time; don't assume the field's default of false. 786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final boolean changed = mChecked != checked; 796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (changed || !mCheckedSet) { 806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mChecked = checked; 816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mCheckedSet = true; 826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler persistBoolean(checked); 836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (changed) { 846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyDependencyChange(shouldDisableDependents()); 856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the checked state. 926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The checked state. 946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean isChecked() { 966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mChecked; 976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 1006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean shouldDisableDependents() { 1016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler boolean shouldDisable = mDisableDependentsState ? mChecked : !mChecked; 1026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return shouldDisable || super.shouldDisableDependents(); 1036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the summary to be shown when checked. 1076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summary The summary to be shown when checked. 1096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOn(CharSequence summary) { 1116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mSummaryOn = summary; 1126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (isChecked()) { 1136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 1146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setSummaryOn(CharSequence) 1196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summaryResId The summary as a resource. 1206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOn(int summaryResId) { 1226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setSummaryOn(getContext().getString(summaryResId)); 1236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the summary to be shown when checked. 1276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The summary. 1286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CharSequence getSummaryOn() { 1306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mSummaryOn; 1316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the summary to be shown when unchecked. 1356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summary The summary to be shown when unchecked. 1376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOff(CharSequence summary) { 1396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mSummaryOff = summary; 1406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!isChecked()) { 1416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 1426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setSummaryOff(CharSequence) 1476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summaryResId The summary as a resource. 1486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummaryOff(int summaryResId) { 1506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setSummaryOff(getContext().getString(summaryResId)); 1516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the summary to be shown when unchecked. 1556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The summary. 1566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CharSequence getSummaryOff() { 1586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mSummaryOff; 1596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns 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 * @return Whether dependents are disabled when this preference is on ({@code true}) 1666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * or when this preference is off ({@code false}). 1676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean getDisableDependentsState() { 1696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mDisableDependentsState; 1706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether dependents are disabled when this preference is on ({@code true}) 1746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * or when this preference is off ({@code false}). 1756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param disableDependentsState The preference state that should disable dependents. 1776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setDisableDependentsState(boolean disableDependentsState) { 1796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDisableDependentsState = disableDependentsState; 1806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 1836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Object onGetDefaultValue(TypedArray a, int index) { 1846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return a.getBoolean(index, false); 1856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 1886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 1896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setChecked(restoreValue ? getPersistedBoolean(mChecked) 1906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler : (Boolean) defaultValue); 1916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sync a summary holder contained within holder's subhierarchy with the correct summary text. 1956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param holder PreferenceViewHolder which holds a reference to the summary view 1966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void syncSummaryView(PreferenceViewHolder holder) { 1986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Sync the summary holder 199c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav View view = holder.findViewById(android.R.id.summary); 200c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav syncSummaryView(view); 201c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 2026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 203c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav /** 204c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav * @hide 205c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav */ 206c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viverette @RestrictTo(GROUP_ID) 207c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav protected void syncSummaryView(View view) { 208c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!(view instanceof TextView)) { 209c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav return; 210c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 211c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav TextView summaryView = (TextView) view; 212c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav boolean useDefaultSummary = true; 213c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (mChecked && !TextUtils.isEmpty(mSummaryOn)) { 214c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setText(mSummaryOn); 215c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav useDefaultSummary = false; 216c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } else if (!mChecked && !TextUtils.isEmpty(mSummaryOff)) { 217c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setText(mSummaryOff); 218c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav useDefaultSummary = false; 219c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 220c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (useDefaultSummary) { 221c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav final CharSequence summary = getSummary(); 222c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!TextUtils.isEmpty(summary)) { 223c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setText(summary); 224c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav useDefaultSummary = false; 2256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 227c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav int newVisibility = View.GONE; 228c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!useDefaultSummary) { 229c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav // Someone has written to it 230c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav newVisibility = View.VISIBLE; 231c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 232c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (newVisibility != summaryView.getVisibility()) { 233c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav summaryView.setVisibility(newVisibility); 234c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 2356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 2386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Parcelable onSaveInstanceState() { 2396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final Parcelable superState = super.onSaveInstanceState(); 2406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (isPersistent()) { 2416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // No need to save instance state since it's persistent 2426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return superState; 2436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final SavedState myState = new SavedState(superState); 2466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler myState.checked = isChecked(); 2476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return myState; 2486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 2516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onRestoreInstanceState(Parcelable state) { 2526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (state == null || !state.getClass().equals(SavedState.class)) { 2536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Didn't save state for us in onSaveInstanceState 2546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onRestoreInstanceState(state); 2556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return; 2566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SavedState myState = (SavedState) state; 2596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onRestoreInstanceState(myState.getSuperState()); 2606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setChecked(myState.checked); 2616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler static class SavedState extends BaseSavedState { 2646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler boolean checked; 2656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState(Parcel source) { 2676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(source); 2686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler checked = source.readInt() == 1; 2696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 2726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void writeToParcel(Parcel dest, int flags) { 2736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.writeToParcel(dest, flags); 2746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dest.writeInt(checked ? 1 : 0); 2756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState(Parcelable superState) { 2786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(superState); 2796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public static final Parcelable.Creator<SavedState> CREATOR = 2826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler new Parcelable.Creator<SavedState>() { 283dc8e099ed130434c0238f558277c5bcb6a533121Aurimas Liutikas @Override 2846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState createFromParcel(Parcel in) { 2856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return new SavedState(in); 2866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 288dc8e099ed130434c0238f558277c5bcb6a533121Aurimas Liutikas @Override 2896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SavedState[] newArray(int size) { 2906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return new SavedState[size]; 2916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler }; 2936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler} 295