diff --git a/res/layout/dialog_custom_body_audio_sharing.xml b/res/layout/dialog_custom_body_audio_sharing.xml index 528bfbb43a7..ba7f6431baa 100644 --- a/res/layout/dialog_custom_body_audio_sharing.xml +++ b/res/layout/dialog_custom_body_audio_sharing.xml @@ -44,6 +44,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:contentDescription="@null" + android:paddingBottom="24dp" android:visibility="gone" /> onCancelClick()); + .setCustomPositiveButton( + R.string.audio_sharing_pair_button_label, + v -> { + dismiss(); + new SubSettingLauncher(getContext()) + .setDestination(BluetoothPairingDetail.class.getName()) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); + logDialogPositiveBtnClick(); + }) + .setCustomNegativeButton( + R.string.audio_sharing_qrcode_button_label, + v -> { + dismiss(); + new SubSettingLauncher(getContext()) + .setTitleRes(R.string.audio_streams_qr_code_page_title) + .setDestination(AudioStreamsQrCodeFragment.class.getName()) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); + logDialogNegativeBtnClick(); + }); } else if (deviceItems.size() == 1) { AudioSharingDeviceItem deviceItem = Iterables.getOnlyElement(deviceItems); builder.setTitle( @@ -145,11 +166,7 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { v -> { if (sListener != null) { sListener.onItemClick(deviceItem); - mMetricsFeatureProvider.action( - getContext(), - SettingsEnums - .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, - sEventData); + logDialogPositiveBtnClick(); } dismiss(); }) @@ -165,6 +182,7 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { (AudioSharingDeviceItem item) -> { if (sListener != null) { sListener.onItemClick(item); + logDialogPositiveBtnClick(); } dismiss(); }, @@ -178,11 +196,22 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { private void onCancelClick() { if (sListener != null) { sListener.onCancelClick(); - mMetricsFeatureProvider.action( - getContext(), - SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, - sEventData); + logDialogNegativeBtnClick(); } dismiss(); } + + private void logDialogPositiveBtnClick() { + mMetricsFeatureProvider.action( + getContext(), + SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, + sEventData); + } + + private void logDialogNegativeBtnClick() { + mMetricsFeatureProvider.action( + getContext(), + SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, + sEventData); + } } diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java index 4ee405d0f35..14c19decb6f 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java @@ -499,7 +499,7 @@ public class AudioSharingDialogHandler { private void removeSourceForGroup( int groupId, Map> groupedDevices) { if (mAssistant == null) { - Log.d(TAG, "Fail to add source due to null profiles, group = " + groupId); + Log.d(TAG, "Fail to remove source due to null profiles, group = " + groupId); return; } if (!groupedDevices.containsKey(groupId)) { 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 20c225c09bf..7227f37998b 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java @@ -93,7 +93,6 @@ public class AudioSharingDialogFragmentTest { new Pair[] {TEST_EVENT_DATA}; private Fragment mParent; - private AudioSharingDialogFragment mFragment; private FakeFeatureFactory mFeatureFactory; @Before @@ -107,7 +106,6 @@ public class AudioSharingDialogFragmentTest { shadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported( BluetoothStatusCodes.FEATURE_SUPPORTED); mFeatureFactory = FakeFeatureFactory.setupForTest(); - mFragment = new AudioSharingDialogFragment(); mParent = new Fragment(); FragmentController.setupFragment( mParent, FragmentActivity.class, /* containerViewId= */ 0, /* bundle= */ null); @@ -120,7 +118,8 @@ public class AudioSharingDialogFragmentTest { @Test public void getMetricsCategory_correctValue() { - assertThat(mFragment.getMetricsCategory()) + AudioSharingDialogFragment fragment = new AudioSharingDialogFragment(); + assertThat(fragment.getMetricsCategory()) .isEqualTo(SettingsEnums.DIALOG_AUDIO_SHARING_ADD_DEVICE); } @@ -145,7 +144,7 @@ public class AudioSharingDialogFragmentTest { } @Test - public void onCreateDialog_flagOn_noConnectedDevice() { + public void onCreateDialog_flagOn_noExtraConnectedDevice() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); AudioSharingDialogFragment.show( mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); @@ -157,42 +156,67 @@ public class AudioSharingDialogFragmentTest { assertThat(description).isNotNull(); ImageView image = dialog.findViewById(R.id.description_image); assertThat(image).isNotNull(); - Button shareBtn = dialog.findViewById(R.id.positive_btn); - assertThat(shareBtn).isNotNull(); - Button cancelBtn = dialog.findViewById(R.id.negative_btn); - assertThat(cancelBtn).isNotNull(); + Button positiveBtn = dialog.findViewById(R.id.positive_btn); + assertThat(positiveBtn).isNotNull(); + Button negativeBtn = dialog.findViewById(R.id.negative_btn); + assertThat(negativeBtn).isNotNull(); assertThat(dialog.isShowing()).isTrue(); assertThat(description.getVisibility()).isEqualTo(View.VISIBLE); assertThat(description.getText().toString()) .isEqualTo(mParent.getString(R.string.audio_sharing_dialog_connect_device_content)); assertThat(image.getVisibility()).isEqualTo(View.VISIBLE); - assertThat(shareBtn.getVisibility()).isEqualTo(View.GONE); - assertThat(cancelBtn.getVisibility()).isEqualTo(View.GONE); + assertThat(positiveBtn.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(positiveBtn.getText().toString()) + .isEqualTo(mParent.getString(R.string.audio_sharing_pair_button_label)); + assertThat(negativeBtn.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(negativeBtn.getText().toString()) + .isEqualTo(mParent.getString(R.string.audio_sharing_qrcode_button_label)); } @Test - public void onCreateDialog_noConnectedDevice_dialogDismiss() { + public void onCreateDialog_noExtraConnectedDevice_pairNewDevice() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); AudioSharingDialogFragment.show( mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); assertThat(dialog).isNotNull(); - View btnView = dialog.findViewById(android.R.id.button2); - assertThat(btnView).isNotNull(); - btnView.performClick(); + Button pairBtn = dialog.findViewById(R.id.positive_btn); + assertThat(pairBtn).isNotNull(); + pairBtn.performClick(); shadowMainLooper().idle(); + verify(mFeatureFactory.metricsFeatureProvider) + .action( + any(Context.class), + eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED), + eq(TEST_EVENT_DATA)); assertThat(dialog.isShowing()).isFalse(); + } + + @Test + public void onCreateDialog_noExtraConnectedDevice_showQRCode() { + mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); + AudioSharingDialogFragment.show( + mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); + shadowMainLooper().idle(); + AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); + assertThat(dialog).isNotNull(); + Button qrCodeBtn = dialog.findViewById(R.id.negative_btn); + assertThat(qrCodeBtn).isNotNull(); + qrCodeBtn.performClick(); + shadowMainLooper().idle(); + verify(mFeatureFactory.metricsFeatureProvider) .action( any(Context.class), eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED), eq(TEST_EVENT_DATA)); + assertThat(dialog.isShowing()).isFalse(); } @Test - public void onCreateDialog_flagOn_singleConnectedDevice() { + public void onCreateDialog_flagOn_singleExtraConnectedDevice() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); ArrayList list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); @@ -207,10 +231,10 @@ public class AudioSharingDialogFragmentTest { assertThat(description).isNotNull(); ImageView image = dialog.findViewById(R.id.description_image); assertThat(image).isNotNull(); - Button shareBtn = dialog.findViewById(R.id.positive_btn); - assertThat(shareBtn).isNotNull(); - Button cancelBtn = dialog.findViewById(R.id.negative_btn); - assertThat(cancelBtn).isNotNull(); + Button positiveBtn = dialog.findViewById(R.id.positive_btn); + assertThat(positiveBtn).isNotNull(); + Button negativeBtn = dialog.findViewById(R.id.negative_btn); + assertThat(negativeBtn).isNotNull(); assertThat(dialog.isShowing()).isTrue(); assertThat(title.getText().toString()) .isEqualTo( @@ -220,12 +244,16 @@ public class AudioSharingDialogFragmentTest { assertThat(description.getText().toString()) .isEqualTo(mParent.getString(R.string.audio_sharing_dialog_share_content)); assertThat(image.getVisibility()).isEqualTo(View.GONE); - assertThat(shareBtn.getVisibility()).isEqualTo(View.VISIBLE); - assertThat(cancelBtn.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(positiveBtn.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(positiveBtn.getText().toString()) + .isEqualTo(mParent.getString(R.string.audio_sharing_share_button_label)); + assertThat(negativeBtn.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(negativeBtn.getText().toString()) + .isEqualTo(mParent.getString(R.string.audio_sharing_no_thanks_button_label)); } @Test - public void onCreateDialog_singleConnectedDevice_dialogDismiss() { + public void onCreateDialog_singleExtraConnectedDevice_dialogDismiss() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); ArrayList list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); @@ -248,7 +276,7 @@ public class AudioSharingDialogFragmentTest { } @Test - public void onCreateDialog_singleConnectedDevice_shareClicked() { + public void onCreateDialog_singleExtraConnectedDevice_shareClicked() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); ArrayList list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); @@ -285,7 +313,7 @@ public class AudioSharingDialogFragmentTest { } @Test - public void onCreateDialog_flagOn_multipleConnectedDevice() { + public void onCreateDialog_flagOn_multipleExtraConnectedDevice() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); ArrayList list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); @@ -313,12 +341,14 @@ public class AudioSharingDialogFragmentTest { assertThat(image.getVisibility()).isEqualTo(View.GONE); assertThat(shareBtn.getVisibility()).isEqualTo(View.GONE); assertThat(cancelBtn.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(cancelBtn.getText().toString()) + .isEqualTo(mParent.getString(com.android.settings.R.string.cancel)); assertThat(recyclerView.getVisibility()).isEqualTo(View.VISIBLE); assertThat(recyclerView.getAdapter().getItemCount()).isEqualTo(3); } @Test - public void onCreateDialog_multipleConnectedDevice_dialogDismiss() { + public void onCreateDialog_multipleExtraConnectedDevice_dialogDismiss() { mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); ArrayList list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1);