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

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

Merge changes I09ee6f35,I0c1f69fe into main

* changes:
  Use the display specific DarkIconDispatcher in most places
  Start using DarkIconDispatcherStore and LightBarControllerStore
parents 6a1ca545 28b8bb27
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -85,7 +85,6 @@ class OperatorNameViewControllerTest : SysuiTestCase() {


        underTest =
        underTest =
            OperatorNameViewController.Factory(
            OperatorNameViewController.Factory(
                    darkIconDispatcher,
                    tunerService,
                    tunerService,
                    telephonyManager,
                    telephonyManager,
                    keyguardUpdateMonitor,
                    keyguardUpdateMonitor,
@@ -94,7 +93,7 @@ class OperatorNameViewControllerTest : SysuiTestCase() {
                    subscriptionManagerProxy,
                    subscriptionManagerProxy,
                    javaAdapter,
                    javaAdapter,
                )
                )
                .create(view)
                .create(view, darkIconDispatcher)
    }
    }


    @Test
    @Test
+74 −0
Original line number Original line Diff line number Diff line
@@ -23,9 +23,11 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.display.data.repository.displayRepository
import com.android.systemui.display.data.repository.displayRepository
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.statusbar.data.repository.fakeLightBarControllerStore
import com.android.systemui.statusbar.data.repository.fakePrivacyDotWindowControllerStore
import com.android.systemui.statusbar.data.repository.fakePrivacyDotWindowControllerStore
import com.android.systemui.testKosmos
import com.android.systemui.testKosmos
import com.google.common.truth.Expect
import com.google.common.truth.Expect
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.runTest
@@ -48,6 +50,7 @@ class MultiDisplayStatusBarStarterTest : SysuiTestCase() {
    private val fakeOrchestratorFactory = kosmos.fakeStatusBarOrchestratorFactory
    private val fakeOrchestratorFactory = kosmos.fakeStatusBarOrchestratorFactory
    private val fakeInitializerStore = kosmos.fakeStatusBarInitializerStore
    private val fakeInitializerStore = kosmos.fakeStatusBarInitializerStore
    private val fakePrivacyDotStore = kosmos.fakePrivacyDotWindowControllerStore
    private val fakePrivacyDotStore = kosmos.fakePrivacyDotWindowControllerStore
    private val fakeLightBarStore = kosmos.fakeLightBarControllerStore
    // Lazy, so that @EnableFlags is set before initializer is instantiated.
    // Lazy, so that @EnableFlags is set before initializer is instantiated.
    private val underTest by lazy { kosmos.multiDisplayStatusBarStarter }
    private val underTest by lazy { kosmos.multiDisplayStatusBarStarter }


@@ -94,6 +97,31 @@ class MultiDisplayStatusBarStarterTest : SysuiTestCase() {
            verify(fakePrivacyDotStore.forDisplay(displayId = 2)).start()
            verify(fakePrivacyDotStore.forDisplay(displayId = 2)).start()
        }
        }


    @Test
    fun start_doesNotStartLightBarControllerForCurrentDisplays() =
        testScope.runTest {
            fakeDisplayRepository.addDisplay(displayId = 1)
            fakeDisplayRepository.addDisplay(displayId = 2)

            underTest.start()
            runCurrent()

            verify(fakeLightBarStore.forDisplay(displayId = 1), never()).start()
            verify(fakeLightBarStore.forDisplay(displayId = 2), never()).start()
        }

    @Test
    fun start_createsLightBarControllerForCurrentDisplays() =
        testScope.runTest {
            fakeDisplayRepository.addDisplay(displayId = 1)
            fakeDisplayRepository.addDisplay(displayId = 2)

            underTest.start()
            runCurrent()

            assertThat(fakeLightBarStore.perDisplayMocks.keys).containsExactly(1, 2)
        }

    @Test
    @Test
    fun start_doesNotStartPrivacyDotForDefaultDisplay() =
    fun start_doesNotStartPrivacyDotForDefaultDisplay() =
        testScope.runTest {
        testScope.runTest {
@@ -144,6 +172,30 @@ class MultiDisplayStatusBarStarterTest : SysuiTestCase() {
            verify(fakePrivacyDotStore.forDisplay(displayId = 3)).start()
            verify(fakePrivacyDotStore.forDisplay(displayId = 3)).start()
        }
        }


    @Test
    fun displayAdded_lightBarForNewDisplayIsCreated() =
        testScope.runTest {
            underTest.start()
            runCurrent()

            fakeDisplayRepository.addDisplay(displayId = 3)
            runCurrent()

            assertThat(fakeLightBarStore.perDisplayMocks.keys).containsExactly(3)
        }

    @Test
    fun displayAdded_lightBarForNewDisplayIsNotStarted() =
        testScope.runTest {
            underTest.start()
            runCurrent()

            fakeDisplayRepository.addDisplay(displayId = 3)
            runCurrent()

            verify(fakeLightBarStore.forDisplay(displayId = 3), never()).start()
        }

    @Test
    @Test
    fun displayAddedDuringStart_initializerForNewDisplayIsStarted() =
    fun displayAddedDuringStart_initializerForNewDisplayIsStarted() =
        testScope.runTest {
        testScope.runTest {
@@ -178,4 +230,26 @@ class MultiDisplayStatusBarStarterTest : SysuiTestCase() {


            verify(fakePrivacyDotStore.forDisplay(displayId = 3)).start()
            verify(fakePrivacyDotStore.forDisplay(displayId = 3)).start()
        }
        }

    @Test
    fun displayAddedDuringStart_lightBarForNewDisplayIsCreated() =
        testScope.runTest {
            underTest.start()

            fakeDisplayRepository.addDisplay(displayId = 3)
            runCurrent()

            assertThat(fakeLightBarStore.perDisplayMocks.keys).containsExactly(3)
        }

    @Test
    fun displayAddedDuringStart_lightBarForNewDisplayIsNotStarted() =
        testScope.runTest {
            underTest.start()

            fakeDisplayRepository.addDisplay(displayId = 3)
            runCurrent()

            verify(fakeLightBarStore.forDisplay(displayId = 3), never()).start()
        }
}
}
+10 −15
Original line number Original line Diff line number Diff line
@@ -16,10 +16,8 @@


package com.android.systemui.dagger;
package com.android.systemui.dagger;


import android.content.Context;


import com.android.systemui.classifier.FalsingManagerProxy;
import com.android.systemui.classifier.FalsingManagerProxy;
import com.android.systemui.dagger.qualifiers.Default;
import com.android.systemui.globalactions.GlobalActionsComponent;
import com.android.systemui.globalactions.GlobalActionsComponent;
import com.android.systemui.globalactions.GlobalActionsImpl;
import com.android.systemui.globalactions.GlobalActionsImpl;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter;
@@ -29,8 +27,9 @@ import com.android.systemui.plugins.GlobalActions;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.statusbar.data.repository.DarkIconDispatcherStore;
import com.android.systemui.statusbar.data.repository.SysuiDarkIconDispatcherStore;
import com.android.systemui.statusbar.phone.ActivityStarterImpl;
import com.android.systemui.statusbar.phone.ActivityStarterImpl;
import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl;
import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher;
import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher;
import com.android.systemui.volume.VolumeDialogControllerImpl;
import com.android.systemui.volume.VolumeDialogControllerImpl;


@@ -53,20 +52,16 @@ public abstract class PluginModule {
    /** */
    /** */
    @Provides
    @Provides
    @SysUISingleton
    @SysUISingleton
    @Default
    static DarkIconDispatcher provideDarkIconDispatcher(DarkIconDispatcherStore store) {
    static DarkIconDispatcherImpl darkIconDispatcherImpl(
        return store.getDefaultDisplay();
            DarkIconDispatcherImpl.Factory factory, Context context) {
        return factory.create(context.getDisplayId(), context);
    }
    }


    /** */
    @Provides
    @Binds
    @SysUISingleton
    abstract DarkIconDispatcher provideDarkIconDispatcher(
    static SysuiDarkIconDispatcher provideSysuiDarkIconDispatcher(
            @Default DarkIconDispatcherImpl controllerImpl);
            SysuiDarkIconDispatcherStore store) {

        return store.getDefaultDisplay();
    @Binds
    }
    abstract SysuiDarkIconDispatcher provideSysuiDarkIconDispatcher(
            @Default DarkIconDispatcherImpl controllerImpl);


    /** */
    /** */
    @Binds
    @Binds
+6 −6
Original line number Original line Diff line number Diff line
@@ -119,7 +119,6 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>


    /** Factory for constructing an {@link OperatorNameViewController}. */
    /** Factory for constructing an {@link OperatorNameViewController}. */
    public static class Factory {
    public static class Factory {
        private final DarkIconDispatcher mDarkIconDispatcher;
        private final TunerService mTunerService;
        private final TunerService mTunerService;
        private final TelephonyManager mTelephonyManager;
        private final TelephonyManager mTelephonyManager;
        private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
        private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -129,7 +128,7 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
        private final JavaAdapter mJavaAdapter;
        private final JavaAdapter mJavaAdapter;


        @Inject
        @Inject
        public Factory(DarkIconDispatcher darkIconDispatcher,
        public Factory(
                TunerService tunerService,
                TunerService tunerService,
                TelephonyManager telephonyManager,
                TelephonyManager telephonyManager,
                KeyguardUpdateMonitor keyguardUpdateMonitor,
                KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -137,7 +136,6 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
                AirplaneModeInteractor airplaneModeInteractor,
                AirplaneModeInteractor airplaneModeInteractor,
                SubscriptionManagerProxy subscriptionManagerProxy,
                SubscriptionManagerProxy subscriptionManagerProxy,
                JavaAdapter javaAdapter) {
                JavaAdapter javaAdapter) {
            mDarkIconDispatcher = darkIconDispatcher;
            mTunerService = tunerService;
            mTunerService = tunerService;
            mTelephonyManager = telephonyManager;
            mTelephonyManager = telephonyManager;
            mKeyguardUpdateMonitor = keyguardUpdateMonitor;
            mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -148,9 +146,11 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
        }
        }


        /** Create an {@link OperatorNameViewController}. */
        /** Create an {@link OperatorNameViewController}. */
        public OperatorNameViewController create(OperatorNameView view) {
        public OperatorNameViewController create(
            return new OperatorNameViewController(view,
                OperatorNameView view, DarkIconDispatcher darkIconDispatcher) {
                    mDarkIconDispatcher,
            return new OperatorNameViewController(
                    view,
                    darkIconDispatcher,
                    mTunerService,
                    mTunerService,
                    mTelephonyManager,
                    mTelephonyManager,
                    mKeyguardUpdateMonitor,
                    mKeyguardUpdateMonitor,
+10 −0
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.display.data.repository.DisplayRepository
import com.android.systemui.display.data.repository.DisplayRepository
import com.android.systemui.display.data.repository.DisplayScopeRepository
import com.android.systemui.display.data.repository.DisplayScopeRepository
import com.android.systemui.statusbar.data.repository.LightBarControllerStore
import com.android.systemui.statusbar.data.repository.PrivacyDotWindowControllerStore
import com.android.systemui.statusbar.data.repository.PrivacyDotWindowControllerStore
import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore
import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
@@ -50,6 +51,7 @@ constructor(
    private val statusBarWindowControllerStore: StatusBarWindowControllerStore,
    private val statusBarWindowControllerStore: StatusBarWindowControllerStore,
    private val statusBarInitializerStore: StatusBarInitializerStore,
    private val statusBarInitializerStore: StatusBarInitializerStore,
    private val privacyDotWindowControllerStore: PrivacyDotWindowControllerStore,
    private val privacyDotWindowControllerStore: PrivacyDotWindowControllerStore,
    private val lightBarControllerStore: LightBarControllerStore,
) : CoreStartable {
) : CoreStartable {


    init {
    init {
@@ -74,6 +76,14 @@ constructor(
        createAndStartOrchestratorForDisplay(displayId)
        createAndStartOrchestratorForDisplay(displayId)
        createAndStartInitializerForDisplay(displayId)
        createAndStartInitializerForDisplay(displayId)
        startPrivacyDotForDisplay(displayId)
        startPrivacyDotForDisplay(displayId)
        createLightBarControllerForDisplay(displayId)
    }

    private fun createLightBarControllerForDisplay(displayId: Int) {
        // Explicitly not calling `start()`, because the store is already calling `start()`.
        // This is to maintain the legacy behavior with NavigationBar, that was already expecting
        // LightBarController to start at construction time.
        lightBarControllerStore.forDisplay(displayId)
    }
    }


    private fun createAndStartOrchestratorForDisplay(displayId: Int) {
    private fun createAndStartOrchestratorForDisplay(displayId: Int) {
Loading