1 package com.xtremelabs.robolectric.shadows; 2 3 import android.text.Editable; 4 import android.text.SpannableStringBuilder; 5 import android.text.TextUtils; 6 import android.widget.EditText; 7 import com.xtremelabs.robolectric.internal.Implementation; 8 import com.xtremelabs.robolectric.internal.Implements; 9 10 /** 11 * A shadow for EditText that provides support for listeners 12 */ 13 @SuppressWarnings({"UnusedDeclaration"}) 14 @Implements(EditText.class) 15 public class ShadowEditText extends ShadowTextView { 16 17 private int maxLength = Integer.MAX_VALUE; 18 19 public ShadowEditText() { 20 focusable = true; 21 focusableInTouchMode = true; 22 } 23 24 @Override 25 public void applyAttributes() { 26 super.applyAttributes(); 27 maxLength = attributeSet.getAttributeIntValue("android", "maxLength", Integer.MAX_VALUE); 28 } 29 30 @Override 31 @Implementation(i18nSafe = true) 32 public void setText(CharSequence str) { 33 if ( !TextUtils.isEmpty(str) && str.length() > maxLength) { 34 str = str.subSequence(0, maxLength); 35 } 36 super.setText(str); 37 } 38 39 @Override 40 @Implementation 41 public Editable getText() { 42 CharSequence text = super.getText(); 43 if (!(text instanceof Editable)) { 44 return new SpannableStringBuilder(text); 45 } 46 return (Editable) text; 47 } 48 49 @Override 50 @Implementation 51 public void setSelection(int index) { 52 super.setSelection(index); 53 } 54 55 @Override 56 @Implementation 57 public void setSelection(int start, int end) { 58 super.setSelection(start, end); 59 } 60 }