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

Commit a1094d8d authored by Sherry Zhou's avatar Sherry Zhou
Browse files

Fix large clock overlap with elements on lockscreen when display/font becomes larger

Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint STAGING
Bug: 330185860
Test: manual

Change-Id: Ibd766d58b0d5c8a3192a9f04ae78098f3dadad7e
parent f5a43e55
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -27,7 +27,9 @@ 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.MathUtils.constrainedMap
import android.util.MathUtils.constrainedMap
import android.util.TypedValue
import android.view.View
import android.view.View
import android.view.View.MeasureSpec.EXACTLY
import android.widget.TextView
import android.widget.TextView
import com.android.app.animation.Interpolators
import com.android.app.animation.Interpolators
import com.android.internal.annotations.VisibleForTesting
import com.android.internal.annotations.VisibleForTesting
@@ -42,6 +44,7 @@ import java.io.PrintWriter
import java.util.Calendar
import java.util.Calendar
import java.util.Locale
import java.util.Locale
import java.util.TimeZone
import java.util.TimeZone
import kotlin.math.min


/**
/**
 * Displays the time with the hour positioned above the minutes. (ie: 09 above 30 is 9:30)
 * Displays the time with the hour positioned above the minutes. (ie: 09 above 30 is 9:30)
@@ -85,6 +88,8 @@ class AnimatableClockView @JvmOverloads constructor(
    private var textAnimator: TextAnimator? = null
    private var textAnimator: TextAnimator? = null
    private var onTextAnimatorInitialized: Runnable? = null
    private var onTextAnimatorInitialized: Runnable? = null


    // last text size which is not constrained by view height
    private var lastUnconstrainedTextSize: Float = Float.MAX_VALUE
    @VisibleForTesting var textAnimatorFactory: (Layout, () -> Unit) -> TextAnimator =
    @VisibleForTesting var textAnimatorFactory: (Layout, () -> Unit) -> TextAnimator =
        { layout, invalidateCb ->
        { layout, invalidateCb ->
            TextAnimator(layout, NUM_CLOCK_FONT_ANIMATION_STEPS, invalidateCb) }
            TextAnimator(layout, NUM_CLOCK_FONT_ANIMATION_STEPS, invalidateCb) }
@@ -188,6 +193,11 @@ class AnimatableClockView @JvmOverloads constructor(
    @SuppressLint("DrawAllocation")
    @SuppressLint("DrawAllocation")
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        logger.d("onMeasure")
        logger.d("onMeasure")
        if (migratedClocks && !isSingleLineInternal &&
                MeasureSpec.getMode(heightMeasureSpec) == EXACTLY) {
            setTextSize(TypedValue.COMPLEX_UNIT_PX,
                    min(lastUnconstrainedTextSize, MeasureSpec.getSize(heightMeasureSpec) / 2F))
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        val animator = textAnimator
        val animator = textAnimator
        if (animator == null) {
        if (animator == null) {
+3 −2
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import androidx.constraintlayout.widget.ConstraintSet
import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
import androidx.constraintlayout.widget.ConstraintSet.END
import androidx.constraintlayout.widget.ConstraintSet.END
import androidx.constraintlayout.widget.ConstraintSet.GONE
import androidx.constraintlayout.widget.ConstraintSet.GONE
import androidx.constraintlayout.widget.ConstraintSet.MATCH_CONSTRAINT
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP
import androidx.constraintlayout.widget.ConstraintSet.TOP
@@ -160,7 +161,7 @@ constructor(
        constraints.apply {
        constraints.apply {
            connect(R.id.lockscreen_clock_view_large, START, PARENT_ID, START)
            connect(R.id.lockscreen_clock_view_large, START, PARENT_ID, START)
            connect(R.id.lockscreen_clock_view_large, END, guideline, END)
            connect(R.id.lockscreen_clock_view_large, END, guideline, END)
            connect(R.id.lockscreen_clock_view_large, BOTTOM, R.id.lock_icon_view, TOP)
            connect(R.id.lockscreen_clock_view_large, BOTTOM, R.id.device_entry_icon_view, TOP)
            var largeClockTopMargin =
            var largeClockTopMargin =
                context.resources.getDimensionPixelSize(R.dimen.status_bar_height) +
                context.resources.getDimensionPixelSize(R.dimen.status_bar_height) +
                    context.resources.getDimensionPixelSize(
                    context.resources.getDimensionPixelSize(
@@ -172,7 +173,7 @@ constructor(


            connect(R.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin)
            connect(R.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin)
            constrainWidth(R.id.lockscreen_clock_view_large, WRAP_CONTENT)
            constrainWidth(R.id.lockscreen_clock_view_large, WRAP_CONTENT)
            constrainHeight(R.id.lockscreen_clock_view_large, WRAP_CONTENT)
            constrainHeight(R.id.lockscreen_clock_view_large, MATCH_CONSTRAINT)
            constrainWidth(R.id.lockscreen_clock_view, WRAP_CONTENT)
            constrainWidth(R.id.lockscreen_clock_view, WRAP_CONTENT)
            constrainHeight(
            constrainHeight(
                R.id.lockscreen_clock_view,
                R.id.lockscreen_clock_view,