diff options
3 files changed, 40 insertions, 10 deletions
diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/turbulencenoise/TurbulenceNoiseAnimationConfig.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/turbulencenoise/TurbulenceNoiseAnimationConfig.kt index 67159512a701..79bc2f432ded 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/turbulencenoise/TurbulenceNoiseAnimationConfig.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/turbulencenoise/TurbulenceNoiseAnimationConfig.kt @@ -57,7 +57,7 @@ data class TurbulenceNoiseAnimationConfig( val onAnimationEnd: Runnable? = null ) { companion object { - const val DEFAULT_MAX_DURATION_IN_MILLIS = 7500f + const val DEFAULT_MAX_DURATION_IN_MILLIS = 30_000f // Max 30 sec const val DEFAULT_EASING_DURATION_IN_MILLIS = 750f const val DEFAULT_LUMINOSITY_MULTIPLIER = 1f const val DEFAULT_NOISE_GRID_COUNT = 1.2f 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 9d1ebb664c10..39dd7336e4d1 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 @@ -112,6 +112,7 @@ import com.android.systemui.surfaceeffects.turbulencenoise.TurbulenceNoiseAnimat import com.android.systemui.surfaceeffects.turbulencenoise.TurbulenceNoiseController; import com.android.systemui.util.ColorUtilKt; import com.android.systemui.util.animation.TransitionLayout; +import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; import dagger.Lazy; @@ -169,10 +170,13 @@ public class MediaControlPanel { R.id.action1 ); + // Time in millis for playing turbulence noise that is played after a touch ripple. + @VisibleForTesting static final long TURBULENCE_NOISE_PLAY_DURATION = 7500L; + private final SeekBarViewModel mSeekBarViewModel; private SeekBarObserver mSeekBarObserver; protected final Executor mBackgroundExecutor; - private final Executor mMainExecutor; + private final DelayableExecutor mMainExecutor; private final ActivityStarter mActivityStarter; private final BroadcastSender mBroadcastSender; @@ -225,10 +229,10 @@ public class MediaControlPanel { private String mSwitchBroadcastApp; private MultiRippleController mMultiRippleController; private TurbulenceNoiseController mTurbulenceNoiseController; - private FeatureFlags mFeatureFlags; - private TurbulenceNoiseAnimationConfig mTurbulenceNoiseAnimationConfig = null; + private final FeatureFlags mFeatureFlags; + private TurbulenceNoiseAnimationConfig mTurbulenceNoiseAnimationConfig; @VisibleForTesting - MultiRippleController.Companion.RipplesFinishedListener mRipplesFinishedListener = null; + MultiRippleController.Companion.RipplesFinishedListener mRipplesFinishedListener; /** * Initialize a new control panel @@ -242,7 +246,7 @@ public class MediaControlPanel { public MediaControlPanel( Context context, @Background Executor backgroundExecutor, - @Main Executor mainExecutor, + @Main DelayableExecutor mainExecutor, ActivityStarter activityStarter, BroadcastSender broadcastSender, MediaViewController mediaViewController, @@ -413,10 +417,12 @@ public class MediaControlPanel { if (mFeatureFlags.isEnabled(Flags.UMO_TURBULENCE_NOISE)) { mRipplesFinishedListener = () -> { if (mTurbulenceNoiseAnimationConfig == null) { - mTurbulenceNoiseAnimationConfig = createLingeringNoiseAnimation(); + mTurbulenceNoiseAnimationConfig = createTurbulenceNoiseAnimation(); } // Color will be correctly updated in ColorSchemeTransition. mTurbulenceNoiseController.play(mTurbulenceNoiseAnimationConfig); + mMainExecutor.executeDelayed( + mTurbulenceNoiseController::finish, TURBULENCE_NOISE_PLAY_DURATION); }; mMultiRippleController.addRipplesFinishedListener(mRipplesFinishedListener); } @@ -1066,7 +1072,7 @@ public class MediaControlPanel { ); } - private TurbulenceNoiseAnimationConfig createLingeringNoiseAnimation() { + private TurbulenceNoiseAnimationConfig createTurbulenceNoiseAnimation() { return new TurbulenceNoiseAnimationConfig( TurbulenceNoiseAnimationConfig.DEFAULT_NOISE_GRID_COUNT, TurbulenceNoiseAnimationConfig.DEFAULT_LUMINOSITY_MULTIPLIER, @@ -1081,7 +1087,9 @@ public class MediaControlPanel { /* width= */ mMediaViewHolder.getMultiRippleView().getWidth(), /* height= */ mMediaViewHolder.getMultiRippleView().getHeight(), TurbulenceNoiseAnimationConfig.DEFAULT_MAX_DURATION_IN_MILLIS, + /* easeInDuration= */ TurbulenceNoiseAnimationConfig.DEFAULT_EASING_DURATION_IN_MILLIS, + /* easeOutDuration= */ TurbulenceNoiseAnimationConfig.DEFAULT_EASING_DURATION_IN_MILLIS, this.getContext().getResources().getDisplayMetrics().density, BlendMode.PLUS, 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 cfb19fc32bec..b35dd266e422 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 @@ -82,6 +82,7 @@ import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.surfaceeffects.ripple.MultiRippleView +import com.android.systemui.surfaceeffects.turbulencenoise.TurbulenceNoiseAnimationConfig import com.android.systemui.surfaceeffects.turbulencenoise.TurbulenceNoiseView import com.android.systemui.util.animation.TransitionLayout import com.android.systemui.util.concurrency.FakeExecutor @@ -225,8 +226,8 @@ public class MediaControlPanelTest : SysuiTestCase() { @Before fun setUp() { - bgExecutor = FakeExecutor(FakeSystemClock()) - mainExecutor = FakeExecutor(FakeSystemClock()) + bgExecutor = FakeExecutor(clock) + mainExecutor = FakeExecutor(clock) whenever(mediaViewController.expandedLayout).thenReturn(expandedSet) whenever(mediaViewController.collapsedLayout).thenReturn(collapsedSet) @@ -2121,6 +2122,27 @@ public class MediaControlPanelTest : SysuiTestCase() { assertThat(player.mRipplesFinishedListener).isNull() } + @Test + fun playTurbulenceNoise_finishesAfterDuration() { + fakeFeatureFlag.set(Flags.UMO_SURFACE_RIPPLE, true) + fakeFeatureFlag.set(Flags.UMO_TURBULENCE_NOISE, true) + + player.attachPlayer(viewHolder) + + mainExecutor.execute { + player.mRipplesFinishedListener.onRipplesFinish() + + assertThat(turbulenceNoiseView.visibility).isEqualTo(View.VISIBLE) + + clock.advanceTime( + MediaControlPanel.TURBULENCE_NOISE_PLAY_DURATION + + TurbulenceNoiseAnimationConfig.DEFAULT_EASING_DURATION_IN_MILLIS.toLong() + ) + + assertThat(turbulenceNoiseView.visibility).isEqualTo(View.INVISIBLE) + } + } + private fun getScrubbingChangeListener(): SeekBarViewModel.ScrubbingChangeListener = withArgCaptor { verify(seekBarViewModel).setScrubbingChangeListener(capture()) |