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

Commit f225e822 authored by Ale Nijamkin's avatar Ale Nijamkin Committed by Automerger Merge Worker
Browse files

Merge "[flexiglass] Simplified Dagger setup." into udc-dev am: e778cbc5

parents cd241554 e778cbc5
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -17,10 +17,12 @@
package com.android.systemui.scene.ui.composable
package com.android.systemui.scene.ui.composable


import com.android.systemui.scene.shared.model.Scene
import com.android.systemui.scene.shared.model.Scene
import com.android.systemui.scene.shared.model.SceneContainerNames
import dagger.Module
import dagger.Module
import dagger.multibindings.Multibinds
import dagger.multibindings.Multibinds
import javax.inject.Named


@Module
@Module
interface SceneModule {
interface SceneModule {
    @Multibinds fun scenes(): Set<Scene>
    @Multibinds @Named(SceneContainerNames.SYSTEM_UI_DEFAULT) fun scenes(): Set<Scene>
}
}
+82 −5
Original line number Original line Diff line number Diff line
@@ -17,22 +17,32 @@
package com.android.systemui.scene.ui.composable
package com.android.systemui.scene.ui.composable


import com.android.systemui.bouncer.ui.composable.BouncerScene
import com.android.systemui.bouncer.ui.composable.BouncerScene
import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.ui.composable.LockscreenScene
import com.android.systemui.keyguard.ui.composable.LockscreenScene
import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel
import com.android.systemui.qs.ui.composable.QuickSettingsScene
import com.android.systemui.qs.ui.composable.QuickSettingsScene
import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneViewModel
import com.android.systemui.scene.shared.model.Scene
import com.android.systemui.scene.shared.model.Scene
import com.android.systemui.scene.shared.model.SceneContainerNames
import com.android.systemui.shade.ui.composable.ShadeScene
import com.android.systemui.shade.ui.composable.ShadeScene
import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel
import dagger.Module
import dagger.Module
import dagger.Provides
import dagger.Provides
import javax.inject.Named
import kotlinx.coroutines.CoroutineScope


@Module
@Module
object SceneModule {
object SceneModule {
    @Provides
    @Provides
    @Named(SceneContainerNames.SYSTEM_UI_DEFAULT)
    fun scenes(
    fun scenes(
        bouncer: BouncerScene,
        @Named(SceneContainerNames.SYSTEM_UI_DEFAULT) bouncer: BouncerScene,
        gone: GoneScene,
        @Named(SceneContainerNames.SYSTEM_UI_DEFAULT) gone: GoneScene,
        lockScreen: LockscreenScene,
        @Named(SceneContainerNames.SYSTEM_UI_DEFAULT) lockScreen: LockscreenScene,
        qs: QuickSettingsScene,
        @Named(SceneContainerNames.SYSTEM_UI_DEFAULT) qs: QuickSettingsScene,
        shade: ShadeScene,
        @Named(SceneContainerNames.SYSTEM_UI_DEFAULT) shade: ShadeScene,
    ): Set<Scene> {
    ): Set<Scene> {
        return setOf(
        return setOf(
            bouncer,
            bouncer,
@@ -42,4 +52,71 @@ object SceneModule {
            shade,
            shade,
        )
        )
    }
    }

    @Provides
    @SysUISingleton
    @Named(SceneContainerNames.SYSTEM_UI_DEFAULT)
    fun bouncerScene(
        viewModelFactory: BouncerViewModel.Factory,
    ): BouncerScene {
        return BouncerScene(
            viewModel =
                viewModelFactory.create(
                    containerName = SceneContainerNames.SYSTEM_UI_DEFAULT,
                ),
        )
    }

    @Provides
    @SysUISingleton
    @Named(SceneContainerNames.SYSTEM_UI_DEFAULT)
    fun goneScene(): GoneScene {
        return GoneScene()
    }

    @Provides
    @SysUISingleton
    @Named(SceneContainerNames.SYSTEM_UI_DEFAULT)
    fun lockscreenScene(
        @Application applicationScope: CoroutineScope,
        viewModelFactory: LockscreenSceneViewModel.Factory,
    ): LockscreenScene {
        return LockscreenScene(
            applicationScope = applicationScope,
            viewModel =
                viewModelFactory.create(
                    containerName = SceneContainerNames.SYSTEM_UI_DEFAULT,
                ),
        )
    }

    @Provides
    @SysUISingleton
    @Named(SceneContainerNames.SYSTEM_UI_DEFAULT)
    fun quickSettingsScene(
        viewModelFactory: QuickSettingsSceneViewModel.Factory,
    ): QuickSettingsScene {
        return QuickSettingsScene(
            viewModel =
                viewModelFactory.create(
                    containerName = SceneContainerNames.SYSTEM_UI_DEFAULT,
                ),
        )
    }

    @Provides
    @SysUISingleton
    @Named(SceneContainerNames.SYSTEM_UI_DEFAULT)
    fun shadeScene(
        @Application applicationScope: CoroutineScope,
        viewModelFactory: ShadeSceneViewModel.Factory,
    ): ShadeScene {
        return ShadeScene(
            applicationScope = applicationScope,
            viewModel =
                viewModelFactory.create(
                    containerName = SceneContainerNames.SYSTEM_UI_DEFAULT,
                ),
        )
    }
}
}
+3 −8
Original line number Original line Diff line number Diff line
@@ -40,22 +40,17 @@ import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PasswordBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PasswordBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PatternBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PatternBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.ui.composable.ComposableScene
import com.android.systemui.scene.ui.composable.ComposableScene
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.asStateFlow


/** The bouncer scene displays authentication challenges like PIN, password, or pattern. */
/** The bouncer scene displays authentication challenges like PIN, password, or pattern. */
@SysUISingleton
class BouncerScene(
class BouncerScene
    private val viewModel: BouncerViewModel,
@Inject
constructor(
    private val viewModelFactory: BouncerViewModel.Factory,
) : ComposableScene {
) : ComposableScene {
    override val key = SceneKey.Bouncer
    override val key = SceneKey.Bouncer


@@ -73,7 +68,7 @@ constructor(
    override fun Content(
    override fun Content(
        containerName: String,
        containerName: String,
        modifier: Modifier,
        modifier: Modifier,
    ) = BouncerScene(viewModelFactory.create(containerName), modifier)
    ) = BouncerScene(viewModel, modifier)
}
}


@Composable
@Composable
+10 −26
Original line number Original line Diff line number Diff line
@@ -31,7 +31,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.dp
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel
import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.Direction
@@ -39,7 +38,6 @@ import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.ui.composable.ComposableScene
import com.android.systemui.scene.ui.composable.ComposableScene
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -47,21 +45,15 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.stateIn


/** The lock screen scene shows when the device is locked. */
/** The lock screen scene shows when the device is locked. */
@SysUISingleton
class LockscreenScene(
class LockscreenScene
@Inject
constructor(
    @Application private val applicationScope: CoroutineScope,
    @Application private val applicationScope: CoroutineScope,
    private val viewModelFactory: LockscreenSceneViewModel.Factory,
    private val viewModel: LockscreenSceneViewModel,
) : ComposableScene {
) : ComposableScene {
    override val key = SceneKey.Lockscreen
    override val key = SceneKey.Lockscreen


    private var unsafeViewModel: LockscreenSceneViewModel? = null

    override fun destinationScenes(
    override fun destinationScenes(
        containerName: String,
        containerName: String,
    ): StateFlow<Map<UserAction, SceneModel>> =
    ): StateFlow<Map<UserAction, SceneModel>> =
        getOrCreateViewModelSingleton(containerName).let { viewModel ->
        viewModel.upDestinationSceneKey
        viewModel.upDestinationSceneKey
            .map { pageKey -> destinationScenes(up = pageKey) }
            .map { pageKey -> destinationScenes(up = pageKey) }
            .stateIn(
            .stateIn(
@@ -69,7 +61,6 @@ constructor(
                started = SharingStarted.Eagerly,
                started = SharingStarted.Eagerly,
                initialValue = destinationScenes(up = viewModel.upDestinationSceneKey.value)
                initialValue = destinationScenes(up = viewModel.upDestinationSceneKey.value)
            )
            )
        }


    @Composable
    @Composable
    override fun Content(
    override fun Content(
@@ -77,7 +68,7 @@ constructor(
        modifier: Modifier,
        modifier: Modifier,
    ) {
    ) {
        LockscreenScene(
        LockscreenScene(
            viewModel = getOrCreateViewModelSingleton(containerName),
            viewModel = viewModel,
            modifier = modifier,
            modifier = modifier,
        )
        )
    }
    }
@@ -90,13 +81,6 @@ constructor(
            UserAction.Swipe(Direction.DOWN) to SceneModel(SceneKey.Shade)
            UserAction.Swipe(Direction.DOWN) to SceneModel(SceneKey.Shade)
        )
        )
    }
    }

    private fun getOrCreateViewModelSingleton(
        containerName: String,
    ): LockscreenSceneViewModel {
        return unsafeViewModel
            ?: viewModelFactory.create(containerName).also { unsafeViewModel = it }
    }
}
}


@Composable
@Composable
+3 −8
Original line number Original line Diff line number Diff line
@@ -27,24 +27,19 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.dp
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneViewModel
import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneViewModel
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.ui.composable.ComposableScene
import com.android.systemui.scene.ui.composable.ComposableScene
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.asStateFlow


/** The Quick Settings (AKA "QS") scene shows the quick setting tiles. */
/** The Quick Settings (AKA "QS") scene shows the quick setting tiles. */
@SysUISingleton
class QuickSettingsScene(
class QuickSettingsScene
    private val viewModel: QuickSettingsSceneViewModel,
@Inject
constructor(
    private val viewModelFactory: QuickSettingsSceneViewModel.Factory,
) : ComposableScene {
) : ComposableScene {
    override val key = SceneKey.QuickSettings
    override val key = SceneKey.QuickSettings


@@ -64,7 +59,7 @@ constructor(
        modifier: Modifier,
        modifier: Modifier,
    ) {
    ) {
        QuickSettingsScene(
        QuickSettingsScene(
            viewModel = viewModelFactory.create(containerName),
            viewModel = viewModel,
            modifier = modifier,
            modifier = modifier,
        )
        )
    }
    }
Loading