1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.widget;
18 
19 import android.content.Context;
20 import android.os.Bundle;
21 import android.text.Editable;
22 import android.text.Selection;
23 import android.text.Spannable;
24 import android.text.TextUtils;
25 import android.text.method.ArrowKeyMovementMethod;
26 import android.text.method.MovementMethod;
27 import android.util.AttributeSet;
28 import android.view.accessibility.AccessibilityNodeInfo;
29 
30 
31 /*
32  * This is supposed to be a *very* thin veneer over TextView.
33  * Do not make any changes here that do anything that a TextView
34  * with a key listener and a movement method wouldn't do!
35  */
36 
37 /**
38  * EditText is a thin veneer over TextView that configures itself
39  * to be editable.
40  *
41  * <p>See the <a href="{@docRoot}guide/topics/ui/controls/text.html">Text Fields</a>
42  * guide.</p>
43  * <p>
44  * <b>XML attributes</b>
45  * <p>
46  * See {@link android.R.styleable#EditText EditText Attributes},
47  * {@link android.R.styleable#TextView TextView Attributes},
48  * {@link android.R.styleable#View View Attributes}
49  */
50 public class EditText extends TextView {
EditText(Context context)51     public EditText(Context context) {
52         this(context, null);
53     }
54 
EditText(Context context, AttributeSet attrs)55     public EditText(Context context, AttributeSet attrs) {
56         this(context, attrs, com.android.internal.R.attr.editTextStyle);
57     }
58 
EditText(Context context, AttributeSet attrs, int defStyleAttr)59     public EditText(Context context, AttributeSet attrs, int defStyleAttr) {
60         this(context, attrs, defStyleAttr, 0);
61     }
62 
EditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)63     public EditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
64         super(context, attrs, defStyleAttr, defStyleRes);
65     }
66 
67     @Override
getDefaultEditable()68     protected boolean getDefaultEditable() {
69         return true;
70     }
71 
72     @Override
getDefaultMovementMethod()73     protected MovementMethod getDefaultMovementMethod() {
74         return ArrowKeyMovementMethod.getInstance();
75     }
76 
77     @Override
getText()78     public Editable getText() {
79         return (Editable) super.getText();
80     }
81 
82     @Override
setText(CharSequence text, BufferType type)83     public void setText(CharSequence text, BufferType type) {
84         super.setText(text, BufferType.EDITABLE);
85     }
86 
87     /**
88      * Convenience for {@link Selection#setSelection(Spannable, int, int)}.
89      */
setSelection(int start, int stop)90     public void setSelection(int start, int stop) {
91         Selection.setSelection(getText(), start, stop);
92     }
93 
94     /**
95      * Convenience for {@link Selection#setSelection(Spannable, int)}.
96      */
setSelection(int index)97     public void setSelection(int index) {
98         Selection.setSelection(getText(), index);
99     }
100 
101     /**
102      * Convenience for {@link Selection#selectAll}.
103      */
selectAll()104     public void selectAll() {
105         Selection.selectAll(getText());
106     }
107 
108     /**
109      * Convenience for {@link Selection#extendSelection}.
110      */
extendSelection(int index)111     public void extendSelection(int index) {
112         Selection.extendSelection(getText(), index);
113     }
114 
115     @Override
setEllipsize(TextUtils.TruncateAt ellipsis)116     public void setEllipsize(TextUtils.TruncateAt ellipsis) {
117         if (ellipsis == TextUtils.TruncateAt.MARQUEE) {
118             throw new IllegalArgumentException("EditText cannot use the ellipsize mode "
119                     + "TextUtils.TruncateAt.MARQUEE");
120         }
121         super.setEllipsize(ellipsis);
122     }
123 
124     @Override
getAccessibilityClassName()125     public CharSequence getAccessibilityClassName() {
126         return EditText.class.getName();
127     }
128 
129     /** @hide */
130     @Override
performAccessibilityActionInternal(int action, Bundle arguments)131     public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
132         switch (action) {
133             case AccessibilityNodeInfo.ACTION_SET_TEXT: {
134                 CharSequence text = (arguments != null) ? arguments.getCharSequence(
135                         AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE) : null;
136                 setText(text);
137                 if (text != null && text.length() > 0) {
138                     setSelection(text.length());
139                 }
140                 return true;
141             }
142             default: {
143                 return super.performAccessibilityActionInternal(action, arguments);
144             }
145         }
146     }
147 }
148