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

Commit ff549b12 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed that data was setup on incorrect transport

When there was no network request for particular APN
type, when qualified network service updates the current
available networks, telephony network factory incorrectly
thought handover is needed and kept waiting for handover
completed. But it will never happen, so the transport was
stuck on the original transport forever.

Fixed by adding no qualified network requests handling.

Test: Manual
Bug: 127528333
Change-Id: Iaae72b0f998a950d54d720a9401416526973303b
parent 391ee1b1
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -310,11 +310,12 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        log("onDataHandoverNeeded: apnType=" + ApnSetting.getApnTypeString(apnType)
                + ", target transport=" + TransportType.toString(targetTransport));
        if (mTransportManager.getCurrentTransport(apnType) == targetTransport) {
            log("apnType " + ApnSetting.getApnTypeString(apnType) + " is already on "
            log("APN type " + ApnSetting.getApnTypeString(apnType) + " is already on "
                    + TransportType.toString(targetTransport));
            return;
        }

        boolean handoverPending = false;
        for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            NetworkRequest networkRequest = entry.getKey();
            int currentTransport = entry.getValue();
@@ -326,10 +327,20 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                        EVENT_DATA_HANDOVER_COMPLETED);
                onCompleteMsg.getData().putParcelable(
                        DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest);
                // TODO: Need to handle the case that the request is there, but there is no actual
                // data connections established.
                requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER,
                        targetTransport, onCompleteMsg);
                handoverPending = true;
            }
        }

        if (!handoverPending) {
            log("No handover request pending. Update the transport type to "
                    + TransportType.toString(targetTransport) + " for APN type "
                    + ApnSetting.getApnTypeString(apnType));
            mTransportManager.setCurrentTransport(apnType, targetTransport);
        }
    }

    private void onDataHandoverSetupCompleted(NetworkRequest networkRequest, boolean success,