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

Commit c71aee99 authored by Shuo Qian's avatar Shuo Qian Committed by Gerrit Code Review
Browse files

Merge "Add Emergency Call Routing field"

parents a147619a 92c4382d
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.telephony.ImsiEncryptionInfo;
import android.telephony.NetworkScanRequest;
import android.telephony.TelephonyManager;
import android.telephony.data.DataProfile;
import android.telephony.emergency.EmergencyNumber;

import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
import com.android.internal.telephony.dataconnection.TransportManager;
@@ -825,7 +826,7 @@ public interface CommandsInterface {
     * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
     * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
     */
    void dial(String address, boolean isEmergencyCall, int emergencyServiceCategories,
    void dial(String address, boolean isEmergencyCall, EmergencyNumber emergencyNumberInfo,
              int clirMode, Message result);

    /**
@@ -839,7 +840,7 @@ public interface CommandsInterface {
     * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
     * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
     */
    void dial(String address, boolean isEmergencyCall, int emergencyServiceCategories,
    void dial(String address, boolean isEmergencyCall, EmergencyNumber emergencyNumberInfo,
              int clirMode, UUSInfo uusInfo, Message result);

    /**
+28 −70
Original line number Diff line number Diff line
@@ -24,9 +24,10 @@ import android.telephony.DisconnectCause;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories;
import android.util.Log;

import com.android.internal.telephony.emergency.EmergencyNumberTracker;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -231,25 +232,10 @@ public abstract class Connection {
    private boolean mIsEmergencyCall;

    /**
     * The emergency service categories, only valid if {@link #isEmergencyCall()} returns
     * {@code true}
     *
     * If valid, the value is the bitwise-OR combination of the following constants:
     * <ol>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_POLICE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_AMBULANCE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MIEC} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_AIEC} </li>
     * </ol>
     *
     * Reference: 3gpp 23.167, Section 6 - Functional description;
     *            3gpp 22.101, Section 10 - Emergency Calls.
     * The emergency number information, only valid if {@link #isEmergencyCall} returns
     * {@code true}.
     */
    private int mEmergencyServiceCategories;
    private EmergencyNumber mEmergencyNumberInfo;

    /**
     * When {@code true}, the network has indicated that this is an emergency call.
@@ -468,63 +454,35 @@ public abstract class Connection {
    }

    /**
     * Sets whether this call is an emergency call or not.
     * Get the emergency number info. The value is valid only if {@link #isEmergencyCall()}
     * returns {@code true}.
     *
     * @param isEmergencyCall {@code true} if the call is an emergency call,
     *                        or {@code false} otherwise.
     * @return the emergency number info
     */
    public void setEmergencyCall(boolean isEmergencyCall) {
        mIsEmergencyCall = isEmergencyCall;
    public EmergencyNumber getEmergencyNumberInfo() {
        return mEmergencyNumberInfo;
    }


    /**
     * Set the emergency service categories. The set value is valid only if
     * {@link #getEmergencyServiceCategories()} returns {@code true}
     *
     * @return the emergency service categories,
     * Set the emergency numbe information if it is an emergency call.
     *
     * If valid, the value is the bitwise-OR combination of the following constants:
     * <ol>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_POLICE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_AMBULANCE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MIEC} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_AIEC} </li>
     * </ol>
     *
     * Reference: 3gpp 23.167, Section 6 - Functional description;
     *            3gpp 22.101, Section 10 - Emergency Calls.
     * @hide
     */
    public @EmergencyServiceCategories int getEmergencyServiceCategories() {
        return mEmergencyServiceCategories;
    public void setEmergencyCallInfo() {
        Call call = getCall();
        if (call != null) {
            Phone phone = call.getPhone();
            if (phone != null) {
                EmergencyNumberTracker tracker = phone.getEmergencyNumberTracker();
                if (tracker != null) {
                    EmergencyNumber num = tracker.getEmergencyNumber(mAddress);
                    if (num != null) {
                        mIsEmergencyCall = true;
                        mEmergencyNumberInfo = num;
                    }
                }
            }
        }

    /**
     * Set the emergency service categories. The set value is valid only if
     * {@link #getEmergencyServiceCategories()} returns {@code true}
     *
     * If valid, the value is the bitwise-OR combination of the following constants:
     * <ol>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_POLICE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_AMBULANCE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_MIEC} </li>
     * <li>{@link EmergencyNumber#EMERGENCY_SERVICE_CATEGORY_AIEC} </li>
     * </ol>
     *
     * Reference: 3gpp 23.167, Section 6 - Functional description;
     *            3gpp 22.101, Section 10 - Emergency Calls.
     */
    public void setEmergencyServiceCategories(
            @EmergencyServiceCategories int emergencyServiceCategories) {
        mEmergencyServiceCategories = emergencyServiceCategories;
    }

    /**
+4 −4
Original line number Diff line number Diff line
@@ -331,7 +331,7 @@ public class GsmCdmaCallTracker extends CallTracker {
            setMute(false);

            mCi.dial(mPendingMO.getAddress(), mPendingMO.isEmergencyCall(),
                    mPendingMO.getEmergencyServiceCategories(), clirMode, uusInfo,
                    mPendingMO.getEmergencyNumberInfo(), clirMode, uusInfo,
                    obtainCompleteMessage());
        }

@@ -448,7 +448,7 @@ public class GsmCdmaCallTracker extends CallTracker {
            // In Ecm mode, if another emergency call is dialed, Ecm mode will not exit.
            if(!isPhoneInEcmMode || (isPhoneInEcmMode && isEmergencyCall)) {
                mCi.dial(mPendingMO.getAddress(), mPendingMO.isEmergencyCall(),
                        mPendingMO.getEmergencyServiceCategories(), clirMode,
                        mPendingMO.getEmergencyNumberInfo(), clirMode,
                        obtainCompleteMessage());
            } else {
                mPhone.exitEmergencyCallbackMode();
@@ -1534,8 +1534,8 @@ public class GsmCdmaCallTracker extends CallTracker {
                    // no matter the result, we still do the same here
                    if (mPendingCallInEcm) {
                        mCi.dial(mPendingMO.getAddress(), mPendingMO.isEmergencyCall(),
                                mPendingMO.getEmergencyServiceCategories(), mPendingCallClirMode,
                                obtainCompleteMessage());
                                mPendingMO.getEmergencyNumberInfo(),
                                mPendingCallClirMode, obtainCompleteMessage());
                        mPendingCallInEcm = false;
                    }
                    mPhone.unsetOnEcbModeExitResponse(this);
+4 −36
Original line number Diff line number Diff line
@@ -29,9 +29,6 @@ import android.telephony.DisconnectCause;
import android.telephony.PhoneNumberUtils;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories;
import android.text.TextUtils;

import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
@@ -40,10 +37,6 @@ import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
import com.android.internal.telephony.uicc.UiccCardApplication;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * {@hide}
 */
@@ -140,8 +133,7 @@ public class GsmCdmaConnection extends Connection {
        mHandler = new MyHandler(mOwner.getLooper());

        mAddress = dc.number;
        setEmergencyCall(TelephonyManager.getDefault().isCurrentEmergencyNumber(mAddress));
        setEmergencyServiceCategories(fetchEmergencyServiceCategories());
        setEmergencyCallInfo();

        mIsIncoming = dc.isMT;
        mCreateTime = System.currentTimeMillis();
@@ -183,8 +175,9 @@ public class GsmCdmaConnection extends Connection {
        }

        mAddress = PhoneNumberUtils.extractNetworkPortionAlt(dialString);
        setEmergencyCall(isEmergencyCall);
        setEmergencyServiceCategories(fetchEmergencyServiceCategories());
        if (isEmergencyCall) {
            setEmergencyCallInfo();
        }

        mPostDialString = PhoneNumberUtils.extractPostDialPortion(dialString);

@@ -1131,31 +1124,6 @@ public class GsmCdmaConnection extends Connection {
        }
    }

    private @EmergencyServiceCategories int fetchEmergencyServiceCategories() {
        Map<Integer, List<EmergencyNumber>> emergencyNumberListInternal = new HashMap<>();
        for (Phone phone: PhoneFactory.getPhones()) {
            if (phone.getEmergencyNumberTracker() != null
                    && phone.getEmergencyNumberTracker().getEmergencyNumberList() != null) {
                emergencyNumberListInternal.put(
                        phone.getSubId(),
                        phone.getEmergencyNumberTracker().getEmergencyNumberList());
            }
        }
        if (emergencyNumberListInternal != null) {
            for (List<EmergencyNumber> emergencyNumberList
                    : emergencyNumberListInternal.values()) {
                if (emergencyNumberList != null) {
                    for (EmergencyNumber num : emergencyNumberList) {
                        if (num.getNumber().equals(mAddress)) {
                            return num.getEmergencyServiceCategoryBitmask();
                        }
                    }
                }
            }
        }
        return EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED;
    }

    private boolean isPhoneTypeGsm() {
        return mOwner.getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_GSM;
    }
+12 −0
Original line number Diff line number Diff line
@@ -3855,6 +3855,18 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return mDcTrackers.get(transportType);
    }

    /**
     * Get the HAL version.
     *
     * @return the current HalVersion
     */
    public HalVersion getHalVersion() {
        if (mCi != null && mCi instanceof RIL) {
            return ((RIL) mCi).getHalVersion();
        }
        return RIL.RADIO_HAL_VERSION_UNKNOWN;
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("Phone: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
Loading