Home | History | Annotate | Download | only in shadows
      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 }