From 791b37e0d9375789c2930ed170d202ea728390fd Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 20 Aug 2013 17:34:19 -0700 Subject: [PATCH] Allow recycling of Preferences in com.android.* packages Refactors hasSpecifiedLayout to canRecycleLayout for readability's sake. All boolean references to the method have been inverted. BUG: 10079104 Change-Id: Ie6beda9f0b837f889a6cc6a80377349e98cc4883 --- core/java/android/preference/Preference.java | 19 ++++++++++--------- .../preference/PreferenceGroupAdapter.java | 4 ++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 6c0296537b50d..3c38baf8b7478 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -123,7 +123,7 @@ public class Preference implements Comparable, OnDependencyChangeLis private int mLayoutResId = com.android.internal.R.layout.preference; private int mWidgetLayoutResId; - private boolean mHasSpecifiedLayout = false; + private boolean mCanRecycleLayout = true; private OnPreferenceChangeInternalListener mListener; @@ -274,9 +274,10 @@ public class Preference implements Comparable, OnDependencyChangeLis } a.recycle(); - if (!getClass().getName().startsWith("android.preference")) { - // For subclasses not in this package, assume the worst and don't cache views - mHasSpecifiedLayout = true; + if (!getClass().getName().startsWith("android.preference") + && !getClass().getName().startsWith("com.android")) { + // For non-framework subclasses, assume the worst and don't cache views. + mCanRecycleLayout = false; } } @@ -398,7 +399,7 @@ public class Preference implements Comparable, OnDependencyChangeLis public void setLayoutResource(int layoutResId) { if (layoutResId != mLayoutResId) { // Layout changed - mHasSpecifiedLayout = true; + mCanRecycleLayout = false; } mLayoutResId = layoutResId; @@ -414,7 +415,7 @@ public class Preference implements Comparable, OnDependencyChangeLis } /** - * Sets The layout for the controllable widget portion of this Preference. This + * Sets the layout for the controllable widget portion of this Preference. This * is inflated into the main layout. For example, a {@link CheckBoxPreference} * would specify a custom layout (consisting of just the CheckBox) here, * instead of creating its own main layout. @@ -426,7 +427,7 @@ public class Preference implements Comparable, OnDependencyChangeLis public void setWidgetLayoutResource(int widgetLayoutResId) { if (widgetLayoutResId != mWidgetLayoutResId) { // Layout changed - mHasSpecifiedLayout = true; + mCanRecycleLayout = false; } mWidgetLayoutResId = widgetLayoutResId; } @@ -1641,8 +1642,8 @@ public class Preference implements Comparable, OnDependencyChangeLis return mPreferenceManager.getSharedPreferences().getBoolean(mKey, defaultReturnValue); } - boolean hasSpecifiedLayout() { - return mHasSpecifiedLayout; + boolean canRecycleLayout() { + return mCanRecycleLayout; } @Override diff --git a/core/java/android/preference/PreferenceGroupAdapter.java b/core/java/android/preference/PreferenceGroupAdapter.java index a908ecdc695df..23d0a19613bac 100644 --- a/core/java/android/preference/PreferenceGroupAdapter.java +++ b/core/java/android/preference/PreferenceGroupAdapter.java @@ -153,7 +153,7 @@ class PreferenceGroupAdapter extends BaseAdapter implements OnPreferenceChangeIn preferences.add(preference); - if (!mHasReturnedViewTypeCount && !preference.hasSpecifiedLayout()) { + if (!mHasReturnedViewTypeCount && preference.canRecycleLayout()) { addPreferenceClassName(preference); } @@ -255,7 +255,7 @@ class PreferenceGroupAdapter extends BaseAdapter implements OnPreferenceChangeIn } final Preference preference = this.getItem(position); - if (preference.hasSpecifiedLayout()) { + if (!preference.canRecycleLayout()) { return IGNORE_ITEM_VIEW_TYPE; }