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

Commit d3971bdd authored by Hunsuk Choi's avatar Hunsuk Choi Committed by Android (Google) Code Review
Browse files

Merge "Update RIL for Emergency Call domain selection HAL API changes."

parents ce13b20a 2f236a6a
Loading
Loading
Loading
Loading
+46 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CarrierRestrictionRules;
import android.telephony.ClientRequestStats;
import android.telephony.DomainSelectionService;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.NetworkScanRequest;
import android.telephony.RadioAccessSpecifier;
@@ -41,6 +42,7 @@ import android.telephony.data.TrafficDescriptor;
import android.telephony.emergency.EmergencyNumber;

import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
import com.android.internal.telephony.emergency.EmergencyConstants;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState;
import com.android.internal.telephony.uicc.IccCardStatus;
@@ -2821,20 +2823,60 @@ public interface CommandsInterface {
    default void getUsageSetting(Message result) {}

    /**
     * Register for Emergency network scan result.
     * Sets the emergency mode.
     *
     * @param emcMode Defines the radio emergency mode type.
     * @param result Callback message containing the success or failure status.
     */
    default void setEmergencyMode(@EmergencyConstants.EmergencyMode int emcMode,
            @Nullable Message result) {}

    /**
     * Triggers an emergency network scan.
     *
     * @param accessNetwork Contains the list of access network types to be prioritized
     *        during emergency scan. The 1st entry has the highest priority.
     * @param scanType Indicates the type of scans to be performed i.e. limited scan,
     *        full service scan or both.
     * @param result Callback message containing the success or failure status.
     */
    default void triggerEmergencyNetworkScan(
            @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork,
            @DomainSelectionService.EmergencyScanType int scanType, @Nullable Message result) {}

    /**
     * Cancels ongoing emergency network scan.
     *
     * @param resetScan Indicates how the next {@link #triggerEmergencyNetworkScan} should work.
     *        If {@code true}, then the modem shall start the new scan from the beginning,
     *        otherwise the modem shall resume from the last search.
     * @param result Callback message containing the success or failure status.
     */
    default void cancelEmergencyNetworkScan(boolean resetScan, @Nullable Message result) {}

    /**
     * Exits ongoing emergency mode.
     *
     * @param result Callback message containing the success or failure status.
     */
    default void exitEmergencyMode(@Nullable Message result) {}

    /**
     * Registers for emergency network scan result.
     *
     * @param h Handler for notification message.
     * @param what User-defined message code.
     * @param obj User object.
     */
    default void registerForEmergencyNetworkScan(Handler h, int what, Object obj) {}
    default void registerForEmergencyNetworkScan(@NonNull Handler h,
            int what, @Nullable Object obj) {}

    /**
     * Unregister for Emergency network scan result.
     * Unregisters for emergency network scan result.
     *
     * @param h Handler to be removed from the registrant list.
     */
    default void unregisterForEmergencyNetworkScan(Handler h) {}
    default void unregisterForEmergencyNetworkScan(@NonNull Handler h) {}

    /**
     * Provides a list of SRVCC call information to radio
+5 −2
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.telephony.AnomalyReporter;
import android.telephony.BarringInfo;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
import android.telephony.EmergencyRegResult;
import android.telephony.LinkCapacityEstimate;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PhysicalChannelConfig;
@@ -390,12 +391,14 @@ public class NetworkIndication extends IRadioNetworkIndication.Stub {
            android.hardware.radio.network.EmergencyRegResult result) {
        mRil.processIndication(RIL.NETWORK_SERVICE, indicationType);

        EmergencyRegResult response = RILUtils.convertHalEmergencyRegResult(result);

        if (mRil.isLogOrTrace()) {
            mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT, result);
            mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT, response);
        }

        mRil.mEmergencyNetworkScanRegistrants.notifyRegistrants(
                new AsyncResult(null, result, null));
                new AsyncResult(null, response, null));
    }

    @Override
+4 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.hardware.radio.network.IRadioNetworkResponse;
import android.os.AsyncResult;
import android.telephony.BarringInfo;
import android.telephony.CellInfo;
import android.telephony.EmergencyRegResult;
import android.telephony.LinkCapacityEstimate;
import android.telephony.RadioAccessSpecifier;
import android.telephony.SignalStrength;
@@ -445,10 +446,11 @@ public class NetworkResponse extends IRadioNetworkResponse.Stub {
        RILRequest rr = mRil.processResponse(RIL.NETWORK_SERVICE, responseInfo);

        if (rr != null) {
            EmergencyRegResult response = RILUtils.convertHalEmergencyRegResult(regState);
            if (responseInfo.error == RadioError.NONE) {
                RadioResponse.sendMessageResponse(rr.mResult, regState);
                RadioResponse.sendMessageResponse(rr.mResult, response);
            }
            mRil.processResponseDone(rr, responseInfo, regState);
            mRil.processResponseDone(rr, responseInfo, response);
        }
    }

+68 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.telephony.CarrierRestrictionRules;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
import android.telephony.ClientRequestStats;
import android.telephony.DomainSelectionService;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.LinkCapacityEstimate;
import android.telephony.NetworkRegistrationInfo;
@@ -77,6 +78,7 @@ import com.android.internal.telephony.data.AccessNetworksManager;
import com.android.internal.telephony.data.DataNetworkController;
import com.android.internal.telephony.data.DataSettingsManager;
import com.android.internal.telephony.data.LinkBandwidthEstimator;
import com.android.internal.telephony.emergency.EmergencyConstants;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
@@ -4895,6 +4897,72 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        mCi.triggerEpsFallback(reason, response);
    }

    /**
     * Sets the emergency mode
     *
     * @param emcMode The radio emergency mode type.
     * @param result Callback message.
     */
    public void setEmergencyMode(@EmergencyConstants.EmergencyMode int emcMode,
            @Nullable Message result) {
        mCi.setEmergencyMode(emcMode, result);
    }

    /**
     * Triggers an emergency network scan.
     *
     * @param accessNetwork Contains the list of access network types to be prioritized
     *        during emergency scan. The 1st entry has the highest priority.
     * @param scanType Indicates the type of scans to be performed i.e. limited scan,
     *        full service scan or any scan.
     * @param result Callback message.
     */
    public void triggerEmergencyNetworkScan(
            @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork,
            @DomainSelectionService.EmergencyScanType int scanType, @Nullable Message result) {
        mCi.triggerEmergencyNetworkScan(accessNetwork, scanType, result);
    }

    /**
     * Cancels ongoing emergency network scan
     * @param resetScan Indicates how the next {@link #triggerEmergencyNetworkScan} should work.
     *        If {@code true}, then the modem shall start the new scan from the beginning,
     *        otherwise the modem shall resume from the last search.
     * @param result Callback message.
     */
    public void cancelEmergencyNetworkScan(boolean resetScan, @Nullable Message result) {
        mCi.cancelEmergencyNetworkScan(resetScan, result);
    }

    /**
     * Exits ongoing emergency mode
     * @param result Callback message.
     */
    public void exitEmergencyMode(@Nullable Message result) {
        mCi.exitEmergencyMode(result);
    }

    /**
     * Registers for emergency network scan result.
     *
     * @param h Handler for notification message.
     * @param what User-defined message code.
     * @param obj User object.
     */
    public void registerForEmergencyNetworkScan(@NonNull Handler h,
            int what, @Nullable Object obj) {
        mCi.registerForEmergencyNetworkScan(h, what, obj);
    }

    /**
     * Unregisters for emergency network scan result.
     *
     * @param h Handler to be removed from the registrant list.
     */
    public void unregisterForEmergencyNetworkScan(@NonNull Handler h) {
        mCi.unregisterForEmergencyNetworkScan(h);
    }

    /**
     * @return Telephony tester instance.
     */
+136 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.os.Trace;
import android.os.WorkSource;
import android.provider.Settings;
import android.sysprop.TelephonyProperties;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CarrierRestrictionRules;
import android.telephony.CellInfo;
@@ -55,6 +56,7 @@ import android.telephony.CellSignalStrengthNr;
import android.telephony.CellSignalStrengthTdscdma;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.ClientRequestStats;
import android.telephony.DomainSelectionService;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.ModemActivityInfo;
import android.telephony.NeighboringCellInfo;
@@ -78,6 +80,7 @@ import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.cdma.CdmaInformationRecords;
import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
import com.android.internal.telephony.emergency.EmergencyConstants;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
import com.android.internal.telephony.metrics.ModemRestartStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
@@ -5305,6 +5308,139 @@ public class RIL extends BaseCommands implements CommandsInterface {
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setEmergencyMode(int emcMode, Message result) {
        RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result);
        if (networkProxy.isEmpty()) return;
        if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) {
            RILRequest rr = obtainRequest(RIL_REQUEST_SET_EMERGENCY_MODE, result,
                    mRILDefaultWorkSource);

            if (RILJ_LOGD) {
                riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)
                        + " mode=" + EmergencyConstants.emergencyModeToString(emcMode));
            }

            try {
                networkProxy.setEmergencyMode(rr.mSerial, emcMode);
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(NETWORK_SERVICE, "setEmergencyMode", e);
            }
        } else {
            if (RILJ_LOGD) {
                Rlog.d(RILJ_LOG_TAG, "setEmergencyMode: REQUEST_NOT_SUPPORTED");
            }
            if (result != null) {
                AsyncResult.forMessage(result, null,
                        CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
                result.sendToTarget();
            }
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void triggerEmergencyNetworkScan(
            @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork,
            @DomainSelectionService.EmergencyScanType int scanType, Message result) {
        RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result);
        if (networkProxy.isEmpty()) return;
        if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) {
            RILRequest rr = obtainRequest(RIL_REQUEST_TRIGGER_EMERGENCY_NETWORK_SCAN, result,
                    mRILDefaultWorkSource);

            if (RILJ_LOGD) {
                riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest));
            }

            try {
                networkProxy.triggerEmergencyNetworkScan(rr.mSerial,
                        RILUtils.convertEmergencyNetworkScanTrigger(accessNetwork, scanType));
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(NETWORK_SERVICE, "triggerEmergencyNetworkScan", e);
            }
        } else {
            if (RILJ_LOGD) {
                Rlog.d(RILJ_LOG_TAG, "triggerEmergencyNetworkScan: REQUEST_NOT_SUPPORTED");
            }
            if (result != null) {
                AsyncResult.forMessage(result, null,
                        CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
                result.sendToTarget();
            }
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void cancelEmergencyNetworkScan(boolean resetScan, Message result) {
        RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result);
        if (networkProxy.isEmpty()) return;
        if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) {
            RILRequest rr = obtainRequest(RIL_REQUEST_CANCEL_EMERGENCY_NETWORK_SCAN, result,
                    mRILDefaultWorkSource);

            if (RILJ_LOGD) {
                riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)
                        + " resetScan=" + resetScan);
            }

            try {
                networkProxy.cancelEmergencyNetworkScan(rr.mSerial, resetScan);
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(NETWORK_SERVICE, "cancelEmergencyNetworkScan", e);
            }
        } else {
            if (RILJ_LOGD) {
                Rlog.d(RILJ_LOG_TAG, "cancelEmergencyNetworkScan: REQUEST_NOT_SUPPORTED");
            }
            if (result != null) {
                AsyncResult.forMessage(result, null,
                        CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
                result.sendToTarget();
            }
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void exitEmergencyMode(Message result) {
        RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result);
        if (networkProxy.isEmpty()) return;
        if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) {
            RILRequest rr = obtainRequest(RIL_REQUEST_EXIT_EMERGENCY_MODE, result,
                    mRILDefaultWorkSource);

            if (RILJ_LOGD) {
                riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest));
            }

            try {
                networkProxy.exitEmergencyMode(rr.mSerial);
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(NETWORK_SERVICE, "exitEmergencyMode", e);
            }
        } else {
            if (RILJ_LOGD) {
                Rlog.d(RILJ_LOG_TAG, "exitEmergencyMode: REQUEST_NOT_SUPPORTED");
            }
            if (result != null) {
                AsyncResult.forMessage(result, null,
                        CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
                result.sendToTarget();
            }
        }
    }

    //***** Private Methods
    /**
     * This is a helper function to be called when an indication callback is called for any radio
Loading