Switch to whitelist for animations
Disable animations for all SettingsPreferenceFragments, unless they
explicitly ask for them before creating their preference screens.
Turn it on for all fragments using the cached removal currently.
Bug: 27713314
Change-Id: I1bc14e7aeb3ee5b8ddb4f3547f472305cd312edf
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index daa2f1b..e1cf58b 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -99,6 +99,7 @@
private LinearLayoutManager mLayoutManager;
private HighlightablePreferenceGroupAdapter mAdapter;
private ArrayMap<String, Preference> mPreferenceCache;
+ private boolean mAnimationAllowed;
@Override
public void onCreate(Bundle icicle) {
@@ -304,6 +305,10 @@
@Override
public void setPreferenceScreen(PreferenceScreen preferenceScreen) {
+ if (!preferenceScreen.isAttached()) {
+ // Without ids generated, the RecyclerView won't animate changes to the preferences.
+ preferenceScreen.setShouldUseGeneratedIds(mAnimationAllowed);
+ }
super.setPreferenceScreen(preferenceScreen);
if (preferenceScreen != null) {
if (mHeader != null) {
@@ -369,6 +374,10 @@
return mAdapter;
}
+ protected void setAnimationAllowed(boolean animationAllowed) {
+ mAnimationAllowed = animationAllowed;
+ }
+
protected void cacheRemoveAllPrefs(PreferenceGroup group) {
mPreferenceCache = new ArrayMap<String, Preference>();
final int N = group.getPreferenceCount();