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