Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f2f23bd authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android Git Automerger
Browse files

am 9fdf82e0: Merge "Try to switch to another default net on connection failure." into eclair

Merge commit '9fdf82e0' into eclair-plus-aosp

* commit '9fdf82e0':
  Try to switch to another default net on connection failure.
parents d0514347 9fdf82e0
Loading
Loading
Loading
Loading
+43 −21
Original line number Diff line number Diff line
@@ -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) {