summaryrefslogtreecommitdiff
path: root/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
diff options
context:
space:
mode:
authorLucas Dupin <dupin@google.com>2018-05-21 14:41:52 -0700
committerLucas Dupin <dupin@google.com>2018-05-21 15:09:34 -0700
commitb9afc96b8fb7549913e165e03ed79af8a5a40884 (patch)
treeb308cfb1d58d56f85828c7022755782609db29a3 /packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
parent402e2a2b6f47ca955db084255d642e9f3765e4eb (diff)
Measure text in 1 pass
Before we were setting the text again using setText, and this would trigger a second measure/layout pass, which is unnecessary. Now we're using the same mesure pass to calculate the view's best line break. Fixes: 79714443 Test: manual. set various meeting names animated or static Change-Id: Ia911fae8f820b703ca385a10211073bae37f3258
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java')
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java64
1 files changed, 42 insertions, 22 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index f066e3401752..f5abd0631892 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -47,6 +47,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.keyguard.KeyguardSliceProvider;
+import com.android.systemui.statusbar.AlphaOptimizedTextView;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.wakelock.KeepAwakeAnimationListener;
@@ -244,7 +245,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
* @param charSequence Original text.
* @return Optimal string.
*/
- private CharSequence findBestLineBreak(CharSequence charSequence) {
+ private static CharSequence findBestLineBreak(CharSequence charSequence) {
if (TextUtils.isEmpty(charSequence)) {
return charSequence;
}
@@ -370,27 +371,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
mIconSize = mContext.getResources().getDimensionPixelSize(R.dimen.widget_icon_size);
}
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
- // Find best ellipsis strategy for the title.
- // Done on onMeasure since TextView#getLayout needs a measure pass to calculate its bounds.
- Layout layout = mTitle.getLayout();
- if (layout != null) {
- final int lineCount = layout.getLineCount();
- if (lineCount > 0) {
- if (layout.getEllipsisCount(lineCount - 1) == 0) {
- CharSequence title = mTitle.getText();
- CharSequence bestLineBreak = findBestLineBreak(title);
- if (!TextUtils.equals(title, bestLineBreak)) {
- mTitle.setText(bestLineBreak);
- }
- }
- }
- }
- }
-
public void refresh() {
Slice slice = SliceManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri);
onChanged(slice);
@@ -553,6 +533,46 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
}
}
+ /**
+ * A text view that will split its contents in 2 lines when possible.
+ */
+ static class TitleView extends AlphaOptimizedTextView {
+
+ public TitleView(Context context) {
+ super(context);
+ }
+
+ public TitleView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public TitleView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public TitleView(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ Layout layout = getLayout();
+ int lineCount = layout.getLineCount();
+ boolean ellipsizing = layout.getEllipsisCount(lineCount - 1) != 0;
+ if (lineCount > 0 && !ellipsizing) {
+ CharSequence title = getText();
+ CharSequence bestLineBreak = findBestLineBreak(title);
+ if (!TextUtils.equals(title, bestLineBreak)) {
+ setText(bestLineBreak);
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+ }
+ }
+
private class SliceViewTransitionListener implements LayoutTransition.TransitionListener {
@Override
public void startTransition(LayoutTransition transition, ViewGroup container, View view,