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

Commit 2bec238e authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Rename unfold background executor to add single thread assumption

In code, we assume that the background executor provided uses a single thread. This makes it more explicit by changing the annotation.

+ small dagger usage enhancement: we were manually creating some object instead of using dagger for them.

Bug: 261320823
Test: Failures should happen at compile time, if any
Change-Id: I3b1cff2ad2072f784085bf8d8c2067753d1e1fae
parent 93cbbde6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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
}
+2 −2
Original line number Diff line number Diff line
@@ -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
+50 −41
Original line number Diff line number Diff line
@@ -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,29 +32,58 @@ 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 provideFoldStateProvider(
        deviceFoldStateProvider: DeviceFoldStateProvider
    ): FoldStateProvider = deviceFoldStateProvider

    @Provides
    @Singleton
    fun unfoldKeyguardVisibilityProvider(
        impl: UnfoldKeyguardVisibilityManagerImpl
    ): UnfoldKeyguardVisibilityProvider = impl

    @Provides
    @Singleton
    fun unfoldKeyguardVisibilityManager(
        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,
        foldStateProvider: FoldStateProvider
    ): Optional<UnfoldTransitionProgressProvider> =
        physicsBasedUnfoldTransitionProgressProvider:
            Provider<PhysicsBasedUnfoldTransitionProgressProvider>,
        fixedTimingTransitionProgressProvider: Provider<FixedTimingTransitionProgressProvider>,
    ): Optional<UnfoldTransitionProgressProvider> {
        if (!config.isEnabled) {
            Optional.empty()
        } else {
            return Optional.empty()
        }
        val baseProgressProvider =
            if (config.isHingeAngleEnabled) {
                    PhysicsBasedUnfoldTransitionProgressProvider(foldStateProvider)
                physicsBasedUnfoldTransitionProgressProvider.get()
            } else {
                    FixedTimingTransitionProgressProvider(foldStateProvider)
                fixedTimingTransitionProgressProvider.get()
            }
            Optional.of(

        return Optional.of(
            scaleAwareProviderFactory.wrap(baseProgressProvider).apply {
                // Always present callback that logs animation beginning and end.
                addCallback(tracingListener)
@@ -64,33 +91,15 @@ class UnfoldSharedModule {
        )
    }

    @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)
        hingeAngleSensorProvider: Provider<HingeSensorAngleProvider>
    ): HingeAngleProvider {
        return if (config.isHingeAngleEnabled) {
            hingeAngleSensorProvider.get()
        } else {
            EmptyHingeAngleProvider
        }

    @Provides
    @Singleton
    fun unfoldKeyguardVisibilityProvider(
        impl: UnfoldKeyguardVisibilityManagerImpl
    ): UnfoldKeyguardVisibilityProvider = impl

    @Provides
    @Singleton
    fun unfoldKeyguardVisibilityManager(
        impl: UnfoldKeyguardVisibilityManagerImpl
    ): UnfoldKeyguardVisibilityManager = impl
    }
}
+25 −25
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ fun createUnfoldSharedComponent(
        sensorManager: SensorManager,
        mainHandler: Handler,
        mainExecutor: Executor,
    backgroundExecutor: Executor,
        singleThreadBgExecutor: Executor,
        tracingTagPrefix: String,
        windowManager: IWindowManager,
): UnfoldSharedComponent =
@@ -59,7 +59,7 @@ fun createUnfoldSharedComponent(
                        sensorManager,
                        mainHandler,
                        mainExecutor,
            backgroundExecutor,
                        singleThreadBgExecutor,
                        tracingTagPrefix,
                        windowManager,
                )
+2 −3
Original line number Diff line number Diff line
@@ -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
Loading