From 96b229546714aaa3c2c47a3c07fe6af7f3c35bfd Mon Sep 17 00:00:00 2001 From: zhuinden Date: Sat, 25 Mar 2017 16:38:45 +0100 Subject: [PATCH] 1.4.3: fix reusing cleared backstack after restoring with manager --- CHANGELOG.md | 6 ++++++ README.md | 2 +- .../java/com/zhuinden/simplestack/Backstack.java | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e69b5f09..6a91bc9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change log +-Simple Stack 1.4.3 (2017-03-25) +-------------------------------- +- FIX: Fixed a bug that if a restored backstack is cleared and an initialize state change is triggered, + then the restored keys were used instead of the initial key + (this only surfaced if you attempt to use multiple backstacks, and a cleared backstack is re-used) + -Simple Stack 1.4.2 (2017-03-20) -------------------------------- - CHANGE: Decreased minSDK to 1. diff --git a/README.md b/README.md index 544efa9b..d30ec271 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ In order to use Simple Stack, you need to add jitpack to your project root gradl and add the compile dependency to your module level gradle. - compile 'com.github.Zhuinden:simple-stack:1.4.2' + compile 'com.github.Zhuinden:simple-stack:1.4.3' ## How does it work? diff --git a/simple-stack/src/main/java/com/zhuinden/simplestack/Backstack.java b/simple-stack/src/main/java/com/zhuinden/simplestack/Backstack.java index 341e31a7..64675876 100644 --- a/simple-stack/src/main/java/com/zhuinden/simplestack/Backstack.java +++ b/simple-stack/src/main/java/com/zhuinden/simplestack/Backstack.java @@ -52,6 +52,7 @@ public static T getKey(Context context) { private final List originalStack = new ArrayList<>(); + private final List initialKeys; private List initialParameters; private List stack = originalStack; @@ -68,7 +69,8 @@ public Backstack(@NonNull Object... initialKeys) { if(initialKeys == null || initialKeys.length <= 0) { throw new IllegalArgumentException("At least one initial key must be defined"); } - initialParameters = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(initialKeys))); + this.initialKeys = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(initialKeys))); + setInitialParameters(new ArrayList<>(this.initialKeys)); } /** @@ -83,14 +85,15 @@ public Backstack(@NonNull List initialKeys) { if(initialKeys.size() <= 0) { throw new IllegalArgumentException("Initial key list should contain at least one element"); } - initialParameters = Collections.unmodifiableList(new ArrayList<>(initialKeys)); + this.initialKeys = Collections.unmodifiableList(new ArrayList<>(initialKeys)); + setInitialParameters(new ArrayList<>(this.initialKeys)); } void setInitialParameters(List initialKeys) { if(initialKeys == null || initialKeys.size() <= 0) { throw new IllegalArgumentException("At least one initial key must be defined"); } - this.initialParameters = Collections.unmodifiableList(new ArrayList<>(initialKeys)); + this.initialParameters = new ArrayList<>(initialKeys); } /** @@ -173,7 +176,7 @@ public boolean goBack() { return true; } if(stack.size() <= 1) { - stack.clear(); + resetBackstack(); return false; } ArrayList newHistory = new ArrayList<>(); @@ -186,6 +189,11 @@ public boolean goBack() { return true; } + private void resetBackstack() { + stack.clear(); + initialParameters = new ArrayList<>(initialKeys); + } + /** * Sets the provided state list as the new active history. *