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

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

Merge "Make OngoingActivityChipsViewModel display aware" into main

parents ae2f4fc9 4e10960c
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