Bug 1233467 - Dismiss snackbar when user taps outside. r?mcomella
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -2681,16 +2681,22 @@ public class BrowserApp extends GeckoApp
* user touches the main layout.
*/
private class HideOnTouchListener implements TouchEventInterceptor {
private boolean mIsHidingTabs;
private final Rect mTempRect = new Rect();
@Override
public boolean onInterceptTouchEvent(View view, MotionEvent event) {
+ if (event.getActionMasked() == MotionEvent.ACTION_DOWN
+ && mSnackbar != null
+ && mSnackbar.isShown()) {
+ mSnackbar.dismiss();
+ }
+
// Only try to hide the button toast if it's already inflated and if we are starting a tap action.
// By only hiding a toast at the start of a tap action, a button toast opened in response to a tap
// action is not immediately hidden as the tap action continues.
if (event.getActionMasked() == MotionEvent.ACTION_DOWN && mToast != null) {
mToast.hide(false, ButtonToast.ReasonHidden.TOUCH_OUTSIDE);
}
// We need to account for scroll state for the touched view otherwise
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -191,16 +191,17 @@ public abstract class GeckoApp
private ContactService mContactService;
private PromptService mPromptService;
private TextSelection mTextSelection;
protected DoorHangerPopup mDoorHangerPopup;
protected FormAssistPopup mFormAssistPopup;
protected ButtonToast mToast;
+ protected Snackbar mSnackbar;
protected LayerView mLayerView;
private AbsoluteLayout mPluginContainer;
private FullScreenHolder mFullScreenPluginContainer;
private View mFullScreenPluginView;
private final HashMap<String, PowerManager.WakeLock> mWakeLocks = new HashMap<String, PowerManager.WakeLock>();
@@ -849,16 +850,18 @@ public abstract class GeckoApp
if (callback != null && !TextUtils.isEmpty(action)) {
snackbar.setAction(action, callback);
snackbar.setActionTextColor(ContextCompat.getColor(this, R.color.fennec_ui_orange));
snackbar.setCallback(callback);
}
snackbar.show();
+
+ this.mSnackbar = snackbar;
}
/**
* Combined interface for handling all callbacks from a snackbar because anonymous classes can only extend one
* interface or class.
*/
public static abstract class SnackbarCallback extends Snackbar.Callback implements View.OnClickListener {};