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

Commit 7ad6f3b1 authored by Shuo Qian's avatar Shuo Qian Committed by android-build-merger
Browse files

Merge "Add Emergency Call Routing field"

am: c71aee99

Change-Id: Ie8f572179f0460e6e056085b44ee259e317d5238
parents f4acab68 c71aee99
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