Loading src/java/com/android/internal/telephony/DeviceStateMonitor.java +28 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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}. Loading src/java/com/android/internal/telephony/RIL.java +1 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +14 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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, Loading tests/telephonytests/src/com/android/internal/telephony/SignalStrengthTest.java +284 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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 { Loading Loading @@ -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()); } } tests/telephonytests/src/com/android/internal/telephony/SignalThresholdInfoTest.java +110 −0 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; } } Loading
src/java/com/android/internal/telephony/DeviceStateMonitor.java +28 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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}. Loading
src/java/com/android/internal/telephony/RIL.java +1 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +14 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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, Loading
tests/telephonytests/src/com/android/internal/telephony/SignalStrengthTest.java +284 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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 { Loading Loading @@ -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()); } }
tests/telephonytests/src/com/android/internal/telephony/SignalThresholdInfoTest.java +110 −0 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; } }