Merge "Don't trigger TextView relayouts if content doesn't change" into tm-dev
This commit is contained in:
@@ -22,6 +22,7 @@ import android.annotation.IntRange
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
|
import android.text.TextUtils
|
||||||
import android.text.format.DateFormat
|
import android.text.format.DateFormat
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
@@ -125,13 +126,30 @@ class AnimatableClockView @JvmOverloads constructor(
|
|||||||
|
|
||||||
fun refreshTime() {
|
fun refreshTime() {
|
||||||
time.timeInMillis = System.currentTimeMillis()
|
time.timeInMillis = System.currentTimeMillis()
|
||||||
text = DateFormat.format(format, time)
|
|
||||||
contentDescription = DateFormat.format(descFormat, time)
|
contentDescription = DateFormat.format(descFormat, time)
|
||||||
Log.d(tag, "refreshTime this=$this" +
|
val formattedText = DateFormat.format(format, time)
|
||||||
" currTimeContextDesc=$contentDescription" +
|
// Setting text actually triggers a layout pass (because the text view is set to
|
||||||
" measuredHeight=$measuredHeight" +
|
// wrap_content width and TextView always relayouts for this). Avoid needless
|
||||||
" lastMeasureCall=$lastMeasureCall" +
|
// relayout if the text didn't actually change.
|
||||||
" isSingleLineInternal=$isSingleLineInternal")
|
if (!TextUtils.equals(text, formattedText)) {
|
||||||
|
text = formattedText
|
||||||
|
Log.d(
|
||||||
|
tag, "refreshTime this=$this" +
|
||||||
|
" currTimeContextDesc=$contentDescription" +
|
||||||
|
" measuredHeight=$measuredHeight" +
|
||||||
|
" lastMeasureCall=$lastMeasureCall" +
|
||||||
|
" isSingleLineInternal=$isSingleLineInternal"
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Log.d(
|
||||||
|
tag, "refreshTime (skipped due to unchanged text)" +
|
||||||
|
" this=$this" +
|
||||||
|
" currTimeContextDesc=$contentDescription" +
|
||||||
|
" measuredHeight=$measuredHeight" +
|
||||||
|
" lastMeasureCall=$lastMeasureCall" +
|
||||||
|
" isSingleLineInternal=$isSingleLineInternal"
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onTimeZoneChanged(timeZone: TimeZone?) {
|
fun onTimeZoneChanged(timeZone: TimeZone?) {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import android.graphics.Rect;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
@@ -267,8 +268,15 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
|
|||||||
if (mBatteryPercentView == null) {
|
if (mBatteryPercentView == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mBatteryPercentView.setText(
|
|
||||||
NumberFormat.getPercentInstance().format(mLevel / 100f));
|
String percentText = NumberFormat.getPercentInstance().format(mLevel / 100f);
|
||||||
|
// Setting text actually triggers a layout pass (because the text view is set to
|
||||||
|
// wrap_content width and TextView always relayouts for this). Avoid needless
|
||||||
|
// relayout if the text didn't actually change.
|
||||||
|
if (!TextUtils.equals(mBatteryPercentView.getText(), percentText)) {
|
||||||
|
mBatteryPercentView.setText(percentText);
|
||||||
|
}
|
||||||
|
|
||||||
setContentDescription(
|
setContentDescription(
|
||||||
getContext().getString(mCharging ? R.string.accessibility_battery_level_charging
|
getContext().getString(mCharging ? R.string.accessibility_battery_level_charging
|
||||||
: R.string.accessibility_battery_level, mLevel));
|
: R.string.accessibility_battery_level, mLevel));
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.os.SystemClock;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.text.Spannable;
|
import android.text.Spannable;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.text.style.CharacterStyle;
|
import android.text.style.CharacterStyle;
|
||||||
import android.text.style.RelativeSizeSpan;
|
import android.text.style.RelativeSizeSpan;
|
||||||
@@ -291,7 +292,13 @@ public class Clock extends TextView implements
|
|||||||
final void updateClock() {
|
final void updateClock() {
|
||||||
if (mDemoMode) return;
|
if (mDemoMode) return;
|
||||||
mCalendar.setTimeInMillis(System.currentTimeMillis());
|
mCalendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
setText(getSmallTime());
|
CharSequence smallTime = getSmallTime();
|
||||||
|
// Setting text actually triggers a layout pass (because the text view is set to
|
||||||
|
// wrap_content width and TextView always relayouts for this). Avoid needless
|
||||||
|
// relayout if the text didn't actually change.
|
||||||
|
if (!TextUtils.equals(smallTime, getText())) {
|
||||||
|
setText(smallTime);
|
||||||
|
}
|
||||||
setContentDescription(mContentDescriptionFormat.format(mCalendar.getTime()));
|
setContentDescription(mContentDescriptionFormat.format(mCalendar.getTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user