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

Commit 50859d9f authored by Jack Yu's avatar Jack Yu Committed by Automerger Merge Worker
Browse files

Renamed network request complete message am: d30c66db am: cdd38e6b

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1692967

Change-Id: Ifa050422976a40ab7f6855fa3243e90391ed7775
parents c5b9bfc6 cdd38e6b
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -403,14 +403,22 @@ public class ApnContext {
        }
    }

    /**
     * Request a network
     *
     * @param networkRequest Network request from clients
     * @param type The request type
     * @param onHandoverCompleteMsg When request type is handover, this message will be sent when
     * handover is completed. For normal request, this should be null.
     */
    public void requestNetwork(NetworkRequest networkRequest, @RequestNetworkType int type,
                               Message onCompleteMsg) {
            Message onHandoverCompleteMsg) {
        synchronized (mRefCountLock) {
            mNetworkRequests.add(networkRequest);
            logl("requestNetwork for " + networkRequest + ", type="
                    + DcTracker.requestTypeToString(type));
            mDcTracker.enableApn(ApnSetting.getApnTypesBitmaskFromString(mApnType), type,
                    onCompleteMsg);
                    onHandoverCompleteMsg);
            if (mDataConnection != null) {
                // New network request added. Should re-evaluate properties of
                // the data connection. For example, the score may change.
+92 −98
Original line number Diff line number Diff line
@@ -209,10 +209,9 @@ public class DcTracker extends Handler {
     */
    public static final int RELEASE_TYPE_HANDOVER = 3;

    /** The extras for request network completion message */
    /** The extras for handover completion message */
    static final String DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST = "extra_network_request";
    static final String DATA_COMPLETE_MSG_EXTRA_TRANSPORT_TYPE = "extra_transport_type";
    static final String DATA_COMPLETE_MSG_EXTRA_REQUEST_TYPE = "extra_request_type";
    static final String DATA_COMPLETE_MSG_EXTRA_SUCCESS = "extra_success";
    /**
     * The flag indicates whether after handover failure, the data connection should remain on the
@@ -721,7 +720,7 @@ public class DcTracker extends Handler {
     * messages to be sent. Using a list because there might be multiple network requests for
     * the same APN type.
     */
    private final Map<Integer, List<Message>> mRequestNetworkCompletionMsgs = new HashMap<>();
    private final Map<Integer, List<Message>> mHandoverCompletionMsgs = new HashMap<>();

    //***** Constructor
    public DcTracker(Phone phone, @TransportType int transportType) {
@@ -948,12 +947,24 @@ public class DcTracker extends Handler {
        mPhone.notifyDataActivity();
    }

    /**
     * Request a network
     *
     * @param networkRequest Network request from clients
     * @param type The request type
     * @param onHandoverCompleteMsg When request type is handover, this message will be sent when
     * handover is completed. For normal request, this should be null.
     */
    public void requestNetwork(NetworkRequest networkRequest, @RequestNetworkType int type,
                               Message onCompleteMsg) {
            Message onHandoverCompleteMsg) {
        if (type != REQUEST_TYPE_HANDOVER && onHandoverCompleteMsg != null) {
            throw new RuntimeException("request network with normal type request type but passing "
                    + "handover complete message.");
        }
        final int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest);
        final ApnContext apnContext = mApnContextsByType.get(apnType);
        if (apnContext != null) {
            apnContext.requestNetwork(networkRequest, type, onCompleteMsg);
            apnContext.requestNetwork(networkRequest, type, onHandoverCompleteMsg);
        }
    }

@@ -1523,7 +1534,7 @@ public class DcTracker extends Handler {
        if (apnContext.isConnectable()) {
            log("isConnectable() call trySetupData");
            apnContext.setReason(reason);
            trySetupData(apnContext, REQUEST_TYPE_NORMAL);
            trySetupData(apnContext, REQUEST_TYPE_NORMAL, null);
        }
    }

@@ -1534,12 +1545,16 @@ public class DcTracker extends Handler {
        return isInEcm && !isInImsEcm;
    }

    private boolean trySetupData(ApnContext apnContext, @RequestNetworkType int requestType) {
    private void trySetupData(ApnContext apnContext, @RequestNetworkType int requestType,
            @Nullable Message onHandoverCompleteMsg) {
        if (onHandoverCompleteMsg != null) {
            addHandoverCompleteMsg(onHandoverCompleteMsg, apnContext.getApnTypeBitmask());
        }

        if (mPhone.getSimulatedRadioControl() != null) {
            // Assume data is connected on the simulator
            log("trySetupData: X We're on the simulator; assuming connected retValue=true");
            return true;
            return;
        }

        DataConnectionReasons dataConnectionReasons = new DataConnectionReasons();
@@ -1549,7 +1564,31 @@ public class DcTracker extends Handler {
                + ". " + dataConnectionReasons.toString();
        if (DBG) log(logStr);
        apnContext.requestLog(logStr);
        if (isDataAllowed) {
        if (!isDataAllowed) {
            StringBuilder str = new StringBuilder();

            str.append("trySetupData failed. apnContext = [type=" + apnContext.getApnType()
                    + ", mState=" + apnContext.getState() + ", apnEnabled="
                    + apnContext.isEnabled() + ", mDependencyMet="
                    + apnContext.isDependencyMet() + "] ");

            if (!mDataEnabledSettings.isDataEnabled()) {
                str.append("isDataEnabled() = false. " + mDataEnabledSettings);
            }

            // If this is a data retry, we should set the APN state to FAILED so it won't stay
            // in RETRYING forever.
            if (apnContext.getState() == DctConstants.State.RETRYING) {
                apnContext.setState(DctConstants.State.FAILED);
                str.append(" Stop retrying.");
            }

            if (DBG) log(str.toString());
            apnContext.requestLog(str.toString());
            sendHandoverCompleteMessages(apnContext.getApnTypeBitmask(), false, false);
            return;
        }

        if (apnContext.getState() == DctConstants.State.FAILED) {
            String str = "trySetupData: make a FAILED ApnContext IDLE so its reusable";
            if (DBG) log(str);
@@ -1571,7 +1610,9 @@ public class DcTracker extends Handler {
                String str = "trySetupData: X No APN found retValue=false";
                if (DBG) log(str);
                apnContext.requestLog(str);
                    return false;
                sendHandoverCompleteMessages(apnContext.getApnTypeBitmask(), false,
                        false);
                return;
            } else {
                apnContext.setWaitingApns(waitingApns);
                if (DBG) {
@@ -1581,32 +1622,8 @@ public class DcTracker extends Handler {
            }
        }

            boolean retValue = setupData(apnContext, radioTech, requestType);

            if (DBG) log("trySetupData: X retValue=" + retValue);
            return retValue;
        } else {
            StringBuilder str = new StringBuilder();

            str.append("trySetupData failed. apnContext = [type=" + apnContext.getApnType()
                    + ", mState=" + apnContext.getState() + ", apnEnabled="
                    + apnContext.isEnabled() + ", mDependencyMet="
                    + apnContext.isDependencyMet() + "] ");

            if (!mDataEnabledSettings.isDataEnabled()) {
                str.append("isDataEnabled() = false. " + mDataEnabledSettings);
            }

            // If this is a data retry, we should set the APN state to FAILED so it won't stay
            // in RETRYING forever.
            if (apnContext.getState() == DctConstants.State.RETRYING) {
                apnContext.setState(DctConstants.State.FAILED);
                str.append(" Stop retrying.");
            }

            if (DBG) log(str.toString());
            apnContext.requestLog(str.toString());
            return false;
        if (!setupData(apnContext, radioTech, requestType)) {
            sendHandoverCompleteMessages(apnContext.getApnTypeBitmask(), false, false);
        }
    }

@@ -2522,38 +2539,33 @@ public class DcTracker extends Handler {
        return apnSetting.canHandleType(apnType);
    }

    private void addRequestNetworkCompleteMsg(Message onCompleteMsg,
    private void addHandoverCompleteMsg(Message onCompleteMsg,
            @ApnType int apnType) {
        if (onCompleteMsg != null) {
            List<Message> messageList = mRequestNetworkCompletionMsgs.get(apnType);
            List<Message> messageList = mHandoverCompletionMsgs.get(apnType);
            if (messageList == null) messageList = new ArrayList<>();
            messageList.add(onCompleteMsg);
            mRequestNetworkCompletionMsgs.put(apnType, messageList);
            mHandoverCompletionMsgs.put(apnType, messageList);
        }
    }

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

    private void sendRequestNetworkCompleteMsg(Message message, boolean success,
                                               @TransportType int transport,
                                               @RequestNetworkType int requestType,
                                               boolean doFallbackOnFailedHandover) {
    private void sendHandoverCompleteMsg(Message message, boolean success,
            @TransportType int transport, boolean doFallbackOnFailedHandover) {
        if (message == null) return;

        Bundle b = message.getData();
        b.putBoolean(DATA_COMPLETE_MSG_EXTRA_SUCCESS, success);
        b.putInt(DATA_COMPLETE_MSG_EXTRA_REQUEST_TYPE, requestType);
        b.putInt(DATA_COMPLETE_MSG_EXTRA_TRANSPORT_TYPE, transport);
        b.putBoolean(DATA_COMPLETE_MSG_EXTRA_HANDOVER_FAILURE_FALLBACK, doFallbackOnFailedHandover);
        message.sendToTarget();
@@ -2603,18 +2615,19 @@ public class DcTracker extends Handler {
    }

    public void enableApn(@ApnType int apnType, @RequestNetworkType int requestType,
            Message onCompleteMsg) {
            Message onHandoverCompleteMsg) {
        sendMessage(obtainMessage(DctConstants.EVENT_ENABLE_APN, apnType, requestType,
                onCompleteMsg));
                onHandoverCompleteMsg));
    }

    private void onEnableApn(@ApnType int apnType, @RequestNetworkType int requestType,
                             Message onCompleteMsg) {
            Message onHandoverCompleteMsg) {
        ApnContext apnContext = mApnContextsByType.get(apnType);
        if (apnContext == null) {
            loge("onEnableApn(" + apnType + "): NO ApnContext");
            sendRequestNetworkCompleteMsg(onCompleteMsg, false, mTransportType, requestType,
                    false);
            if (onHandoverCompleteMsg != null) {
                sendHandoverCompleteMsg(onHandoverCompleteMsg, false, mTransportType, false);
            }
            return;
        }

@@ -2629,8 +2642,9 @@ public class DcTracker extends Handler {
            str = "onEnableApn: dependency is not met.";
            if (DBG) log(str);
            apnContext.requestLog(str);
            sendRequestNetworkCompleteMsg(onCompleteMsg, false, mTransportType, requestType,
                    false);
            if (onHandoverCompleteMsg != null) {
                sendHandoverCompleteMsg(onHandoverCompleteMsg, false, mTransportType, false);
            }
            return;
        }

@@ -2638,24 +2652,15 @@ public class DcTracker extends Handler {
            DctConstants.State state = apnContext.getState();
            switch(state) {
                case CONNECTING:
                    if (DBG) log("onEnableApn: 'CONNECTING' so return");
                    apnContext.requestLog("onEnableApn state=CONNECTING, so return");
                    addRequestNetworkCompleteMsg(onCompleteMsg, apnType);
                    return;
                case CONNECTED:
                    if (DBG) log("onEnableApn: 'CONNECTED' so return");
                    // Don't add to local log since this is so common
                    sendRequestNetworkCompleteMsg(onCompleteMsg, true, mTransportType,
                            requestType, false);
                    return;
                case DISCONNECTING:
                    if (DBG) log("onEnableApn: 'DISCONNECTING' so return");
                    apnContext.requestLog("onEnableApn state=DISCONNECTING, so return");
                    sendRequestNetworkCompleteMsg(onCompleteMsg, false, mTransportType,
                            requestType, false);
                    if (DBG) log("onEnableApn: APN in " + state + " state. Exit now.");
                    if (onHandoverCompleteMsg != null) {
                        sendHandoverCompleteMsg(onHandoverCompleteMsg, false, mTransportType,
                                false);
                    }
                    return;
                case IDLE:
                    // fall through: this is unexpected but if it happens cleanup and try setup
                case FAILED:
                case RETRYING:
                    // We're "READY" but not active so disconnect (cleanup = true) and
@@ -2677,12 +2682,7 @@ public class DcTracker extends Handler {
        apnContext.resetErrorCodeRetries();

        if (mConfigReady || apnContext.getApnTypeBitmask() == ApnSetting.TYPE_EMERGENCY) {
            if (trySetupData(apnContext, requestType)) {
                addRequestNetworkCompleteMsg(onCompleteMsg, apnType);
            } else {
                sendRequestNetworkCompleteMsg(onCompleteMsg, false, mTransportType,
                        requestType, false);
            }
            trySetupData(apnContext, requestType, onHandoverCompleteMsg);
        } else {
            log("onEnableApn: config not ready yet.");
        }
@@ -2973,7 +2973,7 @@ public class DcTracker extends Handler {
                    + DataCallResponse.failureModeToString(handoverFailureMode));
        } else if (handoverFailureMode
                != DataCallResponse.HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER) {
            sendRequestNetworkCompleteMessages(apnContext.getApnTypeBitmask(), requestType, success,
            sendHandoverCompleteMessages(apnContext.getApnTypeBitmask(), success,
                    fallbackOnFailedHandover);
        }

@@ -3192,8 +3192,8 @@ public class DcTracker extends Handler {
            log("onDataSetupCompleteError: Stop retrying APNs. delay=" + delay
                    + ", requestType=" + requestTypeToString(requestType));
            //send request network complete messages as needed
            sendRequestNetworkCompleteMessages(apnContext.getApnTypeBitmask(),
                    requestType, false, fallbackOnFailedHandover);
            sendHandoverCompleteMessages(apnContext.getApnTypeBitmask(), false,
                    fallbackOnFailedHandover);
        }
    }

@@ -3751,7 +3751,7 @@ public class DcTracker extends Handler {
                    apnContext = mApnContextsByType.get(ApnSetting.TYPE_DEFAULT);
                    if (apnContext != null) {
                        apnContext.setReason(Phone.REASON_PS_RESTRICT_ENABLED);
                        trySetupData(apnContext, REQUEST_TYPE_NORMAL);
                        trySetupData(apnContext, REQUEST_TYPE_NORMAL, null);
                    } else {
                        loge("**** Default ApnContext not found ****");
                        if (TelephonyUtils.IS_DEBUGGABLE) {
@@ -3764,13 +3764,7 @@ public class DcTracker extends Handler {
            case DctConstants.EVENT_TRY_SETUP_DATA:
                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);
                }
                trySetupData(apnContext, requestType, null);
                break;
            case DctConstants.EVENT_CLEAN_UP_CONNECTION:
                if (DBG) log("EVENT_CLEAN_UP_CONNECTION");
+25 −20
Original line number Diff line number Diff line
@@ -185,8 +185,6 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                }
                case EVENT_DATA_HANDOVER_COMPLETED: {
                    Bundle bundle = msg.getData();
                    int requestType = bundle.getInt(DcTracker.DATA_COMPLETE_MSG_EXTRA_REQUEST_TYPE);
                    if (requestType == DcTracker.REQUEST_TYPE_HANDOVER) {
                    NetworkRequest nr = bundle.getParcelable(
                            DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST);
                    boolean success = bundle.getBoolean(
@@ -202,7 +200,6 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                    } else {
                        logl("Handover completed but cannot find handover entry!");
                    }
                    }
                    break;
                }
            }
@@ -214,12 +211,20 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        return mTransportManager.getCurrentTransport(apnType);
    }

    /**
     * Request network
     *
     * @param networkRequest Network request from clients
     * @param requestType The request type
     * @param transport Transport type
     * @param onHandoverCompleteMsg When request type is handover, this message will be sent when
     * handover is completed. For normal request, this should be null.
     */
    private void requestNetworkInternal(NetworkRequest networkRequest,
                                        @RequestNetworkType int requestType,
                                        int transport, Message onCompleteMsg) {
            @RequestNetworkType int requestType, int transport, Message onHandoverCompleteMsg) {
        if (mPhone.getDcTracker(transport) != null) {
            mPhone.getDcTracker(transport).requestNetwork(networkRequest, requestType,
                    onCompleteMsg);
                    onHandoverCompleteMsg);
        }
    }