diff --git a/api/current.txt b/api/current.txt index 2ed183e179f29..b3baf91c47b6f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -696,6 +696,7 @@ package android { field public static final int hyphenationFrequency = 16843998; // 0x10104de field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 + field public static final int iconSpaceReserved = 16844132; // 0x1010564 field public static final int iconTint = 16844129; // 0x1010561 field public static final int iconTintMode = 16844130; // 0x1010562 field public static final int iconifiedByDefault = 16843514; // 0x10102fa @@ -32045,6 +32046,7 @@ package android.preference { method public int getWidgetLayoutResource(); method public boolean hasKey(); method public boolean isEnabled(); + method public boolean isIconSpaceReserved(); method public boolean isPersistent(); method public boolean isRecycleEnabled(); method public boolean isSelectable(); @@ -32079,6 +32081,7 @@ package android.preference { method public void setFragment(java.lang.String); method public void setIcon(android.graphics.drawable.Drawable); method public void setIcon(int); + method public void setIconSpaceReserved(boolean); method public void setIntent(android.content.Intent); method public void setKey(java.lang.String); method public void setLayoutResource(int); diff --git a/api/system-current.txt b/api/system-current.txt index 9718b9bdae13f..6ab0caffa92c1 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -810,6 +810,7 @@ package android { field public static final int hyphenationFrequency = 16843998; // 0x10104de field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 + field public static final int iconSpaceReserved = 16844132; // 0x1010564 field public static final int iconTint = 16844129; // 0x1010561 field public static final int iconTintMode = 16844130; // 0x1010562 field public static final int iconifiedByDefault = 16843514; // 0x10102fa @@ -34890,6 +34891,7 @@ package android.preference { method public int getWidgetLayoutResource(); method public boolean hasKey(); method public boolean isEnabled(); + method public boolean isIconSpaceReserved(); method public boolean isPersistent(); method public boolean isRecycleEnabled(); method public boolean isSelectable(); @@ -34924,6 +34926,7 @@ package android.preference { method public void setFragment(java.lang.String); method public void setIcon(android.graphics.drawable.Drawable); method public void setIcon(int); + method public void setIconSpaceReserved(boolean); method public void setIntent(android.content.Intent); method public void setKey(java.lang.String); method public void setLayoutResource(int); diff --git a/api/test-current.txt b/api/test-current.txt index cfbb7be2f29dc..fb117a80e5014 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -696,6 +696,7 @@ package android { field public static final int hyphenationFrequency = 16843998; // 0x10104de field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 + field public static final int iconSpaceReserved = 16844132; // 0x1010564 field public static final int iconTint = 16844129; // 0x1010561 field public static final int iconTintMode = 16844130; // 0x1010562 field public static final int iconifiedByDefault = 16843514; // 0x10102fa @@ -32182,6 +32183,7 @@ package android.preference { method public int getWidgetLayoutResource(); method public boolean hasKey(); method public boolean isEnabled(); + method public boolean isIconSpaceReserved(); method public boolean isPersistent(); method public boolean isRecycleEnabled(); method public boolean isSelectable(); @@ -32216,6 +32218,7 @@ package android.preference { method public void setFragment(java.lang.String); method public void setIcon(android.graphics.drawable.Drawable); method public void setIcon(int); + method public void setIconSpaceReserved(boolean); method public void setIntent(android.content.Intent); method public void setKey(java.lang.String); method public void setLayoutResource(int); diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 4d14277be9c16..d3adce73582ea 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -83,6 +83,7 @@ import java.util.Set; * @attr ref android.R.styleable#Preference_shouldDisableView * @attr ref android.R.styleable#Preference_recycleEnabled * @attr ref android.R.styleable#Preference_singleLineTitle + * @attr ref android.R.styleable#Preference_iconSpaceReserved */ public class Preference implements Comparable { /** @@ -135,6 +136,7 @@ public class Preference implements Comparable { private boolean mParentDependencyMet = true; private boolean mRecycleEnabled = true; private boolean mSingleLineTitle = true; + private boolean mIconSpaceReserved; /** * @see #setShouldDisableView(boolean) @@ -302,7 +304,11 @@ public class Preference implements Comparable { case com.android.internal.R.styleable.Preference_singleLineTitle: mSingleLineTitle = a.getBoolean(attr, mSingleLineTitle); break; - } + + case com.android.internal.R.styleable.Preference_iconSpaceReserved: + mIconSpaceReserved = a.getBoolean(attr, mIconSpaceReserved); + break; + } } a.recycle(); } @@ -631,7 +637,11 @@ public class Preference implements Comparable { imageView.setImageDrawable(mIcon); } } - imageView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE); + if (mIcon != null) { + imageView.setVisibility(View.VISIBLE); + } else { + imageView.setVisibility(mIconSpaceReserved ? View.INVISIBLE : View.GONE); + } } final View imageFrame = view.findViewById(com.android.internal.R.id.icon_frame); @@ -930,6 +940,25 @@ public class Preference implements Comparable { return mSingleLineTitle; } + /** + * Sets whether to reserve the space of this Preference icon view when no icon is provided. + * + * @param iconSpaceReserved set {@code true} if the space for the icon view should be reserved + */ + public void setIconSpaceReserved(boolean iconSpaceReserved) { + mIconSpaceReserved = iconSpaceReserved; + notifyChanged(); + } + + /** + * Gets whether the space this preference icon view is reserved. + * + * @see #setIconSpaceReserved(boolean) + * @return {@code true} if the space of this preference icon view is reserved + */ + public boolean isIconSpaceReserved() { + return mIconSpaceReserved; + } /** * Returns a unique ID for this Preference. This ID should be unique across all * Preference objects in a hierarchy. diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 995f2c3b8356d..a3b27052bf678 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -7226,6 +7226,10 @@ + + diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 876d44da416bb..6e20208cc2d6c 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2813,6 +2813,7 @@ +