Merge "Always send all available state when calling onAvailable()." am: 8fdbb6d6e2 am: b90963fe4d

am: 3765538bab

Change-Id: Ic82e3cb92841ea99972faad6ae004d77c725831b
This commit is contained in:
Erik Kline
2017-03-07 06:08:40 +00:00
committed by android-build-merger
3 changed files with 33 additions and 19 deletions

View File

@@ -1078,6 +1078,8 @@ public class ConnectivityManager {
* registerNetworkCallback() are not specific to any particular Network so
* do not cause any updates.
*
* TODO: Delete once callers are updated.
*
* @hide
*/
public void requestLinkProperties(NetworkCallback networkCallback) {
@@ -1115,6 +1117,8 @@ public class ConnectivityManager {
* registerNetworkCallback() are not specific to any particular Network so
* do not cause any updates.
*
* TODO: Delete once callers are updated.
*
* @hide
*/
public void requestNetworkCapabilities(NetworkCallback networkCallback) {

View File

@@ -4351,6 +4351,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_LISTENER, nri));
}
// TODO: Delete once callers are updated.
@Override
public void requestLinkProperties(NetworkRequest networkRequest) {
ensureNetworkRequestHasType(networkRequest);
@@ -4359,6 +4360,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
EVENT_REQUEST_LINKPROPERTIES, getCallingUid(), 0, networkRequest));
}
// TODO: Delete once callers are updated.
@Override
public void requestNetworkCapabilities(NetworkRequest networkRequest) {
ensureNetworkRequestHasType(networkRequest);
@@ -4879,7 +4881,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (!nr.isListen()) continue;
if (nai.satisfies(nr) && !nai.isSatisfyingRequest(nr.requestId)) {
nai.addRequest(nr);
notifyNetworkCallback(nai, nri);
notifyNetworkAvailable(nai, nri);
}
}
}
@@ -5061,7 +5063,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// do this after the default net is switched, but
// before LegacyTypeTracker sends legacy broadcasts
for (NetworkRequestInfo nri : addedRequests) notifyNetworkCallback(newNetwork, nri);
for (NetworkRequestInfo nri : addedRequests) notifyNetworkAvailable(newNetwork, nri);
// Linger any networks that are no longer needed. This should be done after sending the
// available callback for newNetwork.
@@ -5224,7 +5226,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) {
NetworkInfo.State state = newInfo.getState();
final NetworkInfo.State state = newInfo.getState();
NetworkInfo oldInfo = null;
final int oldScore = networkAgent.getCurrentScore();
synchronized (networkAgent) {
@@ -5351,15 +5353,27 @@ public class ConnectivityService extends IConnectivityManager.Stub
sendUpdatedScoreToFactories(nai);
}
// notify only this one new request of the current state
protected void notifyNetworkCallback(NetworkAgentInfo nai, NetworkRequestInfo nri) {
int notifyType = ConnectivityManager.CALLBACK_AVAILABLE;
// Notify only this one new request of the current state. Transfer all the
// current state by calling NetworkCapabilities and LinkProperties callbacks
// so that callers can be guaranteed to have as close to atomicity in state
// transfer as can be supported by this current API.
protected void notifyNetworkAvailable(NetworkAgentInfo nai, NetworkRequestInfo nri) {
mHandler.removeMessages(EVENT_TIMEOUT_NETWORK_REQUEST, nri);
if (nri.mPendingIntent == null) {
callCallbackForRequest(nri, nai, notifyType, 0);
} else {
sendPendingIntentForRequest(nri, nai, notifyType);
if (nri.mPendingIntent != null) {
sendPendingIntentForRequest(nri, nai, ConnectivityManager.CALLBACK_AVAILABLE);
// Attempt no subsequent state pushes where intents are involved.
return;
}
callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_AVAILABLE, 0);
// Whether a network is currently suspended is also an important
// element of state to be transferred (it would not otherwise be
// delivered by any currently available mechanism).
if (nai.networkInfo.getState() == NetworkInfo.State.SUSPENDED) {
callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_SUSPENDED, 0);
}
callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_CAP_CHANGED, 0);
callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_IP_CHANGED, 0);
}
private void sendLegacyNetworkBroadcast(NetworkAgentInfo nai, DetailedState state, int type) {

View File

@@ -1176,15 +1176,11 @@ public class ConnectivityServiceTest extends AndroidTestCase {
void expectAvailableCallbacks(MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
expectCallback(CallbackState.AVAILABLE, agent, timeoutMs);
final boolean HAS_DATASYNC_ON_AVAILABLE = false;
if (HAS_DATASYNC_ON_AVAILABLE) {
if (expectSuspended) {
expectCallback(CallbackState.SUSPENDED, agent, timeoutMs);
}
expectCallback(CallbackState.NETWORK_CAPABILITIES, agent, timeoutMs);
expectCallback(CallbackState.LINK_PROPERTIES, agent, timeoutMs);
if (expectSuspended) {
expectCallback(CallbackState.SUSPENDED, agent, timeoutMs);
}
expectCallback(CallbackState.NETWORK_CAPABILITIES, agent, timeoutMs);
expectCallback(CallbackState.LINK_PROPERTIES, agent, timeoutMs);
}
void expectAvailableCallbacks(MockNetworkAgent agent) {
@@ -1196,7 +1192,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {
}
void expectAvailableAndValidatedCallbacks(MockNetworkAgent agent) {
expectAvailableCallbacks(agent, true, TIMEOUT_MS);
expectAvailableCallbacks(agent, false, TIMEOUT_MS);
expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, agent);
}