Prevent NullPointerException in SimStatusDialogController
In rare cases the SignalStrength we get for a SIM can be null, which wasn't checked for in this code. This CL adds a null check and fixes the tests so it's possible to verify the fix (one of the methods that would have crashed was being spy'd over unnecessarily). Fixes: 132570076 Test: make RunSettingsRobotests Change-Id: Ifdec24f184ee2d93e5e242eb2c20695249992fc6
This commit is contained in:
@@ -297,6 +297,9 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateSignalStrength(SignalStrength signalStrength) {
|
private void updateSignalStrength(SignalStrength signalStrength) {
|
||||||
|
if (signalStrength == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
|
final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
|
||||||
final PersistableBundle carrierConfig =
|
final PersistableBundle carrierConfig =
|
||||||
mCarrierConfigManager.getConfigForSubId(subscriptionId);
|
mCarrierConfigManager.getConfigForSubId(subscriptionId);
|
||||||
@@ -430,13 +433,11 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O
|
|||||||
mSubscriptionInfo.getSubscriptionId());
|
mSubscriptionInfo.getSubscriptionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
private int getDbm(SignalStrength signalStrength) {
|
||||||
int getDbm(SignalStrength signalStrength) {
|
|
||||||
return signalStrength.getDbm();
|
return signalStrength.getDbm();
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
private int getAsuLevel(SignalStrength signalStrength) {
|
||||||
int getAsuLevel(SignalStrength signalStrength) {
|
|
||||||
return signalStrength.getAsuLevel();
|
return signalStrength.getAsuLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -121,8 +121,8 @@ public class SimStatusDialogControllerTest {
|
|||||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
mLifecycle = new Lifecycle(mLifecycleOwner);
|
||||||
mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
|
mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
|
||||||
doReturn(mServiceState).when(mController).getCurrentServiceState();
|
doReturn(mServiceState).when(mController).getCurrentServiceState();
|
||||||
doReturn(0).when(mController).getDbm(any());
|
doReturn(0).when(mSignalStrength).getDbm();
|
||||||
doReturn(0).when(mController).getAsuLevel(any());
|
doReturn(0).when(mSignalStrength).getAsuLevel();
|
||||||
doReturn(mPhoneStateListener).when(mController).getPhoneStateListener();
|
doReturn(mPhoneStateListener).when(mController).getPhoneStateListener();
|
||||||
doReturn("").when(mController).getPhoneNumber();
|
doReturn("").when(mController).getPhoneNumber();
|
||||||
doReturn(mSignalStrength).when(mController).getSignalStrength();
|
doReturn(mSignalStrength).when(mController).getSignalStrength();
|
||||||
@@ -136,6 +136,9 @@ public class SimStatusDialogControllerTest {
|
|||||||
ReflectionHelpers.setField(mController, "mEuiccManager", mEuiccManager);
|
ReflectionHelpers.setField(mController, "mEuiccManager", mEuiccManager);
|
||||||
ReflectionHelpers.setField(mController, "mSubscriptionManager", mSubscriptionManager);
|
ReflectionHelpers.setField(mController, "mSubscriptionManager", mSubscriptionManager);
|
||||||
when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mPersistableBundle);
|
when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mPersistableBundle);
|
||||||
|
when(mPersistableBundle.getBoolean(
|
||||||
|
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL))
|
||||||
|
.thenReturn(true);
|
||||||
|
|
||||||
final ShadowPackageManager shadowPackageManager =
|
final ShadowPackageManager shadowPackageManager =
|
||||||
Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager());
|
Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager());
|
||||||
@@ -228,8 +231,8 @@ public class SimStatusDialogControllerTest {
|
|||||||
public void initialize_updateSignalStrengthWith50_shouldUpdateSignalStrengthTo50() {
|
public void initialize_updateSignalStrengthWith50_shouldUpdateSignalStrengthTo50() {
|
||||||
final int signalDbm = 50;
|
final int signalDbm = 50;
|
||||||
final int signalAsu = 50;
|
final int signalAsu = 50;
|
||||||
doReturn(signalDbm).when(mController).getDbm(mSignalStrength);
|
doReturn(signalDbm).when(mSignalStrength).getDbm();
|
||||||
doReturn(signalAsu).when(mController).getAsuLevel(mSignalStrength);
|
doReturn(signalAsu).when(mSignalStrength).getAsuLevel();
|
||||||
when(mPersistableBundle.getBoolean(
|
when(mPersistableBundle.getBoolean(
|
||||||
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true);
|
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true);
|
||||||
|
|
||||||
@@ -249,8 +252,8 @@ public class SimStatusDialogControllerTest {
|
|||||||
|
|
||||||
final int signalDbm = 50;
|
final int signalDbm = 50;
|
||||||
final int signalAsu = 50;
|
final int signalAsu = 50;
|
||||||
doReturn(signalDbm).when(mController).getDbm(mSignalStrength);
|
doReturn(signalDbm).when(mSignalStrength).getDbm();
|
||||||
doReturn(signalAsu).when(mController).getAsuLevel(mSignalStrength);
|
doReturn(signalAsu).when(mSignalStrength).getAsuLevel();
|
||||||
when(mPersistableBundle.getBoolean(
|
when(mPersistableBundle.getBoolean(
|
||||||
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true);
|
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true);
|
||||||
|
|
||||||
@@ -415,4 +418,11 @@ public class SimStatusDialogControllerTest {
|
|||||||
verify(mDialog).removeSettingFromScreen(IMS_REGISTRATION_STATE_LABEL_ID);
|
verify(mDialog).removeSettingFromScreen(IMS_REGISTRATION_STATE_LABEL_ID);
|
||||||
verify(mDialog).removeSettingFromScreen(IMS_REGISTRATION_STATE_VALUE_ID);
|
verify(mDialog).removeSettingFromScreen(IMS_REGISTRATION_STATE_VALUE_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void initialize_nullSignalStrength_noCrash() {
|
||||||
|
doReturn(null).when(mController).getSignalStrength();
|
||||||
|
// we should not crash when running the following line
|
||||||
|
mController.initialize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user