Merge "Add DataUsageListV2 for showing network stats detail."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c8d9aff..71840b1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1128,12 +1128,12 @@
             </intent-filter>
         </activity-alias>
 
-        <activity android:name=".applications.InstalledAppOpenByDefaultPage"
+        <activity android:name=".applications.InstalledAppOpenByDefaultActivity"
                   android:label="@string/application_info_label"
-                  android:permission="android.permission.OPEN_APPLICATION_DETAILS_OPEN_BY_DEFAULT_PAGE"
+                  android:permission="android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS"
                   android:exported="true">
             <intent-filter android:priority="1">
-                <action android:name="android.settings.APPLICATION_DETAILS_SETTINGS_OPEN_BY_DEFAULT_PAGE" />
+                <action android:name="com.android.settings.APP_OPEN_BY_DEFAULT_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:scheme="package" />
             </intent-filter>
diff --git a/src/com/android/settings/applications/InstalledAppOpenByDefaultPage.java b/src/com/android/settings/applications/InstalledAppOpenByDefaultActivity.java
similarity index 93%
rename from src/com/android/settings/applications/InstalledAppOpenByDefaultPage.java
rename to src/com/android/settings/applications/InstalledAppOpenByDefaultActivity.java
index 40eef25..cd30d79 100644
--- a/src/com/android/settings/applications/InstalledAppOpenByDefaultPage.java
+++ b/src/com/android/settings/applications/InstalledAppOpenByDefaultActivity.java
@@ -20,7 +20,7 @@
 
 import com.android.settings.SettingsActivity;
 
-public class InstalledAppOpenByDefaultPage extends SettingsActivity {
+public class InstalledAppOpenByDefaultActivity extends SettingsActivity {
 
     @Override
     public Intent getIntent() {
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/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index de67c10..2e6611f 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -465,8 +465,7 @@
         } else {
             enabled = ipAndProxyFieldsAreValid();
         }
-        if (mEapCaCertSpinner != null
-                && mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) {
+        if (mAccessPointSecurity == AccessPoint.SECURITY_EAP) {
             String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem();
             if (caCertSelection.equals(mUnspecifiedCertString)) {
                 // Disallow submit if the user has not selected a CA certificate for an EAP network
@@ -482,10 +481,8 @@
                 enabled = false;
             }
         }
-        if (mEapUserCertSpinner != null
-                && mView.findViewById(R.id.l_user_cert).getVisibility() != View.GONE
-                && ((String) mEapUserCertSpinner.getSelectedItem())
-                       .equals(mUnspecifiedCertString)) {
+        if (mAccessPointSecurity == AccessPoint.SECURITY_EAP
+                && mEapUserCertSpinner.getSelectedItem().equals(mUnspecifiedCertString)) {
             // Disallow submit if the user has not selected a user certificate for an EAP network
             // configuration.
             enabled = false;
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);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index 5e8dd28..54be773 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -184,6 +184,22 @@
     }
 
     @Test
+    public void isSubmittable_EapToPskWithValidPassword_shouldReturnTrue() {
+        final TextView password = mView.findViewById(R.id.password);
+        final Spinner securitySpinner = mView.findViewById(R.id.security);
+        assertThat(password).isNotNull();
+        assertThat(securitySpinner).isNotNull();
+        when(mAccessPoint.isSaved()).thenReturn(true);
+
+        // Change it from EAP to PSK
+        mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_EAP, 0);
+        mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_PSK, 0);
+        password.setText(GOOD_PSK);
+
+        assertThat(mController.isSubmittable()).isTrue();
+    }
+
+    @Test
     public void getSignalString_notReachable_shouldHaveNoSignalString() {
         when(mAccessPoint.isReachable()).thenReturn(false);