Fix popup dialog show wrong device name
- Current EditText value will set to preference text if we click
OK in EditTextPreferenceDialogFragment. We will set preference
text to default when click cancel in DeviceNameWarningDialog.
Change-Id: Iab9561953b58276e98ee68d9196fa18e0dc3d78c
Fixes: 115693838
Test: make RunSettingsRoboTests
diff --git a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
index 2720979..0d7b1d3 100644
--- a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
@@ -39,10 +39,10 @@
public class DeviceNamePreferenceController extends BasePreferenceController
implements ValidatedEditTextPreference.Validator,
- Preference.OnPreferenceChangeListener,
- LifecycleObserver,
- OnSaveInstanceState,
- OnCreate {
+ Preference.OnPreferenceChangeListener,
+ LifecycleObserver,
+ OnSaveInstanceState,
+ OnCreate {
private static final String PREF_KEY = "device_name";
public static final int DEVICE_NAME_SET_WARNING_ID = 1;
private static final String KEY_PENDING_DEVICE_NAME = "key_pending_device_name";
@@ -116,9 +116,11 @@
return mWifiDeviceNameTextValidator.isTextValid(deviceName);
}
- public void confirmDeviceName() {
- if (mPendingDeviceName != null) {
+ public void updateDeviceName(boolean update) {
+ if (update && mPendingDeviceName != null) {
setDeviceName(mPendingDeviceName);
+ } else {
+ mPreference.setText(getSummary().toString());
}
}
@@ -153,7 +155,8 @@
* For more information, see {@link com.android.settings.bluetooth.BluetoothNameDialogFragment}.
*/
private static final String getFilteredBluetoothString(final String deviceName) {
- CharSequence filteredSequence = new BluetoothLengthDeviceNameFilter().filter(deviceName, 0, deviceName.length(),
+ CharSequence filteredSequence = new BluetoothLengthDeviceNameFilter().filter(deviceName, 0,
+ deviceName.length(),
new SpannedString(""),
0, 0);
// null -> use the original
diff --git a/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java b/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java
index 5633c11..a6b1dec 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java
@@ -66,7 +66,9 @@
public void onClick(DialogInterface dialog, int which) {
final MyDeviceInfoFragment host = (MyDeviceInfoFragment) getTargetFragment();
if (which == DialogInterface.BUTTON_POSITIVE) {
- host.onSetDeviceNameConfirm();
+ host.onSetDeviceNameConfirm(true);
+ } else {
+ host.onSetDeviceNameConfirm(false);
}
}
}
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 3de46e01..5503ea9 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -178,9 +178,9 @@
DeviceNameWarningDialog.show(this);
}
- public void onSetDeviceNameConfirm() {
+ public void onSetDeviceNameConfirm(boolean confirm) {
final DeviceNamePreferenceController controller = use(DeviceNamePreferenceController.class);
- controller.confirmDeviceName();
+ controller.updateDeviceName(confirm);
}
private static class SummaryProvider implements SummaryLoader.SummaryProvider {
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
index 4ee7f41..8662c7f 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
@@ -114,7 +114,7 @@
@Test
public void setDeviceName_preferenceUpdatedWhenDeviceNameUpdated() {
- forceAcceptDeviceName();
+ acceptDeviceName(true);
mController.displayPreference(mScreen);
mController.onPreferenceChange(mPreference, TESTING_STRING);
@@ -123,7 +123,7 @@
@Test
public void setDeviceName_bluetoothNameUpdatedWhenDeviceNameUpdated() {
- forceAcceptDeviceName();
+ acceptDeviceName(true);
mController.displayPreference(mScreen);
mController.onPreferenceChange(mPreference, TESTING_STRING);
@@ -132,7 +132,7 @@
@Test
public void setDeviceName_wifiTetherNameUpdatedWhenDeviceNameUpdated() {
- forceAcceptDeviceName();
+ acceptDeviceName(true);
mController.displayPreference(mScreen);
mController.onPreferenceChange(mPreference, TESTING_STRING);
@@ -150,21 +150,39 @@
@Test
public void setDeviceName_ignoresIfCancelPressed() {
- forceAcceptDeviceName();
+ acceptDeviceName(true);
mController.displayPreference(mScreen);
mController.onPreferenceChange(mPreference, TESTING_STRING);
assertThat(mBluetoothAdapter.getName()).isEqualTo(TESTING_STRING);
}
- private void forceAcceptDeviceName() {
+ @Test
+ public void setDeviceName_okInDeviceNameWarningDialog_shouldChangePreferenceText() {
+ acceptDeviceName(true);
+ mController.displayPreference(mScreen);
+ mController.onPreferenceChange(mPreference, TESTING_STRING);
+
+ assertThat(mPreference.getSummary()).isEqualTo(TESTING_STRING);
+ }
+
+ @Test
+ public void setDeviceName_cancelInDeviceNameWarningDialog_shouldNotChangePreferenceText() {
+ acceptDeviceName(false);
+ mController.displayPreference(mScreen);
+ mController.onPreferenceChange(mPreference, TESTING_STRING);
+
+ assertThat(mPreference.getSummary()).isNotEqualTo(TESTING_STRING);
+ assertThat(mPreference.getText()).isEqualTo(mPreference.getSummary());
+ }
+
+ private void acceptDeviceName(boolean accept) {
mController.setHost(
new DeviceNamePreferenceController.DeviceNamePreferenceHost() {
@Override
public void showDeviceNameWarningDialog(String deviceName) {
- mController.confirmDeviceName();
+ mController.updateDeviceName(accept);
}
});
}
-
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/deviceinfo/DeviceNameWarningDialogTest.java b/tests/robotests/src/com/android/settings/deviceinfo/deviceinfo/DeviceNameWarningDialogTest.java
index e28e6ec..9e1400b 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/deviceinfo/DeviceNameWarningDialogTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/deviceinfo/DeviceNameWarningDialogTest.java
@@ -30,7 +30,7 @@
fragmentController.create().start().resume();
fragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
- verify(deviceInfoFragment).onSetDeviceNameConfirm();
+ verify(deviceInfoFragment).onSetDeviceNameConfirm(true);
}
@Test
@@ -43,6 +43,6 @@
fragmentController.create().start().resume();
fragment.onClick(null, DialogInterface.BUTTON_NEGATIVE);
- verify(deviceInfoFragment, never()).onSetDeviceNameConfirm();
+ verify(deviceInfoFragment).onSetDeviceNameConfirm(false);
}
}