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

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

Merge "[Audiosharing] Update media devices section." into main

parents 2a413cc8 22e3f517
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;
    }
}