Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdb7f518 authored by Yein Jo's avatar Yein Jo Committed by Automerger Merge Worker
Browse files

Merge "Send an end signal from UMO to finish turbulence noise." into tm-qpr-dev am: 9099f0fd

parents d11862e6 9099f0fd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+15 −7
Original line number Diff line number Diff line
@@ -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,
+24 −2
Original line number Diff line number Diff line
@@ -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())