diff options
| author | Gilles Debunne <debunne@google.com> | 2010-11-01 11:29:24 -0700 |
|---|---|---|
| committer | Gilles Debunne <debunne@google.com> | 2010-11-04 10:53:04 -0700 |
| commit | 10644106b819acad4f88c3882d5688638951728c (patch) | |
| tree | 6239cdb4963136f4c39b5615079f3db505f54447 | |
| parent | 53e59add93078bc814571ff6108f661032255881 (diff) | |
| download | frameworks_base-10644106b819acad4f88c3882d5688638951728c.zip frameworks_base-10644106b819acad4f88c3882d5688638951728c.tar.gz frameworks_base-10644106b819acad4f88c3882d5688638951728c.tar.bz2 | |
Rationalized the single/multiple line initialization in TextViews.
The TYPE_TEXT_FLAG_MULTI_LINE was set directly, instead of calling
setSingleLine, which has some side effects, like correctly updating
the mSingleLine field.
Generalized the use of setSingleLine everywhere. This may change some
behavior, but is probably fixing more state inconsistencies.
Change-Id: I6b4da2e140a8dc75481cff9e44473daa6b3a83c4
| -rw-r--r-- | core/java/android/widget/TextView.java | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index fc30446..bcc7c46 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -447,7 +447,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener drawableBottom = null; int drawablePadding = 0; int ellipsize = -1; - boolean singleLine = false; + boolean singleLine = true; int maxlength = -1; CharSequence text = ""; CharSequence hint = null; @@ -796,10 +796,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener ? inputType : EditorInfo.TYPE_CLASS_TEXT; } else if (inputType != EditorInfo.TYPE_NULL) { setInputType(inputType, true); - singleLine = (inputType&(EditorInfo.TYPE_MASK_CLASS - | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE)) != - (EditorInfo.TYPE_CLASS_TEXT - | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE); + singleLine = !isMultilineInputType(inputType); } else if (phone) { mInput = DialerKeyListener.getInstance(); mInputType = inputType = EditorInfo.TYPE_CLASS_PHONE; @@ -818,10 +815,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener TextKeyListener.Capitalize cap; inputType = EditorInfo.TYPE_CLASS_TEXT; - if (!singleLine) { - inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE; - } - switch (autocap) { case 1: cap = TextKeyListener.Capitalize.SENTENCES; @@ -848,9 +841,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } else if (editable) { mInput = TextKeyListener.getInstance(); mInputType = EditorInfo.TYPE_CLASS_TEXT; - if (!singleLine) { - mInputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE; - } } else { mInput = null; @@ -867,8 +857,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } - if (password && (mInputType&EditorInfo.TYPE_MASK_CLASS) - == EditorInfo.TYPE_CLASS_TEXT) { + if (password && (mInputType&EditorInfo.TYPE_MASK_CLASS) == EditorInfo.TYPE_CLASS_TEXT) { mInputType = (mInputType & ~(EditorInfo.TYPE_MASK_VARIATION)) | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD; } @@ -884,12 +873,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener drawableLeft, drawableTop, drawableRight, drawableBottom); setCompoundDrawablePadding(drawablePadding); - if (singleLine) { - setSingleLine(); - - if (mInput == null && ellipsize < 0) { + setSingleLine(singleLine); + if (singleLine && mInput == null && ellipsize < 0) { ellipsize = 3; // END - } } switch (ellipsize) { @@ -1153,14 +1139,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } catch (IncompatibleClassChangeError e) { mInputType = EditorInfo.TYPE_CLASS_TEXT; } - if ((mInputType&EditorInfo.TYPE_MASK_CLASS) - == EditorInfo.TYPE_CLASS_TEXT) { - if (mSingleLine) { - mInputType &= ~EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE; - } else { - mInputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE; - } - } + setSingleLine(mSingleLine); } else { mInputType = EditorInfo.TYPE_NULL; } @@ -2988,6 +2967,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return mHint; } + private boolean isMultilineInputType(int type) { + return (type & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE)) == + (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE); + } + /** * Set the type of the content with a constant as defined for * {@link EditorInfo#inputType}. This will take care of changing @@ -3024,17 +3008,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } - boolean multiLine = (type&(EditorInfo.TYPE_MASK_CLASS - | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE)) == - (EditorInfo.TYPE_CLASS_TEXT - | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE); + boolean singleLine = !isMultilineInputType(type); // We need to update the single line mode if it has changed or we // were previously in password mode. - if (mSingleLine == multiLine || forceUpdate) { + if (mSingleLine != singleLine || forceUpdate) { // Change single line mode, but only change the transformation if // we are not in password mode. - applySingleLine(!multiLine, !isPassword); + applySingleLine(singleLine, !isPassword); } InputMethodManager imm = InputMethodManager.peekInstance(); @@ -4721,10 +4702,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION; } } - if ((outAttrs.inputType & (InputType.TYPE_MASK_CLASS - | InputType.TYPE_TEXT_FLAG_MULTI_LINE)) - == (InputType.TYPE_CLASS_TEXT - | InputType.TYPE_TEXT_FLAG_MULTI_LINE)) { + if (isMultilineInputType(outAttrs.inputType)) { // Multi-line text editors should always show an enter key. outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION; } @@ -6067,8 +6045,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ @android.view.RemotableViewMethod public void setSingleLine(boolean singleLine) { - if ((mInputType&EditorInfo.TYPE_MASK_CLASS) - == EditorInfo.TYPE_CLASS_TEXT) { + if ((mInputType & EditorInfo.TYPE_MASK_CLASS) == EditorInfo.TYPE_CLASS_TEXT) { if (singleLine) { mInputType &= ~EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE; } else { @@ -6084,8 +6061,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener setLines(1); setHorizontallyScrolling(true); if (applyTransformation) { - setTransformationMethod(SingleLineTransformationMethod. - getInstance()); + setTransformationMethod(SingleLineTransformationMethod.getInstance()); } } else { setMaxLines(Integer.MAX_VALUE); |
