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

Commit d5b2e344 authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Support query of IMS registrations status and transport type

Also add better logging to tag IMS by slot ID and fix a race
condition in GTS testing where a CarrierConfig change would cause
the test override in ImsResolver to be removed.

Bug: 122098288
Test: atest FrameworksTelephonyTests, atest GtsTelephonyTestCases
Merged-In: Ief3c75613bd889bad3b811fec0372422a6abf586
Change-Id: Ief3c75613bd889bad3b811fec0372422a6abf586
parent a546d924
Loading
Loading
Loading
Loading
+45 −24
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import android.telephony.PhoneNumberUtils;
import android.telephony.Rlog;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.aidl.IImsSmsListener;
import android.telephony.ims.aidl.IImsSmsListener;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase;
@@ -71,12 +72,12 @@ public class ImsSmsDispatcher extends SMSDispatcher {
     * Listen to the IMS service state change
     * Listen to the IMS service state change
     *
     *
     */
     */
    private android.telephony.ims.ImsMmTelManager.RegistrationCallback mRegistrationCallback =
    private RegistrationManager.RegistrationCallback mRegistrationCallback =
            new android.telephony.ims.ImsMmTelManager.RegistrationCallback() {
            new RegistrationManager.RegistrationCallback() {
                @Override
                @Override
                public void onRegistered(
                public void onRegistered(
                        @ImsRegistrationImplBase.ImsRegistrationTech int imsRadioTech) {
                        @ImsRegistrationImplBase.ImsRegistrationTech int imsRadioTech) {
                    Rlog.d(TAG, "onImsConnected imsRadioTech=" + imsRadioTech);
                    logd("onImsConnected imsRadioTech=" + imsRadioTech);
                    synchronized (mLock) {
                    synchronized (mLock) {
                        mIsRegistered = true;
                        mIsRegistered = true;
                    }
                    }
@@ -85,7 +86,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                @Override
                @Override
                public void onRegistering(
                public void onRegistering(
                        @ImsRegistrationImplBase.ImsRegistrationTech int imsRadioTech) {
                        @ImsRegistrationImplBase.ImsRegistrationTech int imsRadioTech) {
                    Rlog.d(TAG, "onImsProgressing imsRadioTech=" + imsRadioTech);
                    logd("onImsProgressing imsRadioTech=" + imsRadioTech);
                    synchronized (mLock) {
                    synchronized (mLock) {
                        mIsRegistered = false;
                        mIsRegistered = false;
                    }
                    }
@@ -93,7 +94,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {


                @Override
                @Override
                public void onUnregistered(ImsReasonInfo info) {
                public void onUnregistered(ImsReasonInfo info) {
                    Rlog.d(TAG, "onImsDisconnected imsReasonInfo=" + info);
                    logd("onImsDisconnected imsReasonInfo=" + info);
                    synchronized (mLock) {
                    synchronized (mLock) {
                        mIsRegistered = false;
                        mIsRegistered = false;
                    }
                    }
@@ -116,7 +117,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
        @Override
        @Override
        public void onSendSmsResult(int token, int messageRef, @SendStatusResult int status,
        public void onSendSmsResult(int token, int messageRef, @SendStatusResult int status,
                int reason, int networkReasonCode) {
                int reason, int networkReasonCode) {
            Rlog.d(TAG, "onSendSmsResult token=" + token + " messageRef=" + messageRef
            logd("onSendSmsResult token=" + token + " messageRef=" + messageRef
                    + " status=" + status + " reason=" + reason + " networkReasonCode="
                    + " status=" + status + " reason=" + reason + " networkReasonCode="
                    + networkReasonCode);
                    + networkReasonCode);
            // TODO integrate networkReasonCode into IMS SMS metrics.
            // TODO integrate networkReasonCode into IMS SMS metrics.
@@ -154,7 +155,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
        @Override
        @Override
        public void onSmsStatusReportReceived(int token, String format, byte[] pdu)
        public void onSmsStatusReportReceived(int token, String format, byte[] pdu)
                throws RemoteException {
                throws RemoteException {
            Rlog.d(TAG, "Status report received.");
            logd("Status report received.");
            android.telephony.SmsMessage message =
            android.telephony.SmsMessage message =
                    android.telephony.SmsMessage.createFromPdu(pdu, format);
                    android.telephony.SmsMessage.createFromPdu(pdu, format);
            if (message == null || message.mWrappedSmsMessage == null) {
            if (message == null || message.mWrappedSmsMessage == null) {
@@ -177,8 +178,8 @@ public class ImsSmsDispatcher extends SMSDispatcher {
            }
            }
            Pair<Boolean, Boolean> result = mSmsDispatchersController.handleSmsStatusReport(
            Pair<Boolean, Boolean> result = mSmsDispatchersController.handleSmsStatusReport(
                    tracker, format, pdu);
                    tracker, format, pdu);
            Rlog.d(TAG, "Status report handle result, success: " + result.first +
            logd("Status report handle result, success: " + result.first
                    "complete: " + result.second);
                    + " complete: " + result.second);
            try {
            try {
                getImsManager().acknowledgeSmsReport(
                getImsManager().acknowledgeSmsReport(
                        token,
                        token,
@@ -186,7 +187,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                        result.first ? ImsSmsImplBase.STATUS_REPORT_STATUS_OK
                        result.first ? ImsSmsImplBase.STATUS_REPORT_STATUS_OK
                                : ImsSmsImplBase.STATUS_REPORT_STATUS_ERROR);
                                : ImsSmsImplBase.STATUS_REPORT_STATUS_ERROR);
            } catch (ImsException e) {
            } catch (ImsException e) {
                Rlog.e(TAG, "Failed to acknowledgeSmsReport(). Error: "
                loge("Failed to acknowledgeSmsReport(). Error: "
                        + e.getMessage());
                        + e.getMessage());
            }
            }
            if (result.second) {
            if (result.second) {
@@ -196,11 +197,11 @@ public class ImsSmsDispatcher extends SMSDispatcher {


        @Override
        @Override
        public void onSmsReceived(int token, String format, byte[] pdu) {
        public void onSmsReceived(int token, String format, byte[] pdu) {
            Rlog.d(TAG, "SMS received.");
            logd("SMS received.");
            android.telephony.SmsMessage message =
            android.telephony.SmsMessage message =
                    android.telephony.SmsMessage.createFromPdu(pdu, format);
                    android.telephony.SmsMessage.createFromPdu(pdu, format);
            mSmsDispatchersController.injectSmsPdu(message, format, result -> {
            mSmsDispatchersController.injectSmsPdu(message, format, result -> {
                Rlog.d(TAG, "SMS handled result: " + result);
                logd("SMS handled result: " + result);
                int mappedResult;
                int mappedResult;
                switch (result) {
                switch (result) {
                    case Intents.RESULT_SMS_HANDLED:
                    case Intents.RESULT_SMS_HANDLED:
@@ -221,11 +222,11 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                        getImsManager().acknowledgeSms(token,
                        getImsManager().acknowledgeSms(token,
                                message.mWrappedSmsMessage.mMessageRef, mappedResult);
                                message.mWrappedSmsMessage.mMessageRef, mappedResult);
                    } else {
                    } else {
                        Rlog.w(TAG, "SMS Received with a PDU that could not be parsed.");
                        logw("SMS Received with a PDU that could not be parsed.");
                        getImsManager().acknowledgeSms(token, 0, mappedResult);
                        getImsManager().acknowledgeSms(token, 0, mappedResult);
                    }
                    }
                } catch (ImsException e) {
                } catch (ImsException e) {
                    Rlog.e(TAG, "Failed to acknowledgeSms(). Error: " + e.getMessage());
                    loge("Failed to acknowledgeSms(). Error: " + e.getMessage());
                }
                }
            }, true);
            }, true);
        }
        }
@@ -248,7 +249,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {


                    @Override
                    @Override
                    public void connectionReady(ImsManager manager) throws ImsException {
                    public void connectionReady(ImsManager manager) throws ImsException {
                        Rlog.d(TAG, "ImsManager: connection ready.");
                        logd("ImsManager: connection ready.");
                        synchronized (mLock) {
                        synchronized (mLock) {
                            setListeners();
                            setListeners();
                            mIsImsServiceUp = true;
                            mIsImsServiceUp = true;
@@ -257,7 +258,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {


                    @Override
                    @Override
                    public void connectionUnavailable() {
                    public void connectionUnavailable() {
                        Rlog.d(TAG, "ImsManager: connection unavailable.");
                        logd("ImsManager: connection unavailable.");
                        synchronized (mLock) {
                        synchronized (mLock) {
                            mIsImsServiceUp = false;
                            mIsImsServiceUp = false;
                        }
                        }
@@ -292,7 +293,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
        PersistableBundle b;
        PersistableBundle b;
        boolean eSmsCarrierSupport = false;
        boolean eSmsCarrierSupport = false;
        if (!PhoneNumberUtils.isLocalEmergencyNumber(mContext, mPhone.getSubId(), destAddr)) {
        if (!PhoneNumberUtils.isLocalEmergencyNumber(mContext, mPhone.getSubId(), destAddr)) {
            Rlog.e(TAG, "Emergency Sms is not supported for: " + Rlog.pii(TAG, destAddr));
            loge("Emergency Sms is not supported for: " + Rlog.pii(TAG, destAddr));
            return false;
            return false;
        }
        }


@@ -301,18 +302,18 @@ public class ImsSmsDispatcher extends SMSDispatcher {
            CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext()
            CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext()
                    .getSystemService(Context.CARRIER_CONFIG_SERVICE);
                    .getSystemService(Context.CARRIER_CONFIG_SERVICE);
            if (configManager == null) {
            if (configManager == null) {
                Rlog.e(TAG, "configManager is null");
                loge("configManager is null");
                return false;
                return false;
            }
            }
            b = configManager.getConfigForSubId(getSubId());
            b = configManager.getConfigForSubId(getSubId());
            if (b == null) {
            if (b == null) {
                Rlog.e(TAG, "PersistableBundle is null");
                loge("PersistableBundle is null");
                return false;
                return false;
            }
            }
            eSmsCarrierSupport = b.getBoolean(
            eSmsCarrierSupport = b.getBoolean(
                    CarrierConfigManager.KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL);
                    CarrierConfigManager.KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL);
            boolean lteOrLimitedLte = isEmergencySmsPossible();
            boolean lteOrLimitedLte = isEmergencySmsPossible();
            Rlog.i(TAG, "isEmergencySmsSupport emergencySmsCarrierSupport: "
            logi("isEmergencySmsSupport emergencySmsCarrierSupport: "
                    + eSmsCarrierSupport + " destAddr: " + Rlog.pii(TAG, destAddr)
                    + eSmsCarrierSupport + " destAddr: " + Rlog.pii(TAG, destAddr)
                    + " mIsImsServiceUp: " + mIsImsServiceUp + " lteOrLimitedLte: "
                    + " mIsImsServiceUp: " + mIsImsServiceUp + " lteOrLimitedLte: "
                    + lteOrLimitedLte);
                    + lteOrLimitedLte);
@@ -325,7 +326,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {


    public boolean isAvailable() {
    public boolean isAvailable() {
        synchronized (mLock) {
        synchronized (mLock) {
            Rlog.d(TAG, "isAvailable: up=" + mIsImsServiceUp + ", reg= " + mIsRegistered
            logd("isAvailable: up=" + mIsImsServiceUp + ", reg= " + mIsRegistered
                    + ", cap= " + mIsSmsCapable);
                    + ", cap= " + mIsSmsCapable);
            return mIsImsServiceUp && mIsRegistered && mIsSmsCapable;
            return mIsImsServiceUp && mIsRegistered && mIsSmsCapable;
        }
        }
@@ -336,7 +337,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
        try {
        try {
            return getImsManager().getSmsFormat();
            return getImsManager().getSmsFormat();
        } catch (ImsException e) {
        } catch (ImsException e) {
            Rlog.e(TAG, "Failed to get sms format. Error: " + e.getMessage());
            loge("Failed to get sms format. Error: " + e.getMessage());
            return SmsConstants.FORMAT_UNKNOWN;
            return SmsConstants.FORMAT_UNKNOWN;
        }
        }
    }
    }
@@ -370,7 +371,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {


    @Override
    @Override
    public void sendSms(SmsTracker tracker) {
    public void sendSms(SmsTracker tracker) {
        Rlog.d(TAG, "sendSms: "
        logd("sendSms: "
                + " mRetryCount=" + tracker.mRetryCount
                + " mRetryCount=" + tracker.mRetryCount
                + " mMessageRef=" + tracker.mMessageRef
                + " mMessageRef=" + tracker.mMessageRef
                + " SS=" + mPhone.getServiceState().getState());
                + " SS=" + mPhone.getServiceState().getState());
@@ -409,7 +410,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
            mMetrics.writeImsServiceSendSms(mPhone.getPhoneId(), format,
            mMetrics.writeImsServiceSendSms(mPhone.getPhoneId(), format,
                    ImsSmsImplBase.SEND_STATUS_OK);
                    ImsSmsImplBase.SEND_STATUS_OK);
        } catch (ImsException e) {
        } catch (ImsException e) {
            Rlog.e(TAG, "sendSms failed. Falling back to PSTN. Error: " + e.getMessage());
            loge("sendSms failed. Falling back to PSTN. Error: " + e.getMessage());
            fallbackToPstn(token, tracker);
            fallbackToPstn(token, tracker);
            mMetrics.writeImsServiceSendSms(mPhone.getPhoneId(), format,
            mMetrics.writeImsServiceSendSms(mPhone.getPhoneId(), format,
                    ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK);
                    ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK);
@@ -435,4 +436,24 @@ public class ImsSmsDispatcher extends SMSDispatcher {
    public IImsSmsListener getSmsListener() {
    public IImsSmsListener getSmsListener() {
        return mImsSmsListener;
        return mImsSmsListener;
    }
    }

    private void logd(String s) {
        Rlog.d(TAG + " [" + getPhoneId(mPhone) + "]", s);
    }

    private void logi(String s) {
        Rlog.i(TAG + " [" + getPhoneId(mPhone) + "]", s);
    }

    private void logw(String s) {
        Rlog.w(TAG + " [" + getPhoneId(mPhone) + "]", s);
    }

    private void loge(String s) {
        Rlog.e(TAG + " [" + getPhoneId(mPhone) + "]", s);
    }

    private static String getPhoneId(Phone phone) {
        return (phone != null) ? Integer.toString(phone.getPhoneId()) : "?";
    }
}
}
+27 −0
Original line number Original line Diff line number Diff line
@@ -60,6 +60,7 @@ import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.ApnSetting;
import android.telephony.data.ApnSetting.ApnType;
import android.telephony.data.ApnSetting.ApnType;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.LocalLog;
@@ -94,6 +95,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Locale;
import java.util.Set;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;


/**
/**
 * (<em>Not for SDK use</em>)
 * (<em>Not for SDK use</em>)
@@ -3655,6 +3657,31 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return regTech;
        return regTech;
    }
    }


    /**
     * Get the IMS MmTel Registration technology for this Phone, defined in
     * {@link ImsRegistrationImplBase}.
     */
    public void getImsRegistrationTech(Consumer<Integer> callback) {
        Phone imsPhone = mImsPhone;
        if (imsPhone != null) {
            imsPhone.getImsRegistrationTech(callback);
        } else {
            callback.accept(ImsRegistrationImplBase.REGISTRATION_TECH_NONE);
        }
    }

    /**
     * Asynchronously get the IMS MmTel Registration state for this Phone.
     */
    public void getImsRegistrationState(Consumer<Integer> callback) {
        Phone imsPhone = mImsPhone;
        if (imsPhone != null) {
            imsPhone.getImsRegistrationState(callback);
        }
        callback.accept(RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
    }


    private boolean getRoamingOverrideHelper(String prefix, String key) {
    private boolean getRoamingOverrideHelper(String prefix, String key) {
        String iccId = getIccSerialNumber();
        String iccId = getIccSerialNumber();
        if (TextUtils.isEmpty(iccId) || TextUtils.isEmpty(key)) {
        if (TextUtils.isEmpty(iccId) || TextUtils.isEmpty(key)) {
+14 −0
Original line number Original line Diff line number Diff line
@@ -495,6 +495,9 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                }
                }
            };
            };


    // Used during testing, overrides the carrier services while non-empty.
    // Array index corresponds to slot Id associated with the service package name.
    private String[] mOverrideServices;
    // Array index corresponds to slot Id associated with the service package name.
    // Array index corresponds to slot Id associated with the service package name.
    private String[] mCarrierServices;
    private String[] mCarrierServices;
    // List index corresponds to Slot Id, Maps ImsFeature.FEATURE->bound ImsServiceController
    // List index corresponds to Slot Id, Maps ImsFeature.FEATURE->bound ImsServiceController
@@ -522,6 +525,7 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(
        mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(
                Context.CARRIER_CONFIG_SERVICE);
                Context.CARRIER_CONFIG_SERVICE);
        mCarrierServices = new String[numSlots];
        mCarrierServices = new String[numSlots];
        mOverrideServices = new String[numSlots];
        mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new)
        mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new)
                .limit(mNumSlots).collect(Collectors.toList());
                .limit(mNumSlots).collect(Collectors.toList());


@@ -1127,9 +1131,11 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
        if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
            // not specified, replace package on all slots.
            // not specified, replace package on all slots.
            for (int i = 0; i < mNumSlots; i++) {
            for (int i = 0; i < mNumSlots; i++) {
                mOverrideServices[i] = newPackageName;
                updateBoundCarrierServices(i, newPackageName);
                updateBoundCarrierServices(i, newPackageName);
            }
            }
        } else {
        } else {
            mOverrideServices[slotId] = newPackageName;
            updateBoundCarrierServices(slotId, newPackageName);
            updateBoundCarrierServices(slotId, newPackageName);
        }
        }


@@ -1160,7 +1166,15 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
     */
     */
    private void updateBoundCarrierServices(int slotId, String newPackageName) {
    private void updateBoundCarrierServices(int slotId, String newPackageName) {
        if (slotId > SubscriptionManager.INVALID_SIM_SLOT_INDEX && slotId < mNumSlots) {
        if (slotId > SubscriptionManager.INVALID_SIM_SLOT_INDEX && slotId < mNumSlots) {
            String overridePackageName = mOverrideServices[slotId];
            String oldPackageName = mCarrierServices[slotId];
            String oldPackageName = mCarrierServices[slotId];
            if (!TextUtils.isEmpty(overridePackageName)) {
                // Do not allow carrier config changes to change the override package while it is
                // in effect.
                Log.i(TAG, "CarrierConfig change ignored for " + newPackageName + " while override"
                        + " is in effect for " + overridePackageName);
                newPackageName = overridePackageName;
            }
            mCarrierServices[slotId] = newPackageName;
            mCarrierServices[slotId] = newPackageName;
            if (!TextUtils.equals(newPackageName, oldPackageName)) {
            if (!TextUtils.equals(newPackageName, oldPackageName)) {
                Log.i(TAG, "Carrier Config updated, binding new ImsService");
                Log.i(TAG, "Carrier Config updated, binding new ImsService");
+23 −5
Original line number Original line Diff line number Diff line
@@ -73,6 +73,7 @@ import android.telephony.ims.ImsCallForwardInfo;
import android.telephony.ims.ImsCallProfile;
import android.telephony.ims.ImsCallProfile;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsSsInfo;
import android.telephony.ims.ImsSsInfo;
import android.telephony.ims.RegistrationManager;
import android.text.TextUtils;
import android.text.TextUtils;


import com.android.ims.FeatureConnector;
import com.android.ims.FeatureConnector;
@@ -110,6 +111,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.function.Consumer;


/**
/**
 * {@hide}
 * {@hide}
@@ -213,7 +215,7 @@ public class ImsPhone extends ImsPhoneBase {


    private final RegistrantList mSilentRedialRegistrants = new RegistrantList();
    private final RegistrantList mSilentRedialRegistrants = new RegistrantList();


    private boolean mImsRegistered = false;
    private int mImsRegistrationState = RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED;


    private boolean mRoaming = false;
    private boolean mRoaming = false;


@@ -1741,6 +1743,16 @@ public class ImsPhone extends ImsPhoneBase {
        return mCT.getImsRegistrationTech();
        return mCT.getImsRegistrationTech();
    }
    }


    @Override
    public void getImsRegistrationTech(Consumer<Integer> callback) {
        mCT.getImsRegistrationTech(callback);
    }

    @Override
    public void getImsRegistrationState(Consumer<Integer> callback) {
        callback.accept(mImsRegistrationState);
    }

    @Override
    @Override
    public Phone getDefaultPhone() {
    public Phone getDefaultPhone() {
        return mDefaultPhone;
        return mDefaultPhone;
@@ -1748,12 +1760,18 @@ public class ImsPhone extends ImsPhoneBase {


    @Override
    @Override
    public boolean isImsRegistered() {
    public boolean isImsRegistered() {
        return mImsRegistered;
        return mImsRegistrationState == RegistrationManager.REGISTRATION_STATE_REGISTERED;
    }
    }


    // Not used, but not removed due to UnsupportedAppUsage tag.
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    public void setImsRegistered(boolean value) {
    public void setImsRegistered(boolean isRegistered) {
        mImsRegistered = value;
        mImsRegistrationState = isRegistered ? RegistrationManager.REGISTRATION_STATE_REGISTERED :
                RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED;
    }

    public void setImsRegistrationState(@RegistrationManager.ImsRegistrationState int value) {
        mImsRegistrationState = value;
    }
    }


    @Override
    @Override
@@ -2025,7 +2043,7 @@ public class ImsPhone extends ImsPhoneBase {
        pw.println("  mIsPhoneInEcmState = " + isInEcm());
        pw.println("  mIsPhoneInEcmState = " + isInEcm());
        pw.println("  mEcmExitRespRegistrant = " + mEcmExitRespRegistrant);
        pw.println("  mEcmExitRespRegistrant = " + mEcmExitRespRegistrant);
        pw.println("  mSilentRedialRegistrants = " + mSilentRedialRegistrants);
        pw.println("  mSilentRedialRegistrants = " + mSilentRedialRegistrants);
        pw.println("  mImsRegistered = " + mImsRegistered);
        pw.println("  mImsRegistrationState = " + mImsRegistrationState);
        pw.println("  mRoaming = " + mRoaming);
        pw.println("  mRoaming = " + mRoaming);
        pw.println("  mSsnRegistrants = " + mSsnRegistrants);
        pw.println("  mSsnRegistrants = " + mSsnRegistrants);
        pw.flush();
        pw.flush();
+26 −6
Original line number Original line Diff line number Diff line
@@ -65,6 +65,7 @@ import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsStreamMediaProfile;
import android.telephony.ims.ImsStreamMediaProfile;
import android.telephony.ims.ImsSuppServiceNotification;
import android.telephony.ims.ImsSuppServiceNotification;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.feature.ImsFeature;
import android.telephony.ims.feature.ImsFeature;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase;
@@ -125,6 +126,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


/**
/**
@@ -3149,8 +3151,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        }
        }
    };
    };


    private final ImsMmTelManager.RegistrationCallback mImsRegistrationCallback =
    private final RegistrationManager.RegistrationCallback mImsRegistrationCallback =
            new ImsMmTelManager.RegistrationCallback() {
            new RegistrationManager.RegistrationCallback() {


                @Override
                @Override
                public void onRegistered(int imsRadioTech) {
                public void onRegistered(int imsRadioTech) {
@@ -3161,7 +3163,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                    mRegLocalLog.log("onImsConnected imsRadioTech="
                    mRegLocalLog.log("onImsConnected imsRadioTech="
                            + AccessNetworkConstants.transportTypeToString(imsRadioTech));
                            + AccessNetworkConstants.transportTypeToString(imsRadioTech));
                    mPhone.setServiceState(ServiceState.STATE_IN_SERVICE);
                    mPhone.setServiceState(ServiceState.STATE_IN_SERVICE);
                    mPhone.setImsRegistered(true);
                    mPhone.setImsRegistrationState(
                            RegistrationManager.REGISTRATION_STATE_REGISTERED);
                    mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(),
                    mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(),
                            ImsConnectionState.State.CONNECTED, null);
                            ImsConnectionState.State.CONNECTED, null);
                }
                }
@@ -3175,7 +3178,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                    mRegLocalLog.log("onImsProgressing imsRadioTech="
                    mRegLocalLog.log("onImsProgressing imsRadioTech="
                            + AccessNetworkConstants.transportTypeToString(imsRadioTech));
                            + AccessNetworkConstants.transportTypeToString(imsRadioTech));
                    mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
                    mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
                    mPhone.setImsRegistered(false);
                    mPhone.setImsRegistrationState(
                            RegistrationManager.REGISTRATION_STATE_REGISTERING);
                    mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(),
                    mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(),
                            ImsConnectionState.State.PROGRESSING, null);
                            ImsConnectionState.State.PROGRESSING, null);
                }
                }
@@ -3185,7 +3189,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                    if (DBG) log("onImsDisconnected imsReasonInfo=" + imsReasonInfo);
                    if (DBG) log("onImsDisconnected imsReasonInfo=" + imsReasonInfo);
                    mRegLocalLog.log("onImsDisconnected imsRadioTech=" + imsReasonInfo);
                    mRegLocalLog.log("onImsDisconnected imsRadioTech=" + imsReasonInfo);
                    mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
                    mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
                    mPhone.setImsRegistered(false);
                    mPhone.setImsRegistrationState(
                            RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
                    mPhone.processDisconnectReason(imsReasonInfo);
                    mPhone.processDisconnectReason(imsReasonInfo);
                    mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(),
                    mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(),
                            ImsConnectionState.State.DISCONNECTED, imsReasonInfo);
                            ImsConnectionState.State.DISCONNECTED, imsReasonInfo);
@@ -3754,6 +3759,17 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        return ImsRegistrationImplBase.REGISTRATION_TECH_NONE;
        return ImsRegistrationImplBase.REGISTRATION_TECH_NONE;
    }
    }


    /**
     * Asynchronously gets the IMS registration technology for MMTEL.
     */
    public void getImsRegistrationTech(Consumer<Integer> callback) {
        if (mImsManager != null) {
            mImsManager.getRegistrationTech(callback);
        } else {
            callback.accept(ImsRegistrationImplBase.REGISTRATION_TECH_NONE);
        }
    }

    private void retryGetImsService() {
    private void retryGetImsService() {
        // The binder connection is already up. Do not try to get it again.
        // The binder connection is already up. Do not try to get it again.
        if (mImsManager.isServiceAvailable()) {
        if (mImsManager.isServiceAvailable()) {
@@ -4145,7 +4161,11 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        log("Resetting Capabilities...");
        log("Resetting Capabilities...");
        boolean tmpIsVideoCallEnabled = isVideoCallEnabled();
        boolean tmpIsVideoCallEnabled = isVideoCallEnabled();
        mMmTelCapabilities = new MmTelFeature.MmTelCapabilities();
        mMmTelCapabilities = new MmTelFeature.MmTelCapabilities();

        mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
        mPhone.setImsRegistrationState(
                RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
        mPhone.processDisconnectReason(new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN,
                ImsReasonInfo.CODE_UNSPECIFIED));
        boolean isVideoEnabled = isVideoCallEnabled();
        boolean isVideoEnabled = isVideoCallEnabled();
        if (tmpIsVideoCallEnabled != isVideoEnabled) {
        if (tmpIsVideoCallEnabled != isVideoEnabled) {
            mPhone.notifyForVideoCapabilityChanged(isVideoEnabled);
            mPhone.notifyForVideoCapabilityChanged(isVideoEnabled);
Loading