Merge "Try to switch to another default net on connection failure." into eclair

This commit is contained in:
Robert Greenwalt
2010-01-21 09:57:46 -08:00
committed by Android (Google) Code Review

View File

@@ -811,6 +811,28 @@ public class ConnectivityService extends IConnectivityManager.Stub {
info.getExtraInfo());
}
NetworkStateTracker newNet = tryFailover(prevNetType);
if (newNet != null) {
NetworkInfo switchTo = newNet.getNetworkInfo();
intent.putExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO, switchTo);
} else {
intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);
}
// do this before we broadcast the change
handleConnectivityChange();
sendStickyBroadcast(intent);
/*
* If the failover network is already connected, then immediately send
* out a followup broadcast indicating successful failover
*/
if (newNet != null && newNet.getNetworkInfo().isConnected()) {
sendConnectedBroadcast(newNet.getNetworkInfo());
}
}
// returns -1 if no failover available
private NetworkStateTracker tryFailover(int prevNetType) {
/*
* If this is a default network, check if other defaults are available
* or active
@@ -823,8 +845,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
int newType = -1;
int newPriority = -1;
for (int checkType=0; checkType <=
ConnectivityManager.MAX_NETWORK_TYPE; checkType++) {
for (int checkType=0; checkType <= ConnectivityManager.MAX_NETWORK_TYPE; checkType++) {
if (checkType == prevNetType) {
continue;
}
@@ -839,8 +860,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (mRadioAttributes[mNetAttributes[checkType].mRadio].
mPriority > newPriority) {
newType = checkType;
newPriority = mRadioAttributes[mNetAttributes[newType].
mRadio].mPriority;
newPriority = mRadioAttributes[mNetAttributes[newType].mRadio].mPriority;
}
}
}
@@ -870,29 +890,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
switchTo.getTypeName());
}
}
intent.putExtra(ConnectivityManager.
EXTRA_OTHER_NETWORK_INFO, switchTo);
} else {
intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,
true);
newNet.reconnect();
}
} else {
intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,
true);
}
}
// do this before we broadcast the change
handleConnectivityChange();
sendStickyBroadcast(intent);
/*
* If the failover network is already connected, then immediately send
* out a followup broadcast indicating successful failover
*/
if (newNet != null && newNet.getNetworkInfo().isConnected())
sendConnectedBroadcast(newNet.getNetworkInfo());
return newNet;
}
private void sendConnectedBroadcast(NetworkInfo info) {
@@ -948,7 +952,25 @@ public class ConnectivityService extends IConnectivityManager.Stub {
intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true);
info.setFailover(false);
}
NetworkStateTracker newNet = tryFailover(info.getType());
if (newNet != null) {
NetworkInfo switchTo = newNet.getNetworkInfo();
intent.putExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO, switchTo);
} else {
intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);
}
// do this before we broadcast the change
handleConnectivityChange();
sendStickyBroadcast(intent);
/*
* If the failover network is already connected, then immediately send
* out a followup broadcast indicating successful failover
*/
if (newNet != null && newNet.getNetworkInfo().isConnected()) {
sendConnectedBroadcast(newNet.getNetworkInfo());
}
}
private void sendStickyBroadcast(Intent intent) {