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

Commit 9b61778d authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android Git Automerger
Browse files

am dba69061: Merge "Send availability info more reliably" into ics-mr0

* commit 'dba69061':
  Send availability info more reliably
parents 8af45445 dba69061
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -197,7 +197,10 @@ public class MobileDataStateTracker implements NetworkStateTracker {
                String apnName = intent.getStringExtra(Phone.DATA_APN_KEY);
                mNetworkInfo.setRoaming(intent.getBooleanExtra(Phone.DATA_NETWORK_ROAMING_KEY,
                        false));

                if (VDBG) {
                    log(mApnType + " setting isAvailable to " +
                            intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,false));
                }
                mNetworkInfo.setIsAvailable(!intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,
                        false));

+3 −0
Original line number Diff line number Diff line
@@ -132,6 +132,9 @@ public interface NetworkStateTracker {
     * Returns an indication of whether this network is available for
     * connections. A value of {@code false} means that some quasi-permanent
     * condition prevents connectivity to this network.
     *
     * NOTE that this is broken on multi-connection devices.  Should be fixed in J release
     * TODO - fix on multi-pdp devices
     */
    public boolean isAvailable();

+3 −20
Original line number Diff line number Diff line
@@ -254,9 +254,6 @@ public abstract class DataConnectionTracker extends Handler {
    /** CID of active data connection */
    protected int mCidActive;

    /** indication of our availability (preconditions to trysetupData are met) **/
    protected boolean mAvailability = false;

    // When false we will not auto attach and manually attaching is required.
    protected boolean mAutoAttachOnCreation = false;

@@ -755,7 +752,7 @@ public abstract class DataConnectionTracker extends Handler {
                mPhone.notifyDataConnection(reason, apnIdToType(id));
            }
        }
        notifyDataAvailability(reason);
        notifyOffApnsOfAvailability(reason);
    }

    // a new APN has gone active and needs to send events to catch up with the
@@ -783,15 +780,8 @@ public abstract class DataConnectionTracker extends Handler {
    }

    // disabled apn's still need avail/unavail notificiations - send them out
    protected void notifyOffApnsOfAvailability(String reason, boolean availability) {
        if (mAvailability == availability) {
            if (DBG) {
                log("notifyOffApnsOfAvailability: no change in availability, " +
                     "not nofitying about reason='" + reason + "' availability=" + availability);
            }
            return;
        }
        mAvailability = availability;
    protected void notifyOffApnsOfAvailability(String reason) {
        if (DBG) log("notifyOffApnsOfAvailability - reason= " + reason);
        for (int id = 0; id < APN_NUM_TYPES; id++) {
            if (!isApnIdEnabled(id)) {
                notifyApnIdDisconnected(reason, id);
@@ -799,13 +789,6 @@ public abstract class DataConnectionTracker extends Handler {
        }
    }

    // we had an availability change - tell the listeners
    protected void notifyDataAvailability(String reason) {
        // note that we either just turned all off because we lost availability
        // or all were off and could now go on, so only have off apns to worry about
        notifyOffApnsOfAvailability(reason, isDataPossible(Phone.APN_TYPE_DEFAULT));
    }

    public boolean isApnTypeEnabled(String apnType) {
        if (apnType == null) {
            return false;
+10 −10
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
            // FIXME  this can be improved
            setState(State.CONNECTED);
            notifyDataConnection(reason);
            notifyOffApnsOfAvailability(reason, true);
            notifyOffApnsOfAvailability(reason);

            log("(fix?) We're on the simulator; assuming data is connected");
            return true;
@@ -250,10 +250,10 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
        if ((mState == State.IDLE || mState == State.SCANNING) &&
                isDataAllowed() && getAnyDataEnabled()) {
            boolean retValue = setupData(reason);
            notifyOffApnsOfAvailability(reason, retValue);
            notifyOffApnsOfAvailability(reason);
            return retValue;
        } else {
            notifyOffApnsOfAvailability(reason, false);
            notifyOffApnsOfAvailability(reason);
            return false;
        }
    }
@@ -276,7 +276,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
        }

        setState(State.DISCONNECTING);
        notifyDataAvailability(reason);
        notifyOffApnsOfAvailability(reason);

        boolean notificationDeferred = false;
        for (DataConnection conn : mDataConnections.values()) {
@@ -536,7 +536,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {

    private void notifyNoData(FailCause lastFailCauseCode) {
        setState(State.FAILED);
        notifyDataAvailability(null);
        notifyOffApnsOfAvailability(null);
    }

    protected void gotoIdleAndNotifyDataConnection(String reason) {
@@ -583,7 +583,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
    @Override
    protected void onRoamingOff() {
        if (getDataOnRoamingEnabled() == false) {
            notifyDataAvailability(Phone.REASON_ROAMING_OFF);
            notifyOffApnsOfAvailability(Phone.REASON_ROAMING_OFF);
            trySetupData(Phone.REASON_ROAMING_OFF);
        } else {
            notifyDataConnection(Phone.REASON_ROAMING_OFF);
@@ -601,7 +601,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
        } else {
            if (DBG) log("Tear down data connection on roaming.");
            cleanUpAllConnections(null);
            notifyDataAvailability(Phone.REASON_ROAMING_ON);
            notifyOffApnsOfAvailability(Phone.REASON_ROAMING_ON);
        }
    }

@@ -619,7 +619,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
            log("We're on the simulator; assuming data is connected");
        }

        notifyDataAvailability(null);
        notifyOffApnsOfAvailability(null);

        if (mState != State.IDLE) {
            cleanUpAllConnections(null);
@@ -710,7 +710,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
        if (mState == State.CONNECTED && !mCdmaPhone.mSST.isConcurrentVoiceAndDataAllowed()) {
            stopNetStatPoll();
            notifyDataConnection(Phone.REASON_VOICE_CALL_STARTED);
            notifyDataAvailability(Phone.REASON_VOICE_CALL_STARTED);
            notifyOffApnsOfAvailability(Phone.REASON_VOICE_CALL_STARTED);
        }
    }

@@ -727,7 +727,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
                // clean slate after call end.
                resetPollStats();
            }
            notifyDataAvailability(Phone.REASON_VOICE_CALL_ENDED);
            notifyOffApnsOfAvailability(Phone.REASON_VOICE_CALL_ENDED);
        } else {
            mDataConnections.get(0).resetRetryCount();
            // in case data setup was attempted when we were on a voice call
+16 −14
Original line number Diff line number Diff line
@@ -556,7 +556,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            notifyDataConnection(Phone.REASON_DATA_ATTACHED);
        } else {
            // update APN availability so that APN can be enabled.
            notifyDataAvailability(Phone.REASON_DATA_ATTACHED);
            notifyOffApnsOfAvailability(Phone.REASON_DATA_ATTACHED);
        }

        setupDataOnReadyApns(Phone.REASON_DATA_ATTACHED);
@@ -693,7 +693,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
                if (waitingApns.isEmpty()) {
                    if (DBG) log("trySetupData: No APN found");
                    notifyNoData(GsmDataConnection.FailCause.MISSING_UNKNOWN_APN, apnContext);
                    notifyOffApnsOfAvailability(apnContext.getReason(), false);
                    notifyOffApnsOfAvailability(apnContext.getReason());
                    return false;
                } else {
                    apnContext.setWaitingApns(waitingApns);
@@ -708,7 +708,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            }
            // apnContext.setReason(apnContext.getReason());
            boolean retValue = setupData(apnContext);
            notifyOffApnsOfAvailability(apnContext.getReason(), retValue);
            notifyOffApnsOfAvailability(apnContext.getReason());
            return retValue;
        } else {
            // TODO: check the condition.
@@ -716,23 +716,25 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
                && (apnContext.getState() == State.IDLE
                    || apnContext.getState() == State.SCANNING))
                mPhone.notifyDataConnectionFailed(apnContext.getReason(), apnContext.getApnType());
            notifyOffApnsOfAvailability(apnContext.getReason(), false);
            notifyOffApnsOfAvailability(apnContext.getReason());
            return false;
        }
    }

    @Override
    // Disabled apn's still need avail/unavail notificiations - send them out
    protected void notifyOffApnsOfAvailability(String reason, boolean availability) {
        if (mAvailability == availability) return;
        mAvailability = availability;

    protected void notifyOffApnsOfAvailability(String reason) {
        for (ApnContext apnContext : mApnContexts.values()) {
            if (!apnContext.isReady()) {
                if (DBG) log("notifyOffApnOfAvailability type:" + apnContext.getApnType());
                mPhone.notifyDataConnection(reason != null ? reason : apnContext.getReason(),
                                            apnContext.getApnType(),
                                            Phone.DataState.DISCONNECTED);
            } else {
                if (DBG) {
                    log("notifyOffApnsOfAvailability skipped apn due to isReady==false: " +
                            apnContext.toString());
                }
            }
        }
    }
@@ -1572,7 +1574,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
        createAllApnList();
        if (mPhone.mCM.getRadioState().isOn()) {
            if (DBG) log("onRecordsLoaded: notifying data availability");
            notifyDataAvailability(Phone.REASON_SIM_LOADED);
            notifyOffApnsOfAvailability(Phone.REASON_SIM_LOADED);
        }
        setupDataOnReadyApns(Phone.REASON_SIM_LOADED);
    }
@@ -1681,7 +1683,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
        if (DBG) log("onRoamingOff");

        if (getDataOnRoamingEnabled() == false) {
            notifyDataAvailability(Phone.REASON_ROAMING_OFF);
            notifyOffApnsOfAvailability(Phone.REASON_ROAMING_OFF);
            setupDataOnReadyApns(Phone.REASON_ROAMING_OFF);
        } else {
            notifyDataConnection(Phone.REASON_ROAMING_OFF);
@@ -1697,7 +1699,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
        } else {
            if (DBG) log("onRoamingOn: Tear down data connection on roaming.");
            cleanUpAllConnections(true, Phone.REASON_ROAMING_ON);
            notifyDataAvailability(Phone.REASON_ROAMING_ON);
            notifyOffApnsOfAvailability(Phone.REASON_ROAMING_ON);
        }
    }

@@ -1714,7 +1716,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
        }

        if (mPhone.mIccRecords.getRecordsLoaded()) {
            notifyDataAvailability(null);
            notifyOffApnsOfAvailability(null);
        }

        if (getOverallState() != State.IDLE) {
@@ -1740,7 +1742,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            if (DBG) log("onRadioOffOrNotAvailable: is off and clean up all connections");
            cleanUpAllConnections(false, Phone.REASON_RADIO_TURNED_OFF);
        }
        notifyDataAvailability(null);
        notifyOffApnsOfAvailability(null);
    }

    @Override
@@ -1985,7 +1987,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
                        apnContext.getApnType());
            }
        }
        notifyDataAvailability(reason);
        notifyOffApnsOfAvailability(reason);
    }

    /**