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
This commit is contained in:
Christian Göllner
2022-02-23 18:35:31 +01:00
parent 6bc26a0374
commit f0733a2530
2 changed files with 150 additions and 2 deletions

View File

@@ -33,8 +33,10 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.media.MediaFlags;
import com.android.systemui.media.MediaHierarchyManager;
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.dagger.QSScope;
@@ -63,6 +65,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
private final FalsingManager mFalsingManager;
private final BrightnessController mBrightnessController;
private final BrightnessSliderController mBrightnessSliderController;
private final MediaFlags mMediaFlags;
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
private final FeatureFlags mFeatureFlags;
@@ -102,7 +105,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
BrightnessSliderController.Factory brightnessSliderFactory,
FalsingManager falsingManager, FeatureFlags featureFlags) {
FalsingManager falsingManager, FeatureFlags featureFlags,
MediaFlags mediaFlags) {
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
metricsLogger, uiEventLogger, qsLogger, dumpManager);
mQSFgsManagerFooter = qsFgsManagerFooter;
@@ -113,6 +117,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
mFalsingManager = falsingManager;
mBrightnessSliderController = brightnessSliderFactory.create(getContext(), mView);
mMediaFlags = mediaFlags;
mView.setBrightnessView(mBrightnessSliderController.getRootView());
mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController);
@@ -133,7 +138,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
}
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

View File

@@ -0,0 +1,136 @@
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)
}
}