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

Commit e0e9d4ef authored by Nicolò Mazzucato's avatar Nicolò Mazzucato Committed by Android (Google) Code Review
Browse files

Merge "Reformat unfold lib with ktfmt"

parents ce65b04d ff4060f5
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -16,12 +16,14 @@
package com.android.systemui.unfold

import android.annotation.FloatRange
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.statusbar.policy.CallbackController
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener

/**
 * Interface that allows to receive unfold transition progress updates.
 *
 * It can be used to update view properties based on the current animation progress.
 *
 * onTransitionProgress callback could be called on each frame.
 *
 * Use [createUnfoldTransitionProgressProvider] to create instances of this interface
+13 −11
Original line number Diff line number Diff line
@@ -18,9 +18,8 @@ package com.android.systemui.unfold.config
import android.content.Context
import android.os.SystemProperties

internal class ResourceUnfoldTransitionConfig(
    private val context: Context
) : UnfoldTransitionConfig {
internal class ResourceUnfoldTransitionConfig(private val context: Context) :
    UnfoldTransitionConfig {

    override val isEnabled: Boolean
        get() = readIsEnabledResource() && isPropertyEnabled
@@ -29,19 +28,22 @@ internal class ResourceUnfoldTransitionConfig(
        get() = readIsHingeAngleEnabled()

    private val isPropertyEnabled: Boolean
        get() = SystemProperties.getInt(UNFOLD_TRANSITION_MODE_PROPERTY_NAME,
            UNFOLD_TRANSITION_PROPERTY_ENABLED) == UNFOLD_TRANSITION_PROPERTY_ENABLED
        get() =
            SystemProperties.getInt(
                UNFOLD_TRANSITION_MODE_PROPERTY_NAME, UNFOLD_TRANSITION_PROPERTY_ENABLED) ==
                UNFOLD_TRANSITION_PROPERTY_ENABLED

    private fun readIsEnabledResource(): Boolean = context.resources
        .getBoolean(com.android.internal.R.bool.config_unfoldTransitionEnabled)
    private fun readIsEnabledResource(): Boolean =
        context.resources.getBoolean(com.android.internal.R.bool.config_unfoldTransitionEnabled)

    private fun readIsHingeAngleEnabled(): Boolean = context.resources
        .getBoolean(com.android.internal.R.bool.config_unfoldTransitionHingeAngle)
    private fun readIsHingeAngleEnabled(): Boolean =
        context.resources.getBoolean(com.android.internal.R.bool.config_unfoldTransitionHingeAngle)
}

/**
 * Temporary persistent property to control unfold transition mode
 * See [com.android.unfold.config.AnimationMode]
 * Temporary persistent property to control unfold transition mode.
 *
 * See [com.android.unfold.config.AnimationMode].
 */
private const val UNFOLD_TRANSITION_MODE_PROPERTY_NAME = "persist.unfold.transition_enabled"
private const val UNFOLD_TRANSITION_PROPERTY_ENABLED = 1
+11 −23
Original line number Diff line number Diff line
@@ -25,22 +25,18 @@ import com.android.systemui.unfold.updates.FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE
import com.android.systemui.unfold.updates.FoldStateProvider
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate

/**
 * Emits animation progress with fixed timing after unfolding
 */
/** Emits animation progress with fixed timing after unfolding */
internal class FixedTimingTransitionProgressProvider(
    private val foldStateProvider: FoldStateProvider
) : UnfoldTransitionProgressProvider, FoldStateProvider.FoldUpdatesListener {

    private val animatorListener = AnimatorListener()
    private val animator =
        ObjectAnimator.ofFloat(this, AnimationProgressProperty, 0f, 1f)
            .apply {
        ObjectAnimator.ofFloat(this, AnimationProgressProperty, 0f, 1f).apply {
            duration = TRANSITION_TIME_MILLIS
            addListener(animatorListener)
        }


    private var transitionProgress: Float = 0.0f
        set(value) {
            listeners.forEach { it.onTransitionProgress(value) }
@@ -62,10 +58,8 @@ internal class FixedTimingTransitionProgressProvider(

    override fun onFoldUpdate(@FoldUpdate update: Int) {
        when (update) {
            FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE ->
                animator.start()
            FOLD_UPDATE_FINISH_CLOSED ->
                animator.cancel()
            FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE -> animator.start()
            FOLD_UPDATE_FINISH_CLOSED -> animator.cancel()
        }
    }

@@ -77,16 +71,12 @@ internal class FixedTimingTransitionProgressProvider(
        listeners.remove(listener)
    }

    override fun onHingeAngleUpdate(angle: Float) {
    }
    override fun onHingeAngleUpdate(angle: Float) {}

    private object AnimationProgressProperty :
        FloatProperty<FixedTimingTransitionProgressProvider>("animation_progress") {

        override fun setValue(
            provider: FixedTimingTransitionProgressProvider,
            value: Float
        ) {
        override fun setValue(provider: FixedTimingTransitionProgressProvider, value: Float) {
            provider.transitionProgress = value
        }

@@ -104,11 +94,9 @@ internal class FixedTimingTransitionProgressProvider(
            listeners.forEach { it.onTransitionFinished() }
        }

        override fun onAnimationRepeat(animator: Animator) {
        }
        override fun onAnimationRepeat(animator: Animator) {}

        override fun onAnimationCancel(animator: Animator) {
        }
        override fun onAnimationCancel(animator: Animator) {}
    }

    private companion object {
+13 −19
Original line number Diff line number Diff line
@@ -23,10 +23,10 @@ import androidx.dynamicanimation.animation.SpringAnimation
import androidx.dynamicanimation.animation.SpringForce
import com.android.systemui.unfold.UnfoldTransitionProgressProvider
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN
import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_CLOSED
import com.android.systemui.unfold.updates.FOLD_UPDATE_START_CLOSING
import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_FULL_OPEN
import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN
import com.android.systemui.unfold.updates.FOLD_UPDATE_START_CLOSING
import com.android.systemui.unfold.updates.FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE
import com.android.systemui.unfold.updates.FoldStateProvider
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
@@ -35,13 +35,10 @@ import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
/** Maps fold updates to unfold transition progress using DynamicAnimation. */
internal class PhysicsBasedUnfoldTransitionProgressProvider(
    private val foldStateProvider: FoldStateProvider
) :
    UnfoldTransitionProgressProvider,
    FoldUpdatesListener,
    DynamicAnimation.OnAnimationEndListener {
) : UnfoldTransitionProgressProvider, FoldUpdatesListener, DynamicAnimation.OnAnimationEndListener {

    private val springAnimation = SpringAnimation(this, AnimationProgressProperty)
        .apply {
    private val springAnimation =
        SpringAnimation(this, AnimationProgressProperty).apply {
            addEndListener(this@PhysicsBasedUnfoldTransitionProgressProvider)
        }

@@ -121,9 +118,7 @@ internal class PhysicsBasedUnfoldTransitionProgressProvider(
            isTransitionRunning = false
            springAnimation.cancel()

            listeners.forEach {
                it.onTransitionFinished()
            }
            listeners.forEach { it.onTransitionFinished() }

            if (DEBUG) {
                Log.d(TAG, "onTransitionFinished")
@@ -143,9 +138,7 @@ internal class PhysicsBasedUnfoldTransitionProgressProvider(
    }

    private fun onStartTransition() {
        listeners.forEach {
            it.onTransitionStarted()
        }
        listeners.forEach { it.onTransitionStarted() }
        isTransitionRunning = true

        if (DEBUG) {
@@ -157,7 +150,8 @@ internal class PhysicsBasedUnfoldTransitionProgressProvider(
        if (!isTransitionRunning) onStartTransition()

        springAnimation.apply {
            spring = SpringForce().apply {
            spring =
                SpringForce().apply {
                    finalPosition = startValue
                    dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY
                    stiffness = SPRING_STIFFNESS
+31 −32
Original line number Diff line number Diff line
@@ -45,11 +45,9 @@ constructor(

    private val outputListeners: MutableList<FoldUpdatesListener> = mutableListOf()

    @FoldUpdate
    private var lastFoldUpdate: Int? = null
    @FoldUpdate private var lastFoldUpdate: Int? = null

    @FloatRange(from = 0.0, to = 180.0)
    private var lastHingeAngle: Float = 0f
    @FloatRange(from = 0.0, to = 180.0) private var lastHingeAngle: Float = 0f

    private val hingeAngleListener = HingeAngleListener()
    private val screenListener = ScreenStatusListener()
@@ -60,10 +58,7 @@ constructor(
    private var isUnfoldHandled = true

    override fun start() {
        deviceStateManager.registerCallback(
            mainExecutor,
            foldStateListener
        )
        deviceStateManager.registerCallback(mainExecutor, foldStateListener)
        screenStatusProvider.addCallback(screenListener)
        hingeAngleProvider.addCallback(hingeAngleListener)
    }
@@ -87,11 +82,14 @@ constructor(
        get() = !isFolded && lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN

    private val isTransitionInProgess: Boolean
        get() = lastFoldUpdate == FOLD_UPDATE_START_OPENING ||
        get() =
            lastFoldUpdate == FOLD_UPDATE_START_OPENING ||
                lastFoldUpdate == FOLD_UPDATE_START_CLOSING

    private fun onHingeAngle(angle: Float) {
        if (DEBUG) { Log.d(TAG, "Hinge angle: $angle, lastHingeAngle: $lastHingeAngle") }
        if (DEBUG) {
            Log.d(TAG, "Hinge angle: $angle, lastHingeAngle: $lastHingeAngle")
        }

        val isClosing = angle < lastHingeAngle
        val isFullyOpened = FULLY_OPEN_DEGREES - angle < FULLY_OPEN_THRESHOLD_DEGREES
@@ -116,7 +114,9 @@ constructor(
    }

    private inner class FoldStateListener(context: Context) :
        DeviceStateManager.FoldStateListener(context, { folded: Boolean ->
        DeviceStateManager.FoldStateListener(
            context,
            { folded: Boolean ->
                isFolded = folded
                lastHingeAngle = FULLY_CLOSED_DEGREES

@@ -133,7 +133,9 @@ constructor(
            })

    private fun notifyFoldUpdate(@FoldUpdate update: Int) {
        if (DEBUG) { Log.d(TAG, stateToString(update)) }
        if (DEBUG) {
            Log.d(TAG, stateToString(update))
        }
        outputListeners.forEach { it.onFoldUpdate(update) }
        lastFoldUpdate = update
    }
@@ -149,8 +151,7 @@ constructor(
        handler.removeCallbacks(timeoutRunnable)
    }

    private inner class ScreenStatusListener :
        ScreenStatusProvider.ScreenListener {
    private inner class ScreenStatusListener : ScreenStatusProvider.ScreenListener {

        override fun onScreenTurnedOn() {
            // Trigger this event only if we are unfolded and this is the first screen
@@ -198,9 +199,7 @@ private const val DEBUG = false
 * Time after which [FOLD_UPDATE_FINISH_HALF_OPEN] is emitted following a
 * [FOLD_UPDATE_START_CLOSING] or [FOLD_UPDATE_START_OPENING] event, if an end state is not reached.
 */
@VisibleForTesting
const val HALF_OPENED_TIMEOUT_MILLIS = 1000L
@VisibleForTesting const val HALF_OPENED_TIMEOUT_MILLIS = 1000L

/** Threshold after which we consider the device fully unfolded. */
@VisibleForTesting
const val FULLY_OPEN_THRESHOLD_DEGREES = 15f
 No newline at end of file
@VisibleForTesting const val FULLY_OPEN_THRESHOLD_DEGREES = 15f
Loading