Merge "Make UMO squishy in split shade" into tm-qpr-dev am: 102c1454fb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19761136

Change-Id: I951de5e6e31c3c04821893d9b93243ac9f492514
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sherry Zhou
2022-09-02 21:21:21 +00:00
committed by Automerger Merge Worker
8 changed files with 109 additions and 18 deletions

View File

@@ -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 { private val configListener = object : ConfigurationController.ConfigurationListener {
override fun onDensityOrFontScaleChanged() { override fun onDensityOrFontScaleChanged() {
// System font changes should only happen when UMO is offscreen or a flicker may occur // 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 fun isSsReactivated(key: String): Boolean = mediaData.get(key)?.isSsReactivated ?: false
} }

View File

@@ -28,6 +28,7 @@ import android.view.View;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaCarouselController;
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.media.MediaHostState;
@@ -87,13 +88,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
@Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer, @Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer,
@Named(QS_PANEL) MediaHost mediaHost, @Named(QS_PANEL) MediaHost mediaHost,
QSTileRevealController.Factory qsTileRevealControllerFactory, QSTileRevealController.Factory qsTileRevealControllerFactory,
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, DumpManager dumpManager, MediaCarouselController mediaCarouselController,
MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory, QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
BrightnessSliderController.Factory brightnessSliderFactory, BrightnessSliderController.Factory brightnessSliderFactory,
FalsingManager falsingManager, FalsingManager falsingManager,
StatusBarKeyguardViewManager statusBarKeyguardViewManager) { StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost, super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
metricsLogger, uiEventLogger, qsLogger, dumpManager); metricsLogger, uiEventLogger, qsLogger, dumpManager, mediaCarouselController);
mTunerService = tunerService; mTunerService = tunerService;
mQsCustomizerController = qsCustomizerController; mQsCustomizerController = qsCustomizerController;
mQsTileRevealControllerFactory = qsTileRevealControllerFactory; mQsTileRevealControllerFactory = qsTileRevealControllerFactory;

View File

@@ -31,6 +31,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger;
import com.android.systemui.Dumpable; import com.android.systemui.Dumpable;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaCarouselController;
import com.android.systemui.media.MediaHost; import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTileView; 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 UiEventLogger mUiEventLogger;
private final QSLogger mQSLogger; private final QSLogger mQSLogger;
private final DumpManager mDumpManager; private final DumpManager mDumpManager;
private final MediaCarouselController mMediaCarouselController;
protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
protected boolean mShouldUseSplitNotificationShade; protected boolean mShouldUseSplitNotificationShade;
@@ -122,7 +124,8 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
MetricsLogger metricsLogger, MetricsLogger metricsLogger,
UiEventLogger uiEventLogger, UiEventLogger uiEventLogger,
QSLogger qsLogger, QSLogger qsLogger,
DumpManager dumpManager DumpManager dumpManager,
MediaCarouselController mediaCarouselController
) { ) {
super(view); super(view);
mHost = host; mHost = host;
@@ -135,6 +138,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
mDumpManager = dumpManager; mDumpManager = dumpManager;
mShouldUseSplitNotificationShade = mShouldUseSplitNotificationShade =
LargeScreenUtils.shouldUseSplitNotificationShade(getResources()); LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
mMediaCarouselController = mediaCarouselController;
} }
@Override @Override
@@ -152,6 +156,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
public void setSquishinessFraction(float squishinessFraction) { public void setSquishinessFraction(float squishinessFraction) {
mView.setSquishinessFraction(squishinessFraction); mView.setSquishinessFraction(squishinessFraction);
mMediaCarouselController.setSquishinessFraction(squishinessFraction);
} }
@Override @Override

View File

@@ -26,6 +26,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaCarouselController;
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.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile;
@@ -63,10 +64,10 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
@Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA) @Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA)
Provider<Boolean> usingCollapsedLandscapeMediaProvider, Provider<Boolean> usingCollapsedLandscapeMediaProvider,
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
DumpManager dumpManager DumpManager dumpManager, MediaCarouselController mediaCarouselController
) { ) {
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
uiEventLogger, qsLogger, dumpManager); uiEventLogger, qsLogger, dumpManager, mediaCarouselController);
mUsingCollapsedLandscapeMediaProvider = usingCollapsedLandscapeMediaProvider; mUsingCollapsedLandscapeMediaProvider = usingCollapsedLandscapeMediaProvider;
} }

View File

@@ -28,9 +28,11 @@ import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager
import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
import com.android.systemui.statusbar.policy.ConfigurationController 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.concurrency.DelayableExecutor
import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.time.FakeSystemClock
import javax.inject.Provider
import junit.framework.Assert.assertEquals import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertTrue import junit.framework.Assert.assertTrue
import org.junit.Before import org.junit.Before
@@ -38,8 +40,9 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import javax.inject.Provider
private val DATA = MediaTestUtils.emptyMediaData private val DATA = MediaTestUtils.emptyMediaData
@@ -64,6 +67,10 @@ class MediaCarouselControllerTest : SysuiTestCase() {
@Mock lateinit var dumpManager: DumpManager @Mock lateinit var dumpManager: DumpManager
@Mock lateinit var logger: MediaUiEventLogger @Mock lateinit var logger: MediaUiEventLogger
@Mock lateinit var debugLogger: MediaCarouselControllerLogger @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 val clock = FakeSystemClock()
private lateinit var mediaCarouselController: MediaCarouselController private lateinit var mediaCarouselController: MediaCarouselController
@@ -258,4 +265,44 @@ class MediaCarouselControllerTest : SysuiTestCase() {
verify(logger).logRecommendationRemoved(eq(packageName), eq(instanceId!!)) 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
}
}

View File

@@ -44,6 +44,7 @@ import com.android.internal.logging.testing.UiEventLoggerFake;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaCarouselController;
import com.android.systemui.media.MediaHost; import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTileView; import com.android.systemui.plugins.qs.QSTileView;
@@ -86,6 +87,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
@Mock @Mock
private QSLogger mQSLogger; private QSLogger mQSLogger;
private DumpManager mDumpManager = new DumpManager(); private DumpManager mDumpManager = new DumpManager();
private MediaCarouselController mMediaCarouselController;
@Mock @Mock
QSTileImpl mQSTile; QSTileImpl mQSTile;
@Mock @Mock
@@ -108,9 +110,9 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
protected TestableQSPanelControllerBase(QSPanel view, QSTileHost host, protected TestableQSPanelControllerBase(QSPanel view, QSTileHost host,
QSCustomizerController qsCustomizerController, MediaHost mediaHost, QSCustomizerController qsCustomizerController, MediaHost mediaHost,
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
DumpManager dumpManager) { DumpManager dumpManager, MediaCarouselController mediaCarouselController) {
super(view, host, qsCustomizerController, true, mediaHost, metricsLogger, uiEventLogger, super(view, host, qsCustomizerController, true, mediaHost, metricsLogger, uiEventLogger,
qsLogger, dumpManager); qsLogger, dumpManager, mediaCarouselController);
} }
@Override @Override
@@ -144,7 +146,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost, mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
mQSCustomizerController, mMediaHost, mQSCustomizerController, mMediaHost,
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager); mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController);
mController.init(); mController.init();
reset(mQSTileRevealController); reset(mQSTileRevealController);
@@ -156,7 +158,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
QSPanelControllerBase<QSPanel> controller = new TestableQSPanelControllerBase(mQSPanel, QSPanelControllerBase<QSPanel> controller = new TestableQSPanelControllerBase(mQSPanel,
mQSTileHost, mQSCustomizerController, mMediaHost, mQSTileHost, mQSCustomizerController, mMediaHost,
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager) { mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController) {
@Override @Override
protected QSTileRevealController createTileRevealController() { protected QSTileRevealController createTileRevealController() {
return mQSTileRevealController; return mQSTileRevealController;
@@ -249,7 +251,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
when(mQSPanel.getDumpableTag()).thenReturn("QSPanelLandscape"); when(mQSPanel.getDumpableTag()).thenReturn("QSPanelLandscape");
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost, mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
mQSCustomizerController, mMediaHost, mQSCustomizerController, mMediaHost,
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager); mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController);
mController.init(); mController.init();
assertThat(mController.shouldUseHorizontalLayout()).isTrue(); assertThat(mController.shouldUseHorizontalLayout()).isTrue();
@@ -258,7 +260,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
when(mQSPanel.getDumpableTag()).thenReturn("QSPanelPortrait"); when(mQSPanel.getDumpableTag()).thenReturn("QSPanelPortrait");
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost, mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
mQSCustomizerController, mMediaHost, mQSCustomizerController, mMediaHost,
mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager); mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mMediaCarouselController);
mController.init(); mController.init();
assertThat(mController.shouldUseHorizontalLayout()).isFalse(); assertThat(mController.shouldUseHorizontalLayout()).isFalse();

View File

@@ -6,6 +6,7 @@ import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.UiEventLogger import com.android.internal.logging.UiEventLogger
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.media.MediaCarouselController
import com.android.systemui.media.MediaHost import com.android.systemui.media.MediaHost
import com.android.systemui.media.MediaHostState import com.android.systemui.media.MediaHostState
import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager
@@ -27,8 +28,8 @@ import org.mockito.Mockito
import org.mockito.Mockito.any import org.mockito.Mockito.any
import org.mockito.Mockito.reset import org.mockito.Mockito.reset
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
@SmallTest @SmallTest
@RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class)
@@ -40,6 +41,7 @@ class QSPanelControllerTest : SysuiTestCase() {
@Mock private lateinit var qsCustomizerController: QSCustomizerController @Mock private lateinit var qsCustomizerController: QSCustomizerController
@Mock private lateinit var qsTileRevealControllerFactory: QSTileRevealController.Factory @Mock private lateinit var qsTileRevealControllerFactory: QSTileRevealController.Factory
@Mock private lateinit var dumpManager: DumpManager @Mock private lateinit var dumpManager: DumpManager
@Mock private lateinit var mediaCarouselController: MediaCarouselController
@Mock private lateinit var metricsLogger: MetricsLogger @Mock private lateinit var metricsLogger: MetricsLogger
@Mock private lateinit var uiEventLogger: UiEventLogger @Mock private lateinit var uiEventLogger: UiEventLogger
@Mock private lateinit var qsLogger: QSLogger @Mock private lateinit var qsLogger: QSLogger
@@ -76,6 +78,7 @@ class QSPanelControllerTest : SysuiTestCase() {
mediaHost, mediaHost,
qsTileRevealControllerFactory, qsTileRevealControllerFactory,
dumpManager, dumpManager,
mediaCarouselController,
metricsLogger, metricsLogger,
uiEventLogger, uiEventLogger,
qsLogger, qsLogger,

View File

@@ -23,6 +23,7 @@ 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
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.media.MediaCarouselController
import com.android.systemui.media.MediaHost import com.android.systemui.media.MediaHost
import com.android.systemui.media.MediaHostState import com.android.systemui.media.MediaHostState
import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTile
@@ -59,6 +60,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
@Mock private lateinit var tileLayout: TileLayout @Mock private lateinit var tileLayout: TileLayout
@Mock private lateinit var tileView: QSTileView @Mock private lateinit var tileView: QSTileView
@Captor private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener> @Captor private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
@Mock private lateinit var mediaCarouselController: MediaCarouselController
private val uiEventLogger = UiEventLoggerFake() private val uiEventLogger = UiEventLoggerFake()
private val dumpManager = DumpManager() private val dumpManager = DumpManager()
@@ -88,7 +90,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
metricsLogger, metricsLogger,
uiEventLogger, uiEventLogger,
qsLogger, qsLogger,
dumpManager) dumpManager,
mediaCarouselController)
controller.init() controller.init()
} }
@@ -157,7 +160,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
metricsLogger: MetricsLogger, metricsLogger: MetricsLogger,
uiEventLogger: UiEventLoggerFake, uiEventLogger: UiEventLoggerFake,
qsLogger: QSLogger, qsLogger: QSLogger,
dumpManager: DumpManager dumpManager: DumpManager,
mediaCarouselController: MediaCarouselController
) : ) :
QuickQSPanelController( QuickQSPanelController(
view, view,
@@ -169,7 +173,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
metricsLogger, metricsLogger,
uiEventLogger, uiEventLogger,
qsLogger, qsLogger,
dumpManager) { dumpManager,
mediaCarouselController) {
private var rotation = RotationUtils.ROTATION_NONE private var rotation = RotationUtils.ROTATION_NONE