Data usage limit label font size fixed
Bug 6326750 The font size around the text was removed when its content is replaced. This is WAI since the spans created from <font> html tags have a SPAN_EXCLUSIVE_EXCLUSIVE flag. These are removed when their length becomes 0. The bug came from a recent enforcement of this constraint. The fix is to change the flags of these AbsoluteSizeSpan spans. This CL also changes the code to avoid the creation of the int[] array. Change-Id: Ib58270bb9d1cf0c7609ba1e36d6c0cca841300db
This commit is contained in:
@@ -625,10 +625,8 @@ public class ChartDataUsageView extends ChartView {
|
|||||||
resultRounded = unitFactor * Math.round(result);
|
resultRounded = unitFactor * Math.round(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
final int[] sizeBounds = findOrCreateSpan(builder, sSpanSize, "^1");
|
setText(builder, sSpanSize, size, "^1");
|
||||||
builder.replace(sizeBounds[0], sizeBounds[1], size);
|
setText(builder, sSpanUnit, unit, "^2");
|
||||||
final int[] unitBounds = findOrCreateSpan(builder, sSpanUnit, "^2");
|
|
||||||
builder.replace(unitBounds[0], unitBounds[1], unit);
|
|
||||||
|
|
||||||
return (long) resultRounded;
|
return (long) resultRounded;
|
||||||
}
|
}
|
||||||
@@ -663,16 +661,26 @@ public class ChartDataUsageView extends ChartView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int[] findOrCreateSpan(
|
private static void setText(
|
||||||
SpannableStringBuilder builder, Object key, CharSequence bootstrap) {
|
SpannableStringBuilder builder, Object key, CharSequence text, String bootstrap) {
|
||||||
int start = builder.getSpanStart(key);
|
int start = builder.getSpanStart(key);
|
||||||
int end = builder.getSpanEnd(key);
|
int end = builder.getSpanEnd(key);
|
||||||
if (start == -1) {
|
if (start == -1) {
|
||||||
start = TextUtils.indexOf(builder, bootstrap);
|
start = TextUtils.indexOf(builder, bootstrap);
|
||||||
end = start + bootstrap.length();
|
end = start + bootstrap.length();
|
||||||
builder.setSpan(key, start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
builder.setSpan(key, start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
||||||
|
|
||||||
|
// Fix the AbsoluteSizeSpan created from html. Its flags must be set to
|
||||||
|
// SPAN_INCLUSIVE_INCLUSIVE so that it survives a removal of its entire content
|
||||||
|
Object[] spans = builder.getSpans(start, end, Object.class);
|
||||||
|
for (int i = 0; i < spans.length; i++) {
|
||||||
|
Object span = spans[i];
|
||||||
|
if (builder.getSpanStart(span) == start && builder.getSpanEnd(span) == end) {
|
||||||
|
builder.setSpan(span, start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return new int[] { start, end };
|
builder.replace(start, end, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long roundUpToPowerOfTwo(long i) {
|
private static long roundUpToPowerOfTwo(long i) {
|
||||||
|
Reference in New Issue
Block a user