Bug 1233467 - Dismiss snackbar when user taps outside. r?mcomella draft
authorSebastian Kaspari <s.kaspari@gmail.com>
Fri, 18 Dec 2015 17:32:21 +0100
changeset 316385 57748830a0a656f910d0ffadc187a36d4738f375
parent 316384 6da91747a0c90f8794f9dbe8b87331f782fc5909
child 512150 de3b97f03329b69b3590c3103ef2fa003a97e1b6
push id8534
push users.kaspari@gmail.com
push dateFri, 18 Dec 2015 16:33:24 +0000
reviewersmcomella
bugs1233467
milestone46.0a1
Bug 1233467 - Dismiss snackbar when user taps outside. r?mcomella
mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
--- 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 {};