139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov/*
239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * Copyright (C) 2016 The Android Open Source Project
339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov *
439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License");
539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * you may not use this file except in compliance with the License.
639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * You may obtain a copy of the License at
739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov *
839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov *      http://www.apache.org/licenses/LICENSE-2.0
939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov *
1039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software
1139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS,
1239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * See the License for the specific language governing permissions and
1439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov * limitations under the License.
1539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov */
1639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
1739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovpackage android.support.v4.testutils;
1839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
1939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.graphics.drawable.Drawable;
2039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.annotation.DrawableRes;
2139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.annotation.Nullable;
2239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.annotation.StringRes;
2339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.annotation.StyleRes;
2439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.test.espresso.UiController;
2539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.test.espresso.ViewAction;
2639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.v4.widget.TextViewCompat;
2739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.view.View;
2839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.widget.TextView;
2939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport org.hamcrest.Matcher;
3039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
3139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
3239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
3339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovpublic class TextViewActions {
3439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
3539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets max lines count on <code>TextView</code>.
3639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
3739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setMaxLines(final int maxLines) {
3839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
3939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
4039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
4139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
4239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
4339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
4439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
4539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
4639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set max lines";
4739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
4839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
4939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
5039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
5139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
5239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
5339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
5439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                textView.setMaxLines(maxLines);
5539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
5639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
5739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
5839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
5939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
6039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
6139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
6239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets min lines count on <code>TextView</code>.
6339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
6439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setMinLines(final int minLines) {
6539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
6639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
6739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
6839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
6939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
7039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
7139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
7239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
7339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set min lines";
7439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
7539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
7639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
7739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
7839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
7939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
8039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
8139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                textView.setMinLines(minLines);
8239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
8339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
8439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
8539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
8639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
8739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
8839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
8939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets text content on <code>TextView</code>.
9039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
9139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setText(final @StringRes int stringResId) {
9239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
9339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
9439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
9539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
9639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
9739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
9839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
9939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
10039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set text";
10139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
10239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
10339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
10439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
10539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
10639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
10739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
10839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                textView.setText(stringResId);
10939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
11039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
11139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
11239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
11339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
11439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
11539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
11639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets text appearance on <code>TextView</code>.
11739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
11839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setTextAppearance(final @StyleRes int styleResId) {
11939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
12039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
12139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
12239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
12339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
12439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
12539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
12639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
12739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set text appearance";
12839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
12939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
13039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
13139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
13239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
13339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
13439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
13539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextViewCompat.setTextAppearance(textView, styleResId);
13639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
13739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
13839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
13939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
14039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
14139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
14239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
14339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets compound drawables on <code>TextView</code>.
14439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
14539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setCompoundDrawablesRelative(final @Nullable Drawable start,
14639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            final @Nullable Drawable top, final @Nullable Drawable end,
14739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            final @Nullable Drawable bottom) {
14839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
14939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
15039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
15139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
15239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
15339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
15439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
15539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
15639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set compound drawables";
15739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
15839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
15939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
16039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
16139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
16239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
16339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
16439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextViewCompat.setCompoundDrawablesRelative(textView, start, top, end, bottom);
16539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
16639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
16739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
16839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
16939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
17039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
17139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
17239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets compound drawables on <code>TextView</code>.
17339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
17439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setCompoundDrawablesRelativeWithIntrinsicBounds(
17539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            final @Nullable Drawable start, final @Nullable Drawable top,
17639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            final @Nullable Drawable end, final @Nullable Drawable bottom) {
17739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
17839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
17939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
18039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
18139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
18239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
18339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
18439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
18539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set compound drawables";
18639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
18739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
18839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
18939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
19039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
19139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
19239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
19339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(
19439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                        textView, start, top, end, bottom);
19539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
19639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
19739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
19839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
19939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
20039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
20139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    /**
20239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     * Sets compound drawables on <code>TextView</code>.
20339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov     */
20439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public static ViewAction setCompoundDrawablesRelativeWithIntrinsicBounds(
20539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            final @DrawableRes int start, final @DrawableRes int top, final @DrawableRes int end,
20639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            final @DrawableRes int bottom) {
20739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        return new ViewAction() {
20839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
20939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public Matcher<View> getConstraints() {
21039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return isAssignableFrom(TextView.class);
21139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
21239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
21339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
21439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public String getDescription() {
21539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                return "TextView set compound drawables";
21639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
21739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
21839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            @Override
21939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            public void perform(UiController uiController, View view) {
22039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
22139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
22239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextView textView = (TextView) view;
22339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(
22439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                        textView, start, top, end, bottom);
22539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov
22639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
22739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov            }
22839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        };
22939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    }
23039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov}
231