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

Commit 284f1ec3 authored by Hawkwood Glazier's avatar Hawkwood Glazier Committed by Android Build Coastguard Worker
Browse files

Clock fidget adjustments

This enforces clock bounds based on the tap location of the fidget
animation. We suppress animations that were triggered from outside
the clock's area. Additionally this changes the animation to start
on ACTION_DOWN instead of ACTION_UP so that it feels more reactive.

Bug: 445514244
Test: Checked fidget animation
Flag: com.android.systemui.clock_fidget_animation
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:2f5b837bdbc1beeeb7332b70d8e8cdfc269f08ba
Merged-In: I78d66b48068aaeefd55d149d1073cb7c2a921cd5
Change-Id: I78d66b48068aaeefd55d149d1073cb7c2a921cd5
parent 55a37bb4
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -133,8 +133,11 @@ class ClockLogger(private val view: View?, buffer: MessageBuffer, tag: String) :
        d("animateCharge()")
    }

    fun animateFidget(x: Float, y: Float) {
        d({ "animateFidget(${VPointF.fromLong(long1)})" }) { long1 = VPointF(x, y).toLong() }
    fun animateFidget(pt: VPointF, isSuppressed: Boolean) {
        d({ "animateFidget(${VPointF.fromLong(long1)}, isSuppressed=$bool1})" }) {
            long1 = pt.toLong()
            bool1 = isSuppressed
        }
    }

    companion object {
+23 −8
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.util.Log
import android.util.MathUtils.lerp
import android.util.TypedValue
import android.view.MotionEvent
import android.view.View
import android.view.View.MeasureSpec.EXACTLY
import android.view.animation.Interpolator
import android.view.animation.PathInterpolator
@@ -64,7 +65,7 @@ import kotlin.math.min
import kotlin.math.roundToInt

interface DigitalClockTextViewParent {
    fun animateFidget(x: Float, y: Float)
    fun animateFidget(pt: VPointF, enforceBounds: Boolean): Boolean

    fun updateMeasuredSize()

@@ -165,10 +166,10 @@ abstract class DigitalClockTextView(
    override fun onTouchEvent(evt: MotionEvent): Boolean {
        if (super.onTouchEvent(evt)) return true

        if (clockFidgetAnimation() && evt.action == MotionEvent.ACTION_UP) {
            (parent as? DigitalClockTextViewParent)?.animateFidget(evt.x, evt.y)
                ?: animateFidget(evt.x, evt.y)
            return true
        if (clockFidgetAnimation() && evt.action == MotionEvent.ACTION_DOWN) {
            val pt = VPointF(evt.x, evt.y)
            return (parent as? DigitalClockTextViewParent)?.animateFidget(pt, enforceBounds = false)
                ?: animateFidget(pt, enforceBounds = false)
        }

        return false
@@ -379,13 +380,26 @@ abstract class DigitalClockTextView(
        )
    }

    fun animateFidget(x: Float, y: Float) {
    fun animateFidget(pt: VPointF, enforceBounds: Boolean): Boolean {
        if (!this::textAnimator.isInitialized || textAnimator.isRunning) {
            // Skip fidget animation if other animation is already playing.
            return
            return false
        }

        if (enforceBounds) {
            if (visibility != View.VISIBLE) {
                logger.animateFidget(pt, isSuppressed = true)
                return false
            }

        logger.animateFidget(x, y)
            val bounds = getInterpolatedTextBounds()
            if (!bounds.contains(pt)) {
                logger.animateFidget(pt, isSuppressed = true)
                return false
            }
        }

        logger.animateFidget(pt, isSuppressed = false)
        clockCtx.vibrator?.vibrate(FIDGET_HAPTICS)

        textAnimator.setTextStyle(
@@ -406,6 +420,7 @@ abstract class DigitalClockTextView(
                },
            ),
        )
        return true
    }

    fun refreshText() {
+2 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.customization.clocks.DigitalTimespec
import com.android.systemui.customization.clocks.DigitalTimespecHandler
import com.android.systemui.customization.clocks.FontTextStyle
import com.android.systemui.customization.clocks.view.DigitalAlignment
import com.android.systemui.plugins.keyguard.VPointF
import com.android.systemui.plugins.keyguard.data.model.AlarmData
import com.android.systemui.plugins.keyguard.data.model.WeatherData
import com.android.systemui.plugins.keyguard.data.model.ZenData
@@ -173,7 +174,7 @@ open class FlexClockTextViewController(
            override fun onPositionAnimated(args: ClockPositionAnimationArgs) {}

            override fun onFidgetTap(x: Float, y: Float) {
                view.animateFidget(x, y)
                view.animateFidget(VPointF(x, y), enforceBounds = true)
            }
        }

+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.customization.clocks.FontTextStyle
import com.android.systemui.customization.clocks.view.DigitalAlignment
import com.android.systemui.customization.clocks.view.HorizontalAlignment
import com.android.systemui.customization.clocks.view.VerticalAlignment
import com.android.systemui.plugins.keyguard.VPointF
import com.android.systemui.plugins.keyguard.data.model.AlarmData
import com.android.systemui.plugins.keyguard.data.model.WeatherData
import com.android.systemui.plugins.keyguard.data.model.ZenData
@@ -161,7 +162,7 @@ class FlexClockViewGroupController(private val clockCtx: ClockContext) : FlexClo
            override fun onPickerCarouselSwiping(swipingFraction: Float) {}

            override fun onFidgetTap(x: Float, y: Float) {
                view.animateFidget(x, y)
                view.animateFidget(VPointF(x, y), enforceBounds = true)
            }

            private var hasFontAxes = false
+16 −2
Original line number Diff line number Diff line
@@ -383,8 +383,22 @@ class FlexClockViewGroup(clockCtx: ClockContext) :
        }
    }

    override fun animateFidget(x: Float, y: Float) {
        childViews.forEach { it.animateFidget(x, y) }
    override fun animateFidget(pt: VPointF, enforceBounds: Boolean): Boolean {
        if (enforceBounds) {
            if (visibility != View.VISIBLE) {
                logger.animateFidget(pt, isSuppressed = true)
                return false
            }

            val bounds = VRectF(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat())
            if (!bounds.contains(pt)) {
                logger.animateFidget(pt, isSuppressed = true)
                return false
            }
        }

        childViews.forEach { it.animateFidget(pt, enforceBounds = false) }
        return true
    }

    private fun updateLocale(locale: Locale) {