From b2c6274ff298b50fcda40d19526a83120ccbefda Mon Sep 17 00:00:00 2001 From: Marek Vavrecan Date: Mon, 20 Jul 2015 22:25:57 +0100 Subject: [PATCH 1/3] reopen layout after parent is invalidated - this is simple fix to issue that some people reported that swipe is closed after keyboard is shown - new member mCurrentStatus was added to class and this status is restored after onGlobalLayout event --- .../main/java/com/daimajia/swipe/SwipeLayout.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index d8ee9bde..9ac55b60 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -16,6 +16,7 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewParent; +import android.view.ViewTreeObserver; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.FrameLayout; @@ -39,6 +40,7 @@ public class SwipeLayout extends FrameLayout { private int mTouchSlop; + private Status mCurrentStatus = Status.Close; private DragEdge mCurrentDragEdge = DefaultDragEdge; private ViewDragHelper mDragHelper; @@ -108,6 +110,16 @@ public SwipeLayout(Context context, AttributeSet attrs, int defStyle) { mShowMode = ShowMode.values()[ordinal]; a.recycle(); + // restore state + getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (mCurrentStatus == SwipeLayout.Status.Open) + open(false, getDragEdge()); + else + close(false); + } + }); } public interface SwipeListener { @@ -1331,6 +1343,7 @@ public void open(boolean smooth, boolean notify) { safeBottomView(); } } + mCurrentStatus = Status.Open; invalidate(); } @@ -1386,6 +1399,7 @@ public void close(boolean smooth, boolean notify) { safeBottomView(); } } + mCurrentStatus = Status.Close; invalidate(); } From 9fdd7f276bb30284ada1fb584f60a15dcec0b08d Mon Sep 17 00:00:00 2001 From: Marek Vavrecan Date: Wed, 22 Jul 2015 09:21:05 +0100 Subject: [PATCH 2/3] only reopen if status is open or close / not middle --- library/src/main/java/com/daimajia/swipe/SwipeLayout.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index 9ac55b60..d40d224e 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -114,9 +114,9 @@ public SwipeLayout(Context context, AttributeSet attrs, int defStyle) { getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - if (mCurrentStatus == SwipeLayout.Status.Open) + if (mCurrentStatus.equals(Status.Open)) open(false, getDragEdge()); - else + else if (mCurrentStatus.equals(Status.Close)) close(false); } }); From eaba6c5c6977ec0b6168bb293717aa3d2fba05b0 Mon Sep 17 00:00:00 2001 From: Marek Vavrecan Date: Sat, 25 Jul 2015 13:08:48 +0100 Subject: [PATCH 3/3] potentional speed improvement --- library/src/main/java/com/daimajia/swipe/SwipeLayout.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index d40d224e..2168dc36 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -114,9 +114,9 @@ public SwipeLayout(Context context, AttributeSet attrs, int defStyle) { getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - if (mCurrentStatus.equals(Status.Open)) + if (mCurrentStatus.equals(Status.Open) && getOpenStatus().equals(Status.Close)) open(false, getDragEdge()); - else if (mCurrentStatus.equals(Status.Close)) + else if (mCurrentStatus.equals(Status.Close) && getOpenStatus().equals(Status.Open)) close(false); } });