summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yiyi Shen <yiyishen@google.com> 2024-12-19 21:49:29 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2024-12-19 21:49:29 -0800
commita484d2365ac56bf83327713d5c61afefecdbfa2a (patch)
treedeb69af9143fef4a6cd024c01417b8dbc3e84189
parent22c82b50571ea4d24da89dd378dda8e1d6da17a8 (diff)
parentcae2c99b2d94cddeb5bae1665e864593009f3bc3 (diff)
Merge "[Audiosharing] Check BluetoothProperties when BT+BLE off" into main
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java51
1 files changed, 31 insertions, 20 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
index 0c642d7b8f98..3c36c4438bca 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
@@ -30,6 +30,7 @@ import android.net.Uri;
import android.provider.DeviceConfig;
import android.provider.MediaStore;
import android.provider.Settings;
+import android.sysprop.BluetoothProperties;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
@@ -648,8 +649,10 @@ public class BluetoothUtils {
/** Returns if the le audio sharing UI is available. */
public static boolean isAudioSharingUIAvailable(@Nullable Context context) {
- return isAudioSharingEnabled() || (context != null && isAudioSharingPreviewEnabled(
- context.getContentResolver()));
+ return (Flags.enableLeAudioSharing()
+ || (context != null && Flags.audioSharingDeveloperOption()
+ && getAudioSharingPreviewValue(context.getContentResolver())))
+ && isAudioSharingSupported();
}
/** Returns if the le audio sharing hysteresis mode fix is available. */
@@ -662,31 +665,39 @@ public class BluetoothUtils {
/** Returns if the le audio sharing is enabled. */
public static boolean isAudioSharingEnabled() {
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- try {
- return Flags.enableLeAudioSharing()
- && adapter.isLeAudioBroadcastSourceSupported()
- == BluetoothStatusCodes.FEATURE_SUPPORTED
- && adapter.isLeAudioBroadcastAssistantSupported()
- == BluetoothStatusCodes.FEATURE_SUPPORTED;
- } catch (IllegalStateException e) {
- Log.d(TAG, "Fail to check isAudioSharingEnabled, e = ", e);
- return false;
- }
+ return Flags.enableLeAudioSharing() && isAudioSharingSupported();
}
/** Returns if the le audio sharing preview is enabled in developer option. */
public static boolean isAudioSharingPreviewEnabled(@Nullable ContentResolver contentResolver) {
+ return Flags.audioSharingDeveloperOption()
+ && getAudioSharingPreviewValue(contentResolver)
+ && isAudioSharingSupported();
+ }
+
+ /** Returns if the device has le audio sharing capability */
+ private static boolean isAudioSharingSupported() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
try {
- return Flags.audioSharingDeveloperOption()
- && getAudioSharingPreviewValue(contentResolver)
- && adapter.isLeAudioBroadcastSourceSupported()
- == BluetoothStatusCodes.FEATURE_SUPPORTED
- && adapter.isLeAudioBroadcastAssistantSupported()
- == BluetoothStatusCodes.FEATURE_SUPPORTED;
+ // b/381777424 The APIs have to return ERROR_BLUETOOTH_NOT_ENABLED when BT off based on
+ // CDD definition.
+ // However, app layer need to gate the feature based on whether the device has audio
+ // sharing capability regardless of the BT state.
+ // So here we check the BluetoothProperties when BT off.
+ //
+ // TODO: Also check SystemProperties "persist.bluetooth.leaudio_dynamic_switcher.mode"
+ // and return true if it is in broadcast mode.
+ // Now SystemUI don't have access to read the value.
+ int sourceSupportedCode = adapter.isLeAudioBroadcastSourceSupported();
+ int assistantSupportedCode = adapter.isLeAudioBroadcastAssistantSupported();
+ return (sourceSupportedCode == BluetoothStatusCodes.FEATURE_SUPPORTED
+ || (sourceSupportedCode == BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED
+ && BluetoothProperties.isProfileBapBroadcastSourceEnabled().orElse(false)))
+ && (assistantSupportedCode == BluetoothStatusCodes.FEATURE_SUPPORTED
+ || (assistantSupportedCode == BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED
+ && BluetoothProperties.isProfileBapBroadcastAssistEnabled().orElse(false)));
} catch (IllegalStateException e) {
- Log.d(TAG, "Fail to check isAudioSharingPreviewEnabled, e = ", e);
+ Log.d(TAG, "Fail to check isAudioSharingSupported, e = ", e);
return false;
}
}