From e503583172586839827ee8c7723035ab4ad17899 Mon Sep 17 00:00:00 2001 From: Johannes Gallmann Date: Thu, 29 Dec 2022 12:35:21 +0100 Subject: [PATCH] Fix volume dialog dismiss animation The root cause of the problem is that within `mController.notifyVisible(false)` `updateActiveStreamW(-1)` is called. This causes the slider to be set to inactive which changes its color. By calling the callback after the animation ended, this problem is fixed. Bug: 240682583 Test: atest VolumeDialogImplTest, Manual, i.e. changing the volume and observing the animation when the VolumeDialog dismisses. Change-Id: I928564202036ce7447d0cbae98302af8bf66c600 --- .../com/android/systemui/volume/VolumeDialogImpl.java | 2 +- .../android/systemui/volume/VolumeDialogImplTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index db1853d37817e..52eef421eb8c9 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -1487,6 +1487,7 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable, .setDuration(mDialogHideAnimationDurationMs) .setInterpolator(new SystemUIInterpolators.LogAccelerateInterpolator()) .withEndAction(() -> mHandler.postDelayed(() -> { + mController.notifyVisible(false); mDialog.dismiss(); tryToRemoveCaptionsTooltip(); mIsAnimatingDismiss = false; @@ -1497,7 +1498,6 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable, animator.setListener(getJankListener(getDialogView(), TYPE_DISMISS, mDialogHideAnimationDurationMs)).start(); checkODICaptionsTooltip(true); - mController.notifyVisible(false); synchronized (mSafetyWarningLock) { if (mSafetyWarning != null) { if (D.BUG) Log.d(TAG, "SafetyWarning dismissed"); diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java index c3c6975af870a..d419095921b86 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java @@ -16,6 +16,7 @@ package com.android.systemui.volume; +import static com.android.systemui.volume.Events.DISMISS_REASON_UNKNOWN; import static com.android.systemui.volume.VolumeDialogControllerImpl.STREAMS; import static junit.framework.Assert.assertEquals; @@ -342,6 +343,15 @@ public class VolumeDialogImplTest extends SysuiTestCase { assertEquals(mDialog.mVolumeRingerMuteIconDrawableId, R.drawable.ic_volume_ringer_mute); } + @Test + public void testDialogDismissAnimation_notifyVisibleIsNotCalledBeforeAnimation() { + mDialog.dismissH(DISMISS_REASON_UNKNOWN); + // notifyVisible(false) should not be called immediately but only after the dismiss + // animation has ended. + verify(mVolumeDialogController, times(0)).notifyVisible(false); + mDialog.getDialogView().animate().cancel(); + } + /* @Test public void testContentDescriptions() {