Merge "[Audiosharing] Update dialog btn when start sharing with no extra connected device" into main
This commit is contained in:
@@ -44,6 +44,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
|
android:paddingBottom="24dp"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
@@ -30,6 +30,9 @@ import androidx.fragment.app.Fragment;
|
|||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.bluetooth.BluetoothPairingDetail;
|
||||||
|
import com.android.settings.connecteddevice.audiosharing.audiostreams.AudioStreamsQrCodeFragment;
|
||||||
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||||
import com.android.settingslib.bluetooth.BluetoothUtils;
|
import com.android.settingslib.bluetooth.BluetoothUtils;
|
||||||
|
|
||||||
@@ -130,9 +133,27 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment {
|
|||||||
builder.setTitle(R.string.audio_sharing_share_dialog_title)
|
builder.setTitle(R.string.audio_sharing_share_dialog_title)
|
||||||
.setCustomImage(R.drawable.audio_sharing_guidance)
|
.setCustomImage(R.drawable.audio_sharing_guidance)
|
||||||
.setCustomMessage(R.string.audio_sharing_dialog_connect_device_content)
|
.setCustomMessage(R.string.audio_sharing_dialog_connect_device_content)
|
||||||
.setNegativeButton(
|
.setCustomPositiveButton(
|
||||||
R.string.audio_sharing_close_button_label,
|
R.string.audio_sharing_pair_button_label,
|
||||||
(dig, which) -> onCancelClick());
|
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) {
|
} else if (deviceItems.size() == 1) {
|
||||||
AudioSharingDeviceItem deviceItem = Iterables.getOnlyElement(deviceItems);
|
AudioSharingDeviceItem deviceItem = Iterables.getOnlyElement(deviceItems);
|
||||||
builder.setTitle(
|
builder.setTitle(
|
||||||
@@ -145,11 +166,7 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment {
|
|||||||
v -> {
|
v -> {
|
||||||
if (sListener != null) {
|
if (sListener != null) {
|
||||||
sListener.onItemClick(deviceItem);
|
sListener.onItemClick(deviceItem);
|
||||||
mMetricsFeatureProvider.action(
|
logDialogPositiveBtnClick();
|
||||||
getContext(),
|
|
||||||
SettingsEnums
|
|
||||||
.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED,
|
|
||||||
sEventData);
|
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
})
|
})
|
||||||
@@ -165,6 +182,7 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment {
|
|||||||
(AudioSharingDeviceItem item) -> {
|
(AudioSharingDeviceItem item) -> {
|
||||||
if (sListener != null) {
|
if (sListener != null) {
|
||||||
sListener.onItemClick(item);
|
sListener.onItemClick(item);
|
||||||
|
logDialogPositiveBtnClick();
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
},
|
},
|
||||||
@@ -178,11 +196,22 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment {
|
|||||||
private void onCancelClick() {
|
private void onCancelClick() {
|
||||||
if (sListener != null) {
|
if (sListener != null) {
|
||||||
sListener.onCancelClick();
|
sListener.onCancelClick();
|
||||||
mMetricsFeatureProvider.action(
|
logDialogNegativeBtnClick();
|
||||||
getContext(),
|
|
||||||
SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED,
|
|
||||||
sEventData);
|
|
||||||
}
|
}
|
||||||
dismiss();
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -499,7 +499,7 @@ public class AudioSharingDialogHandler {
|
|||||||
private void removeSourceForGroup(
|
private void removeSourceForGroup(
|
||||||
int groupId, Map<Integer, List<BluetoothDevice>> groupedDevices) {
|
int groupId, Map<Integer, List<BluetoothDevice>> groupedDevices) {
|
||||||
if (mAssistant == null) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (!groupedDevices.containsKey(groupId)) {
|
if (!groupedDevices.containsKey(groupId)) {
|
||||||
|
@@ -93,7 +93,6 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
new Pair[] {TEST_EVENT_DATA};
|
new Pair[] {TEST_EVENT_DATA};
|
||||||
|
|
||||||
private Fragment mParent;
|
private Fragment mParent;
|
||||||
private AudioSharingDialogFragment mFragment;
|
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -107,7 +106,6 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
shadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
|
shadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
|
||||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mFragment = new AudioSharingDialogFragment();
|
|
||||||
mParent = new Fragment();
|
mParent = new Fragment();
|
||||||
FragmentController.setupFragment(
|
FragmentController.setupFragment(
|
||||||
mParent, FragmentActivity.class, /* containerViewId= */ 0, /* bundle= */ null);
|
mParent, FragmentActivity.class, /* containerViewId= */ 0, /* bundle= */ null);
|
||||||
@@ -120,7 +118,8 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getMetricsCategory_correctValue() {
|
public void getMetricsCategory_correctValue() {
|
||||||
assertThat(mFragment.getMetricsCategory())
|
AudioSharingDialogFragment fragment = new AudioSharingDialogFragment();
|
||||||
|
assertThat(fragment.getMetricsCategory())
|
||||||
.isEqualTo(SettingsEnums.DIALOG_AUDIO_SHARING_ADD_DEVICE);
|
.isEqualTo(SettingsEnums.DIALOG_AUDIO_SHARING_ADD_DEVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +144,7 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onCreateDialog_flagOn_noConnectedDevice() {
|
public void onCreateDialog_flagOn_noExtraConnectedDevice() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
AudioSharingDialogFragment.show(
|
AudioSharingDialogFragment.show(
|
||||||
mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST);
|
mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST);
|
||||||
@@ -157,42 +156,67 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
assertThat(description).isNotNull();
|
assertThat(description).isNotNull();
|
||||||
ImageView image = dialog.findViewById(R.id.description_image);
|
ImageView image = dialog.findViewById(R.id.description_image);
|
||||||
assertThat(image).isNotNull();
|
assertThat(image).isNotNull();
|
||||||
Button shareBtn = dialog.findViewById(R.id.positive_btn);
|
Button positiveBtn = dialog.findViewById(R.id.positive_btn);
|
||||||
assertThat(shareBtn).isNotNull();
|
assertThat(positiveBtn).isNotNull();
|
||||||
Button cancelBtn = dialog.findViewById(R.id.negative_btn);
|
Button negativeBtn = dialog.findViewById(R.id.negative_btn);
|
||||||
assertThat(cancelBtn).isNotNull();
|
assertThat(negativeBtn).isNotNull();
|
||||||
assertThat(dialog.isShowing()).isTrue();
|
assertThat(dialog.isShowing()).isTrue();
|
||||||
assertThat(description.getVisibility()).isEqualTo(View.VISIBLE);
|
assertThat(description.getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
assertThat(description.getText().toString())
|
assertThat(description.getText().toString())
|
||||||
.isEqualTo(mParent.getString(R.string.audio_sharing_dialog_connect_device_content));
|
.isEqualTo(mParent.getString(R.string.audio_sharing_dialog_connect_device_content));
|
||||||
assertThat(image.getVisibility()).isEqualTo(View.VISIBLE);
|
assertThat(image.getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
assertThat(shareBtn.getVisibility()).isEqualTo(View.GONE);
|
assertThat(positiveBtn.getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
assertThat(cancelBtn.getVisibility()).isEqualTo(View.GONE);
|
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
|
@Test
|
||||||
public void onCreateDialog_noConnectedDevice_dialogDismiss() {
|
public void onCreateDialog_noExtraConnectedDevice_pairNewDevice() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
AudioSharingDialogFragment.show(
|
AudioSharingDialogFragment.show(
|
||||||
mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST);
|
mParent, new ArrayList<>(), EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST);
|
||||||
shadowMainLooper().idle();
|
shadowMainLooper().idle();
|
||||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
assertThat(dialog).isNotNull();
|
assertThat(dialog).isNotNull();
|
||||||
View btnView = dialog.findViewById(android.R.id.button2);
|
Button pairBtn = dialog.findViewById(R.id.positive_btn);
|
||||||
assertThat(btnView).isNotNull();
|
assertThat(pairBtn).isNotNull();
|
||||||
btnView.performClick();
|
pairBtn.performClick();
|
||||||
shadowMainLooper().idle();
|
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();
|
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)
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
.action(
|
.action(
|
||||||
any(Context.class),
|
any(Context.class),
|
||||||
eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED),
|
eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED),
|
||||||
eq(TEST_EVENT_DATA));
|
eq(TEST_EVENT_DATA));
|
||||||
|
assertThat(dialog.isShowing()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onCreateDialog_flagOn_singleConnectedDevice() {
|
public void onCreateDialog_flagOn_singleExtraConnectedDevice() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||||
list.add(TEST_DEVICE_ITEM1);
|
list.add(TEST_DEVICE_ITEM1);
|
||||||
@@ -207,10 +231,10 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
assertThat(description).isNotNull();
|
assertThat(description).isNotNull();
|
||||||
ImageView image = dialog.findViewById(R.id.description_image);
|
ImageView image = dialog.findViewById(R.id.description_image);
|
||||||
assertThat(image).isNotNull();
|
assertThat(image).isNotNull();
|
||||||
Button shareBtn = dialog.findViewById(R.id.positive_btn);
|
Button positiveBtn = dialog.findViewById(R.id.positive_btn);
|
||||||
assertThat(shareBtn).isNotNull();
|
assertThat(positiveBtn).isNotNull();
|
||||||
Button cancelBtn = dialog.findViewById(R.id.negative_btn);
|
Button negativeBtn = dialog.findViewById(R.id.negative_btn);
|
||||||
assertThat(cancelBtn).isNotNull();
|
assertThat(negativeBtn).isNotNull();
|
||||||
assertThat(dialog.isShowing()).isTrue();
|
assertThat(dialog.isShowing()).isTrue();
|
||||||
assertThat(title.getText().toString())
|
assertThat(title.getText().toString())
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
@@ -220,12 +244,16 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
assertThat(description.getText().toString())
|
assertThat(description.getText().toString())
|
||||||
.isEqualTo(mParent.getString(R.string.audio_sharing_dialog_share_content));
|
.isEqualTo(mParent.getString(R.string.audio_sharing_dialog_share_content));
|
||||||
assertThat(image.getVisibility()).isEqualTo(View.GONE);
|
assertThat(image.getVisibility()).isEqualTo(View.GONE);
|
||||||
assertThat(shareBtn.getVisibility()).isEqualTo(View.VISIBLE);
|
assertThat(positiveBtn.getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
assertThat(cancelBtn.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
|
@Test
|
||||||
public void onCreateDialog_singleConnectedDevice_dialogDismiss() {
|
public void onCreateDialog_singleExtraConnectedDevice_dialogDismiss() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||||
list.add(TEST_DEVICE_ITEM1);
|
list.add(TEST_DEVICE_ITEM1);
|
||||||
@@ -248,7 +276,7 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onCreateDialog_singleConnectedDevice_shareClicked() {
|
public void onCreateDialog_singleExtraConnectedDevice_shareClicked() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||||
list.add(TEST_DEVICE_ITEM1);
|
list.add(TEST_DEVICE_ITEM1);
|
||||||
@@ -285,7 +313,7 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onCreateDialog_flagOn_multipleConnectedDevice() {
|
public void onCreateDialog_flagOn_multipleExtraConnectedDevice() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||||
list.add(TEST_DEVICE_ITEM1);
|
list.add(TEST_DEVICE_ITEM1);
|
||||||
@@ -313,12 +341,14 @@ public class AudioSharingDialogFragmentTest {
|
|||||||
assertThat(image.getVisibility()).isEqualTo(View.GONE);
|
assertThat(image.getVisibility()).isEqualTo(View.GONE);
|
||||||
assertThat(shareBtn.getVisibility()).isEqualTo(View.GONE);
|
assertThat(shareBtn.getVisibility()).isEqualTo(View.GONE);
|
||||||
assertThat(cancelBtn.getVisibility()).isEqualTo(View.VISIBLE);
|
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.getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
assertThat(recyclerView.getAdapter().getItemCount()).isEqualTo(3);
|
assertThat(recyclerView.getAdapter().getItemCount()).isEqualTo(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onCreateDialog_multipleConnectedDevice_dialogDismiss() {
|
public void onCreateDialog_multipleExtraConnectedDevice_dialogDismiss() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||||
list.add(TEST_DEVICE_ITEM1);
|
list.add(TEST_DEVICE_ITEM1);
|
||||||
|
Reference in New Issue
Block a user