Shouldn't show pair another ear dialog if hearing aid supports CSIP
Some devices may supports both ASHA and CSIP. If the device supports CSIP, it'll automatically pair the other ear and thus no need to pop up the pair another ear dialog which is specially for ASHA device. Bug: 283269736 Test: make RunSettingsRoboTests ROBOTEST_FILTER=HearingAidUtilsTest Change-Id: I9a8e3876e2905b18b1c63e74f47c6877504ebdc8
This commit is contained in:
@@ -23,6 +23,7 @@ import androidx.fragment.app.FragmentManager;
|
|||||||
|
|
||||||
import com.android.settings.bluetooth.HearingAidPairingDialogFragment;
|
import com.android.settings.bluetooth.HearingAidPairingDialogFragment;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
|
import com.android.settingslib.bluetooth.CsipSetCoordinatorProfile;
|
||||||
import com.android.settingslib.bluetooth.HearingAidInfo;
|
import com.android.settingslib.bluetooth.HearingAidInfo;
|
||||||
|
|
||||||
/** Provides utility methods related hearing aids. */
|
/** Provides utility methods related hearing aids. */
|
||||||
@@ -40,6 +41,11 @@ public final class HearingAidUtils {
|
|||||||
*/
|
*/
|
||||||
public static void launchHearingAidPairingDialog(FragmentManager fragmentManager,
|
public static void launchHearingAidPairingDialog(FragmentManager fragmentManager,
|
||||||
@NonNull CachedBluetoothDevice device) {
|
@NonNull CachedBluetoothDevice device) {
|
||||||
|
// No need to show the pair another ear dialog if the device supports and enables CSIP.
|
||||||
|
// CSIP will pair other devices in the same set automatically.
|
||||||
|
if (isCsipSupportedAndEnabled(device)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (device.isConnectedAshaHearingAidDevice()
|
if (device.isConnectedAshaHearingAidDevice()
|
||||||
&& device.getDeviceMode() == HearingAidInfo.DeviceMode.MODE_BINAURAL
|
&& device.getDeviceMode() == HearingAidInfo.DeviceMode.MODE_BINAURAL
|
||||||
&& device.getSubDevice() == null) {
|
&& device.getSubDevice() == null) {
|
||||||
@@ -56,4 +62,10 @@ public final class HearingAidUtils {
|
|||||||
HearingAidPairingDialogFragment.newInstance(device.getAddress()).show(fragmentManager,
|
HearingAidPairingDialogFragment.newInstance(device.getAddress()).show(fragmentManager,
|
||||||
HearingAidPairingDialogFragment.TAG);
|
HearingAidPairingDialogFragment.TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isCsipSupportedAndEnabled(@NonNull CachedBluetoothDevice device) {
|
||||||
|
return device.getProfiles().stream().anyMatch(
|
||||||
|
profile -> (profile instanceof CsipSetCoordinatorProfile)
|
||||||
|
&& (profile.isEnabled(device.getDevice())));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
|
|||||||
import com.android.settings.utils.ActivityControllerWrapper;
|
import com.android.settings.utils.ActivityControllerWrapper;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
|
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
|
||||||
|
import com.android.settingslib.bluetooth.CsipSetCoordinatorProfile;
|
||||||
import com.android.settingslib.bluetooth.HearingAidInfo;
|
import com.android.settingslib.bluetooth.HearingAidInfo;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
|
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
@@ -52,6 +54,9 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
import org.robolectric.shadow.api.Shadow;
|
import org.robolectric.shadow.api.Shadow;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/** Tests for {@link HearingAidUtils}. */
|
/** Tests for {@link HearingAidUtils}. */
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {ShadowAlertDialogCompat.class, ShadowBluetoothAdapter.class,
|
@Config(shadows = {ShadowAlertDialogCompat.class, ShadowBluetoothAdapter.class,
|
||||||
@@ -72,6 +77,8 @@ public class HearingAidUtilsTest {
|
|||||||
private LocalBluetoothManager mLocalBluetoothManager;
|
private LocalBluetoothManager mLocalBluetoothManager;
|
||||||
@Mock
|
@Mock
|
||||||
private CachedBluetoothDeviceManager mCachedDeviceManager;
|
private CachedBluetoothDeviceManager mCachedDeviceManager;
|
||||||
|
@Mock
|
||||||
|
private CsipSetCoordinatorProfile mCsipSetCoordinatorProfile;
|
||||||
private BluetoothDevice mBluetoothDevice;
|
private BluetoothDevice mBluetoothDevice;
|
||||||
private BluetoothAdapter mBluetoothAdapter;
|
private BluetoothAdapter mBluetoothAdapter;
|
||||||
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
|
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
|
||||||
@@ -136,6 +143,38 @@ public class HearingAidUtilsTest {
|
|||||||
assertThat(dialog).isNull();
|
assertThat(dialog).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void launchHearingAidPairingDialog_deviceSupportsCsip_csipEnabled_noDialog() {
|
||||||
|
when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
|
||||||
|
HearingAidInfo.DeviceMode.MODE_BINAURAL);
|
||||||
|
when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
|
||||||
|
HearingAidInfo.DeviceSide.SIDE_LEFT);
|
||||||
|
makeDeviceSupportCsip();
|
||||||
|
makeDeviceEnableCsip(true);
|
||||||
|
|
||||||
|
HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
|
assertThat(dialog).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void launchHearingAidPairingDialog_deviceSupportsCsip_csipDisabled_dialogShown() {
|
||||||
|
when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
|
||||||
|
HearingAidInfo.DeviceMode.MODE_BINAURAL);
|
||||||
|
when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
|
||||||
|
HearingAidInfo.DeviceSide.SIDE_LEFT);
|
||||||
|
makeDeviceSupportCsip();
|
||||||
|
makeDeviceEnableCsip(false);
|
||||||
|
|
||||||
|
HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
|
assertThat(dialog.isShowing()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void launchHearingAidPairingDialog_dialogShown() {
|
public void launchHearingAidPairingDialog_dialogShown() {
|
||||||
when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
|
when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
|
||||||
@@ -150,6 +189,17 @@ public class HearingAidUtilsTest {
|
|||||||
assertThat(dialog.isShowing()).isTrue();
|
assertThat(dialog.isShowing()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void makeDeviceSupportCsip() {
|
||||||
|
List<LocalBluetoothProfile> uuids = new ArrayList<>();
|
||||||
|
uuids.add(mCsipSetCoordinatorProfile);
|
||||||
|
when(mCachedBluetoothDevice.getProfiles()).thenReturn(uuids);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void makeDeviceEnableCsip(boolean enabled) {
|
||||||
|
when(mCsipSetCoordinatorProfile.isEnabled(mCachedBluetoothDevice.getDevice()))
|
||||||
|
.thenReturn(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
private void setupEnvironment() {
|
private void setupEnvironment() {
|
||||||
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
|
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
|
||||||
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||||
|
|||||||
Reference in New Issue
Block a user