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

Commit 365e080f 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
Change-Id: I5d9b386020fd85202cb667ec6648ebcaaf22a96c
parent 5ff97366
Loading
Loading
Loading
Loading
+24 −11
Original line number Original line Diff line number Diff line
@@ -2507,6 +2507,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,
    private void sendRequestNetworkCompleteMsg(Message message, boolean success,
                                               @TransportType int transport,
                                               @TransportType int transport,
                                               @RequestNetworkType int requestType,
                                               @RequestNetworkType int requestType,
@@ -2925,16 +2938,9 @@ public class DcTracker extends Handler {
                    + DataCallResponse.failureModeToString(handoverFailureMode));
                    + DataCallResponse.failureModeToString(handoverFailureMode));
        } else if (handoverFailureMode
        } else if (handoverFailureMode
                != DataCallResponse.HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER) {
                != DataCallResponse.HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER) {
            int apnType = ApnSetting.getApnTypesBitmaskFromString(apnContext.getApnType());
            sendRequestNetworkCompleteMessages(apnContext.getApnTypeBitmask(), requestType, success,
            List<Message> messageList = mRequestNetworkCompletionMsgs.get(apnType);
            if (messageList != null) {
                for (Message msg : messageList) {
                    sendRequestNetworkCompleteMsg(msg, success, mTransportType, requestType,
                    fallbackOnFailedHandover);
                    fallbackOnFailedHandover);
        }
        }
                messageList.clear();
            }
        }


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


            case DctConstants.EVENT_TRY_SETUP_DATA:
            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;
                break;

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