From 541dac155a1ec835d107e3096ee467705ca5d41e Mon Sep 17 00:00:00 2001 From: chelseahao Date: Thu, 7 Dec 2023 18:02:52 +0800 Subject: [PATCH] [Audiosharing] Implement add source by qrcode scan Bug: 305620450 Test: manual Change-Id: If09522b515649621000208285340736abba04b4d --- .../AudioStreamsDashboardFragment.java | 43 ++++++++++++++++++- .../AudioStreamsScanQrCodeController.java | 9 +++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsDashboardFragment.java b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsDashboardFragment.java index a673cb4758b..a418415d5f2 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsDashboardFragment.java @@ -16,15 +16,25 @@ package com.android.settings.connecteddevice.audiosharing.audiostreams; +import static com.android.settings.connecteddevice.audiosharing.audiostreams.AudioStreamsScanQrCodeController.REQUEST_SCAN_BT_BROADCAST_QR_CODE; + +import android.app.Activity; +import android.bluetooth.BluetoothLeBroadcastMetadata; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.util.Log; import com.android.settings.R; +import com.android.settings.connecteddevice.audiosharing.audiostreams.qrcode.QrCodeScanModeFragment; import com.android.settings.dashboard.DashboardFragment; +import com.android.settingslib.bluetooth.BluetoothLeBroadcastMetadataExt; +import com.android.settingslib.bluetooth.BluetoothUtils; public class AudioStreamsDashboardFragment extends DashboardFragment { private static final String TAG = "AudioStreamsDashboardFrag"; + private static final boolean DEBUG = BluetoothUtils.D; + private AudioStreamsScanQrCodeController mAudioStreamsScanQrCodeController; public AudioStreamsDashboardFragment() { super(); @@ -59,7 +69,8 @@ public class AudioStreamsDashboardFragment extends DashboardFragment { @Override public void onAttach(Context context) { super.onAttach(context); - use(AudioStreamsScanQrCodeController.class).setFragment(this); + mAudioStreamsScanQrCodeController = use(AudioStreamsScanQrCodeController.class); + mAudioStreamsScanQrCodeController.setFragment(this); } @Override @@ -70,6 +81,34 @@ public class AudioStreamsDashboardFragment extends DashboardFragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - // TODO(chelseahao): implementation. + if (DEBUG) { + Log.d( + TAG, + "onActivityResult() requestCode : " + + requestCode + + " resultCode : " + + resultCode); + } + if (requestCode == REQUEST_SCAN_BT_BROADCAST_QR_CODE) { + if (resultCode == Activity.RESULT_OK) { + String broadcastMetadata = + data.getStringExtra(QrCodeScanModeFragment.KEY_BROADCAST_METADATA); + BluetoothLeBroadcastMetadata source = + BluetoothLeBroadcastMetadataExt.INSTANCE.convertToBroadcastMetadata( + broadcastMetadata); + if (source == null) { + Log.w(TAG, "onActivityResult() source is null!"); + return; + } + if (DEBUG) { + Log.d(TAG, "onActivityResult() broadcastId : " + source.getBroadcastId()); + } + if (mAudioStreamsScanQrCodeController == null) { + Log.w(TAG, "onActivityResult() AudioStreamsScanQrCodeController is null!"); + return; + } + mAudioStreamsScanQrCodeController.addSource(source); + } + } } } diff --git a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsScanQrCodeController.java b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsScanQrCodeController.java index 12b46e5d339..549e7258347 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsScanQrCodeController.java +++ b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamsScanQrCodeController.java @@ -16,6 +16,7 @@ package com.android.settings.connecteddevice.audiosharing.audiostreams; +import android.bluetooth.BluetoothLeBroadcastMetadata; import android.bluetooth.BluetoothProfile; import android.content.Context; import android.content.Intent; @@ -41,10 +42,10 @@ import com.android.settingslib.utils.ThreadUtils; public class AudioStreamsScanQrCodeController extends BasePreferenceController implements DefaultLifecycleObserver { + static final int REQUEST_SCAN_BT_BROADCAST_QR_CODE = 0; private static final String TAG = "AudioStreamsProgressCategoryController"; private static final boolean DEBUG = BluetoothUtils.D; private static final String KEY = "audio_streams_scan_qr_code"; - private static final int REQUEST_SCAN_BT_BROADCAST_QR_CODE = 0; private final BluetoothCallback mBluetoothCallback = new BluetoothCallback() { @Override @@ -57,12 +58,14 @@ public class AudioStreamsScanQrCodeController extends BasePreferenceController }; private final LocalBluetoothManager mLocalBtManager; + private final AudioStreamsHelper mAudioStreamsHelper; private AudioStreamsDashboardFragment mFragment; private Preference mPreference; public AudioStreamsScanQrCodeController(Context context, String preferenceKey) { super(context, preferenceKey); mLocalBtManager = Utils.getLocalBtManager(mContext); + mAudioStreamsHelper = new AudioStreamsHelper(mLocalBtManager); } public void setFragment(AudioStreamsDashboardFragment fragment) { @@ -121,6 +124,10 @@ public class AudioStreamsScanQrCodeController extends BasePreferenceController }); } + void addSource(BluetoothLeBroadcastMetadata source) { + mAudioStreamsHelper.addSource(source); + } + private void updateVisibility() { ThreadUtils.postOnBackgroundThread( () -> {