Rename wifi/NetworkRequestTimeoutDialogFragment to wifi/NetworkRequestErrorDialogFragment for extending usage.

ErrorDialogFragment contains two kinds of error dialog (timeout and onAbort).

Bug: 117399926
Test: RunSettingsRoboTests
Change-Id: Iea82a53baba298de66ae988c75d9fb6daca60160
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 85f133f..fcaf72a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10235,7 +10235,9 @@
     <!-- Message for Network connection timeout Dialog [CHAR LIMIT=NONE] -->
     <string name="network_connection_timeout_dialog_message">No devices found. Make sure the device is turned on and available to connect.</string>
     <!-- OK button for Network connection timeout Dialog [CHAR LIMIT=30] -->
-    <string name="network_connection_timeout_dialog_ok">Scan again</string>
+    <string name="network_connection_timeout_dialog_ok">Try again</string>
+    <!-- Message for Network connection error state Dialog [CHAR LIMIT=NONE] -->
+    <string name="network_connection_errorstate_dialog_message">Something came up. The application has cancelled the request to choose a device.</string>
 
     <!-- Summary for connected devices count in connected device slice. [CHAR LIMIT=NONE] -->
     <plurals name="show_connected_devices">
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
index a1d8620..efb3f8c 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -44,12 +44,18 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE;
 import com.android.settingslib.Utils;
 import com.android.settingslib.wifi.AccessPoint;
 
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * The Fragment sets up callback {@link NetworkRequestMatchCallback} with framework. To handle most
+ * behaviors of the callback when requesting wifi network, except for error message. When error
+ * happens, {@link NetworkRequestErrorDialogFragment} will be called to display error message.
+ */
 public class NetworkRequestDialogFragment extends InstrumentedDialogFragment implements
         DialogInterface.OnClickListener, NetworkRequestMatchCallback {
 
@@ -131,7 +137,7 @@
     @Override
     public void onCancel(@NonNull DialogInterface dialog) {
         super.onCancel(dialog);
-        // Finishes activity when user clicks back key or outside of dialog.
+        // Finishes the activity when user clicks back key or outside of the dialog.
         getActivity().finish();
     }
 
@@ -166,7 +172,7 @@
             switch (msg.what) {
                 case MESSAGE_STOP_SCAN_WIFI_LIST:
                     removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
-                    stopScanningAndPopTimeoutDialog();
+                    stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
                     break;
                 default:
                     // Do nothing.
@@ -175,14 +181,18 @@
         }
     };
 
-    protected void stopScanningAndPopTimeoutDialog() {
+    protected void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
         // Dismisses current dialog.
         dismiss();
 
         // Throws new timeout dialog.
-        final NetworkRequestTimeoutDialogFragment fragment = NetworkRequestTimeoutDialogFragment
+        final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
                 .newInstance();
-        fragment.show(getActivity().getSupportFragmentManager(), null);
+        final Bundle bundle = new Bundle();
+        bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
+        fragment.setArguments(bundle);
+        fragment.show(getActivity().getSupportFragmentManager(),
+                NetworkRequestDialogFragment.class.getSimpleName());
     }
 
     @Override
@@ -239,7 +249,7 @@
 
     @Override
     public void onAbort() {
-        // TODO(b/117399926): We should have a UI notify user here.
+        stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
     }
 
     @Override
diff --git a/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java
new file mode 100644
index 0000000..762b467
--- /dev/null
+++ b/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi;
+
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+/**
+ * The dialog shows an error message when requesting network {@link NetworkRequestDialogFragment}.
+ * Contains multi-error types in {@code ERROR_DIALOG_TYPE}.
+ */
+public class NetworkRequestErrorDialogFragment extends InstrumentedDialogFragment {
+
+    public static final String DIALOG_TYPE = "DIALOG_ERROR_TYPE";
+
+    public enum ERROR_DIALOG_TYPE {TIME_OUT, ABORT}
+
+    public static NetworkRequestErrorDialogFragment newInstance() {
+        return new NetworkRequestErrorDialogFragment();
+    }
+
+    private NetworkRequestErrorDialogFragment() {
+        super();
+    }
+
+    @Override
+    public void onCancel(@NonNull DialogInterface dialog) {
+        super.onCancel(dialog);
+        // Wants to finish the activity when user clicks back key or outside of the dialog.
+        getActivity().finish();
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Gets error type to construct dialog. Default is TIME_OUT dialog.
+        ERROR_DIALOG_TYPE msgType = ERROR_DIALOG_TYPE.TIME_OUT;
+        if (getArguments() != null) {
+            msgType = (ERROR_DIALOG_TYPE) getArguments().getSerializable(DIALOG_TYPE);
+        }
+
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+        if (msgType == ERROR_DIALOG_TYPE.TIME_OUT) {
+            builder.setMessage(R.string.network_connection_timeout_dialog_message)
+                    .setPositiveButton(R.string.network_connection_timeout_dialog_ok,
+                            (dialog, which) -> startScanningDialog())
+                    .setNegativeButton(R.string.cancel, (dialog, which) -> getActivity().finish());
+        } else {
+            builder.setMessage(R.string.network_connection_errorstate_dialog_message)
+                    .setPositiveButton(R.string.okay, (dialog, which) -> getActivity().finish());
+        }
+        return builder.create();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.WIFI_SCANNING_NEEDED_DIALOG;
+    }
+
+    protected void startScanningDialog() {
+        final NetworkRequestDialogFragment fragment = NetworkRequestDialogFragment.newInstance();
+        fragment.show(getActivity().getSupportFragmentManager(),
+                NetworkRequestErrorDialogFragment.class.getSimpleName());
+    }
+}
diff --git a/src/com/android/settings/wifi/NetworkRequestTimeoutDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestTimeoutDialogFragment.java
deleted file mode 100644
index 08f285b..0000000
--- a/src/com/android/settings/wifi/NetworkRequestTimeoutDialogFragment.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.wifi;
-
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import androidx.appcompat.app.AlertDialog;
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.R;
-import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-
-public class NetworkRequestTimeoutDialogFragment extends InstrumentedDialogFragment implements
-    DialogInterface.OnClickListener {
-
-  public static NetworkRequestTimeoutDialogFragment newInstance() {
-    NetworkRequestTimeoutDialogFragment fragment = new NetworkRequestTimeoutDialogFragment();
-    return fragment;
-  }
-
-  @Override
-  public Dialog onCreateDialog(Bundle savedInstanceState) {
-    AlertDialog.Builder builder = new AlertDialog.Builder(getContext())
-        .setMessage(R.string.network_connection_timeout_dialog_message)
-        .setPositiveButton(R.string.network_connection_timeout_dialog_ok, this)
-        .setNegativeButton(R.string.cancel, null);
-    return builder.create();
-  }
-
-  @Override
-  public int getMetricsCategory() {
-    return MetricsProto.MetricsEvent.WIFI_SCANNING_NEEDED_DIALOG;
-  }
-
-  @Override
-  public void onClick(DialogInterface dialog, int which) {
-    switch (which) {
-      case DialogInterface.BUTTON_POSITIVE:
-        startScanningDialog();
-        break;
-      case DialogInterface.BUTTON_NEGATIVE:
-      default:
-        // Do nothing.
-        break;
-    }
-  }
-
-  protected void startScanningDialog() {
-    NetworkRequestDialogFragment fragment = NetworkRequestDialogFragment.newInstance();
-    fragment.show(getActivity().getSupportFragmentManager(), null);
-  }
-}
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
index 2e806dd..8cf02b8 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.wifi;
 
 import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -32,213 +33,220 @@
 import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
 import android.os.Bundle;
 import android.widget.Button;
+
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.FragmentActivity;
+
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE;
 import com.android.settingslib.wifi.AccessPoint;
+
 import java.util.ArrayList;
 import java.util.List;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.Robolectric;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+
 import org.robolectric.shadows.ShadowLooper;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(shadows = {SettingsShadowResourcesImpl.class, ShadowAlertDialogCompat.class})
 public class NetworkRequestDialogFragmentTest {
 
-  final String KEY_SSID = "key_ssid";
+    final String KEY_SSID = "key_ssid";
 
-  private FragmentActivity mActivity;
-  private NetworkRequestDialogFragment networkRequestDialogFragment;
-  private Context mContext;
+    private FragmentActivity mActivity;
+    private NetworkRequestDialogFragment networkRequestDialogFragment;
+    private Context mContext;
 
-  @Before
-  public void setUp() {
-    mActivity = Robolectric.setupActivity(FragmentActivity.class);
-    networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance());
-    mContext = spy(RuntimeEnvironment.application);
-  }
-
-  @Test
-  public void display_shouldShowTheDialog() {
-    networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
-    AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-    assertThat(alertDialog).isNotNull();
-    assertThat(alertDialog.isShowing()).isTrue();
-  }
-
-  @Test
-  public void clickPositiveButton_shouldCloseTheDialog() {
-    networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
-    AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-    assertThat(alertDialog.isShowing()).isTrue();
-
-    Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
-    assertThat(positiveButton).isNotNull();
-
-    positiveButton.performClick();
-    assertThat(alertDialog.isShowing()).isFalse();
-  }
-
-  @Test
-  public void onResumeAndWaitTimeout_shouldCallTimeoutDialog() {
-    FakeNetworkRequestDialogFragment fakeFragment = new FakeNetworkRequestDialogFragment();
-    FakeNetworkRequestDialogFragment spyFakeFragment = spy(fakeFragment);
-    spyFakeFragment.show(mActivity.getSupportFragmentManager(), null);
-
-    assertThat(fakeFragment.bCalledStopAndPop).isFalse();
-
-    ShadowLooper.getShadowMainLooper().runToEndOfTasks();
-
-    assertThat(fakeFragment.bCalledStopAndPop).isTrue();
-  }
-
-  class FakeNetworkRequestDialogFragment extends NetworkRequestDialogFragment {
-    boolean bCalledStopAndPop = false;
-
-    @Override
-    public void stopScanningAndPopTimeoutDialog() {
-      bCalledStopAndPop = true;
+    @Before
+    public void setUp() {
+        mActivity = Robolectric.setupActivity(FragmentActivity.class);
+        networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance());
+        mContext = spy(RuntimeEnvironment.application);
     }
-  }
 
-  @Test
-  public void onResume_shouldRegisterCallback() {
-    when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
-    Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
-    when(mContext.getApplicationContext()).thenReturn(applicationContext);
-    WifiManager wifiManager = mock(WifiManager.class);
-    when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
+    @Test
+    public void display_shouldShowTheDialog() {
+        networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
+        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(alertDialog).isNotNull();
+        assertThat(alertDialog.isShowing()).isTrue();
+    }
 
-    networkRequestDialogFragment.onResume();
+    @Test
+    public void clickPositiveButton_shouldCloseTheDialog() {
+        networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
+        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(alertDialog.isShowing()).isTrue();
 
-    verify(wifiManager).registerNetworkRequestMatchCallback(any(), any());
-  }
+        Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
+        assertThat(positiveButton).isNotNull();
 
-  @Test
-  public void onPause_shouldUnRegisterCallback() {
-    when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
-    Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
-    when(mContext.getApplicationContext()).thenReturn(applicationContext);
-    WifiManager wifiManager = mock(WifiManager.class);
-    when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
+        positiveButton.performClick();
+        assertThat(alertDialog.isShowing()).isFalse();
+    }
 
-    networkRequestDialogFragment.onPause();
+    @Test
+    public void onResumeAndWaitTimeout_shouldCallTimeoutDialog() {
+        FakeNetworkRequestDialogFragment fakeFragment = new FakeNetworkRequestDialogFragment();
+        FakeNetworkRequestDialogFragment spyFakeFragment = spy(fakeFragment);
+        spyFakeFragment.show(mActivity.getSupportFragmentManager(), null);
 
-    verify(wifiManager).unregisterNetworkRequestMatchCallback(networkRequestDialogFragment);
-  }
+        assertThat(fakeFragment.bCalledStopAndPop).isFalse();
 
-  @Test
-  public void updateAccessPointList_onUserSelectionConnectSuccess_updateCorrectly() {
-    List<AccessPoint> accessPointList = spy(new ArrayList<>());
-    Bundle bundle = new Bundle();
-    bundle.putString(KEY_SSID, "Test AP 1");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 2");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 3");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 4");
-    accessPointList.add(new AccessPoint(mContext, bundle));
+        ShadowLooper.getShadowMainLooper().runToEndOfTasks();
 
-    when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
-    networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
+        assertThat(fakeFragment.bCalledStopAndPop).isTrue();
+    }
 
-    // Test if config would update list.
-    WifiConfiguration config = new WifiConfiguration();
-    config.SSID = "Test AP 3";
-    networkRequestDialogFragment.onUserSelectionConnectSuccess(config);
+    class FakeNetworkRequestDialogFragment extends NetworkRequestDialogFragment {
+        boolean bCalledStopAndPop = false;
 
-    AccessPoint verifyAccessPoint = new AccessPoint(mContext, config);
-    verify(accessPointList, times(1)).set(2, verifyAccessPoint);
-  }
+        @Override
+        public void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
+            bCalledStopAndPop = true;
+        }
+    }
 
-  @Test
-  public void updateAccessPointList_onUserSelectionConnectFailure_updateCorrectly() {
-    List<AccessPoint> accessPointList = spy(new ArrayList<>());
-    Bundle bundle = new Bundle();
-    bundle.putString(KEY_SSID, "Test AP 1");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 2");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 3");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 4");
-    accessPointList.add(new AccessPoint(mContext, bundle));
+    @Test
+    public void onResume_shouldRegisterCallback() {
+        when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
+        Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
+        when(mContext.getApplicationContext()).thenReturn(applicationContext);
+        WifiManager wifiManager = mock(WifiManager.class);
+        when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
 
-    when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
-    networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
+        networkRequestDialogFragment.onResume();
 
-    // Test if config would update list.
-    WifiConfiguration config = new WifiConfiguration();
-    config.SSID = "Test AP 3";
-    networkRequestDialogFragment.onUserSelectionConnectFailure(config);
+        verify(wifiManager).registerNetworkRequestMatchCallback(any(), any());
+    }
 
-    AccessPoint verifyAccessPoint = new AccessPoint(mContext, config);
-    verify(accessPointList, times(1)).set(2, verifyAccessPoint);
-  }
+    @Test
+    public void onPause_shouldUnRegisterCallback() {
+        when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
+        Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
+        when(mContext.getApplicationContext()).thenReturn(applicationContext);
+        WifiManager wifiManager = mock(WifiManager.class);
+        when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
 
-  @Test
-  public void onUserSelectionCallbackRegistration_shouldCallSelect() {
-    List<AccessPoint> accessPointList = spy(new ArrayList<>());
-    Bundle bundle = new Bundle();
-    bundle.putString(KEY_SSID, "Test AP 1");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 2");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    bundle.putString(KEY_SSID, "Test AP 3");
-    AccessPoint clickedAccessPoint = new AccessPoint(mContext, bundle);
-    accessPointList.add(clickedAccessPoint);
-    bundle.putString(KEY_SSID, "Test AP 4");
-    accessPointList.add(new AccessPoint(mContext, bundle));
-    when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
+        networkRequestDialogFragment.onPause();
 
-    NetworkRequestUserSelectionCallback selectionCallback = mock(
-        NetworkRequestUserSelectionCallback.class);
-    AlertDialog dialog = mock(AlertDialog.class);
-    networkRequestDialogFragment.onUserSelectionCallbackRegistration(selectionCallback);
+        verify(wifiManager).unregisterNetworkRequestMatchCallback(networkRequestDialogFragment);
+    }
 
-    networkRequestDialogFragment.onClick(dialog, 2);
+    @Test
+    public void updateAccessPointList_onUserSelectionConnectSuccess_updateCorrectly() {
+        List<AccessPoint> accessPointList = spy(new ArrayList<>());
+        Bundle bundle = new Bundle();
+        bundle.putString(KEY_SSID, "Test AP 1");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 2");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 3");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 4");
+        accessPointList.add(new AccessPoint(mContext, bundle));
 
-    verify(selectionCallback, times(1)).select(clickedAccessPoint.getConfig());
-  }
+        when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
+        networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
 
-  @Test
-  public void onMatch_shouldUpdatedList() {
-    // Prepares WifiManager.
-    when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
-    Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
-    when(mContext.getApplicationContext()).thenReturn(applicationContext);
-    WifiManager wifiManager = mock(WifiManager.class);
-    when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
+        // Test if config would update list.
+        WifiConfiguration config = new WifiConfiguration();
+        config.SSID = "Test AP 3";
+        networkRequestDialogFragment.onUserSelectionConnectSuccess(config);
 
-    List<WifiConfiguration> wifiConfigurationList = new ArrayList<>();
-    WifiConfiguration config = new WifiConfiguration();
-    final String SSID_AP1 = "Test AP 1";
-    config.SSID = SSID_AP1;
-    wifiConfigurationList.add(config);
-    config = new WifiConfiguration();
-    final String SSID_AP2 = "Test AP 2";
-    config.SSID = SSID_AP2;
-    wifiConfigurationList.add(config);
+        AccessPoint verifyAccessPoint = new AccessPoint(mContext, config);
+        verify(accessPointList, times(1)).set(2, verifyAccessPoint);
+    }
 
-    // Prepares callback converted data.
-    List<ScanResult> scanResults = new ArrayList<>();
-    when(wifiManager.getAllMatchingWifiConfigs(scanResults)).thenReturn(wifiConfigurationList);
+    @Test
+    public void updateAccessPointList_onUserSelectionConnectFailure_updateCorrectly() {
+        List<AccessPoint> accessPointList = spy(new ArrayList<>());
+        Bundle bundle = new Bundle();
+        bundle.putString(KEY_SSID, "Test AP 1");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 2");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 3");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 4");
+        accessPointList.add(new AccessPoint(mContext, bundle));
 
-    networkRequestDialogFragment.onMatch(scanResults);
+        when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
+        networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
 
-    List<AccessPoint> accessPointList = networkRequestDialogFragment.getAccessPointList();
-    assertThat(accessPointList).isNotEmpty();
-    assertThat(accessPointList.size()).isEqualTo(2);
-    assertThat(accessPointList.get(0).getSsid()).isEqualTo(SSID_AP1);
-    assertThat(accessPointList.get(1).getSsid()).isEqualTo(SSID_AP2);
-  }
+        // Test if config would update list.
+        WifiConfiguration config = new WifiConfiguration();
+        config.SSID = "Test AP 3";
+        networkRequestDialogFragment.onUserSelectionConnectFailure(config);
+
+        AccessPoint verifyAccessPoint = new AccessPoint(mContext, config);
+        verify(accessPointList, times(1)).set(2, verifyAccessPoint);
+    }
+
+    @Test
+    public void onUserSelectionCallbackRegistration_shouldCallSelect() {
+        List<AccessPoint> accessPointList = spy(new ArrayList<>());
+        Bundle bundle = new Bundle();
+        bundle.putString(KEY_SSID, "Test AP 1");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 2");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        bundle.putString(KEY_SSID, "Test AP 3");
+        AccessPoint clickedAccessPoint = new AccessPoint(mContext, bundle);
+        accessPointList.add(clickedAccessPoint);
+        bundle.putString(KEY_SSID, "Test AP 4");
+        accessPointList.add(new AccessPoint(mContext, bundle));
+        when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
+
+        NetworkRequestUserSelectionCallback selectionCallback = mock(
+                NetworkRequestUserSelectionCallback.class);
+        AlertDialog dialog = mock(AlertDialog.class);
+        networkRequestDialogFragment.onUserSelectionCallbackRegistration(selectionCallback);
+
+        networkRequestDialogFragment.onClick(dialog, 2);
+
+        verify(selectionCallback, times(1)).select(clickedAccessPoint.getConfig());
+    }
+
+    @Test
+    public void onMatch_shouldUpdatedList() {
+        // Prepares WifiManager.
+        when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
+        Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
+        when(mContext.getApplicationContext()).thenReturn(applicationContext);
+        WifiManager wifiManager = mock(WifiManager.class);
+        when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
+
+        List<WifiConfiguration> wifiConfigurationList = new ArrayList<>();
+        WifiConfiguration config = new WifiConfiguration();
+        final String SSID_AP1 = "Test AP 1";
+        config.SSID = SSID_AP1;
+        wifiConfigurationList.add(config);
+        config = new WifiConfiguration();
+        final String SSID_AP2 = "Test AP 2";
+        config.SSID = SSID_AP2;
+        wifiConfigurationList.add(config);
+
+        // Prepares callback converted data.
+        List<ScanResult> scanResults = new ArrayList<>();
+        when(wifiManager.getAllMatchingWifiConfigs(scanResults)).thenReturn(wifiConfigurationList);
+
+        networkRequestDialogFragment.onMatch(scanResults);
+
+        List<AccessPoint> accessPointList = networkRequestDialogFragment.getAccessPointList();
+        assertThat(accessPointList).isNotEmpty();
+        assertThat(accessPointList.size()).isEqualTo(2);
+        assertThat(accessPointList.get(0).getSsid()).isEqualTo(SSID_AP1);
+        assertThat(accessPointList.get(1).getSsid()).isEqualTo(SSID_AP2);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java
new file mode 100644
index 0000000..c6659a5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.widget.Button;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.settings.R;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {SettingsShadowResourcesImpl.class, ShadowAlertDialogCompat.class})
+public class NetworkRequestErrorDialogFragmentTest {
+
+    private FragmentActivity mActivity;
+    private NetworkRequestErrorDialogFragment mFragment;
+
+    @Before
+    public void setUp() {
+        mActivity = Robolectric.setupActivity(FragmentActivity.class);
+        mFragment = spy(NetworkRequestErrorDialogFragment.newInstance());
+        mFragment.show(mActivity.getSupportFragmentManager(), null);
+    }
+
+    @Test
+    public void display_shouldShowTimeoutDialog() {
+        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+
+        assertThat(alertDialog).isNotNull();
+        assertThat(alertDialog.isShowing()).isTrue();
+
+        ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
+        assertThat(RuntimeEnvironment.application
+                .getString(R.string.network_connection_timeout_dialog_message))
+                .isEqualTo(shadowAlertDialog.getMessage());
+    }
+
+    @Test
+    public void display_shouldShowAbortDialog() {
+        mFragment = spy(NetworkRequestErrorDialogFragment.newInstance());
+        Bundle bundle = new Bundle();
+        bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE,
+                ERROR_DIALOG_TYPE.ABORT);
+        mFragment.setArguments(bundle);
+        mFragment.show(mActivity.getSupportFragmentManager(), null);
+
+        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+
+        assertThat(alertDialog).isNotNull();
+        assertThat(alertDialog.isShowing()).isTrue();
+
+        ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
+        assertThat(RuntimeEnvironment.application
+                .getString(R.string.network_connection_errorstate_dialog_message))
+                .isEqualTo(shadowAlertDialog.getMessage());
+    }
+
+    @Test
+    public void clickPositiveButton_shouldCallStartScanningDialog() {
+        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(alertDialog.isShowing()).isTrue();
+
+        Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
+        assertThat(positiveButton).isNotNull();
+
+        positiveButton.performClick();
+        verify(mFragment, times(1)).startScanningDialog();
+    }
+
+    @Test
+    public void clickNegativeButton_shouldCloseTheDialog() {
+        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(alertDialog.isShowing()).isTrue();
+
+        Button negativeButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
+        assertThat(negativeButton).isNotNull();
+
+        negativeButton.performClick();
+        assertThat(alertDialog.isShowing()).isFalse();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestTimeoutDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestTimeoutDialogFragmentTest.java
deleted file mode 100644
index ed28e60..0000000
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestTimeoutDialogFragmentTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.wifi;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.internal.verification.VerificationModeFactory.times;
-
-import android.content.DialogInterface;
-import android.widget.Button;
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.FragmentActivity;
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
-import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.Robolectric;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = {SettingsShadowResourcesImpl.class, ShadowAlertDialogCompat.class})
-public class NetworkRequestTimeoutDialogFragmentTest {
-
-  private FragmentActivity mActivity;
-  private NetworkRequestTimeoutDialogFragment mFragment;
-
-  @Before
-  public void setUp() {
-    mActivity = Robolectric.setupActivity(FragmentActivity.class);
-    mFragment = spy(NetworkRequestTimeoutDialogFragment.newInstance());
-    mFragment.show(mActivity.getSupportFragmentManager(), null);
-  }
-
-  @Test
-  public void display_shouldShowTheDialog() {
-    AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-
-    assertThat(alertDialog).isNotNull();
-    assertThat(alertDialog.isShowing()).isTrue();
-
-    ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-    assertThat(RuntimeEnvironment.application
-        .getString(R.string.network_connection_timeout_dialog_message))
-        .isEqualTo(shadowAlertDialog.getMessage());
-  }
-
-  @Test
-  public void clickPositiveButton_shouldCallStartScanningDialog() {
-    AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-    assertThat(alertDialog.isShowing()).isTrue();
-
-    Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
-    assertThat(positiveButton).isNotNull();
-
-    positiveButton.performClick();
-    verify(mFragment, times(1)).startScanningDialog();
-  }
-
-  @Test
-  public void clickNegativeButton_shouldCloseTheDialog() {
-    AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-    assertThat(alertDialog.isShowing()).isTrue();
-
-    Button negativeButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
-    assertThat(negativeButton).isNotNull();
-
-    negativeButton.performClick();
-    assertThat(alertDialog.isShowing()).isFalse();
-  }
-}