diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt
index d37025e14..530d77be8 100644
--- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt
+++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt
@@ -30,9 +30,9 @@ object FeatureFlags {
val tabTray = Config.channel.isNightlyOrDebug
/**
- * Enables swipe on toolbar to switch tabs
+ * Enables gestures on the browser chrome that depend on a [SwipeGestureLayout]
*/
- val swipeToSwitchTabs = Config.channel.isNightlyOrDebug
+ val browserChromeGestures = Config.channel.isNightlyOrDebug
/**
* Enables viewing tab history
diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
index 88e151f17..296769258 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
@@ -168,7 +168,13 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
require(arguments != null)
customTabSessionId = arguments?.getString(EXTRA_SESSION_ID)
- val view = inflater.inflate(R.layout.fragment_browser, container, false)
+ val view = if (FeatureFlags.browserChromeGestures) {
+ inflater.inflate(R.layout.browser_gesture_wrapper, container, false).apply {
+ inflater.inflate(R.layout.fragment_browser, this as SwipeGestureLayout, true)
+ }
+ } else {
+ inflater.inflate(R.layout.fragment_browser, container, false)
+ }
val activity = activity as HomeActivity
activity.themeManager.applyStatusBarTheme(activity)
diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
index 9c4f33728..1fd155f63 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
@@ -15,6 +15,7 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
import com.google.android.material.snackbar.Snackbar
+import kotlinx.android.synthetic.main.browser_gesture_wrapper.*
import kotlinx.android.synthetic.main.fragment_browser.*
import kotlinx.android.synthetic.main.fragment_browser.view.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -74,7 +75,9 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
val components = context.components
return super.initializeUI(view)?.also {
- if (FeatureFlags.swipeToSwitchTabs) {
+ // We need to wrap this whole thing in an if here because gestureLayout will not exist
+ // if the feature flag is off
+ if (FeatureFlags.browserChromeGestures) {
gestureLayout.addGestureListener(
ToolbarGestureHandler(
activity = requireActivity(),
diff --git a/app/src/main/res/layout/browser_gesture_wrapper.xml b/app/src/main/res/layout/browser_gesture_wrapper.xml
new file mode 100644
index 000000000..94f515687
--- /dev/null
+++ b/app/src/main/res/layout/browser_gesture_wrapper.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_browser.xml b/app/src/main/res/layout/fragment_browser.xml
index 63e9fde8d..328f9bedd 100644
--- a/app/src/main/res/layout/fragment_browser.xml
+++ b/app/src/main/res/layout/fragment_browser.xml
@@ -2,66 +2,52 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+