Merge "[LE Audio] Set activity for result after scanning the QR code" into udc-dev
This commit is contained in:
@@ -11871,7 +11871,8 @@
|
||||
<string name="find_broadcast_password_dialog_connection_error">Can\u2019t connect. Try again.</string>
|
||||
<!-- The error message of enter password dialog in bluetooth find broadcast page [CHAR LIMIT=none] -->
|
||||
<string name="find_broadcast_password_dialog_password_error">Wrong password</string>
|
||||
|
||||
<!-- The error message of join the broadcast session by scanning the QR code [CHAR LIMIT=none] -->
|
||||
<string name="find_broadcast_join_broadcast_error">Can\u2019t join the broadcast</string>
|
||||
|
||||
<!-- [CHAR LIMIT=NONE] Le audio QR code scanner sub-title -->
|
||||
<string name="bt_le_audio_scan_qr_code_scanner">To start listening, center the QR code below</string>
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user