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