diff --git a/res/values/strings.xml b/res/values/strings.xml
index 089003006cf..25fca26fd3a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13975,13 +13975,15 @@
Share with %1$s
Close
-
+
Connect another pair of compatible headphones, or share your stream\'s name and password with the other person
-
+
Let others scan this code and listen to your audio\n\nStream name: %1$s\nPassword: %2$s
-
+
+ Let others scan this code and listen to your audio\n\nStream name: %1$s
+
or pair another set of compatible headphones
-
+
Pair another set of compatible headphones, or share your audio stream QR code with the other person
Sharing audio
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java
index cf71d5f4685..14a559014cf 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java
@@ -186,14 +186,17 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment {
Drawable qrCodeDrawable = metadata == null ? null : getQrCodeDrawable(metadata,
getContext()).orElse(null);
if (qrCodeDrawable != null) {
+ String broadcastName =
+ metadata.getBroadcastName() == null ? "" : metadata.getBroadcastName();
+ boolean hasPassword = metadata.getBroadcastCode() != null
+ && metadata.getBroadcastCode().length > 0;
+ String message = hasPassword ? getString(
+ R.string.audio_sharing_dialog_qr_code_content, broadcastName,
+ new String(metadata.getBroadcastCode(), StandardCharsets.UTF_8)) :
+ getString(R.string.audio_sharing_dialog_qr_code_content_no_password,
+ broadcastName);
builder.setCustomImage(qrCodeDrawable)
- .setCustomMessage(
- getString(
- R.string.audio_sharing_dialog_qr_code_content,
- metadata.getBroadcastName(),
- new String(
- metadata.getBroadcastCode(),
- StandardCharsets.UTF_8)))
+ .setCustomMessage(message)
.setCustomMessage2(R.string.audio_sharing_dialog_pair_new_device_content)
.setCustomNegativeButton(R.string.audio_streams_dialog_close,
v -> onCancelClick());
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java
index 145a5c7a549..d964b9cbd79 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java
@@ -93,8 +93,14 @@ public class AudioSharingDialogFragmentTest {
private static final String METADATA_STR =
"BLUETOOTH:UUID:184F;BN:VGVzdA==;AT:1;AD:00A1A1A1A1A1;BI:1E240;BC:VGVzdENvZGU=;"
+ "MD:BgNwVGVzdA==;AS:1;PI:A0;NS:1;BS:3;NB:2;SM:BQNUZXN0BARlbmc=;;";
+ private static final String METADATA_STR_NO_PASSWORD =
+ "BLUETOOTH:UUID:184F;BN:SG9ja2V5;AT:0;AD:AABBCC001122;BI:DE51E9;SQ:1;AS:1;PI:FFFF;"
+ + "NS:1;BS:1;NB:1;;";
private static final BluetoothLeBroadcastMetadata METADATA =
BluetoothLeBroadcastMetadataExt.INSTANCE.convertToBroadcastMetadata(METADATA_STR);
+ private static final BluetoothLeBroadcastMetadata METADATA_NO_PASSWORD =
+ BluetoothLeBroadcastMetadataExt.INSTANCE.convertToBroadcastMetadata(
+ METADATA_STR_NO_PASSWORD);
private Fragment mParent;
private FakeFeatureFactory mFeatureFactory;
@@ -290,6 +296,50 @@ public class AudioSharingDialogFragmentTest {
assertThat(dialog.isShowing()).isFalse();
}
+ @Test
+ public void onCreateDialog_noExtraConnectedDevice_hasMetadataNoPassword_showCancelButton() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ AtomicBoolean isCancelBtnClicked = new AtomicBoolean(false);
+ AudioSharingDialogFragment.show(
+ mParent,
+ new ArrayList<>(),
+ METADATA_NO_PASSWORD,
+ new AudioSharingDialogFragment.DialogEventListener() {
+ @Override
+ public void onCancelClick() {
+ isCancelBtnClicked.set(true);
+ }
+ },
+ TEST_EVENT_DATA_LIST);
+ shadowMainLooper().idle();
+ AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ assertThat(dialog).isNotNull();
+ ImageView image = dialog.findViewById(R.id.description_image);
+ assertThat(image).isNotNull();
+ TextView text = dialog.findViewById(R.id.description_text);
+ assertThat(text).isNotNull();
+ assertThat(METADATA_NO_PASSWORD).isNotNull();
+ assertThat(text.getText().toString()).isEqualTo(
+ mParent.getString(R.string.audio_sharing_dialog_qr_code_content_no_password,
+ METADATA_NO_PASSWORD.getBroadcastName()));
+ TextView textBottom = dialog.findViewById(R.id.description_text_2);
+ assertThat(textBottom).isNotNull();
+ assertThat(textBottom.getText().toString()).isEqualTo(
+ mParent.getString(R.string.audio_sharing_dialog_pair_new_device_content));
+ Button cancelBtn = dialog.findViewById(R.id.negative_btn);
+ assertThat(cancelBtn).isNotNull();
+ cancelBtn.performClick();
+ shadowMainLooper().idle();
+
+ verify(mFeatureFactory.metricsFeatureProvider)
+ .action(
+ any(Context.class),
+ eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED),
+ eq(TEST_EVENT_DATA));
+ assertThat(isCancelBtnClicked.get()).isTrue();
+ assertThat(dialog.isShowing()).isFalse();
+ }
+
@Test
public void onCreateDialog_flagOn_singleExtraConnectedDevice() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);