Merge "[Audiosharing] Cancel notification when BT BLE both off" into main
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java
index 371613f..013b4d4 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java
@@ -38,7 +38,7 @@
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class AudioSharingReceiver extends BroadcastReceiver {
- private static final String TAG = "AudioSharingNotification";
+ private static final String TAG = "AudioSharingReceiver";
private static final String ACTION_LE_AUDIO_SHARING_SETTINGS =
"com.android.settings.BLUETOOTH_AUDIO_SHARING_SETTINGS";
private static final String ACTION_LE_AUDIO_SHARING_STOP =
@@ -49,10 +49,6 @@
@Override
public void onReceive(Context context, Intent intent) {
- if (!BluetoothUtils.isAudioSharingEnabled()) {
- Log.w(TAG, "Skip handling received intent, flag is off.");
- return;
- }
String action = intent.getAction();
if (action == null) {
Log.w(TAG, "Received unexpected intent with null action.");
@@ -66,13 +62,22 @@
intent.getIntExtra(
LocalBluetoothLeBroadcast.EXTRA_LE_AUDIO_SHARING_STATE, -1);
if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_ON) {
+ if (!BluetoothUtils.isAudioSharingEnabled()) {
+ Log.w(TAG, "Skip showSharingNotification, feature disabled.");
+ return;
+ }
showSharingNotification(context);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_SHOW_AUDIO_SHARING_NOTIFICATION);
} else if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_OFF) {
+ // TODO: check BluetoothUtils#isAudioSharingEnabled() till BluetoothAdapter#
+ // isLeAudioBroadcastSourceSupported() and BluetoothAdapter#
+ // isLeAudioBroadcastAssistantSupported() always return FEATURE_SUPPORTED
+ // or FEATURE_NOT_SUPPORTED when BT and BLE off
cancelSharingNotification(context);
metricsFeatureProvider.action(
- context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
+ context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ LocalBluetoothLeBroadcast.ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
} else {
Log.w(
TAG,
@@ -80,16 +85,24 @@
}
break;
case ACTION_LE_AUDIO_SHARING_STOP:
- LocalBluetoothManager manager = Utils.getLocalBtManager(context);
- 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);
+ if (BluetoothUtils.isAudioSharingEnabled()) {
+ LocalBluetoothManager manager = Utils.getLocalBtManager(context);
+ if (BluetoothUtils.isBroadcasting(manager)) {
+ AudioSharingUtils.stopBroadcasting(manager);
+ metricsFeatureProvider.action(
+ context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
+ return;
+ }
}
+ Log.w(TAG, "cancelSharingNotification, feature disabled or not in broadcast.");
+ // TODO: check BluetoothUtils#isAudioSharingEnabled() till BluetoothAdapter#
+ // isLeAudioBroadcastSourceSupported() and BluetoothAdapter#
+ // isLeAudioBroadcastAssistantSupported() always return FEATURE_SUPPORTED
+ // or FEATURE_NOT_SUPPORTED when BT and BLE off
+ cancelSharingNotification(context);
+ metricsFeatureProvider.action(
+ context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
break;
default:
Log.w(TAG, "Received unexpected intent " + intent.getAction());
@@ -129,15 +142,15 @@
PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Action stopAction =
new NotificationCompat.Action.Builder(
- 0,
- context.getString(R.string.audio_sharing_stop_button_label),
- stopPendingIntent)
+ 0,
+ context.getString(R.string.audio_sharing_stop_button_label),
+ stopPendingIntent)
.build();
NotificationCompat.Action settingsAction =
new NotificationCompat.Action.Builder(
- 0,
- context.getString(R.string.audio_sharing_settings_button_label),
- settingsPendingIntent)
+ 0,
+ context.getString(R.string.audio_sharing_settings_button_label),
+ settingsPendingIntent)
.build();
final Bundle extras = new Bundle();
extras.putString(
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 db6eb8c..e720038 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java
@@ -130,7 +130,7 @@
}
@Test
- public void broadcastReceiver_receiveAudioSharingStateChangeIntentFlagOff_doNothing() {
+ public void broadcastReceiver_receiveAudioSharingStateOn_flagOff_doNothing() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -140,6 +140,23 @@
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
+ verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
+ }
+
+ @Test
+ public void broadcastReceiver_receiveAudioSharingStateOn_broadcastDisabled_doNothing() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
+
+ Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
+ intent.setPackage(mContext.getPackageName());
+ intent.putExtra(EXTRA_LE_AUDIO_SHARING_STATE, BROADCAST_STATE_ON);
+ AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent);
+ audioSharingReceiver.onReceive(mContext, intent);
+
+ verifyNoInteractions(mNm);
+ verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
@@ -152,10 +169,11 @@
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
+ verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
- public void broadcastReceiver_receiveAudioSharingStateChangeIntentOnState_showNotification() {
+ public void broadcastReceiver_receiveAudioSharingStateOn_broadcastEnabled_showNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -171,7 +189,26 @@
@Test
public void
- broadcastReceiver_receiveAudioSharingStateChangeIntentOffState_cancelNotification() {
+ broadcastReceiver_receiveAudioSharingStateOff_broadcastDisabled_cancelNotification() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
+
+ Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
+ intent.setPackage(mContext.getPackageName());
+ intent.putExtra(EXTRA_LE_AUDIO_SHARING_STATE, BROADCAST_STATE_OFF);
+ AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent);
+ audioSharingReceiver.onReceive(mContext, intent);
+
+ verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
+ verify(mFeatureFactory.metricsFeatureProvider)
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
+ }
+
+ @Test
+ public void
+ broadcastReceiver_receiveAudioSharingStateOff_broadcastEnabled_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -182,12 +219,15 @@
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
- .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
}
@Test
- public void broadcastReceiver_receiveAudioSharingStopIntentFlagOff_doNothing() {
- mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ public void broadcastReceiver_receiveAudioSharingStop_broadcastDisabled_cancelNotification() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STOP);
intent.setPackage(mContext.getPackageName());
@@ -195,11 +235,14 @@
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mBroadcast);
+ verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
+ verify(mFeatureFactory.metricsFeatureProvider)
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
}
@Test
- public void
- broadcastReceiver_receiveAudioSharingStopIntent_notInBroadcast_cancelNotification() {
+ public void broadcastReceiver_receiveAudioSharingStop_notInBroadcast_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
when(mBroadcast.isEnabled(null)).thenReturn(false);
int broadcastId = 1;
@@ -213,11 +256,12 @@
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);
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
}
@Test
- public void broadcastReceiver_receiveAudioSharingStopIntent_inBroadcast_stopBroadcast() {
+ public void broadcastReceiver_receiveAudioSharingStop_inBroadcast_stopBroadcast() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
when(mBroadcast.isEnabled(null)).thenReturn(true);
int broadcastId = 1;
@@ -231,6 +275,10 @@
verify(mBroadcast).stopBroadcast(broadcastId);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
+ verify(mNm, never()).cancel(R.drawable.ic_bt_le_audio_sharing);
+ verify(mFeatureFactory.metricsFeatureProvider, never())
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
}
private AudioSharingReceiver getAudioSharingReceiver(Intent intent) {