diff --git a/res/layout/bluetooth_pin_confirm.xml b/res/layout/bluetooth_pin_confirm.xml index 48912755890..28ad1f62920 100644 --- a/res/layout/bluetooth_pin_confirm.xml +++ b/res/layout/bluetooth_pin_confirm.xml @@ -65,6 +65,18 @@ android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Subhead" android:visibility="gone" /> + + To pair with:<br><b>%1$s</b><br><br>Make sure it is showing this passkey:<br><b>%2$s</b> + + Confirm to pair with the coordinated set + From:<br><b>%1$s</b><br><br>Pair with this device? diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java index ca3dda67384..ec5c8ddf912 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingController.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java @@ -28,6 +28,7 @@ import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.bluetooth.BluetoothPairingDialogFragment.BluetoothPairingDialogListener; +import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfile; @@ -64,6 +65,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener, private String mDeviceName; private LocalBluetoothProfile mPbapClientProfile; private boolean mPbapAllowed; + private boolean mIsCoordinatedSetMember; /** * Creates an instance of a BluetoothPairingController. @@ -90,6 +92,10 @@ public class BluetoothPairingController implements OnCheckedChangeListener, mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice); mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile(); mPasskeyFormatted = formatKey(mPasskey); + final CachedBluetoothDevice cachedDevice = + mBluetoothManager.getCachedDeviceManager().findDevice(mDevice); + mIsCoordinatedSetMember = (cachedDevice != null) + ? cachedDevice.isCoordinatedSetMemberDevice() : false; } @Override @@ -155,6 +161,15 @@ public class BluetoothPairingController implements OnCheckedChangeListener, return mDeviceName; } + /** + * A method for querying if the bluetooth device is a LE coordinated set member device. + * + * @return - A boolean indicating if the device is a CSIP supported device. + */ + public boolean isCoordinatedSetMemberDevice() { + return mIsCoordinatedSetMember; + } + /** * A method for querying if the bluetooth device has a profile already set up on this device. * diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java index d38302d8830..9e3624732d0 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java @@ -344,6 +344,9 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i pairingViewContent.setVisibility(View.VISIBLE); pairingViewContent.setText(mPairingController.getPairingContent()); } + final TextView messagePairingSet = (TextView) view.findViewById(R.id.pairing_group_message); + messagePairingSet.setVisibility(mPairingController.isCoordinatedSetMemberDevice() + ? View.VISIBLE : View.GONE); return view; } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java index be733ec97d4..a53e693976e 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java @@ -427,6 +427,34 @@ public class BluetoothPairingDialogTest { userEntryDialogExistingTextTest("test"); } + @Test + public void groupPairing_setMemberDevice_showsMessageHint() { + // set the correct dialog type + when(controller.getDialogType()).thenReturn(BluetoothPairingController.CONFIRMATION_DIALOG); + when(controller.isCoordinatedSetMemberDevice()).thenReturn(true); + + // build the fragment + BluetoothPairingDialogFragment frag = makeFragment(); + + // verify message is what we expect it to be and is visible + TextView message = frag.getmDialog().findViewById(R.id.pairing_group_message); + assertThat(message.getVisibility()).isEqualTo(View.VISIBLE); + } + + @Test + public void groupPairing_nonSetMemberDevice_hidesMessageHint() { + // set the correct dialog type + when(controller.getDialogType()).thenReturn(BluetoothPairingController.CONFIRMATION_DIALOG); + when(controller.isCoordinatedSetMemberDevice()).thenReturn(false); + + // build the fragment + BluetoothPairingDialogFragment frag = makeFragment(); + + // verify message is what we expect it to be and is visible + TextView message = frag.getmDialog().findViewById(R.id.pairing_group_message); + assertThat(message.getVisibility()).isEqualTo(View.GONE); + } + // Runs a test simulating the user entry dialog type in a situation like device rotation, where // the dialog fragment gets created and we already have some existing text entered into the // pin field.