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

Commit f0733a25 authored by Christian Göllner's avatar Christian Göllner
Browse files

Split shade: make sure media expanded is expanded on QS when the new

layout is available.

Fixes: 221076838
Test: QSPanelControllerTest + Manually on device
Change-Id: Idb4b44a9b9a50e295c9e576c8323cb279895c7c1
parent 6bc26a03
Loading
Loading
Loading
Loading
+14 −2
Original line number Original line Diff line number Diff line
@@ -33,8 +33,10 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.flags.Flags;
import com.android.systemui.media.MediaFlags;
import com.android.systemui.media.MediaHierarchyManager;
import com.android.systemui.media.MediaHierarchyManager;
import com.android.systemui.media.MediaHost;
import com.android.systemui.media.MediaHost;
import com.android.systemui.media.MediaHostState;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.qs.customize.QSCustomizerController;
import com.android.systemui.qs.customize.QSCustomizerController;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.qs.dagger.QSScope;
@@ -63,6 +65,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
    private final FalsingManager mFalsingManager;
    private final FalsingManager mFalsingManager;
    private final BrightnessController mBrightnessController;
    private final BrightnessController mBrightnessController;
    private final BrightnessSliderController mBrightnessSliderController;
    private final BrightnessSliderController mBrightnessSliderController;
    private final MediaFlags mMediaFlags;
    private final BrightnessMirrorHandler mBrightnessMirrorHandler;
    private final BrightnessMirrorHandler mBrightnessMirrorHandler;
    private final FeatureFlags mFeatureFlags;
    private final FeatureFlags mFeatureFlags;


@@ -102,7 +105,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
            DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
            DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
            QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
            QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
            BrightnessSliderController.Factory brightnessSliderFactory,
            BrightnessSliderController.Factory brightnessSliderFactory,
            FalsingManager falsingManager, FeatureFlags featureFlags) {
            FalsingManager falsingManager, FeatureFlags featureFlags,
            MediaFlags mediaFlags) {
        super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
        super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
                metricsLogger, uiEventLogger, qsLogger, dumpManager);
                metricsLogger, uiEventLogger, qsLogger, dumpManager);
        mQSFgsManagerFooter = qsFgsManagerFooter;
        mQSFgsManagerFooter = qsFgsManagerFooter;
@@ -113,6 +117,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
        mFalsingManager = falsingManager;
        mFalsingManager = falsingManager;


        mBrightnessSliderController = brightnessSliderFactory.create(getContext(), mView);
        mBrightnessSliderController = brightnessSliderFactory.create(getContext(), mView);
        mMediaFlags = mediaFlags;
        mView.setBrightnessView(mBrightnessSliderController.getRootView());
        mView.setBrightnessView(mBrightnessSliderController.getRootView());


        mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController);
        mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController);
@@ -133,7 +138,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
    }
    }


    private void updateMediaExpansion() {
    private void updateMediaExpansion() {
        mMediaHost.setExpansion(Utils.shouldUseSplitNotificationShade(getResources()) ? 0 : 1);
        boolean inSplitShade = Utils.shouldUseSplitNotificationShade(getResources());
        float expansion;
        if (inSplitShade && !mMediaFlags.useMediaSessionLayout()) {
            expansion = MediaHostState.COLLAPSED;
        } else {
            expansion = MediaHostState.EXPANDED;
        }
        mMediaHost.setExpansion(expansion);
    }
    }


    @Override
    @Override
+136 −0
Original line number Original line Diff line number Diff line
package com.android.systemui.qs

import android.test.suitebuilder.annotation.SmallTest
import android.testing.AndroidTestingRunner
import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.UiEventLogger
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.media.MediaFlags
import com.android.systemui.media.MediaHost
import com.android.systemui.media.MediaHostState
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.customize.QSCustomizerController
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.settings.brightness.BrightnessController
import com.android.systemui.settings.brightness.BrightnessSliderController
import com.android.systemui.tuner.TunerService
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.any
import org.mockito.Mockito.reset
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations

@SmallTest
@RunWith(AndroidTestingRunner::class)
class QSPanelControllerTest : SysuiTestCase() {

    @Mock private lateinit var qsPanel: QSPanel
    @Mock private lateinit var qsFgsManagerFooter: QSFgsManagerFooter
    @Mock private lateinit var qsSecurityFooter: QSSecurityFooter
    @Mock private lateinit var tunerService: TunerService
    @Mock private lateinit var qsTileHost: QSTileHost
    @Mock private lateinit var qsCustomizerController: QSCustomizerController
    @Mock private lateinit var qsTileRevealControllerFactory: QSTileRevealController.Factory
    @Mock private lateinit var dumpManager: DumpManager
    @Mock private lateinit var metricsLogger: MetricsLogger
    @Mock private lateinit var uiEventLogger: UiEventLogger
    @Mock private lateinit var qsLogger: QSLogger
    @Mock private lateinit var brightnessControllerFactory: BrightnessController.Factory
    @Mock private lateinit var brightnessController: BrightnessController
    @Mock private lateinit var brightnessSlider: BrightnessSliderController
    @Mock private lateinit var brightnessSliderFactory: BrightnessSliderController.Factory
    @Mock private lateinit var falsingManager: FalsingManager
    @Mock private lateinit var featureFlags: FeatureFlags
    @Mock private lateinit var mediaFlags: MediaFlags
    @Mock private lateinit var mediaHost: MediaHost

    private lateinit var controller: QSPanelController

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider)
        whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController)
        whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources)

        controller = QSPanelController(
            qsPanel,
            qsFgsManagerFooter,
            qsSecurityFooter,
            tunerService,
            qsTileHost,
            qsCustomizerController,
            /* usingMediaPlayer= */ true,
            mediaHost,
            qsTileRevealControllerFactory,
            dumpManager,
            metricsLogger,
            uiEventLogger,
            qsLogger,
            brightnessControllerFactory,
            brightnessSliderFactory,
            falsingManager,
            featureFlags,
            mediaFlags
        )
    }

    @After
    fun tearDown() {
        reset(mediaHost)
    }

    @Test
    fun onInit_notSplitShade_newMediaLayoutAvailable_setsMediaAsExpanded() {
        setSplitShadeEnabled(false)
        whenever(mediaFlags.useMediaSessionLayout()).thenReturn(true)

        controller.onInit()

        verify(mediaHost).expansion = MediaHostState.EXPANDED
    }

    @Test
    fun onInit_notSplitShade_newMediaLayoutNotAvailable_setsMediaAsExpanded() {
        setSplitShadeEnabled(false)
        whenever(mediaFlags.useMediaSessionLayout()).thenReturn(false)

        controller.onInit()

        verify(mediaHost).expansion = MediaHostState.EXPANDED
    }

    @Test
    fun onInit_inSplitShade_newMediaLayoutAvailable_setsMediaAsExpanded() {
        setSplitShadeEnabled(true)
        whenever(mediaFlags.useMediaSessionLayout()).thenReturn(true)

        controller.onInit()

        verify(mediaHost).expansion = MediaHostState.EXPANDED
    }

    @Test
    fun onInit_inSplitShade_newMediaLayoutNotAvailable_setsMediaAsCollapsed() {
        setSplitShadeEnabled(true)
        whenever(mediaFlags.useMediaSessionLayout()).thenReturn(false)

        controller.onInit()

        verify(mediaHost).expansion = MediaHostState.COLLAPSED
    }

    private fun setSplitShadeEnabled(enabled: Boolean) {
        mContext.orCreateTestableResources
            .addOverride(R.bool.config_use_split_notification_shade, enabled)
    }
}