Merge "DO NOT MERGE ANYWHERE Update support library to 24.2.1-SNAPSHOT r37" into nyc-support-24.1-dev
diff --git a/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java b/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
index 02fd3dd..769a08b 100644
--- a/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
+++ b/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
@@ -322,10 +322,6 @@
setWillNotDraw(false);
mDecelerateInterpolator = new DecelerateInterpolator(DECELERATE_INTERPOLATION_FACTOR);
- final TypedArray a = context.obtainStyledAttributes(attrs, LAYOUT_ATTRS);
- setEnabled(a.getBoolean(0, true));
- a.recycle();
-
final DisplayMetrics metrics = getResources().getDisplayMetrics();
mCircleDiameter = (int) (CIRCLE_DIAMETER * metrics.density);
@@ -341,6 +337,10 @@
mOriginalOffsetTop = mCurrentTargetOffsetTop = -mCircleDiameter;
moveToStart(1.0f);
+
+ final TypedArray a = context.obtainStyledAttributes(attrs, LAYOUT_ATTRS);
+ setEnabled(a.getBoolean(0, true));
+ a.recycle();
}
@Override
diff --git a/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutActions.java b/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutActions.java
index 27b7be6..b337ec8 100644
--- a/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutActions.java
+++ b/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutActions.java
@@ -74,4 +74,28 @@
}
};
}
+
+ public static ViewAction setEnabled(final boolean enabled) {
+ return new ViewAction() {
+ @Override
+ public Matcher<View> getConstraints() {
+ return isAssignableFrom(SwipeRefreshLayout.class);
+ }
+
+ @Override
+ public String getDescription() {
+ return "Set SwipeRefreshLayout enabled state";
+ }
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ uiController.loopMainThreadUntilIdle();
+
+ SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) view;
+ swipeRefreshLayout.setEnabled(enabled);
+
+ uiController.loopMainThreadUntilIdle();
+ }
+ };
+ }
}
diff --git a/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutTest.java b/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutTest.java
index 3f9ed9c..0d0ac22 100644
--- a/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutTest.java
+++ b/core-ui/tests/java/android/support/v4/widget/SwipeRefreshLayoutTest.java
@@ -18,6 +18,7 @@
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.v4.widget.SwipeRefreshLayoutActions.setEnabled;
import static android.support.v4.widget.SwipeRefreshLayoutActions.setRefreshing;
import static android.support.v4.widget.SwipeRefreshLayoutActions.setSize;
@@ -26,6 +27,7 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
+import android.app.Activity;
import android.support.test.espresso.action.ViewActions;
import android.support.coreui.test.R;
import android.support.v4.BaseInstrumentationTestCase;
@@ -96,19 +98,7 @@
public void testSwipeDownToRefresh() throws Throwable {
assertFalse(mSwipeRefresh.isRefreshing());
- final CountDownLatch latch = new CountDownLatch(1);
- SwipeRefreshLayout.OnRefreshListener listener = new SwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- latch.countDown();
- assertTrue(mSwipeRefresh.isRefreshing());
- mSwipeRefresh.setRefreshing(false);
- }
- };
- mSwipeRefresh.setOnRefreshListener(listener);
- onView(withId(R.id.content)).perform(ViewActions.swipeDown());
- assertTrue("SwipeRefreshLayout never started refreshing",
- latch.await(500, TimeUnit.MILLISECONDS));
+ swipeToRefreshVerifyThenStopRefreshing(true);
}
@Test
@@ -145,4 +135,47 @@
assertFalse(mSwipeRefresh.canChildScrollUp());
assertFalse(mSwipeRefresh.canChildScrollUp());
}
+
+ @Test
+ @SmallTest
+ public void testSwipeDownToRefreshInitiallyDisabled() throws Throwable {
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mActivityTestRule.getActivity().setContentView(
+ R.layout.swipe_refresh_layout_disabled_activity);
+ }
+ });
+ mSwipeRefresh = (SwipeRefreshLayout) mActivityTestRule.getActivity().findViewById(
+ R.id.swipe_refresh);
+
+ assertFalse(mSwipeRefresh.isRefreshing());
+
+ swipeToRefreshVerifyThenStopRefreshing(false);
+
+ onView(withId(R.id.swipe_refresh)).perform(setEnabled(true));
+
+ swipeToRefreshVerifyThenStopRefreshing(true);
+ }
+
+ private void swipeToRefreshVerifyThenStopRefreshing(boolean expectRefreshing) throws Throwable {
+ final CountDownLatch latch = new CountDownLatch(1);
+ SwipeRefreshLayout.OnRefreshListener listener = new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ latch.countDown();
+ assertTrue(mSwipeRefresh.isRefreshing());
+ mSwipeRefresh.setRefreshing(false);
+ }
+ };
+ mSwipeRefresh.setOnRefreshListener(listener);
+ onView(withId(R.id.content)).perform(ViewActions.swipeDown());
+ if (expectRefreshing) {
+ assertTrue("SwipeRefreshLayout never started refreshing",
+ latch.await(500, TimeUnit.MILLISECONDS));
+ } else {
+ assertFalse("SwipeRefreshLayout unexpectedly started refreshing",
+ latch.await(500, TimeUnit.MILLISECONDS));
+ }
+ }
}
diff --git a/core-ui/tests/res/layout/swipe_refresh_layout_disabled_activity.xml b/core-ui/tests/res/layout/swipe_refresh_layout_disabled_activity.xml
new file mode 100644
index 0000000..fe5b364
--- /dev/null
+++ b/core-ui/tests/res/layout/swipe_refresh_layout_disabled_activity.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<android.support.v4.widget.SwipeRefreshLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/swipe_refresh"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:enabled="false">
+<!-- some full screen pullable view that will be the offsetable content -->
+ <ListView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/content"/>
+</android.support.v4.widget.SwipeRefreshLayout>
\ No newline at end of file