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

Commit 4eb52a7f authored by Brad Ebinger's avatar Brad Ebinger Committed by android-build-merger
Browse files

Merge "Emergency SMS over IMS support" am: f5903a3e

am: da104089

Change-Id: I333ee3833da9e58fab8459179a26043285a13fab
parents 307b14d5 da104089
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);