From b20bfc949af2561534d07cc3962ec74c69c07abb Mon Sep 17 00:00:00 2001 From: Raff Tsai Date: Fri, 14 Sep 2018 23:17:51 +0800 Subject: [PATCH] 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 --- .../DeviceNamePreferenceController.java | 17 ++++++---- .../aboutphone/DeviceNameWarningDialog.java | 4 ++- .../aboutphone/MyDeviceInfoFragment.java | 4 +-- .../DeviceNamePreferenceControllerTest.java | 32 +++++++++++++++---- .../DeviceNameWarningDialogTest.java | 4 +-- 5 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java index 2720979e0b0..0d7b1d313cb 100644 --- a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java +++ b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java @@ -39,10 +39,10 @@ import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; 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 @@ public class DeviceNamePreferenceController extends BasePreferenceController 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 @@ public class DeviceNamePreferenceController extends BasePreferenceController * 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 5633c11cc47..a6b1dec8e6e 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java +++ b/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java @@ -66,7 +66,9 @@ public class DeviceNameWarningDialog extends InstrumentedDialogFragment 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 3de46e015bc..5503ea97677 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java @@ -178,9 +178,9 @@ public class MyDeviceInfoFragment extends DashboardFragment 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 4ee7f41c187..8662c7f652d 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 @@ public class DeviceNamePreferenceControllerTest { @Test public void setDeviceName_preferenceUpdatedWhenDeviceNameUpdated() { - forceAcceptDeviceName(); + acceptDeviceName(true); mController.displayPreference(mScreen); mController.onPreferenceChange(mPreference, TESTING_STRING); @@ -123,7 +123,7 @@ public class DeviceNamePreferenceControllerTest { @Test public void setDeviceName_bluetoothNameUpdatedWhenDeviceNameUpdated() { - forceAcceptDeviceName(); + acceptDeviceName(true); mController.displayPreference(mScreen); mController.onPreferenceChange(mPreference, TESTING_STRING); @@ -132,7 +132,7 @@ public class DeviceNamePreferenceControllerTest { @Test public void setDeviceName_wifiTetherNameUpdatedWhenDeviceNameUpdated() { - forceAcceptDeviceName(); + acceptDeviceName(true); mController.displayPreference(mScreen); mController.onPreferenceChange(mPreference, TESTING_STRING); @@ -150,21 +150,39 @@ public class DeviceNamePreferenceControllerTest { @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 e28e6ec075d..9e1400b0dcc 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 @@ public class DeviceNameWarningDialogTest { fragmentController.create().start().resume(); fragment.onClick(null, DialogInterface.BUTTON_POSITIVE); - verify(deviceInfoFragment).onSetDeviceNameConfirm(); + verify(deviceInfoFragment).onSetDeviceNameConfirm(true); } @Test @@ -43,6 +43,6 @@ public class DeviceNameWarningDialogTest { fragmentController.create().start().resume(); fragment.onClick(null, DialogInterface.BUTTON_NEGATIVE); - verify(deviceInfoFragment, never()).onSetDeviceNameConfirm(); + verify(deviceInfoFragment).onSetDeviceNameConfirm(false); } }