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

Commit 22e3f517 authored by Yiyi Shen's avatar Yiyi Shen
Browse files

[Audiosharing] Update media devices section.

1. Filter out the media devices in audio sharing from the section.
2. During the audio sharing, click the media device will lead to
   stopping the sharing.

Flagged with enable_le_audio_sharing

Bug: 305620450
Test: atest AvailableMediaBluetoothDeviceUpdaterTest.java
Change-Id: I0676fd5aa98e593c6a5458845fc1b1631a5a6698
parent 517ab6e0
Loading
Loading
Loading
Loading
+45 −14
Original line number Diff line number Diff line
@@ -23,11 +23,11 @@ import android.util.Log;
import androidx.preference.Preference;

import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.connecteddevice.audiosharing.AudioSharingUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;

/**
 * Controller to maintain available media Bluetooth devices
 */
/** Controller to maintain available media Bluetooth devices */
public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
        implements Preference.OnPreferenceClickListener {

@@ -37,11 +37,15 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
    private static final String PREF_KEY = "available_media_bt";

    private final AudioManager mAudioManager;
    private final LocalBluetoothManager mLocalBtManager;

    public AvailableMediaBluetoothDeviceUpdater(Context context,
            DevicePreferenceCallback devicePreferenceCallback, int metricsCategory) {
    public AvailableMediaBluetoothDeviceUpdater(
            Context context,
            DevicePreferenceCallback devicePreferenceCallback,
            int metricsCategory) {
        super(context, devicePreferenceCallback, metricsCategory);
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        mLocalBtManager = Utils.getLocalBtManager(context);
    }

    @Override
@@ -69,14 +73,30 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
            if (DBG) {
                Log.d(TAG, "isFilterMatched() current audio profile : " + currentAudioProfile);
            }
            // If device is Hearing Aid or LE Audio, it is compatible with HFP and A2DP.
            // If device is Hearing Aid, it is compatible with HFP and A2DP.
            // It would show in Available Devices group.
            if (cachedDevice.isConnectedAshaHearingAidDevice()
                    || cachedDevice.isConnectedLeAudioDevice()) {
                Log.d(TAG, "isFilterMatched() device : " +
                        cachedDevice.getName() + ", the profile is connected.");
            if (cachedDevice.isConnectedAshaHearingAidDevice()) {
                Log.d(
                        TAG,
                        "isFilterMatched() device : "
                                + cachedDevice.getName()
                                + ", the Hearing Aid profile is connected.");
                return true;
            }
            // If device is LE Audio, it is compatible with HFP and A2DP.
            // It would show in Available Devices group if the audio sharing flag is disabled or
            // the device is not in the audio sharing session.
            if (cachedDevice.isConnectedLeAudioDevice()) {
                if (!AudioSharingUtils.isFeatureEnabled()
                        || !AudioSharingUtils.hasBroadcastSource(cachedDevice, mLocalManager)) {
                    Log.d(
                            TAG,
                            "isFilterMatched() device : "
                                    + cachedDevice.getName()
                                    + ", the LE Audio profile is connected and not in sharing.");
                    return true;
                }
            }
            // According to the current audio profile type,
            // this page will show the bluetooth device that have corresponding profile.
            // For example:
@@ -92,8 +112,12 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
                    break;
            }
            if (DBG) {
                Log.d(TAG, "isFilterMatched() device : " +
                        cachedDevice.getName() + ", isFilterMatched : " + isFilterMatched);
                Log.d(
                        TAG,
                        "isFilterMatched() device : "
                                + cachedDevice.getName()
                                + ", isFilterMatched : "
                                + isFilterMatched);
            }
        }
        return isFilterMatched;
@@ -102,8 +126,15 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
    @Override
    public boolean onPreferenceClick(Preference preference) {
        mMetricsFeatureProvider.logClickedPreference(preference, mMetricsCategory);
        final CachedBluetoothDevice device = ((BluetoothDevicePreference) preference)
                .getBluetoothDevice();
        final CachedBluetoothDevice device =
                ((BluetoothDevicePreference) preference).getBluetoothDevice();
        if (AudioSharingUtils.isFeatureEnabled()
                && AudioSharingUtils.isBroadcasting(mLocalBtManager)) {
            if (DBG) {
                Log.d(TAG, "onPreferenceClick stop broadcasting.");
            }
            AudioSharingUtils.stopBroadcasting(mLocalBtManager);
        }
        return device.setActive();
    }

+17 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.settings.flags.Flags;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.utils.ThreadUtils;
@@ -298,4 +299,20 @@ public class AudioSharingUtils {
            targetDevice.setActive();
        }
    }

    /** Returns if the broadcast is on-going. */
    public static boolean isBroadcasting(LocalBluetoothManager manager) {
        if (manager == null) return false;
        LocalBluetoothLeBroadcast broadcast =
                manager.getProfileManager().getLeAudioBroadcastProfile();
        return broadcast != null && broadcast.isEnabled(null);
    }

    /** Stops the latest broadcast. */
    public static void stopBroadcasting(LocalBluetoothManager manager) {
        if (manager == null) return;
        LocalBluetoothLeBroadcast broadcast =
                manager.getProfileManager().getLeAudioBroadcastProfile();
        broadcast.stopBroadcast(broadcast.getLatestBroadcastId());
    }
}
+238 −72

File changed.

Preview size limit exceeded, changes collapsed.

+20 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ public class ShadowBluetoothAdapter extends org.robolectric.shadows.ShadowBlueto
    private int mState;
    private List<Integer> mSupportedProfiles = new ArrayList<>();
    private List<BluetoothDevice> mMostRecentlyConnectedDevices = new ArrayList<>();
    private int mIsLeAudioBroadcastSourceSupported;
    private int mIsLeAudioBroadcastAssistantSupported;

    @Implementation
    protected List<Integer> getSupportedProfiles() {
@@ -67,4 +69,22 @@ public class ShadowBluetoothAdapter extends org.robolectric.shadows.ShadowBlueto
    public void setMostRecentlyConnectedDevices(List<BluetoothDevice> list) {
        mMostRecentlyConnectedDevices = list;
    }

    @Implementation
    protected int isLeAudioBroadcastSourceSupported() {
        return mIsLeAudioBroadcastSourceSupported;
    }

    public void setIsLeAudioBroadcastSourceSupported(int isSupported) {
        mIsLeAudioBroadcastSourceSupported = isSupported;
    }

    @Implementation
    protected int isLeAudioBroadcastAssistantSupported() {
        return mIsLeAudioBroadcastAssistantSupported;
    }

    public void setIsLeAudioBroadcastAssistantSupported(int isSupported) {
        mIsLeAudioBroadcastAssistantSupported = isSupported;
    }
}