From d9ecc3ae9a982ae70a27b866734b127c8e2c72c5 Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Mon, 29 Apr 2019 17:50:35 -0700 Subject: [PATCH] Update dialog text for untethered BT device Fixes: 122672631 Test: RunSettingsRoboTests Change-Id: I380308acbb7025461ef34aeec68e535189714bf3 --- res/values/strings.xml | 3 + .../bluetooth/ForgetDeviceDialogFragment.java | 8 ++- .../ForgetDeviceDialogFragmentTest.java | 57 ++++++++++++++++++- 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 959a72f1e31..ee3c5d34a70 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1786,6 +1786,9 @@ Your device will no longer be paired with %1$s + + %1$s will no longer be paired with any device linked to this account + Forget device diff --git a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java index db6b8325a29..6d8fb3380e1 100644 --- a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java +++ b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java @@ -29,6 +29,7 @@ import androidx.appcompat.app.AlertDialog; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; @@ -72,13 +73,18 @@ public class ForgetDeviceDialogFragment extends InstrumentedDialogFragment { }; Context context = getContext(); mDevice = getDevice(context); + final boolean untetheredHeadset = BluetoothUtils.getBooleanMetaData( + mDevice.getDevice(), BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET); + AlertDialog dialog = new AlertDialog.Builder(context) .setPositiveButton(R.string.bluetooth_unpair_dialog_forget_confirm_button, onConfirm) .setNegativeButton(android.R.string.cancel, null) .create(); dialog.setTitle(R.string.bluetooth_unpair_dialog_title); - dialog.setMessage(context.getString(R.string.bluetooth_unpair_dialog_body, + dialog.setMessage(context.getString(untetheredHeadset + ? R.string.bluetooth_untethered_unpair_dialog_body + : R.string.bluetooth_unpair_dialog_body, mDevice.getName())); return dialog; } diff --git a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java index 44ffa5494a2..b4f4f97f228 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java @@ -25,10 +25,15 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.bluetooth.BluetoothDevice; +import android.content.Context; + import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentActivity; +import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import org.junit.Before; @@ -39,33 +44,46 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowDialog; +import org.robolectric.shadows.androidx.fragment.FragmentController; @RunWith(RobolectricTestRunner.class) +@Config(shadows = {ShadowAlertDialogCompat.class}) public class ForgetDeviceDialogFragmentTest { + private static final String DEVICE_NAME = "Nightshade"; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) private CachedBluetoothDevice mCachedDevice; + @Mock + private BluetoothDevice mBluetoothDevice; private ForgetDeviceDialogFragment mFragment; private FragmentActivity mActivity; private AlertDialog mDialog; + private Context mContext; @Before public void setUp() { MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; FakeFeatureFactory.setupForTest(); String deviceAddress = "55:66:77:88:99:AA"; when(mCachedDevice.getAddress()).thenReturn(deviceAddress); + when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice); + when(mCachedDevice.getName()).thenReturn(DEVICE_NAME); mFragment = spy(ForgetDeviceDialogFragment.newInstance(deviceAddress)); doReturn(mCachedDevice).when(mFragment).getDevice(any()); mActivity = Robolectric.setupActivity(FragmentActivity.class); - mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commit(); - mDialog = (AlertDialog) ShadowDialog.getLatestDialog(); } @Test public void cancelDialog() { + initDialog(); + mDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick(); verify(mCachedDevice, never()).unpair(); assertThat(mActivity.isFinishing()).isFalse(); @@ -73,8 +91,43 @@ public class ForgetDeviceDialogFragmentTest { @Test public void confirmDialog() { + initDialog(); + mDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); verify(mCachedDevice).unpair(); assertThat(mActivity.isFinishing()).isTrue(); } + + @Test + public void createDialog_untetheredDevice_showUntetheredMessage() { + when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)) + .thenReturn("true".getBytes()); + + FragmentController.setupFragment(mFragment, FragmentActivity.class, + 0 /* containerViewId */, null /* bundle */); + final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); + ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); + + assertThat(shadowDialog.getMessage()).isEqualTo( + mContext.getString(R.string.bluetooth_untethered_unpair_dialog_body, DEVICE_NAME)); + } + + @Test + public void createDialog_normalDevice_showNormalMessage() { + when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)) + .thenReturn("false".getBytes()); + + FragmentController.setupFragment(mFragment, FragmentActivity.class, + 0 /* containerViewId */, null /* bundle */); + final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); + ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); + + assertThat(shadowDialog.getMessage()).isEqualTo( + mContext.getString(R.string.bluetooth_unpair_dialog_body, DEVICE_NAME)); + } + + private void initDialog() { + mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commit(); + mDialog = (AlertDialog) ShadowDialog.getLatestDialog(); + } }