1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.support.design.testutils; 18 19import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; 20import static android.support.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast; 21 22import android.support.annotation.Nullable; 23import android.support.test.espresso.UiController; 24import android.support.test.espresso.ViewAction; 25import android.support.v4.view.PagerAdapter; 26import android.support.v4.view.ViewPager; 27import android.view.View; 28 29import org.hamcrest.Matcher; 30 31public class ViewPagerActions { 32 /** 33 * Moves <code>ViewPager</code> to the right by one page. 34 */ 35 public static ViewAction scrollRight() { 36 return new ViewAction() { 37 @Override 38 public Matcher<View> getConstraints() { 39 return isDisplayingAtLeast(90); 40 } 41 42 @Override 43 public String getDescription() { 44 return "ViewPager scroll one page to the right"; 45 } 46 47 @Override 48 public void perform(UiController uiController, View view) { 49 uiController.loopMainThreadUntilIdle(); 50 51 ViewPager viewPager = (ViewPager) view; 52 int current = viewPager.getCurrentItem(); 53 viewPager.setCurrentItem(current + 1, false); 54 55 uiController.loopMainThreadUntilIdle(); 56 } 57 }; 58 } 59 60 /** 61 * Moves <code>ViewPager</code> to the left by one page. 62 */ 63 public static ViewAction scrollLeft() { 64 return new ViewAction() { 65 @Override 66 public Matcher<View> getConstraints() { 67 return isDisplayingAtLeast(90); 68 } 69 70 @Override 71 public String getDescription() { 72 return "ViewPager scroll one page to the left"; 73 } 74 75 @Override 76 public void perform(UiController uiController, View view) { 77 uiController.loopMainThreadUntilIdle(); 78 79 ViewPager viewPager = (ViewPager) view; 80 int current = viewPager.getCurrentItem(); 81 viewPager.setCurrentItem(current - 1, false); 82 83 uiController.loopMainThreadUntilIdle(); 84 } 85 }; 86 } 87 88 /** 89 * Moves <code>ViewPager</code> to the last page. 90 */ 91 public static ViewAction scrollToLast() { 92 return new ViewAction() { 93 @Override 94 public Matcher<View> getConstraints() { 95 return isDisplayingAtLeast(90); 96 } 97 98 @Override 99 public String getDescription() { 100 return "ViewPager scroll to last page"; 101 } 102 103 @Override 104 public void perform(UiController uiController, View view) { 105 uiController.loopMainThreadUntilIdle(); 106 107 ViewPager viewPager = (ViewPager) view; 108 int size = viewPager.getAdapter().getCount(); 109 if (size > 0) { 110 viewPager.setCurrentItem(size - 1, false); 111 } 112 113 uiController.loopMainThreadUntilIdle(); 114 } 115 }; 116 } 117 118 /** 119 * Moves <code>ViewPager</code> to the first page. 120 */ 121 public static ViewAction scrollToFirst() { 122 return new ViewAction() { 123 @Override 124 public Matcher<View> getConstraints() { 125 return isDisplayingAtLeast(90); 126 } 127 128 @Override 129 public String getDescription() { 130 return "ViewPager scroll to first page"; 131 } 132 133 @Override 134 public void perform(UiController uiController, View view) { 135 uiController.loopMainThreadUntilIdle(); 136 137 ViewPager viewPager = (ViewPager) view; 138 int size = viewPager.getAdapter().getCount(); 139 if (size > 0) { 140 viewPager.setCurrentItem(0, false); 141 } 142 143 uiController.loopMainThreadUntilIdle(); 144 } 145 }; 146 } 147 148 /** 149 * Moves <code>ViewPager</code> to specific page. 150 */ 151 public static ViewAction scrollToPage(final int page) { 152 return new ViewAction() { 153 @Override 154 public Matcher<View> getConstraints() { 155 return isDisplayingAtLeast(90); 156 } 157 158 @Override 159 public String getDescription() { 160 return "ViewPager move to a specific page"; 161 } 162 163 @Override 164 public void perform(UiController uiController, View view) { 165 uiController.loopMainThreadUntilIdle(); 166 167 ViewPager viewPager = (ViewPager) view; 168 viewPager.setCurrentItem(page, false); 169 170 uiController.loopMainThreadUntilIdle(); 171 } 172 }; 173 } 174 175 /** 176 * Sets the specified adapter on <code>ViewPager</code>. 177 */ 178 public static ViewAction setAdapter(final @Nullable PagerAdapter adapter) { 179 return new ViewAction() { 180 @Override 181 public Matcher<View> getConstraints() { 182 return isAssignableFrom(ViewPager.class); 183 } 184 185 @Override 186 public String getDescription() { 187 return "ViewPager set adapter"; 188 } 189 190 @Override 191 public void perform(UiController uiController, View view) { 192 uiController.loopMainThreadUntilIdle(); 193 194 ViewPager viewPager = (ViewPager) view; 195 viewPager.setAdapter(adapter); 196 197 uiController.loopMainThreadUntilIdle(); 198 } 199 }; 200 } 201} 202