TwoStatePreference.java revision be0a4535053bbfdebd215e244b154ac810fd8edc
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.app.Service; 20be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.content.Context; 21be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.content.SharedPreferences; 22be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.content.res.TypedArray; 23be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.os.Parcel; 24be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powellimport android.os.Parcelable; 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; 41be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell private boolean mSendAccessibilityEventViewClickedType; 42be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell private AccessibilityManager mAccessibilityManager; 43be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell private boolean mDisableDependentsState; 44be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 45be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { 46be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(context, attrs, defStyle); 47be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 48be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mAccessibilityManager = 49be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell (AccessibilityManager) getContext().getSystemService(Service.ACCESSIBILITY_SERVICE); 50be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 51be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 52be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public TwoStatePreference(Context context, AttributeSet attrs) { 53be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(context, attrs); 54be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 55be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mAccessibilityManager = 56be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell (AccessibilityManager) getContext().getSystemService(Service.ACCESSIBILITY_SERVICE); 57be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 58be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 59be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public TwoStatePreference(Context context) { 60be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(context); 61be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 62be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mAccessibilityManager = 63be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell (AccessibilityManager) getContext().getSystemService(Service.ACCESSIBILITY_SERVICE); 64be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 65be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 66be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 67be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected void onClick() { 68be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.onClick(); 69be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 70be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean newValue = !isChecked(); 71be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 72be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // in onBindView() an AccessibilityEventViewClickedType is sent to announce the change 73be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // not sending 74be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mSendAccessibilityEventViewClickedType = true; 75be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 76be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (!callChangeListener(newValue)) { 77be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return; 78be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 79be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 80be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setChecked(newValue); 81be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 82be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 83be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 84be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets the checked state and saves it to the {@link SharedPreferences}. 85be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 86be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param checked The checked state. 87be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 88be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setChecked(boolean checked) { 89be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (mChecked != checked) { 90be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mChecked = checked; 91be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell persistBoolean(checked); 92be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell notifyDependencyChange(shouldDisableDependents()); 93be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell notifyChanged(); 94be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 95be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 96be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 97be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 98be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns the checked state. 99be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 100be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return The checked state. 101be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 102be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public boolean isChecked() { 103be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mChecked; 104be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 105be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 106be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 107be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public boolean shouldDisableDependents() { 108be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean shouldDisable = mDisableDependentsState ? mChecked : !mChecked; 109be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return shouldDisable || super.shouldDisableDependents(); 110be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 111be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 112be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 113be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets the summary to be shown when checked. 114be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 115be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summary The summary to be shown when checked. 116be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 117be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOn(CharSequence summary) { 118be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mSummaryOn = summary; 119be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (isChecked()) { 120be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell notifyChanged(); 121be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 122be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 123be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 124be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 125be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @see #setSummaryOn(CharSequence) 126be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summaryResId The summary as a resource. 127be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 128be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOn(int summaryResId) { 129be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setSummaryOn(getContext().getString(summaryResId)); 130be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 131be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 132be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 133be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns the summary to be shown when checked. 134be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return The summary. 135be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 136be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public CharSequence getSummaryOn() { 137be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mSummaryOn; 138be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 139be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 140be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 141be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets the summary to be shown when unchecked. 142be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 143be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summary The summary to be shown when unchecked. 144be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 145be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOff(CharSequence summary) { 146be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mSummaryOff = summary; 147be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (!isChecked()) { 148be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell notifyChanged(); 149be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 150be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 151be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 152be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 153be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @see #setSummaryOff(CharSequence) 154be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param summaryResId The summary as a resource. 155be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 156be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setSummaryOff(int summaryResId) { 157be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setSummaryOff(getContext().getString(summaryResId)); 158be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 159be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 160be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 161be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns the summary to be shown when unchecked. 162be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return The summary. 163be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 164be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public CharSequence getSummaryOff() { 165be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mSummaryOff; 166be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 167be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 168be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 169be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Returns whether dependents are disabled when this preference is on ({@code true}) 170be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * or when this preference is off ({@code false}). 171be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 172be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @return Whether dependents are disabled when this preference is on ({@code true}) 173be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * or when this preference is off ({@code false}). 174be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 175be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public boolean getDisableDependentsState() { 176be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return mDisableDependentsState; 177be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 178be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 179be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 180be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sets whether dependents are disabled when this preference is on ({@code true}) 181be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * or when this preference is off ({@code false}). 182be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * 183be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param disableDependentsState The preference state that should disable dependents. 184be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 185be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void setDisableDependentsState(boolean disableDependentsState) { 186be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mDisableDependentsState = disableDependentsState; 187be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 188be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 189be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 190be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected Object onGetDefaultValue(TypedArray a, int index) { 191be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return a.getBoolean(index, false); 192be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 193be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 194be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 195be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 196be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setChecked(restoreValue ? getPersistedBoolean(mChecked) 197be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell : (Boolean) defaultValue); 198be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 199be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 200be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 201be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Send an accessibility event for the given view if appropriate 202be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param view View that should send the event 203be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 204be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell void sendAccessibilityEventForView(View view) { 205be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // send an event to announce the value change of the state. It is done here 206be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // because clicking a preference does not immediately change the checked state 207be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // for example when enabling the WiFi 208be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (mSendAccessibilityEventViewClickedType && 209be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mAccessibilityManager.isEnabled() && 210be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell view.isEnabled()) { 211be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell mSendAccessibilityEventViewClickedType = false; 212be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 213be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell int eventType = AccessibilityEvent.TYPE_VIEW_CLICKED; 214be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell view.sendAccessibilityEventUnchecked(AccessibilityEvent.obtain(eventType)); 215be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 216be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 217be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 218be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell /** 219be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * Sync a summary view contained within view's subhierarchy with the correct summary text. 220be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell * @param view View where a summary should be located 221be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell */ 222be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell void syncSummaryView(View view) { 223be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // Sync the summary view 224be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell TextView summaryView = (TextView) view.findViewById(com.android.internal.R.id.summary); 225be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (summaryView != null) { 226be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean useDefaultSummary = true; 227be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (mChecked && mSummaryOn != null) { 228be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setText(mSummaryOn); 229be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell useDefaultSummary = false; 230be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } else if (!mChecked && mSummaryOff != null) { 231be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setText(mSummaryOff); 232be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell useDefaultSummary = false; 233be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 234be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 235be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (useDefaultSummary) { 236be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell final CharSequence summary = getSummary(); 237be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (summary != null) { 238be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setText(summary); 239be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell useDefaultSummary = false; 240be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 241be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 242be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 243be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell int newVisibility = View.GONE; 244be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (!useDefaultSummary) { 245be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // Someone has written to it 246be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell newVisibility = View.VISIBLE; 247be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 248be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (newVisibility != summaryView.getVisibility()) { 249be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell summaryView.setVisibility(newVisibility); 250be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 251be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 252be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 253be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 254be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 255be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected Parcelable onSaveInstanceState() { 256be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell final Parcelable superState = super.onSaveInstanceState(); 257be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (isPersistent()) { 258be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // No need to save instance state since it's persistent 259be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return superState; 260be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 261be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 262be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell final SavedState myState = new SavedState(superState); 263be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell myState.checked = isChecked(); 264be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return myState; 265be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 266be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 267be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 268be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell protected void onRestoreInstanceState(Parcelable state) { 269be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell if (state == null || !state.getClass().equals(SavedState.class)) { 270be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell // Didn't save state for us in onSaveInstanceState 271be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.onRestoreInstanceState(state); 272be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return; 273be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 274be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 275be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell SavedState myState = (SavedState) state; 276be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.onRestoreInstanceState(myState.getSuperState()); 277be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell setChecked(myState.checked); 278be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 279be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 280be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell static class SavedState extends BaseSavedState { 281be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell boolean checked; 282be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 283be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState(Parcel source) { 284be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(source); 285be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell checked = source.readInt() == 1; 286be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 287be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 288be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell @Override 289be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public void writeToParcel(Parcel dest, int flags) { 290be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super.writeToParcel(dest, flags); 291be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell dest.writeInt(checked ? 1 : 0); 292be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 293be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 294be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState(Parcelable superState) { 295be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell super(superState); 296be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 297be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 298be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public static final Parcelable.Creator<SavedState> CREATOR = 299be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell new Parcelable.Creator<SavedState>() { 300be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState createFromParcel(Parcel in) { 301be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return new SavedState(in); 302be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 303be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell 304be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell public SavedState[] newArray(int size) { 305be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell return new SavedState[size]; 306be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 307be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell }; 308be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell } 309be0a4535053bbfdebd215e244b154ac810fd8edcAdam Powell} 310