From 236bbcb8bcf989d1facd301b77b12cdc835c7d27 Mon Sep 17 00:00:00 2001 From: Behnam Heydarshahi Date: Wed, 8 Feb 2023 17:30:25 +0000 Subject: [PATCH] Propagate mute event to both ring volume slices Fix a bug where introduction of a separate_ring_volume slice meant that the original ring_volume slice would not get notified of ring stream muting event. Bug: b/266855922 Test: make DEBUG_ROBOLECTRIC=1 ROBOTEST_FILTER=VolumeSliceHelperTest RunSettingsRoboTests -j40 Change-Id: Ifb5ebe4e7d9bde3d14336891cce3fbee167a5911 --- .../settings/slices/VolumeSliceHelper.java | 4 +- .../slices/VolumeSliceHelperTest.java | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/slices/VolumeSliceHelper.java b/src/com/android/settings/slices/VolumeSliceHelper.java index 5e43b869b0c..486148270c8 100644 --- a/src/com/android/settings/slices/VolumeSliceHelper.java +++ b/src/com/android/settings/slices/VolumeSliceHelper.java @@ -115,7 +115,9 @@ public class VolumeSliceHelper { for (Map.Entry entry : sRegisteredUri.entrySet()) { if (entry.getValue() == inputType) { context.getContentResolver().notifyChange(entry.getKey(), null /* observer */); - break; + if (inputType != AudioManager.STREAM_RING) { // Two URIs are mapped to ring + break; + } } } } diff --git a/tests/robotests/src/com/android/settings/slices/VolumeSliceHelperTest.java b/tests/robotests/src/com/android/settings/slices/VolumeSliceHelperTest.java index 5e22adfb10a..2ceeb253c9c 100644 --- a/tests/robotests/src/com/android/settings/slices/VolumeSliceHelperTest.java +++ b/tests/robotests/src/com/android/settings/slices/VolumeSliceHelperTest.java @@ -35,6 +35,7 @@ import android.net.Uri; import com.android.settings.notification.MediaVolumePreferenceController; import com.android.settings.notification.RingVolumePreferenceController; +import com.android.settings.notification.SeparateRingVolumePreferenceController; import com.android.settings.notification.VolumeSeekBarPreferenceController; import com.android.settingslib.SliceBroadcastRelay; @@ -62,6 +63,7 @@ public class VolumeSliceHelperTest { private Intent mIntent; private VolumeSeekBarPreferenceController mMediaController; private VolumeSeekBarPreferenceController mRingController; + private VolumeSeekBarPreferenceController mSeparateRingController; @Before public void setUp() { @@ -70,6 +72,7 @@ public class VolumeSliceHelperTest { when(mContext.getContentResolver()).thenReturn(mResolver); mMediaController = new MediaVolumePreferenceController(mContext); + mSeparateRingController = new SeparateRingVolumePreferenceController(mContext); mRingController = new RingVolumePreferenceController(mContext); mIntent = createIntent(AudioManager.VOLUME_CHANGED_ACTION) @@ -186,6 +189,43 @@ public class VolumeSliceHelperTest { verify(mResolver, never()).notifyChange(mMediaController.getSliceUri(), null); } + @Test + public void onReceive_ringStreamVolumeMuted_shouldNotifySeparateRing() { + final Intent intent = createIntent(AudioManager.STREAM_MUTE_CHANGED_ACTION) + .putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, mRingController.getAudioStream()); + registerIntentToUri(mRingController); + registerIntentToUri(mSeparateRingController); + + VolumeSliceHelper.onReceive(mContext, intent); + + verify(mResolver).notifyChange(mSeparateRingController.getSliceUri(), null); + } + + @Test + public void onReceive_ringStreamVolumeMuted_shouldNotifyRing() { + final Intent intent = createIntent(AudioManager.STREAM_MUTE_CHANGED_ACTION) + .putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, mRingController.getAudioStream()); + registerIntentToUri(mRingController); + registerIntentToUri(mSeparateRingController); + + VolumeSliceHelper.onReceive(mContext, intent); + + verify(mResolver).notifyChange(mRingController.getSliceUri(), null); + } + + @Test + public void onReceive_ringStreamVolumeMuted_shouldNotifyBothRings() { + final Intent intent = createIntent(AudioManager.STREAM_MUTE_CHANGED_ACTION) + .putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, mRingController.getAudioStream()); + registerIntentToUri(mRingController); + registerIntentToUri(mSeparateRingController); + + VolumeSliceHelper.onReceive(mContext, intent); + + verify(mResolver).notifyChange(mSeparateRingController.getSliceUri(), null); + verify(mResolver).notifyChange(mRingController.getSliceUri(), null); + } + @Test public void onReceive_streamVolumeMuted_shouldNotifyChange() { final Intent intent = createIntent(AudioManager.STREAM_MUTE_CHANGED_ACTION)