Send an end signal from UMO to finish turbulence noise.
Bug: 237282226 Test: MediaControlPanelTest Change-Id: Iae61fe96e907ae2f9638703e46483e177a9c7f6a
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -111,6 +111,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 java.net.URISyntaxException;
|
||||
@@ -166,10 +167,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;
|
||||
|
||||
@@ -222,10 +226,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
|
||||
@@ -239,7 +243,7 @@ public class MediaControlPanel {
|
||||
public MediaControlPanel(
|
||||
Context context,
|
||||
@Background Executor backgroundExecutor,
|
||||
@Main Executor mainExecutor,
|
||||
@Main DelayableExecutor mainExecutor,
|
||||
ActivityStarter activityStarter,
|
||||
BroadcastSender broadcastSender,
|
||||
MediaViewController mediaViewController,
|
||||
@@ -409,10 +413,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);
|
||||
}
|
||||
@@ -1056,7 +1062,7 @@ public class MediaControlPanel {
|
||||
);
|
||||
}
|
||||
|
||||
private TurbulenceNoiseAnimationConfig createLingeringNoiseAnimation() {
|
||||
private TurbulenceNoiseAnimationConfig createTurbulenceNoiseAnimation() {
|
||||
return new TurbulenceNoiseAnimationConfig(
|
||||
TurbulenceNoiseAnimationConfig.DEFAULT_NOISE_GRID_COUNT,
|
||||
TurbulenceNoiseAnimationConfig.DEFAULT_LUMINOSITY_MULTIPLIER,
|
||||
@@ -1071,7 +1077,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,
|
||||
|
||||
@@ -81,6 +81,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
|
||||
@@ -222,8 +223,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)
|
||||
|
||||
@@ -2083,6 +2084,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())
|
||||
|
||||
Reference in New Issue
Block a user