Bluetooth: Add pairing initiator extra

Bug: 150156492
Test: pair two devices, unpair on one device, try to reconnect
Change-Id: I96379d0afe5b624f09e2825dedaef8f9883a924c
This commit is contained in:
Myles Watson
2020-06-08 15:07:23 -07:00
parent 92cd5c3214
commit 0d31c37df9
3 changed files with 12 additions and 6 deletions

View File

@@ -60,6 +60,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
private String mUserInput;
private String mPasskeyFormatted;
private int mPasskey;
private int mInitiator;
private String mDeviceName;
private LocalBluetoothProfile mPbapClientProfile;
private boolean mPbapAllowed;
@@ -84,6 +85,8 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
mPasskey = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, BluetoothDevice.ERROR);
mInitiator =
intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_INITIATOR, BluetoothDevice.ERROR);
mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
mPasskeyFormatted = formatKey(mPasskey);
@@ -177,7 +180,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
default:
if (mDevice.getBluetoothClass().getDeviceClass()
== BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE) {
return true;
return BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND == mInitiator;
}
return false;
}

View File

@@ -37,9 +37,6 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
if (!action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
return;
}
// convert broadcast intent into activity intent (same action string)
Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context, intent);
PowerManager powerManager =
(PowerManager)context.getSystemService(Context.POWER_SERVICE);
BluetoothDevice device =
@@ -51,6 +48,10 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
if (powerManager.isInteractive() && shouldShowDialog) {
// Since the screen is on and the BT-related activity is in the foreground,
// just open the dialog
// convert broadcast intent into activity intent (same action string)
Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context, intent,
BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
} else {
// Put up a notification that leads to the dialog

View File

@@ -51,7 +51,7 @@ public final class BluetoothPairingService extends Service {
private BluetoothDevice mDevice;
public static Intent getPairingDialogIntent(Context context, Intent intent) {
public static Intent getPairingDialogIntent(Context context, Intent intent, int initiator) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.ERROR);
@@ -65,6 +65,7 @@ public final class BluetoothPairingService extends Service {
int pairingKey = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY,
BluetoothDevice.ERROR);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, pairingKey);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_INITIATOR, initiator);
}
pairingIntent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -124,7 +125,8 @@ public final class BluetoothPairingService extends Service {
.setLocalOnly(true);
PendingIntent pairIntent = PendingIntent.getActivity(this, 0,
getPairingDialogIntent(this, intent),
getPairingDialogIntent(this, intent,
BluetoothDevice.EXTRA_PAIRING_INITIATOR_BACKGROUND),
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent dismissIntent = PendingIntent.getBroadcast(this, 0,