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

* commit 'bdb6186580875982dd1a537b6c935922d0e62fe3':
  Add equals() and hashcode() to SpannableString
This commit is contained in:
Chet Haase
2013-09-20 11:24:49 -07:00
committed by Android Git Automerger
3 changed files with 89 additions and 0 deletions

View File

@@ -1288,6 +1288,47 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
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;

View File

@@ -358,6 +358,47 @@ import java.lang.reflect.Array;
}
}
// 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;

View File

@@ -21,6 +21,7 @@ import android.animation.AnimatorListenerAdapter;
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 @@ import java.util.Map;
* @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 @@ public class TextChange extends Transition {
}
};
addListener(transitionListener);
if (DBG) {
Log.d(LOG_TAG, "createAnimator returning " + anim);
}
return anim;
}
return null;