diff --git a/res/values/strings.xml b/res/values/strings.xml index a79b1d4d877..7670cf4f814 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11773,7 +11773,8 @@ Can\u2019t connect. Try again. Wrong password - + + Can\u2019t join the broadcast To start listening, center the QR code below diff --git a/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java b/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java index a365b42190a..05bc179ac26 100644 --- a/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java +++ b/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java @@ -19,6 +19,7 @@ package com.android.settings.bluetooth; import static android.bluetooth.BluetoothDevice.BOND_NONE; import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH; +import android.app.Activity; import android.app.AlertDialog; import android.app.settings.SettingsEnums; import android.bluetooth.BluetoothDevice; @@ -27,6 +28,7 @@ import android.bluetooth.BluetoothLeBroadcastMetadata; import android.bluetooth.BluetoothLeBroadcastReceiveState; import android.bluetooth.le.ScanFilter; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -34,6 +36,7 @@ import android.view.View; import android.view.WindowManager; import android.widget.EditText; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; @@ -43,6 +46,7 @@ import com.android.settings.R; import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant; +import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastMetadata; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.core.AbstractPreferenceController; @@ -65,6 +69,7 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment public static final String KEY_DEVICE_ADDRESS = "device_address"; public static final String PREF_KEY_BROADCAST_SOURCE_LIST = "broadcast_source_list"; + public static final int REQUEST_SCAN_BT_BROADCAST_QR_CODE = 0; @VisibleForTesting String mDeviceAddress; @@ -79,6 +84,7 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment BluetoothFindBroadcastsHeaderController mBluetoothFindBroadcastsHeaderController; private LocalBluetoothLeBroadcastAssistant mLeBroadcastAssistant; + private LocalBluetoothLeBroadcastMetadata mLocalBroadcastMetadata; private Executor mExecutor; private int mSourceId; @@ -183,6 +189,7 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment mCachedDevice = getCachedDevice(mDeviceAddress); mLeBroadcastAssistant = getLeBroadcastAssistant(); mExecutor = Executors.newSingleThreadExecutor(); + mLocalBroadcastMetadata = new LocalBluetoothLeBroadcastMetadata(); super.onAttach(context); if (mCachedDevice == null || mLeBroadcastAssistant == null) { @@ -229,6 +236,34 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment } } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + Log.d(TAG, "onActivityResult: " + requestCode + ", resultCode: " + resultCode); + if (requestCode == REQUEST_SCAN_BT_BROADCAST_QR_CODE) { + if (resultCode == Activity.RESULT_OK) { + + //Get BroadcastMetadata + String broadcastMetadata = data.getStringExtra( + QrCodeScanModeFragment.KEY_BROADCAST_METADATA); + BluetoothLeBroadcastMetadata source = convertToBroadcastMetadata(broadcastMetadata); + + if (source != null) { + Log.d(TAG, "onActivityResult source Id = " + source.getBroadcastId()); + //Create preference for the broadcast source + updateListCategoryFromBroadcastMetadata(source, false); + //Add Source + addSource(mBroadcastSourceListCategory.findPreference( + Integer.toString(source.getBroadcastId()))); + } else { + Toast.makeText(getContext(), + R.string.find_broadcast_join_broadcast_error, Toast.LENGTH_SHORT).show(); + return; + } + } + } + } + @VisibleForTesting void finishFragmentIfNecessary() { if (mCachedDevice.getBondState() == BOND_NONE) { @@ -466,4 +501,8 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment public void setSourceId(int sourceId) { mSourceId = sourceId; } + + private BluetoothLeBroadcastMetadata convertToBroadcastMetadata(String qrCodeString) { + return mLocalBroadcastMetadata.convertToBroadcastMetadata(qrCodeString); + } } diff --git a/src/com/android/settings/bluetooth/BluetoothFindBroadcastsHeaderController.java b/src/com/android/settings/bluetooth/BluetoothFindBroadcastsHeaderController.java index 1282abda18e..d34476bada5 100644 --- a/src/com/android/settings/bluetooth/BluetoothFindBroadcastsHeaderController.java +++ b/src/com/android/settings/bluetooth/BluetoothFindBroadcastsHeaderController.java @@ -137,7 +137,8 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon .putExtra(BluetoothBroadcastUtils.EXTRA_BLUETOOTH_SINK_IS_GROUP, true) .putExtra(BluetoothBroadcastUtils.EXTRA_BLUETOOTH_DEVICE_SINK, mCachedDevice.getDevice()); - mContext.startActivity(intent); + mBluetoothFindBroadcastsFragment.startActivityForResult(intent, + BluetoothFindBroadcastsFragment.REQUEST_SCAN_BT_BROADCAST_QR_CODE); } @Override diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeController.java b/src/com/android/settings/bluetooth/QrCodeScanModeController.java deleted file mode 100644 index 4504b4b71aa..00000000000 --- a/src/com/android/settings/bluetooth/QrCodeScanModeController.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.bluetooth; - -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothLeBroadcastMetadata; -import android.content.Context; -import android.util.Log; - -import com.android.settingslib.bluetooth.BluetoothUtils; -import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; -import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant; -import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastMetadata; -import com.android.settingslib.bluetooth.LocalBluetoothManager; -import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; - -public class QrCodeScanModeController { - - private static final boolean DEBUG = BluetoothUtils.D; - private static final String TAG = "QrCodeScanModeController"; - - private LocalBluetoothLeBroadcastMetadata mLocalBroadcastMetadata; - private LocalBluetoothLeBroadcastAssistant mLocalBroadcastAssistant; - private LocalBluetoothManager mLocalBluetoothManager; - private LocalBluetoothProfileManager mProfileManager; - - public QrCodeScanModeController(Context context) { - if (DEBUG) { - Log.d(TAG, "QrCodeScanModeController constructor."); - } - mLocalBluetoothManager = Utils.getLocalBtManager(context); - mProfileManager = mLocalBluetoothManager.getProfileManager(); - mLocalBroadcastMetadata = new LocalBluetoothLeBroadcastMetadata(); - CachedBluetoothDeviceManager cachedDeviceManager = new CachedBluetoothDeviceManager(context, - mLocalBluetoothManager); - mLocalBroadcastAssistant = new LocalBluetoothLeBroadcastAssistant(context, - cachedDeviceManager, mProfileManager); - } - - private BluetoothLeBroadcastMetadata convertToBroadcastMetadata(String qrCodeString) { - return mLocalBroadcastMetadata.convertToBroadcastMetadata(qrCodeString); - } - - public void addSource(BluetoothDevice sink, String sourceMetadata, - boolean isGroupOp) { - mLocalBroadcastAssistant.addSource(sink, - convertToBroadcastMetadata(sourceMetadata), isGroupOp); - } -} diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java b/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java index d53e2d42209..f89dac6f935 100644 --- a/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java +++ b/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java @@ -16,9 +16,11 @@ package com.android.settings.bluetooth; +import android.app.Activity; import android.app.settings.SettingsEnums; import android.bluetooth.BluetoothDevice; import android.content.Context; +import android.content.Intent; import android.graphics.Matrix; import android.graphics.Outline; import android.graphics.Rect; @@ -67,13 +69,14 @@ public class QrCodeScanModeFragment extends InstrumentedFragment implements private static final Duration VIBRATE_DURATION_QR_CODE_RECOGNITION = Duration.ofMillis(3); + public static final String KEY_BROADCAST_METADATA = "key_broadcast_metadata"; + private boolean mIsGroupOp; private int mCornerRadius; private BluetoothDevice mSink; private String mBroadcastMetadata; private Context mContext; private QrCamera mCamera; - private QrCodeScanModeController mController; private TextureView mTextureView; private TextView mSummary; private TextView mErrorMessage; @@ -87,7 +90,6 @@ public class QrCodeScanModeFragment extends InstrumentedFragment implements public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getContext(); - mController = new QrCodeScanModeController(mContext); } @Override @@ -215,10 +217,10 @@ public class QrCodeScanModeFragment extends InstrumentedFragment implements break; case MESSAGE_SCAN_BROADCAST_SUCCESS: - /* TODO(b/265281156) : Move the logic to BluetoothFindBroadcastsFragment. - * We only pass the QR code string to the previous page. - */ - mController.addSource(mSink, mBroadcastMetadata, mIsGroupOp); + Log.d(TAG, "scan success"); + final Intent resultIntent = new Intent(); + resultIntent.putExtra(KEY_BROADCAST_METADATA, mBroadcastMetadata); + getActivity().setResult(Activity.RESULT_OK, resultIntent); notifyUserForQrCodeRecognition(); break; default: