From 9f648b7046d1f921707c749b02b911ae126fd0fa Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 3 Dec 2017 22:03:02 +0000 Subject: [PATCH] Revert "lineage-sdk self-removing prefs: move reap from onBindViewHolder to onAttached" This reverts commit 027b615325092f7676a34c137248dc9fcd57cc35. While it served its original purpose, this was causing bad side-effects when using our constraints (verified at least with requiresConfig and requiresAction). Moving the reap to onAttached was rendering self-removing prefs useless because if the view isn't loaded yet, the preference (which also doesn't yet exists) can't really be hidden. Change-Id: Ic61fe4b9979412d89c55ea1543c494e69bf6eab7 --- .../lineageos/preference/ConstraintsHelper.java | 16 +++++++++++----- .../SelfRemovingDropDownPreference.java | 6 ------ .../preference/SelfRemovingListPreference.java | 6 ------ .../preference/SelfRemovingPreference.java | 6 ------ .../preference/SelfRemovingSwitchPreference.java | 6 ------ 5 files changed, 11 insertions(+), 29 deletions(-) diff --git a/sdk/src/java/lineageos/preference/ConstraintsHelper.java b/sdk/src/java/lineageos/preference/ConstraintsHelper.java index b48b00ee..35e1d5d1 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 onAttached() { + public void onBindViewHolder(PreferenceViewHolder holder) { checkIntent(); if (isAvailable() && mReplacesKey != null) { @@ -308,9 +308,7 @@ public class ConstraintsHelper { } Graveyard.get(mContext).summonReaper(mPref.getPreferenceManager()); - } - public void onBindViewHolder(PreferenceViewHolder holder) { if (!isAvailable()) { return; } @@ -327,7 +325,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 when onAttached is called. + * of this, and will reap the dead during the first call to onBindViewHolder. */ private static class Graveyard { @@ -372,12 +370,20 @@ 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) { - deadPref.setVisible(false); + removePreference(mgr, deadPref); } } mDeathRow.clear(); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java index 03097cfe..76e73461 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingDropDownPreference.java @@ -43,12 +43,6 @@ public class SelfRemovingDropDownPreference extends DropDownPreference { mConstraints = new ConstraintsHelper(context, null, this); } - @Override - public void onAttached() { - super.onAttached(); - mConstraints.onAttached(); - } - @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java index 0b8c7985..d1d3ec5a 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingListPreference.java @@ -43,12 +43,6 @@ public class SelfRemovingListPreference extends ListPreference { mConstraints = new ConstraintsHelper(context, null, this); } - @Override - public void onAttached() { - super.onAttached(); - mConstraints.onAttached(); - } - @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingPreference.java index 5271f561..a148a09c 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingPreference.java @@ -48,12 +48,6 @@ public class SelfRemovingPreference extends Preference { this(context, null); } - @Override - public void onAttached() { - super.onAttached(); - mConstraints.onAttached(); - } - @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); diff --git a/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java b/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java index a637f220..c8663227 100644 --- a/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java +++ b/sdk/src/java/lineageos/preference/SelfRemovingSwitchPreference.java @@ -43,12 +43,6 @@ public class SelfRemovingSwitchPreference extends SwitchPreference { mConstraints = new ConstraintsHelper(context, null, this); } - @Override - public void onAttached() { - super.onAttached(); - mConstraints.onAttached(); - } - @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder);