1/* 2 * Copyright (C) 2016 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; 20 21import android.graphics.Typeface; 22import android.support.design.widget.TextInputLayout; 23import android.support.test.espresso.UiController; 24import android.support.test.espresso.ViewAction; 25import android.view.View; 26 27import org.hamcrest.Matcher; 28 29public class TextInputLayoutActions { 30 31 public static ViewAction setErrorEnabled(final boolean enabled) { 32 return new ViewAction() { 33 @Override 34 public Matcher<View> getConstraints() { 35 return isAssignableFrom(TextInputLayout.class); 36 } 37 38 @Override 39 public String getDescription() { 40 return "Enables/disables the error"; 41 } 42 43 @Override 44 public void perform(UiController uiController, View view) { 45 uiController.loopMainThreadUntilIdle(); 46 47 TextInputLayout layout = (TextInputLayout) view; 48 layout.setErrorEnabled(enabled); 49 50 uiController.loopMainThreadUntilIdle(); 51 } 52 }; 53 } 54 55 public static ViewAction setError(final CharSequence error) { 56 return new ViewAction() { 57 @Override 58 public Matcher<View> getConstraints() { 59 return isAssignableFrom(TextInputLayout.class); 60 } 61 62 @Override 63 public String getDescription() { 64 return "Sets the error"; 65 } 66 67 @Override 68 public void perform(UiController uiController, View view) { 69 uiController.loopMainThreadUntilIdle(); 70 71 TextInputLayout layout = (TextInputLayout) view; 72 layout.setError(error); 73 74 uiController.loopMainThreadUntilIdle(); 75 } 76 }; 77 } 78 79 public static ViewAction setErrorTextAppearance(final int resId) { 80 return new ViewAction() { 81 @Override 82 public Matcher<View> getConstraints() { 83 return isAssignableFrom(TextInputLayout.class); 84 } 85 86 @Override 87 public String getDescription() { 88 return "Sets the error text appearance"; 89 } 90 91 @Override 92 public void perform(UiController uiController, View view) { 93 uiController.loopMainThreadUntilIdle(); 94 95 TextInputLayout layout = (TextInputLayout) view; 96 layout.setErrorTextAppearance(resId); 97 98 uiController.loopMainThreadUntilIdle(); 99 } 100 }; 101 } 102 103 public static ViewAction setTypeface(final Typeface typeface) { 104 return new ViewAction() { 105 @Override 106 public Matcher<View> getConstraints() { 107 return isAssignableFrom(TextInputLayout.class); 108 } 109 110 @Override 111 public String getDescription() { 112 return "Sets the typeface"; 113 } 114 115 @Override 116 public void perform(UiController uiController, View view) { 117 uiController.loopMainThreadUntilIdle(); 118 119 TextInputLayout layout = (TextInputLayout) view; 120 layout.setTypeface(typeface); 121 122 uiController.loopMainThreadUntilIdle(); 123 } 124 }; 125 } 126 127 public static ViewAction setPasswordVisibilityToggleEnabled(final boolean enabled) { 128 return new ViewAction() { 129 @Override 130 public Matcher<View> getConstraints() { 131 return isAssignableFrom(TextInputLayout.class); 132 } 133 134 @Override 135 public String getDescription() { 136 return "Sets the error"; 137 } 138 139 @Override 140 public void perform(UiController uiController, View view) { 141 uiController.loopMainThreadUntilIdle(); 142 143 TextInputLayout layout = (TextInputLayout) view; 144 layout.setPasswordVisibilityToggleEnabled(enabled); 145 146 uiController.loopMainThreadUntilIdle(); 147 } 148 }; 149 } 150 151 public static ViewAction setCounterEnabled(final boolean enabled) { 152 return new ViewAction() { 153 @Override 154 public Matcher<View> getConstraints() { 155 return isAssignableFrom(TextInputLayout.class); 156 } 157 158 @Override 159 public String getDescription() { 160 return "Sets the counter enabled"; 161 } 162 163 @Override 164 public void perform(UiController uiController, View view) { 165 uiController.loopMainThreadUntilIdle(); 166 167 TextInputLayout layout = (TextInputLayout) view; 168 layout.setCounterEnabled(enabled); 169 170 uiController.loopMainThreadUntilIdle(); 171 } 172 }; 173 } 174 175 public static ViewAction setCounterMaxLength(final int maxLength) { 176 return new ViewAction() { 177 @Override 178 public Matcher<View> getConstraints() { 179 return isAssignableFrom(TextInputLayout.class); 180 } 181 182 @Override 183 public String getDescription() { 184 return "Sets the counter max length"; 185 } 186 187 @Override 188 public void perform(UiController uiController, View view) { 189 uiController.loopMainThreadUntilIdle(); 190 191 TextInputLayout layout = (TextInputLayout) view; 192 layout.setCounterMaxLength(maxLength); 193 194 uiController.loopMainThreadUntilIdle(); 195 } 196 }; 197 } 198 199} 200