Merge "Rename unfold background executor to add single thread assumption" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
60a0560be6
@@ -19,7 +19,7 @@ import com.android.systemui.dagger.qualifiers.Main
|
|||||||
import com.android.systemui.dagger.qualifiers.UiBackground
|
import com.android.systemui.dagger.qualifiers.UiBackground
|
||||||
import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig
|
import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig
|
||||||
import com.android.systemui.unfold.config.UnfoldTransitionConfig
|
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.dagger.UnfoldMain
|
||||||
import com.android.systemui.unfold.updates.FoldProvider
|
import com.android.systemui.unfold.updates.FoldProvider
|
||||||
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
|
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
|
||||||
@@ -56,6 +56,6 @@ abstract class SystemUnfoldSharedModule {
|
|||||||
abstract fun mainHandler(@Main handler: Handler): Handler
|
abstract fun mainHandler(@Main handler: Handler): Handler
|
||||||
|
|
||||||
@Binds
|
@Binds
|
||||||
@UnfoldBackground
|
@UnfoldSingleThreadBg
|
||||||
abstract fun backgroundExecutor(@UiBackground executor: Executor): Executor
|
abstract fun backgroundExecutor(@UiBackground executor: Executor): Executor
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ import android.hardware.SensorManager
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.view.IWindowManager
|
import android.view.IWindowManager
|
||||||
import com.android.systemui.unfold.config.UnfoldTransitionConfig
|
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.UnfoldMain
|
||||||
|
import com.android.systemui.unfold.dagger.UnfoldSingleThreadBg
|
||||||
import com.android.systemui.unfold.updates.FoldProvider
|
import com.android.systemui.unfold.updates.FoldProvider
|
||||||
import com.android.systemui.unfold.updates.RotationChangeProvider
|
import com.android.systemui.unfold.updates.RotationChangeProvider
|
||||||
import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
|
import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
|
||||||
@@ -58,7 +58,7 @@ interface UnfoldSharedComponent {
|
|||||||
@BindsInstance sensorManager: SensorManager,
|
@BindsInstance sensorManager: SensorManager,
|
||||||
@BindsInstance @UnfoldMain handler: Handler,
|
@BindsInstance @UnfoldMain handler: Handler,
|
||||||
@BindsInstance @UnfoldMain executor: Executor,
|
@BindsInstance @UnfoldMain executor: Executor,
|
||||||
@BindsInstance @UnfoldBackground backgroundExecutor: Executor,
|
@BindsInstance @UnfoldSingleThreadBg singleThreadBgExecutor: Executor,
|
||||||
@BindsInstance @UnfoldTransitionATracePrefix tracingTagPrefix: String,
|
@BindsInstance @UnfoldTransitionATracePrefix tracingTagPrefix: String,
|
||||||
@BindsInstance windowManager: IWindowManager,
|
@BindsInstance windowManager: IWindowManager,
|
||||||
@BindsInstance contentResolver: ContentResolver = context.contentResolver
|
@BindsInstance contentResolver: ContentResolver = context.contentResolver
|
||||||
|
|||||||
@@ -16,9 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.unfold
|
package com.android.systemui.unfold
|
||||||
|
|
||||||
import android.hardware.SensorManager
|
|
||||||
import com.android.systemui.unfold.config.UnfoldTransitionConfig
|
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.FixedTimingTransitionProgressProvider
|
||||||
import com.android.systemui.unfold.progress.PhysicsBasedUnfoldTransitionProgressProvider
|
import com.android.systemui.unfold.progress.PhysicsBasedUnfoldTransitionProgressProvider
|
||||||
import com.android.systemui.unfold.updates.DeviceFoldStateProvider
|
import com.android.systemui.unfold.updates.DeviceFoldStateProvider
|
||||||
@@ -34,54 +32,17 @@ import com.android.systemui.unfold.util.UnfoldKeyguardVisibilityProvider
|
|||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import java.util.Optional
|
import java.util.Optional
|
||||||
import java.util.concurrent.Executor
|
import javax.inject.Provider
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Module
|
@Module(includes = [UnfoldSharedInternalModule::class])
|
||||||
class UnfoldSharedModule {
|
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
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideFoldStateProvider(
|
fun provideFoldStateProvider(
|
||||||
deviceFoldStateProvider: DeviceFoldStateProvider
|
deviceFoldStateProvider: DeviceFoldStateProvider
|
||||||
): FoldStateProvider = deviceFoldStateProvider
|
): FoldStateProvider = deviceFoldStateProvider
|
||||||
|
|
||||||
@Provides
|
|
||||||
fun hingeAngleProvider(
|
|
||||||
config: UnfoldTransitionConfig,
|
|
||||||
sensorManager: SensorManager,
|
|
||||||
@UnfoldBackground executor: Executor
|
|
||||||
): HingeAngleProvider =
|
|
||||||
if (config.isHingeAngleEnabled) {
|
|
||||||
HingeSensorAngleProvider(sensorManager, executor)
|
|
||||||
} else {
|
|
||||||
EmptyHingeAngleProvider
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun unfoldKeyguardVisibilityProvider(
|
fun unfoldKeyguardVisibilityProvider(
|
||||||
@@ -94,3 +55,51 @@ class UnfoldSharedModule {
|
|||||||
impl: UnfoldKeyguardVisibilityManagerImpl
|
impl: UnfoldKeyguardVisibilityManagerImpl
|
||||||
): UnfoldKeyguardVisibilityManager = impl
|
): 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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.
|
* This should **never** be called from sysui, as the object is already provided in that process.
|
||||||
*/
|
*/
|
||||||
fun createUnfoldSharedComponent(
|
fun createUnfoldSharedComponent(
|
||||||
context: Context,
|
context: Context,
|
||||||
config: UnfoldTransitionConfig,
|
config: UnfoldTransitionConfig,
|
||||||
screenStatusProvider: ScreenStatusProvider,
|
screenStatusProvider: ScreenStatusProvider,
|
||||||
foldProvider: FoldProvider,
|
foldProvider: FoldProvider,
|
||||||
activityTypeProvider: CurrentActivityTypeProvider,
|
activityTypeProvider: CurrentActivityTypeProvider,
|
||||||
sensorManager: SensorManager,
|
sensorManager: SensorManager,
|
||||||
mainHandler: Handler,
|
mainHandler: Handler,
|
||||||
mainExecutor: Executor,
|
mainExecutor: Executor,
|
||||||
backgroundExecutor: Executor,
|
singleThreadBgExecutor: Executor,
|
||||||
tracingTagPrefix: String,
|
tracingTagPrefix: String,
|
||||||
windowManager: IWindowManager,
|
windowManager: IWindowManager,
|
||||||
): UnfoldSharedComponent =
|
): UnfoldSharedComponent =
|
||||||
DaggerUnfoldSharedComponent.factory()
|
DaggerUnfoldSharedComponent.factory()
|
||||||
.create(
|
.create(
|
||||||
context,
|
context,
|
||||||
config,
|
config,
|
||||||
screenStatusProvider,
|
screenStatusProvider,
|
||||||
foldProvider,
|
foldProvider,
|
||||||
activityTypeProvider,
|
activityTypeProvider,
|
||||||
sensorManager,
|
sensorManager,
|
||||||
mainHandler,
|
mainHandler,
|
||||||
mainExecutor,
|
mainExecutor,
|
||||||
backgroundExecutor,
|
singleThreadBgExecutor,
|
||||||
tracingTagPrefix,
|
tracingTagPrefix,
|
||||||
windowManager,
|
windowManager,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ import javax.inject.Qualifier
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Alternative to [UiBackground] qualifier annotation in unfold module.
|
* Alternative to [UiBackground] qualifier annotation in unfold module.
|
||||||
|
*
|
||||||
* It is needed as we can't depend on SystemUI code in this module.
|
* It is needed as we can't depend on SystemUI code in this module.
|
||||||
*/
|
*/
|
||||||
@Qualifier
|
@Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class UnfoldSingleThreadBg
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
annotation class UnfoldBackground
|
|
||||||
@@ -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.FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE
|
||||||
import com.android.systemui.unfold.updates.FoldStateProvider
|
import com.android.systemui.unfold.updates.FoldStateProvider
|
||||||
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
|
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
/** Emits animation progress with fixed timing after unfolding */
|
/** Emits animation progress with fixed timing after unfolding */
|
||||||
internal class FixedTimingTransitionProgressProvider(
|
internal class FixedTimingTransitionProgressProvider
|
||||||
private val foldStateProvider: FoldStateProvider
|
@Inject
|
||||||
) : UnfoldTransitionProgressProvider, FoldStateProvider.FoldUpdatesListener {
|
constructor(private val foldStateProvider: FoldStateProvider) :
|
||||||
|
UnfoldTransitionProgressProvider, FoldStateProvider.FoldUpdatesListener {
|
||||||
|
|
||||||
private val animatorListener = AnimatorListener()
|
private val animatorListener = AnimatorListener()
|
||||||
private val animator =
|
private val animator =
|
||||||
|
|||||||
@@ -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.FoldUpdate
|
||||||
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
|
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
|
||||||
import com.android.systemui.unfold.updates.name
|
import com.android.systemui.unfold.updates.name
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
/** Maps fold updates to unfold transition progress using DynamicAnimation. */
|
/** Maps fold updates to unfold transition progress using DynamicAnimation. */
|
||||||
class PhysicsBasedUnfoldTransitionProgressProvider(
|
class PhysicsBasedUnfoldTransitionProgressProvider @Inject constructor(
|
||||||
private val foldStateProvider: FoldStateProvider
|
private val foldStateProvider: FoldStateProvider
|
||||||
) : UnfoldTransitionProgressProvider, FoldUpdatesListener, DynamicAnimation.OnAnimationEndListener {
|
) : UnfoldTransitionProgressProvider, FoldUpdatesListener, DynamicAnimation.OnAnimationEndListener {
|
||||||
|
|
||||||
|
|||||||
@@ -20,35 +20,43 @@ import android.hardware.SensorEventListener
|
|||||||
import android.hardware.SensorManager
|
import android.hardware.SensorManager
|
||||||
import android.os.Trace
|
import android.os.Trace
|
||||||
import androidx.core.util.Consumer
|
import androidx.core.util.Consumer
|
||||||
|
import com.android.systemui.unfold.dagger.UnfoldSingleThreadBg
|
||||||
import java.util.concurrent.Executor
|
import java.util.concurrent.Executor
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class HingeSensorAngleProvider(
|
internal class HingeSensorAngleProvider
|
||||||
|
@Inject
|
||||||
|
constructor(
|
||||||
private val sensorManager: SensorManager,
|
private val sensorManager: SensorManager,
|
||||||
private val executor: Executor
|
@UnfoldSingleThreadBg private val singleThreadBgExecutor: Executor
|
||||||
) :
|
) : HingeAngleProvider {
|
||||||
HingeAngleProvider {
|
|
||||||
|
|
||||||
private val sensorListener = HingeAngleSensorListener()
|
private val sensorListener = HingeAngleSensorListener()
|
||||||
private val listeners: MutableList<Consumer<Float>> = arrayListOf()
|
private val listeners: MutableList<Consumer<Float>> = arrayListOf()
|
||||||
var started = false
|
var started = false
|
||||||
|
|
||||||
override fun start() = executor.execute {
|
override fun start() {
|
||||||
if (started) return@execute
|
singleThreadBgExecutor.execute {
|
||||||
Trace.beginSection("HingeSensorAngleProvider#start")
|
if (started) return@execute
|
||||||
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
|
Trace.beginSection("HingeSensorAngleProvider#start")
|
||||||
sensorManager.registerListener(
|
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
|
||||||
sensorListener,
|
sensorManager.registerListener(
|
||||||
sensor,
|
sensorListener,
|
||||||
SensorManager.SENSOR_DELAY_FASTEST
|
sensor,
|
||||||
)
|
SensorManager.SENSOR_DELAY_FASTEST
|
||||||
Trace.endSection()
|
)
|
||||||
started = true
|
Trace.endSection()
|
||||||
|
|
||||||
|
started = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun stop() = executor.execute {
|
override fun stop() {
|
||||||
if (!started) return@execute
|
singleThreadBgExecutor.execute {
|
||||||
sensorManager.unregisterListener(sensorListener)
|
if (!started) return@execute
|
||||||
started = false
|
sensorManager.unregisterListener(sensorListener)
|
||||||
|
started = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun removeCallback(listener: Consumer<Float>) {
|
override fun removeCallback(listener: Consumer<Float>) {
|
||||||
|
|||||||
Reference in New Issue
Block a user