Merge "Send an end signal from UMO to finish turbulence noise." into tm-qpr-dev
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 dagger.Lazy;
|
||||
@@ -168,10 +169,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;
|
||||
|
||||
@@ -224,10 +228,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
|
||||
@@ -241,7 +245,7 @@ public class MediaControlPanel {
|
||||
public MediaControlPanel(
|
||||
Context context,
|
||||
@Background Executor backgroundExecutor,
|
||||
@Main Executor mainExecutor,
|
||||
@Main DelayableExecutor mainExecutor,
|
||||
ActivityStarter activityStarter,
|
||||
BroadcastSender broadcastSender,
|
||||
MediaViewController mediaViewController,
|
||||
@@ -412,10 +416,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);
|
||||
}
|
||||
@@ -1063,7 +1069,7 @@ public class MediaControlPanel {
|
||||
);
|
||||
}
|
||||
|
||||
private TurbulenceNoiseAnimationConfig createLingeringNoiseAnimation() {
|
||||
private TurbulenceNoiseAnimationConfig createTurbulenceNoiseAnimation() {
|
||||
return new TurbulenceNoiseAnimationConfig(
|
||||
TurbulenceNoiseAnimationConfig.DEFAULT_NOISE_GRID_COUNT,
|
||||
TurbulenceNoiseAnimationConfig.DEFAULT_LUMINOSITY_MULTIPLIER,
|
||||
@@ -1078,7 +1084,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,
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user