ShadowEditText.java revision 99fafb79bf98b7aa1946bbda1f0a225cefa2d35d
1package com.xtremelabs.robolectric.shadows;
2
3import android.text.Editable;
4import android.text.SpannableStringBuilder;
5import android.text.TextUtils;
6import android.widget.EditText;
7import com.xtremelabs.robolectric.internal.Implementation;
8import 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)
15public 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}