diff options
author | Sam Mortimer <sam@mortimer.me.uk> | 2017-10-14 18:54:14 -0700 |
---|---|---|
committer | Bruno Martins <bgcngm@gmail.com> | 2017-11-09 14:42:55 +0000 |
commit | 027b615325092f7676a34c137248dc9fcd57cc35 (patch) | |
tree | 1936f44e05ffe0614b30fd1cb1e210c2f2031dea | |
parent | 3c54d586914d2d5c7354f1ccbe5c2327ac9954c6 (diff) | |
download | lineage-sdk-027b615325092f7676a34c137248dc9fcd57cc35.tar.gz lineage-sdk-027b615325092f7676a34c137248dc9fcd57cc35.tar.bz2 lineage-sdk-027b615325092f7676a34c137248dc9fcd57cc35.zip |
lineage-sdk self-removing prefs: move reap from onBindViewHolder to onAttached
*) Eliminates visibility of the pref removal. You could previously
see vertical movement of text during initial display of replaced
prefs.
*) In addition, when reaping, use setVisible(false) instead of
removePreference. Otherwise, array out of bounds index exceptions
occur in frameworks pref support libraries (as a result of moving
from onBindViewHolder to onAttached).
Change-Id: I1a0045552572a590f89715f8d94156eddaaec469
5 files changed, 29 insertions, 11 deletions
diff --git a/sdk/src/java/lineageos/preference/ConstraintsHelper.java b/sdk/src/java/lineageos/preference/ConstraintsHelper.java index 35e1d5d1..b48b00ee 100644 --- a/sdk/src/java/lineageos/preference/ConstraintsHelper.java +++ b/sdk/src/java/lineageos/preference/ConstraintsHelper.java @@ -300,7 +300,7 @@ public class ConstraintsHelper { return fallbackAttr; } - public void onBindViewHolder(PreferenceViewHolder holder) { + public void onAttached() { checkIntent(); if (isAvailable() && mReplacesKey != null) { @@ -308,7 +308,9 @@ public class ConstraintsHelper { } Graveyard.get(mContext).summonReaper(mPref.getPreferenceManager()); + } + public void onBindViewHolder(PreferenceViewHolder holder) { if (!isAvailable()) { return; } @@ -325,7 +327,7 @@ public class ConstraintsHelper { * If we want to keep this at the preference level vs the fragment level, we need to * collate all the preferences that need to be removed when attached to the * hierarchy, then purge them all when loading is complete. The Graveyard keeps track - * of this, and will reap the dead during the first call to onBindViewHolder. + * of this, and will reap the dead when onAttached is called. */ private static class Graveyard { @@ -370,20 +372,12 @@ public class ConstraintsHelper { return null; } - private void removePreference(PreferenceManager mgr, Preference pref) { - final PreferenceGroup group = getParent(pref, pref); - group.removePreference(pref); - if (group.getPreferenceCount() == 0) { - getParent(pref, group).removePreference(group); - } - } - public void summonReaper(PreferenceManager mgr) { synchronized (mDeathRow) { for (String dead : mDeathRow) { Preference deadPref = mgr.findPreference(dead); if (deadPref != null) { - removePreference(mgr, deadPref); + deadPref.setVisible(false); } } mDeathRow.clear(); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java index 76e73461..03097cfe 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java @@ -44,6 +44,12 @@ public class SelfRemovingDropDownPreference extends DropDownPreference { } @Override + public void onAttached() { + super.onAttached(); + mConstraints.onAttached(); + } + + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); mConstraints.onBindViewHolder(holder); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java index d1d3ec5a..0b8c7985 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java @@ -44,6 +44,12 @@ public class SelfRemovingListPreference extends ListPreference { } @Override + public void onAttached() { + super.onAttached(); + mConstraints.onAttached(); + } + + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); mConstraints.onBindViewHolder(holder); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingPreference.java index a148a09c..5271f561 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingPreference.java @@ -49,6 +49,12 @@ public class SelfRemovingPreference extends Preference { } @Override + public void onAttached() { + super.onAttached(); + mConstraints.onAttached(); + } + + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); mConstraints.onBindViewHolder(holder); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java index c8663227..a637f220 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java @@ -44,6 +44,12 @@ public class SelfRemovingSwitchPreference extends SwitchPreference { } @Override + public void onAttached() { + super.onAttached(); + mConstraints.onAttached(); + } + + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); mConstraints.onBindViewHolder(holder); |