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

Commit f5903a3e authored by Brad Ebinger's avatar Brad Ebinger Committed by Gerrit Code Review
Browse files

Merge "Emergency SMS over IMS support"

parents 478b77d3 8bafb165
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -16,8 +16,11 @@

package com.android.internal.telephony;

import android.content.Context;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.provider.Telephony.Sms.Intents;
import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.aidl.IImsSmsListener;
@@ -26,6 +29,8 @@ import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsSmsImplBase;
import android.telephony.ims.stub.ImsSmsImplBase.SendStatusResult;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
import android.util.Pair;

import com.android.ims.ImsException;
@@ -228,6 +233,50 @@ public class ImsSmsDispatcher extends SMSDispatcher {
        getImsManager().onSmsReady();
    }

    private boolean isLteService() {
        return ((mPhone.getServiceState().getRilVoiceRadioTechnology() ==
            ServiceState.RIL_RADIO_TECHNOLOGY_LTE) && (mPhone.getServiceState().
                getState() == ServiceState.STATE_IN_SERVICE));
    }

    private boolean isLimitedLteService() {
        return ((mPhone.getServiceState().getRilVoiceRadioTechnology() ==
            ServiceState.RIL_RADIO_TECHNOLOGY_LTE) && mPhone.getServiceState().isEmergencyOnly());
    }

    private boolean isEmergencySmsPossible() {
        return isLteService() || isLimitedLteService();
    }

    public boolean isEmergencySmsSupport(String destAddr) {
        PersistableBundle b;
        boolean eSmsCarrierSupport = false;
        if (!PhoneNumberUtils.isLocalEmergencyNumber(mContext, mPhone.getSubId(), destAddr)) {
            Rlog.e(TAG, "Emergency Sms is not supported for: " + destAddr);
            return false;
        }
        CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext()
                .getSystemService(Context.CARRIER_CONFIG_SERVICE);
        if (configManager == null) {
            Rlog.e(TAG, "configManager is null");
            return false;
        }
        b = configManager.getConfigForSubId(getSubId());
        if (b == null) {
            Rlog.e(TAG, "PersistableBundle is null");
            return false;
        }
        eSmsCarrierSupport = b.getBoolean(CarrierConfigManager.
                                                      KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL);
        boolean lteOrLimitedLte = isEmergencySmsPossible();
        Rlog.i(TAG, "isEmergencySmsSupport emergencySmsCarrierSupport: "
               + eSmsCarrierSupport + " destAddr: " + destAddr + " mIsImsServiceUp: "
               + mIsImsServiceUp + " lteOrLimitedLte: " + lteOrLimitedLte);

        return eSmsCarrierSupport && mIsImsServiceUp && lteOrLimitedLte;
    }


    public boolean isAvailable() {
        synchronized (mLock) {
            Rlog.d(TAG, "isAvailable: up=" + mIsImsServiceUp + ", reg= " + mIsRegistered
+1 −1
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ public class SmsDispatchersController extends Handler {
                            PendingIntent sentIntent, PendingIntent deliveryIntent, Uri messageUri,
                            String callingPkg, boolean persistMessage, int priority,
                            boolean expectMore, int validityPeriod) {
        if (mImsSmsDispatcher.isAvailable()) {
        if (mImsSmsDispatcher.isAvailable() || mImsSmsDispatcher.isEmergencySmsSupport(destAddr)) {
            mImsSmsDispatcher.sendText(destAddr, scAddr, text, sentIntent, deliveryIntent,
                    messageUri, callingPkg, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED,
                    false /*expectMore*/, SMS_MESSAGE_PERIOD_NOT_SPECIFIED);