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

Commit 14495ce3 authored by burakov's avatar burakov
Browse files

Remove redundant flows from SharedNotificationContainerInteractor

There is already an existing flow for configuration changes in
`configurationInteractor`, and it's a better practice to depend on this
interactor than the underlying repository anyway.

The other flow, `isSplitShadeEnabled`, is redundant since its usages
have been removed in ag/29864236.

This is part of a refactoring that will improve NSSL positioning to
support Dual Shade and Connected Displays.

Bug: 338033836
Flag: com.android.systemui.scene_container
Test: Existing unit tests still pass.
Change-Id: I736234dac0692468980ea126c328cbbc479fc099
parent 80371cf3
Loading
Loading
Loading
Loading
+10 −15
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
package com.android.systemui.statusbar.notification.stack.domain.interactor

import android.content.Context
import com.android.systemui.common.ui.data.repository.ConfigurationRepository
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
@@ -29,6 +29,8 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.policy.SplitShadeStateController
import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -36,17 +38,17 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart

/** Encapsulates business-logic specifically related to the shared notification stack container. */
@OptIn(ExperimentalCoroutinesApi::class, FlowPreview::class)
@SysUISingleton
class SharedNotificationContainerInteractor
@Inject
constructor(
    configurationRepository: ConfigurationRepository,
    private val context: Context,
    private val splitShadeStateController: Lazy<SplitShadeStateController>,
    private val shadeInteractor: Lazy<ShadeInteractor>,
    configurationInteractor: ConfigurationInteractor,
    keyguardInteractor: KeyguardInteractor,
    deviceEntryUdfpsInteractor: DeviceEntryUdfpsInteractor,
    largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
@@ -59,9 +61,6 @@ constructor(
    /** An internal modification was made to notifications */
    val notificationStackChanged = _notificationStackChanged.debounce(20L)

    private val configurationChangeEvents =
        configurationRepository.onAnyConfigurationChange.onStart { emit(Unit) }

    /* Warning: Even though the value it emits only contains the split shade status, this flow must
     * emit a value whenever the configuration *or* the split shade status changes. Adding a
     * distinctUntilChanged() to this would cause configurationBasedDimensions to miss configuration
@@ -69,13 +68,14 @@ constructor(
     */
    private val dimensionsUpdateEventsWithShouldUseSplitShade: Flow<Boolean> =
        if (SceneContainerFlag.isEnabled) {
            combine(configurationChangeEvents, shadeInteractor.get().isShadeLayoutWide) {
                _,
                isShadeLayoutWide ->
            combine(
                configurationInteractor.onAnyConfigurationChange,
                shadeInteractor.get().isShadeLayoutWide,
            ) { _, isShadeLayoutWide ->
                isShadeLayoutWide
            }
        } else {
            configurationChangeEvents.map {
            configurationInteractor.onAnyConfigurationChange.map {
                splitShadeStateController.get().shouldUseSplitNotificationShade(context.resources)
            }
        }
@@ -115,11 +115,6 @@ constructor(
            isUdfpsSupported || !ambientIndicationVisible
        }

    val isSplitShadeEnabled: Flow<Boolean> =
        configurationBasedDimensions
            .map { dimens: ConfigurationBasedDimensions -> dimens.useSplitShade }
            .distinctUntilChanged()

    /** Top position (without translation) of the shared container. */
    fun setTopPosition(top: Float) {
        _topPosition.value = top
+6 −3
Original line number Diff line number Diff line
@@ -14,26 +14,29 @@
 * limitations under the License.
 */

@file:OptIn(ExperimentalCoroutinesApi::class)

package com.android.systemui.statusbar.notification.stack.domain.interactor

import android.content.applicationContext
import com.android.systemui.common.ui.data.repository.configurationRepository
import com.android.systemui.common.ui.domain.interactor.configurationInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryUdfpsInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.largeScreenHeaderHelper
import com.android.systemui.statusbar.policy.splitShadeStateController
import kotlinx.coroutines.ExperimentalCoroutinesApi

val Kosmos.sharedNotificationContainerInteractor by
    Kosmos.Fixture {
        SharedNotificationContainerInteractor(
            configurationRepository = configurationRepository,
            context = applicationContext,
            splitShadeStateController = { splitShadeStateController },
            shadeInteractor = { shadeInteractor },
            configurationInteractor = configurationInteractor,
            keyguardInteractor = keyguardInteractor,
            deviceEntryUdfpsInteractor = deviceEntryUdfpsInteractor,
            largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
            largeScreenHeaderHelperLazy = { largeScreenHeaderHelper },
        )
    }