summaryrefslogtreecommitdiffstats
path: root/core/java/android/text
diff options
context:
space:
mode:
authorJames Cook <jamescook@google.com>2015-03-18 21:38:50 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-03-18 21:39:03 +0000
commitf2560e62cf26cae64f5751b0479743e09cb7bd7f (patch)
tree802ec2d549ec9a73cfa57737e26c501633c7d5bb /core/java/android/text
parent43c410eaacf7d287c6c3f5621e6e0b96501004dc (diff)
parentd2026686702f6c893e871c078dc5176347b3b27e (diff)
downloadframeworks_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.java19
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;