diff --git a/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInHorizontallyScrollingParentTest.java b/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInHorizontallyScrollingParentTest.java
index 665fbb4..e5c252e 100644
--- a/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInHorizontallyScrollingParentTest.java
+++ b/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInHorizontallyScrollingParentTest.java
@@ -73,15 +73,14 @@
         assertThat(mSwipeRefreshLayout, notNullValue());
         assertThat(isIndicatorVisible(mSwipeRefreshLayout), equalTo(false));
 
-        mGestureDistance = mSwipeRefreshLayout.getProgressViewEndOffset()
-                - mSwipeRefreshLayout.getProgressViewStartOffset();
+        mGestureDistance = mSwipeRefreshLayout.getProgressViewEndOffset();
         assertThat(mGestureDistance, greaterThanOrEqualTo(2));
     }
 
     @Test
     public void swipeHorizontallyDuringRefreshGesture() {
         recordRvPosition();
-        swipeVerticallyThenHorizontally(mGestureDistance, mTouchSlop * 3);
+        swipeVerticallyThenHorizontally(mTouchSlop + mGestureDistance, mTouchSlop * 3);
 
         // Gesture wasn't completed, so SRL should not be refreshing
         assertThat(mSwipeRefreshLayout.isRefreshing(), equalTo(false));
@@ -94,7 +93,7 @@
     @Test
     public void swipeHorizontallyAfterRefreshGesture() {
         recordRvPosition();
-        swipeVerticallyThenHorizontally(mGestureDistance * 2, mTouchSlop * 3);
+        swipeVerticallyThenHorizontally(mTouchSlop + mGestureDistance * 2 + 1, mTouchSlop * 3);
 
         // Gesture was completed, so SRL should be refreshing
         assertThat(mSwipeRefreshLayout.isRefreshing(), equalTo(true));
@@ -107,8 +106,8 @@
     private void swipeVerticallyThenHorizontally(int dy, int dx) {
         SwipeInjector swiper = new SwipeInjector(InstrumentationRegistry.getInstrumentation());
         swiper.startDrag(CENTER, mRecyclerView);
-        swiper.dragBy(0, dy, 300);
-        swiper.dragBy(dx, 0, 100);
+        swiper.dragBy(0, dy, 150);
+        swiper.dragBy(dx, 0, 50);
         swiper.finishDrag();
     }
 
diff --git a/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInRecyclerViewActivity.java b/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInRecyclerViewActivity.java
index bf2bdb7..bafd8ac 100644
--- a/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInRecyclerViewActivity.java
+++ b/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayoutInRecyclerViewActivity.java
@@ -20,6 +20,7 @@
 
 import static androidx.recyclerview.widget.RecyclerView.HORIZONTAL;
 
+import android.content.Context;
 import android.os.Bundle;
 import android.view.View;
 import android.view.ViewGroup;
@@ -32,13 +33,13 @@
 
 public class SwipeRefreshLayoutInRecyclerViewActivity extends FragmentActivity {
 
-    RecyclerView mRecyclerView;
+    RecyclerViewImpl mRecyclerView;
     SwipeRefreshLayout mSwipeRefreshLayout;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mRecyclerView = new RecyclerView(this);
+        mRecyclerView = new RecyclerViewImpl(this);
         mRecyclerView.setLayoutParams(matchParent());
         mRecyclerView.setLayoutManager(new LinearLayoutManager(this, HORIZONTAL, false));
         mRecyclerView.setAdapter(new Adapter());
@@ -55,6 +56,25 @@
         }
     }
 
+    public static class RecyclerViewImpl extends RecyclerView {
+        public boolean mRequestDisallowInterceptTrueCalled;
+        public boolean mRequestDisallowInterceptFalseCalled;
+
+        public RecyclerViewImpl(@NonNull Context context) {
+            super(context);
+        }
+
+        @Override
+        public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+            super.requestDisallowInterceptTouchEvent(disallowIntercept);
+            if (disallowIntercept) {
+                mRequestDisallowInterceptTrueCalled = true;
+            } else {
+                mRequestDisallowInterceptFalseCalled = true;
+            }
+        }
+    }
+
     private class Adapter extends RecyclerView.Adapter<ViewHolder> {
         private static final int SRL_ITEM = 0;
         private static final int OTHER_ITEM = 1;
@@ -98,6 +118,7 @@
 
         private ViewHolder createOtherItem(@NonNull ViewGroup parent) {
             View view = new View(parent.getContext());
+            view.setLayoutParams(matchParent());
             view.setBackgroundColor(0xFFFF0000);
             return new ViewHolder(view);
         }
diff --git a/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeToRefreshLayoutRequestDisallowInterceptTest.java b/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeToRefreshLayoutRequestDisallowInterceptTest.java
new file mode 100644
index 0000000..0a50fbd
--- /dev/null
+++ b/swiperefreshlayout/src/androidTest/java/androidx/swiperefreshlayout/widget/SwipeToRefreshLayoutRequestDisallowInterceptTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.swiperefreshlayout.widget;
+
+import static androidx.test.espresso.action.GeneralLocation.CENTER;
+import static androidx.testutils.ActivityTestRuleKt.waitForExecution;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import android.view.ViewConfiguration;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.rule.ActivityTestRule;
+import androidx.testutils.SwipeInjector;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class SwipeToRefreshLayoutRequestDisallowInterceptTest {
+
+    @Rule
+    public final ActivityTestRule<SwipeRefreshLayoutInRecyclerViewActivity> mActivityTestRule =
+            new ActivityTestRule<>(SwipeRefreshLayoutInRecyclerViewActivity.class);
+
+    private SwipeRefreshLayoutInRecyclerViewActivity.RecyclerViewImpl mRecyclerView;
+    private int mTouchSlop;
+
+    @Before
+    public void setUp() throws Throwable {
+        mRecyclerView = mActivityTestRule.getActivity().mRecyclerView;
+        mTouchSlop = ViewConfiguration.get(mRecyclerView.getContext()).getScaledTouchSlop();
+
+        mActivityTestRule.runOnUiThread(() -> mRecyclerView.scrollToPosition(1));
+        waitForExecution(mActivityTestRule, 2);
+    }
+
+    @Test
+    public void swipeLessThanTouchSlop_requestDisallowNotCalled() {
+        assertThat(mRecyclerView.mRequestDisallowInterceptTrueCalled, equalTo(false));
+        assertThat(mRecyclerView.mRequestDisallowInterceptFalseCalled, equalTo(false));
+
+        swipeDown(mTouchSlop / 2);
+
+        assertThat(mRecyclerView.mRequestDisallowInterceptTrueCalled, equalTo(false));
+        assertThat(mRecyclerView.mRequestDisallowInterceptFalseCalled, equalTo(false));
+    }
+
+    @Test
+    public void swipeMoreThanTouchSlop_requestDisallowIsCalled() {
+        assertThat(mRecyclerView.mRequestDisallowInterceptTrueCalled, equalTo(false));
+        assertThat(mRecyclerView.mRequestDisallowInterceptFalseCalled, equalTo(false));
+
+        swipeDown(mTouchSlop + 1);
+
+        assertThat(mRecyclerView.mRequestDisallowInterceptTrueCalled, equalTo(true));
+        assertThat(mRecyclerView.mRequestDisallowInterceptFalseCalled, equalTo(false));
+    }
+
+    private void swipeDown(int dy) {
+        SwipeInjector swiper = new SwipeInjector(InstrumentationRegistry.getInstrumentation());
+        swiper.startDrag(CENTER, mRecyclerView);
+        swiper.dragBy(0, dy);
+        swiper.finishDrag();
+    }
+}
