diff options
author | Taesu Lee <taesu82.lee@samsung.com> | 2020-03-31 17:56:38 +0900 |
---|---|---|
committer | Luca Stefani <luca.stefani.ge1@gmail.com> | 2020-04-01 12:17:53 +0200 |
commit | 78e476b46d1a87839fe75fa5374686c56378119f (patch) | |
tree | dffd68360303191aaf5f4dcd513ddae40827c5f1 | |
parent | a205ce921954493ca3499c2ed8b80e4609da76b7 (diff) | |
download | packages_apps_Messaging-78e476b46d1a87839fe75fa5374686c56378119f.tar.gz packages_apps_Messaging-78e476b46d1a87839fe75fa5374686c56378119f.tar.bz2 packages_apps_Messaging-78e476b46d1a87839fe75fa5374686c56378119f.zip |
Dismiss SnackBar when detached
SnackBarManager state is not cleared when SnackBar is detached from a
window without dismiss(). After then it is remained as dismissing state
forever.
Test: 1) Long-press a conversation and click archive action.
2) Press back key before the snackbar is dismissed.
3) Repeat 1) and check the snackbar is shown or not.
Change-Id: Icf2cdcd30aea42685db68e5ac36436a34c9c94ae
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
-rw-r--r-- | src/com/android/messaging/ui/SnackBarManager.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/com/android/messaging/ui/SnackBarManager.java b/src/com/android/messaging/ui/SnackBarManager.java index e107999..d5ca870 100644 --- a/src/com/android/messaging/ui/SnackBarManager.java +++ b/src/com/android/messaging/ui/SnackBarManager.java @@ -25,6 +25,7 @@ import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.MeasureSpec; +import android.view.View.OnAttachStateChangeListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; @@ -86,6 +87,23 @@ public class SnackBarManager { } }; + private final OnAttachStateChangeListener mAttachStateChangeListener = + new OnAttachStateChangeListener() { + @Override + public void onViewDetachedFromWindow(View v) { + // Dismiss the PopupWindow and clear SnackBarManager state. + mHideHandler.removeCallbacks(mDismissRunnable); + mPopupWindow.dismiss(); + + mCurrentSnackBar = null; + mNextSnackBar = null; + mIsCurrentlyDismissing = false; + } + + @Override + public void onViewAttachedToWindow(View v) {} + }; + private final int mTranslationDurationMs; private final Handler mHideHandler; @@ -181,6 +199,7 @@ public class SnackBarManager { mPopupWindow.showAsDropDown(anchorView, 0, getRelativeOffset(snackBar)); } + snackBar.getParentView().addOnAttachStateChangeListener(mAttachStateChangeListener); // Animate the toast bar into view. placeSnackBarOffScreen(snackBar); @@ -238,6 +257,8 @@ public class SnackBarManager { // PopupWindow.dismiss() will fire an IllegalArgumentException if the activity // has already ended while we were animating } + snackBar.getParentView() + .removeOnAttachStateChangeListener(mAttachStateChangeListener); mCurrentSnackBar = null; mIsCurrentlyDismissing = false; |