diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java index 371613f461d..013b4d402da 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.bluetooth.LocalBluetoothManager; 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 @@ public class AudioSharingReceiver extends BroadcastReceiver { @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 @@ public class AudioSharingReceiver extends BroadcastReceiver { 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 @@ public class AudioSharingReceiver extends BroadcastReceiver { } 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 @@ public class AudioSharingReceiver extends BroadcastReceiver { 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 db6eb8c72de..e72003818bd 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 @@ public class AudioSharingReceiverTest { } @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 @@ public class AudioSharingReceiverTest { 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 @@ public class AudioSharingReceiverTest { 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 @@ public class AudioSharingReceiverTest { @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 @@ public class AudioSharingReceiverTest { 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 @@ public class AudioSharingReceiverTest { 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 @@ public class AudioSharingReceiverTest { 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 @@ public class AudioSharingReceiverTest { 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) {