Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fceae320 authored by Lucas Dupin's avatar Lucas Dupin Committed by android-build-merger
Browse files

Merge "Measure text in 1 pass" into pi-dev am: 322d934e

am: fe5aa5bb

Change-Id: I94d426f443d2b5adde0b96b9c55a71025f5f4e39
parents bca492d6 fe5aa5bb
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@
    android:clipToPadding="false"
    android:clipToPadding="false"
    android:orientation="vertical"
    android:orientation="vertical"
    android:layout_centerHorizontal="true">
    android:layout_centerHorizontal="true">
    <com.android.systemui.statusbar.AlphaOptimizedTextView
    <view class="com.android.keyguard.KeyguardSliceView$TitleView"
              android:id="@+id/title"
              android:id="@+id/title"
              android:layout_width="match_parent"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_height="wrap_content"
+42 −22
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.statusbar.AlphaOptimizedTextView;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.wakelock.KeepAwakeAnimationListener;
import com.android.systemui.util.wakelock.KeepAwakeAnimationListener;
@@ -245,7 +246,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
     * @param charSequence Original text.
     * @param charSequence Original text.
     * @return Optimal string.
     * @return Optimal string.
     */
     */
    private CharSequence findBestLineBreak(CharSequence charSequence) {
    private static CharSequence findBestLineBreak(CharSequence charSequence) {
        if (TextUtils.isEmpty(charSequence)) {
        if (TextUtils.isEmpty(charSequence)) {
            return charSequence;
            return charSequence;
        }
        }
@@ -371,27 +372,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
        mIconSize = mContext.getResources().getDimensionPixelSize(R.dimen.widget_icon_size);
        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() {
    public void refresh() {
        Slice slice = SliceManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri);
        Slice slice = SliceManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri);
        onChanged(slice);
        onChanged(slice);
@@ -554,6 +534,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 {
    private class SliceViewTransitionListener implements LayoutTransition.TransitionListener {
        @Override
        @Override
        public void startTransition(LayoutTransition transition, ViewGroup container, View view,
        public void startTransition(LayoutTransition transition, ViewGroup container, View view,