Fix SpannableStringBuilder getSpans sort
am: 051caedcaa
Change-Id: I6d4a4d3b5810d47809458bcd1e1dce9567363da6
This commit is contained in:
@@ -1025,16 +1025,19 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
|
||||
}
|
||||
|
||||
for (int i = size - 1; i > 0; i--) {
|
||||
T v = array[0];
|
||||
int prio = priority[0];
|
||||
int insertOrder = insertionOrder[0];
|
||||
final T tmpSpan = array[0];
|
||||
array[0] = array[i];
|
||||
array[i] = tmpSpan;
|
||||
|
||||
final int tmpPriority = priority[0];
|
||||
priority[0] = priority[i];
|
||||
priority[i] = tmpPriority;
|
||||
|
||||
final int tmpOrder = insertionOrder[0];
|
||||
insertionOrder[0] = insertionOrder[i];
|
||||
insertionOrder[i] = tmpOrder;
|
||||
|
||||
siftDown(0, array, i, priority, insertionOrder);
|
||||
array[i] = v;
|
||||
priority[i] = prio;
|
||||
insertionOrder[i] = insertOrder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1050,10 +1053,6 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
|
||||
*/
|
||||
private final <T> void siftDown(int index, T[] array, int size, int[] priority,
|
||||
int[] insertionOrder) {
|
||||
T v = array[index];
|
||||
int prio = priority[index];
|
||||
int insertOrder = insertionOrder[index];
|
||||
|
||||
int left = 2 * index + 1;
|
||||
while (left < size) {
|
||||
if (left < size - 1 && compareSpans(left, left + 1, priority, insertionOrder) < 0) {
|
||||
@@ -1062,15 +1061,22 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
|
||||
if (compareSpans(index, left, priority, insertionOrder) >= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
final T tmpSpan = array[index];
|
||||
array[index] = array[left];
|
||||
array[left] = tmpSpan;
|
||||
|
||||
final int tmpPriority = priority[index];
|
||||
priority[index] = priority[left];
|
||||
priority[left] = tmpPriority;
|
||||
|
||||
final int tmpOrder = insertionOrder[index];
|
||||
insertionOrder[index] = insertionOrder[left];
|
||||
insertionOrder[left] = tmpOrder;
|
||||
|
||||
index = left;
|
||||
left = 2 * index + 1;
|
||||
}
|
||||
array[index] = v;
|
||||
priority[index] = prio;
|
||||
insertionOrder[index] = insertOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user