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

Commit a6fc84d5 authored by Shuo Qian's avatar Shuo Qian Committed by Gerrit Code Review
Browse files

Merge "Modify threshold parameters for signal strength reporting criteria"

parents 4ebd80ee e227a860
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -597,6 +597,11 @@ public class DeviceStateMonitor extends Handler {
        mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSSI,
                AccessNetworkThresholds.CDMA2000, AccessNetworkType.CDMA2000, true);
        if (mPhone.getHalVersion().greaterOrEqual(RIL.RADIO_HAL_VERSION_1_5)) {
            mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSRQ,
                    AccessNetworkThresholds.EUTRAN_RSRQ, AccessNetworkType.EUTRAN, false);
            mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSSNR,
                    AccessNetworkThresholds.EUTRAN_RSSNR, AccessNetworkType.EUTRAN, true);

            // Defaultly we only need SSRSRP for NGRAN signal criterial reporting
            mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_SSRSRP,
                    AccessNetworkThresholds.NGRAN_RSRSRP, AccessNetworkType.NGRAN, true);
@@ -751,7 +756,29 @@ public class DeviceStateMonitor extends Handler {
            -98,  /* SIGNAL_STRENGTH_GREAT */
        };

        // TODO Add EUTRAN_RSRQ and EUTRAN_RSSNI
        /**
         * List of default dB RSRQ thresholds for EUTRAN {@link AccessNetworkType}.
         *
         * These thresholds are taken from the LTE RSRQ defaults in {@link CarrierConfigManager}.
         */
        public static final int[] EUTRAN_RSRQ = new int[] {
            -19,  /* SIGNAL_STRENGTH_POOR */
            -17,  /* SIGNAL_STRENGTH_MODERATE */
            -14,  /* SIGNAL_STRENGTH_GOOD */
            -12   /* SIGNAL_STRENGTH_GREAT */
        };

        /**
         * List of default 10*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 */
        };

        /**
         * List of dBm thresholds for CDMA2000 {@link AccessNetworkType}.
+1 −0
Original line number Diff line number Diff line
@@ -4599,6 +4599,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
        signalThresholdInfoHal.hysteresisDb = signalThresholdInfo.getHysteresisDb();
        signalThresholdInfoHal.thresholds = primitiveArrayToArrayList(
                signalThresholdInfo.getThresholds());
        signalThresholdInfoHal.isEnabled = signalThresholdInfo.isEnabled();
        return signalThresholdInfoHal;
    }

+14 −1
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ import android.telephony.CellIdentityTdscdma;
import android.telephony.CellIdentityWcdma;
import android.telephony.CellInfo;
import android.telephony.CellLocation;
import android.telephony.CellSignalStrengthLte;
import android.telephony.CellSignalStrengthNr;
import android.telephony.DataSpecificRegistrationInfo;
import android.telephony.NetworkRegistrationInfo;
@@ -4738,9 +4739,12 @@ public class ServiceStateTracker extends Handler {
    }

    private void updateReportingCriteria(PersistableBundle config) {
        int lteMeasurementEnabled = config.getInt(CarrierConfigManager
                .KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT, CellSignalStrengthLte.USE_RSRP);
        mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSRP,
                config.getIntArray(CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY),
                AccessNetworkType.EUTRAN, true);
                AccessNetworkType.EUTRAN,
                (lteMeasurementEnabled & CellSignalStrengthLte.USE_RSRP) != 0);
        mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSCP,
                config.getIntArray(CarrierConfigManager.KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY),
                AccessNetworkType.UTRAN, true);
@@ -4749,6 +4753,15 @@ public class ServiceStateTracker extends Handler {
                AccessNetworkType.GERAN, true);

        if (mPhone.getHalVersion().greaterOrEqual(RIL.RADIO_HAL_VERSION_1_5)) {
            mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSRQ,
                    config.getIntArray(CarrierConfigManager.KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY),
                    AccessNetworkType.EUTRAN,
                    (lteMeasurementEnabled & CellSignalStrengthLte.USE_RSRQ) != 0);
            mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_RSSNR,
                    config.getIntArray(CarrierConfigManager.KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY),
                    AccessNetworkType.EUTRAN,
                    (lteMeasurementEnabled & CellSignalStrengthLte.USE_RSSNR) != 0);

            int measurementEnabled = config.getInt(CarrierConfigManager
                    .KEY_PARAMETERS_USE_FOR_5G_NR_SIGNAL_BAR_INT, CellSignalStrengthNr.USE_SSRSRP);
            mPhone.setSignalStrengthReportingCriteria(SignalThresholdInfo.SIGNAL_SSRSRP,
+284 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import android.os.Parcel;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.CellInfo;
import android.telephony.CellSignalStrength;
import android.telephony.CellSignalStrengthCdma;
@@ -42,6 +44,29 @@ import java.util.List;
@SmallTest
@RunWith(JUnit4.class)
public class SignalStrengthTest {
    private static final int[] DEFAULT_LTE_RSRP_THRESHOLDS = {
            -128,  // SIGNAL_STRENGTH_POOR
            -118,  // SIGNAL_STRENGTH_MODERATE
            -108,  // SIGNAL_STRENGTH_GOOD
            -98 }; // SIGNAL_STRENGTH_GREAT

    private static final int[] DEFAULT_LTE_RSRQ_THRESHOLDS = {
            -19,   // SIGNAL_STRENGTH_POOR
            -17,   // SIGNAL_STRENGTH_MODERATE
            -14,   // SIGNAL_STRENGTH_GOOD
            -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

    private static final int[] DEFAULT_5G_NR_SSRSRP_THRESHOLDS = {
            -125,  // SIGNAL_STRENGTH_POOR
            -115,  // SIGNAL_STRENGTH_MODERATE
            -105,  // SIGNAL_STRENGTH_GOOD
            -95 }; // SIGNAL_STRENGTH_GREAT

    @Test
    public void testDefaults() throws Exception {
@@ -71,6 +96,23 @@ public class SignalStrengthTest {
                new CellSignalStrengthLte(-85, -91, -6, -10, 12, 1),
                new CellSignalStrengthNr(-91, -6, 3, -80, -7, 4));
        assertParcelingIsLossless(s);

        PersistableBundle bundle = new PersistableBundle();
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSRQ_THRESHOLDS);
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSRP_THRESHOLDS);
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSSNR_THRESHOLDS);
        bundle.putIntArray(
                CarrierConfigManager.KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY,
                DEFAULT_5G_NR_SSRSRP_THRESHOLDS);

        s.updateLevel(bundle, null);
        assertParcelingIsLossless(s);
    }

    private void assertParcelingIsLossless(SignalStrength ssi) throws Exception {
@@ -116,5 +158,247 @@ public class SignalStrengthTest {
        assertTrue(css.contains(cdma));
        assertTrue(css.contains(lte));
    }

    private static SignalStrength createSignalStrengthLteReportRsrq(int lteRsrp, int lteRsrq) {

        CellSignalStrengthLte lte = new CellSignalStrengthLte(
                -89,                   // rssi
                lteRsrp,               // rsrp
                lteRsrq,               // rsrq
                -25,                   // rssnr
                CellInfo.UNAVAILABLE,  // cqi
                CellInfo.UNAVAILABLE); // timingAdvance

        SignalStrength signalStrength = new SignalStrength(
                new CellSignalStrengthCdma(),
                new CellSignalStrengthGsm(),
                new CellSignalStrengthWcdma(),
                new CellSignalStrengthTdscdma(),
                lte,
                new CellSignalStrengthNr());

        PersistableBundle bundle = new PersistableBundle();
        bundle.putInt(
                CarrierConfigManager.KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT,
                CellSignalStrengthLte.USE_RSRP | CellSignalStrengthLte.USE_RSRQ);
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSRQ_THRESHOLDS);
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSRP_THRESHOLDS);
        signalStrength.updateLevel(bundle, null);
        return signalStrength;
    }

    private static SignalStrength createSignalStrengthLteReportRssnr(int lteRsrp, int lteRssnr) {

        CellSignalStrengthLte lte = new CellSignalStrengthLte(
                -89,                   // rssi
                lteRsrp,               // rsrp
                15,                    // rsrq
                lteRssnr,              // rssnr
                CellInfo.UNAVAILABLE,  // cqi
                CellInfo.UNAVAILABLE); // timingAdvance

        SignalStrength signalStrength = new SignalStrength(
                new CellSignalStrengthCdma(),
                new CellSignalStrengthGsm(),
                new CellSignalStrengthWcdma(),
                new CellSignalStrengthTdscdma(),
                lte,
                new CellSignalStrengthNr());

        PersistableBundle bundle = new PersistableBundle();
        bundle.putInt(
                CarrierConfigManager.KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT,
                CellSignalStrengthLte.USE_RSRP | CellSignalStrengthLte.USE_RSSNR);
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSRP_THRESHOLDS);
        bundle.putIntArray(
                CarrierConfigManager.KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY,
                DEFAULT_LTE_RSSNR_THRESHOLDS);
        signalStrength.updateLevel(bundle, null);
        return signalStrength;
    }

    @Test
    public void testValidateInput() throws Exception {

        SignalStrength ss;

        // Input value of RSRQ: 4[dB]
        ss = createSignalStrengthLteReportRsrq(-60, 4);
        assertEquals(SignalStrength.INVALID, ss.getLteRsrq());

        // Input value of RSRQ: 3[dB]
        ss = createSignalStrengthLteReportRsrq(-60, 3);
        assertEquals(3, ss.getLteRsrq());

        // Input value of RSRQ: -34[dB]
        ss = createSignalStrengthLteReportRsrq(-60, -34);
        assertEquals(-34, ss.getLteRsrq());

        // Input value of RSRQ: -35[dB]
        ss = createSignalStrengthLteReportRsrq(-60, -35);
        assertEquals(SignalStrength.INVALID, ss.getLteRsrq());

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

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

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

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

    @Test
    public void testRsrqThresholds_rsrp_great() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-98, -34).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-98, -19).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRsrq(-98, -17).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRsrq(-98, -14).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GREAT,
                createSignalStrengthLteReportRsrq(-98, -12).getLteLevel());
    }

    @Test
    public void testRsrqThresholds_rsrp_good() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-108, -34).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-108, -19).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRsrq(-108, -17).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRsrq(-108, -14).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRsrq(-108, -12).getLteLevel());
    }

    @Test
    public void testRsrqThresholds_rsrp_moderate() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-118, -34).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-118, -19).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRsrq(-118, -17).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRsrq(-118, -14).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRsrq(-118, -12).getLteLevel());
    }

    @Test
    public void testRsrqThresholds_rsrp_poor() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-128, -34).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-128, -19).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-128, -17).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-128, -14).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRsrq(-128, -12).getLteLevel());
    }

    @Test
    public void testRsrqThresholds_rsrp_unknown() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-138, -34).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-138, -19).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-138, -17).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-138, -14).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRsrq(-138, -12).getLteLevel());
    }

    @Test
    public void testRssnrThresholds_rsrp_great() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-98, -200).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_POOR,
                createSignalStrengthLteReportRssnr(-98, -30).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_MODERATE,
                createSignalStrengthLteReportRssnr(-98, 10).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GOOD,
                createSignalStrengthLteReportRssnr(-98, 45).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_GREAT,
                createSignalStrengthLteReportRssnr(-98, 130).getLteLevel());
    }

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

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

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

    @Test
    public void testRssnrThresholds_rsrp_unknown() throws Exception {
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, -200).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, -30).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, 10).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, 45).getLteLevel());
        assertEquals(SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                createSignalStrengthLteReportRssnr(-138, 130).getLteLevel());
    }
}
+110 −0
Original line number Diff line number Diff line
@@ -15,17 +15,40 @@
 */
package com.android.internal.telephony;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import android.os.Parcel;
import android.telephony.SignalThresholdInfo;

import androidx.test.filters.SmallTest;

import junit.framework.TestCase;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.util.ArrayList;
import java.util.Arrays;

@RunWith(JUnit4.class)
public class SignalThresholdInfoTest extends TestCase {
    private static final int HYSTERESIS_DB = 2;
    private static final int HYSTERESIS_MS = 30;
    private static final int[] SSRSRP_THRESHOLDS = new int[] {-30, 10, 45, 130};

    private final int[] mRssiThresholds = new int[] {-109, -103, -97, -89};
    private final int[] mRscpThresholds = new int[] {-115, -105, -95, -85};
    private final int[] mRsrpThresholds = new int[] {-128, -118, -108, -98};
    private final int[] mRsrqThresholds = new int[] {-19, -17, -14, -12};
    private final int[] mRssnrThresholds = new int[] {-30, 10, 45, 130};
    private final int[][] mThresholds = new int[5][];

    @Test
    @SmallTest
    public void testSignalThresholdInfo() throws Exception {
        SignalThresholdInfo signalThresholdInfo = new SignalThresholdInfo(
                SignalThresholdInfo.SIGNAL_SSRSRP,
@@ -42,4 +65,91 @@ public class SignalThresholdInfoTest extends TestCase {
                signalThresholdInfo.getThresholds()));
        assertFalse(signalThresholdInfo.isEnabled());
    }

    @Test
    @SmallTest
    public void testDefaultThresholdsConstruction() {
        setThresholds();
        ArrayList<SignalThresholdInfo> stList = setSignalThresholdInfoConstructor();

        int count = 0;
        for (SignalThresholdInfo st : stList) {
            assertThat(st.getThresholds()).isEqualTo(mThresholds[count]);
            count++;
        }
    }

    @Test
    @SmallTest
    public void testDefaultThresholdsParcel() {
        ArrayList<SignalThresholdInfo> stList = setSignalThresholdInfoConstructor();

        for (SignalThresholdInfo st : stList) {
            Parcel p = Parcel.obtain();
            st.writeToParcel(p, 0);
            p.setDataPosition(0);

            SignalThresholdInfo newSt = SignalThresholdInfo.CREATOR.createFromParcel(p);
            assertThat(newSt).isEqualTo(st);
        }
    }

    @Test
    @SmallTest
    public void testGetSignalThresholdInfo() {
        ArrayList<SignalThresholdInfo> stList = new ArrayList<>();
        stList.add(new SignalThresholdInfo(0, 0, 0, null, false));
        stList.add(new SignalThresholdInfo(SignalThresholdInfo.SIGNAL_RSSI, HYSTERESIS_MS,
                HYSTERESIS_DB, mRssiThresholds, false));

        assertThat(stList.get(0).getThresholds()).isEqualTo(null);
        assertThat(stList.get(1).getSignalMeasurement()).isEqualTo(SignalThresholdInfo.SIGNAL_RSSI);
        assertThat(stList.get(1).getThresholds()).isEqualTo(mRssiThresholds);
    }

    @Test
    @SmallTest
    public void testEqualsSignalThresholdInfo() {
        final int[] dummyThresholds = new int[] {-100, -1, 1, 100};
        SignalThresholdInfo st1 = new SignalThresholdInfo(1, HYSTERESIS_MS, HYSTERESIS_DB,
                mRssiThresholds, false);
        SignalThresholdInfo st2 = new SignalThresholdInfo(2, HYSTERESIS_MS, HYSTERESIS_DB,
                mRssiThresholds, false);
        SignalThresholdInfo st3 = new SignalThresholdInfo(1, HYSTERESIS_MS, HYSTERESIS_DB,
                dummyThresholds, false);
        SignalThresholdInfo st4 = new SignalThresholdInfo(1, HYSTERESIS_MS, HYSTERESIS_DB,
                mRssiThresholds, false);

        //Return true if all SignalThresholdInfo values match.
        assertTrue(st1.equals(st1));
        assertFalse(st1.equals(st2));
        assertFalse(st1.equals(st3));
        assertTrue(st1.equals(st4));
        //Return false if the object of argument is other than SignalThresholdInfo.
        assertFalse(st1.equals(new String("test")));
    }

    private void setThresholds() {
        mThresholds[0] = mRssiThresholds;
        mThresholds[1] = mRscpThresholds;
        mThresholds[2] = mRsrpThresholds;
        mThresholds[3] = mRsrqThresholds;
        mThresholds[4] = mRssnrThresholds;
    }

    private ArrayList<SignalThresholdInfo> setSignalThresholdInfoConstructor() {
        ArrayList<SignalThresholdInfo> stList = new ArrayList<>();
        stList.add(new SignalThresholdInfo(SignalThresholdInfo.SIGNAL_RSSI, HYSTERESIS_MS,
                HYSTERESIS_DB, mRssiThresholds, false));
        stList.add(new SignalThresholdInfo(SignalThresholdInfo.SIGNAL_RSCP, HYSTERESIS_MS,
                HYSTERESIS_DB, mRscpThresholds, false));
        stList.add(new SignalThresholdInfo(SignalThresholdInfo.SIGNAL_RSRP, HYSTERESIS_MS,
                HYSTERESIS_DB, mRsrpThresholds, false));
        stList.add(new SignalThresholdInfo(SignalThresholdInfo.SIGNAL_RSRQ, HYSTERESIS_MS,
                HYSTERESIS_DB, mRsrqThresholds, false));
        stList.add(new SignalThresholdInfo(SignalThresholdInfo.SIGNAL_RSSNR, HYSTERESIS_MS,
                HYSTERESIS_DB, mRssnrThresholds, false));

        return stList;
    }
}