diff options
author | Roshan Pius <rpius@google.com> | 2018-11-08 09:07:34 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-11-16 16:30:41 -0800 |
commit | ca7e72ad7fb48243cf0f00cec05c4d03d984d7ed (patch) | |
tree | c13e5399c71328429f661435e1b4ee5cfded46e2 | |
parent | 016725de18209f64f887991e0cc84e75c99548df (diff) | |
download | android_frameworks_opt_net_wifi-ca7e72ad7fb48243cf0f00cec05c4d03d984d7ed.tar.gz android_frameworks_opt_net_wifi-ca7e72ad7fb48243cf0f00cec05c4d03d984d7ed.tar.bz2 android_frameworks_opt_net_wifi-ca7e72ad7fb48243cf0f00cec05c4d03d984d7ed.zip |
ClientModeImpl: Send connection status to network factory
Indicate connection status to WifiNetworkFactory to let
WifiNetworkFactory track its connection attempt status.
Also, refactor the Carrier/Open-NetworkNotifier to use the same
hooks for indicating connection status. This is to ensure that all of
these modules have a somewhat consistent pattern for tracking connection
status.
Bug: 113878056
Test: ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Test: Ensured that ONA connection still works.
Change-Id: I7ae0cb529ae0fd3372657efeadae964ea019fe94
6 files changed, 72 insertions, 28 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index fe29edc98..a122d5db0 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -2868,13 +2868,7 @@ public class ClientModeImpl extends StateMachine { sendMessageDelayed(CMD_DIAGS_CONNECT_TIMEOUT, DIAGS_CONNECT_TIMEOUT_MILLIS); } - /** - * Inform other components (WifiMetrics, WifiDiagnostics, WifiConnectivityManager, etc.) that - * the current connection attempt has concluded. - */ - private void reportConnectionAttemptEnd(int level2FailureCode, int connectivityFailureCode) { - mWifiMetrics.endConnectionEvent(level2FailureCode, connectivityFailureCode); - mWifiConnectivityManager.handleConnectionAttemptEnded(level2FailureCode); + private void handleConnectionAttemptEndForDiagnostics(int level2FailureCode) { switch (level2FailureCode) { case WifiMetrics.ConnectionEvent.FAILURE_NONE: // Ideally, we'd wait until IP reachability has been confirmed. this code falls @@ -2900,6 +2894,18 @@ public class ClientModeImpl extends StateMachine { } } + /** + * Inform other components (WifiMetrics, WifiDiagnostics, WifiConnectivityManager, etc.) that + * the current connection attempt has concluded. + */ + private void reportConnectionAttemptEnd(int level2FailureCode, int connectivityFailureCode) { + mWifiMetrics.endConnectionEvent(level2FailureCode, connectivityFailureCode); + mWifiConnectivityManager.handleConnectionAttemptEnded(level2FailureCode); + mNetworkFactory.handleConnectionAttemptEnded( + level2FailureCode, getCurrentWifiConfiguration()); + handleConnectionAttemptEndForDiagnostics(level2FailureCode); + } + private void handleIPv4Success(DhcpResults dhcpResults) { if (mVerboseLoggingEnabled) { logd("handleIPv4Success <" + dhcpResults.toString() + ">"); diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index efc4fb067..b06593814 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -1110,13 +1110,6 @@ public class WifiConnectivityManager { mWifiState = state; - if (mWifiState == WIFI_STATE_CONNECTED) { - mOpenNetworkNotifier.handleWifiConnected( - (mWifiInfo.getWifiSsid() == null) ? null : mWifiInfo.getWifiSsid().toString()); - mCarrierNetworkNotifier.handleWifiConnected( - (mWifiInfo.getWifiSsid() == null) ? null : mWifiInfo.getWifiSsid().toString()); - } - // Reset BSSID of last connection attempt and kick off // the watchdog timer if entering disconnected state. if (mWifiState == WIFI_STATE_DISCONNECTED) { @@ -1134,7 +1127,13 @@ public class WifiConnectivityManager { * @param failureCode {@link WifiMetrics.ConnectionEvent} failure code. */ public void handleConnectionAttemptEnded(int failureCode) { - if (failureCode != WifiMetrics.ConnectionEvent.FAILURE_NONE) { + if (failureCode == WifiMetrics.ConnectionEvent.FAILURE_NONE) { + String ssid = (mWifiInfo.getWifiSsid() == null) + ? null + : mWifiInfo.getWifiSsid().toString(); + mOpenNetworkNotifier.handleWifiConnected(ssid); + mCarrierNetworkNotifier.handleWifiConnected(ssid); + } else { mOpenNetworkNotifier.handleConnectionFailure(); mCarrierNetworkNotifier.handleConnectionFailure(); } diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 98766dc41..01453fa33 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -473,9 +473,21 @@ public class WifiNetworkFactory extends NetworkFactory { } /** + * Invoked by {@link ClientModeImpl} on end of connection attempt to a network. + */ + public void handleConnectionAttemptEnded( + int failureCode, @NonNull WifiConfiguration network) { + if (failureCode == WifiMetrics.ConnectionEvent.FAILURE_NONE) { + handleNetworkConnectionSuccess(network); + } else { + handleNetworkConnectionFailure(network); + } + } + + /** * Invoked by {@link ClientModeImpl} on successful connection to a network. */ - public void handleNetworkConnectionSuccess(@NonNull WifiConfiguration connectedNetwork) { + private void handleNetworkConnectionSuccess(@NonNull WifiConfiguration connectedNetwork) { if (mUserSelectedNetwork == null || connectedNetwork == null) return; if (!isUserSelectedNetwork(connectedNetwork)) { Log.w(TAG, "Connected to unknown network " + connectedNetwork + ". Ignoring..."); @@ -499,7 +511,7 @@ public class WifiNetworkFactory extends NetworkFactory { /** * Invoked by {@link ClientModeImpl} on failure to connect to a network. */ - public void handleNetworkConnectionFailure(@NonNull WifiConfiguration failedNetwork) { + private void handleNetworkConnectionFailure(@NonNull WifiConfiguration failedNetwork) { if (mUserSelectedNetwork == null || failedNetwork == null) return; if (!isUserSelectedNetwork(failedNetwork)) { Log.w(TAG, "Connection failed to unknown network " + failedNetwork + ". Ignoring..."); diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index 9db119620..ceaeb7124 100644 --- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -2331,6 +2331,7 @@ public class ClientModeImplTest { /** * Verifies that association failures make WifiDiagnostics report CONNECTION_EVENT_FAILED * and then cancel any pending timeouts. + * Also, send connection status to {@link WifiNetworkFactory} & {@link WifiConnectivityManager}. * @throws Exception */ @Test @@ -2345,12 +2346,17 @@ public class ClientModeImplTest { mLooper.dispatchAll(); verify(mWifiDiagnostics).reportConnectionEvent( eq(WifiDiagnostics.CONNECTION_EVENT_FAILED)); + verify(mWifiConnectivityManager).handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_ASSOCIATION_REJECTION); + verify(mWifiNetworkFactory).handleConnectionAttemptEnded( + eq(WifiMetrics.ConnectionEvent.FAILURE_ASSOCIATION_REJECTION), any()); verifyConnectionEventTimeoutDoesNotOccur(); } /** * Verifies that authentication failures make WifiDiagnostics report * CONNECTION_EVENT_FAILED and then cancel any pending timeouts. + * Also, send connection status to {@link WifiNetworkFactory} & {@link WifiConnectivityManager}. * @throws Exception */ @Test @@ -2365,6 +2371,10 @@ public class ClientModeImplTest { mLooper.dispatchAll(); verify(mWifiDiagnostics).reportConnectionEvent( eq(WifiDiagnostics.CONNECTION_EVENT_FAILED)); + verify(mWifiConnectivityManager).handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_AUTHENTICATION_FAILURE); + verify(mWifiNetworkFactory).handleConnectionAttemptEnded( + eq(WifiMetrics.ConnectionEvent.FAILURE_AUTHENTICATION_FAILURE), any()); verifyConnectionEventTimeoutDoesNotOccur(); } @@ -2372,6 +2382,7 @@ public class ClientModeImplTest { /** * Verifies that dhcp failures make WifiDiagnostics report CONNECTION_EVENT_FAILED and then * cancel any pending timeouts. + * Also, send connection status to {@link WifiNetworkFactory} & {@link WifiConnectivityManager}. * @throws Exception */ @Test @@ -2379,12 +2390,17 @@ public class ClientModeImplTest { testDhcpFailure(); verify(mWifiDiagnostics, atLeastOnce()).reportConnectionEvent( eq(WifiDiagnostics.CONNECTION_EVENT_FAILED)); + verify(mWifiConnectivityManager, atLeastOnce()).handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_DHCP); + verify(mWifiNetworkFactory, atLeastOnce()).handleConnectionAttemptEnded( + eq(WifiMetrics.ConnectionEvent.FAILURE_DHCP), any()); verifyConnectionEventTimeoutDoesNotOccur(); } /** * Verifies that a successful connection make WifiDiagnostics report CONNECTION_EVENT_SUCCEEDED * and then cancel any pending timeouts. + * Also, send connection status to {@link WifiNetworkFactory} & {@link WifiConnectivityManager}. * @throws Exception */ @Test @@ -2392,6 +2408,10 @@ public class ClientModeImplTest { connect(); verify(mWifiDiagnostics).reportConnectionEvent( eq(WifiDiagnostics.CONNECTION_EVENT_SUCCEEDED)); + verify(mWifiConnectivityManager).handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE); + verify(mWifiNetworkFactory).handleConnectionAttemptEnded( + eq(WifiMetrics.ConnectionEvent.FAILURE_NONE), any()); verifyConnectionEventTimeoutDoesNotOccur(); } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java index e9abdc81c..eb090c548 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java @@ -672,8 +672,8 @@ public class WifiConnectivityManagerTest { public void wifiConnected_openNetworkNotifierHandlesConnection() { // Set WiFi to connected state mWifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(CANDIDATE_SSID)); - mWifiConnectivityManager.handleConnectionStateChanged( - WifiConnectivityManager.WIFI_STATE_CONNECTED); + mWifiConnectivityManager.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE); verify(mOpenNetworkNotifier).handleWifiConnected(CANDIDATE_SSID); } @@ -815,8 +815,8 @@ public class WifiConnectivityManagerTest { public void wifiConnected_carrierNetworkNotifierHandlesConnection() { // Set WiFi to connected state mWifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(CANDIDATE_SSID)); - mWifiConnectivityManager.handleConnectionStateChanged( - WifiConnectivityManager.WIFI_STATE_CONNECTED); + mWifiConnectivityManager.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE); verify(mCarrierNetworkNotifier).handleWifiConnected(CANDIDATE_SSID); } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java index c72da94b1..69fcc59c6 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java @@ -913,7 +913,8 @@ public class WifiNetworkFactoryTest { // Send network connection failure indication. assertNotNull(mSelectedNetwork); - mWifiNetworkFactory.handleNetworkConnectionFailure(mSelectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_DHCP, mSelectedNetwork); // Verify that we sent the connection failure callback. verify(mNetworkRequestMatchCallback).onUserSelectionConnectFailure(mSelectedNetwork); @@ -934,7 +935,8 @@ public class WifiNetworkFactoryTest { assertNotNull(mSelectedNetwork); WifiConfiguration connectedNetwork = new WifiConfiguration(mSelectedNetwork); connectedNetwork.SSID += "test"; - mWifiNetworkFactory.handleNetworkConnectionFailure(connectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_DHCP, connectedNetwork); // Verify that we sent the connection failure callback. verify(mNetworkRequestMatchCallback, never()) @@ -947,7 +949,8 @@ public class WifiNetworkFactoryTest { .setSpecificNetworkRequestInProgress(false); // Send network connection success to the correct network indication. - mWifiNetworkFactory.handleNetworkConnectionFailure(mSelectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_DHCP, mSelectedNetwork); // Verify that we sent the connection failure callback. verify(mNetworkRequestMatchCallback).onUserSelectionConnectFailure(mSelectedNetwork); @@ -966,7 +969,8 @@ public class WifiNetworkFactoryTest { // Send network connection success indication. assertNotNull(mSelectedNetwork); - mWifiNetworkFactory.handleNetworkConnectionSuccess(mSelectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE, mSelectedNetwork); // Verify that we sent the connection success callback. verify(mNetworkRequestMatchCallback).onUserSelectionConnectSuccess(mSelectedNetwork); @@ -985,7 +989,8 @@ public class WifiNetworkFactoryTest { assertNotNull(mSelectedNetwork); WifiConfiguration connectedNetwork = new WifiConfiguration(mSelectedNetwork); connectedNetwork.SSID += "test"; - mWifiNetworkFactory.handleNetworkConnectionSuccess(connectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectedNetwork); // verify that we did not send out the success callback and did not stop the alarm timeout. verify(mNetworkRequestMatchCallback, never()) @@ -994,7 +999,8 @@ public class WifiNetworkFactoryTest { .cancel(mConnectionTimeoutAlarmListenerArgumentCaptor.getValue()); // Send network connection success to the correct network indication. - mWifiNetworkFactory.handleNetworkConnectionSuccess(mSelectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE, mSelectedNetwork); // Verify that we sent the connection success callback. verify(mNetworkRequestMatchCallback).onUserSelectionConnectSuccess(mSelectedNetwork); @@ -1011,7 +1017,8 @@ public class WifiNetworkFactoryTest { // Send network connection success indication. assertNotNull(mSelectedNetwork); - mWifiNetworkFactory.handleNetworkConnectionSuccess(mSelectedNetwork); + mWifiNetworkFactory.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE, mSelectedNetwork); // Verify that we sent the connection success callback. verify(mNetworkRequestMatchCallback).onUserSelectionConnectSuccess(mSelectedNetwork); |