From 0991abb0c3635f6e4e15ff4ed7f0d6a04168c9e8 Mon Sep 17 00:00:00 2001 From: Sam Mortimer Date: Mon, 11 Dec 2017 23:17:27 -0800 Subject: [PATCH] lineage-sdk self-removing prefs: don't remove from death row until reaped *) Graveyard is shared by all prefs with a given context. *) When we reap in onAttached(), there may be prefs that aren't yet attached to the hierarchy. Ensure that summonReaper keeps track of them until the last onAttached() is called in the context. *) Fixes self-removing prefs that weren't being removed on a settings page that has at least one least other self-removing pref. Change-Id: Ic48b86bb6f06aa29c44814a5487e2382349fb363 --- sdk/src/java/lineageos/preference/ConstraintsHelper.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sdk/src/java/lineageos/preference/ConstraintsHelper.java b/sdk/src/java/lineageos/preference/ConstraintsHelper.java index b48b00ee..48152255 100644 --- a/sdk/src/java/lineageos/preference/ConstraintsHelper.java +++ b/sdk/src/java/lineageos/preference/ConstraintsHelper.java @@ -331,7 +331,7 @@ public class ConstraintsHelper { */ private static class Graveyard { - private final Set mDeathRow = new ArraySet<>(); + private Set mDeathRow = new ArraySet<>(); private static Graveyard sInstance; @@ -374,13 +374,16 @@ public class ConstraintsHelper { public void summonReaper(PreferenceManager mgr) { synchronized (mDeathRow) { + Set notReadyForReap = new ArraySet<>(); for (String dead : mDeathRow) { Preference deadPref = mgr.findPreference(dead); if (deadPref != null) { deadPref.setVisible(false); + } else { + notReadyForReap.add(dead); } } - mDeathRow.clear(); + mDeathRow = notReadyForReap; } } }