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) {