diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java index bf9debf5cccea..3445b7f79808b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java @@ -299,6 +299,18 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { } public BluetoothLeBroadcastMetadata getLatestBluetoothLeBroadcastMetadata() { + if (mService == null) { + Log.d(TAG, "The BluetoothLeBroadcast is null"); + return null; + } + if (mBluetoothLeBroadcastMetadata == null) { + final List metadataList = + mService.getAllBroadcastMetadata(); + mBluetoothLeBroadcastMetadata = metadataList.stream() + .filter(i -> i.getBroadcastId() == mBroadcastId) + .findFirst() + .orElse(null); + } return mBluetoothLeBroadcastMetadata; } @@ -368,7 +380,12 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { } public LocalBluetoothLeBroadcastMetadata getLocalBluetoothLeBroadcastMetaData() { - return new LocalBluetoothLeBroadcastMetadata(mBluetoothLeBroadcastMetadata); + final BluetoothLeBroadcastMetadata metadata = getLatestBluetoothLeBroadcastMetadata(); + if (metadata == null) { + Log.d(TAG, "The BluetoothLeBroadcastMetadata is null."); + return null; + } + return new LocalBluetoothLeBroadcastMetadata(metadata); } public boolean isProfileReady() { diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java index e5913061ef3f8..0a6dc622e9b79 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java @@ -100,6 +100,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements private int mListMaxHeight; private WallpaperColors mWallpaperColors; private Executor mExecutor; + private boolean mShouldLaunchLeBroadcastDialog; MediaOutputBaseAdapter mAdapter; @@ -394,7 +395,9 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements } public void handleLeBroadcastStarted() { - startLeBroadcastDialog(); + // Waiting for the onBroadcastMetadataChanged. The UI launchs the broadcast dialog when + // the metadata is ready. + mShouldLaunchLeBroadcastDialog = true; } public void handleLeBroadcastStartFailed() { @@ -404,10 +407,15 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements } public void handleLeBroadcastMetadataChanged() { + if (mShouldLaunchLeBroadcastDialog) { + startLeBroadcastDialog(); + mShouldLaunchLeBroadcastDialog = false; + } refresh(); } public void handleLeBroadcastStopped() { + mShouldLaunchLeBroadcastDialog = false; refresh(); } diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 247ffa7c2ef90..078e622af86dc 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -62,6 +62,7 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.Utils; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; +import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastMetadata; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.InfoMediaManager; import com.android.settingslib.media.LocalMediaManager; @@ -847,7 +848,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, Log.d(TAG, "getBroadcastMetadata: LE Audio Broadcast is null"); return ""; } - return broadcast.getLocalBluetoothLeBroadcastMetaData().convertToQrCodeString(); + final LocalBluetoothLeBroadcastMetadata metadata = + broadcast.getLocalBluetoothLeBroadcastMetaData(); + return metadata != null ? metadata.convertToQrCodeString() : ""; } boolean isActiveRemoteDevice(@NonNull MediaDevice device) {