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

Commit 4e10960c authored by Chris Göllner's avatar Chris Göllner
Browse files

Make OngoingActivityChipsViewModel display aware

Some of its dependencies still have to be made display aware as well.

It is also made available through SystemUIDisplaySubcomponent for places
that need to request it from outside of the display subcomponent.

Test: atest SystemUITests
Bug: 411342806
Flag: EXEMPT unflaggable Dagger changes
Change-Id: Ib42b1889ababd9cf4693ef9280423236c1bfde7d
parent 0e1761ff
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -172,7 +172,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
                mKosmos.getCommunalSceneInteractor(),
                mAmbientStatusBarViewModelFactory,
                mIconViewStoreFactory,
                mLogBuffer);
                mLogBuffer,
                mKosmos.getSystemUiDisplaySubcomponentRepository());
        mController.onInit();
    }

@@ -352,7 +353,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
                mKosmos.getCommunalSceneInteractor(),
                mAmbientStatusBarViewModelFactory,
                mIconViewStoreFactory,
                mLogBuffer);
                mLogBuffer,
                mKosmos.getSystemUiDisplaySubcomponentRepository());
        controller.onViewAttached();
        verify(mView, never()).showIcon(
                eq(AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any());
+7 −2
Original line number Diff line number Diff line
@@ -102,6 +102,8 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
    private final AmbientStatusBarViewModel.Factory mAmbientStatusBarViewModelFactory;
    private final ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory;
    private final DreamLogger mLogger;
    private final PerDisplayRepository<SystemUIDisplaySubcomponent>
            mPerDisplayDisplaySubcomponentRepo;

    private boolean mIsAttached;
    private boolean mCommunalVisible;
@@ -172,7 +174,8 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
            CommunalSceneInteractor communalSceneInteractor,
            AmbientStatusBarViewModel.Factory ambientStatusBarViewModelFactory,
            ConnectedDisplaysStatusBarNotificationIconViewStore.Factory iconViewStoreFactory,
            @DreamLog LogBuffer logBuffer) {
            @DreamLog LogBuffer logBuffer,
            PerDisplayRepository<SystemUIDisplaySubcomponent> perDisplayDisplaySubcomponentRepo) {
        super(view);
        mResources = resources;
        mMainExecutor = mainExecutor;
@@ -195,6 +198,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
        mAmbientStatusBarViewModelFactory = ambientStatusBarViewModelFactory;
        mIconViewStoreFactory = iconViewStoreFactory;
        mLogger = new DreamLogger(logBuffer, TAG);
        mPerDisplayDisplaySubcomponentRepo = perDisplayDisplaySubcomponentRepo;
    }

    @Override
@@ -226,7 +230,8 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
                    getContext(),
                    ongoingActivityChipsView,
                    mAmbientStatusBarViewModelFactory,
                    mIconViewStoreFactory);
                    mIconViewStoreFactory,
                    mPerDisplayDisplaySubcomponentRepo);
        }

        mFlows.add(collectFlow(
+5 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.Hydrator
import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChipsModel
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModel
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.flow.StateFlow
@@ -28,7 +29,7 @@ import kotlinx.coroutines.flow.StateFlow
/** View model for the dream status bar. */
class AmbientStatusBarViewModel
@AssistedInject
constructor(private val ongoingActivityChipsViewModel: OngoingActivityChipsViewModel) :
constructor(@Assisted private val ongoingActivityChipsViewModel: OngoingActivityChipsViewModel) :
    ExclusiveActivatable() {

    private val hydrator = Hydrator("AmbientStatusBarViewModel.hydrator")
@@ -48,6 +49,8 @@ constructor(private val ongoingActivityChipsViewModel: OngoingActivityChipsViewM

    @AssistedFactory
    interface Factory {
        fun create(): AmbientStatusBarViewModel
        fun create(
            ongoingActivityChipsViewModel: OngoingActivityChipsViewModel
        ): AmbientStatusBarViewModel
    }
}
+31 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.ambient.statusbar.ui.binder

import android.content.Context
import android.util.Log
import android.view.Display
import android.widget.LinearLayout
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
@@ -24,11 +26,14 @@ import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.displaylib.PerDisplayRepository
import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewModel
import com.android.systemui.compose.modifiers.sysUiResTagContainer
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.statusbar.chips.ui.compose.OngoingActivityChips
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModel
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.notification.icon.ui.viewbinder.ConnectedDisplaysStatusBarNotificationIconViewStore

@@ -44,6 +49,7 @@ object AmbientStatusBarViewBinder {
        ongoingActivityChipsView: ComposeView,
        ambientStatusBarViewModelFactory: AmbientStatusBarViewModel.Factory,
        iconViewStoreFactory: ConnectedDisplaysStatusBarNotificationIconViewStore.Factory,
        perDisplayDisplaySubcomponentRepository: PerDisplayRepository<SystemUIDisplaySubcomponent>,
    ) {
        ongoingActivityChipsView.repeatWhenAttached {
            repeatOnLifecycle(Lifecycle.State.CREATED) {
@@ -57,7 +63,14 @@ object AmbientStatusBarViewBinder {
                    setContent {
                        val viewModel =
                            rememberViewModel("DreamStatusBar.AmbientStatusBarViewModel") {
                                ambientStatusBarViewModelFactory.create()
                                val ongoingActivityChipsViewModel =
                                    getOngoingActivityChipsViewModel(
                                        perDisplayDisplaySubcomponentRepository,
                                        context,
                                    )
                                ambientStatusBarViewModelFactory.create(
                                    ongoingActivityChipsViewModel
                                )
                            }
                        val iconViewStore =
                            if (StatusBarConnectedDisplays.isEnabled) {
@@ -80,4 +93,21 @@ object AmbientStatusBarViewBinder {
            }
        }
    }

    private fun getOngoingActivityChipsViewModel(
        perDisplayDisplaySubcomponentRepository: PerDisplayRepository<SystemUIDisplaySubcomponent>,
        context: Context,
    ): OngoingActivityChipsViewModel {
        // TODO:b/425316868 - Make AmbientStatusBarComponent a Subcomponent of
        //  SystemUIDisplaySubcomponent so that we can directly inject display specific dependencies
        var displaySubcomponent = perDisplayDisplaySubcomponentRepository[context.displayId]
        if (displaySubcomponent == null) {
            Log.e(TAG, "No display subcomponent for display ${context.displayId}")
            displaySubcomponent = perDisplayDisplaySubcomponentRepository[Display.DEFAULT_DISPLAY]!!
        }
        val ongoingActivityChipsViewModel = displaySubcomponent.ongoingActivityChipsViewModel
        return ongoingActivityChipsViewModel
    }

    private const val TAG = "AmbientStatusBarViewBinder"
}
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ 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 com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModel
import com.android.systemui.statusbar.domain.interactor.StatusBarIconRefreshInteractor
import com.android.systemui.statusbar.window.StatusBarWindowStateController
import dagger.BindsInstance
@@ -52,6 +53,8 @@ interface SystemUIDisplaySubcomponent {

    @get:DisplayAware val statusBarWindowStateController: StatusBarWindowStateController

    @get:DisplayAware val ongoingActivityChipsViewModel: OngoingActivityChipsViewModel

    @Subcomponent.Factory
    interface Factory {
        fun create(@BindsInstance @DisplayId displayId: Int): SystemUIDisplaySubcomponent
Loading