All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.shadows.ShadowTextView Maven / Gradle / Ivy

The newest version!
package org.robolectric.shadows;

import android.content.Context;
import android.graphics.Typeface;
import android.text.InputFilter;
import android.text.TextPaint;
import android.text.TextWatcher;
import android.text.method.MovementMethod;
import android.text.method.TransformationMethod;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
import org.robolectric.annotation.HiddenApi;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.RealObject;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import static org.robolectric.shadow.api.Shadow.directlyOn;

@SuppressWarnings({"UnusedDeclaration"})
@Implements(TextView.class)
public class ShadowTextView extends ShadowView {
  @RealObject TextView realTextView;

  private CharSequence text = "";
  private TextView.BufferType bufferType = TextView.BufferType.NORMAL;
  private Integer textColorHexValue;
  private Integer hintColorHexValue;
  private float textSize = 14.0f;
  private boolean autoLinkPhoneNumbers;
  private int autoLinkMask;
  private CharSequence hintText;
  private CharSequence errorText;
  private int compoundDrawablePadding;
  private MovementMethod movementMethod;
  private boolean linksClickable;
  private int gravity;
  private int imeOptions = EditorInfo.IME_NULL;
  private TextView.OnEditorActionListener onEditorActionListener;
  private int textAppearanceId;
  private TransformationMethod transformationMethod;
  private int inputType;
  private int lines;
  protected int selectionStart = -1;
  protected int selectionEnd = -1;
  private Typeface typeface;
  private InputFilter[] inputFilters;
  private TextPaint textPaint = new TextPaint();

  private List watchers = new ArrayList<>();
  private List previousKeyCodes = new ArrayList<>();
  private List previousKeyEvents = new ArrayList<>();
  private int paintFlags;
  private int compoundDrawablesWithIntrinsicBoundsLeft;
  private int compoundDrawablesWithIntrinsicBoundsTop;
  private int compoundDrawablesWithIntrinsicBoundsRight;
  private int compoundDrawablesWithIntrinsicBoundsBottom;

  @Implementation
  public void setTextAppearance(Context context, int resid) {
    textAppearanceId = resid;
    directlyOn(realTextView, TextView.class).setTextAppearance(context, resid);
  }

  @Implementation
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    previousKeyCodes.add(keyCode);
    previousKeyEvents.add(event);
    return directlyOn(realTextView, TextView.class).onKeyDown(keyCode, event);
  }

  @Implementation
  public boolean onKeyUp(int keyCode, KeyEvent event) {
    previousKeyCodes.add(keyCode);
    previousKeyEvents.add(event);
    return directlyOn(realTextView, TextView.class).onKeyUp(keyCode, event);
  }

  public int getPreviousKeyCode(int index) {
    return previousKeyCodes.get(index);
  }

  public KeyEvent getPreviousKeyEvent(int index) {
    return previousKeyEvents.get(index);
  }

  /**
   * Returns the text string of this {@code TextView}.
   *
   * Robolectric extension.
   */
  @Override
  public String innerText() {
    CharSequence text = realTextView.getText();
    return (text == null || realTextView.getVisibility() != View.VISIBLE) ? "" : text.toString();
  }

  public int getTextAppearanceId() {
    return textAppearanceId;
  }

  @Implementation
  public void addTextChangedListener(TextWatcher watcher) {
    this.watchers.add(watcher);
    directlyOn(realTextView, TextView.class).addTextChangedListener(watcher);
  }

  @Implementation
  public void removeTextChangedListener(TextWatcher watcher) {
    this.watchers.remove(watcher);
    directlyOn(realTextView, TextView.class).removeTextChangedListener(watcher);
  }

  /**
   * @return the list of currently registered watchers/listeners
   */
  public List getWatchers() {
    return watchers;
  }

  @HiddenApi @Implementation
  public Locale getTextServicesLocale() {
    return Locale.getDefault();
  }

  @Override
  protected void dumpAttributes(PrintStream out) {
    super.dumpAttributes(out);
    CharSequence text = realTextView.getText();
    if (text != null && text.length() > 0) {
      dumpAttribute(out, "text", text.toString());
    }
  }

  @Implementation
  public int getPaintFlags() {
    return paintFlags;
  }

  @Implementation
  public void setPaintFlags(int paintFlags) {
    this.paintFlags = paintFlags;
  }

  @Implementation
  public void setOnEditorActionListener(TextView.OnEditorActionListener l) {
    this.onEditorActionListener = l;
    directlyOn(realTextView, TextView.class).setOnEditorActionListener(l);
  }

  public TextView.OnEditorActionListener getOnEditorActionListener() {
    return onEditorActionListener;
  }

  @Implementation
  public void setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) {
    this.compoundDrawablesWithIntrinsicBoundsLeft = left;
    this.compoundDrawablesWithIntrinsicBoundsTop = top;
    this.compoundDrawablesWithIntrinsicBoundsRight = right;
    this.compoundDrawablesWithIntrinsicBoundsBottom = bottom;
    directlyOn(realTextView, TextView.class).setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);
  }

  public int getCompoundDrawablesWithIntrinsicBoundsLeft() {
    return compoundDrawablesWithIntrinsicBoundsLeft;
  }

  public int getCompoundDrawablesWithIntrinsicBoundsTop() {
    return compoundDrawablesWithIntrinsicBoundsTop;
  }

  public int getCompoundDrawablesWithIntrinsicBoundsRight() {
    return compoundDrawablesWithIntrinsicBoundsRight;
  }

  public int getCompoundDrawablesWithIntrinsicBoundsBottom() {
    return compoundDrawablesWithIntrinsicBoundsBottom;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy