13ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov/* 23ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Copyright (C) 2016 The Android Open Source Project 33ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * 43ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License"); 53ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * you may not use this file except in compliance with the License. 63ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * You may obtain a copy of the License at 73ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * 83ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * http://www.apache.org/licenses/LICENSE-2.0 93ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * 103ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Unless required by applicable law or agreed to in writing, software 113ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS, 123ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * See the License for the specific language governing permissions and 143ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * limitations under the License. 153ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 163ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 173ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovpackage android.support.v4.testutils; 183ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 193ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.graphics.drawable.Drawable; 203ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.annotation.DrawableRes; 213ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.annotation.Nullable; 223ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.annotation.StringRes; 233ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.annotation.StyleRes; 243ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.test.espresso.UiController; 253ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.test.espresso.ViewAction; 263ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.support.v4.widget.TextViewCompat; 273ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.view.View; 283ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport android.widget.TextView; 293ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport org.hamcrest.Matcher; 303ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 313ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; 323ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 333ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikovpublic class TextViewActions { 343ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 353ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets max lines count on <code>TextView</code>. 363ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 373ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setMaxLines(final int maxLines) { 383ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 393ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 403ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 413ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 423ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 433ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 443ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 453ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 463ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set max lines"; 473ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 483ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 493ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 503ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 513ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 523ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 533ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 543ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov textView.setMaxLines(maxLines); 553ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 563ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 573ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 583ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 593ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 603ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 613ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 623ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets min lines count on <code>TextView</code>. 633ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 643ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setMinLines(final int minLines) { 653ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 663ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 673ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 683ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 693ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 703ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 713ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 723ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 733ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set min lines"; 743ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 753ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 763ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 773ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 783ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 793ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 803ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 813ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov textView.setMinLines(minLines); 823ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 833ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 843ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 853ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 863ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 873ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 883ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 893ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets text content on <code>TextView</code>. 903ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 913ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setText(final @StringRes int stringResId) { 923ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 933ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 943ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 953ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 963ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 973ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 983ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 993ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 1003ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set text"; 1013ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1023ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1033ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1043ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 1053ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1063ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1073ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 1083ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov textView.setText(stringResId); 1093ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1103ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1113ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1123ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 1133ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1143ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1153ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 1163ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets text appearance on <code>TextView</code>. 1173ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 1183ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setTextAppearance(final @StyleRes int styleResId) { 1193ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 1203ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1213ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 1223ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 1233ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1243ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1253ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1263ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 1273ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set text appearance"; 1283ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1293ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1303ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1313ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 1323ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1333ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1343ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 1353ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextViewCompat.setTextAppearance(textView, styleResId); 1363ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1373ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1383ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1393ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 1403ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1413ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1423ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 1433ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets compound drawables on <code>TextView</code>. 1443ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 1453ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setCompoundDrawablesRelative(final @Nullable Drawable start, 1463ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov final @Nullable Drawable top, final @Nullable Drawable end, 1473ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov final @Nullable Drawable bottom) { 1483ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 1493ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1503ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 1513ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 1523ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1533ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1543ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1553ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 1563ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set compound drawables"; 1573ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1583ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1593ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1603ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 1613ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1623ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1633ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 1643ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextViewCompat.setCompoundDrawablesRelative(textView, start, top, end, bottom); 1653ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1663ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1673ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1683ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 1693ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1703ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1713ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 1723ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets compound drawables on <code>TextView</code>. 1733ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 1743ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setCompoundDrawablesRelativeWithIntrinsicBounds( 1753ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov final @Nullable Drawable start, final @Nullable Drawable top, 1763ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov final @Nullable Drawable end, final @Nullable Drawable bottom) { 1773ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 1783ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1793ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 1803ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 1813ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1823ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1833ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1843ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 1853ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set compound drawables"; 1863ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1873ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1883ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 1893ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 1903ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1913ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1923ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 1933ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds( 1943ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov textView, start, top, end, bottom); 1953ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 1963ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 1973ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 1983ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 1993ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 2003ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 2013ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov /** 2023ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov * Sets compound drawables on <code>TextView</code>. 2033ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov */ 2043ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public static ViewAction setCompoundDrawablesRelativeWithIntrinsicBounds( 2053ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov final @DrawableRes int start, final @DrawableRes int top, final @DrawableRes int end, 2063ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov final @DrawableRes int bottom) { 2073ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return new ViewAction() { 2083ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 2093ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public Matcher<View> getConstraints() { 2103ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return isAssignableFrom(TextView.class); 2113ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 2123ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 2133ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 2143ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public String getDescription() { 2153ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov return "TextView set compound drawables"; 2163ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 2173ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 2183ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov @Override 2193ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov public void perform(UiController uiController, View view) { 2203ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 2213ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 2223ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextView textView = (TextView) view; 2233ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds( 2243ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov textView, start, top, end, bottom); 2253ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov 2263ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov uiController.loopMainThreadUntilIdle(); 2273ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 2283ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov }; 2293ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov } 2303ac77bf186f87ecad4bf0063b2f6c4384efbd56aKirill Grouchnikov} 231