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