summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaesu Lee <taesu82.lee@samsung.com>2020-03-31 17:56:38 +0900
committerLuca Stefani <luca.stefani.ge1@gmail.com>2020-04-01 12:17:53 +0200
commit78e476b46d1a87839fe75fa5374686c56378119f (patch)
treedffd68360303191aaf5f4dcd513ddae40827c5f1
parenta205ce921954493ca3499c2ed8b80e4609da76b7 (diff)
downloadpackages_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.java21
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;