[Audiosharing] Avoid dialog flickering for same bt device group.
Before this change, the dialog will dismiss and show up again if the second bud of the same group is connected. In this change, StopDialog and JoinDialog will only update the message and event listener when the dialog is triggered by another device with the same group id or the new bt device with different group id. (No dismiss and show); DisconnectDialog will only dismiss and show again when a new bt device with different group id is connected and update the event listener when another device with the same group id connected. Also dismiss the dialog when the triggering device disconnect or join the sharing. Test: atest Bug: 305620450 Change-Id: I798812101cefb24185d76d56f78eae27712dd7a6
This commit is contained in:
@@ -18,15 +18,18 @@ package com.android.settings.connecteddevice.audiosharing;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothStatusCodes;
|
||||
import android.platform.test.annotations.RequiresFlagsDisabled;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -37,11 +40,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.flags.Flags;
|
||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
@@ -50,6 +55,7 @@ import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.androidx.fragment.FragmentController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(
|
||||
@@ -67,38 +73,68 @@ public class AudioSharingDisconnectDialogFragmentTest {
|
||||
private static final String TEST_DEVICE_NAME1 = "test1";
|
||||
private static final String TEST_DEVICE_NAME2 = "test2";
|
||||
private static final String TEST_DEVICE_NAME3 = "test3";
|
||||
private static final int TEST_GROUP_ID1 = 1;
|
||||
private static final int TEST_GROUP_ID2 = 2;
|
||||
private static final int TEST_GROUP_ID3 = 3;
|
||||
private static final AudioSharingDeviceItem TEST_DEVICE_ITEM1 =
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME1, /* groupId= */ 1, /* isActive= */ true);
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME1, TEST_GROUP_ID1, /* isActive= */ true);
|
||||
private static final AudioSharingDeviceItem TEST_DEVICE_ITEM2 =
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME2, /* groupId= */ 2, /* isActive= */ false);
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME2, TEST_GROUP_ID2, /* isActive= */ false);
|
||||
private static final AudioSharingDeviceItem TEST_DEVICE_ITEM3 =
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME3, TEST_GROUP_ID3, /* isActive= */ false);
|
||||
|
||||
@Mock private BluetoothDevice mDevice1;
|
||||
@Mock private BluetoothDevice mDevice2;
|
||||
@Mock private BluetoothDevice mDevice3;
|
||||
|
||||
@Mock private CachedBluetoothDevice mCachedDevice1;
|
||||
@Mock private CachedBluetoothDevice mCachedDevice2;
|
||||
@Mock private CachedBluetoothDevice mCachedDevice3;
|
||||
private Fragment mParent;
|
||||
private AudioSharingDisconnectDialogFragment mFragment;
|
||||
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
|
||||
private ArrayList<AudioSharingDeviceItem> mDeviceItems = new ArrayList<>();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
ShadowAlertDialogCompat.reset();
|
||||
AlertDialog latestAlertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
if (latestAlertDialog != null) {
|
||||
latestAlertDialog.dismiss();
|
||||
ShadowAlertDialogCompat.reset();
|
||||
}
|
||||
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
|
||||
mShadowBluetoothAdapter.setEnabled(true);
|
||||
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
|
||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||
mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
|
||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||
when(mCachedDevice1.getName()).thenReturn(TEST_DEVICE_NAME1);
|
||||
when(mCachedDevice1.getDevice()).thenReturn(mDevice1);
|
||||
when(mCachedDevice1.getGroupId()).thenReturn(TEST_GROUP_ID1);
|
||||
when(mCachedDevice2.getName()).thenReturn(TEST_DEVICE_NAME2);
|
||||
when(mCachedDevice2.getDevice()).thenReturn(mDevice2);
|
||||
when(mCachedDevice2.getGroupId()).thenReturn(TEST_GROUP_ID2);
|
||||
when(mCachedDevice3.getName()).thenReturn(TEST_DEVICE_NAME3);
|
||||
when(mCachedDevice3.getDevice()).thenReturn(mDevice3);
|
||||
when(mCachedDevice3.getGroupId()).thenReturn(TEST_GROUP_ID3);
|
||||
mFragment = new AudioSharingDisconnectDialogFragment();
|
||||
mParent = new Fragment();
|
||||
FragmentController.setupFragment(
|
||||
mParent, FragmentActivity.class, /* containerViewId= */ 0, /* bundle= */ null);
|
||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||
list.add(TEST_DEVICE_ITEM1);
|
||||
list.add(TEST_DEVICE_ITEM2);
|
||||
mFragment.show(mParent, list, TEST_DEVICE_NAME3, (item) -> {});
|
||||
mDeviceItems.add(TEST_DEVICE_ITEM1);
|
||||
mDeviceItems.add(TEST_DEVICE_ITEM2);
|
||||
mFragment.show(mParent, mDeviceItems, mCachedDevice3, (item) -> {});
|
||||
shadowMainLooper().idle();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsDisabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_flagOff_dialogNotExist() {
|
||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||
list.add(TEST_DEVICE_ITEM1);
|
||||
list.add(TEST_DEVICE_ITEM2);
|
||||
mFragment.show(mParent, list, mCachedDevice3, (item) -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNull();
|
||||
}
|
||||
@@ -107,16 +143,79 @@ public class AudioSharingDisconnectDialogFragmentTest {
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_flagOn_dialogShowBtnForTwoDevices() {
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
View rootView = shadowDialog.getView();
|
||||
RecyclerView view = rootView.findViewById(R.id.device_btn_list);
|
||||
assertThat(view.getAdapter().getItemCount()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_dialogIsShowingForSameGroup_updateDialog() {
|
||||
String prefix = "Disconnect ";
|
||||
AtomicBoolean isItemBtnClicked = new AtomicBoolean(false);
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
View rootView = shadowDialog.getView();
|
||||
RecyclerView view = rootView.findViewById(R.id.device_btn_list);
|
||||
assertThat(view.getAdapter().getItemCount()).isEqualTo(2);
|
||||
Button btn1 =
|
||||
view.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.device_button);
|
||||
assertThat(btn1.getText().toString()).isEqualTo(prefix + TEST_DEVICE_NAME1);
|
||||
Button btn2 =
|
||||
view.findViewHolderForAdapterPosition(1).itemView.findViewById(R.id.device_button);
|
||||
assertThat(btn2.getText().toString()).isEqualTo(prefix + TEST_DEVICE_NAME2);
|
||||
btn1.performClick();
|
||||
assertThat(isItemBtnClicked.get()).isFalse();
|
||||
|
||||
// Update dialog content with same group
|
||||
mFragment.show(mParent, mDeviceItems, mCachedDevice3, (item) -> isItemBtnClicked.set(true));
|
||||
shadowMainLooper().idle();
|
||||
dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
btn1 = view.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.device_button);
|
||||
btn1.performClick();
|
||||
assertThat(isItemBtnClicked.get()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_dialogIsShowingForNewGroup_updateDialog() {
|
||||
String prefix = "Disconnect ";
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
View rootView = shadowDialog.getView();
|
||||
RecyclerView view = rootView.findViewById(R.id.device_btn_list);
|
||||
assertThat(view.getAdapter().getItemCount()).isEqualTo(2);
|
||||
|
||||
// Update dialog content with new group
|
||||
ArrayList<AudioSharingDeviceItem> newDeviceItems = new ArrayList<>();
|
||||
newDeviceItems.add(TEST_DEVICE_ITEM2);
|
||||
newDeviceItems.add(TEST_DEVICE_ITEM3);
|
||||
mFragment.show(mParent, newDeviceItems, mCachedDevice1, (item) -> {});
|
||||
shadowMainLooper().idle();
|
||||
dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
rootView = shadowDialog.getView();
|
||||
view = rootView.findViewById(R.id.device_btn_list);
|
||||
assertThat(view.getAdapter().getItemCount()).isEqualTo(2);
|
||||
Button btn1 =
|
||||
view.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.device_button);
|
||||
assertThat(btn1.getText().toString()).isEqualTo(prefix + TEST_DEVICE_NAME2);
|
||||
Button btn2 =
|
||||
view.findViewHolderForAdapterPosition(1).itemView.findViewById(R.id.device_button);
|
||||
assertThat(btn2.getText().toString()).isEqualTo(prefix + TEST_DEVICE_NAME3);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_clickCancel_dialogDismiss() {
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
View rootView = shadowDialog.getView();
|
||||
rootView.findViewById(R.id.cancel_btn).performClick();
|
||||
|
@@ -18,6 +18,7 @@ package com.android.settings.connecteddevice.audiosharing;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
@@ -27,7 +28,6 @@ import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -37,11 +37,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.flags.Flags;
|
||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
@@ -67,22 +69,32 @@ public class AudioSharingJoinDialogFragmentTest {
|
||||
|
||||
private static final String TEST_DEVICE_NAME1 = "test1";
|
||||
private static final String TEST_DEVICE_NAME2 = "test2";
|
||||
private static final AudioSharingDeviceItem TEST_DEVICE_ITEM =
|
||||
private static final AudioSharingDeviceItem TEST_DEVICE_ITEM1 =
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME1, /* groupId= */ 1, /* isActive= */ true);
|
||||
private static final AudioSharingDeviceItem TEST_DEVICE_ITEM2 =
|
||||
new AudioSharingDeviceItem(TEST_DEVICE_NAME2, /* groupId= */ 2, /* isActive= */ false);
|
||||
|
||||
@Mock private CachedBluetoothDevice mCachedDevice1;
|
||||
@Mock private CachedBluetoothDevice mCachedDevice2;
|
||||
private Fragment mParent;
|
||||
private AudioSharingJoinDialogFragment mFragment;
|
||||
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
ShadowAlertDialogCompat.reset();
|
||||
AlertDialog latestAlertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
if (latestAlertDialog != null) {
|
||||
latestAlertDialog.dismiss();
|
||||
ShadowAlertDialogCompat.reset();
|
||||
}
|
||||
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
|
||||
mShadowBluetoothAdapter.setEnabled(true);
|
||||
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
|
||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||
mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
|
||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||
when(mCachedDevice1.getName()).thenReturn(TEST_DEVICE_NAME1);
|
||||
when(mCachedDevice2.getName()).thenReturn(TEST_DEVICE_NAME2);
|
||||
mFragment = new AudioSharingJoinDialogFragment();
|
||||
mParent = new Fragment();
|
||||
FragmentController.setupFragment(
|
||||
@@ -92,7 +104,7 @@ public class AudioSharingJoinDialogFragmentTest {
|
||||
@Test
|
||||
@RequiresFlagsDisabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_flagOff_dialogNotExist() {
|
||||
mFragment.show(mParent, new ArrayList<>(), TEST_DEVICE_NAME2, () -> {});
|
||||
mFragment.show(mParent, new ArrayList<>(), mCachedDevice2, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNull();
|
||||
@@ -101,37 +113,58 @@ public class AudioSharingJoinDialogFragmentTest {
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_flagOn_dialogShowTextForSingleDevice() {
|
||||
mFragment.show(mParent, new ArrayList<>(), TEST_DEVICE_NAME2, () -> {});
|
||||
mFragment.show(mParent, new ArrayList<>(), mCachedDevice2, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNotNull();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
View rootView = shadowDialog.getView();
|
||||
TextView subtitle1 = rootView.findViewById(R.id.share_audio_subtitle1);
|
||||
assertThat(subtitle1.getText()).isEqualTo(TEST_DEVICE_NAME2);
|
||||
assertThat(shadowDialog.getMessage().toString()).isEqualTo(TEST_DEVICE_NAME2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_flagOn_dialogShowTextForTwoDevice() {
|
||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||
list.add(TEST_DEVICE_ITEM);
|
||||
mFragment.show(mParent, list, TEST_DEVICE_NAME2, () -> {});
|
||||
list.add(TEST_DEVICE_ITEM1);
|
||||
mFragment.show(mParent, list, mCachedDevice2, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNotNull();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
View rootView = shadowDialog.getView();
|
||||
TextView subtitle1 = rootView.findViewById(R.id.share_audio_subtitle1);
|
||||
assertThat(subtitle1.getText()).isEqualTo(TEST_DEVICE_NAME1 + " and " + TEST_DEVICE_NAME2);
|
||||
assertThat(shadowDialog.getMessage().toString())
|
||||
.isEqualTo(TEST_DEVICE_NAME1 + " and " + TEST_DEVICE_NAME2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_dialogIsShowing_updateDialog() {
|
||||
ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
|
||||
list.add(TEST_DEVICE_ITEM1);
|
||||
mFragment.show(mParent, list, mCachedDevice2, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNotNull();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
|
||||
// Update the content
|
||||
ArrayList<AudioSharingDeviceItem> list2 = new ArrayList<>();
|
||||
list2.add(TEST_DEVICE_ITEM2);
|
||||
mFragment.show(mParent, list2, mCachedDevice1, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNotNull();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
assertThat(shadowDialog.getMessage().toString())
|
||||
.isEqualTo(TEST_DEVICE_NAME2 + " and " + TEST_DEVICE_NAME1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_clickCancel_dialogDismiss() {
|
||||
mFragment.show(mParent, new ArrayList<>(), TEST_DEVICE_NAME2, () -> {});
|
||||
mFragment.show(mParent, new ArrayList<>(), mCachedDevice2, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
@@ -145,7 +178,7 @@ public class AudioSharingJoinDialogFragmentTest {
|
||||
public void onCreateDialog_clickShare_callbackTriggered() {
|
||||
AtomicBoolean isShareBtnClicked = new AtomicBoolean(false);
|
||||
mFragment.show(
|
||||
mParent, new ArrayList<>(), TEST_DEVICE_NAME2, () -> isShareBtnClicked.set(true));
|
||||
mParent, new ArrayList<>(), mCachedDevice2, () -> isShareBtnClicked.set(true));
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
|
@@ -18,6 +18,7 @@ package com.android.settings.connecteddevice.audiosharing;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
@@ -34,11 +35,13 @@ import androidx.fragment.app.FragmentActivity;
|
||||
import com.android.settings.flags.Flags;
|
||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
@@ -61,21 +64,30 @@ public class AudioSharingStopDialogFragmentTest {
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
|
||||
private static final String TEST_DEVICE_NAME = "test";
|
||||
private static final String TEST_DEVICE_NAME1 = "test1";
|
||||
private static final String TEST_DEVICE_NAME2 = "test2";
|
||||
|
||||
@Mock private CachedBluetoothDevice mCachedDevice1;
|
||||
@Mock private CachedBluetoothDevice mCachedDevice2;
|
||||
private Fragment mParent;
|
||||
private AudioSharingStopDialogFragment mFragment;
|
||||
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
ShadowAlertDialogCompat.reset();
|
||||
AlertDialog latestAlertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
if (latestAlertDialog != null) {
|
||||
latestAlertDialog.dismiss();
|
||||
ShadowAlertDialogCompat.reset();
|
||||
}
|
||||
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
|
||||
mShadowBluetoothAdapter.setEnabled(true);
|
||||
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
|
||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||
mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
|
||||
BluetoothStatusCodes.FEATURE_SUPPORTED);
|
||||
when(mCachedDevice1.getName()).thenReturn(TEST_DEVICE_NAME1);
|
||||
when(mCachedDevice2.getName()).thenReturn(TEST_DEVICE_NAME2);
|
||||
mFragment = new AudioSharingStopDialogFragment();
|
||||
mParent = new Fragment();
|
||||
FragmentController.setupFragment(
|
||||
@@ -85,16 +97,38 @@ public class AudioSharingStopDialogFragmentTest {
|
||||
@Test
|
||||
@RequiresFlagsDisabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_flagOff_dialogNotExist() {
|
||||
mFragment.show(mParent, TEST_DEVICE_NAME, () -> {});
|
||||
mFragment.show(mParent, mCachedDevice1, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_dialogIsShowing_updateDialog() {
|
||||
String postMessage = " wants to connect, headphones in audio sharing will disconnect.";
|
||||
mFragment.show(mParent, mCachedDevice1, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNotNull();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
assertThat(shadowDialog.getMessage().toString()).isEqualTo(TEST_DEVICE_NAME1 + postMessage);
|
||||
|
||||
// Update the content
|
||||
mFragment.show(mParent, mCachedDevice2, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNotNull();
|
||||
assertThat(dialog.isShowing()).isTrue();
|
||||
shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
assertThat(shadowDialog.getMessage().toString()).isEqualTo(TEST_DEVICE_NAME2 + postMessage);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_clickCancel_dialogDismiss() {
|
||||
mFragment.show(mParent, TEST_DEVICE_NAME, () -> {});
|
||||
mFragment.show(mParent, mCachedDevice1, () -> {});
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
dialog.findViewById(android.R.id.button2).performClick();
|
||||
@@ -106,7 +140,7 @@ public class AudioSharingStopDialogFragmentTest {
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
|
||||
public void onCreateDialog_clickShare_callbackTriggered() {
|
||||
AtomicBoolean isStopBtnClicked = new AtomicBoolean(false);
|
||||
mFragment.show(mParent, TEST_DEVICE_NAME, () -> isStopBtnClicked.set(true));
|
||||
mFragment.show(mParent, mCachedDevice1, () -> isStopBtnClicked.set(true));
|
||||
shadowMainLooper().idle();
|
||||
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
dialog.findViewById(android.R.id.button1).performClick();
|
||||
|
Reference in New Issue
Block a user