Merge "Fix media having wrong expansion on QQS/landscape after fold/unfold" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
668e915273
@@ -39,6 +39,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
import javax.inject.Provider;
|
||||||
|
|
||||||
/** Controller for {@link QuickQSPanel}. */
|
/** Controller for {@link QuickQSPanel}. */
|
||||||
@QSScope
|
@QSScope
|
||||||
@@ -52,20 +53,21 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final boolean mUsingCollapsedLandscapeMedia;
|
private final Provider<Boolean> mUsingCollapsedLandscapeMediaProvider;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
QuickQSPanelController(QuickQSPanel view, QSTileHost qsTileHost,
|
QuickQSPanelController(QuickQSPanel view, QSTileHost qsTileHost,
|
||||||
QSCustomizerController qsCustomizerController,
|
QSCustomizerController qsCustomizerController,
|
||||||
@Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer,
|
@Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer,
|
||||||
@Named(QUICK_QS_PANEL) MediaHost mediaHost,
|
@Named(QUICK_QS_PANEL) MediaHost mediaHost,
|
||||||
@Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA) boolean usingCollapsedLandscapeMedia,
|
@Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA)
|
||||||
|
Provider<Boolean> usingCollapsedLandscapeMediaProvider,
|
||||||
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
|
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
|
||||||
DumpManager dumpManager
|
DumpManager dumpManager
|
||||||
) {
|
) {
|
||||||
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
|
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
|
||||||
uiEventLogger, qsLogger, dumpManager);
|
uiEventLogger, qsLogger, dumpManager);
|
||||||
mUsingCollapsedLandscapeMedia = usingCollapsedLandscapeMedia;
|
mUsingCollapsedLandscapeMediaProvider = usingCollapsedLandscapeMediaProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -80,7 +82,8 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
int rotation = getRotation();
|
int rotation = getRotation();
|
||||||
boolean isLandscape = rotation == RotationUtils.ROTATION_LANDSCAPE
|
boolean isLandscape = rotation == RotationUtils.ROTATION_LANDSCAPE
|
||||||
|| rotation == RotationUtils.ROTATION_SEASCAPE;
|
|| rotation == RotationUtils.ROTATION_SEASCAPE;
|
||||||
if (!mUsingCollapsedLandscapeMedia || !isLandscape) {
|
boolean usingCollapsedLandscapeMedia = mUsingCollapsedLandscapeMediaProvider.get();
|
||||||
|
if (!usingCollapsedLandscapeMedia || !isLandscape) {
|
||||||
mMediaHost.setExpansion(MediaHost.EXPANDED);
|
mMediaHost.setExpansion(MediaHost.EXPANDED);
|
||||||
} else {
|
} else {
|
||||||
mMediaHost.setExpansion(MediaHost.COLLAPSED);
|
mMediaHost.setExpansion(MediaHost.COLLAPSED);
|
||||||
@@ -126,7 +129,6 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
super.setTiles(tiles, /* collapsedView */ true);
|
super.setTiles(tiles, /* collapsedView */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
public void setContentMargins(int marginStart, int marginEnd) {
|
public void setContentMargins(int marginStart, int marginEnd) {
|
||||||
mView.setContentMargins(marginStart, marginEnd, mMediaHost.getHostView());
|
mView.setContentMargins(marginStart, marginEnd, mMediaHost.getHostView());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
package com.android.systemui.qs
|
package com.android.systemui.qs
|
||||||
|
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.test.suitebuilder.annotation.SmallTest
|
|
||||||
import android.testing.AndroidTestingRunner
|
import android.testing.AndroidTestingRunner
|
||||||
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.logging.MetricsLogger
|
import com.android.internal.logging.MetricsLogger
|
||||||
import com.android.internal.logging.testing.UiEventLoggerFake
|
import com.android.internal.logging.testing.UiEventLoggerFake
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
@@ -38,38 +38,32 @@ import org.mockito.ArgumentCaptor
|
|||||||
import org.mockito.ArgumentMatchers.anyBoolean
|
import org.mockito.ArgumentMatchers.anyBoolean
|
||||||
import org.mockito.Captor
|
import org.mockito.Captor
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.`when`
|
|
||||||
import org.mockito.Mockito.any
|
import org.mockito.Mockito.any
|
||||||
|
import org.mockito.Mockito.reset
|
||||||
import org.mockito.Mockito.times
|
import org.mockito.Mockito.times
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
|
import org.mockito.Mockito.`when` as whenever
|
||||||
import org.mockito.MockitoAnnotations
|
import org.mockito.MockitoAnnotations
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidTestingRunner::class)
|
@RunWith(AndroidTestingRunner::class)
|
||||||
class QuickQSPanelControllerTest : SysuiTestCase() {
|
class QuickQSPanelControllerTest : SysuiTestCase() {
|
||||||
|
|
||||||
@Mock
|
@Mock private lateinit var quickQSPanel: QuickQSPanel
|
||||||
private lateinit var quickQSPanel: QuickQSPanel
|
@Mock private lateinit var qsTileHost: QSTileHost
|
||||||
@Mock
|
@Mock private lateinit var qsCustomizerController: QSCustomizerController
|
||||||
private lateinit var qsTileHost: QSTileHost
|
@Mock private lateinit var mediaHost: MediaHost
|
||||||
@Mock
|
@Mock private lateinit var metricsLogger: MetricsLogger
|
||||||
private lateinit var qsCustomizerController: QSCustomizerController
|
@Mock private lateinit var qsLogger: QSLogger
|
||||||
@Mock
|
@Mock private lateinit var tile: QSTile
|
||||||
private lateinit var mediaHost: MediaHost
|
@Mock private lateinit var tileLayout: TileLayout
|
||||||
@Mock
|
@Mock private lateinit var tileView: QSTileView
|
||||||
private lateinit var metricsLogger: MetricsLogger
|
@Captor private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
|
||||||
|
|
||||||
private val uiEventLogger = UiEventLoggerFake()
|
private val uiEventLogger = UiEventLoggerFake()
|
||||||
@Mock
|
|
||||||
private lateinit var qsLogger: QSLogger
|
|
||||||
private val dumpManager = DumpManager()
|
private val dumpManager = DumpManager()
|
||||||
@Mock
|
|
||||||
private lateinit var tile: QSTile
|
private var usingCollapsedLandscapeMedia = true
|
||||||
@Mock
|
|
||||||
private lateinit var tileLayout: TileLayout
|
|
||||||
@Mock
|
|
||||||
private lateinit var tileView: QSTileView
|
|
||||||
@Captor
|
|
||||||
private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
|
|
||||||
|
|
||||||
private lateinit var controller: TestQuickQSPanelController
|
private lateinit var controller: TestQuickQSPanelController
|
||||||
|
|
||||||
@@ -77,24 +71,24 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
|
||||||
`when`(quickQSPanel.tileLayout).thenReturn(tileLayout)
|
whenever(quickQSPanel.tileLayout).thenReturn(tileLayout)
|
||||||
`when`(quickQSPanel.isAttachedToWindow).thenReturn(true)
|
whenever(quickQSPanel.isAttachedToWindow).thenReturn(true)
|
||||||
`when`(quickQSPanel.dumpableTag).thenReturn("")
|
whenever(quickQSPanel.dumpableTag).thenReturn("")
|
||||||
`when`(quickQSPanel.resources).thenReturn(mContext.resources)
|
whenever(quickQSPanel.resources).thenReturn(mContext.resources)
|
||||||
`when`(qsTileHost.createTileView(any(), any(), anyBoolean())).thenReturn(tileView)
|
whenever(qsTileHost.createTileView(any(), any(), anyBoolean())).thenReturn(tileView)
|
||||||
|
|
||||||
controller = TestQuickQSPanelController(
|
controller =
|
||||||
|
TestQuickQSPanelController(
|
||||||
quickQSPanel,
|
quickQSPanel,
|
||||||
qsTileHost,
|
qsTileHost,
|
||||||
qsCustomizerController,
|
qsCustomizerController,
|
||||||
false,
|
/* usingMediaPlayer = */ false,
|
||||||
mediaHost,
|
mediaHost,
|
||||||
true,
|
{ usingCollapsedLandscapeMedia },
|
||||||
metricsLogger,
|
metricsLogger,
|
||||||
uiEventLogger,
|
uiEventLogger,
|
||||||
qsLogger,
|
qsLogger,
|
||||||
dumpManager
|
dumpManager)
|
||||||
)
|
|
||||||
|
|
||||||
controller.init()
|
controller.init()
|
||||||
}
|
}
|
||||||
@@ -106,9 +100,9 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testTileSublistWithFewerTiles_noCrash() {
|
fun testTileSublistWithFewerTiles_noCrash() {
|
||||||
`when`(quickQSPanel.numQuickTiles).thenReturn(3)
|
whenever(quickQSPanel.numQuickTiles).thenReturn(3)
|
||||||
|
|
||||||
`when`(qsTileHost.tiles).thenReturn(listOf(tile, tile))
|
whenever(qsTileHost.tiles).thenReturn(listOf(tile, tile))
|
||||||
|
|
||||||
controller.setTiles()
|
controller.setTiles()
|
||||||
}
|
}
|
||||||
@@ -116,8 +110,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
@Test
|
@Test
|
||||||
fun testTileSublistWithTooManyTiles() {
|
fun testTileSublistWithTooManyTiles() {
|
||||||
val limit = 3
|
val limit = 3
|
||||||
`when`(quickQSPanel.numQuickTiles).thenReturn(limit)
|
whenever(quickQSPanel.numQuickTiles).thenReturn(limit)
|
||||||
`when`(qsTileHost.tiles).thenReturn(listOf(tile, tile, tile, tile))
|
whenever(qsTileHost.tiles).thenReturn(listOf(tile, tile, tile, tile))
|
||||||
|
|
||||||
controller.setTiles()
|
controller.setTiles()
|
||||||
|
|
||||||
@@ -125,39 +119,61 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMediaExpansionUpdatedWhenConfigurationChanged() {
|
fun mediaExpansion_afterConfigChange_inLandscape_collapsedInLandscapeTrue_updatesToCollapsed() {
|
||||||
// times(2) because both controller and base controller are registering their listeners
|
// times(2) because both controller and base controller are registering their listeners
|
||||||
verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture())
|
verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture())
|
||||||
|
|
||||||
// verify that media starts in the expanded state by default
|
// verify that media starts in the expanded state by default
|
||||||
verify(mediaHost).expansion = MediaHostState.EXPANDED
|
verify(mediaHost).expansion = MediaHostState.EXPANDED
|
||||||
|
|
||||||
// Rotate device, verify media size updated
|
// Rotate device, verify media size updated to collapsed
|
||||||
|
usingCollapsedLandscapeMedia = true
|
||||||
controller.setRotation(RotationUtils.ROTATION_LANDSCAPE)
|
controller.setRotation(RotationUtils.ROTATION_LANDSCAPE)
|
||||||
captor.allValues.forEach { it.onConfigurationChange(Configuration.EMPTY) }
|
captor.allValues.forEach { it.onConfigurationChange(Configuration.EMPTY) }
|
||||||
|
|
||||||
verify(mediaHost).expansion = MediaHostState.COLLAPSED
|
verify(mediaHost).expansion = MediaHostState.COLLAPSED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun mediaExpansion_afterConfigChange_landscape_collapsedInLandscapeFalse_remainsExpanded() {
|
||||||
|
// times(2) because both controller and base controller are registering their listeners
|
||||||
|
verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture())
|
||||||
|
reset(mediaHost)
|
||||||
|
|
||||||
|
usingCollapsedLandscapeMedia = false
|
||||||
|
controller.setRotation(RotationUtils.ROTATION_LANDSCAPE)
|
||||||
|
captor.allValues.forEach { it.onConfigurationChange(Configuration.EMPTY) }
|
||||||
|
|
||||||
|
verify(mediaHost).expansion = MediaHostState.EXPANDED
|
||||||
|
}
|
||||||
|
|
||||||
class TestQuickQSPanelController(
|
class TestQuickQSPanelController(
|
||||||
view: QuickQSPanel,
|
view: QuickQSPanel,
|
||||||
qsTileHost: QSTileHost,
|
qsTileHost: QSTileHost,
|
||||||
qsCustomizerController: QSCustomizerController,
|
qsCustomizerController: QSCustomizerController,
|
||||||
usingMediaPlayer: Boolean,
|
usingMediaPlayer: Boolean,
|
||||||
mediaHost: MediaHost,
|
mediaHost: MediaHost,
|
||||||
usingCollapsedLandscapeMedia: Boolean,
|
usingCollapsedLandscapeMedia: () -> Boolean,
|
||||||
metricsLogger: MetricsLogger,
|
metricsLogger: MetricsLogger,
|
||||||
uiEventLogger: UiEventLoggerFake,
|
uiEventLogger: UiEventLoggerFake,
|
||||||
qsLogger: QSLogger,
|
qsLogger: QSLogger,
|
||||||
dumpManager: DumpManager
|
dumpManager: DumpManager
|
||||||
) : QuickQSPanelController(view, qsTileHost, qsCustomizerController, usingMediaPlayer,
|
) :
|
||||||
mediaHost, usingCollapsedLandscapeMedia, metricsLogger, uiEventLogger, qsLogger,
|
QuickQSPanelController(
|
||||||
dumpManager) {
|
view,
|
||||||
|
qsTileHost,
|
||||||
|
qsCustomizerController,
|
||||||
|
usingMediaPlayer,
|
||||||
|
mediaHost,
|
||||||
|
usingCollapsedLandscapeMedia,
|
||||||
|
metricsLogger,
|
||||||
|
uiEventLogger,
|
||||||
|
qsLogger,
|
||||||
|
dumpManager) {
|
||||||
|
|
||||||
private var rotation = RotationUtils.ROTATION_NONE
|
private var rotation = RotationUtils.ROTATION_NONE
|
||||||
|
|
||||||
@Override
|
@Override override fun getRotation(): Int = rotation
|
||||||
override fun getRotation(): Int = rotation
|
|
||||||
|
|
||||||
fun setRotation(newRotation: Int) {
|
fun setRotation(newRotation: Int) {
|
||||||
rotation = newRotation
|
rotation = newRotation
|
||||||
|
|||||||
Reference in New Issue
Block a user