Merge "Use hinge angle sensor based unfold animation by default" into sc-v2-dev am: 3dc9302627 am: afbfb843be
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15795547
Change-Id: I708133c2fa5d6234ea7295f495325f397c54a85a
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
index 49cd279..b6be6ed 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
@@ -22,7 +22,6 @@
import android.hardware.devicestate.DeviceStateManager
import android.os.Handler
import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
-import com.android.systemui.unfold.config.ANIMATION_MODE_HINGE_ANGLE
import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig
import com.android.systemui.unfold.config.UnfoldTransitionConfig
import com.android.systemui.unfold.progress.FixedTimingTransitionProgressProvider
@@ -30,7 +29,6 @@
import com.android.systemui.unfold.updates.DeviceFoldStateProvider
import com.android.systemui.unfold.updates.hinge.EmptyHingeAngleProvider
import com.android.systemui.unfold.updates.hinge.HingeSensorAngleProvider
-import com.android.systemui.unfold.updates.hinge.RotationSensorHingeAngleProvider
import java.lang.IllegalStateException
import java.util.concurrent.Executor
@@ -50,14 +48,8 @@
}
val hingeAngleProvider =
- if (config.mode == ANIMATION_MODE_HINGE_ANGLE) {
- // TODO: after removing temporary "config.mode" we should just
- // switch between fixed timing and hinge sensor based on this flag
- if (config.isHingeAngleEnabled) {
- HingeSensorAngleProvider(sensorManager)
- } else {
- RotationSensorHingeAngleProvider(sensorManager)
- }
+ if (config.isHingeAngleEnabled) {
+ HingeSensorAngleProvider(sensorManager)
} else {
EmptyHingeAngleProvider()
}
@@ -70,7 +62,7 @@
mainExecutor
)
- return if (config.mode == ANIMATION_MODE_HINGE_ANGLE) {
+ return if (config.isHingeAngleEnabled) {
PhysicsBasedUnfoldTransitionProgressProvider(
mainHandler,
foldStateProvider
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
index e7c6998a..3f027e3 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
@@ -23,17 +23,16 @@
) : UnfoldTransitionConfig {
override val isEnabled: Boolean
- get() = readIsEnabled() && mode != ANIMATION_MODE_DISABLED
+ get() = readIsEnabledResource() && isPropertyEnabled
override val isHingeAngleEnabled: Boolean
get() = readIsHingeAngleEnabled()
- @AnimationMode
- override val mode: Int
+ private val isPropertyEnabled: Boolean
get() = SystemProperties.getInt(UNFOLD_TRANSITION_MODE_PROPERTY_NAME,
- ANIMATION_MODE_FIXED_TIMING)
+ UNFOLD_TRANSITION_PROPERTY_ENABLED) == UNFOLD_TRANSITION_PROPERTY_ENABLED
- private fun readIsEnabled(): Boolean = context.resources
+ private fun readIsEnabledResource(): Boolean = context.resources
.getBoolean(com.android.internal.R.bool.config_unfoldTransitionEnabled)
private fun readIsHingeAngleEnabled(): Boolean = context.resources
@@ -44,4 +43,5 @@
* 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_mode"
+private const val UNFOLD_TRANSITION_MODE_PROPERTY_NAME = "persist.unfold.transition_enabled"
+private const val UNFOLD_TRANSITION_PROPERTY_ENABLED = 1
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
index a569757..5b187b3 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
@@ -15,25 +15,7 @@
*/
package com.android.systemui.unfold.config
-import android.annotation.IntDef
-
interface UnfoldTransitionConfig {
val isEnabled: Boolean
val isHingeAngleEnabled: Boolean
-
- @AnimationMode
- val mode: Int
}
-
-@IntDef(prefix = ["ANIMATION_MODE_"], value = [
- ANIMATION_MODE_DISABLED,
- ANIMATION_MODE_FIXED_TIMING,
- ANIMATION_MODE_HINGE_ANGLE
-])
-
-@Retention(AnnotationRetention.SOURCE)
-annotation class AnimationMode
-
-const val ANIMATION_MODE_DISABLED = 0
-const val ANIMATION_MODE_FIXED_TIMING = 1
-const val ANIMATION_MODE_HINGE_ANGLE = 2
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/RotationSensorHingeAngleProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/RotationSensorHingeAngleProvider.kt
deleted file mode 100644
index 8b6eecf..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/RotationSensorHingeAngleProvider.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.android.systemui.unfold.updates.hinge
-
-import android.hardware.Sensor
-import android.hardware.SensorEvent
-import android.hardware.SensorEventListener
-import android.hardware.SensorManager
-import androidx.core.util.Consumer
-import com.android.systemui.shared.recents.utilities.Utilities
-
-/**
- * Temporary hinge angle provider that uses rotation sensor instead.
- * It requires to have the device in a certain position to work correctly
- * (flat to the ground)
- */
-internal class RotationSensorHingeAngleProvider(
- private val sensorManager: SensorManager
-) : HingeAngleProvider {
-
- private val sensorListener = HingeAngleSensorListener()
- private val listeners: MutableList<Consumer<Float>> = arrayListOf()
-
- override fun start() {
- val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR)
- sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_FASTEST)
- }
-
- override fun stop() {
- sensorManager.unregisterListener(sensorListener)
- }
-
- override fun removeCallback(listener: Consumer<Float>) {
- listeners.remove(listener)
- }
-
- override fun addCallback(listener: Consumer<Float>) {
- listeners.add(listener)
- }
-
- private fun onHingeAngle(angle: Float) {
- listeners.forEach { it.accept(angle) }
- }
-
- private inner class HingeAngleSensorListener : SensorEventListener {
-
- override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
- }
-
- override fun onSensorChanged(event: SensorEvent) {
- // Jumbojack sends incorrect sensor reading 1.0f event in the beginning, let's ignore it
- if (event.values[3] == 1.0f) return
-
- val angleRadians = event.values.convertToAngle()
- val hingeAngleDegrees = Math.toDegrees(angleRadians).toFloat()
- val angle = Utilities.clamp(hingeAngleDegrees, FULLY_CLOSED_DEGREES, FULLY_OPEN_DEGREES)
- onHingeAngle(angle)
- }
-
- private val rotationMatrix = FloatArray(9)
- private val resultOrientation = FloatArray(9)
-
- private fun FloatArray.convertToAngle(): Double {
- SensorManager.getRotationMatrixFromVector(rotationMatrix, this)
- SensorManager.getOrientation(rotationMatrix, resultOrientation)
- return resultOrientation[2] + Math.PI
- }
- }
-}