diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java | 51 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt | 24 |
2 files changed, 57 insertions, 18 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java index 14386c1c0fd6..0819d0d36e9a 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java @@ -248,9 +248,9 @@ public class MediaControlPanel { private final FeatureFlags mFeatureFlags; private final GlobalSettings mGlobalSettings; - // TODO(b/281032715): Consider making this as a final variable. For now having a null check - // due to unit test failure. (Perhaps missing some setup) private TurbulenceNoiseAnimationConfig mTurbulenceNoiseAnimationConfig; + private boolean mWasPlaying = false; + private boolean mButtonClicked = false; private ContentObserver mAnimationScaleObserver = new ContentObserver(null) { @Override @@ -582,6 +582,25 @@ public class MediaControlPanel { if (!mMetadataAnimationHandler.isRunning()) { mMediaViewController.refreshState(); } + + // Turbulence noise + if (shouldPlayTurbulenceNoise()) { + if (mTurbulenceNoiseAnimationConfig == null) { + mTurbulenceNoiseAnimationConfig = + createTurbulenceNoiseAnimation(); + } + // Color will be correctly updated in ColorSchemeTransition. + mTurbulenceNoiseController.play( + mTurbulenceNoiseAnimationConfig + ); + mMainExecutor.executeDelayed( + mTurbulenceNoiseController::finish, + TURBULENCE_NOISE_PLAY_DURATION + ); + } + mButtonClicked = false; + mWasPlaying = isPlaying(); + Trace.endSection(); } @@ -1155,21 +1174,14 @@ public class MediaControlPanel { if (!mFalsingManager.isFalseTap(FalsingManager.MODERATE_PENALTY)) { mLogger.logTapAction(button.getId(), mUid, mPackageName, mInstanceId); logSmartspaceCardReported(SMARTSPACE_CARD_CLICK_EVENT); + // Used to determine whether to play turbulence noise. + mWasPlaying = isPlaying(); + mButtonClicked = true; + action.run(); + if (mFeatureFlags.isEnabled(Flags.UMO_SURFACE_RIPPLE)) { mMultiRippleController.play(createTouchRippleAnimation(button)); - if (mFeatureFlags.isEnabled(Flags.UMO_TURBULENCE_NOISE)) { - if (mTurbulenceNoiseAnimationConfig == null) { - mTurbulenceNoiseAnimationConfig = - createTurbulenceNoiseAnimation(); - } - // Color will be correctly updated in ColorSchemeTransition. - mTurbulenceNoiseController.play(mTurbulenceNoiseAnimationConfig); - mMainExecutor.executeDelayed( - mTurbulenceNoiseController::finish, - TURBULENCE_NOISE_PLAY_DURATION - ); - } } if (icon instanceof Animatable) { @@ -1208,6 +1220,11 @@ public class MediaControlPanel { ); } + private boolean shouldPlayTurbulenceNoise() { + return mFeatureFlags.isEnabled(Flags.UMO_TURBULENCE_NOISE) && mButtonClicked && !mWasPlaying + && isPlaying(); + } + private TurbulenceNoiseAnimationConfig createTurbulenceNoiseAnimation() { return new TurbulenceNoiseAnimationConfig( /* gridCount= */ 2.14f, @@ -1218,12 +1235,12 @@ public class MediaControlPanel { /* color= */ mColorSchemeTransition.getAccentPrimary().getCurrentColor(), /* backgroundColor= */ Color.BLACK, /* opacity= */ 51, - /* width= */ mMediaViewHolder.getMultiRippleView().getWidth(), - /* height= */ mMediaViewHolder.getMultiRippleView().getHeight(), + /* width= */ mMediaViewHolder.getTurbulenceNoiseView().getWidth(), + /* height= */ mMediaViewHolder.getTurbulenceNoiseView().getHeight(), TurbulenceNoiseAnimationConfig.DEFAULT_MAX_DURATION_IN_MILLIS, /* easeInDuration= */ 1350f, /* easeOutDuration= */ 1350f, - this.getContext().getResources().getDisplayMetrics().density, + getContext().getResources().getDisplayMetrics().density, BlendMode.SCREEN, /* onAnimationEnd= */ null, /* lumaMatteBlendFactor= */ 0.26f, diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt index 7b673bc2b31e..f6075add6afe 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt @@ -2420,7 +2420,6 @@ public class MediaControlPanelTest : SysuiTestCase() { @Test fun playTurbulenceNoise_finishesAfterDuration() { - fakeFeatureFlag.set(Flags.UMO_SURFACE_RIPPLE, true) fakeFeatureFlag.set(Flags.UMO_TURBULENCE_NOISE, true) val semanticActions = @@ -2452,6 +2451,29 @@ public class MediaControlPanelTest : SysuiTestCase() { } @Test + fun playTurbulenceNoise_whenPlaybackStateIsNotPlaying_doesNotPlayTurbulence() { + fakeFeatureFlag.set(Flags.UMO_TURBULENCE_NOISE, true) + + val semanticActions = + MediaButton( + custom0 = + MediaAction( + icon = null, + action = {}, + contentDescription = "custom0", + background = null + ), + ) + val data = mediaData.copy(semanticActions = semanticActions) + player.attachPlayer(viewHolder) + player.bindPlayer(data, KEY) + + viewHolder.action0.callOnClick() + + assertThat(turbulenceNoiseView.visibility).isEqualTo(View.INVISIBLE) + } + + @Test fun outputSwitcher_hasCustomIntent_openOverLockscreen() { // When the device for a media player has an intent that opens over lockscreen val pendingIntent = mock(PendingIntent::class.java) |