Handle csip set member automatic pair in Setting
Move the set member handle to setting. SystemUI and Setting have the individual settingLib instance. If we trigger pairing inside settingLib, the action would be called twice. SystemUI does not contain the concept to handle the pair interaction. Setting would take the action to createBond for CSIP automatically. Bug: 201758444 Bug: 150670922 Test: Pair the coordinated set devices, and check the set member pairing would be done automatically without the pairing dialog Change-Id: Idbdd21a1f15b04cc91cbc2d30a5cb4e9b24174b9 Merged-In: Idbdd21a1f15b04cc91cbc2d30a5cb4e9b24174b9
This commit is contained in:
@@ -2290,6 +2290,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,12 +38,14 @@ 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);
|
||||||
|
final LocalBluetoothManager mBluetoothManager = Utils.getLocalBtManager(context);
|
||||||
|
if (TextUtils.equals(action, BluetoothDevice.ACTION_PAIRING_REQUEST)) {
|
||||||
|
PowerManager powerManager = context.getSystemService(PowerManager.class);
|
||||||
int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
|
int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
|
||||||
BluetoothDevice.ERROR);
|
BluetoothDevice.ERROR);
|
||||||
String deviceAddress = device != null ? device.getAddress() : null;
|
String deviceAddress = device != null ? device.getAddress() : null;
|
||||||
@@ -49,7 +53,6 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
|
|||||||
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
|
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
|
||||||
context, deviceAddress, deviceName);
|
context, deviceAddress, deviceName);
|
||||||
|
|
||||||
final LocalBluetoothManager mBluetoothManager = Utils.getLocalBtManager(context);
|
|
||||||
// Skips consent pairing dialog if the device was recently associated with CDM
|
// Skips consent pairing dialog if the device was recently associated with CDM
|
||||||
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
|
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
|
||||||
&& (device.canBondWithoutDialog()
|
&& (device.canBondWithoutDialog()
|
||||||
@@ -59,8 +62,8 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
|
|||||||
// Since the screen is on and the BT-related activity is in the foreground,
|
// Since the screen is on and the BT-related activity is in the foreground,
|
||||||
// just open the dialog
|
// just open the dialog
|
||||||
// convert broadcast intent into activity intent (same action string)
|
// convert broadcast intent into activity intent (same action string)
|
||||||
Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context, intent,
|
Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context,
|
||||||
BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
|
intent, BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
|
||||||
|
|
||||||
context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
|
context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
|
||||||
} else {
|
} else {
|
||||||
@@ -69,5 +72,21 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
|
|||||||
intent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
|
intent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
|
||||||
context.startServiceAsUser(intent, UserHandle.CURRENT);
|
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