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

Commit 6f3d9a35 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6586393 from 5b8ffca4 to rvc-release

Change-Id: I66bfeeae35d12917495ad6033ffd48ff4ee542b9
parents 6db47b2d 5b8ffca4
Loading
Loading
Loading
Loading
+47 −1
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager.NetworkTypeBitMask;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.NotificationChannelController;
@@ -205,8 +207,52 @@ public class CarrierServiceStateTracker extends Handler {
            Rlog.e(LOG_TAG, "Unable to get PREFERRED_NETWORK_MODE.");
            return true;
        }

        if (isNrSupported()) {
            return (preferredNetworkSetting
                    == RILConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
        } else {
            return (preferredNetworkSetting == RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
        }
    }

    private boolean isNrSupported() {
        Context context = mPhone.getContext();
        TelephonyManager tm = ((TelephonyManager) context.getSystemService(
                Context.TELEPHONY_SERVICE)).createForSubscriptionId(mPhone.getSubId());

        boolean isCarrierConfigEnabled = isCarrierConfigEnableNr(context);
        boolean isRadioAccessFamilySupported = checkSupportedBitmask(
                tm.getSupportedRadioAccessFamily(), TelephonyManager.NETWORK_TYPE_BITMASK_NR);
        boolean isNrNetworkTypeAllowed = checkSupportedBitmask(
                tm.getAllowedNetworkTypes(), TelephonyManager.NETWORK_TYPE_BITMASK_NR);

        Rlog.i(LOG_TAG, "isNrSupported: " + " carrierConfigEnabled: " + isCarrierConfigEnabled
                + ", AccessFamilySupported: " + isRadioAccessFamilySupported
                + ", isNrNetworkTypeAllowed: " + isNrNetworkTypeAllowed);

        return (isCarrierConfigEnabled && isRadioAccessFamilySupported && isNrNetworkTypeAllowed);
    }

    private boolean isCarrierConfigEnableNr(Context context) {
        CarrierConfigManager carrierConfigManager = (CarrierConfigManager)
                context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
        if (carrierConfigManager == null) {
            Rlog.e(LOG_TAG, "isCarrierConfigEnableNr: CarrierConfigManager is null");
            return false;
        }
        PersistableBundle config = carrierConfigManager.getConfigForSubId(mPhone.getSubId());
        if (config == null) {
            Rlog.e(LOG_TAG, "isCarrierConfigEnableNr: Cannot get config " + mPhone.getSubId());
            return false;
        }
        return config.getBoolean(CarrierConfigManager.KEY_NR_ENABLED_BOOL);
    }

    private boolean checkSupportedBitmask(@NetworkTypeBitMask long supportedBitmask,
            @NetworkTypeBitMask long targetBitmask) {
        return (targetBitmask & supportedBitmask) == targetBitmask;
    }

    private void handleConfigChanges() {
        for (Map.Entry<Integer, NotificationType> entry : mNotificationTypeMap.entrySet()) {
+5 −5
Original line number Diff line number Diff line
@@ -854,15 +854,15 @@ public class DeviceStateMonitor extends Handler {
        };

        /**
         * List of default 10*dB RSSNR thresholds for EUTRAN {@link AccessNetworkType}.
         * List of default dB RSSNR thresholds for EUTRAN {@link AccessNetworkType}.
         *
         * These thresholds are taken from the LTE RSSNR defaults in {@link CarrierConfigManager}.
         */
        public static final int[] EUTRAN_RSSNR = new int[] {
            -30,  /* SIGNAL_STRENGTH_POOR */
            10,   /* SIGNAL_STRENGTH_MODERATE */
            45,   /* SIGNAL_STRENGTH_GOOD */
            130   /* SIGNAL_STRENGTH_GREAT */
            -3,  /* SIGNAL_STRENGTH_POOR */
            1,   /* SIGNAL_STRENGTH_MODERATE */
            5,   /* SIGNAL_STRENGTH_GOOD */
            13   /* SIGNAL_STRENGTH_GREAT */
        };

        /**
+26 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ import android.hardware.radio.V1_5.IRadioIndication;
import android.os.AsyncResult;
import android.sysprop.TelephonyProperties;
import android.telephony.Annotation.RadioPowerState;
import android.telephony.AnomalyReporter;
import android.telephony.BarringInfo;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
@@ -100,6 +101,7 @@ import android.telephony.SmsMessage;
import android.telephony.TelephonyManager;
import android.telephony.data.DataCallResponse;
import android.telephony.emergency.EmergencyNumber;
import android.text.TextUtils;

import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
import com.android.internal.telephony.cdma.CdmaInformationRecords;
@@ -112,6 +114,7 @@ import com.android.internal.telephony.uicc.IccUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class RadioIndication extends IRadioIndication.Stub {
    RIL mRil;
@@ -1007,6 +1010,20 @@ public class RadioIndication extends IRadioIndication.Stub {
            int causeCode, int additionalCauseCode) {
        mRil.processIndication(indicationType);

        if (cellIdentity == null
                || TextUtils.isEmpty(chosenPlmn)
                || (domain & NetworkRegistrationInfo.DOMAIN_CS_PS) == 0
                || (domain & ~NetworkRegistrationInfo.DOMAIN_CS_PS) != 0
                || causeCode < 0 || additionalCauseCode < 0
                || (causeCode == Integer.MAX_VALUE && additionalCauseCode == Integer.MAX_VALUE)) {
            AnomalyReporter.reportAnomaly(
                    UUID.fromString("f16e5703-6105-4341-9eb3-e68189156eb4"),
                            "Invalid registrationFailed indication");

            mRil.riljLoge("Invalid registrationFailed indication");
            return;
        }

        CellIdentity ci = CellIdentity.create(cellIdentity);

        mRil.mRegistrationFailedRegistrant.notifyRegistrant(
@@ -1029,6 +1046,15 @@ public class RadioIndication extends IRadioIndication.Stub {
            ArrayList<android.hardware.radio.V1_5.BarringInfo> barringInfos) {
        mRil.processIndication(indicationType);

        if (cellIdentity == null || barringInfos == null) {
            AnomalyReporter.reportAnomaly(
                    UUID.fromString("645b16bb-c930-4c1c-9c5d-568696542e05"),
                            "Invalid barringInfoChanged indication");

            mRil.riljLoge("Invalid barringInfoChanged indication");
            return;
        }

        CellIdentity ci = CellIdentity.create(cellIdentity);
        BarringInfo cbi = BarringInfo.create(cellIdentity, barringInfos);

+9 −3
Original line number Diff line number Diff line
@@ -1067,7 +1067,12 @@ public class SubscriptionController extends ISub.Stub {
                selection += " OR " + SubscriptionManager.IS_EMBEDDED + "=1";
            }

            List<String> iccIds = getIccIdsOfInsertedSims();
            // Available eSIM profiles are reported by EuiccManager. However for physical SIMs if
            // they are in inactive slot or programmatically disabled, they are still considered
            // available. In this case we get their iccid from slot info and include their
            // subscriptionInfos.
            List<String> iccIds = getIccIdsOfInsertedPhysicalSims();

            if (!iccIds.isEmpty()) {
                selection += " OR ("  + getSelectionForIccIdList(iccIds.toArray(new String[0]))
                        + ")";
@@ -1089,7 +1094,7 @@ public class SubscriptionController extends ISub.Stub {
        }
    }

    private List<String> getIccIdsOfInsertedSims() {
    private List<String> getIccIdsOfInsertedPhysicalSims() {
        List<String> ret = new ArrayList<>();
        UiccSlot[] uiccSlots = UiccController.getInstance().getUiccSlots();
        if (uiccSlots == null) return ret;
@@ -1097,8 +1102,9 @@ public class SubscriptionController extends ISub.Stub {
        for (UiccSlot uiccSlot : uiccSlots) {
            if (uiccSlot != null && uiccSlot.getCardState() != null
                    && uiccSlot.getCardState().isCardPresent()
                    && !uiccSlot.isEuicc()
                    && !TextUtils.isEmpty(uiccSlot.getIccId())) {
                ret.add(uiccSlot.getIccId());
                ret.add(IccUtils.stripTrailingFs(uiccSlot.getIccId()));
            }
        }

+39 −39
Original line number Diff line number Diff line
@@ -57,10 +57,10 @@ public class SignalStrengthTest {
            -12 }; // SIGNAL_STRENGTH_GREAT

    private static final int[] DEFAULT_LTE_RSSNR_THRESHOLDS = {
            -30,   // SIGNAL_STRENGTH_POOR
            10,    // SIGNAL_STRENGTH_MODERATE
            45,    // SIGNAL_STRENGTH_GOOD
            130 }; // SIGNAL_STRENGTH_GREAT
            -3,   // SIGNAL_STRENGTH_POOR
            1,    // SIGNAL_STRENGTH_MODERATE
            5,    // SIGNAL_STRENGTH_GOOD
            13 }; // SIGNAL_STRENGTH_GREAT

    private static final int[] DEFAULT_5G_NR_SSRSRP_THRESHOLDS = {
            -125,  // SIGNAL_STRENGTH_POOR
@@ -244,20 +244,20 @@ public class SignalStrengthTest {
        ss = createSignalStrengthLteReportRsrq(-60, -35);
        assertEquals(SignalStrength.INVALID, ss.getLteRsrq());

        // Input value of RSSNR: 301[dB]
        ss = createSignalStrengthLteReportRssnr(-60, 301);
        // Input value of RSSNR: 31[dB]
        ss = createSignalStrengthLteReportRssnr(-60, 31);
        assertEquals(SignalStrength.INVALID, ss.getLteRssnr());

        // Input value of RSSNR: 300[dB]
        ss = createSignalStrengthLteReportRssnr(-60, 300);
        assertEquals(300, ss.getLteRssnr());
        // Input value of RSSNR: 30[dB]
        ss = createSignalStrengthLteReportRssnr(-60, 30);
        assertEquals(30, ss.getLteRssnr());

        // Input value of RSSNR: -200[dB]
        ss = createSignalStrengthLteReportRssnr(60, -200);
        assertEquals(-200, ss.getLteRssnr());
        // Input value of RSSNR: -20[dB]
        ss = createSignalStrengthLteReportRssnr(60, -20);
        assertEquals(-20, ss.getLteRssnr());

        // Input value of RSSNR: -201[dB]
        ss = createSignalStrengthLteReportRssnr(60, -201);
        // Input value of RSSNR: -21[dB]
        ss = createSignalStrengthLteReportRssnr(60, -21);
        assertEquals(SignalStrength.INVALID, ss.getLteRssnr());
    }

@@ -334,71 +334,71 @@ public class SignalStrengthTest {
    @Test
    public void testRssnrThresholds_rsrp_great() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-98, -200).getLteLevel());
                createSignalStrengthLteReportRssnr(-98, -20).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-98, -30).getLteLevel());
                createSignalStrengthLteReportRssnr(-98, -3).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRssnr(-98, 10).getLteLevel());
                createSignalStrengthLteReportRssnr(-98, 1).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRssnr(-98, 45).getLteLevel());
                createSignalStrengthLteReportRssnr(-98, 5).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GREAT,
                createSignalStrengthLteReportRssnr(-98, 130).getLteLevel());
                createSignalStrengthLteReportRssnr(-98, 13).getLteLevel());
    }

    @Test
    public void testRssnrThresholds_rsrp_good() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-108, -200).getLteLevel());
                createSignalStrengthLteReportRssnr(-108, -20).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-108, -30).getLteLevel());
                createSignalStrengthLteReportRssnr(-108, -3).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRssnr(-108, 10).getLteLevel());
                createSignalStrengthLteReportRssnr(-108, 1).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRssnr(-108, 45).getLteLevel());
                createSignalStrengthLteReportRssnr(-108, 5).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRssnr(-108, 130).getLteLevel());
                createSignalStrengthLteReportRssnr(-108, 13).getLteLevel());
    }

    @Test
    public void testRssnrThresholds_rsrp_moderate() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-118, -200).getLteLevel());
                createSignalStrengthLteReportRssnr(-118, -20).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-118, -30).getLteLevel());
                createSignalStrengthLteReportRssnr(-118, -3).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRssnr(-118, 10).getLteLevel());
                createSignalStrengthLteReportRssnr(-118, 1).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRssnr(-118, 45).getLteLevel());
                createSignalStrengthLteReportRssnr(-118, 5).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRssnr(-118, 130).getLteLevel());
                createSignalStrengthLteReportRssnr(-118, 13).getLteLevel());
    }

    @Test
    public void testRssnrThresholds_rsrp_poor() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-128, -200).getLteLevel());
                createSignalStrengthLteReportRssnr(-128, -20).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-128, -30).getLteLevel());
                createSignalStrengthLteReportRssnr(-128, -3).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-128, 10).getLteLevel());
                createSignalStrengthLteReportRssnr(-128, 1).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-128, 45).getLteLevel());
                createSignalStrengthLteReportRssnr(-128, 5).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-128, 130).getLteLevel());
                createSignalStrengthLteReportRssnr(-128, 13).getLteLevel());
    }

    @Test
    public void testRssnrThresholds_rsrp_unknown() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, -200).getLteLevel());
                createSignalStrengthLteReportRssnr(-138, -20).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, -30).getLteLevel());
                createSignalStrengthLteReportRssnr(-138, -3).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, 10).getLteLevel());
                createSignalStrengthLteReportRssnr(-138, 1).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, 45).getLteLevel());
                createSignalStrengthLteReportRssnr(-138, 5).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, 130).getLteLevel());
                createSignalStrengthLteReportRssnr(-138, 13).getLteLevel());
    }
}
Loading