19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.preference; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powellimport com.android.internal.util.CharSequences; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.SharedPreferences; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 25b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasaniimport android.graphics.drawable.Drawable; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.AbsSavedState; 32014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckimport android.view.KeyEvent; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 36b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasaniimport android.widget.ImageView; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ListView; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powellimport java.util.ArrayList; 41212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powellimport java.util.List; 42212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powellimport java.util.Set; 43212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Represents the basic Preference UI building 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * block displayed by a {@link PreferenceActivity} in the form of a 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ListView}. This class provides the {@link View} to be displayed in 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity and associates with a {@link SharedPreferences} to 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * store/retrieve the preference data. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When specifying a preference hierarchy in XML, each element can point to a 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * subclass of {@link Preference}, similar to the view hierarchy and layouts. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class contains a {@code key} that will be used as the key into the 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link SharedPreferences}. It is up to the subclass to decide how to store 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the value. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 58cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * <div class="special reference"> 59cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * <h3>Developer Guides</h3> 60cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * <p>For information about building a settings UI with Preferences, 61cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * read the <a href="{@docRoot}guide/topics/ui/settings.html">Settings</a> 62cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * guide.</p> 63cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * </div> 64cdd0c59a0108036895796dcb2bea69ff5eef26caScott Main * 65b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * @attr ref android.R.styleable#Preference_icon 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_key 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_title 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_summary 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_order 70b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * @attr ref android.R.styleable#Preference_fragment 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_layout 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_widgetLayout 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_enabled 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_selectable 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_dependency 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_persistent 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_defaultValue 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#Preference_shouldDisableView 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8002f56803632051c202407cec01406781993752a1Alan Viverettepublic class Preference implements Comparable<Preference> { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Specify for {@link #setOrder(int)} if a specific order is not required. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_ORDER = Integer.MAX_VALUE; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Context mContext; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PreferenceManager mPreferenceManager; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set when added to hierarchy since we need a unique ID within that 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hierarchy. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mId; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private OnPreferenceChangeListener mOnChangeListener; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private OnPreferenceClickListener mOnClickListener; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mOrder = DEFAULT_ORDER; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CharSequence mTitle; 100e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn private int mTitleRes; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CharSequence mSummary; 102b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani /** 103b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * mIconResId is overridden by mIcon, if mIcon is specified. 104b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani */ 105b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani private int mIconResId; 106b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani private Drawable mIcon; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mKey; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Intent mIntent; 109b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn private String mFragment; 110def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn private Bundle mExtras; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mEnabled = true; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mSelectable = true; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mRequiresKey; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mPersistent = true; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mDependencyKey; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Object mDefaultValue; 117da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan private boolean mDependencyMet = true; 11802f56803632051c202407cec01406781993752a1Alan Viverette private boolean mParentDependencyMet = true; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setShouldDisableView(boolean) 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mShouldDisableView = true; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mLayoutResId = com.android.internal.R.layout.preference; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mWidgetLayoutResId; 127791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette private boolean mCanRecycleLayout = true; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private OnPreferenceChangeInternalListener mListener; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private List<Preference> mDependents; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mBaseMethodCalled; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface definition for a callback to be invoked when the value of this 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Preference} has been changed by the user and is 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * about to be set and/or persisted. This gives the client a chance 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to prevent setting and/or persisting the value. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface OnPreferenceChangeListener { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a Preference has been changed by the user. This is 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called before the state of the Preference is about to be updated and 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before the state is persisted. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param preference The changed Preference. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newValue The new value of the Preference. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True to update the state of the Preference with the new value. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onPreferenceChange(Preference preference, Object newValue); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface definition for a callback to be invoked when a {@link Preference} is 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * clicked. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface OnPreferenceClickListener { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a Preference has been clicked. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param preference The Preference that was clicked. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the click was handled. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onPreferenceClick(Preference preference); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface definition for a callback to be invoked when this 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Preference} is changed or, if this is a group, there is an 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * addition/removal of {@link Preference}(s). This is used internally. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface OnPreferenceChangeInternalListener { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when this Preference has changed. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param preference This preference. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onPreferenceChange(Preference preference); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when this group has added/removed {@link Preference}(s). 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param preference This Preference. 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onPreferenceHierarchyChange(Preference preference); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform inflation from XML and apply a class-specific base style. This 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constructor of Preference allows subclasses to use their own base 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style when they are inflating. For example, a {@link CheckBoxPreference} 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constructor calls this version of the super class constructor and 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies {@code android.R.attr.checkBoxPreferenceStyle} for <var>defStyle</var>. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This allows the theme's checkbox preference style to modify all of the base 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preference attributes as well as the {@link CheckBoxPreference} class's 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attributes. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The Context this is associated with, through which it can 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * access the current theme, resources, {@link SharedPreferences}, 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * etc. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attrs The attributes of the XML tag that is inflating the preference. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defStyle The default style to apply to this preference. If 0, no style 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be applied (beyond what is included in the theme). This 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may either be an attribute resource, whose value will be 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * retrieved from the current theme, or an explicit style 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resource. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #Preference(Context, AttributeSet) 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Preference(Context context, AttributeSet attrs, int defStyle) { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = context.obtainStyledAttributes(attrs, 214a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani com.android.internal.R.styleable.Preference, defStyle, 0); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = a.getIndexCount(); i >= 0; i--) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int attr = a.getIndex(i); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (attr) { 218b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani case com.android.internal.R.styleable.Preference_icon: 219b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani mIconResId = a.getResourceId(attr, 0); 220b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani break; 221b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_key: 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKey = a.getString(attr); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_title: 227e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn mTitleRes = a.getResourceId(attr, 0); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = a.getString(attr); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_summary: 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSummary = a.getString(attr); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_order: 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOrder = a.getInt(attr, mOrder); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn case com.android.internal.R.styleable.Preference_fragment: 240b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn mFragment = a.getString(attr); 241b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn break; 242b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_layout: 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLayoutResId = a.getResourceId(attr, mLayoutResId); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_widgetLayout: 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWidgetLayoutResId = a.getResourceId(attr, mWidgetLayoutResId); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_enabled: 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEnabled = a.getBoolean(attr, true); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_selectable: 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSelectable = a.getBoolean(attr, true); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_persistent: 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPersistent = a.getBoolean(attr, mPersistent); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_dependency: 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDependencyKey = a.getString(attr); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_defaultValue: 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultValue = onGetDefaultValue(a, attr); 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case com.android.internal.R.styleable.Preference_shouldDisableView: 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShouldDisableView = a.getBoolean(attr, mShouldDisableView); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 277a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani 278791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette if (!getClass().getName().startsWith("android.preference") 279791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette && !getClass().getName().startsWith("com.android")) { 280791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette // For non-framework subclasses, assume the worst and don't cache views. 281791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette mCanRecycleLayout = false; 282a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor that is called when inflating a Preference from XML. This is 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called when a Preference is being constructed from an XML file, supplying 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attributes that were specified in the XML file. This version uses a 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default style of 0, so the only attribute values applied are those in the 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Context's Theme and the given AttributeSet. 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The Context this is associated with, through which it can 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * access the current theme, resources, {@link SharedPreferences}, 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * etc. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attrs The attributes of the XML tag that is inflating the 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preference. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #Preference(Context, AttributeSet, int) 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Preference(Context context, AttributeSet attrs) { 300e494662c9998b9bb06d0850ec9df9239c8803d27Amith Yamasani this(context, attrs, com.android.internal.R.attr.preferenceStyle); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor to create a Preference. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The Context in which to store Preference values. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Preference(Context context) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, null); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a Preference is being inflated and the default value 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute needs to be read. Since different Preference types have 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * different value types, the subclass should get and return the default 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value which will be its value type. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For example, if the value type is String, the body of the method would 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proxy to {@link TypedArray#getString(int)}. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a The set of attributes. 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The index of the default value attribute. 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The default value of this preference type. 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Object onGetDefaultValue(TypedArray a, int index) { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets an {@link Intent} to be used for 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Context#startActivity(Intent)} when this Preference is clicked. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent associated with this Preference. 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIntent(Intent intent) { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = intent; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the {@link Intent} associated with this Preference. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The {@link Intent} last set via {@link #setIntent(Intent)} or XML. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent getIntent() { 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIntent; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 349b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * Sets the class name of a fragment to be shown when this Preference is clicked. 350b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * 351b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * @param fragment The class name of the fragment associated with this Preference. 352b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn */ 353b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn public void setFragment(String fragment) { 354b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn mFragment = fragment; 355b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn } 356b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn 357b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn /** 358b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * Return the fragment class name associated with this Preference. 359b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * 360b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn * @return The fragment class name last set via {@link #setFragment} or XML. 361b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn */ 362b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn public String getFragment() { 363b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn return mFragment; 364b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn } 365b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn 366b3cf10ffa8ff9cac0da8b23a0d84076b3f501400Dianne Hackborn /** 367def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * Return the extras Bundle object associated with this preference, creating 368def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * a new Bundle if there currently isn't one. You can use this to get and 369def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * set individual extra key/value pairs. 370def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn */ 371def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn public Bundle getExtras() { 372def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn if (mExtras == null) { 373def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn mExtras = new Bundle(); 374def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 375def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn return mExtras; 376def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 377def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 378def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn /** 379def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * Return the extras Bundle object associated with this preference, 380def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * returning null if there is not currently one. 381def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn */ 382def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn public Bundle peekExtras() { 383def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn return mExtras; 384def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 385def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 386def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn /** 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the layout resource that is inflated as the {@link View} to be shown 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for this Preference. In most cases, the default layout is sufficient for 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * custom Preference objects and only the widget layout needs to be changed. 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This layout should contain a {@link ViewGroup} with ID 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#widget_frame} to be the parent of the specific widget 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for this Preference. It should similarly contain 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#title} and {@link android.R.id#summary}. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param layoutResId The layout resource ID to be inflated and returned as 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a {@link View}. 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setWidgetLayoutResource(int) 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLayoutResource(int layoutResId) { 401a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani if (layoutResId != mLayoutResId) { 402a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani // Layout changed 403791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette mCanRecycleLayout = false; 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 405a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLayoutResId = layoutResId; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the layout resource that will be shown as the {@link View} for this Preference. 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The layout resource ID. 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getLayoutResource() { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLayoutResId; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 419791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette * Sets the layout for the controllable widget portion of this Preference. This 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inflated into the main layout. For example, a {@link CheckBoxPreference} 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would specify a custom layout (consisting of just the CheckBox) here, 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instead of creating its own main layout. 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param widgetLayoutResId The layout resource ID to be inflated into the 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * main layout. 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setLayoutResource(int) 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setWidgetLayoutResource(int widgetLayoutResId) { 429a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani if (widgetLayoutResId != mWidgetLayoutResId) { 430a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani // Layout changed 431791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette mCanRecycleLayout = false; 432a98129b9110371aa036d8fcf23fff709595b16ffAmith Yamasani } 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWidgetLayoutResId = widgetLayoutResId; 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the layout resource for the controllable widget portion of this Preference. 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The layout resource ID. 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getWidgetLayoutResource() { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWidgetLayoutResId; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the View that will be shown in the {@link PreferenceActivity}. 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param convertView The old View to reuse, if possible. Note: You should 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * check that this View is non-null and of an appropriate type 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before using. If it is not possible to convert this View to 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * display the correct data, this method can create a new View. 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The parent that this View will eventually be attached to. 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the same Preference object, for chaining multiple calls 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into a single statement. 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateView(ViewGroup) 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onBindView(View) 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getView(View convertView, ViewGroup parent) { 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (convertView == null) { 460bae6fc244732476d6e6b565e64518e1beafd66c6Amith Yamasani convertView = onCreateView(parent); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onBindView(convertView); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return convertView; 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates the View to be shown for this Preference in the 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PreferenceActivity}. The default behavior is to inflate the main 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * layout of this Preference (see {@link #setLayoutResource(int)}. If 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changing this behavior, please specify a {@link ViewGroup} with ID 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#widget_frame}. 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make sure to call through to the superclass's implementation. 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The parent that this View will eventually be attached to. 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The View that displays this Preference. 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onBindView(View) 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected View onCreateView(ViewGroup parent) { 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final LayoutInflater layoutInflater = 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final View layout = layoutInflater.inflate(mLayoutResId, parent, false); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 485405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani final ViewGroup widgetFrame = (ViewGroup) layout 486405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani .findViewById(com.android.internal.R.id.widget_frame); 487405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani if (widgetFrame != null) { 488405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani if (mWidgetLayoutResId != 0) { 489405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani layoutInflater.inflate(mWidgetLayoutResId, widgetFrame); 490405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani } else { 491405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani widgetFrame.setVisibility(View.GONE); 492405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani } 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return layout; 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Binds the created View to the data for this Preference. 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a good place to grab references to custom Views in the layout and 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set properties on them. 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make sure to call through to the superclass's implementation. 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The View that shows this Preference. 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateView(ViewGroup) 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onBindView(View view) { 5090f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey final TextView titleView = (TextView) view.findViewById( 5100f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey com.android.internal.R.id.title); 5110f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey if (titleView != null) { 5120f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey final CharSequence title = getTitle(); 5130f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey if (!TextUtils.isEmpty(title)) { 5140f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey titleView.setText(title); 5150f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey titleView.setVisibility(View.VISIBLE); 5160f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey } else { 5170f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey titleView.setVisibility(View.GONE); 5180f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey } 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5200f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey 5210f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey final TextView summaryView = (TextView) view.findViewById( 5220f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey com.android.internal.R.id.summary); 5230f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey if (summaryView != null) { 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final CharSequence summary = getSummary(); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(summary)) { 5260f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey summaryView.setText(summary); 5270f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey summaryView.setVisibility(View.VISIBLE); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5290f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey summaryView.setVisibility(View.GONE); 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5320f1c3af76b719a728ed567435ea4db30a33364d2Jeff Sharkey 533b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani ImageView imageView = (ImageView) view.findViewById(com.android.internal.R.id.icon); 534405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani if (imageView != null) { 535405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani if (mIconResId != 0 || mIcon != null) { 536405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani if (mIcon == null) { 537405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani mIcon = getContext().getResources().getDrawable(mIconResId); 538405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani } 539405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani if (mIcon != null) { 540405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani imageView.setImageDrawable(mIcon); 541405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani } 542b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani } 543405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani imageView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE); 544b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani } 545405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mShouldDisableView) { 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setEnabledStateOnViews(view, isEnabled()); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 550b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Makes sure the view (and any children) get the enabled state changed. 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setEnabledStateOnViews(View v, boolean enabled) { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.setEnabled(enabled); 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (v instanceof ViewGroup) { 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ViewGroup vg = (ViewGroup) v; 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = vg.getChildCount() - 1; i >= 0; i--) { 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setEnabledStateOnViews(vg.getChildAt(i), enabled); 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the order of this Preference with respect to other 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference objects on the same level. If this is not specified, the 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default behavior is to sort alphabetically. The 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PreferenceGroup#setOrderingAsAdded(boolean)} can be used to order 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference objects based on the order they appear in the XML. 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param order The order for this Preference. A lower value will be shown 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first. Use {@link #DEFAULT_ORDER} to sort alphabetically or 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allow ordering from XML. 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PreferenceGroup#setOrderingAsAdded(boolean) 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_ORDER 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOrder(int order) { 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (order != mOrder) { 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOrder = order; 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Reorder the list 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyHierarchyChanged(); 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the order of this Preference with respect to other Preference objects 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the same level. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The order of this Preference. 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setOrder(int) 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getOrder() { 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mOrder; 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the title for this Preference with a CharSequence. 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This title will be placed into the ID 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#title} within the View created by 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateView(ViewGroup)}. 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param title The title for this Preference. 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(CharSequence title) { 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (title == null && mTitle != null || title != null && !title.equals(mTitle)) { 608e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn mTitleRes = 0; 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyChanged(); 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the title for this Preference with a resource ID. 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setTitle(CharSequence) 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param titleResId The title as a resource ID. 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(int titleResId) { 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setTitle(mContext.getString(titleResId)); 622e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn mTitleRes = titleResId; 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 626e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn * Returns the title resource ID of this Preference. If the title did 627e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn * not come from a resource, 0 is returned. 628e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn * 629e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn * @return The title resource. 630e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn * @see #setTitle(int) 631e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn */ 632e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn public int getTitleRes() { 633e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn return mTitleRes; 634e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn } 635e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn 636e72f237defd9956a7e2d2e2bee8cd2558c3f83dbDianne Hackborn /** 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the title of this Preference. 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The title. 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setTitle(CharSequence) 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getTitle() { 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitle; 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 647b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * Sets the icon for this Preference with a Drawable. 648b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * This icon will be placed into the ID 649b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * {@link android.R.id#icon} within the View created by 650b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * {@link #onCreateView(ViewGroup)}. 651b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * 652b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * @param icon The optional icon for this Preference. 653b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani */ 654b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani public void setIcon(Drawable icon) { 655b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani if ((icon == null && mIcon != null) || (icon != null && mIcon != icon)) { 656b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani mIcon = icon; 657405c1af75607fafdb1d6faf34e13e032e4934787Amith Yamasani 658b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani notifyChanged(); 659b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani } 660b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani } 661b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani 662b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani /** 663b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * Sets the icon for this Preference with a resource ID. 664b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * 665b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * @see #setIcon(Drawable) 666b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * @param iconResId The icon as a resource ID. 667b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani */ 668b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani public void setIcon(int iconResId) { 669b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani mIconResId = iconResId; 670b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani setIcon(mContext.getResources().getDrawable(iconResId)); 671b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani } 672b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani 673b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani /** 674b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * Returns the icon of this Preference. 675b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * 676b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * @return The icon. 677b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani * @see #setIcon(Drawable) 678b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani */ 679b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani public Drawable getIcon() { 680b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani return mIcon; 681b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani } 682b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani 683b65897ba50c76e2110f5b5de455c14ca53d4069bAmith Yamasani /** 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the summary of this Preference. 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The summary. 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setSummary(CharSequence) 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getSummary() { 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSummary; 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the summary for this Preference with a CharSequence. 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param summary The summary for the preference. 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSummary(CharSequence summary) { 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (summary == null && mSummary != null || summary != null && !summary.equals(mSummary)) { 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSummary = summary; 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyChanged(); 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the summary for this Preference with a resource ID. 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setSummary(CharSequence) 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param summaryResId The summary as a resource. 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSummary(int summaryResId) { 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSummary(mContext.getString(summaryResId)); 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether this Preference is enabled. If disabled, it will 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not handle clicks. 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param enabled Set true to enable it. 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setEnabled(boolean enabled) { 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mEnabled != enabled) { 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEnabled = enabled; 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Enabled state can change dependent preferences' states, so notify 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyDependencyChange(shouldDisableDependents()); 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyChanged(); 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether this Preference should be enabled in the list. 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this Preference is enabled, false otherwise. 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isEnabled() { 73802f56803632051c202407cec01406781993752a1Alan Viverette return mEnabled && mDependencyMet && mParentDependencyMet; 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether this Preference is selectable. 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectable Set true to make it selectable. 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSelectable(boolean selectable) { 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSelectable != selectable) { 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSelectable = selectable; 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyChanged(); 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether this Preference should be selectable in the list. 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if it is selectable, false otherwise. 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isSelectable() { 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSelectable; 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether this Preference should disable its view when it gets 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * disabled. 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For example, set this and {@link #setEnabled(boolean)} to false for 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferences that are only displaying information and 1) should not be 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * clickable 2) should not have the view set to the disabled state. 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param shouldDisableView Set true if this preference should disable its view 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when the preference is disabled. 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setShouldDisableView(boolean shouldDisableView) { 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShouldDisableView = shouldDisableView; 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyChanged(); 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether this Preference should disable its view when it's action is disabled. 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setShouldDisableView(boolean) 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if it should disable the view. 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getShouldDisableView() { 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mShouldDisableView; 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a unique ID for this Preference. This ID should be unique across all 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference objects in a hierarchy. 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A unique ID for this Preference. 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long getId() { 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mId; 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes a click on the preference. This includes saving the value to 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link SharedPreferences}. However, the overridden method should 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call {@link #callChangeListener(Object)} to make sure the client wants to 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * update the preference's state with the new value. 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onClick() { 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the key for this Preference, which is used as a key to the 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link SharedPreferences}. This should be unique for the package. 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param key The key for the preference. 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setKey(String key) { 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKey = key; 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRequiresKey && !hasKey()) { 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requireKey(); 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the key for this Preference, which is also the key used for storing 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values into SharedPreferences. 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The key. 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getKey() { 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mKey; 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether the key is present, and if it isn't throws an 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * exception. This should be called by subclasses that store preferences in 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link SharedPreferences}. 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalStateException If there is no key assigned. 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void requireKey() { 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mKey == null) { 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("Preference does not have a key assigned."); 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRequiresKey = true; 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether this Preference has a valid key. 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the key exists and is not a blank string, false otherwise. 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasKey() { 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return !TextUtils.isEmpty(mKey); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether this Preference is persistent. If it is, it stores its value(s) into 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the persistent {@link SharedPreferences} storage. 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if it is persistent. 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isPersistent() { 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPersistent; 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether, at the given time this method is called, 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this Preference should store/restore its value(s) into the 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link SharedPreferences}. This, at minimum, checks whether this 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is persistent and it currently has a key. Before you 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * save/restore from the {@link SharedPreferences}, check this first. 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if it should persist the value. 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean shouldPersist() { 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager != null && isPersistent() && hasKey(); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether this Preference is persistent. When persistent, 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it stores its value(s) into the persistent {@link SharedPreferences} 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * storage. 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param persistent Set true if it should store its value(s) into the {@link SharedPreferences}. 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPersistent(boolean persistent) { 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPersistent = persistent; 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this method after the user changes the preference, but before the 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * internal state is set. This allows the client to ignore the user value. 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newValue The new value of this Preference. 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the user value should be set as the preference 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value (and persisted). 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean callChangeListener(Object newValue) { 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mOnChangeListener == null ? true : mOnChangeListener.onPreferenceChange(this, newValue); 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the callback to be invoked when this Preference is changed by the 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user (but before the internal state has been updated). 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param onPreferenceChangeListener The callback to be invoked. 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnPreferenceChangeListener(OnPreferenceChangeListener onPreferenceChangeListener) { 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOnChangeListener = onPreferenceChangeListener; 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the callback to be invoked when this Preference is changed by the 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user (but before the internal state has been updated). 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The callback to be invoked. 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public OnPreferenceChangeListener getOnPreferenceChangeListener() { 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mOnChangeListener; 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the callback to be invoked when this Preference is clicked. 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param onPreferenceClickListener The callback to be invoked. 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnPreferenceClickListener(OnPreferenceClickListener onPreferenceClickListener) { 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOnClickListener = onPreferenceClickListener; 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the callback to be invoked when this Preference is clicked. 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The callback to be invoked. 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public OnPreferenceClickListener getOnPreferenceClickListener() { 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mOnClickListener; 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a click should be performed. 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param preferenceScreen A {@link PreferenceScreen} whose hierarchy click 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * listener should be called in the proper order (between other 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processing). May be null. 94437ae5586761993a5e9cede6f6c41609b5c63cc29Justin Koh * @hide 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 94637ae5586761993a5e9cede6f6c41609b5c63cc29Justin Koh public void performClick(PreferenceScreen preferenceScreen) { 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isEnabled()) { 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onClick(); 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) { 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PreferenceManager preferenceManager = getPreferenceManager(); 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (preferenceManager != null) { 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getOnPreferenceTreeClickListener(); 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (preferenceScreen != null && listener != null 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && listener.onPreferenceTreeClick(preferenceScreen, this)) { 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIntent != null) { 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context context = getContext(); 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project context.startActivity(mIntent); 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 973014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 974014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck /** 975014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck * Allows a Preference to intercept key events without having focus. 976014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck * For example, SeekBarPreference uses this to intercept +/- to adjust 977014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck * the progress. 978014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck * @return True if the Preference handled the key. Returns false by default. 979014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck * @hide 980014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck */ 981014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck public boolean onKey(View v, int keyCode, KeyEvent event) { 982014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck return false; 983014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck } 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the {@link android.content.Context} of this Preference. 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Each Preference in a Preference hierarchy can be 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from different Context (for example, if multiple activities provide preferences into a single 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PreferenceActivity}). This Context will be used to save the Preference values. 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Context of this Preference. 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Context getContext() { 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mContext; 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the {@link SharedPreferences} where this Preference can read its 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value(s). Usually, it's easier to use one of the helper read methods: 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getPersistedBoolean(boolean)}, {@link #getPersistedFloat(float)}, 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getPersistedInt(int)}, {@link #getPersistedLong(long)}, 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getPersistedString(String)}. To save values, see 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getEditor()}. 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In some cases, writes to the {@link #getEditor()} will not be committed 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * right away and hence not show up in the returned 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link SharedPreferences}, this is intended behavior to improve 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * performance. 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The {@link SharedPreferences} where this Preference reads its 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value(s), or null if it isn't attached to a Preference hierarchy. 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEditor() 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SharedPreferences getSharedPreferences() { 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPreferenceManager == null) { 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getSharedPreferences(); 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns an {@link SharedPreferences.Editor} where this Preference can 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * save its value(s). Usually it's easier to use one of the helper save 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * methods: {@link #persistBoolean(boolean)}, {@link #persistFloat(float)}, 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #persistInt(int)}, {@link #persistLong(long)}, 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #persistString(String)}. To read values, see 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getSharedPreferences()}. If {@link #shouldCommit()} returns 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * true, it is this Preference's responsibility to commit. 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In some cases, writes to this will not be committed right away and hence 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not show up in the SharedPreferences, this is intended behavior to 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * improve performance. 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A {@link SharedPreferences.Editor} where this preference saves 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its value(s), or null if it isn't attached to a Preference 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hierarchy. 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #shouldCommit() 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getSharedPreferences() 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SharedPreferences.Editor getEditor() { 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPreferenceManager == null) { 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getEditor(); 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns whether the {@link Preference} should commit its saved value(s) in 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getEditor()}. This may return false in situations where batch 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * committing is being done (by the manager) to improve performance. 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Whether the Preference should commit its saved value(s). 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEditor() 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean shouldCommit() { 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPreferenceManager == null) { 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.shouldCommit(); 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Compares Preference objects based on order (if set), otherwise alphabetically on the titles. 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param another The Preference to compare to this one. 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 0 if the same; less than 0 if this Preference sorts ahead of <var>another</var>; 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * greater than 0 if this Preference sorts after <var>another</var>. 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 107275af171006ee80aaf7cfb56ded1378afe0084ccaJeff Brown @Override 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int compareTo(Preference another) { 107475af171006ee80aaf7cfb56ded1378afe0084ccaJeff Brown if (mOrder != another.mOrder) { 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Do order comparison 107675af171006ee80aaf7cfb56ded1378afe0084ccaJeff Brown return mOrder - another.mOrder; 1077b2e61e44e9cd1fa2974784e819f13b5ce72088f5Carsten Hauge } else if (mTitle == another.mTitle) { 1078b2e61e44e9cd1fa2974784e819f13b5ce72088f5Carsten Hauge // If titles are null or share same object comparison 1079b2e61e44e9cd1fa2974784e819f13b5ce72088f5Carsten Hauge return 0; 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mTitle == null) { 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 1; 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (another.mTitle == null) { 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Do name comparison 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return CharSequences.compareToIgnoreCase(mTitle, another.mTitle); 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the internal change listener. 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param listener The listener. 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #notifyChanged() 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void setOnPreferenceChangeInternalListener(OnPreferenceChangeInternalListener listener) { 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener = listener; 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Should be called when the data of this {@link Preference} has changed. 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void notifyChanged() { 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mListener != null) { 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener.onPreferenceChange(this); 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Should be called when a Preference has been 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * added/removed from this group, or the ordering should be 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-evaluated. 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void notifyHierarchyChanged() { 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mListener != null) { 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener.onPreferenceHierarchyChange(this); 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the {@link PreferenceManager} that manages this Preference object's tree. 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The {@link PreferenceManager}. 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PreferenceManager getPreferenceManager() { 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager; 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when this Preference has been attached to a Preference hierarchy. 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make sure to call the super implementation. 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param preferenceManager The PreferenceManager of the hierarchy. 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onAttachedToHierarchy(PreferenceManager preferenceManager) { 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPreferenceManager = preferenceManager; 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = preferenceManager.getNextId(); 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchSetInitialValue(); 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the Preference hierarchy has been attached to the 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PreferenceActivity}. This can also be called when this 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference has been attached to a group that was already attached 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the {@link PreferenceActivity}. 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onAttachedToActivity() { 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // At this point, the hierarchy that this preference is in is connected 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // with all other preferences. 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project registerDependency(); 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void registerDependency() { 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(mDependencyKey)) return; 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Preference preference = findPreferenceInHierarchy(mDependencyKey); 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (preference != null) { 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project preference.registerDependent(this); 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("Dependency \"" + mDependencyKey 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "\" not found for preference \"" + mKey + "\" (title: \"" + mTitle + "\""); 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void unregisterDependency() { 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDependencyKey != null) { 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Preference oldDependency = findPreferenceInHierarchy(mDependencyKey); 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (oldDependency != null) { 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project oldDependency.unregisterDependent(this); 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Finds a Preference in this hierarchy (the whole thing, 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * even above/below your {@link PreferenceScreen} screen break) with the given 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key. 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This only functions after we have been attached to a hierarchy. 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param key The key of the Preference to find. 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Preference that uses the given key. 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Preference findPreferenceInHierarchy(String key) { 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(key) || mPreferenceManager == null) { 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.findPreference(key); 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adds a dependent Preference on this Preference so we can notify it. 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Usually, the dependent Preference registers itself (it's good for it to 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * know it depends on something), so please use 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Preference#setDependency(String)} on the dependent Preference. 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dependent The dependent Preference that will be enabled/disabled 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * according to the state of this Preference. 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void registerDependent(Preference dependent) { 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDependents == null) { 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDependents = new ArrayList<Preference>(); 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDependents.add(dependent); 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dependent.onDependencyChanged(this, shouldDisableDependents()); 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes a dependent Preference on this Preference. 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dependent The dependent Preference that will be enabled/disabled 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * according to the state of this Preference. 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the same Preference object, for chaining multiple calls 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into a single statement. 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void unregisterDependent(Preference dependent) { 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDependents != null) { 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDependents.remove(dependent); 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notifies any listening dependents of a change that affects the 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dependency. 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param disableDependents Whether this Preference should disable 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its dependents. 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void notifyDependencyChange(boolean disableDependents) { 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final List<Preference> dependents = mDependents; 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dependents == null) { 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int dependentsCount = dependents.size(); 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < dependentsCount; i++) { 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dependents.get(i).onDependencyChanged(this, disableDependents); 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the dependency changes. 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dependency The Preference that this Preference depends on. 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param disableDependent Set true to disable this Preference. 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onDependencyChanged(Preference dependency, boolean disableDependent) { 1255da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan if (mDependencyMet == disableDependent) { 1256da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan mDependencyMet = !disableDependent; 1257da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan 1258da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan // Enabled state can change dependent preferences' states, so notify 1259da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan notifyDependencyChange(shouldDisableDependents()); 1260da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan 1261da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan notifyChanged(); 1262da53eca79e02ac70761c379f9f2cb3babce9e79dMichael Chan } 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 126402f56803632051c202407cec01406781993752a1Alan Viverette 126502f56803632051c202407cec01406781993752a1Alan Viverette /** 126602f56803632051c202407cec01406781993752a1Alan Viverette * Called when the implicit parent dependency changes. 126702f56803632051c202407cec01406781993752a1Alan Viverette * 126802f56803632051c202407cec01406781993752a1Alan Viverette * @param parent The Preference that this Preference depends on. 126902f56803632051c202407cec01406781993752a1Alan Viverette * @param disableChild Set true to disable this Preference. 127002f56803632051c202407cec01406781993752a1Alan Viverette */ 127102f56803632051c202407cec01406781993752a1Alan Viverette public void onParentChanged(Preference parent, boolean disableChild) { 127202f56803632051c202407cec01406781993752a1Alan Viverette if (mParentDependencyMet == disableChild) { 127302f56803632051c202407cec01406781993752a1Alan Viverette mParentDependencyMet = !disableChild; 127402f56803632051c202407cec01406781993752a1Alan Viverette 127502f56803632051c202407cec01406781993752a1Alan Viverette // Enabled state can change dependent preferences' states, so notify 127602f56803632051c202407cec01406781993752a1Alan Viverette notifyDependencyChange(shouldDisableDependents()); 127702f56803632051c202407cec01406781993752a1Alan Viverette 127802f56803632051c202407cec01406781993752a1Alan Viverette notifyChanged(); 127902f56803632051c202407cec01406781993752a1Alan Viverette } 128002f56803632051c202407cec01406781993752a1Alan Viverette } 128102f56803632051c202407cec01406781993752a1Alan Viverette 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether this preference's dependents should currently be 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * disabled. 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the dependents should be disabled, otherwise false. 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean shouldDisableDependents() { 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return !isEnabled(); 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the key of a Preference that this Preference will depend on. If that 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is not set or is off, this Preference will be disabled. 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dependencyKey The key of the Preference that this depends on. 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDependency(String dependencyKey) { 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Unregister the old dependency, if we had one 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unregisterDependency(); 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Register the new 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDependencyKey = dependencyKey; 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project registerDependency(); 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the key of the dependency on this Preference. 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The key of the dependency. 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDependency(String) 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDependency() { 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDependencyKey; 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when this Preference is being removed from the hierarchy. You 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should remove any references to this Preference that you know about. Make 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sure to call through to the superclass implementation. 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPrepareForRemoval() { 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unregisterDependency(); 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the default value for this Preference, which will be set either if 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistence is off or persistence is on and the preference is not found 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the persistent storage. 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultValue The default value. 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDefaultValue(Object defaultValue) { 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultValue = defaultValue; 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void dispatchSetInitialValue() { 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // By now, we know if we are persistent. 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean shouldPersist = shouldPersist(); 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!shouldPersist || !getSharedPreferences().contains(mKey)) { 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDefaultValue != null) { 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onSetInitialValue(false, mDefaultValue); 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onSetInitialValue(true, null); 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement this to set the initial value of the Preference. 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If <var>restorePersistedValue</var> is true, you should restore the 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference value from the {@link android.content.SharedPreferences}. If 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>restorePersistedValue</var> is false, you should set the Preference 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value to defaultValue that is given (and possibly store to SharedPreferences 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if {@link #shouldPersist()} is true). 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This may not always be called. One example is if it should not persist 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but there is no default value given. 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param restorePersistedValue True to restore the persisted value; 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false to use the given <var>defaultValue</var>. 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultValue The default value for this Preference. Only use this 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if <var>restorePersistedValue</var> is false. 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void tryCommit(SharedPreferences.Editor editor) { 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPreferenceManager.shouldCommit()) { 1371dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick try { 1372dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick editor.apply(); 1373dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick } catch (AbstractMethodError unused) { 1374dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick // The app injected its own pre-Gingerbread 1375dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick // SharedPreferences.Editor implementation without 1376dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick // an apply method. 1377dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick editor.commit(); 1378dd644c179c1bf47d82d776d7f644e4fc1467159dBrad Fitzpatrick } 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to persist a String to the {@link android.content.SharedPreferences}. 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This will check if this Preference is persistent, get an editor from 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link PreferenceManager}, put in the string, and check if we should commit (and 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * commit if so). 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to persist. 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the Preference is persistent. (This is not whether the 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value was persisted, since we may not necessarily commit if there 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be a batch commit later.) 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedString(String) 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean persistString(String value) { 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shouldPersist()) { 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Shouldn't store null 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == getPersistedString(null)) { 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // It's already there, so the same as persisting 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putString(mKey, value); 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tryCommit(editor); 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to get a persisted String from the {@link android.content.SharedPreferences}. 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This will check if this Preference is persistent, get the SharedPreferences 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from the {@link PreferenceManager}, and get the value. 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultReturnValue The default value to return if either the 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is not persistent or the Preference is not in the 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * shared preferences. 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The value from the SharedPreferences or the default return 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistString(String) 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected String getPersistedString(String defaultReturnValue) { 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!shouldPersist()) { 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return defaultReturnValue; 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getSharedPreferences().getString(mKey, defaultReturnValue); 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1433212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Attempts to persist a set of Strings to the {@link android.content.SharedPreferences}. 1434212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * <p> 1435212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * This will check if this Preference is persistent, get an editor from 1436212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * the {@link PreferenceManager}, put in the strings, and check if we should commit (and 1437212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * commit if so). 1438212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 1439212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param values The values to persist. 1440212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return True if the Preference is persistent. (This is not whether the 1441212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * value was persisted, since we may not necessarily commit if there 1442212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * will be a batch commit later.) 1443212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #getPersistedString(Set) 1444212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 1445212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @hide Pending API approval 1446212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell */ 1447212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell protected boolean persistStringSet(Set<String> values) { 1448212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (shouldPersist()) { 1449212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell // Shouldn't store null 1450212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (values.equals(getPersistedStringSet(null))) { 1451212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell // It's already there, so the same as persisting 1452212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return true; 1453212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 1454212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 1455212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 1456212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell editor.putStringSet(mKey, values); 1457212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell tryCommit(editor); 1458212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return true; 1459212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 1460212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return false; 1461212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 1462212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 1463212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell /** 1464212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Attempts to get a persisted set of Strings from the 1465212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * {@link android.content.SharedPreferences}. 1466212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * <p> 1467212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * This will check if this Preference is persistent, get the SharedPreferences 1468212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * from the {@link PreferenceManager}, and get the value. 1469212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 1470212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param defaultReturnValue The default value to return if either the 1471212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Preference is not persistent or the Preference is not in the 1472212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * shared preferences. 1473212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return The value from the SharedPreferences or the default return 1474212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * value. 1475212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #persistStringSet(Set) 1476212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 1477212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @hide Pending API approval 1478212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell */ 1479212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell protected Set<String> getPersistedStringSet(Set<String> defaultReturnValue) { 1480212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (!shouldPersist()) { 1481212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return defaultReturnValue; 1482212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 1483212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 1484212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return mPreferenceManager.getSharedPreferences().getStringSet(mKey, defaultReturnValue); 1485212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 1486212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 1487212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell /** 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to persist an int to the {@link android.content.SharedPreferences}. 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to persist. 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the Preference is persistent. (This is not whether the 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value was persisted, since we may not necessarily commit if there 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be a batch commit later.) 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistString(String) 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedInt(int) 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean persistInt(int value) { 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shouldPersist()) { 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == getPersistedInt(~value)) { 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // It's already there, so the same as persisting 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putInt(mKey, value); 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tryCommit(editor); 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to get a persisted int from the {@link android.content.SharedPreferences}. 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultReturnValue The default value to return if either this 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is not persistent or this Preference is not in the 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences. 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The value from the SharedPreferences or the default return 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedString(String) 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistInt(int) 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected int getPersistedInt(int defaultReturnValue) { 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!shouldPersist()) { 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return defaultReturnValue; 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getSharedPreferences().getInt(mKey, defaultReturnValue); 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to persist a float to the {@link android.content.SharedPreferences}. 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to persist. 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this Preference is persistent. (This is not whether the 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value was persisted, since we may not necessarily commit if there 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be a batch commit later.) 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistString(String) 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedFloat(float) 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean persistFloat(float value) { 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shouldPersist()) { 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == getPersistedFloat(Float.NaN)) { 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // It's already there, so the same as persisting 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putFloat(mKey, value); 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tryCommit(editor); 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to get a persisted float from the {@link android.content.SharedPreferences}. 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultReturnValue The default value to return if either this 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is not persistent or this Preference is not in the 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences. 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The value from the SharedPreferences or the default return 15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedString(String) 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistFloat(float) 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected float getPersistedFloat(float defaultReturnValue) { 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!shouldPersist()) { 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return defaultReturnValue; 15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getSharedPreferences().getFloat(mKey, defaultReturnValue); 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to persist a long to the {@link android.content.SharedPreferences}. 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to persist. 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this Preference is persistent. (This is not whether the 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value was persisted, since we may not necessarily commit if there 15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be a batch commit later.) 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistString(String) 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedLong(long) 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean persistLong(long value) { 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shouldPersist()) { 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == getPersistedLong(~value)) { 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // It's already there, so the same as persisting 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putLong(mKey, value); 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tryCommit(editor); 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to get a persisted long from the {@link android.content.SharedPreferences}. 16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultReturnValue The default value to return if either this 16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is not persistent or this Preference is not in the 16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences. 16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The value from the SharedPreferences or the default return 16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedString(String) 16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistLong(long) 16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected long getPersistedLong(long defaultReturnValue) { 16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!shouldPersist()) { 16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return defaultReturnValue; 16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getSharedPreferences().getLong(mKey, defaultReturnValue); 16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to persist a boolean to the {@link android.content.SharedPreferences}. 16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to persist. 16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this Preference is persistent. (This is not whether the 16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value was persisted, since we may not necessarily commit if there 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be a batch commit later.) 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistString(String) 16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedBoolean(boolean) 16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean persistBoolean(boolean value) { 16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shouldPersist()) { 16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == getPersistedBoolean(!value)) { 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // It's already there, so the same as persisting 16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putBoolean(mKey, value); 16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tryCommit(editor); 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attempts to get a persisted boolean from the {@link android.content.SharedPreferences}. 16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultReturnValue The default value to return if either this 16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference is not persistent or this Preference is not in the 16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences. 16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The value from the SharedPreferences or the default return 16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPersistedString(String) 16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #persistBoolean(boolean) 16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean getPersistedBoolean(boolean defaultReturnValue) { 16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!shouldPersist()) { 16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return defaultReturnValue; 16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPreferenceManager.getSharedPreferences().getBoolean(mKey, defaultReturnValue); 16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1663791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette boolean canRecycleLayout() { 1664791b37e0d9375789c2930ed170d202ea728390fdAlan Viverette return mCanRecycleLayout; 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getFilterableStringBuilder().toString(); 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the text that will be used to filter this Preference depending on 16749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user input. 16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If overridding and calling through to the superclass, make sure to prepend 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your additions with a space. 16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Text as a {@link StringBuilder} that will be used to filter this 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preference. By default, this is the title and summary 16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (concatenated with a space). 16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder getFilterableStringBuilder() { 16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(); 16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence title = getTitle(); 16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(title)) { 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(title).append(' '); 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence summary = getSummary(); 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(summary)) { 16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(summary).append(' '); 16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16930bb9960598067f3320cdae8ab42c1ba0f3376f21Tammo Spalink if (sb.length() > 0) { 16940bb9960598067f3320cdae8ab42c1ba0f3376f21Tammo Spalink // Drop the last space 16950bb9960598067f3320cdae8ab42c1ba0f3376f21Tammo Spalink sb.setLength(sb.length() - 1); 16960bb9960598067f3320cdae8ab42c1ba0f3376f21Tammo Spalink } 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb; 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Store this Preference hierarchy's frozen state into the given container. 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param container The Bundle in which to save the instance of this Preference. 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #restoreHierarchyState 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void saveHierarchyState(Bundle container) { 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchSaveInstanceState(container); 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by {@link #saveHierarchyState} to store the instance for this Preference and its children. 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * May be overridden to modify how the save happens for children. For example, some 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference objects may want to not store an instance for their children. 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param container The Bundle in which to save the instance of this Preference. 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #saveHierarchyState 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchSaveInstanceState(Bundle container) { 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (hasKey()) { 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBaseMethodCalled = false; 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable state = onSaveInstanceState(); 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mBaseMethodCalled) { 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException( 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Derived class did not call super.onSaveInstanceState()"); 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (state != null) { 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project container.putParcelable(mKey, state); 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Hook allowing a Preference to generate a representation of its internal 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state that can later be used to create a new instance with that same 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state. This state should only contain information that is not persistent 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or can be reconstructed later. 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Parcelable object containing the current dynamic state of 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this Preference, or null if there is nothing interesting to save. 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation returns null. 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #saveHierarchyState 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Parcelable onSaveInstanceState() { 17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBaseMethodCalled = true; 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BaseSavedState.EMPTY_STATE; 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Restore this Preference hierarchy's previously saved state from the given container. 17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param container The Bundle that holds the previously saved state. 17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #saveHierarchyState 17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void restoreHierarchyState(Bundle container) { 17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchRestoreInstanceState(container); 17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by {@link #restoreHierarchyState} to retrieve the saved state for this 17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preference and its children. May be overridden to modify how restoring 17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happens to the children of a Preference. For example, some Preference objects may 17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not want to save state for their children. 17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param container The Bundle that holds the previously saved state. 17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #restoreHierarchyState 17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchRestoreInstanceState(Bundle container) { 17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (hasKey()) { 17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable state = container.getParcelable(mKey); 17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (state != null) { 17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBaseMethodCalled = false; 17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onRestoreInstanceState(state); 17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mBaseMethodCalled) { 17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException( 17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Derived class did not call super.onRestoreInstanceState()"); 17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Hook allowing a Preference to re-apply a representation of its internal 17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state that had previously been generated by {@link #onSaveInstanceState}. 17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This function will never be called with a null state. 17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param state The saved state that had previously been returned by 17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState}. 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #restoreHierarchyState 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Parcelable state) { 18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBaseMethodCalled = true; 18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (state != BaseSavedState.EMPTY_STATE && state != null) { 18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Wrong state class -- expecting Preference State"); 18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A base class for managing the instance state of a {@link Preference}. 18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class BaseSavedState extends AbsSavedState { 18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BaseSavedState(Parcel source) { 18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BaseSavedState(Parcelable superState) { 18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(superState); 18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<BaseSavedState> CREATOR = 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Parcelable.Creator<BaseSavedState>() { 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BaseSavedState createFromParcel(Parcel in) { 18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new BaseSavedState(in); 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BaseSavedState[] newArray(int size) { 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new BaseSavedState[size]; 18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1831