Loading services/core/java/com/android/server/ConnectivityService.java +1 −0 Original line number Diff line number Diff line Loading @@ -5342,6 +5342,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // notify only this one new request of the current state protected void notifyNetworkCallback(NetworkAgentInfo nai, NetworkRequestInfo nri) { int notifyType = ConnectivityManager.CALLBACK_AVAILABLE; mHandler.removeMessages(EVENT_TIMEOUT_NETWORK_REQUEST, nri); if (nri.mPendingIntent == null) { callCallbackForRequest(nri, nai, notifyType, 0); } else { Loading tests/net/java/com/android/server/ConnectivityServiceTest.java +35 −12 Original line number Diff line number Diff line Loading @@ -728,10 +728,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { static private void waitFor(Criteria criteria) { int delays = 0; while (!criteria.get()) { try { Thread.sleep(50); } catch (InterruptedException e) { } sleepFor(50); if (++delays == 10) fail(); } } Loading Loading @@ -2313,10 +2310,30 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); // pass timeout and validate that UNAVAILABLE is not called try { Thread.sleep(15); } catch (InterruptedException e) { sleepFor(15); networkCallback.assertNoCallback(); } /** * Validate that a satisfied network request followed by a disconnected (lost) network does * not trigger onUnavailable() once the time-out period expires. */ @SmallTest public void testSatisfiedThenLostNetworkRequestDoesNotTriggerOnUnavailable() { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 500); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.connect(false); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); sleepFor(20); mWiFiNetworkAgent.disconnect(); networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); // pass timeout and validate that UNAVAILABLE is not called sleepFor(600); networkCallback.assertNoCallback(); } Loading Loading @@ -2358,10 +2375,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { // pass timeout and validate that no callbacks // Note: doesn't validate that nothing called from CS since even if called the CM already // unregisters the callback and won't pass it through! try { Thread.sleep(15); } catch (InterruptedException e) { } sleepFor(15); networkCallback.assertNoCallback(); // create a network satisfying request - validate that request not triggered Loading Loading @@ -2775,4 +2789,13 @@ public class ConnectivityServiceTest extends AndroidTestCase { mCm.unregisterNetworkCallback(pendingIntent); } } /* test utilities */ static private void sleepFor(int ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { } } } Loading
services/core/java/com/android/server/ConnectivityService.java +1 −0 Original line number Diff line number Diff line Loading @@ -5342,6 +5342,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // notify only this one new request of the current state protected void notifyNetworkCallback(NetworkAgentInfo nai, NetworkRequestInfo nri) { int notifyType = ConnectivityManager.CALLBACK_AVAILABLE; mHandler.removeMessages(EVENT_TIMEOUT_NETWORK_REQUEST, nri); if (nri.mPendingIntent == null) { callCallbackForRequest(nri, nai, notifyType, 0); } else { Loading
tests/net/java/com/android/server/ConnectivityServiceTest.java +35 −12 Original line number Diff line number Diff line Loading @@ -728,10 +728,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { static private void waitFor(Criteria criteria) { int delays = 0; while (!criteria.get()) { try { Thread.sleep(50); } catch (InterruptedException e) { } sleepFor(50); if (++delays == 10) fail(); } } Loading Loading @@ -2313,10 +2310,30 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); // pass timeout and validate that UNAVAILABLE is not called try { Thread.sleep(15); } catch (InterruptedException e) { sleepFor(15); networkCallback.assertNoCallback(); } /** * Validate that a satisfied network request followed by a disconnected (lost) network does * not trigger onUnavailable() once the time-out period expires. */ @SmallTest public void testSatisfiedThenLostNetworkRequestDoesNotTriggerOnUnavailable() { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 500); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.connect(false); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); sleepFor(20); mWiFiNetworkAgent.disconnect(); networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); // pass timeout and validate that UNAVAILABLE is not called sleepFor(600); networkCallback.assertNoCallback(); } Loading Loading @@ -2358,10 +2375,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { // pass timeout and validate that no callbacks // Note: doesn't validate that nothing called from CS since even if called the CM already // unregisters the callback and won't pass it through! try { Thread.sleep(15); } catch (InterruptedException e) { } sleepFor(15); networkCallback.assertNoCallback(); // create a network satisfying request - validate that request not triggered Loading Loading @@ -2775,4 +2789,13 @@ public class ConnectivityServiceTest extends AndroidTestCase { mCm.unregisterNetworkCallback(pendingIntent); } } /* test utilities */ static private void sleepFor(int ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { } } }