Implement persisting time for onUserSelectionConnectSuccess.
When onUserSelectionConnectSuccess callbacks, holding a second for user
to be aware of success connection. Then, go to destory network request dialog.
Bug: 117399926
Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi.NetworkRequestDialogFragmentTest
Change-Id: I12d8fb2e8955cf24ddad43d1fe8b863682b6ae32
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
index 7a1bdb4..06e36e5 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.wifi;
-import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -67,9 +66,15 @@
/** Message sent to us to stop scanning wifi and pop up timeout dialog. */
private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;
+ /** Message sent to us to finish activity. */
+ private static final int MESSAGE_FINISH_ACTIVITY = 1;
+
/** Spec defines there should be 5 wifi ap on the list at most. */
private static final int MAX_NUMBER_LIST_ITEM = 5;
+ /** Holding time to let user be aware that selected wifi ap is connected */
+ private static final int DELAY_TIME_USER_AWARE_CONNECTED_MS = 1 * 1000;
+
/** Delayed time to stop scanning wifi. */
private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;
@@ -155,7 +160,9 @@
public void onCancel(@NonNull DialogInterface dialog) {
super.onCancel(dialog);
// Finishes the activity when user clicks back key or outside of the dialog.
- getActivity().finish();
+ if (getActivity() != null) {
+ getActivity().finish();
+ }
}
@Override
@@ -177,6 +184,8 @@
@Override
public void onDestroy() {
super.onDestroy();
+
+ mHandler.removeMessages(MESSAGE_FINISH_ACTIVITY);
if (mFilterWifiTracker != null) {
mFilterWifiTracker.onDestroy();
mFilterWifiTracker = null;
@@ -207,7 +216,10 @@
switch (msg.what) {
case MESSAGE_STOP_SCAN_WIFI_LIST:
removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
- stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
+ stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
+ break;
+ case MESSAGE_FINISH_ACTIVITY:
+ stopScanningAndMaybePopErrorDialog(/* ERROR_DIALOG_TYPE */ null);
break;
default:
// Do nothing.
@@ -216,18 +228,29 @@
}
};
- protected void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
+ protected void stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE type) {
// Dismisses current dialog.
- dismiss();
+ final Dialog dialog = getDialog();
+ if (dialog != null && dialog.isShowing()) {
+ dismiss();
+ }
- // Throws new timeout dialog.
- final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
- .newInstance();
- final Bundle bundle = new Bundle();
- bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
- fragment.setArguments(bundle);
- fragment.show(getActivity().getSupportFragmentManager(),
- NetworkRequestDialogFragment.class.getSimpleName());
+ if (type == null) {
+ // If no error, finishes activity.
+ if (getActivity() != null) {
+ getActivity().finish();
+ }
+ } else {
+ // Throws error dialog.
+ final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
+ .newInstance();
+ final Bundle bundle = new Bundle();
+ bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
+ fragment.setArguments(bundle);
+ fragment.show(getActivity().getSupportFragmentManager(),
+ NetworkRequestDialogFragment.class.getSimpleName());
+ }
+
}
@Override
@@ -284,7 +307,7 @@
@Override
public void onAbort() {
- stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
+ stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
}
@Override
@@ -295,10 +318,13 @@
@Override
public void onMatch(List<ScanResult> scanResults) {
- mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
- renewAccessPointList(scanResults);
+ // Shouldn't need to renew cached list, since input result is empty.
+ if (scanResults != null && scanResults.size() > 0) {
+ mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
+ renewAccessPointList(scanResults);
- notifyAdapterRefresh();
+ notifyAdapterRefresh();
+ }
}
// Updates internal AccessPoint list from WifiTracker. scanResults are used to update key list
@@ -329,17 +355,24 @@
@Override
public void onUserSelectionConnectSuccess(WifiConfiguration wificonfiguration) {
- // Dismisses current dialog and finishes Activity, since connection is success.
- dismiss();
- final Activity activity = getActivity();
- if (activity != null) {
- activity.finish();
+ // Removes the progress icon.
+ final Dialog dialog = getDialog();
+ if (dialog != null) {
+ final View view = dialog.findViewById(R.id.network_request_title_progress);
+ if (view != null) {
+ view.setVisibility(View.GONE);
+ }
}
+
+ // Posts delay to finish self since connection is success.
+ mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
+ mHandler.sendEmptyMessageDelayed(MESSAGE_FINISH_ACTIVITY,
+ DELAY_TIME_USER_AWARE_CONNECTED_MS);
}
@Override
public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
- stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
+ stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
}
private final class FilterWifiTracker {
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
index e64fae7..17516e9 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
@@ -111,14 +111,17 @@
ShadowLooper.getShadowMainLooper().runToEndOfTasks();
assertThat(fakeFragment.bCalledStopAndPop).isTrue();
+ assertThat(fakeFragment.errorType).isEqualTo(ERROR_DIALOG_TYPE.TIME_OUT);
}
class FakeNetworkRequestDialogFragment extends NetworkRequestDialogFragment {
boolean bCalledStopAndPop = false;
+ ERROR_DIALOG_TYPE errorType = null;
@Override
- public void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
+ public void stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE type) {
bCalledStopAndPop = true;
+ errorType = type;
}
}
@@ -150,22 +153,28 @@
@Test
public void updateAccessPointList_onUserSelectionConnectSuccess_shouldCloseTheDialog() {
- List<AccessPoint> accessPointList = createAccessPointList();
- when(networkRequestDialogFragment.getAccessPointList()).thenReturn(accessPointList);
- networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
- AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- assertThat(alertDialog.isShowing()).isTrue();
+ // Assert
+ FakeNetworkRequestDialogFragment fakeFragment = new FakeNetworkRequestDialogFragment();
+ FakeNetworkRequestDialogFragment spyFakeFragment = spy(fakeFragment);
- // Test if config would update list.
+ List<AccessPoint> accessPointList = createAccessPointList();
+ when(spyFakeFragment.getAccessPointList()).thenReturn(accessPointList);
+
+ spyFakeFragment.show(mActivity.getSupportFragmentManager(), null);
+
+ // Action
WifiConfiguration config = new WifiConfiguration();
config.SSID = "Test AP 3";
- networkRequestDialogFragment.onUserSelectionConnectSuccess(config);
+ spyFakeFragment.onUserSelectionConnectSuccess(config);
- assertThat(alertDialog.isShowing()).isFalse();
+ // Check
+ ShadowLooper.getShadowMainLooper().runToEndOfTasks();
+ assertThat(fakeFragment.bCalledStopAndPop).isTrue();
+ assertThat(fakeFragment.errorType).isNull();
}
@Test
- public void updateAccessPointList_onUserSelectionConnectFailure_shouldCallTimeoutDialog() {
+ public void updateAccessPointList_onUserSelectionConnectFailure_shouldCallAbortDialog() {
FakeNetworkRequestDialogFragment fakeFragment = new FakeNetworkRequestDialogFragment();
FakeNetworkRequestDialogFragment spyFakeFragment = spy(fakeFragment);
List<AccessPoint> accessPointList = createAccessPointList();
@@ -181,6 +190,7 @@
fakeFragment.onUserSelectionConnectFailure(config);
assertThat(fakeFragment.bCalledStopAndPop).isTrue();
+ assertThat(fakeFragment.errorType).isEqualTo(ERROR_DIALOG_TYPE.ABORT);
}
@Test