bt: Add late bonding confirmation mechanism
If a coordinated set member is bonding late the user will be notified and asked for confirmation on pairing with this device. The dialog box will display specific message for this case. Bug: 282193044 Test: manual Tag: #feature Change-Id: Ie9d79282dd432a542ea02ef477019be6dfbce997
This commit is contained in:
@@ -1444,6 +1444,9 @@
|
|||||||
<!-- Title for the dialog to enter PIN. [CHAR LIMIT=40] -->
|
<!-- Title for the dialog to enter PIN. [CHAR LIMIT=40] -->
|
||||||
<string name="bluetooth_pairing_request">Pair with <xliff:g id="device_name">%1$s</xliff:g>?</string>
|
<string name="bluetooth_pairing_request">Pair with <xliff:g id="device_name">%1$s</xliff:g>?</string>
|
||||||
|
|
||||||
|
<!-- Message when a bluetooth device from a coordinated set is bonding late. [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="bluetooth_pairing_group_late_bonding">Add new member to the existing coordinated set</string>
|
||||||
|
|
||||||
<!-- Message when bluetooth is informing the user of the pairing key. [CHAR LIMIT=NONE] -->
|
<!-- Message when bluetooth is informing the user of the pairing key. [CHAR LIMIT=NONE] -->
|
||||||
<string name="bluetooth_pairing_key_msg">Bluetooth pairing code</string>
|
<string name="bluetooth_pairing_key_msg">Bluetooth pairing code</string>
|
||||||
|
|
||||||
|
@@ -72,6 +72,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
|
|||||||
private boolean mIsCoordinatedSetMember;
|
private boolean mIsCoordinatedSetMember;
|
||||||
private boolean mIsLeAudio;
|
private boolean mIsLeAudio;
|
||||||
private boolean mIsLeContactSharingEnabled;
|
private boolean mIsLeContactSharingEnabled;
|
||||||
|
private boolean mIsLateBonding;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an instance of a BluetoothPairingController.
|
* Creates an instance of a BluetoothPairingController.
|
||||||
@@ -98,6 +99,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
|
|||||||
mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
|
mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
|
||||||
mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
|
mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
|
||||||
mPasskeyFormatted = formatKey(mPasskey);
|
mPasskeyFormatted = formatKey(mPasskey);
|
||||||
|
mIsLateBonding = mBluetoothManager.getCachedDeviceManager().isLateBonding(mDevice);
|
||||||
|
|
||||||
final CachedBluetoothDevice cachedDevice =
|
final CachedBluetoothDevice cachedDevice =
|
||||||
mBluetoothManager.getCachedDeviceManager().findDevice(mDevice);
|
mBluetoothManager.getCachedDeviceManager().findDevice(mDevice);
|
||||||
@@ -116,7 +118,10 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
|
|||||||
|
|
||||||
mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
|
mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
|
||||||
SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED, true);
|
SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED, true);
|
||||||
Log.d(TAG, "BT_LE_AUDIO_CONTACT_SHARING_ENABLED is " + mIsLeContactSharingEnabled);
|
Log.d(TAG,
|
||||||
|
"BT_LE_AUDIO_CONTACT_SHARING_ENABLED is "
|
||||||
|
+ mIsLeContactSharingEnabled + " isCooridnatedSetMember "
|
||||||
|
+ mIsCoordinatedSetMember);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,6 +197,15 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
|
|||||||
return mIsCoordinatedSetMember;
|
return mIsCoordinatedSetMember;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A method for querying if the bluetooth device from a coordinated set is bonding late.
|
||||||
|
*
|
||||||
|
* @return - A boolean indicating if the device is bonding late.
|
||||||
|
*/
|
||||||
|
public boolean isLateBonding() {
|
||||||
|
return mIsLateBonding;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A method for querying if the bluetooth device has a profile already set up on this device.
|
* A method for querying if the bluetooth device has a profile already set up on this device.
|
||||||
*
|
*
|
||||||
|
@@ -357,6 +357,10 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i
|
|||||||
pairingViewContent.setText(mPairingController.getPairingContent());
|
pairingViewContent.setText(mPairingController.getPairingContent());
|
||||||
}
|
}
|
||||||
final TextView messagePairingSet = (TextView) view.findViewById(R.id.pairing_group_message);
|
final TextView messagePairingSet = (TextView) view.findViewById(R.id.pairing_group_message);
|
||||||
|
if (mPairingController.isLateBonding()) {
|
||||||
|
messagePairingSet.setText(getString(R.string.bluetooth_pairing_group_late_bonding));
|
||||||
|
}
|
||||||
|
|
||||||
messagePairingSet.setVisibility(mPairingController.isCoordinatedSetMemberDevice()
|
messagePairingSet.setVisibility(mPairingController.isCoordinatedSetMemberDevice()
|
||||||
? View.VISIBLE : View.GONE);
|
? View.VISIBLE : View.GONE);
|
||||||
return view;
|
return view;
|
||||||
|
@@ -26,6 +26,7 @@ import android.os.UserHandle;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,17 +54,28 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
|
|||||||
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
|
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
|
||||||
context, device);
|
context, device);
|
||||||
|
|
||||||
// Skips consent pairing dialog if the device was recently associated with CDM
|
Log.d(TAG,
|
||||||
|
"Receive ACTION_PAIRING_REQUEST pairingVariant=" + pairingVariant
|
||||||
|
+ " canBondWithoutDialog=" + device.canBondWithoutDialog()
|
||||||
|
+ " isOngoingPairByCsip="
|
||||||
|
+ mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device)
|
||||||
|
+ " isLateBonding="
|
||||||
|
+ mBluetoothManager.getCachedDeviceManager().isLateBonding(device));
|
||||||
|
|
||||||
|
/* Skips consent pairing dialog if the device was recently associated with CDM
|
||||||
|
* or if the device is a member of the coordinated set and is not bonding late.
|
||||||
|
*/
|
||||||
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
|
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
|
||||||
&& (device.canBondWithoutDialog()
|
&& (device.canBondWithoutDialog()
|
||||||
|| mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device))) {
|
|| (mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device)
|
||||||
|
&& !mBluetoothManager.getCachedDeviceManager().isLateBonding(device)))) {
|
||||||
device.setPairingConfirmation(true);
|
device.setPairingConfirmation(true);
|
||||||
} else if (powerManager.isInteractive() && shouldShowDialog) {
|
} else if (powerManager.isInteractive() && shouldShowDialog) {
|
||||||
// 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 pairingIntent = BluetoothPairingService.getPairingDialogIntent(
|
||||||
intent, BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
|
context, intent, BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
|
||||||
|
|
||||||
context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
|
context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user