From 54b00d859b35ae464fc4262bed691b30054be9e5 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Wed, 11 Dec 2019 23:20:36 +0800 Subject: [PATCH] Mainline use cellSignalStrength instead Bug: 146046311 Test: 1. open SIM status and check signal strength. (PASS) 2.atest make RunSettingsRoboTests / ROBOTEST_FILTER=SimStatusDialogControllerTest(PASS) Change-Id: I93e9dc09a01aa76b7d26660a32944df79cda93f3 Merged-In: I93e9dc09a01aa76b7d26660a32944df79cda93f3 --- .../simstatus/SimStatusDialogController.java | 33 +++++- .../SimStatusDialogControllerTest.java | 100 +++++++++++++++--- 2 files changed, 118 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java index 857f535084d..0751141ce45 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java @@ -26,6 +26,7 @@ import android.os.Bundle; import android.os.PersistableBundle; import android.os.UserHandle; import android.telephony.CarrierConfigManager; +import android.telephony.CellSignalStrength; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; @@ -48,6 +49,8 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; +import java.util.List; + public class SimStatusDialogController implements LifecycleObserver, OnResume, OnPause { private final static String TAG = "SimStatusDialogCtrl"; @@ -430,11 +433,37 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O } private int getDbm(SignalStrength signalStrength) { - return signalStrength.getDbm(); + List cellSignalStrengthList = signalStrength.getCellSignalStrengths(); + int dbm = -1; + if (cellSignalStrengthList == null) { + return dbm; + } + + for (CellSignalStrength cell : cellSignalStrengthList) { + if (cell.getDbm() != -1) { + dbm = cell.getDbm(); + break; + } + } + + return dbm; } private int getAsuLevel(SignalStrength signalStrength) { - return signalStrength.getAsuLevel(); + List cellSignalStrengthList = signalStrength.getCellSignalStrengths(); + int asu = -1; + if (cellSignalStrengthList == null) { + return asu; + } + + for (CellSignalStrength cell : cellSignalStrengthList) { + if (cell.getAsuLevel() != -1) { + asu = cell.getAsuLevel(); + break; + } + } + + return asu; } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java index 3ecdcffb03c..5a74804ce2b 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java @@ -45,6 +45,10 @@ import android.content.Context; import android.content.pm.PackageInfo; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; +import android.telephony.CellSignalStrength; +import android.telephony.CellSignalStrengthCdma; +import android.telephony.CellSignalStrengthLte; +import android.telephony.CellSignalStrengthWcdma; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; @@ -73,6 +77,9 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowPackageManager; import org.robolectric.util.ReflectionHelpers; +import java.util.ArrayList; +import java.util.List; + @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowDeviceInfoUtils.class}) public class SimStatusDialogControllerTest { @@ -90,6 +97,12 @@ public class SimStatusDialogControllerTest { @Mock private SignalStrength mSignalStrength; @Mock + private CellSignalStrengthCdma mCellSignalStrengthCdma; + @Mock + private CellSignalStrengthLte mCellSignalStrengthLte; + @Mock + private CellSignalStrengthWcdma mCellSignalStrengthWcdma; + @Mock private CarrierConfigManager mCarrierConfigManager; @Mock private PersistableBundle mPersistableBundle; @@ -113,8 +126,15 @@ public class SimStatusDialogControllerTest { mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */)); ShadowDeviceInfoUtils.setPhoneNumber(""); doReturn(mServiceState).when(mController).getCurrentServiceState(); - doReturn(0).when(mSignalStrength).getDbm(); - doReturn(0).when(mSignalStrength).getAsuLevel(); + //CellSignalStrength setup + doReturn(0).when(mCellSignalStrengthCdma).getDbm(); + doReturn(0).when(mCellSignalStrengthCdma).getAsuLevel(); + doReturn(0).when(mCellSignalStrengthLte).getDbm(); + doReturn(0).when(mCellSignalStrengthLte).getAsuLevel(); + doReturn(0).when(mCellSignalStrengthWcdma).getDbm(); + doReturn(0).when(mCellSignalStrengthWcdma).getAsuLevel(); + + doReturn(null).when(mSignalStrength).getCellSignalStrengths(); doReturn(mPhoneStateListener).when(mController).getPhoneStateListener(); doReturn(mSignalStrength).when(mController).getSignalStrength(); doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt()); @@ -226,18 +246,36 @@ public class SimStatusDialogControllerTest { } @Test - public void initialize_updateSignalStrengthWith50_shouldUpdateSignalStrengthTo50() { - final int signalDbm = 50; - final int signalAsu = 50; - doReturn(signalDbm).when(mSignalStrength).getDbm(); - doReturn(signalAsu).when(mSignalStrength).getAsuLevel(); + public void initialize_updateSignalStrengthWithLte50Wcdma40_shouldUpdateSignalStrengthTo50() { + final int lteDbm = 50; + final int lteAsu = 50; + final int wcdmaDbm = 40; + final int wcdmaAsu = 40; + setupCellSignalStrength_lteWcdma(lteDbm, lteAsu, wcdmaDbm, wcdmaAsu); when(mPersistableBundle.getBoolean( CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true); mController.initialize(); final String signalStrengthString = - mContext.getString(R.string.sim_signal_strength, signalDbm, signalAsu); + mContext.getString(R.string.sim_signal_strength, lteDbm, lteAsu); + verify(mDialog).setText(SIGNAL_STRENGTH_VALUE_ID, signalStrengthString); + } + + @Test + public void initialize_updateSignalStrengthWithLte50Cdma30_shouldUpdateSignalStrengthTo50() { + final int lteDbm = 50; + final int lteAsu = 50; + final int cdmaDbm = 30; + final int cdmaAsu = 30; + setupCellSignalStrength_lteCdma(lteDbm, lteAsu, cdmaDbm, cdmaAsu); + when(mPersistableBundle.getBoolean( + CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true); + + mController.initialize(); + + final String signalStrengthString = + mContext.getString(R.string.sim_signal_strength, lteDbm, lteAsu); verify(mDialog).setText(SIGNAL_STRENGTH_VALUE_ID, signalStrengthString); } @@ -248,17 +286,16 @@ public class SimStatusDialogControllerTest { when(mPersistableBundle.getBoolean( CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true); - final int signalDbm = 50; - final int signalAsu = 50; - doReturn(signalDbm).when(mSignalStrength).getDbm(); - doReturn(signalAsu).when(mSignalStrength).getAsuLevel(); + final int lteDbm = 50; + final int lteAsu = 50; + setupCellSignalStrength_lteOnly(lteDbm, lteAsu); when(mPersistableBundle.getBoolean( CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true); mController.initialize(); final String signalStrengthString = - mContext.getString(R.string.sim_signal_strength, signalDbm, signalAsu); + mContext.getString(R.string.sim_signal_strength, lteDbm, lteAsu); verify(mDialog).setText(SIGNAL_STRENGTH_VALUE_ID, signalStrengthString); } @@ -423,4 +460,41 @@ public class SimStatusDialogControllerTest { // we should not crash when running the following line mController.initialize(); } + + private void setupCellSignalStrength_lteWcdma(int lteDbm, int lteAsu, int wcdmaDbm, + int wcdmaAsu) { + doReturn(lteDbm).when(mCellSignalStrengthLte).getDbm(); + doReturn(lteAsu).when(mCellSignalStrengthLte).getAsuLevel(); + doReturn(wcdmaDbm).when(mCellSignalStrengthWcdma).getDbm(); + doReturn(wcdmaAsu).when(mCellSignalStrengthWcdma).getAsuLevel(); + + List cellSignalStrengthList = new ArrayList<>(2); + cellSignalStrengthList.add(mCellSignalStrengthLte); + cellSignalStrengthList.add(mCellSignalStrengthWcdma); + + doReturn(cellSignalStrengthList).when(mSignalStrength).getCellSignalStrengths(); + } + + private void setupCellSignalStrength_lteCdma(int lteDbm, int lteAsu, int cdmaDbm, int cdmaAsu) { + doReturn(lteDbm).when(mCellSignalStrengthLte).getDbm(); + doReturn(lteAsu).when(mCellSignalStrengthLte).getAsuLevel(); + doReturn(cdmaDbm).when(mCellSignalStrengthCdma).getDbm(); + doReturn(cdmaAsu).when(mCellSignalStrengthCdma).getAsuLevel(); + + List cellSignalStrengthList = new ArrayList<>(2); + cellSignalStrengthList.add(mCellSignalStrengthLte); + cellSignalStrengthList.add(mCellSignalStrengthCdma); + + doReturn(cellSignalStrengthList).when(mSignalStrength).getCellSignalStrengths(); + } + + private void setupCellSignalStrength_lteOnly(int lteDbm, int lteAsu) { + doReturn(lteDbm).when(mCellSignalStrengthLte).getDbm(); + doReturn(lteAsu).when(mCellSignalStrengthLte).getAsuLevel(); + + List cellSignalStrengthList = new ArrayList<>(2); + cellSignalStrengthList.add(mCellSignalStrengthLte); + + doReturn(cellSignalStrengthList).when(mSignalStrength).getCellSignalStrengths(); + } }