diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index f98dc589579..dfb59d19787 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -1109,6 +1109,10 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController } @Override public void onFinish() { + if (mFragment == null || mFragment.getActivity() == null) { + Log.d(TAG, "Ignore timeout since activity not exist!"); + return; + } Log.e(TAG, "Timeout for state:" + mConnectingState); if (mConnectingState == STATE_ENABLE_WIFI) { updateConnectingState(STATE_ENABLE_WIFI_FAILED); diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index d4ce481e005..3ffe61a7729 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -1623,6 +1623,39 @@ public class WifiDetailPreferenceControllerTest { mContext.getString(R.string.wifi_failed_connect_message)); } + @Test + public void testConnectButton_clickConnectAndBackKey_ignoreTimeoutEvent() { + setUpForDisconnectedNetwork(); + when(mockWifiManager.isWifiEnabled()).thenReturn(true); + InOrder inOrder = inOrder(mockButtonsPref); + setUpForToast(); + + displayAndResume(); + + // check connect button exist + verifyConnectBtnSetUpAsVisible(inOrder); + + // click connect button + mController.connectNetwork(); + + // check display button as connecting + verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class)); + verifyConnectBtnSetUpAsConnecting(inOrder); + + // leave detail page + when(mockFragment.getActivity()).thenReturn(null); + + // timeout happened + mController.mTimer.onFinish(); + + // check connect button visible, be init as default and toast failed message + inOrder.verify(mockButtonsPref, never()).setButton3Text(R.string.wifi_connect); + inOrder.verify(mockButtonsPref, never()).setButton3Icon(R.drawable.ic_settings_wireless); + inOrder.verify(mockButtonsPref, never()).setButton3Enabled(true); + inOrder.verify(mockButtonsPref, never()).setButton3Visible(true); + assertThat(ShadowToast.shownToastCount()).isEqualTo(0); + } + @Test public void updateAccessPoint_returnFalseForNothingChanged() { setUpForDisconnectedNetwork();