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

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

Clean up handover complete message in handover retry case

When handover is retried, the network request completion
messages need to be responded so transport manager can
switch the preference depending on the result.

Fix: 175624617
Test: Manual
Merged-In: I5d9b386020fd85202cb667ec6648ebcaaf22a96c
Change-Id: I5d9b386020fd85202cb667ec6648ebcaaf22a96c
(cherry picked from commit 365e080f)
parent 4298f0a0
Loading
Loading
Loading
Loading
+24 −11
Original line number Diff line number Diff line
@@ -2532,6 +2532,19 @@ public class DcTracker extends Handler {
        }
    }

    private void sendRequestNetworkCompleteMessages(@ApnType int apnType,
            @RequestNetworkType int requestType, boolean success,
            boolean fallbackOnFailedHandover) {
        List<Message> messageList = mRequestNetworkCompletionMsgs.get(apnType);
        if (messageList != null) {
            for (Message msg : messageList) {
                sendRequestNetworkCompleteMsg(msg, success, mTransportType, requestType,
                        fallbackOnFailedHandover);
            }
            messageList.clear();
        }
    }

    private void sendRequestNetworkCompleteMsg(Message message, boolean success,
                                               @TransportType int transport,
                                               @RequestNetworkType int requestType,
@@ -2960,16 +2973,9 @@ public class DcTracker extends Handler {
                    + DataCallResponse.failureModeToString(handoverFailureMode));
        } else if (handoverFailureMode
                != DataCallResponse.HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER) {
            int apnType = ApnSetting.getApnTypesBitmaskFromString(apnContext.getApnType());
            List<Message> messageList = mRequestNetworkCompletionMsgs.get(apnType);
            if (messageList != null) {
                for (Message msg : messageList) {
                    sendRequestNetworkCompleteMsg(msg, success, mTransportType, requestType,
            sendRequestNetworkCompleteMessages(apnContext.getApnTypeBitmask(), requestType, success,
                    fallbackOnFailedHandover);
        }
                messageList.clear();
            }
        }

        if (success) {
            DataConnection dataConnection = apnContext.getDataConnection();
@@ -3753,9 +3759,16 @@ public class DcTracker extends Handler {
                break;

            case DctConstants.EVENT_TRY_SETUP_DATA:
                trySetupData((ApnContext) msg.obj, msg.arg1);
                apnContext = (ApnContext) msg.obj;
                requestType = msg.arg1;
                if (!trySetupData(apnContext, requestType)) {
                    // Note that this might be a retry handover request that we need to notify
                    // handover completion. Note if it fails, we will not retry anymore (because
                    // it's due to pre-condition not met) and will not fallback.
                    sendRequestNetworkCompleteMessages(apnContext.getApnTypeBitmask(), requestType,
                            false, false);
                }
                break;

            case DctConstants.EVENT_CLEAN_UP_CONNECTION:
                if (DBG) log("EVENT_CLEAN_UP_CONNECTION");
                cleanUpConnectionInternal(true, RELEASE_TYPE_DETACH, (ApnContext) msg.obj);