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

Commit f8921044 authored by Chris Göllner's avatar Chris Göllner Committed by Android (Google) Code Review
Browse files

Merge "Make DisplayStateInteractor/Repository available in Display Subcomponent" into main

parents 9db297f7 066539b0
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.biometrics.dagger

import android.content.Context
import android.content.res.Resources
import android.view.Display
import com.android.app.displaylib.PerDisplayRepository
import com.android.internal.R
import com.android.launcher3.icons.IconProvider
import com.android.systemui.CoreStartable
@@ -41,8 +43,8 @@ import com.android.systemui.biometrics.udfps.OverlapDetector
import com.android.systemui.biometrics.ui.binder.DeviceEntryUnlockTrackerViewBinder
import com.android.systemui.biometrics.ui.binder.SideFpsOverlayViewBinder
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent
import com.android.systemui.display.data.repository.DisplayStateRepository
import com.android.systemui.display.data.repository.DisplayStateRepositoryImpl
import com.android.systemui.keyguard.ui.binder.AlternateBouncerViewBinder
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener
import com.android.systemui.util.concurrency.ThreadFactory
@@ -100,15 +102,19 @@ interface BiometricsModule {
        impl: FingerprintPropertyRepositoryImpl
    ): FingerprintPropertyRepository

    @Binds
    @SysUISingleton
    fun displayStateRepository(impl: DisplayStateRepositoryImpl): DisplayStateRepository

    @BindsOptionalOf fun authContextPlugins(): AuthContextPlugins

    @BindsOptionalOf fun deviceEntryUnlockTrackerViewBinder(): DeviceEntryUnlockTrackerViewBinder

    companion object {
        @Provides
        @SysUISingleton
        fun displayStateRepository(
            displayComponentRepo: PerDisplayRepository<SystemUIDisplaySubcomponent>
        ): DisplayStateRepository {
            return displayComponentRepo[Display.DEFAULT_DISPLAY]!!.displayStateRepository
        }

        /** Background [Executor] for HAL related operations. */
        @Provides
        @SysUISingleton
+9 −5
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.display

import android.hardware.display.DisplayManager
import android.os.Handler
import android.view.Display
import android.view.IWindowManager
import com.android.app.displaylib.DisplayLibBackground
import com.android.app.displaylib.DisplayLibComponent
@@ -27,6 +28,7 @@ import com.android.app.displaylib.createDisplayLibComponent
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.DisplayLib
import com.android.systemui.display.data.repository.DeviceStateRepository
import com.android.systemui.display.data.repository.DeviceStateRepositoryImpl
@@ -41,7 +43,6 @@ import com.android.systemui.display.data.repository.PerDisplayRepoDumpHelper
import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractor
import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractorImpl
import com.android.systemui.display.domain.interactor.DisplayStateInteractor
import com.android.systemui.display.domain.interactor.DisplayStateInteractorImpl
import com.android.systemui.display.domain.interactor.DisplayWindowPropertiesInteractorModule
import com.android.systemui.display.domain.interactor.RearDisplayStateInteractor
import com.android.systemui.display.domain.interactor.RearDisplayStateInteractorImpl
@@ -75,10 +76,6 @@ interface DisplayModule {
        deviceStateRepository: DeviceStateRepositoryImpl
    ): DeviceStateRepository

    @Binds
    @SysUISingleton
    fun bindsDisplayStateInteractor(impl: DisplayStateInteractorImpl): DisplayStateInteractor

    @Binds
    fun bindsFocusedDisplayRepository(
        focusedDisplayRepository: FocusedDisplayRepositoryImpl
@@ -102,6 +99,13 @@ interface DisplayModule {
    fun bindDisplayLibBackground(@Background bgScope: CoroutineScope): CoroutineScope

    companion object {
        @Provides
        fun displayStateInteractor(
            displayComponentRepo: PerDisplayRepository<SystemUIDisplaySubcomponent>
        ): DisplayStateInteractor {
            return displayComponentRepo[Display.DEFAULT_DISPLAY]!!.displayStateInteractor
        }

        @Provides
        @SysUISingleton
        @IntoMap
+45 −23
Original line number Diff line number Diff line
@@ -25,6 +25,11 @@ import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.DisplayAware
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.DisplayId
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.PerDisplaySingleton
import com.android.systemui.display.data.repository.DisplayStateRepository
import com.android.systemui.display.data.repository.DisplayStateRepositoryImpl
import com.android.systemui.display.domain.interactor.DisplayStateInteractor
import com.android.systemui.display.domain.interactor.DisplayStateInteractorImpl
import dagger.Binds
import dagger.Module
import dagger.Provides
import kotlinx.coroutines.CoroutineDispatcher
@@ -32,11 +37,25 @@ import kotlinx.coroutines.CoroutineScope

/** Module providing common dependencies for per-display singletons. */
@Module
class PerDisplayCommonModule {
interface PerDisplayCommonModule {

    @Binds
    @PerDisplaySingleton
    @DisplayAware
    fun displayStateRepository(impl: DisplayStateRepositoryImpl): DisplayStateRepository

    @Binds
    @PerDisplaySingleton
    @DisplayAware
    fun bindsDisplayStateInteractor(impl: DisplayStateInteractorImpl): DisplayStateInteractor

    companion object {
        @Provides
        @PerDisplaySingleton
    fun provideDisplay(@DisplayId displayId: Int, displayRepository: DisplayRepository): Display {
        fun provideDisplay(
            @DisplayId displayId: Int,
            displayRepository: DisplayRepository,
        ): Display {
            return displayRepository.getDisplay(displayId)
                ?: error("Couldn't get the display with id=$displayId")
        }
@@ -44,11 +63,13 @@ class PerDisplayCommonModule {
        @Provides
        @PerDisplaySingleton
        @DisplayAware
    fun provideDisplayContext(
        display: Display,
        @Application context: Context,
    ): Context {
        return context.createDisplayContext(display)
        fun provideDisplayContext(display: Display, @Application context: Context): Context {
            return if (display.displayId == Display.DEFAULT_DISPLAY) {
                // No need to create a new context, if we already have one.
                context
            } else {
                context.createDisplayContext(display)
            }
        }

        @Provides
@@ -63,3 +84,4 @@ class PerDisplayCommonModule {
            )
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.display.dagger

import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.PerDisplaySingleton
import com.android.systemui.display.data.repository.DisplayStateRepository
import com.android.systemui.display.domain.interactor.DisplayStateInteractor
import dagger.BindsInstance
import dagger.Subcomponent
import javax.inject.Qualifier
@@ -38,6 +40,10 @@ interface SystemUIDisplaySubcomponent {

    @get:DisplayAware val displayCoroutineScope: CoroutineScope

    @get:DisplayAware val displayStateRepository: DisplayStateRepository

    @get:DisplayAware val displayStateInteractor: DisplayStateInteractor

    @Subcomponent.Factory
    interface Factory {
        fun create(@BindsInstance @DisplayId displayId: Int): SystemUIDisplaySubcomponent
+11 −12
Original line number Diff line number Diff line
@@ -20,9 +20,8 @@ import android.content.Context
import android.util.DisplayMetrics
import android.util.Size
import android.view.DisplayInfo
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.DisplayAware
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.PerDisplaySingleton
import com.android.systemui.display.data.repository.DeviceStateRepository.DeviceState.REAR_DISPLAY
import com.android.systemui.display.shared.model.DisplayRotation
import com.android.systemui.display.shared.model.toDisplayRotation
@@ -69,12 +68,12 @@ interface DisplayStateRepository {
    val isWideScreen: StateFlow<Boolean>
}

@SysUISingleton
@PerDisplaySingleton
class DisplayStateRepositoryImpl
@Inject
constructor(
    @Background backgroundScope: CoroutineScope,
    @Application val context: Context,
    @DisplayAware bgDisplayScope: CoroutineScope,
    @DisplayAware val context: Context,
    deviceStateRepository: DeviceStateRepository,
    displayRepository: DisplayRepository,
) : DisplayStateRepository {
@@ -84,13 +83,13 @@ constructor(
    override val isInRearDisplayMode: StateFlow<Boolean> =
        deviceStateRepository.state
            .map { it == REAR_DISPLAY }
            .stateIn(backgroundScope, started = SharingStarted.Eagerly, initialValue = false)
            .stateIn(bgDisplayScope, started = SharingStarted.Eagerly, initialValue = false)

    private val currentDisplayInfo: StateFlow<DisplayInfo> =
        displayRepository.displayChangeEvent
            .map { getDisplayInfo() }
            .stateIn(
                backgroundScope,
                bgDisplayScope,
                started = SharingStarted.Eagerly,
                initialValue = getDisplayInfo(),
            )
@@ -99,7 +98,7 @@ constructor(
        currentDisplayInfo
            .map { rotationToDisplayRotation(it.rotation) }
            .stateIn(
                backgroundScope,
                bgDisplayScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue = rotationToDisplayRotation(currentDisplayInfo.value.rotation),
            )
@@ -108,7 +107,7 @@ constructor(
        currentDisplayInfo
            .map { Size(it.naturalWidth, it.naturalHeight) }
            .stateIn(
                backgroundScope,
                bgDisplayScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue =
                    Size(
@@ -124,12 +123,12 @@ constructor(
                val smallestWidth = min(it.logicalWidth, it.logicalHeight).toDpi()
                smallestWidth >= LARGE_SCREEN_MIN_DPS
            }
            .stateIn(backgroundScope, started = SharingStarted.Eagerly, initialValue = false)
            .stateIn(bgDisplayScope, started = SharingStarted.Eagerly, initialValue = false)

    override val isWideScreen: StateFlow<Boolean> =
        currentDisplayInfo
            .map { it.logicalWidth.toDpi() >= LARGE_SCREEN_MIN_DPS }
            .stateIn(backgroundScope, started = SharingStarted.Eagerly, initialValue = false)
            .stateIn(bgDisplayScope, started = SharingStarted.Eagerly, initialValue = false)

    private fun getDisplayInfo(): DisplayInfo {
        val cachedDisplayInfo = DisplayInfo()
Loading