diff options
3 files changed, 53 insertions, 7 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java index a87b8153b858..216574a5fff9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java @@ -1,6 +1,7 @@ package com.android.settingslib.bluetooth; import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.UNKNOWN_VALUE_PLACEHOLDER; +import static com.android.settingslib.flags.Flags.audioSharingHysteresisModeFix; import static com.android.settingslib.widget.AdaptiveOutlineDrawable.ICON_TYPE_ADVANCED; import android.annotation.SuppressLint; @@ -651,6 +652,13 @@ public class BluetoothUtils { context.getContentResolver())); } + /** Returns if the le audio sharing hysteresis mode fix is available. */ + @WorkerThread + public static boolean isAudioSharingHysteresisModeFixAvailable(@Nullable Context context) { + return (audioSharingHysteresisModeFix() && Flags.enableLeAudioSharing()) + || (context != null && isAudioSharingPreviewEnabled(context.getContentResolver())); + } + /** Returns if the le audio sharing is enabled. */ public static boolean isAudioSharingEnabled() { BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); @@ -733,13 +741,15 @@ public class BluetoothUtils { @WorkerThread public static boolean hasConnectedBroadcastSourceForBtDevice( @Nullable BluetoothDevice device, @Nullable LocalBluetoothManager localBtManager) { - if (Flags.audioSharingHysteresisModeFix()) { + if (localBtManager == null) { + Log.d(TAG, "Skip check hasConnectedBroadcastSourceForBtDevice due to arg is null"); + return false; + } + if (isAudioSharingHysteresisModeFixAvailable(localBtManager.getContext())) { return hasActiveLocalBroadcastSourceForBtDevice(device, localBtManager); } LocalBluetoothLeBroadcastAssistant assistant = - localBtManager == null - ? null - : localBtManager.getProfileManager().getLeAudioBroadcastAssistantProfile(); + localBtManager.getProfileManager().getLeAudioBroadcastAssistantProfile(); if (device == null || assistant == null) { Log.d(TAG, "Skip check hasConnectedBroadcastSourceForBtDevice due to arg is null"); return false; diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java index 6a9d5687370e..6f74926993e2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java @@ -54,7 +54,6 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import com.android.settingslib.R; -import com.android.settingslib.flags.Flags; import com.google.common.collect.ImmutableList; @@ -1152,7 +1151,7 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { int targetGroupId = BluetoothCsipSetCoordinator.GROUP_ID_INVALID; int fallbackActiveGroupId = BluetoothUtils.getPrimaryGroupIdForBroadcast( mContext.getContentResolver()); - if (Flags.audioSharingHysteresisModeFix()) { + if (BluetoothUtils.isAudioSharingHysteresisModeFixAvailable(mContext)) { int userPreferredPrimaryGroupId = getUserPreferredPrimaryGroupId(); if (userPreferredPrimaryGroupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID && deviceGroupsInBroadcast.containsKey(userPreferredPrimaryGroupId)) { @@ -1193,7 +1192,8 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { @NonNull private Map<Integer, List<BluetoothDevice>> getDeviceGroupsInBroadcast() { - boolean hysteresisModeFixEnabled = Flags.audioSharingHysteresisModeFix(); + boolean hysteresisModeFixEnabled = + BluetoothUtils.isAudioSharingHysteresisModeFixAvailable(mContext); List<BluetoothDevice> connectedDevices = mServiceBroadcastAssistant.getConnectedDevices(); return connectedDevices.stream() .filter( diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java index 6d481dbe64e9..fa5d54283a17 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java @@ -1256,4 +1256,40 @@ public class BluetoothUtilsTest { assertThat(BluetoothUtils.isAudioSharingUIAvailable(mContext)).isTrue(); } + + @Test + public void isAudioSharingHysteresisModeFixAvailable_mainAndPreviewFlagOff_returnsFalse() { + mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX); + mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION); + + assertThat(BluetoothUtils.isAudioSharingHysteresisModeFixAvailable(mContext)).isFalse(); + } + + @Test + public void isAudioSharingHysteresisModeFixAvailable_hysteresisFixFlagOff_returnsFalse() { + mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX); + mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION); + + assertThat(BluetoothUtils.isAudioSharingHysteresisModeFixAvailable(mContext)).isFalse(); + } + + @Test + public void isAudioSharingHysteresisModeFixAvailable_previewFlagOn_returnsTrue() { + mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX); + mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION); + + assertThat(BluetoothUtils.isAudioSharingHysteresisModeFixAvailable(mContext)).isTrue(); + } + + @Test + public void isAudioSharingHysteresisModeFixAvailable_mainAndPreviewFlagOn_returnsTrue() { + mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX); + mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION); + + assertThat(BluetoothUtils.isAudioSharingHysteresisModeFixAvailable(mContext)).isTrue(); + } } |