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