[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
This commit is contained in:
Yiyi Shen
2023-12-06 16:11:02 +08:00
parent 517ab6e040
commit 22e3f51784
4 changed files with 320 additions and 86 deletions

View File

@@ -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();
}