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

Commit 1da37826 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add ShadeDisplaysInteractor to ShadeDisplayAwareModule" into main

parents 7a9271bc a1317228
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.display.shared.model.DisplayWindowProperties
import com.android.systemui.scene.ui.view.WindowRootView
import com.android.systemui.shade.data.repository.FakeShadeDisplayRepository
import com.android.systemui.statusbar.phone.ConfigurationForwarder
import java.util.Optional
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
@@ -65,7 +66,7 @@ class ShadeDisplaysInteractorTest : SysuiTestCase() {

    private val interactor =
        ShadeDisplaysInteractor(
            shadeRootview,
            Optional.of(shadeRootview),
            positionRepository,
            MutableContextWrapper(defaultContext),
            resources,
+21 −1
Original line number Diff line number Diff line
@@ -29,16 +29,20 @@ import com.android.systemui.common.ui.data.repository.ConfigurationRepositoryImp
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.ui.view.WindowRootView
import com.android.systemui.shade.data.repository.ShadeDisplaysRepository
import com.android.systemui.shade.data.repository.ShadeDisplaysRepositoryImpl
import com.android.systemui.shade.domain.interactor.ShadeDisplaysInteractor
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl
import com.android.systemui.statusbar.phone.ConfigurationForwarder
import com.android.systemui.statusbar.policy.ConfigurationController
import dagger.BindsOptionalOf
import dagger.Module
import dagger.Provides
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import javax.inject.Provider

/**
 * Module responsible for managing display-specific components and resources for the notification
@@ -52,7 +56,7 @@ import dagger.multibindings.IntoMap
 * By using this dedicated module, we ensure the notification shade window always utilizes the
 * correct display context and resources, regardless of the display it's on.
 */
@Module
@Module(includes = [OptionalShadeDisplayAwareBindings::class])
object ShadeDisplayAwareModule {

    /** Creates a new context for the shade window. */
@@ -169,4 +173,20 @@ object ShadeDisplayAwareModule {
            CoreStartable.NOP
        }
    }

    @Provides
    @IntoMap
    @ClassKey(ShadeDisplaysInteractor::class)
    fun provideShadeDisplaysInteractor(impl: Provider<ShadeDisplaysInteractor>): CoreStartable {
        return if (ShadeWindowGoesAround.isEnabled) {
            impl.get()
        } else {
            CoreStartable.NOP
        }
    }
}

@Module
internal interface OptionalShadeDisplayAwareBindings {
    @BindsOptionalOf fun bindOptionalOfWindowRootView(): WindowRootView
}
+12 −1
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ import com.android.systemui.shade.ShadeWindowLayoutParams
import com.android.systemui.shade.data.repository.ShadeDisplaysRepository
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.statusbar.phone.ConfigurationForwarder
import com.android.systemui.util.kotlin.getOrNull
import java.util.Optional
import javax.inject.Inject
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
@@ -48,7 +50,7 @@ import kotlinx.coroutines.withContext
class ShadeDisplaysInteractor
@Inject
constructor(
    private val shadeRootView: WindowRootView,
    optionalShadeRootView: Optional<WindowRootView>,
    private val shadePositionRepository: ShadeDisplaysRepository,
    @ShadeDisplayAware private val shadeContext: Context,
    @ShadeDisplayAware private val shadeResources: Resources,
@@ -58,6 +60,15 @@ constructor(
    @Main private val mainThreadContext: CoroutineContext,
) : CoreStartable {

    private val shadeRootView =
        optionalShadeRootView.getOrNull()
            ?: error(
                """
            ShadeRootView must be provided for this ShadeDisplayInteractor to work.
            If it is not, it means this is being instantiated in a SystemUI variant that shouldn't.
            """
                    .trimIndent()
            )
    // TODO: b/362719719 - Get rid of this callback as the root view should automatically get the
    //  correct configuration once it's moved to another window.
    private var unregisterConfigChangedCallbacks: (() -> Unit)? = null