From a26baa009609a902212719269f0a5e1e76e4a921 Mon Sep 17 00:00:00 2001 From: Yiyi Shen Date: Thu, 8 Aug 2024 17:55:18 +0800 Subject: [PATCH] [Audiosharing] Fix stop sharing btn in notification When the broadcast is off but the notification mis-stay, click on "Stop sharing" should dismiss the notification. Test: atest Flag: com.android.settingslib.flags.enable_le_audio_sharing Bug: 305620450 Change-Id: Ic5b30f29b8acc06244c38eb357f63ed83985d74a --- .../audiosharing/AudioSharingReceiver.java | 12 +++++-- .../AudioSharingReceiverTest.java | 31 +++++++++++++++---- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java index b43a544e4d6..371613f461d 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java @@ -81,9 +81,15 @@ public class AudioSharingReceiver extends BroadcastReceiver { break; case ACTION_LE_AUDIO_SHARING_STOP: LocalBluetoothManager manager = Utils.getLocalBtManager(context); - AudioSharingUtils.stopBroadcasting(manager); - metricsFeatureProvider.action( - context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION); + if (BluetoothUtils.isBroadcasting(manager)) { + AudioSharingUtils.stopBroadcasting(manager); + metricsFeatureProvider.action( + context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION); + } else { + cancelSharingNotification(context); + metricsFeatureProvider.action( + context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION); + } break; default: Log.w(TAG, "Received unexpected intent " + intent.getAction()); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java index deed229bbcb..db6eb8c72de 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java @@ -25,7 +25,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.times; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @@ -164,8 +164,7 @@ public class AudioSharingReceiverTest { AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent); audioSharingReceiver.onReceive(mContext, intent); - verify(mNm, times(1)) - .notify(eq(R.drawable.ic_bt_le_audio_sharing), any(Notification.class)); + verify(mNm).notify(eq(R.drawable.ic_bt_le_audio_sharing), any(Notification.class)); verify(mFeatureFactory.metricsFeatureProvider) .action(mContext, SettingsEnums.ACTION_SHOW_AUDIO_SHARING_NOTIFICATION); } @@ -181,7 +180,7 @@ public class AudioSharingReceiverTest { AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent); audioSharingReceiver.onReceive(mContext, intent); - verify(mNm, times(1)).cancel(R.drawable.ic_bt_le_audio_sharing); + verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing); verify(mFeatureFactory.metricsFeatureProvider) .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION); } @@ -199,8 +198,10 @@ public class AudioSharingReceiverTest { } @Test - public void broadcastReceiver_receiveAudioSharingStopIntent_stopBroadcast() { + public void + broadcastReceiver_receiveAudioSharingStopIntent_notInBroadcast_cancelNotification() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + when(mBroadcast.isEnabled(null)).thenReturn(false); int broadcastId = 1; when(mBroadcast.getLatestBroadcastId()).thenReturn(broadcastId); @@ -209,7 +210,25 @@ public class AudioSharingReceiverTest { AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent); audioSharingReceiver.onReceive(mContext, intent); - verify(mBroadcast, times(1)).stopBroadcast(broadcastId); + verify(mBroadcast, never()).stopBroadcast(broadcastId); + verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing); + verify(mFeatureFactory.metricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION); + } + + @Test + public void broadcastReceiver_receiveAudioSharingStopIntent_inBroadcast_stopBroadcast() { + mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + when(mBroadcast.isEnabled(null)).thenReturn(true); + int broadcastId = 1; + when(mBroadcast.getLatestBroadcastId()).thenReturn(broadcastId); + + Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STOP); + intent.setPackage(mContext.getPackageName()); + AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent); + audioSharingReceiver.onReceive(mContext, intent); + + verify(mBroadcast).stopBroadcast(broadcastId); verify(mFeatureFactory.metricsFeatureProvider) .action(mContext, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION); }