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

Commit 6c2a9d2e authored by Evan Laird's avatar Evan Laird
Browse files

[sb] Display-dependent HomeStatusBarViewModelImpl

This change moves HomeStatusBarViewModel to be @AssistedInject, and
creates the complementary factories to supply the display once the
appropriate status bar (compose or fragment) is created.

It also removes the two functions that took displayId and returned flows
in place of regular-old-flows

Test: CollapsedStatusBarFragmentTest
Test: HomeStatusBarViewModelImplTest
Test: manual
Bug: 364360986
Flag: EXEMPT small refactor
Change-Id: Iebaadcc0a3596900a97d73e3fc30efb47c8f78fe
parent 93d7e93f
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
class FakeHomeStatusBarViewModel(
    override val operatorNameViewModel: StatusBarOperatorNameViewModel
) : HomeStatusBarViewModel {
    private val areNotificationLightsOut = MutableStateFlow(false)
    override val areNotificationsLightsOut = MutableStateFlow(false)

    override val isTransitioningFromLockscreenToOccluded = MutableStateFlow(false)

@@ -77,14 +77,12 @@ class FakeHomeStatusBarViewModel(

    override val iconBlockList: MutableStateFlow<List<String>> = MutableStateFlow(listOf())

    override fun areNotificationsLightsOut(displayId: Int): Flow<Boolean> = areNotificationLightsOut

    val darkRegions = mutableListOf<Rect>()

    var darkIconTint = Color.BLACK
    var lightIconTint = Color.WHITE

    override fun areaTint(displayId: Int): Flow<StatusBarTintColor> =
    override val areaTint: Flow<StatusBarTintColor> =
        MutableStateFlow(
            StatusBarTintColor { viewBounds ->
                if (DarkIconDispatcher.isInAreas(darkRegions, viewBounds)) {
+12 −12
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.app.StatusBarManager.DISABLE_CLOCK
import android.app.StatusBarManager.DISABLE_NONE
import android.app.StatusBarManager.DISABLE_NOTIFICATION_ICONS
import android.app.StatusBarManager.DISABLE_SYSTEM_INFO
import android.content.testableContext
import android.graphics.Rect
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
@@ -59,7 +60,6 @@ import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsScreenRecordChip
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsShareToAppChip
import com.android.systemui.statusbar.data.model.StatusBarMode
import com.android.systemui.statusbar.data.repository.FakeStatusBarModeRepository.Companion.DISPLAY_ID
import com.android.systemui.statusbar.data.repository.fakeStatusBarModeRepository
import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository
import com.android.systemui.statusbar.disableflags.shared.model.DisableFlagsModel
@@ -363,7 +363,7 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
            activeNotificationListRepository.activeNotifications.value =
                activeNotificationsStore(testNotifications)

            val actual by collectLastValue(underTest.areNotificationsLightsOut(DISPLAY_ID))
            val actual by collectLastValue(underTest.areNotificationsLightsOut)

            assertThat(actual).isTrue()
        }
@@ -377,7 +377,7 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
            activeNotificationListRepository.activeNotifications.value =
                activeNotificationsStore(emptyList())

            val actual by collectLastValue(underTest.areNotificationsLightsOut(DISPLAY_ID))
            val actual by collectLastValue(underTest.areNotificationsLightsOut)

            assertThat(actual).isFalse()
        }
@@ -391,7 +391,7 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
            activeNotificationListRepository.activeNotifications.value =
                activeNotificationsStore(emptyList())

            val actual by collectLastValue(underTest.areNotificationsLightsOut(DISPLAY_ID))
            val actual by collectLastValue(underTest.areNotificationsLightsOut)

            assertThat(actual).isFalse()
        }
@@ -405,7 +405,7 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
            activeNotificationListRepository.activeNotifications.value =
                activeNotificationsStore(testNotifications)

            val actual by collectLastValue(underTest.areNotificationsLightsOut(DISPLAY_ID))
            val actual by collectLastValue(underTest.areNotificationsLightsOut)

            assertThat(actual).isFalse()
        }
@@ -415,7 +415,7 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
    fun areNotificationsLightsOut_requiresFlagEnabled() =
        kosmos.runTest {
            assertLogsWtf {
                val flow = underTest.areNotificationsLightsOut(DISPLAY_ID)
                val flow = underTest.areNotificationsLightsOut
                assertThat(flow).isEqualTo(emptyFlow<Boolean>())
            }
        }
@@ -1005,11 +1005,11 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
    @Test
    fun areaTint_viewIsInDarkBounds_getsDarkTint() =
        kosmos.runTest {
            val displayId = 321
            val displayId = testableContext.displayId
            fakeDarkIconRepository.darkState(displayId).value =
                SysuiDarkIconDispatcher.DarkChange(listOf(Rect(0, 0, 5, 5)), 0f, 0xAABBCC)

            val areaTint by collectLastValue(underTest.areaTint(displayId))
            val areaTint by collectLastValue(underTest.areaTint)

            val tint = areaTint?.tint(Rect(1, 1, 3, 3))

@@ -1019,11 +1019,11 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
    @Test
    fun areaTint_viewIsNotInDarkBounds_getsDefaultTint() =
        kosmos.runTest {
            val displayId = 321
            val displayId = testableContext.displayId
            fakeDarkIconRepository.darkState(displayId).value =
                SysuiDarkIconDispatcher.DarkChange(listOf(Rect(0, 0, 5, 5)), 0f, 0xAABBCC)

            val areaTint by collectLastValue(underTest.areaTint(displayId))
            val areaTint by collectLastValue(underTest.areaTint)

            val tint = areaTint?.tint(Rect(6, 6, 7, 7))

@@ -1033,11 +1033,11 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
    @Test
    fun areaTint_viewIsInDarkBounds_darkBoundsChange_viewUpdates() =
        kosmos.runTest {
            val displayId = 321
            val displayId = testableContext.displayId
            fakeDarkIconRepository.darkState(displayId).value =
                SysuiDarkIconDispatcher.DarkChange(listOf(Rect(0, 0, 5, 5)), 0f, 0xAABBCC)

            val areaTint by collectLastValue(underTest.areaTint(displayId))
            val areaTint by collectLastValue(underTest.areaTint)

            var tint = areaTint?.tint(Rect(1, 1, 3, 3))

+7 −3
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ import com.android.systemui.statusbar.phone.ui.StatusBarIconController;
import com.android.systemui.statusbar.pipeline.shared.ui.binder.HomeStatusBarViewBinder;
import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener;
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel;
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.HomeStatusBarViewModelFactory;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.window.StatusBarWindowController;
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore;
@@ -142,6 +143,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private StatusBarVisibilityModel mLastModifiedVisibility =
            StatusBarVisibilityModel.createDefaultModel();
    private DarkIconManager mDarkIconManager;
    private HomeStatusBarViewModel mHomeStatusBarViewModel;

    private final HomeStatusBarComponent.Factory mHomeStatusBarComponentFactory;
    private final CommandQueue mCommandQueue;
    private final CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger;
@@ -151,8 +154,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private final ShadeExpansionStateManager mShadeExpansionStateManager;
    private final StatusBarIconController mStatusBarIconController;
    private final CarrierConfigTracker mCarrierConfigTracker;
    private final HomeStatusBarViewModel mHomeStatusBarViewModel;
    private final HomeStatusBarViewBinder mHomeStatusBarViewBinder;
    private final HomeStatusBarViewModelFactory mHomeStatusBarViewModelFactory;
    private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
    private final DarkIconManager.Factory mDarkIconManagerFactory;
    private final SecureSettings mSecureSettings;
@@ -256,7 +259,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
            ShadeExpansionStateManager shadeExpansionStateManager,
            StatusBarIconController statusBarIconController,
            DarkIconManager.Factory darkIconManagerFactory,
            HomeStatusBarViewModel homeStatusBarViewModel,
            HomeStatusBarViewModelFactory homeStatusBarViewModelFactory,
            HomeStatusBarViewBinder homeStatusBarViewBinder,
            StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
            KeyguardStateController keyguardStateController,
@@ -281,7 +284,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        mAnimationScheduler = animationScheduler;
        mShadeExpansionStateManager = shadeExpansionStateManager;
        mStatusBarIconController = statusBarIconController;
        mHomeStatusBarViewModel = homeStatusBarViewModel;
        mHomeStatusBarViewModelFactory = homeStatusBarViewModelFactory;
        mHomeStatusBarViewBinder = homeStatusBarViewBinder;
        mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
        mDarkIconManagerFactory = darkIconManagerFactory;
@@ -410,6 +413,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        mCarrierConfigTracker.addCallback(mCarrierConfigCallback);
        mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener);

        mHomeStatusBarViewModel = mHomeStatusBarViewModelFactory.create(displayId);
        mHomeStatusBarViewBinder.bind(
                view.getContext().getDisplayId(),
                mStatusBar,
+5 −3
Original line number Diff line number Diff line
@@ -56,8 +56,8 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.Connectivi
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl
import com.android.systemui.statusbar.pipeline.shared.ui.binder.HomeStatusBarViewBinder
import com.android.systemui.statusbar.pipeline.shared.ui.binder.HomeStatusBarViewBinderImpl
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModelImpl
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.HomeStatusBarViewModelFactory
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModelImpl.HomeStatusBarViewModelFactoryImpl
import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositorySwitcher
@@ -148,7 +148,9 @@ abstract class StatusBarPipelineModule {
    abstract fun bindCarrierConfigStartable(impl: CarrierConfigCoreStartable): CoreStartable

    @Binds
    abstract fun homeStatusBarViewModel(impl: HomeStatusBarViewModelImpl): HomeStatusBarViewModel
    abstract fun homeStatusBarViewModelFactory(
        impl: HomeStatusBarViewModelFactoryImpl
    ): HomeStatusBarViewModelFactory

    @Binds
    abstract fun homeStatusBarViewBinder(impl: HomeStatusBarViewBinderImpl): HomeStatusBarViewBinder
+2 −3
Original line number Diff line number Diff line
@@ -106,10 +106,9 @@ constructor(
                }

                if (NotificationsLiveDataStoreRefactor.isEnabled) {
                    val displayId = view.display.displayId
                    val lightsOutView: View = view.requireViewById(R.id.notification_lights_out)
                    launch {
                        viewModel.areNotificationsLightsOut(displayId).collect { show ->
                        viewModel.areNotificationsLightsOut.collect { show ->
                            animateLightsOutView(lightsOutView, show)
                        }
                    }
@@ -209,7 +208,7 @@ constructor(
                    StatusBarOperatorNameViewBinder.bind(
                        operatorNameView,
                        viewModel.operatorNameViewModel,
                        viewModel::areaTint,
                        viewModel.areaTint,
                    )
                    launch {
                        viewModel.shouldShowOperatorNameView.collect {
Loading