Loading src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java +45 −14 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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 Loading Loading @@ -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: Loading @@ -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; Loading @@ -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(); } Loading src/com/android/settings/connecteddevice/audiosharing/AudioSharingUtils.java +17 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); } } tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java +238 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes tests/robotests/testutils/com/android/settings/testutils/shadow/ShadowBluetoothAdapter.java +20 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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; } } Loading
src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java +45 −14 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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 Loading Loading @@ -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: Loading @@ -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; Loading @@ -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(); } Loading
src/com/android/settings/connecteddevice/audiosharing/AudioSharingUtils.java +17 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); } }
tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java +238 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes
tests/robotests/testutils/com/android/settings/testutils/shadow/ShadowBluetoothAdapter.java +20 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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; } }