bt: Add late bonding confirmation mechanism am: 63d37a3d78 am: f38b16808b

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23276700

Change-Id: I46e70bb2ceab07ad4da475bd3676a08dc81c12f0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Michał Narajowski
2023-05-19 08:15:04 +00:00
committed by Automerger Merge Worker
4 changed files with 39 additions and 6 deletions

View File

@@ -1444,6 +1444,9 @@
<!-- 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>
<!-- 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] -->
<string name="bluetooth_pairing_key_msg">Bluetooth pairing code</string>

View File

@@ -72,6 +72,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
private boolean mIsCoordinatedSetMember;
private boolean mIsLeAudio;
private boolean mIsLeContactSharingEnabled;
private boolean mIsLateBonding;
/**
* Creates an instance of a BluetoothPairingController.
@@ -98,6 +99,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
mPasskeyFormatted = formatKey(mPasskey);
mIsLateBonding = mBluetoothManager.getCachedDeviceManager().isLateBonding(mDevice);
final CachedBluetoothDevice cachedDevice =
mBluetoothManager.getCachedDeviceManager().findDevice(mDevice);
@@ -116,7 +118,10 @@ public class BluetoothPairingController implements OnCheckedChangeListener,
mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
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;
}
/**
* 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.
*

View File

@@ -357,6 +357,10 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i
pairingViewContent.setText(mPairingController.getPairingContent());
}
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()
? View.VISIBLE : View.GONE);
return view;

View File

@@ -26,6 +26,7 @@ import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
/**
@@ -53,17 +54,28 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
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
&& (device.canBondWithoutDialog()
|| mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device))) {
&& (device.canBondWithoutDialog()
|| (mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device)
&& !mBluetoothManager.getCachedDeviceManager().isLateBonding(device)))) {
device.setPairingConfirmation(true);
} 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);
Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(
context, intent, BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
} else {