diff options
| -rw-r--r-- | packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt | 4 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt | 4 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt | 91 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt | 50 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldSingleThreadBg.kt (renamed from packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldBackground.kt) | 5 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt | 8 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt | 3 | ||||
| -rw-r--r-- | packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt | 46 |
8 files changed, 115 insertions, 96 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt index 24ae42ae4db2..fe607e16661c 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt @@ -19,7 +19,7 @@ import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.UiBackground import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig import com.android.systemui.unfold.config.UnfoldTransitionConfig -import com.android.systemui.unfold.dagger.UnfoldBackground +import com.android.systemui.unfold.dagger.UnfoldSingleThreadBg import com.android.systemui.unfold.dagger.UnfoldMain import com.android.systemui.unfold.updates.FoldProvider import com.android.systemui.unfold.util.CurrentActivityTypeProvider @@ -56,6 +56,6 @@ abstract class SystemUnfoldSharedModule { abstract fun mainHandler(@Main handler: Handler): Handler @Binds - @UnfoldBackground + @UnfoldSingleThreadBg abstract fun backgroundExecutor(@UiBackground executor: Executor): Executor } diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt index 5a868a4df354..cfb959e51d4e 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt @@ -22,8 +22,8 @@ import android.hardware.SensorManager import android.os.Handler import android.view.IWindowManager import com.android.systemui.unfold.config.UnfoldTransitionConfig -import com.android.systemui.unfold.dagger.UnfoldBackground import com.android.systemui.unfold.dagger.UnfoldMain +import com.android.systemui.unfold.dagger.UnfoldSingleThreadBg import com.android.systemui.unfold.updates.FoldProvider import com.android.systemui.unfold.updates.RotationChangeProvider import com.android.systemui.unfold.updates.screen.ScreenStatusProvider @@ -58,7 +58,7 @@ interface UnfoldSharedComponent { @BindsInstance sensorManager: SensorManager, @BindsInstance @UnfoldMain handler: Handler, @BindsInstance @UnfoldMain executor: Executor, - @BindsInstance @UnfoldBackground backgroundExecutor: Executor, + @BindsInstance @UnfoldSingleThreadBg singleThreadBgExecutor: Executor, @BindsInstance @UnfoldTransitionATracePrefix tracingTagPrefix: String, @BindsInstance windowManager: IWindowManager, @BindsInstance contentResolver: ContentResolver = context.contentResolver diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt index 3fa546914d3a..31616fa54bf4 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt @@ -16,9 +16,7 @@ package com.android.systemui.unfold -import android.hardware.SensorManager import com.android.systemui.unfold.config.UnfoldTransitionConfig -import com.android.systemui.unfold.dagger.UnfoldBackground import com.android.systemui.unfold.progress.FixedTimingTransitionProgressProvider import com.android.systemui.unfold.progress.PhysicsBasedUnfoldTransitionProgressProvider import com.android.systemui.unfold.updates.DeviceFoldStateProvider @@ -34,55 +32,18 @@ import com.android.systemui.unfold.util.UnfoldKeyguardVisibilityProvider import dagger.Module import dagger.Provides import java.util.Optional -import java.util.concurrent.Executor +import javax.inject.Provider import javax.inject.Singleton -@Module +@Module(includes = [UnfoldSharedInternalModule::class]) class UnfoldSharedModule { @Provides @Singleton - fun unfoldTransitionProgressProvider( - config: UnfoldTransitionConfig, - scaleAwareProviderFactory: ScaleAwareTransitionProgressProvider.Factory, - tracingListener: ATraceLoggerTransitionProgressListener, - foldStateProvider: FoldStateProvider - ): Optional<UnfoldTransitionProgressProvider> = - if (!config.isEnabled) { - Optional.empty() - } else { - val baseProgressProvider = - if (config.isHingeAngleEnabled) { - PhysicsBasedUnfoldTransitionProgressProvider(foldStateProvider) - } else { - FixedTimingTransitionProgressProvider(foldStateProvider) - } - Optional.of( - scaleAwareProviderFactory.wrap(baseProgressProvider).apply { - // Always present callback that logs animation beginning and end. - addCallback(tracingListener) - } - ) - } - - @Provides - @Singleton fun provideFoldStateProvider( deviceFoldStateProvider: DeviceFoldStateProvider ): FoldStateProvider = deviceFoldStateProvider @Provides - fun hingeAngleProvider( - config: UnfoldTransitionConfig, - sensorManager: SensorManager, - @UnfoldBackground executor: Executor - ): HingeAngleProvider = - if (config.isHingeAngleEnabled) { - HingeSensorAngleProvider(sensorManager, executor) - } else { - EmptyHingeAngleProvider - } - - @Provides @Singleton fun unfoldKeyguardVisibilityProvider( impl: UnfoldKeyguardVisibilityManagerImpl @@ -94,3 +55,51 @@ class UnfoldSharedModule { impl: UnfoldKeyguardVisibilityManagerImpl ): UnfoldKeyguardVisibilityManager = impl } + +/** + * Needed as methods inside must be public, but their parameters can be internal (and, a public + * method can't have internal parameters). Making the module internal and included in a public one + * fixes the issue. + */ +@Module +internal class UnfoldSharedInternalModule { + @Provides + @Singleton + fun unfoldTransitionProgressProvider( + config: UnfoldTransitionConfig, + scaleAwareProviderFactory: ScaleAwareTransitionProgressProvider.Factory, + tracingListener: ATraceLoggerTransitionProgressListener, + physicsBasedUnfoldTransitionProgressProvider: + Provider<PhysicsBasedUnfoldTransitionProgressProvider>, + fixedTimingTransitionProgressProvider: Provider<FixedTimingTransitionProgressProvider>, + ): Optional<UnfoldTransitionProgressProvider> { + if (!config.isEnabled) { + return Optional.empty() + } + val baseProgressProvider = + if (config.isHingeAngleEnabled) { + physicsBasedUnfoldTransitionProgressProvider.get() + } else { + fixedTimingTransitionProgressProvider.get() + } + + return Optional.of( + scaleAwareProviderFactory.wrap(baseProgressProvider).apply { + // Always present callback that logs animation beginning and end. + addCallback(tracingListener) + } + ) + } + + @Provides + fun hingeAngleProvider( + config: UnfoldTransitionConfig, + hingeAngleSensorProvider: Provider<HingeSensorAngleProvider> + ): HingeAngleProvider { + return if (config.isHingeAngleEnabled) { + hingeAngleSensorProvider.get() + } else { + EmptyHingeAngleProvider + } + } +} diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt index a1ed17844e8e..aa93c6290145 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt @@ -37,29 +37,29 @@ import java.util.concurrent.Executor * This should **never** be called from sysui, as the object is already provided in that process. */ fun createUnfoldSharedComponent( - context: Context, - config: UnfoldTransitionConfig, - screenStatusProvider: ScreenStatusProvider, - foldProvider: FoldProvider, - activityTypeProvider: CurrentActivityTypeProvider, - sensorManager: SensorManager, - mainHandler: Handler, - mainExecutor: Executor, - backgroundExecutor: Executor, - tracingTagPrefix: String, - windowManager: IWindowManager, + context: Context, + config: UnfoldTransitionConfig, + screenStatusProvider: ScreenStatusProvider, + foldProvider: FoldProvider, + activityTypeProvider: CurrentActivityTypeProvider, + sensorManager: SensorManager, + mainHandler: Handler, + mainExecutor: Executor, + singleThreadBgExecutor: Executor, + tracingTagPrefix: String, + windowManager: IWindowManager, ): UnfoldSharedComponent = - DaggerUnfoldSharedComponent.factory() - .create( - context, - config, - screenStatusProvider, - foldProvider, - activityTypeProvider, - sensorManager, - mainHandler, - mainExecutor, - backgroundExecutor, - tracingTagPrefix, - windowManager, - ) + DaggerUnfoldSharedComponent.factory() + .create( + context, + config, + screenStatusProvider, + foldProvider, + activityTypeProvider, + sensorManager, + mainHandler, + mainExecutor, + singleThreadBgExecutor, + tracingTagPrefix, + windowManager, + ) diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldBackground.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldSingleThreadBg.kt index 60747954dac3..dcac531485e3 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldBackground.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldSingleThreadBg.kt @@ -18,8 +18,7 @@ import javax.inject.Qualifier /** * Alternative to [UiBackground] qualifier annotation in unfold module. + * * It is needed as we can't depend on SystemUI code in this module. */ -@Qualifier -@Retention(AnnotationRetention.RUNTIME) -annotation class UnfoldBackground +@Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class UnfoldSingleThreadBg diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt index fa59cb4d12be..4622464b204d 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt @@ -24,11 +24,13 @@ import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_CLOSED 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 +import javax.inject.Inject /** Emits animation progress with fixed timing after unfolding */ -internal class FixedTimingTransitionProgressProvider( - private val foldStateProvider: FoldStateProvider -) : UnfoldTransitionProgressProvider, FoldStateProvider.FoldUpdatesListener { +internal class FixedTimingTransitionProgressProvider +@Inject +constructor(private val foldStateProvider: FoldStateProvider) : + UnfoldTransitionProgressProvider, FoldStateProvider.FoldUpdatesListener { private val animatorListener = AnimatorListener() private val animator = diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt index 074b1e162fed..6ffbe5aa25c0 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt @@ -33,9 +33,10 @@ import com.android.systemui.unfold.updates.FoldStateProvider import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener import com.android.systemui.unfold.updates.name +import javax.inject.Inject /** Maps fold updates to unfold transition progress using DynamicAnimation. */ -class PhysicsBasedUnfoldTransitionProgressProvider( +class PhysicsBasedUnfoldTransitionProgressProvider @Inject constructor( private val foldStateProvider: FoldStateProvider ) : UnfoldTransitionProgressProvider, FoldUpdatesListener, DynamicAnimation.OnAnimationEndListener { diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt index 577137ca12f3..89fb12e313ec 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt @@ -20,35 +20,43 @@ import android.hardware.SensorEventListener import android.hardware.SensorManager import android.os.Trace import androidx.core.util.Consumer +import com.android.systemui.unfold.dagger.UnfoldSingleThreadBg import java.util.concurrent.Executor +import javax.inject.Inject -internal class HingeSensorAngleProvider( +internal class HingeSensorAngleProvider +@Inject +constructor( private val sensorManager: SensorManager, - private val executor: Executor -) : - HingeAngleProvider { + @UnfoldSingleThreadBg private val singleThreadBgExecutor: Executor +) : HingeAngleProvider { private val sensorListener = HingeAngleSensorListener() private val listeners: MutableList<Consumer<Float>> = arrayListOf() var started = false - override fun start() = executor.execute { - if (started) return@execute - Trace.beginSection("HingeSensorAngleProvider#start") - val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE) - sensorManager.registerListener( - sensorListener, - sensor, - SensorManager.SENSOR_DELAY_FASTEST - ) - Trace.endSection() - started = true + override fun start() { + singleThreadBgExecutor.execute { + if (started) return@execute + Trace.beginSection("HingeSensorAngleProvider#start") + val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE) + sensorManager.registerListener( + sensorListener, + sensor, + SensorManager.SENSOR_DELAY_FASTEST + ) + Trace.endSection() + + started = true + } } - override fun stop() = executor.execute { - if (!started) return@execute - sensorManager.unregisterListener(sensorListener) - started = false + override fun stop() { + singleThreadBgExecutor.execute { + if (!started) return@execute + sensorManager.unregisterListener(sensorListener) + started = false + } } override fun removeCallback(listener: Consumer<Float>) { |