Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe59b3da authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "[Audiosharing] Cancel notification when BT BLE both off" into main

parents 01cc1040 55cd3c67
Loading
Loading
Loading
Loading
+34 −21
Original line number Diff line number Diff line
@@ -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:
                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);
                } else {
                        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);
                }
                        context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
                        ACTION_LE_AUDIO_SHARING_STOP);
                break;
            default:
                Log.w(TAG, "Received unexpected intent " + intent.getAction());
+58 −10
Original line number Diff line number Diff line
@@ -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,8 +189,10 @@ 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());
@@ -182,12 +202,32 @@ 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_receiveAudioSharingStateOff_broadcastEnabled_cancelNotification() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);

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