Handle csip set member automatic pair in Setting am: 629611a43e
am: eb412a0614
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/1903834 Change-Id: Ibb8140b8af96036750457a6866eb9ba410bc0b84
This commit is contained in:
@@ -2326,6 +2326,7 @@
|
|||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
|
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
|
||||||
|
<action android:name="android.bluetooth.action.CSIS_SET_MEMBER_AVAILABLE"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
@@ -16,12 +16,14 @@
|
|||||||
|
|
||||||
package com.android.settings.bluetooth;
|
package com.android.settings.bluetooth;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothCsipSetCoordinator;
|
||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
|
|
||||||
@@ -36,38 +38,55 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (action == null || !action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
|
if (action == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PowerManager powerManager = context.getSystemService(PowerManager.class);
|
|
||||||
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
||||||
int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
|
|
||||||
BluetoothDevice.ERROR);
|
|
||||||
String deviceAddress = device != null ? device.getAddress() : null;
|
|
||||||
String deviceName = device != null ? device.getName() : null;
|
|
||||||
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
|
|
||||||
context, deviceAddress, deviceName);
|
|
||||||
|
|
||||||
final LocalBluetoothManager mBluetoothManager = Utils.getLocalBtManager(context);
|
final LocalBluetoothManager mBluetoothManager = Utils.getLocalBtManager(context);
|
||||||
// Skips consent pairing dialog if the device was recently associated with CDM
|
if (TextUtils.equals(action, BluetoothDevice.ACTION_PAIRING_REQUEST)) {
|
||||||
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
|
PowerManager powerManager = context.getSystemService(PowerManager.class);
|
||||||
&& (device.canBondWithoutDialog()
|
int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
|
||||||
|| mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device))) {
|
BluetoothDevice.ERROR);
|
||||||
device.setPairingConfirmation(true);
|
String deviceAddress = device != null ? device.getAddress() : null;
|
||||||
} else if (powerManager.isInteractive() && shouldShowDialog) {
|
String deviceName = device != null ? device.getName() : null;
|
||||||
// Since the screen is on and the BT-related activity is in the foreground,
|
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
|
||||||
// just open the dialog
|
context, deviceAddress, deviceName);
|
||||||
// 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);
|
// Skips consent pairing dialog if the device was recently associated with CDM
|
||||||
} else {
|
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
|
||||||
// Put up a notification that leads to the dialog
|
&& (device.canBondWithoutDialog()
|
||||||
intent.setClass(context, BluetoothPairingService.class);
|
|| mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device))) {
|
||||||
intent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
|
device.setPairingConfirmation(true);
|
||||||
context.startServiceAsUser(intent, UserHandle.CURRENT);
|
} else 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
|
||||||
|
intent.setClass(context, BluetoothPairingService.class);
|
||||||
|
intent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
|
||||||
|
context.startServiceAsUser(intent, UserHandle.CURRENT);
|
||||||
|
}
|
||||||
|
} else if (TextUtils.equals(action,
|
||||||
|
BluetoothCsipSetCoordinator.ACTION_CSIS_SET_MEMBER_AVAILABLE)) {
|
||||||
|
if (device == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int groupId = intent.getIntExtra(BluetoothCsipSetCoordinator.EXTRA_CSIS_GROUP_ID,
|
||||||
|
BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
|
||||||
|
if (groupId == BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mBluetoothManager.getCachedDeviceManager().shouldPairByCsip(device, groupId)) {
|
||||||
|
device.createBond(BluetoothDevice.TRANSPORT_LE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user