1be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell/* 2be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Copyright (C) 2010 The Android Open Source Project 3be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 4be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * you may not use this file except in compliance with the License. 6be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * You may obtain a copy of the License at 7be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 8be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * http://www.apache.org/licenses/LICENSE-2.0 9be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 10be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Unless required by applicable law or agreed to in writing, software 11be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * See the License for the specific language governing permissions and 14be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * limitations under the License. 15be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 16be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 17be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellpackage android.preference; 18be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 19be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.content.Context; 20be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.content.SharedPreferences; 21be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.content.res.TypedArray; 22be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.os.Parcel; 23be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.os.Parcelable; 24b25158886bba80ca8e03bc252121f5f89fb80f46Amith Yamasaniimport android.text.TextUtils; 25be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.util.AttributeSet; 26be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.view.View; 27be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.view.accessibility.AccessibilityEvent; 28be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.view.accessibility.AccessibilityManager; 29be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.widget.TextView; 30be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 31be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell/** 32be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Common base class for preferences that have two selectable states, persist a 33be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * boolean value in SharedPreferences, and may have dependent preferences that are 34be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * enabled/disabled based on the current state. 35be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 36be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellpublic abstract class TwoStatePreference extends Preference { 37be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 38be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell private CharSequence mSummaryOn; 39be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell private CharSequence mSummaryOff; 40be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean mChecked; 41c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell private boolean mCheckedSet; 427650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov private boolean mSendClickAccessibilityEvent; 43be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell private boolean mDisableDependentsState; 44be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 455c3ea06a7a5558509545450ccc465d695bd1a2e6Svetoslav Ganov 46be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { 47be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(context, attrs, defStyle); 48be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 49be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 50be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public TwoStatePreference(Context context, AttributeSet attrs) { 515c3ea06a7a5558509545450ccc465d695bd1a2e6Svetoslav Ganov this(context, attrs, 0); 52be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 53be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 54be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public TwoStatePreference(Context context) { 555c3ea06a7a5558509545450ccc465d695bd1a2e6Svetoslav Ganov this(context, null); 56be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 57be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 58be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 59be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected void onClick() { 60be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.onClick(); 61be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 62be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean newValue = !isChecked(); 63be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 647650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov mSendClickAccessibilityEvent = true; 65be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 66be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (!callChangeListener(newValue)) { 67be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return; 68be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 69be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 70be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setChecked(newValue); 71be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 72be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 73be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 74be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets the checked state and saves it to the {@link SharedPreferences}. 75be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 76be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param checked The checked state. 77be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 78be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setChecked(boolean checked) { 79c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell // Always persist/notify the first time; don't assume the field's default of false. 80c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell final boolean changed = mChecked != checked; 81c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell if (changed || !mCheckedSet) { 82be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mChecked = checked; 83c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell mCheckedSet = true; 84be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell persistBoolean(checked); 85c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell if (changed) { 86c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell notifyDependencyChange(shouldDisableDependents()); 87c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell notifyChanged(); 88c1b07211b8a2a1eebefa8e5403ca7b2c6ccdccc6Adam Powell } 89be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 90be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 91be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 92be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 93be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns the checked state. 94be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 95be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return The checked state. 96be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 97be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public boolean isChecked() { 98be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mChecked; 99be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 100be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 101be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 102be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public boolean shouldDisableDependents() { 103be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean shouldDisable = mDisableDependentsState ? mChecked : !mChecked; 104be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return shouldDisable || super.shouldDisableDependents(); 105be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 106be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 107be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 108be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets the summary to be shown when checked. 109be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 110be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summary The summary to be shown when checked. 111be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 112be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOn(CharSequence summary) { 113be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mSummaryOn = summary; 114be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (isChecked()) { 115be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell notifyChanged(); 116be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 117be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 118be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 119be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 120be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @see #setSummaryOn(CharSequence) 121be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summaryResId The summary as a resource. 122be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 123be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOn(int summaryResId) { 124be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setSummaryOn(getContext().getString(summaryResId)); 125be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 126be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 127be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 128be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns the summary to be shown when checked. 129be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return The summary. 130be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 131be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public CharSequence getSummaryOn() { 132be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mSummaryOn; 133be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 134be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 135be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 136be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets the summary to be shown when unchecked. 137be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 138be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summary The summary to be shown when unchecked. 139be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 140be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOff(CharSequence summary) { 141be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mSummaryOff = summary; 142be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (!isChecked()) { 143be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell notifyChanged(); 144be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 145be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 146be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 147be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 148be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @see #setSummaryOff(CharSequence) 149be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summaryResId The summary as a resource. 150be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 151be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOff(int summaryResId) { 152be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setSummaryOff(getContext().getString(summaryResId)); 153be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 154be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 155be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 156be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns the summary to be shown when unchecked. 157be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return The summary. 158be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 159be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public CharSequence getSummaryOff() { 160be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mSummaryOff; 161be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 162be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 163be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 164be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns whether dependents are disabled when this preference is on ({@code true}) 165be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * or when this preference is off ({@code false}). 166be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 167be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return Whether dependents are disabled when this preference is on ({@code true}) 168be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * or when this preference is off ({@code false}). 169be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 170be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public boolean getDisableDependentsState() { 171be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mDisableDependentsState; 172be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 173be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 174be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 175be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets whether dependents are disabled when this preference is on ({@code true}) 176be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * or when this preference is off ({@code false}). 177be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 178be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param disableDependentsState The preference state that should disable dependents. 179be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 180be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setDisableDependentsState(boolean disableDependentsState) { 181be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mDisableDependentsState = disableDependentsState; 182be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 183be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 184be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 185be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected Object onGetDefaultValue(TypedArray a, int index) { 186be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return a.getBoolean(index, false); 187be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 188be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 189be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 190be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 191be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setChecked(restoreValue ? getPersistedBoolean(mChecked) 192be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell : (Boolean) defaultValue); 193be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 194be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 1957650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov void sendAccessibilityEvent(View view) { 1967650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov // Since the view is still not attached we create, populate, 1977650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov // and send the event directly since we do not know when it 1987650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov // will be attached and posting commands is not as clean. 1997650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getContext()); 2007650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov if (mSendClickAccessibilityEvent && accessibilityManager.isEnabled()) { 2017650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov AccessibilityEvent event = AccessibilityEvent.obtain(); 2027650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov event.setEventType(AccessibilityEvent.TYPE_VIEW_CLICKED); 2037650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov view.onInitializeAccessibilityEvent(event); 2047650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov view.dispatchPopulateAccessibilityEvent(event); 2057650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov accessibilityManager.sendAccessibilityEvent(event); 206be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 2077650259a597dd24137420d32acc35efc44db381eSvetoslav Ganov mSendClickAccessibilityEvent = false; 208be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 209be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 210be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 211be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sync a summary view contained within view's subhierarchy with the correct summary text. 212be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param view View where a summary should be located 213be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 214be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell void syncSummaryView(View view) { 215be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // Sync the summary view 216be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell TextView summaryView = (TextView) view.findViewById(com.android.internal.R.id.summary); 217be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (summaryView != null) { 218be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean useDefaultSummary = true; 219b25158886bba80ca8e03bc252121f5f89fb80f46Amith Yamasani if (mChecked && !TextUtils.isEmpty(mSummaryOn)) { 220be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setText(mSummaryOn); 221be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell useDefaultSummary = false; 222b25158886bba80ca8e03bc252121f5f89fb80f46Amith Yamasani } else if (!mChecked && !TextUtils.isEmpty(mSummaryOff)) { 223be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setText(mSummaryOff); 224be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell useDefaultSummary = false; 225be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 226be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 227be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (useDefaultSummary) { 228be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell final CharSequence summary = getSummary(); 229b25158886bba80ca8e03bc252121f5f89fb80f46Amith Yamasani if (!TextUtils.isEmpty(summary)) { 230be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setText(summary); 231be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell useDefaultSummary = false; 232be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 233be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 234be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 235be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell int newVisibility = View.GONE; 236be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (!useDefaultSummary) { 237be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // Someone has written to it 238be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell newVisibility = View.VISIBLE; 239be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 240be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (newVisibility != summaryView.getVisibility()) { 241be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setVisibility(newVisibility); 242be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 243be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 244be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 245be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 246be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 247be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected Parcelable onSaveInstanceState() { 248be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell final Parcelable superState = super.onSaveInstanceState(); 249be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (isPersistent()) { 250be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // No need to save instance state since it's persistent 251be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return superState; 252be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 253be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 254be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell final SavedState myState = new SavedState(superState); 255be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell myState.checked = isChecked(); 256be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return myState; 257be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 258be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 259be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 260be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected void onRestoreInstanceState(Parcelable state) { 261be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (state == null || !state.getClass().equals(SavedState.class)) { 262be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // Didn't save state for us in onSaveInstanceState 263be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.onRestoreInstanceState(state); 264be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return; 265be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 266be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 267be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell SavedState myState = (SavedState) state; 268be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.onRestoreInstanceState(myState.getSuperState()); 269be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setChecked(myState.checked); 270be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 271be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 272be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell static class SavedState extends BaseSavedState { 273be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean checked; 274be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 275be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState(Parcel source) { 276be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(source); 277be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell checked = source.readInt() == 1; 278be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 279be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 280be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 281be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void writeToParcel(Parcel dest, int flags) { 282be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.writeToParcel(dest, flags); 283be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell dest.writeInt(checked ? 1 : 0); 284be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 285be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 286be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState(Parcelable superState) { 287be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(superState); 288be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 289be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 290be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public static final Parcelable.Creator<SavedState> CREATOR = 291be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell new Parcelable.Creator<SavedState>() { 292be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState createFromParcel(Parcel in) { 293be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return new SavedState(in); 294be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 295be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 296be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState[] newArray(int size) { 297be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return new SavedState[size]; 298be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 299be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell }; 300be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 301be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell} 302