From 9ed53e35edd819babab7a59ef9957b9ec96d18f2 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 27 Mar 2017 13:32:04 -0700 Subject: [PATCH] Reserve space for preference icon. Add an attribute to Preference to specify whether the space of the icon view should be reserved when no preference icon is provided. Bug: 36448695 Test: manual Change-Id: I03b49fe93d54bb9106cf167a677a9ea544a3e3a1 --- api/current.txt | 3 +++ api/system-current.txt | 3 +++ api/test-current.txt | 3 +++ core/java/android/preference/Preference.java | 33 ++++++++++++++++++++++++++-- core/res/res/values/attrs.xml | 4 ++++ core/res/res/values/public.xml | 1 + 6 files changed, 45 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index 5d94dbd50bb0..b30d070c827e 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 @@ -32044,6 +32045,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(); @@ -32078,6 +32080,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 c7b377e3d6fb..e1ef60271711 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 @@ -34891,6 +34892,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(); @@ -34925,6 +34927,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 d22f7d388a73..7427aab5e6cf 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 @@ -32181,6 +32182,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(); @@ -32215,6 +32217,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 4d14277be9c1..d3adce73582e 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); @@ -931,6 +941,25 @@ public class Preference implements Comparable { } /** + * 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 995f2c3b8356..a3b27052bf67 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 876d44da416b..6e20208cc2d6 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2813,6 +2813,7 @@ + -- 2.11.0