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

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

Change-Id: I66f1a80109916a81e5620572f477b3f44866f370
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:57:23 +00:00
committed by Automerger Merge Worker
4 changed files with 39 additions and 6 deletions

View File

@@ -1446,6 +1446,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>

View File

@@ -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.
* *

View File

@@ -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;

View File

@@ -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 {