16904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/* 26904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Copyright (C) 2015 The Android Open Source Project 36904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 46904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 56904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * you may not use this file except in compliance with the License. 66904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * You may obtain a copy of the License at 76904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 86904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 96904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Unless required by applicable law or agreed to in writing, software 116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * See the License for the specific language governing permissions and 146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * limitations under the License 156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpackage android.support.v7.preference; 186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.Context; 206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.Intent; 216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.SharedPreferences; 226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.res.TypedArray; 236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.graphics.drawable.Drawable; 246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.os.Bundle; 256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.os.Parcel; 266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.os.Parcelable; 276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.support.annotation.NonNull; 286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.support.v4.content.ContextCompat; 296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.support.v4.content.SharedPreferencesCompat; 3084765eaea7da18d0576db557959129e9d0db8e8cTony Mantlerimport android.support.v4.content.res.TypedArrayUtils; 316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.text.TextUtils; 326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.util.AttributeSet; 336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.AbsSavedState; 346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.View; 356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.ViewGroup; 366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.ImageView; 376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.TextView; 386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport java.util.ArrayList; 406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport java.util.List; 416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/** 436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Represents the basic Preference UI building 446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * block displayed by a {@link PreferenceFragmentCompat} in the form of a 456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.support.v7.widget.RecyclerView}. This class provides data for the 466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.view.View} to be displayed 476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * in the list and associates with a {@link SharedPreferences} to 486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * store/retrieve the preference data. 496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * When specifying a preference hierarchy in XML, each element can point to a 516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * subclass of {@link Preference}, similar to the view hierarchy and layouts. 526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This class contains a {@code key} that will be used as the key into the 546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link SharedPreferences}. It is up to the subclass to decide how to store 556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the value. 566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <div class="special reference"> 586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <h3>Developer Guides</h3> 596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p>For information about building a settings UI with Preferences, 606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * read the <a href="{@docRoot}guide/topics/ui/settings.html">Settings</a> 616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * guide.</p> 626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * </div> 636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_icon 656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_key 666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_title 676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_summary 686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_order 696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_fragment 706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_layout 716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_widgetLayout 726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_enabled 736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_selectable 746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_dependency 756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_persistent 766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_defaultValue 776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#Preference_shouldDisableView 786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 79671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantlerpublic class Preference implements Comparable<Preference> { 806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Specify for {@link #setOrder(int)} if a specific order is not required. 826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public static final int DEFAULT_ORDER = Integer.MAX_VALUE; 846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private Context mContext; 866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private PreferenceManager mPreferenceManager; 876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Set when added to hierarchy since we need a unique ID within that 906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * hierarchy. 916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private long mId; 936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private OnPreferenceChangeListener mOnChangeListener; 956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private OnPreferenceClickListener mOnClickListener; 966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private int mOrder = DEFAULT_ORDER; 986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private CharSequence mTitle; 996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private CharSequence mSummary; 1006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * mIconResId is overridden by mIcon, if mIcon is specified. 1026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private int mIconResId; 1046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private Drawable mIcon; 1056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private String mKey; 1066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private Intent mIntent; 1076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private String mFragment; 1086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private Bundle mExtras; 1096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mEnabled = true; 1106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mSelectable = true; 1116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mRequiresKey; 1126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mPersistent = true; 1136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private String mDependencyKey; 1146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private Object mDefaultValue; 1156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mDependencyMet = true; 1166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mParentDependencyMet = true; 1176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mVisible = true; 1186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setShouldDisableView(boolean) 1216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mShouldDisableView = true; 1236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private int mLayoutResId = R.layout.preference; 1256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private int mWidgetLayoutResId; 1266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private OnPreferenceChangeInternalListener mListener; 1286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private List<Preference> mDependents; 1306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private boolean mBaseMethodCalled; 1326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 133671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler private final View.OnClickListener mClickListener = new View.OnClickListener() { 134671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler @Override 135671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler public void onClick(View v) { 136c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav performClick(v); 137671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler } 138671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler }; 139671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler 1406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Interface definition for a callback to be invoked when the value of this 1426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link Preference} has been changed by the user and is 1436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * about to be set and/or persisted. This gives the client a chance 1446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * to prevent setting and/or persisting the value. 1456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public interface OnPreferenceChangeListener { 1476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when a Preference has been changed by the user. This is 1496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * called before the state of the Preference is about to be updated and 1506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * before the state is persisted. 1516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param preference The changed Preference. 1536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param newValue The new value of the Preference. 1546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True to update the state of the Preference with the new value. 1556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler boolean onPreferenceChange(Preference preference, Object newValue); 1576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Interface definition for a callback to be invoked when a {@link Preference} is 1616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * clicked. 1626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public interface OnPreferenceClickListener { 1646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when a Preference has been clicked. 1666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param preference The Preference that was clicked. 1686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if the click was handled. 1696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler boolean onPreferenceClick(Preference preference); 1716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 1726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Interface definition for a callback to be invoked when this 1756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link Preference} is changed or, if this is a group, there is an 1766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * addition/removal of {@link Preference}(s). This is used internally. 1776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler interface OnPreferenceChangeInternalListener { 1796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when this Preference has changed. 1816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param preference This preference. 1836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler void onPreferenceChange(Preference preference); 1856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when this group has added/removed {@link Preference}(s). 1886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param preference This Preference. 1906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler void onPreferenceHierarchyChange(Preference preference); 1926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 1936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 1946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when this preference has changed its visibility. 1956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 1966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param preference This Preference. 1976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler void onPreferenceVisibilityChange(Preference preference); 1996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 2026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Perform inflation from XML and apply a class-specific base style. This 2036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * constructor of Preference allows subclasses to use their own base style 2046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * when they are inflating. For example, a {@link CheckBoxPreference} 2056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * constructor calls this version of the super class constructor and 2066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * supplies {@code android.R.attr.checkBoxPreferenceStyle} for 2076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <var>defStyleAttr</var>. This allows the theme's checkbox preference 2086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * style to modify all of the base preference attributes as well as the 2096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link CheckBoxPreference} class's attributes. 2106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 2116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param context The Context this is associated with, through which it can 2126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * access the current theme, resources, 2136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.content.SharedPreferences}, etc. 2146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param attrs The attributes of the XML tag that is inflating the 2156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * preference. 2166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defStyleAttr An attribute in the current theme that contains a 2176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * reference to a style resource that supplies default values for 2186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the view. Can be 0 to not look for defaults. 2196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defStyleRes A resource identifier of a style resource that 2206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * supplies default values for the view, used only if 2216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * defStyleAttr is 0 or can not be found in the theme. Can be 0 2226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * to not look for defaults. 2236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #Preference(Context, android.util.AttributeSet) 2246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 2256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Preference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 2266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mContext = context; 2276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final TypedArray a = context.obtainStyledAttributes( 2296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler attrs, R.styleable.Preference, defStyleAttr, defStyleRes); 23084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 23184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mIconResId = TypedArrayUtils.getResourceId(a, R.styleable.Preference_icon, 23284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_icon, 0); 23384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 23484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mKey = TypedArrayUtils.getString(a, R.styleable.Preference_key, 235e210a6c29776ebfa4bff3e540166d6d5400b4dbbTony Mantler R.styleable.Preference_android_key); 23684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 23784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mTitle = TypedArrayUtils.getString(a, R.styleable.Preference_title, 23884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_title); 23984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 24084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mSummary = TypedArrayUtils.getString(a, R.styleable.Preference_summary, 24184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_summary); 24284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 24384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mOrder = TypedArrayUtils.getInt(a, R.styleable.Preference_order, 24484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_order, DEFAULT_ORDER); 24584765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 24684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mFragment = TypedArrayUtils.getString(a, R.styleable.Preference_fragment, 24784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_fragment); 24884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 24984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mLayoutResId = TypedArrayUtils.getResourceId(a, R.styleable.Preference_layout, 25084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_layout, R.layout.preference); 25184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 25284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mWidgetLayoutResId = TypedArrayUtils.getResourceId(a, R.styleable.Preference_widgetLayout, 25384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_widgetLayout, 0); 25484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 25584765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mEnabled = TypedArrayUtils.getBoolean(a, R.styleable.Preference_enabled, 25684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_enabled, true); 25784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 25884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mSelectable = TypedArrayUtils.getBoolean(a, R.styleable.Preference_selectable, 25984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_selectable, true); 26084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 26184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mPersistent = TypedArrayUtils.getBoolean(a, R.styleable.Preference_persistent, 26284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_persistent, true); 26384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 26484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mDependencyKey = TypedArrayUtils.getString(a, R.styleable.Preference_dependency, 26584765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_android_dependency); 26684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 26784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler if (a.hasValue(R.styleable.Preference_defaultValue)) { 26884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mDefaultValue = onGetDefaultValue(a, R.styleable.Preference_defaultValue); 26984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler } else if (a.hasValue(R.styleable.Preference_android_defaultValue)) { 27084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mDefaultValue = onGetDefaultValue(a, R.styleable.Preference_android_defaultValue); 2716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 27284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 27384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler mShouldDisableView = 27484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler TypedArrayUtils.getBoolean(a, R.styleable.Preference_shouldDisableView, 27584765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.Preference_shouldDisableView, true); 27684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 2776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler a.recycle(); 2786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 2796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 2806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 2816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Perform inflation from XML and apply a class-specific base style. This 2826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * constructor of Preference allows subclasses to use their own base style 2836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * when they are inflating. For example, a {@link CheckBoxPreference} 2846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * constructor calls this version of the super class constructor and 2856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * supplies {@code android.R.attr.checkBoxPreferenceStyle} for 2866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <var>defStyleAttr</var>. This allows the theme's checkbox preference 2876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * style to modify all of the base preference attributes as well as the 2886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link CheckBoxPreference} class's attributes. 2896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 2906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param context The Context this is associated with, through which it can 2916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * access the current theme, resources, 2926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.content.SharedPreferences}, etc. 2936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param attrs The attributes of the XML tag that is inflating the 2946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * preference. 2956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defStyleAttr An attribute in the current theme that contains a 2966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * reference to a style resource that supplies default values for 2976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the view. Can be 0 to not look for defaults. 2986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #Preference(Context, AttributeSet) 2996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Preference(Context context, AttributeSet attrs, int defStyleAttr) { 3016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, defStyleAttr, 0); 3026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Constructor that is called when inflating a Preference from XML. This is 3066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * called when a Preference is being constructed from an XML file, supplying 3076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * attributes that were specified in the XML file. This version uses a 3086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * default style of 0, so the only attribute values applied are those in the 3096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Context's Theme and the given AttributeSet. 3106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param context The Context this is associated with, through which it can 3126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * access the current theme, resources, {@link android.content.SharedPreferences}, 3136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * etc. 3146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param attrs The attributes of the XML tag that is inflating the 3156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * preference. 3166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #Preference(Context, AttributeSet, int) 3176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Preference(Context context, AttributeSet attrs) { 3196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, R.attr.preferenceStyle); 3206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Constructor to create a Preference. 3246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param context The Context in which to store Preference values. 3266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Preference(Context context) { 3286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, null); 3296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when a Preference is being inflated and the default value 3336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * attribute needs to be read. Since different Preference types have 3346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * different value types, the subclass should get and return the default 3356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value which will be its value type. 3366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 3376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * For example, if the value type is String, the body of the method would 3386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * proxy to {@link TypedArray#getString(int)}. 3396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param a The set of attributes. 3416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param index The index of the default value attribute. 3426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The default value of this preference type. 3436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Object onGetDefaultValue(TypedArray a, int index) { 3456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return null; 3466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets an {@link Intent} to be used for 3506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link Context#startActivity(Intent)} when this Preference is clicked. 3516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param intent The intent associated with this Preference. 3536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setIntent(Intent intent) { 3556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mIntent = intent; 3566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Return the {@link Intent} associated with this Preference. 3606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The {@link Intent} last set via {@link #setIntent(Intent)} or XML. 3626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Intent getIntent() { 3646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mIntent; 3656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the class name of a fragment to be shown when this Preference is clicked. 3696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param fragment The class name of the fragment associated with this Preference. 3716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setFragment(String fragment) { 3736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mFragment = fragment; 3746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Return the fragment class name associated with this Preference. 3786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 3796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The fragment class name last set via {@link #setFragment} or XML. 3806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public String getFragment() { 3826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mFragment; 3836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Return the extras Bundle object associated with this preference, creating 3876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * a new Bundle if there currently isn't one. You can use this to get and 3886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * set individual extra key/value pairs. 3896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 3906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Bundle getExtras() { 3916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mExtras == null) { 3926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mExtras = new Bundle(); 3936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mExtras; 3956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 3966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 3976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 3986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Return the extras Bundle object associated with this preference, 3996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * returning null if there is not currently one. 4006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 4016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Bundle peekExtras() { 4026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mExtras; 4036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 4066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the layout resource that is inflated as the {@link View} to be shown 4076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * for this Preference. In most cases, the default layout is sufficient for 4086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * custom Preference objects and only the widget layout needs to be changed. 4096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 4106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This layout should contain a {@link ViewGroup} with ID 4116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.R.id#widget_frame} to be the parent of the specific widget 4126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * for this Preference. It should similarly contain 4136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.R.id#title} and {@link android.R.id#summary}. 4146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 4156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * It is an error to change the layout after adding the preference to a {@link PreferenceGroup} 4166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 4176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param layoutResId The layout resource ID to be inflated and returned as 4186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * a {@link View}. 4196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setWidgetLayoutResource(int) 4206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 4216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setLayoutResource(int layoutResId) { 4226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mLayoutResId = layoutResId; 4236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 4266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Gets the layout resource that will be shown as the {@link View} for this Preference. 4276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 4286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The layout resource ID. 4296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 4306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public final int getLayoutResource() { 4316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mLayoutResId; 4326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 4356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the layout for the controllable widget portion of this Preference. This 4366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * is inflated into the main layout. For example, a {@link CheckBoxPreference} 4376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * would specify a custom layout (consisting of just the CheckBox) here, 4386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * instead of creating its own main layout. 4396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 4406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * It is an error to change the layout after adding the preference to a {@link PreferenceGroup} 4416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 4426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param widgetLayoutResId The layout resource ID to be inflated into the 4436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * main layout. 4446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setLayoutResource(int) 4456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 4466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setWidgetLayoutResource(int widgetLayoutResId) { 4476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mWidgetLayoutResId = widgetLayoutResId; 4486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 4516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Gets the layout resource for the controllable widget portion of this Preference. 4526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 4536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The layout resource ID. 4546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 4556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public final int getWidgetLayoutResource() { 4566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mWidgetLayoutResId; 4576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 4606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Binds the created View to the data for this Preference. 4616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 4626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This is a good place to grab references to custom Views in the layout and 4636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * set properties on them. 4646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 4656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Make sure to call through to the superclass's implementation. 4666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 4676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param holder The ViewHolder that provides references to the views to fill in. These views 4686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * will be recycled, so you should not hold a reference to them after this method 4696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * returns. 4706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 471671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler public void onBindViewHolder(PreferenceViewHolder holder) { 472671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler holder.itemView.setOnClickListener(mClickListener); 4736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final TextView titleView = (TextView) holder.findViewById(android.R.id.title); 4756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (titleView != null) { 4766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final CharSequence title = getTitle(); 4776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!TextUtils.isEmpty(title)) { 4786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler titleView.setText(title); 4796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler titleView.setVisibility(View.VISIBLE); 4806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else { 4816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler titleView.setVisibility(View.GONE); 4826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final TextView summaryView = (TextView) holder.findViewById(android.R.id.summary); 4866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (summaryView != null) { 4876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final CharSequence summary = getSummary(); 4886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!TextUtils.isEmpty(summary)) { 4896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler summaryView.setText(summary); 4906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler summaryView.setVisibility(View.VISIBLE); 4916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else { 4926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler summaryView.setVisibility(View.GONE); 4936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 4956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 4966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final ImageView imageView = (ImageView) holder.findViewById(android.R.id.icon); 4976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (imageView != null) { 4986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mIconResId != 0 || mIcon != null) { 4996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mIcon == null) { 5006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mIcon = ContextCompat.getDrawable(getContext(), mIconResId); 5016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mIcon != null) { 5036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler imageView.setImageDrawable(mIcon); 5046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler imageView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE); 5076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final View imageFrame = holder.findViewById(R.id.icon_frame); 5106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (imageFrame != null) { 5116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler imageFrame.setVisibility(mIcon != null ? View.VISIBLE : View.GONE); 5126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mShouldDisableView) { 5156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setEnabledStateOnViews(holder.itemView, isEnabled()); 5166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else { 5176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setEnabledStateOnViews(holder.itemView, true); 5186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 5226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Makes sure the view (and any children) get the enabled state changed. 5236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 5246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void setEnabledStateOnViews(View v, boolean enabled) { 5256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler v.setEnabled(enabled); 5266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (v instanceof ViewGroup) { 5286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final ViewGroup vg = (ViewGroup) v; 5296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler for (int i = vg.getChildCount() - 1; i >= 0; i--) { 5306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setEnabledStateOnViews(vg.getChildAt(i), enabled); 5316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 5366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the order of this Preference with respect to other 5376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference objects on the same level. If this is not specified, the 5386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * default behavior is to sort alphabetically. The 5396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link PreferenceGroup#setOrderingAsAdded(boolean)} can be used to order 5406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference objects based on the order they appear in the XML. 5416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 5426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param order The order for this Preference. A lower value will be shown 5436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * first. Use {@link #DEFAULT_ORDER} to sort alphabetically or 5446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * allow ordering from XML. 5456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see PreferenceGroup#setOrderingAsAdded(boolean) 5466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #DEFAULT_ORDER 5476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 5486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setOrder(int order) { 5496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (order != mOrder) { 5506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mOrder = order; 5516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Reorder the list 5536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyHierarchyChanged(); 5546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 5586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Gets the order of this Preference with respect to other Preference objects 5596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * on the same level. 5606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 5616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The order of this Preference. 5626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setOrder(int) 5636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 5646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public int getOrder() { 5656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mOrder; 5666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 5696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the title for this Preference with a CharSequence. 5706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This title will be placed into the ID 5716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.R.id#title} within the View bound by 5726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link #onBindViewHolder(PreferenceViewHolder)}. 5736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 5746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param title The title for this Preference. 5756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 5766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setTitle(CharSequence title) { 5776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (title == null && mTitle != null || title != null && !title.equals(mTitle)) { 5786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mTitle = title; 5796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 5806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 5846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the title for this Preference with a resource ID. 5856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 5866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setTitle(CharSequence) 5876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param titleResId The title as a resource ID. 5886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 5896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setTitle(int titleResId) { 5906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setTitle(mContext.getString(titleResId)); 5916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 5926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 5936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 5946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the title of this Preference. 5956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 5966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The title. 5976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setTitle(CharSequence) 5986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 5996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CharSequence getTitle() { 6006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mTitle; 6016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the icon for this Preference with a Drawable. 6056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This icon will be placed into the ID 6066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.R.id#icon} within the View created by 6076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link #onBindViewHolder(PreferenceViewHolder)}. 6086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param icon The optional icon for this Preference. 6106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setIcon(Drawable icon) { 6126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if ((icon == null && mIcon != null) || (icon != null && mIcon != icon)) { 6136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mIcon = icon; 6146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mIconResId = 0; 6156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 6166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the icon for this Preference with a resource ID. 6216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setIcon(Drawable) 6236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param iconResId The icon as a resource ID. 6246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setIcon(int iconResId) { 6266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setIcon(ContextCompat.getDrawable(mContext, iconResId)); 6276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mIconResId = iconResId; 6286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the icon of this Preference. 6326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The icon. 6346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setIcon(Drawable) 6356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Drawable getIcon() { 6376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mIcon; 6386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the summary of this Preference. 6426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The summary. 6446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setSummary(CharSequence) 6456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CharSequence getSummary() { 6476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mSummary; 6486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the summary for this Preference with a CharSequence. 6526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summary The summary for the preference. 6546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummary(CharSequence summary) { 6566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (summary == null && mSummary != null || summary != null && !summary.equals(mSummary)) { 6576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mSummary = summary; 6586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 6596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the summary for this Preference with a resource ID. 6646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setSummary(CharSequence) 6666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param summaryResId The summary as a resource. 6676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSummary(int summaryResId) { 6696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler setSummary(mContext.getString(summaryResId)); 6706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether this Preference is enabled. If disabled, it will 6746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * not handle clicks. 6756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param enabled Set true to enable it. 6776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setEnabled(boolean enabled) { 6796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mEnabled != enabled) { 6806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mEnabled = enabled; 6816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Enabled state can change dependent preferences' states, so notify 6836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyDependencyChange(shouldDisableDependents()); 6846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 6866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this Preference should be enabled in the list. 6916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 6926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if this Preference is enabled, false otherwise. 6936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 6946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean isEnabled() { 6956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mEnabled && mDependencyMet && mParentDependencyMet; 6966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 6976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 6986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 6996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether this Preference is selectable. 7006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 7016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param selectable Set true to make it selectable. 7026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setSelectable(boolean selectable) { 7046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mSelectable != selectable) { 7056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mSelectable = selectable; 7066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 7076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this Preference should be selectable in the list. 7126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 7136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if it is selectable, false otherwise. 7146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean isSelectable() { 7166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mSelectable; 7176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether this Preference should disable its view when it gets 7216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * disabled. 7226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 7236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * For example, set this and {@link #setEnabled(boolean)} to false for 7246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * preferences that are only displaying information and 1) should not be 7256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * clickable 2) should not have the view set to the disabled state. 7266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 7276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param shouldDisableView Set true if this preference should disable its view 7286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * when the preference is disabled. 7296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setShouldDisableView(boolean shouldDisableView) { 7316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mShouldDisableView = shouldDisableView; 7326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 7336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this Preference should disable its view when it's action is disabled. 7376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setShouldDisableView(boolean) 7386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if it should disable the view. 7396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean getShouldDisableView() { 7416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mShouldDisableView; 7426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether this preference should be visible in the list. If false, it is excluded from 7466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the adapter, but can still be retrieved using 7476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link PreferenceFragmentCompat#findPreference(CharSequence)}. 7486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 7496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param visible Set false if this preference should be hidden from the list. 7506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public final void setVisible(boolean visible) { 7526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mVisible = visible; 7536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mListener != null) { 7546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mListener.onPreferenceVisibilityChange(this); 7556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this preference should be visible to the user in the list. 7606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setVisible(boolean) 7616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if this preference should be displayed. 7626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public final boolean isVisible() { 7646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mVisible; 7656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns a unique ID for this Preference. This ID should be unique across all 7696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference objects in a hierarchy. 7706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 7716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return A unique ID for this Preference. 7726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler long getId() { 7746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mId; 7756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Processes a click on the preference. This includes saving the value to 7796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the {@link android.content.SharedPreferences}. However, the overridden method should 7806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * call {@link #callChangeListener(Object)} to make sure the client wants to 7816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * update the preference's state with the new value. 7826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onClick() { 7846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 7876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the key for this Preference, which is used as a key to the 7886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.content.SharedPreferences}. This should be unique for the package. 7896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 7906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param key The key for the preference. 7916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 7926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setKey(String key) { 7936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mKey = key; 7946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 7956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mRequiresKey && !hasKey()) { 7966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler requireKey(); 7976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 7996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Gets the key for this Preference, which is also the key used for storing 8026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * values into SharedPreferences. 8036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The key. 8056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public String getKey() { 8076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mKey; 8086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether the key is present, and if it isn't throws an 8126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * exception. This should be called by subclasses that store preferences in 8136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the {@link android.content.SharedPreferences}. 8146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @throws IllegalStateException If there is no key assigned. 8166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler void requireKey() { 8186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (TextUtils.isEmpty(mKey)) { 8196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler throw new IllegalStateException("Preference does not have a key assigned."); 8206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mRequiresKey = true; 8236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this Preference has a valid key. 8276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if the key exists and is not a blank string, false otherwise. 8296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean hasKey() { 8316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return !TextUtils.isEmpty(mKey); 8326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this Preference is persistent. If it is, it stores its value(s) into 8366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the persistent {@link android.content.SharedPreferences} storage. 8376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if it is persistent. 8396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean isPersistent() { 8416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPersistent; 8426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether, at the given time this method is called, 8466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * this Preference should store/restore its value(s) into the 8476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.content.SharedPreferences}. This, at minimum, checks whether this 8486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is persistent and it currently has a key. Before you 8496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * save/restore from the {@link android.content.SharedPreferences}, check this first. 8506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if it should persist the value. 8526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean shouldPersist() { 8546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager != null && isPersistent() && hasKey(); 8556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets whether this Preference is persistent. When persistent, 8596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * it stores its value(s) into the persistent {@link android.content.SharedPreferences} 8606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * storage. 8616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param persistent Set true if it should store its value(s) into the 8636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link android.content.SharedPreferences}. 8646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setPersistent(boolean persistent) { 8666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mPersistent = persistent; 8676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Call this method after the user changes the preference, but before the 8716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * internal state is set. This allows the client to ignore the user value. 8726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param newValue The new value of this Preference. 8746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if the user value should be set as the preference 8756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value (and persisted). 8766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean callChangeListener(Object newValue) { 8786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mOnChangeListener == null || mOnChangeListener.onPreferenceChange(this, newValue); 8796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the callback to be invoked when this Preference is changed by the 8836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * user (but before the internal state has been updated). 8846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param onPreferenceChangeListener The callback to be invoked. 8866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setOnPreferenceChangeListener( 8886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler OnPreferenceChangeListener onPreferenceChangeListener) { 8896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mOnChangeListener = onPreferenceChangeListener; 8906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 8916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 8926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 8936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the callback to be invoked when this Preference is changed by the 8946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * user (but before the internal state has been updated). 8956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 8966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The callback to be invoked. 8976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 8986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public OnPreferenceChangeListener getOnPreferenceChangeListener() { 8996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mOnChangeListener; 9006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 9036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the callback to be invoked when this Preference is clicked. 9046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 9056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param onPreferenceClickListener The callback to be invoked. 9066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 9076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setOnPreferenceClickListener(OnPreferenceClickListener onPreferenceClickListener) { 9086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mOnClickListener = onPreferenceClickListener; 9096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 9126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the callback to be invoked when this Preference is clicked. 9136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 9146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The callback to be invoked. 9156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 9166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public OnPreferenceClickListener getOnPreferenceClickListener() { 9176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mOnClickListener; 9186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 921c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav * @hide 922c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav */ 923c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav protected void performClick(View view) { 924c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav performClick(); 925c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 926c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav 927c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav /** 9286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when a click should be performed. 9296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 9306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @hide 9316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 9326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void performClick() { 9336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!isEnabled()) { 9356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return; 9366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler onClick(); 9396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) { 9416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return; 9426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler PreferenceManager preferenceManager = getPreferenceManager(); 9456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (preferenceManager != null) { 9466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager 9476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler .getOnPreferenceTreeClickListener(); 9486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (listener != null && listener.onPreferenceTreeClick(this)) { 9496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return; 9506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mIntent != null) { 9546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Context context = getContext(); 9556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler context.startActivity(mIntent); 9566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 9606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the {@link android.content.Context} of this Preference. 9616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Each Preference in a Preference hierarchy can be 9626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * from different Context (for example, if multiple activities provide preferences into a single 9636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link PreferenceFragmentCompat}). This Context will be used to save the Preference values. 9646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 9656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The Context of this Preference. 9666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 9676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public Context getContext() { 9686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mContext; 9696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 9726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the {@link android.content.SharedPreferences} where this Preference can read its 9736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value(s). Usually, it's easier to use one of the helper read methods: 9746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link #getPersistedBoolean(boolean)}, {@link #getPersistedFloat(float)}, 9756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link #getPersistedInt(int)}, {@link #getPersistedLong(long)}, 9764c867cf4f0537d940d512aad679acacbcdf16765Tony Mantler * {@link #getPersistedString(String)}. 9776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The {@link android.content.SharedPreferences} where this Preference reads its 9786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value(s), or null if it isn't attached to a Preference hierarchy. 9796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 9806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public SharedPreferences getSharedPreferences() { 9816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mPreferenceManager == null) { 9826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return null; 9836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.getSharedPreferences(); 9866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 9876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 9886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 9896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Compares Preference objects based on order (if set), otherwise alphabetically on the titles. 9906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 9916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param another The Preference to compare to this one. 9926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return 0 if the same; less than 0 if this Preference sorts ahead of <var>another</var>; 9936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * greater than 0 if this Preference sorts after <var>another</var>. 9946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 9956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 9966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public int compareTo(@NonNull Preference another) { 9976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mOrder != another.mOrder) { 9986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Do order comparison 9996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mOrder - another.mOrder; 10006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else if (mTitle == another.mTitle) { 10016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // If titles are null or share same object comparison 10026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return 0; 10036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else if (mTitle == null) { 10046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return 1; 10056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else if (another.mTitle == null) { 10066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return -1; 10076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else { 10086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Do name comparison 10096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mTitle.toString().compareToIgnoreCase(another.mTitle.toString()); 10106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 10146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the internal change listener. 10156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 10166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param listener The listener. 10176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #notifyChanged() 10186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 10196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final void setOnPreferenceChangeInternalListener(OnPreferenceChangeInternalListener listener) { 10206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mListener = listener; 10216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 10246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Should be called when the data of this {@link Preference} has changed. 10256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 10266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void notifyChanged() { 10276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mListener != null) { 10286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mListener.onPreferenceChange(this); 10296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 10336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Should be called when a Preference has been 10346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * added/removed from this group, or the ordering should be 10356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * re-evaluated. 10366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 10376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void notifyHierarchyChanged() { 10386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mListener != null) { 10396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mListener.onPreferenceHierarchyChange(this); 10406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 10446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Gets the {@link PreferenceManager} that manages this Preference object's tree. 10456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 10466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The {@link PreferenceManager}. 10476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 10486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public PreferenceManager getPreferenceManager() { 10496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager; 10506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 10536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when this Preference has been attached to a Preference hierarchy. 10546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Make sure to call the super implementation. 10556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 10566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param preferenceManager The PreferenceManager of the hierarchy. 10576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 10586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onAttachedToHierarchy(PreferenceManager preferenceManager) { 10596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mPreferenceManager = preferenceManager; 10606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mId = preferenceManager.getNextId(); 10626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dispatchSetInitialValue(); 10646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 10676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when the Preference hierarchy has been attached to the 10686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * list of preferences. This can also be called when this 10696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference has been attached to a group that was already attached 10706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * to the list of preferences. 10716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 1072e61b4475e1837034d8926593aff9d35f8dfaebe2Tony Mantler public void onAttached() { 10736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // At this point, the hierarchy that this preference is in is connected 10746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // with all other preferences. 10756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler registerDependency(); 10766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void registerDependency() { 10796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (TextUtils.isEmpty(mDependencyKey)) return; 10816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Preference preference = findPreferenceInHierarchy(mDependencyKey); 10836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (preference != null) { 10846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler preference.registerDependent(this); 10856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else { 10866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler throw new IllegalStateException("Dependency \"" + mDependencyKey 10876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler + "\" not found for preference \"" + mKey + "\" (title: \"" + mTitle + "\""); 10886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 10916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void unregisterDependency() { 10926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mDependencyKey != null) { 10936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final Preference oldDependency = findPreferenceInHierarchy(mDependencyKey); 10946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (oldDependency != null) { 10956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler oldDependency.unregisterDependent(this); 10966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 10996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 11016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Finds a Preference in this hierarchy (the whole thing, 11026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * even above/below your {@link PreferenceScreen} screen break) with the given 11036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * key. 11046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 11056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This only functions after we have been attached to a hierarchy. 11066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 11076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param key The key of the Preference to find. 11086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The Preference that uses the given key. 11096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 11106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Preference findPreferenceInHierarchy(String key) { 11116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (TextUtils.isEmpty(key) || mPreferenceManager == null) { 11126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return null; 11136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.findPreference(key); 11166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 11196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Adds a dependent Preference on this Preference so we can notify it. 11206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Usually, the dependent Preference registers itself (it's good for it to 11216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * know it depends on something), so please use 11226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link Preference#setDependency(String)} on the dependent Preference. 11236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 11246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param dependent The dependent Preference that will be enabled/disabled 11256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * according to the state of this Preference. 11266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 11276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void registerDependent(Preference dependent) { 11286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mDependents == null) { 11296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDependents = new ArrayList<Preference>(); 11306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDependents.add(dependent); 11336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dependent.onDependencyChanged(this, shouldDisableDependents()); 11356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 11386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Removes a dependent Preference on this Preference. 11396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 11406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param dependent The dependent Preference that will be enabled/disabled 11416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * according to the state of this Preference. 11426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return Returns the same Preference object, for chaining multiple calls 11436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * into a single statement. 11446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 11456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void unregisterDependent(Preference dependent) { 11466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mDependents != null) { 11476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDependents.remove(dependent); 11486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 11526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Notifies any listening dependents of a change that affects the 11536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * dependency. 11546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 11556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param disableDependents Whether this Preference should disable 11566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * its dependents. 11576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 11586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void notifyDependencyChange(boolean disableDependents) { 11596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final List<Preference> dependents = mDependents; 11606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (dependents == null) { 11626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return; 11636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final int dependentsCount = dependents.size(); 11666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler for (int i = 0; i < dependentsCount; i++) { 11676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dependents.get(i).onDependencyChanged(this, disableDependents); 11686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 11726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when the dependency changes. 11736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 11746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param dependency The Preference that this Preference depends on. 11756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param disableDependent Set true to disable this Preference. 11766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 11776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void onDependencyChanged(Preference dependency, boolean disableDependent) { 11786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mDependencyMet == disableDependent) { 11796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDependencyMet = !disableDependent; 11806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Enabled state can change dependent preferences' states, so notify 11826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyDependencyChange(shouldDisableDependents()); 11836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 11856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 11876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 11896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when the implicit parent dependency changes. 11906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 11916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param parent The Preference that this Preference depends on. 11926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param disableChild Set true to disable this Preference. 11936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 11946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void onParentChanged(Preference parent, boolean disableChild) { 11956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mParentDependencyMet == disableChild) { 11966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mParentDependencyMet = !disableChild; 11976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 11986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Enabled state can change dependent preferences' states, so notify 11996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyDependencyChange(shouldDisableDependents()); 12006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler notifyChanged(); 12026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Checks whether this preference's dependents should currently be 12076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * disabled. 12086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 12096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if the dependents should be disabled, otherwise false. 12106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 12116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean shouldDisableDependents() { 12126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return !isEnabled(); 12136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the key of a Preference that this Preference will depend on. If that 12176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is not set or is off, this Preference will be disabled. 12186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 12196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param dependencyKey The key of the Preference that this depends on. 12206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 12216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setDependency(String dependencyKey) { 12226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Unregister the old dependency, if we had one 12236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler unregisterDependency(); 12246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Register the new 12266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDependencyKey = dependencyKey; 12276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler registerDependency(); 12286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the key of the dependency on this Preference. 12326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 12336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The key of the dependency. 12346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #setDependency(String) 12356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 12366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public String getDependency() { 12376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mDependencyKey; 12386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called when this Preference is being removed from the hierarchy. You 12426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * should remove any references to this Preference that you know about. Make 12436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * sure to call through to the superclass implementation. 12446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 12456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onPrepareForRemoval() { 12466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler unregisterDependency(); 12476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Sets the default value for this Preference, which will be set either if 12516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * persistence is off or persistence is on and the preference is not found 12526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * in the persistent storage. 12536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 12546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultValue The default value. 12556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 12566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void setDefaultValue(Object defaultValue) { 12576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mDefaultValue = defaultValue; 12586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void dispatchSetInitialValue() { 12616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // By now, we know if we are persistent. 12626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final boolean shouldPersist = shouldPersist(); 12636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!shouldPersist || !getSharedPreferences().contains(mKey)) { 12646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mDefaultValue != null) { 12656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler onSetInitialValue(false, mDefaultValue); 12666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } else { 12686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler onSetInitialValue(true, null); 12696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Implement this to set the initial value of the Preference. 12746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 12756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * If <var>restorePersistedValue</var> is true, you should restore the 12766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference value from the {@link android.content.SharedPreferences}. If 12776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <var>restorePersistedValue</var> is false, you should set the Preference 12786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value to defaultValue that is given (and possibly store to SharedPreferences 12796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * if {@link #shouldPersist()} is true). 12806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 12816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This may not always be called. One example is if it should not persist 12826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * but there is no default value given. 12836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 12846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param restorePersistedValue True to restore the persisted value; 12856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * false to use the given <var>defaultValue</var>. 12866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultValue The default value for this Preference. Only use this 12876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * if <var>restorePersistedValue</var> is false. 12886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 12896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { 12906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private void tryCommit(@NonNull SharedPreferences.Editor editor) { 12936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (mPreferenceManager.shouldCommit()) { 12946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SharedPreferencesCompat.EditorCompat.getInstance().apply(editor); 12956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 12976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 12986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 12996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to persist a String to the {@link android.content.SharedPreferences}. 13006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 13016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This will check if this Preference is persistent, get an editor from 13026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * the {@link PreferenceManager}, put in the string, and check if we should commit (and 13036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * commit if so). 13046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 13056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param value The value to persist. 13066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if the Preference is persistent. (This is not whether the 13076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value was persisted, since we may not necessarily commit if there 13086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * will be a batch commit later.) 13096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedString(String) 13106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 13116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean persistString(String value) { 13126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (shouldPersist()) { 13136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Shouldn't store null 13146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (value == getPersistedString(null)) { 13156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // It's already there, so the same as persisting 13166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 13176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 13206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler editor.putString(mKey, value); 13216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler tryCommit(editor); 13226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 13236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return false; 13256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 13286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to get a persisted String from the {@link android.content.SharedPreferences}. 13296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 13306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This will check if this Preference is persistent, get the SharedPreferences 13316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * from the {@link PreferenceManager}, and get the value. 13326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 13336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultReturnValue The default value to return if either the 13346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is not persistent or the Preference is not in the 13356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * shared preferences. 13366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The value from the SharedPreferences or the default return 13376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value. 13386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistString(String) 13396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 13406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected String getPersistedString(String defaultReturnValue) { 13416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!shouldPersist()) { 13426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return defaultReturnValue; 13436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.getSharedPreferences().getString(mKey, defaultReturnValue); 13466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 13496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to persist an int to the {@link android.content.SharedPreferences}. 13506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 13516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param value The value to persist. 13526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if the Preference is persistent. (This is not whether the 13536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value was persisted, since we may not necessarily commit if there 13546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * will be a batch commit later.) 13556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistString(String) 13566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedInt(int) 13576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 13586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean persistInt(int value) { 13596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (shouldPersist()) { 13606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (value == getPersistedInt(~value)) { 13616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // It's already there, so the same as persisting 13626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 13636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 13666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler editor.putInt(mKey, value); 13676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler tryCommit(editor); 13686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 13696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return false; 13716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 13746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to get a persisted int from the {@link android.content.SharedPreferences}. 13756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 13766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultReturnValue The default value to return if either this 13776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is not persistent or this Preference is not in the 13786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * SharedPreferences. 13796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The value from the SharedPreferences or the default return 13806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value. 13816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedString(String) 13826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistInt(int) 13836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 13846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected int getPersistedInt(int defaultReturnValue) { 13856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!shouldPersist()) { 13866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return defaultReturnValue; 13876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.getSharedPreferences().getInt(mKey, defaultReturnValue); 13906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 13916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 13926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 13936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to persist a float to the {@link android.content.SharedPreferences}. 13946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 13956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param value The value to persist. 13966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if this Preference is persistent. (This is not whether the 13976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value was persisted, since we may not necessarily commit if there 13986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * will be a batch commit later.) 13996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistString(String) 14006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedFloat(float) 14016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 14026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean persistFloat(float value) { 14036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (shouldPersist()) { 14046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (value == getPersistedFloat(Float.NaN)) { 14056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // It's already there, so the same as persisting 14066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 14076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 14106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler editor.putFloat(mKey, value); 14116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler tryCommit(editor); 14126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 14136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return false; 14156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 14186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to get a persisted float from the {@link android.content.SharedPreferences}. 14196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 14206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultReturnValue The default value to return if either this 14216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is not persistent or this Preference is not in the 14226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * SharedPreferences. 14236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The value from the SharedPreferences or the default return 14246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value. 14256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedString(String) 14266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistFloat(float) 14276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 14286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected float getPersistedFloat(float defaultReturnValue) { 14296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!shouldPersist()) { 14306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return defaultReturnValue; 14316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.getSharedPreferences().getFloat(mKey, defaultReturnValue); 14346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 14376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to persist a long to the {@link android.content.SharedPreferences}. 14386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 14396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param value The value to persist. 14406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if this Preference is persistent. (This is not whether the 14416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value was persisted, since we may not necessarily commit if there 14426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * will be a batch commit later.) 14436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistString(String) 14446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedLong(long) 14456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 14466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean persistLong(long value) { 14476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (shouldPersist()) { 14486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (value == getPersistedLong(~value)) { 14496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // It's already there, so the same as persisting 14506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 14516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 14546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler editor.putLong(mKey, value); 14556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler tryCommit(editor); 14566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 14576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return false; 14596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 14626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to get a persisted long from the {@link android.content.SharedPreferences}. 14636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 14646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultReturnValue The default value to return if either this 14656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is not persistent or this Preference is not in the 14666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * SharedPreferences. 14676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The value from the SharedPreferences or the default return 14686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value. 14696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedString(String) 14706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistLong(long) 14716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 14726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected long getPersistedLong(long defaultReturnValue) { 14736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!shouldPersist()) { 14746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return defaultReturnValue; 14756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.getSharedPreferences().getLong(mKey, defaultReturnValue); 14786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 14816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to persist a boolean to the {@link android.content.SharedPreferences}. 14826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 14836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param value The value to persist. 14846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return True if this Preference is persistent. (This is not whether the 14856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value was persisted, since we may not necessarily commit if there 14866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * will be a batch commit later.) 14876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistString(String) 14886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedBoolean(boolean) 14896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 14906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean persistBoolean(boolean value) { 14916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (shouldPersist()) { 14926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (value == getPersistedBoolean(!value)) { 14936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // It's already there, so the same as persisting 14946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 14956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 14966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 14976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler SharedPreferences.Editor editor = mPreferenceManager.getEditor(); 14986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler editor.putBoolean(mKey, value); 14996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler tryCommit(editor); 15006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return true; 15016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return false; 15036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 15066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Attempts to get a persisted boolean from the {@link android.content.SharedPreferences}. 15076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param defaultReturnValue The default value to return if either this 15096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference is not persistent or this Preference is not in the 15106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * SharedPreferences. 15116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return The value from the SharedPreferences or the default return 15126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * value. 15136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #getPersistedString(String) 15146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #persistBoolean(boolean) 15156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 15166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected boolean getPersistedBoolean(boolean defaultReturnValue) { 15176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!shouldPersist()) { 15186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return defaultReturnValue; 15196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return mPreferenceManager.getSharedPreferences().getBoolean(mKey, defaultReturnValue); 15226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 15256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public String toString() { 15266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return getFilterableStringBuilder().toString(); 15276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 15306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Returns the text that will be used to filter this Preference depending on 15316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * user input. 15326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 15336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * If overridding and calling through to the superclass, make sure to prepend 15346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * your additions with a space. 15356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return Text as a {@link StringBuilder} that will be used to filter this 15376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * preference. By default, this is the title and summary 15386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * (concatenated with a space). 15396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 15406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler StringBuilder getFilterableStringBuilder() { 15416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler StringBuilder sb = new StringBuilder(); 15426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler CharSequence title = getTitle(); 15436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!TextUtils.isEmpty(title)) { 15446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler sb.append(title).append(' '); 15456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler CharSequence summary = getSummary(); 15476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!TextUtils.isEmpty(summary)) { 15486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler sb.append(summary).append(' '); 15496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (sb.length() > 0) { 15516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler // Drop the last space 15526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler sb.setLength(sb.length() - 1); 15536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return sb; 15556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 15586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Store this Preference hierarchy's frozen state into the given container. 15596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param container The Bundle in which to save the instance of this Preference. 15616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #restoreHierarchyState 15636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #onSaveInstanceState 15646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 15656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void saveHierarchyState(Bundle container) { 15666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dispatchSaveInstanceState(container); 15676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 15706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called by {@link #saveHierarchyState} to store the instance for this Preference and its children. 15716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * May be overridden to modify how the save happens for children. For example, some 15726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference objects may want to not store an instance for their children. 15736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param container The Bundle in which to save the instance of this Preference. 15756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #saveHierarchyState 15776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #onSaveInstanceState 15786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 15796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler void dispatchSaveInstanceState(Bundle container) { 15806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (hasKey()) { 15816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mBaseMethodCalled = false; 15826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Parcelable state = onSaveInstanceState(); 15836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!mBaseMethodCalled) { 15846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler throw new IllegalStateException( 15856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler "Derived class did not call super.onSaveInstanceState()"); 15866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (state != null) { 15886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler container.putParcelable(mKey, state); 15896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 15926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 15936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 15946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Hook allowing a Preference to generate a representation of its internal 15956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * state that can later be used to create a new instance with that same 15966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * state. This state should only contain information that is not persistent 15976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * or can be reconstructed later. 15986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 15996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @return A Parcelable object containing the current dynamic state of 16006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * this Preference, or null if there is nothing interesting to save. 16016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * The default implementation returns null. 16026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #onRestoreInstanceState 16036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #saveHierarchyState 16046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 16056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected Parcelable onSaveInstanceState() { 16066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mBaseMethodCalled = true; 16076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return BaseSavedState.EMPTY_STATE; 16086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 16116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Restore this Preference hierarchy's previously saved state from the given container. 16126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 16136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param container The Bundle that holds the previously saved state. 16146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 16156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #saveHierarchyState 16166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #onRestoreInstanceState 16176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 16186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public void restoreHierarchyState(Bundle container) { 16196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler dispatchRestoreInstanceState(container); 16206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 16236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Called by {@link #restoreHierarchyState} to retrieve the saved state for this 16246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Preference and its children. May be overridden to modify how restoring 16256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * happens to the children of a Preference. For example, some Preference objects may 16266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * not want to save state for their children. 16276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 16286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param container The Bundle that holds the previously saved state. 16296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #restoreHierarchyState 16306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #onRestoreInstanceState 16316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 16326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler void dispatchRestoreInstanceState(Bundle container) { 16336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (hasKey()) { 16346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Parcelable state = container.getParcelable(mKey); 16356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (state != null) { 16366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mBaseMethodCalled = false; 16376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler onRestoreInstanceState(state); 16386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (!mBaseMethodCalled) { 16396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler throw new IllegalStateException( 16406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler "Derived class did not call super.onRestoreInstanceState()"); 16416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 16476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * Hook allowing a Preference to re-apply a representation of its internal 16486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * state that had previously been generated by {@link #onSaveInstanceState}. 16496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This function will never be called with a null state. 16506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 16516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @param state The saved state that had previously been returned by 16526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * {@link #onSaveInstanceState}. 16536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #onSaveInstanceState 16546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @see #restoreHierarchyState 16556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 16566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler protected void onRestoreInstanceState(Parcelable state) { 16576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler mBaseMethodCalled = true; 16586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (state != BaseSavedState.EMPTY_STATE && state != null) { 16596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler throw new IllegalArgumentException("Wrong state class -- expecting Preference State"); 16606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler /** 16646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * A base class for managing the instance state of a {@link Preference}. 16656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 16666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public static class BaseSavedState extends AbsSavedState { 16676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public BaseSavedState(Parcel source) { 16686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(source); 16696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public BaseSavedState(Parcelable superState) { 16726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(superState); 16736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public static final Parcelable.Creator<BaseSavedState> CREATOR = 16766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler new Parcelable.Creator<BaseSavedState>() { 16776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public BaseSavedState createFromParcel(Parcel in) { 16786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return new BaseSavedState(in); 16796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public BaseSavedState[] newArray(int size) { 16826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return new BaseSavedState[size]; 16836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler }; 16856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 16866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 16876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler} 1688