package com.xtremelabs.robolectric.shadows; import android.text.Editable; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.widget.EditText; import com.xtremelabs.robolectric.internal.Implementation; import com.xtremelabs.robolectric.internal.Implements; /** * A shadow for EditText that provides support for listeners */ @SuppressWarnings({"UnusedDeclaration"}) @Implements(EditText.class) public class ShadowEditText extends ShadowTextView { private int maxLength = Integer.MAX_VALUE; public ShadowEditText() { focusable = true; focusableInTouchMode = true; } @Override public void applyAttributes() { super.applyAttributes(); maxLength = attributeSet.getAttributeIntValue("android", "maxLength", Integer.MAX_VALUE); } @Override @Implementation(i18nSafe = true) public void setText(CharSequence str) { if ( !TextUtils.isEmpty(str) && str.length() > maxLength) { str = str.subSequence(0, maxLength); } super.setText(str); } @Override @Implementation public Editable getText() { CharSequence text = super.getText(); if (!(text instanceof Editable)) { return new SpannableStringBuilder(text); } return (Editable) text; } @Override @Implementation public void setSelection(int index) { super.setSelection(index); } @Override @Implementation public void setSelection(int start, int end) { super.setSelection(start, end); } }