diff options
author | James Cook <jamescook@google.com> | 2015-03-18 21:38:50 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-03-18 21:39:03 +0000 |
commit | f2560e62cf26cae64f5751b0479743e09cb7bd7f (patch) | |
tree | 802ec2d549ec9a73cfa57737e26c501633c7d5bb /core/java/android/text | |
parent | 43c410eaacf7d287c6c3f5621e6e0b96501004dc (diff) | |
parent | d2026686702f6c893e871c078dc5176347b3b27e (diff) | |
download | frameworks_base-f2560e62cf26cae64f5751b0479743e09cb7bd7f.zip frameworks_base-f2560e62cf26cae64f5751b0479743e09cb7bd7f.tar.gz frameworks_base-f2560e62cf26cae64f5751b0479743e09cb7bd7f.tar.bz2 |
Merge "Improve undo support for text entered with IME"
Diffstat (limited to 'core/java/android/text')
-rw-r--r-- | core/java/android/text/SpannableStringBuilder.java | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java index 7ce44e1..992dc4d 100644 --- a/core/java/android/text/SpannableStringBuilder.java +++ b/core/java/android/text/SpannableStringBuilder.java @@ -1006,28 +1006,43 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable return new String(buf); } + /** + * Returns the depth of TextWatcher callbacks. Returns 0 when the object is not handling + * TextWatchers. A return value greater than 1 implies that a TextWatcher caused a change that + * recursively triggered a TextWatcher. + */ + public int getTextWatcherDepth() { + return mTextWatcherDepth; + } + private void sendBeforeTextChanged(TextWatcher[] watchers, int start, int before, int after) { int n = watchers.length; + mTextWatcherDepth++; for (int i = 0; i < n; i++) { watchers[i].beforeTextChanged(this, start, before, after); } + mTextWatcherDepth--; } private void sendTextChanged(TextWatcher[] watchers, int start, int before, int after) { int n = watchers.length; + mTextWatcherDepth++; for (int i = 0; i < n; i++) { watchers[i].onTextChanged(this, start, before, after); } + mTextWatcherDepth--; } private void sendAfterTextChanged(TextWatcher[] watchers) { int n = watchers.length; + mTextWatcherDepth++; for (int i = 0; i < n; i++) { watchers[i].afterTextChanged(this); } + mTextWatcherDepth--; } private void sendSpanAdded(Object what, int start, int end) { @@ -1524,6 +1539,10 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable private IdentityHashMap<Object, Integer> mIndexOfSpan; private int mLowWaterMark; // indices below this have not been touched + // TextWatcher callbacks may trigger changes that trigger more callbacks. This keeps track of + // how deep the callbacks go. + private int mTextWatcherDepth; + // TODO These value are tightly related to the public SPAN_MARK/POINT values in {@link Spanned} private static final int MARK = 1; private static final int POINT = 2; |