Merge "Always send all available state when calling onAvailable()."
This commit is contained in:
@@ -1061,6 +1061,8 @@ public class ConnectivityManager {
|
|||||||
* registerNetworkCallback() are not specific to any particular Network so
|
* registerNetworkCallback() are not specific to any particular Network so
|
||||||
* do not cause any updates.
|
* do not cause any updates.
|
||||||
*
|
*
|
||||||
|
* TODO: Delete once callers are updated.
|
||||||
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public void requestLinkProperties(NetworkCallback networkCallback) {
|
public void requestLinkProperties(NetworkCallback networkCallback) {
|
||||||
@@ -1098,6 +1100,8 @@ public class ConnectivityManager {
|
|||||||
* registerNetworkCallback() are not specific to any particular Network so
|
* registerNetworkCallback() are not specific to any particular Network so
|
||||||
* do not cause any updates.
|
* do not cause any updates.
|
||||||
*
|
*
|
||||||
|
* TODO: Delete once callers are updated.
|
||||||
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public void requestNetworkCapabilities(NetworkCallback networkCallback) {
|
public void requestNetworkCapabilities(NetworkCallback networkCallback) {
|
||||||
|
|||||||
@@ -4348,6 +4348,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_LISTENER, nri));
|
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_LISTENER, nri));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Delete once callers are updated.
|
||||||
@Override
|
@Override
|
||||||
public void requestLinkProperties(NetworkRequest networkRequest) {
|
public void requestLinkProperties(NetworkRequest networkRequest) {
|
||||||
ensureNetworkRequestHasType(networkRequest);
|
ensureNetworkRequestHasType(networkRequest);
|
||||||
@@ -4356,6 +4357,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
EVENT_REQUEST_LINKPROPERTIES, getCallingUid(), 0, networkRequest));
|
EVENT_REQUEST_LINKPROPERTIES, getCallingUid(), 0, networkRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Delete once callers are updated.
|
||||||
@Override
|
@Override
|
||||||
public void requestNetworkCapabilities(NetworkRequest networkRequest) {
|
public void requestNetworkCapabilities(NetworkRequest networkRequest) {
|
||||||
ensureNetworkRequestHasType(networkRequest);
|
ensureNetworkRequestHasType(networkRequest);
|
||||||
@@ -4856,7 +4858,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
if (!nr.isListen()) continue;
|
if (!nr.isListen()) continue;
|
||||||
if (nai.satisfies(nr) && !nai.isSatisfyingRequest(nr.requestId)) {
|
if (nai.satisfies(nr) && !nai.isSatisfyingRequest(nr.requestId)) {
|
||||||
nai.addRequest(nr);
|
nai.addRequest(nr);
|
||||||
notifyNetworkCallback(nai, nri);
|
notifyNetworkAvailable(nai, nri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5038,7 +5040,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
// do this after the default net is switched, but
|
// do this after the default net is switched, but
|
||||||
// before LegacyTypeTracker sends legacy broadcasts
|
// 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
|
// Linger any networks that are no longer needed. This should be done after sending the
|
||||||
// available callback for newNetwork.
|
// available callback for newNetwork.
|
||||||
@@ -5201,7 +5203,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) {
|
private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) {
|
||||||
NetworkInfo.State state = newInfo.getState();
|
final NetworkInfo.State state = newInfo.getState();
|
||||||
NetworkInfo oldInfo = null;
|
NetworkInfo oldInfo = null;
|
||||||
final int oldScore = networkAgent.getCurrentScore();
|
final int oldScore = networkAgent.getCurrentScore();
|
||||||
synchronized (networkAgent) {
|
synchronized (networkAgent) {
|
||||||
@@ -5328,15 +5330,27 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
sendUpdatedScoreToFactories(nai);
|
sendUpdatedScoreToFactories(nai);
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify only this one new request of the current state
|
// Notify only this one new request of the current state. Transfer all the
|
||||||
protected void notifyNetworkCallback(NetworkAgentInfo nai, NetworkRequestInfo nri) {
|
// current state by calling NetworkCapabilities and LinkProperties callbacks
|
||||||
int notifyType = ConnectivityManager.CALLBACK_AVAILABLE;
|
// 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);
|
mHandler.removeMessages(EVENT_TIMEOUT_NETWORK_REQUEST, nri);
|
||||||
if (nri.mPendingIntent == null) {
|
if (nri.mPendingIntent != null) {
|
||||||
callCallbackForRequest(nri, nai, notifyType, 0);
|
sendPendingIntentForRequest(nri, nai, ConnectivityManager.CALLBACK_AVAILABLE);
|
||||||
} else {
|
// Attempt no subsequent state pushes where intents are involved.
|
||||||
sendPendingIntentForRequest(nri, nai, notifyType);
|
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) {
|
private void sendLegacyNetworkBroadcast(NetworkAgentInfo nai, DetailedState state, int type) {
|
||||||
|
|||||||
@@ -1170,15 +1170,11 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
|||||||
|
|
||||||
void expectAvailableCallbacks(MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
|
void expectAvailableCallbacks(MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
|
||||||
expectCallback(CallbackState.AVAILABLE, agent, timeoutMs);
|
expectCallback(CallbackState.AVAILABLE, agent, timeoutMs);
|
||||||
|
if (expectSuspended) {
|
||||||
final boolean HAS_DATASYNC_ON_AVAILABLE = false;
|
expectCallback(CallbackState.SUSPENDED, agent, timeoutMs);
|
||||||
if (HAS_DATASYNC_ON_AVAILABLE) {
|
|
||||||
if (expectSuspended) {
|
|
||||||
expectCallback(CallbackState.SUSPENDED, agent, timeoutMs);
|
|
||||||
}
|
|
||||||
expectCallback(CallbackState.NETWORK_CAPABILITIES, agent, timeoutMs);
|
|
||||||
expectCallback(CallbackState.LINK_PROPERTIES, agent, timeoutMs);
|
|
||||||
}
|
}
|
||||||
|
expectCallback(CallbackState.NETWORK_CAPABILITIES, agent, timeoutMs);
|
||||||
|
expectCallback(CallbackState.LINK_PROPERTIES, agent, timeoutMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void expectAvailableCallbacks(MockNetworkAgent agent) {
|
void expectAvailableCallbacks(MockNetworkAgent agent) {
|
||||||
@@ -1190,7 +1186,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void expectAvailableAndValidatedCallbacks(MockNetworkAgent agent) {
|
void expectAvailableAndValidatedCallbacks(MockNetworkAgent agent) {
|
||||||
expectAvailableCallbacks(agent, true, TIMEOUT_MS);
|
expectAvailableCallbacks(agent, false, TIMEOUT_MS);
|
||||||
expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, agent);
|
expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, agent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user