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

Commit caed8208 authored by Jaikumar Ganesh's avatar Jaikumar Ganesh
Browse files

Tear down data, if a disconnect request is pending.

If there is a pending disconnect, and the previous connection
attempt succeeds, we don't disconnect and hence the state remains
in DISCONNECTING. Ex: user is on Wifi, location app calls
enableApnType(SUPL) and then we set state to INITING. It then
calls disableApnType(SUPL) we register a pending disconnect.
When the data connection attempt is successful, we don't disconnect,
as the PDP Connection State has not been set to ACTIVE and we check
for this state. This fix removes the dependency on ACTIVE state check.
parent b3c6addf
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -95,9 +95,7 @@ public class PdpConnection extends DataConnection {
                apn.password, obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE));
    }

    protected void disconnect(Message msg) {
        onDisconnect = msg;
        if (state == State.ACTIVE) {
    private void tearDownData(Message msg) {
        if (dataLink != null) {
            dataLink.disconnect();
        }
@@ -105,6 +103,12 @@ public class PdpConnection extends DataConnection {
        if (phone.mCM.getRadioState().isOn()) {
            phone.mCM.deactivateDataCall(cid, obtainMessage(EVENT_DEACTIVATE_DONE, msg));
        }
    }

    protected void disconnect(Message msg) {
        onDisconnect = msg;
        if (state == State.ACTIVE) {
            tearDownData(msg);
        } else if (state == State.ACTIVATING) {
            receivedDisconnectReq = true;
        } else {
@@ -243,7 +247,7 @@ public class PdpConnection extends DataConnection {
                // Don't bother reporting success if there's already a
                // pending disconnect request, since DataConnectionTracker
                // has already updated its state.
                disconnect(onDisconnect);
                tearDownData(onDisconnect);
            } else {
                String[] response = ((String[]) ar.result);
                cid = Integer.parseInt(response[0]);