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

Commit 8b84ad94 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Android (Google) Code Review
Browse files

Merge changes from topic "cross-sim"

* changes:
  Cross SIM calling carrier name
  Introduce IMS Cross SIM registration
parents 74068db9 3c3b7780
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION;
import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_SUCCESS;
import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED;
import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM;
import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN;

import static java.util.Arrays.copyOf;
@@ -356,7 +357,8 @@ public class PhoneSwitcher extends Handler {

        int imsRegTech = mImsRegTechProvider.get(mContext, phoneId);
        // If IMS is registered on IWLAN or cross SIM, return false.
        boolean isOnOriginalNetwork = imsRegTech != REGISTRATION_TECH_IWLAN;
        boolean isOnOriginalNetwork = (imsRegTech != REGISTRATION_TECH_IWLAN)
                && (imsRegTech != REGISTRATION_TECH_CROSS_SIM);
        if (!isOnOriginalNetwork) {
            log("IMS call on IWLAN or cross SIM. Call will be ignored for DDS switch");
        }
+53 −3
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager;
import android.telephony.VoiceSpecificRegistrationInfo;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.LocalLog;
@@ -90,6 +91,7 @@ import android.util.Pair;
import android.util.SparseArray;
import android.util.SparseBooleanArray;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.cdma.EriInfo;
@@ -2789,6 +2791,36 @@ public class ServiceStateTracker extends Handler {
            wfcFlightSpnFormat = wfcSpnFormats[flightModeIdx];
        }

        String crossSimSpnFormat = null;
        if (mPhone.getImsPhone() != null
                && (mPhone.getImsPhone() != null)
                && (mPhone.getImsPhone().getImsRegistrationTech()
                == ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM)) {
            // In Cros SIM Calling mode show SPN or PLMN + Cross SIM Calling
            //
            // 1) Show SPN + Cross SIM Calling If SIM has SPN and SPN display condition
            //    is satisfied or SPN override is enabled for this carrier
            //
            // 2) Show PLMN + Cross SIM Calling if there is no valid SPN in case 1
            PersistableBundle bundle = getCarrierConfig();
            int crossSimSpnFormatIdx =
                    bundle.getInt(CarrierConfigManager.KEY_CROSS_SIM_SPN_FORMAT_INT);
            boolean useRootLocale =
                    bundle.getBoolean(CarrierConfigManager.KEY_WFC_SPN_USE_ROOT_LOCALE);

            String[] crossSimSpnFormats = SubscriptionManager.getResourcesForSubId(
                    mPhone.getContext(),
                    mPhone.getSubId(), useRootLocale)
                    .getStringArray(R.array.crossSimSpnFormats);

            if (crossSimSpnFormatIdx < 0 || crossSimSpnFormatIdx >= crossSimSpnFormats.length) {
                loge("updateSpnDisplay: KEY_CROSS_SIM_SPN_FORMAT_INT out of bounds: "
                        + crossSimSpnFormatIdx);
                crossSimSpnFormatIdx = 0;
            }
            crossSimSpnFormat = crossSimSpnFormats[crossSimSpnFormatIdx];
        }

        if (mPhone.isPhoneTypeGsm()) {
            // The values of plmn/showPlmn change in different scenarios.
            // 1) No service but emergency call allowed -> expected
@@ -2856,9 +2888,27 @@ public class ServiceStateTracker extends Handler {
                    && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN)
                    == CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN);
            if (DBG) log("updateSpnDisplay: rawSpn = " + spn);

            if (!TextUtils.isEmpty(spn) && !TextUtils.isEmpty(wfcVoiceSpnFormat) &&
                    !TextUtils.isEmpty(wfcDataSpnFormat)) {
            if (!TextUtils.isEmpty(crossSimSpnFormat)) {
                if (!TextUtils.isEmpty(spn)) {
                    // Show SPN + Cross-SIM Calling If SIM has SPN and SPN display condition
                    // is satisfied or SPN override is enabled for this carrier.
                    String originalSpn = spn.trim();
                    spn = String.format(crossSimSpnFormat, originalSpn);
                    dataSpn = spn;
                    showSpn = true;
                    showPlmn = false;
                } else if (!TextUtils.isEmpty(plmn)) {
                    // Show PLMN + Cross-SIM Calling if there is no valid SPN in the above case
                    String originalPlmn = plmn.trim();
                    PersistableBundle config = getCarrierConfig();
                    if (mIccRecords != null && config.getBoolean(
                            CarrierConfigManager.KEY_WFC_CARRIER_NAME_OVERRIDE_BY_PNN_BOOL)) {
                        originalPlmn = mIccRecords.getPnnHomeName();
                    }
                    plmn = String.format(crossSimSpnFormat, originalPlmn);
                }
            } else if (!TextUtils.isEmpty(spn) && !TextUtils.isEmpty(wfcVoiceSpnFormat)
                    && !TextUtils.isEmpty(wfcDataSpnFormat)) {
                // Show SPN + Wi-Fi Calling If SIM has SPN and SPN display condition
                // is satisfied or SPN override is enabled for this carrier.

+51 −1
Original line number Diff line number Diff line
@@ -34,10 +34,13 @@ import android.content.res.Resources;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.SparseArray;

import com.android.internal.R;
import com.android.internal.telephony.GsmCdmaPhone;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.cdnr.EfData.EFSource;
@@ -377,6 +380,47 @@ public class CarrierDisplayNameResolver {
        return result;
    }

    private CarrierDisplayNameData getCarrierDisplayNameFromCrossSimCallingOverride(
            CarrierDisplayNameData rawCarrierDisplayNameData) {
        PersistableBundle config = getCarrierConfig();
        int crossSimSpnFormatIdx =
                config.getInt(CarrierConfigManager.KEY_CROSS_SIM_SPN_FORMAT_INT);
        boolean useRootLocale =
                config.getBoolean(CarrierConfigManager.KEY_WFC_SPN_USE_ROOT_LOCALE);

        String[] crossSimSpnFormats = SubscriptionManager.getResourcesForSubId(
                mPhone.getContext(),
                mPhone.getSubId(), useRootLocale)
                .getStringArray(R.array.crossSimSpnFormats);

        if (crossSimSpnFormatIdx < 0 || crossSimSpnFormatIdx >= crossSimSpnFormats.length) {
            Rlog.e(TAG, "updateSpnDisplay: KEY_CROSS_SIM_SPN_FORMAT_INT out of bounds: "
                    + crossSimSpnFormatIdx);
            crossSimSpnFormatIdx = 0;
        }
        String crossSimSpnFormat = crossSimSpnFormats[crossSimSpnFormatIdx];
        // Override the spn, data spn, plmn by Cross-SIM Calling
        List<PlmnNetworkName> efPnn = getEfPnn();
        String plmn = efPnn.isEmpty() ? "" : getPlmnNetworkName(efPnn.get(0));
        CarrierDisplayNameData result = rawCarrierDisplayNameData;
        String crossSimSpn = String.format(crossSimSpnFormat, rawCarrierDisplayNameData.getSpn());
        String crossSimPlmn = String.format(crossSimSpnFormat,
                TextUtils.isEmpty(plmn) ? rawCarrierDisplayNameData.getPlmn() : plmn);
        if (!TextUtils.isEmpty(crossSimSpn)) {
            result = new CarrierDisplayNameData.Builder()
                    .setSpn(crossSimSpn)
                    .setDataSpn(crossSimSpn)
                    .setShowSpn(true)
                    .build();
        } else if (!TextUtils.isEmpty(crossSimPlmn)) {
            result = new CarrierDisplayNameData.Builder()
                    .setPlmn(crossSimPlmn)
                    .setShowPlmn(true)
                    .build();
        }
        return result;
    }

    /**
     * Override the given carrier display name data {@code data} by out of service rule.
     * @param data the carrier display name data need to be overridden.
@@ -423,7 +467,13 @@ public class CarrierDisplayNameResolver {
    private void resolveCarrierDisplayName() {
        CarrierDisplayNameData data = getCarrierDisplayNameFromEf();
        if (DBG) Rlog.d(TAG, "CarrierName from EF: " + data);
        if (getCombinedRegState(getServiceState()) == ServiceState.STATE_IN_SERVICE) {
        if ((mPhone.getImsPhone() != null) && (mPhone.getImsPhone().getImsRegistrationTech()
                == ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM)) {
            data = getCarrierDisplayNameFromCrossSimCallingOverride(data);
            if (DBG) {
                Rlog.d(TAG, "CarrierName override by Cross-SIM Calling " + data);
            }
        } else if (getCombinedRegState(getServiceState()) == ServiceState.STATE_IN_SERVICE) {
            if (mPhone.isWifiCallingEnabled()) {
                data = getCarrierDisplayNameFromWifiCallingOverride(data);
                if (DBG) {
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ public class MmTelFeatureCompatAdapter extends MmTelFeature {
                TelephonyManager.NETWORK_TYPE_LTE);
        REG_TECH_TO_NET_TYPE.put(ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN,
                TelephonyManager.NETWORK_TYPE_IWLAN);
        REG_TECH_TO_NET_TYPE.put(ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM,
                TelephonyManager.NETWORK_TYPE_IWLAN);
    }

    // Feature Type for compatibility with old "feature" updates
+4 −1
Original line number Diff line number Diff line
@@ -4412,7 +4412,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {

    public boolean isVowifiEnabled() {
        return isImsCapabilityInCacheAvailable(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN)
                || isImsCapabilityInCacheAvailable(
                        MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                        ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM);
    }

    public boolean isVideoCallEnabled() {
Loading