Make UMO squishy in split shade
Test: MediaCarouselControllerTest Bug: 233237791 Change-Id: I543c187088c5623bb1e2d8d8814d11c83e575df1
This commit is contained in:
@@ -148,6 +148,32 @@ class MediaCarouselController @Inject constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val SQUISHINESS_SCALE_START = 0.5
|
||||
private const val SQUISHINESS_SCALE_FACTOR = 0.5
|
||||
private fun getSquishinessScale(squishinessFraction: Float): Double {
|
||||
return SQUISHINESS_SCALE_START + SQUISHINESS_SCALE_FACTOR * squishinessFraction
|
||||
}
|
||||
}
|
||||
|
||||
var squishinessFraction: Float = 1f
|
||||
set(value) {
|
||||
if (field == value) {
|
||||
return
|
||||
}
|
||||
field = value
|
||||
|
||||
val scale = getSquishinessScale(field)
|
||||
for (mediaPlayer in MediaPlayerData.players()) {
|
||||
mediaPlayer.mediaViewHolder?.let {
|
||||
it.player.bottom = it.player.top + (scale * it.player.measuredHeight).toInt()
|
||||
} ?: mediaPlayer.recommendationViewHolder?.let {
|
||||
it.recommendations.bottom = it.recommendations.top +
|
||||
(scale * it.recommendations.measuredHeight).toInt()
|
||||
}
|
||||
}
|
||||
}
|
||||
private val configListener = object : ConfigurationController.ConfigurationListener {
|
||||
override fun onDensityOrFontScaleChanged() {
|
||||
// System font changes should only happen when UMO is offscreen or a flicker may occur
|
||||
@@ -1076,4 +1102,4 @@ internal object MediaPlayerData {
|
||||
}
|
||||
|
||||
fun isSsReactivated(key: String): Boolean = mediaData.get(key)?.isSsReactivated ?: false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.media.MediaCarouselController;
|
||||
import com.android.systemui.media.MediaHierarchyManager;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.media.MediaHostState;
|
||||
@@ -90,13 +91,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
||||
@Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer,
|
||||
@Named(QS_PANEL) MediaHost mediaHost,
|
||||
QSTileRevealController.Factory qsTileRevealControllerFactory,
|
||||
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
|
||||
DumpManager dumpManager, MediaCarouselController mediaCarouselController,
|
||||
MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
|
||||
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
|
||||
BrightnessSliderController.Factory brightnessSliderFactory,
|
||||
FalsingManager falsingManager,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
|
||||
metricsLogger, uiEventLogger, qsLogger, dumpManager);
|
||||
metricsLogger, uiEventLogger, qsLogger, dumpManager, mediaCarouselController);
|
||||
mTunerService = tunerService;
|
||||
mQsCustomizerController = qsCustomizerController;
|
||||
mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
|
||||
|
||||
@@ -31,6 +31,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.media.MediaCarouselController;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
import com.android.systemui.plugins.qs.QSTileView;
|
||||
@@ -68,6 +69,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
|
||||
private final UiEventLogger mUiEventLogger;
|
||||
private final QSLogger mQSLogger;
|
||||
private final DumpManager mDumpManager;
|
||||
private final MediaCarouselController mMediaCarouselController;
|
||||
protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
|
||||
protected boolean mShouldUseSplitNotificationShade;
|
||||
|
||||
@@ -122,7 +124,8 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
|
||||
MetricsLogger metricsLogger,
|
||||
UiEventLogger uiEventLogger,
|
||||
QSLogger qsLogger,
|
||||
DumpManager dumpManager
|
||||
DumpManager dumpManager,
|
||||
MediaCarouselController mediaCarouselController
|
||||
) {
|
||||
super(view);
|
||||
mHost = host;
|
||||
@@ -135,6 +138,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
|
||||
mDumpManager = dumpManager;
|
||||
mShouldUseSplitNotificationShade =
|
||||
LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
|
||||
mMediaCarouselController = mediaCarouselController;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -152,6 +156,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
|
||||
|
||||
public void setSquishinessFraction(float squishinessFraction) {
|
||||
mView.setSquishinessFraction(squishinessFraction);
|
||||
mMediaCarouselController.setSquishinessFraction(squishinessFraction);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.media.MediaCarouselController;
|
||||
import com.android.systemui.media.MediaHierarchyManager;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
@@ -63,10 +64,10 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
||||
@Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA)
|
||||
Provider<Boolean> usingCollapsedLandscapeMediaProvider,
|
||||
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
|
||||
DumpManager dumpManager
|
||||
DumpManager dumpManager, MediaCarouselController mediaCarouselController
|
||||
) {
|
||||
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
|
||||
uiEventLogger, qsLogger, dumpManager);
|
||||
uiEventLogger, qsLogger, dumpManager, mediaCarouselController);
|
||||
mUsingCollapsedLandscapeMediaProvider = usingCollapsedLandscapeMediaProvider;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,9 +28,11 @@ import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.plugins.FalsingManager
|
||||
import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||
import com.android.systemui.util.animation.TransitionLayout
|
||||
import com.android.systemui.util.concurrency.DelayableExecutor
|
||||
import com.android.systemui.util.mockito.eq
|
||||
import com.android.systemui.util.time.FakeSystemClock
|
||||
import javax.inject.Provider
|
||||
import junit.framework.Assert.assertEquals
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
@@ -38,8 +40,9 @@ import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.Mockito.verifyNoMoreInteractions
|
||||
import org.mockito.Mockito.`when` as whenever
|
||||
import org.mockito.MockitoAnnotations
|
||||
import javax.inject.Provider
|
||||
|
||||
private val DATA = MediaTestUtils.emptyMediaData
|
||||
|
||||
@@ -64,6 +67,10 @@ class MediaCarouselControllerTest : SysuiTestCase() {
|
||||
@Mock lateinit var dumpManager: DumpManager
|
||||
@Mock lateinit var logger: MediaUiEventLogger
|
||||
@Mock lateinit var debugLogger: MediaCarouselControllerLogger
|
||||
@Mock lateinit var mediaViewHolder: MediaViewHolder
|
||||
@Mock lateinit var player: TransitionLayout
|
||||
@Mock lateinit var recommendationViewHolder: RecommendationViewHolder
|
||||
@Mock lateinit var recommendations: TransitionLayout
|
||||
|
||||
private val clock = FakeSystemClock()
|
||||
private lateinit var mediaCarouselController: MediaCarouselController
|
||||
@@ -258,4 +265,44 @@ class MediaCarouselControllerTest : SysuiTestCase() {
|
||||
|
||||
verify(logger).logRecommendationRemoved(eq(packageName), eq(instanceId!!))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSetSquishinessFractionForMedia_setPlayerBottom() {
|
||||
whenever(panel.mediaViewHolder).thenReturn(mediaViewHolder)
|
||||
whenever(mediaViewHolder.player).thenReturn(player)
|
||||
whenever(player.measuredHeight).thenReturn(100)
|
||||
|
||||
val playingLocal = Triple("playing local",
|
||||
DATA.copy(active = true, isPlaying = true,
|
||||
playbackLocation = MediaData.PLAYBACK_LOCAL, resumption = false),
|
||||
4500L)
|
||||
MediaPlayerData.addMediaPlayer(playingLocal.first, playingLocal.second, panel, clock,
|
||||
false, debugLogger)
|
||||
|
||||
mediaCarouselController.squishinessFraction = 0.0f
|
||||
verify(player).bottom = 50
|
||||
verifyNoMoreInteractions(recommendationViewHolder)
|
||||
|
||||
mediaCarouselController.squishinessFraction = 0.5f
|
||||
verify(player).bottom = 75
|
||||
verifyNoMoreInteractions(recommendationViewHolder)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSetSquishinessFractionForRecommendation_setPlayerBottom() {
|
||||
whenever(panel.recommendationViewHolder).thenReturn(recommendationViewHolder)
|
||||
whenever(recommendationViewHolder.recommendations).thenReturn(recommendations)
|
||||
whenever(recommendations.measuredHeight).thenReturn(100)
|
||||
|
||||
MediaPlayerData.addMediaRecommendation(SMARTSPACE_KEY, EMPTY_SMARTSPACE_MEDIA_DATA, panel,
|
||||
false, clock)
|
||||
|
||||
mediaCarouselController.squishinessFraction = 0.0f
|
||||
verifyNoMoreInteractions(mediaViewHolder)
|
||||
verify(recommendationViewHolder.recommendations).bottom = 50
|
||||
|
||||
mediaCarouselController.squishinessFraction = 0.5f
|
||||
verifyNoMoreInteractions(mediaViewHolder)
|
||||
verify(recommendationViewHolder.recommendations).bottom = 75
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.android.internal.logging.testing.UiEventLoggerFake;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.media.MediaCarouselController;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
import com.android.systemui.plugins.qs.QSTileView;
|
||||
@@ -86,6 +87,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private QSLogger mQSLogger;
|
||||
private DumpManager mDumpManager = new DumpManager();
|
||||
private MediaCarouselController mMediaCarouselController;
|
||||
@Mock
|
||||
QSTileImpl mQSTile;
|
||||
@Mock
|
||||
@@ -108,9 +110,9 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
|
||||
protected TestableQSPanelControllerBase(QSPanel view, QSTileHost host,
|
||||
QSCustomizerController qsCustomizerController, MediaHost mediaHost,
|
||||
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
|
||||
DumpManager dumpManager) {
|
||||
DumpManager dumpManager, MediaCarouselController mediaCarouselController) {
|
||||
super(view, host, qsCustomizerController, true, mediaHost, metricsLogger, uiEventLogger,
|
||||
qsLogger, dumpManager);
|
||||
qsLogger, dumpManager, mediaCarouselController);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -144,7 +146,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
|
||||
|
||||
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
|
||||
mQSCustomizerController, mMediaHost,
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager);
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController);
|
||||
|
||||
mController.init();
|
||||
reset(mQSTileRevealController);
|
||||
@@ -156,7 +158,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
|
||||
|
||||
QSPanelControllerBase<QSPanel> controller = new TestableQSPanelControllerBase(mQSPanel,
|
||||
mQSTileHost, mQSCustomizerController, mMediaHost,
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager) {
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController) {
|
||||
@Override
|
||||
protected QSTileRevealController createTileRevealController() {
|
||||
return mQSTileRevealController;
|
||||
@@ -249,7 +251,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
|
||||
when(mQSPanel.getDumpableTag()).thenReturn("QSPanelLandscape");
|
||||
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
|
||||
mQSCustomizerController, mMediaHost,
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager);
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController);
|
||||
mController.init();
|
||||
|
||||
assertThat(mController.shouldUseHorizontalLayout()).isTrue();
|
||||
@@ -258,7 +260,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
|
||||
when(mQSPanel.getDumpableTag()).thenReturn("QSPanelPortrait");
|
||||
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
|
||||
mQSCustomizerController, mMediaHost,
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager);
|
||||
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController);
|
||||
mController.init();
|
||||
|
||||
assertThat(mController.shouldUseHorizontalLayout()).isFalse();
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.android.internal.logging.MetricsLogger
|
||||
import com.android.internal.logging.UiEventLogger
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.media.MediaCarouselController
|
||||
import com.android.systemui.media.MediaHost
|
||||
import com.android.systemui.media.MediaHostState
|
||||
import com.android.systemui.plugins.FalsingManager
|
||||
@@ -27,8 +28,8 @@ import org.mockito.Mockito
|
||||
import org.mockito.Mockito.any
|
||||
import org.mockito.Mockito.reset
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
import org.mockito.Mockito.`when` as whenever
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
@@ -40,6 +41,7 @@ class QSPanelControllerTest : SysuiTestCase() {
|
||||
@Mock private lateinit var qsCustomizerController: QSCustomizerController
|
||||
@Mock private lateinit var qsTileRevealControllerFactory: QSTileRevealController.Factory
|
||||
@Mock private lateinit var dumpManager: DumpManager
|
||||
@Mock private lateinit var mediaCarouselController: MediaCarouselController
|
||||
@Mock private lateinit var metricsLogger: MetricsLogger
|
||||
@Mock private lateinit var uiEventLogger: UiEventLogger
|
||||
@Mock private lateinit var qsLogger: QSLogger
|
||||
@@ -76,6 +78,7 @@ class QSPanelControllerTest : SysuiTestCase() {
|
||||
mediaHost,
|
||||
qsTileRevealControllerFactory,
|
||||
dumpManager,
|
||||
mediaCarouselController,
|
||||
metricsLogger,
|
||||
uiEventLogger,
|
||||
qsLogger,
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.android.internal.logging.MetricsLogger
|
||||
import com.android.internal.logging.testing.UiEventLoggerFake
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.media.MediaCarouselController
|
||||
import com.android.systemui.media.MediaHost
|
||||
import com.android.systemui.media.MediaHostState
|
||||
import com.android.systemui.plugins.qs.QSTile
|
||||
@@ -59,6 +60,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
||||
@Mock private lateinit var tileLayout: TileLayout
|
||||
@Mock private lateinit var tileView: QSTileView
|
||||
@Captor private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
|
||||
@Mock private lateinit var mediaCarouselController: MediaCarouselController
|
||||
|
||||
private val uiEventLogger = UiEventLoggerFake()
|
||||
private val dumpManager = DumpManager()
|
||||
@@ -88,7 +90,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
||||
metricsLogger,
|
||||
uiEventLogger,
|
||||
qsLogger,
|
||||
dumpManager)
|
||||
dumpManager,
|
||||
mediaCarouselController)
|
||||
|
||||
controller.init()
|
||||
}
|
||||
@@ -157,7 +160,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
||||
metricsLogger: MetricsLogger,
|
||||
uiEventLogger: UiEventLoggerFake,
|
||||
qsLogger: QSLogger,
|
||||
dumpManager: DumpManager
|
||||
dumpManager: DumpManager,
|
||||
mediaCarouselController: MediaCarouselController
|
||||
) :
|
||||
QuickQSPanelController(
|
||||
view,
|
||||
@@ -169,7 +173,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
||||
metricsLogger,
|
||||
uiEventLogger,
|
||||
qsLogger,
|
||||
dumpManager) {
|
||||
dumpManager,
|
||||
mediaCarouselController) {
|
||||
|
||||
private var rotation = RotationUtils.ROTATION_NONE
|
||||
|
||||
|
||||
Reference in New Issue
Block a user