am 6736d380: am bdb61865: Merge "Add equals() and hashcode() to SpannableString" into klp-dev

* commit '6736d380b7d318f3af84294ae38a881e2dc54528':
  Add equals() and hashcode() to SpannableString
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 8929930..6efde05 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -1288,6 +1288,47 @@
         return mFilters;
     }
 
+    // Same as SpannableStringInternal
+    @Override
+    public boolean equals(Object o) {
+        if (o instanceof Spanned &&
+                toString().equals(o.toString())) {
+            // Check span data
+            Object[] otherSpans = ((Spanned) o).getSpans(0,
+                    ((Spanned) o).length(), Object.class);
+            if (mSpanCount == otherSpans.length) {
+                for (int i = 0; i < mSpanCount; ++i) {
+                    Object thisSpan = mSpans[i];
+                    Object otherSpan = otherSpans[i];
+                    if (!thisSpan.equals(otherSpan) ||
+                            getSpanStart(thisSpan) != getSpanStart(otherSpan) ||
+                            getSpanEnd(thisSpan) != getSpanEnd(otherSpan) ||
+                            getSpanFlags(thisSpan) != getSpanFlags(otherSpan)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+    // Same as SpannableStringInternal
+    @Override
+    public int hashCode() {
+        int hash = toString().hashCode();
+        hash = hash * 31 + mSpanCount;
+        for (int i = 0; i < mSpanCount; ++i) {
+            Object span = mSpans[i];
+            hash = hash * 31 + span.hashCode();
+            hash = hash * 31 + getSpanStart(span);
+            hash = hash * 31 + getSpanEnd(span);
+            hash = hash * 31 + getSpanFlags(span);
+        }
+        return hash;
+    }
+
     private static final InputFilter[] NO_FILTERS = new InputFilter[0];
     private InputFilter[] mFilters = NO_FILTERS;
 
diff --git a/core/java/android/text/SpannableStringInternal.java b/core/java/android/text/SpannableStringInternal.java
index 0825bf3..9b24a2e 100644
--- a/core/java/android/text/SpannableStringInternal.java
+++ b/core/java/android/text/SpannableStringInternal.java
@@ -358,6 +358,47 @@
         }
     }
 
+    // Same as SpannableStringBuilder
+    @Override
+    public boolean equals(Object o) {
+        if (o instanceof Spanned &&
+                toString().equals(o.toString())) {
+            // Check span data
+            Object[] otherSpans = ((Spanned) o).getSpans(0,
+                    ((Spanned) o).length(), Object.class);
+            if (mSpanCount == otherSpans.length) {
+                for (int i = 0; i < mSpanCount; ++i) {
+                    Object thisSpan = mSpans[i];
+                    Object otherSpan = otherSpans[i];
+                    if (!thisSpan.equals(otherSpan) ||
+                            getSpanStart(thisSpan) != getSpanStart(otherSpan) ||
+                            getSpanEnd(thisSpan) != getSpanEnd(otherSpan) ||
+                            getSpanFlags(thisSpan) != getSpanFlags(otherSpan)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+    // Same as SpannableStringBuilder
+    @Override
+    public int hashCode() {
+        int hash = toString().hashCode();
+        hash = hash * 31 + mSpanCount;
+        for (int i = 0; i < mSpanCount; ++i) {
+            Object span = mSpans[i];
+            hash = hash * 31 + span.hashCode();
+            hash = hash * 31 + getSpanStart(span);
+            hash = hash * 31 + getSpanEnd(span);
+            hash = hash * 31 + getSpanFlags(span);
+        }
+        return hash;
+    }
+
     private String mText;
     private Object[] mSpans;
     private int[] mSpanData;
diff --git a/core/java/android/transition/TextChange.java b/core/java/android/transition/TextChange.java
index 0b1e4e1..fa2f548 100644
--- a/core/java/android/transition/TextChange.java
+++ b/core/java/android/transition/TextChange.java
@@ -21,6 +21,7 @@
 import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
 import android.graphics.Color;
+import android.util.Log;
 import android.view.ViewGroup;
 import android.widget.TextView;
 
@@ -36,6 +37,9 @@
  * @hide
  */
 public class TextChange extends Transition {
+
+    private static final String LOG_TAG = "TextChange";
+
     private static final String PROPNAME_TEXT = "android:textchange:text";
     private static final String PROPNAME_TEXT_COLOR = "android:textchange:textColor";
 
@@ -224,6 +228,9 @@
                 }
             };
             addListener(transitionListener);
+            if (DBG) {
+                Log.d(LOG_TAG, "createAnimator returning " + anim);
+            }
             return anim;
         }
         return null;