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);
     }
 }