Merge "Add getParent() on Preference."

This commit is contained in:
Filip Pavlis
2017-01-25 10:26:17 +00:00
committed by Android (Google) Code Review
5 changed files with 51 additions and 21 deletions

View File

@@ -30768,6 +30768,7 @@ package android.preference {
method public android.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
method public android.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
method public int getOrder();
method public android.preference.PreferenceGroup getParent();
method protected boolean getPersistedBoolean(boolean);
method protected float getPersistedFloat(float);
method protected int getPersistedInt(int);

View File

@@ -33601,6 +33601,7 @@ package android.preference {
method public android.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
method public android.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
method public int getOrder();
method public android.preference.PreferenceGroup getParent();
method protected boolean getPersistedBoolean(boolean);
method protected float getPersistedFloat(float);
method protected int getPersistedInt(int);

View File

@@ -30881,6 +30881,7 @@ package android.preference {
method public android.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
method public android.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
method public int getOrder();
method public android.preference.PreferenceGroup getParent();
method protected boolean getPersistedBoolean(boolean);
method protected float getPersistedFloat(float);
method protected int getPersistedInt(int);

View File

@@ -145,6 +145,8 @@ public class Preference implements Comparable<Preference> {
private List<Preference> mDependents;
private PreferenceGroup mParentGroup;
private boolean mBaseMethodCalled;
/**
@@ -1238,6 +1240,16 @@ public class Preference implements Comparable<Preference> {
registerDependency();
}
/**
* Assigns a {@link PreferenceGroup} as the parent of this Preference. Set null to remove
* the current parent.
*
* @param parentGroup Parent preference group of this Preference or null if none.
*/
void assignParent(@Nullable PreferenceGroup parentGroup) {
mParentGroup = parentGroup;
}
private void registerDependency() {
if (TextUtils.isEmpty(mDependencyKey)) return;
@@ -1400,6 +1412,17 @@ public class Preference implements Comparable<Preference> {
return mDependencyKey;
}
/**
* Returns the {@link PreferenceGroup} which is this Preference assigned to or null if this
* preference is not assigned to any group or is a root Preference.
*
* @return The parent PreferenceGroup or null if not attached to any.
*/
@Nullable
public PreferenceGroup getParent() {
return mParentGroup;
}
/**
* Called when this Preference is being removed from the hierarchy. You
* should remove any references to this Preference that you know about. Make

View File

@@ -29,14 +29,14 @@ import android.util.AttributeSet;
* A container for multiple
* {@link Preference} objects. It is a base class for Preference objects that are
* parents, such as {@link PreferenceCategory} and {@link PreferenceScreen}.
*
*
* <div class="special reference">
* <h3>Developer Guides</h3>
* <p>For information about building a settings UI with Preferences,
* read the <a href="{@docRoot}guide/topics/ui/settings.html">Settings</a>
* guide.</p>
* </div>
*
*
* @attr ref android.R.styleable#PreferenceGroup_orderingFromXml
*/
public abstract class PreferenceGroup extends Preference implements GenericInflater.Parent<Preference> {
@@ -80,7 +80,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
* <p>
* If this is called after preferences are added, they will not be
* re-ordered in the order they were added, hence call this method early on.
*
*
* @param orderingAsAdded Whether to order according to the order added.
* @see Preference#setOrder(int)
*/
@@ -90,7 +90,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
/**
* Whether this group is ordering preferences in the order they are added.
*
*
* @return Whether this group orders based on the order the children are added.
* @see #setOrderingAsAdded(boolean)
*/
@@ -115,7 +115,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
/**
* Returns the {@link Preference} at a particular index.
*
*
* @param index The index of the {@link Preference} to retrieve.
* @return The {@link Preference}.
*/
@@ -126,7 +126,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
/**
* Adds a {@link Preference} at the correct position based on the
* preference's order.
*
*
* @param preference The preference to add.
* @return Whether the preference is now in this group.
*/
@@ -135,7 +135,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
// Exists
return true;
}
if (preference.getOrder() == Preference.DEFAULT_ORDER) {
if (mOrderingAsAdded) {
preference.setOrder(mCurrentPreferenceOrder++);
@@ -161,11 +161,12 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
}
preference.onAttachedToHierarchy(getPreferenceManager());
preference.assignParent(this);
if (mAttachedToActivity) {
preference.onAttachedToActivity();
}
notifyHierarchyChanged();
return true;
@@ -173,7 +174,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
/**
* Removes a {@link Preference} from this group.
*
*
* @param preference The preference to remove.
* @return Whether the preference was found and removed.
*/
@@ -186,10 +187,13 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
private boolean removePreferenceInt(Preference preference) {
synchronized(this) {
preference.onPrepareForRemoval();
if (preference.getParent() == this) {
preference.assignParent(null);
}
return mPreferenceList.remove(preference);
}
}
/**
* Removes all {@link Preference Preferences} from this group.
*/
@@ -202,10 +206,10 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
}
notifyHierarchyChanged();
}
/**
* Prepares a {@link Preference} to be added to the group.
*
*
* @param preference The preference to add.
* @return Whether to allow adding the preference (true), or not (false).
*/
@@ -223,7 +227,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
* <p>
* This will recursively search for the preference into children that are
* also {@link PreferenceGroup PreferenceGroups}.
*
*
* @param key The key of the preference to retrieve.
* @return The {@link Preference} with the key, or null.
*/
@@ -239,7 +243,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
if (curKey != null && curKey.equals(key)) {
return preference;
}
if (preference instanceof PreferenceGroup) {
final Preference returnedPreference = ((PreferenceGroup)preference)
.findPreference(key);
@@ -255,14 +259,14 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
/**
* Whether this preference group should be shown on the same screen as its
* contained preferences.
*
*
* @return True if the contained preferences should be shown on the same
* screen as this preference.
*/
protected boolean isOnSameScreenAsChildren() {
return true;
}
@Override
protected void onAttachedToActivity() {
super.onAttachedToActivity();
@@ -270,7 +274,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
// Mark as attached so if a preference is later added to this group, we
// can tell it we are already attached
mAttachedToActivity = true;
// Dispatch to all contained preferences
final int preferenceCount = getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) {
@@ -281,7 +285,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
@Override
protected void onPrepareForRemoval() {
super.onPrepareForRemoval();
// We won't be attached to the activity anymore
mAttachedToActivity = false;
}
@@ -297,7 +301,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
getPreference(i).onParentChanged(this, disableDependents);
}
}
void sortPreferences() {
synchronized (this) {
Collections.sort(mPreferenceList);
@@ -314,7 +318,7 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
getPreference(i).dispatchSaveInstanceState(container);
}
}
@Override
protected void dispatchRestoreInstanceState(Bundle container) {
super.dispatchRestoreInstanceState(container);