Keep service state listener updated on default sub change The service state listener may not be update when default sub is changed, but related configurations are same. In this case, the service state listener should be updated as well. Bug: 233000473 Test: atest CellBroadcastServiceTests:GsmCellBroadcastHandlerTest Change-Id: I72ea1bc10987b3df84c7e6e8cfd3e3a673db74a9
diff --git a/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java b/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java index 92b940b..67a5721 100644 --- a/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java +++ b/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
@@ -171,18 +171,15 @@ log("subId[" + subId + "] is not valid"); return; } - boolean isResetAreaInfoOnOos = getResources(subId) - .getBoolean(R.bool.reset_area_info_on_oos); - if (mIsResetAreaInfoOnOos != isResetAreaInfoOnOos) { - mIsResetAreaInfoOnOos = isResetAreaInfoOnOos; - if (mIsResetAreaInfoOnOos) { - registerServiceStateListeners(); - } else { - unregisterServiceStateListeners(); - } - CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mContext) - .onChangedResetAreaInfo(mIsResetAreaInfoOnOos); + + mIsResetAreaInfoOnOos = getResources(subId).getBoolean(R.bool.reset_area_info_on_oos); + if (mIsResetAreaInfoOnOos) { + registerServiceStateListeners(); + } else { + unregisterServiceStateListeners(); } + CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mContext) + .onChangedResetAreaInfo(mIsResetAreaInfoOnOos); } private void registerServiceStateListeners() {
diff --git a/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastServiceTestBase.java b/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastServiceTestBase.java index 7d593ef..20df58f 100644 --- a/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastServiceTestBase.java +++ b/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastServiceTestBase.java
@@ -165,6 +165,11 @@ any(BroadcastReceiver.class), any(IntentFilter.class)); doAnswer(registerReceiverAnswer).when(mMockedContext).registerReceiver( any(BroadcastReceiver.class), any(IntentFilter.class), any(int.class)); + doAnswer(registerReceiverAnswer).when(mMockedContext).registerReceiver( + any(BroadcastReceiver.class), any(IntentFilter.class), any(), any()); + doAnswer(registerReceiverAnswer).when(mMockedContext).registerReceiver( + any(BroadcastReceiver.class), any(IntentFilter.class), + any(), any(), any(int.class)); doReturn(mSharedPreference).when(mMockedContext) .getSharedPreferences(anyString(), anyInt());
diff --git a/tests/src/com/android/cellbroadcastservice/tests/GsmCellBroadcastHandlerTest.java b/tests/src/com/android/cellbroadcastservice/tests/GsmCellBroadcastHandlerTest.java index 0e9687a..7c3279f 100644 --- a/tests/src/com/android/cellbroadcastservice/tests/GsmCellBroadcastHandlerTest.java +++ b/tests/src/com/android/cellbroadcastservice/tests/GsmCellBroadcastHandlerTest.java
@@ -518,13 +518,41 @@ mGsmCellBroadcastHandler.setCellBroadcastAreaInfo(0, areaInfo); assertEquals(areaInfo, mGsmCellBroadcastHandler.getCellBroadcastAreaInfo(0)); + ArgumentCaptor<PhoneStateListener> listenerCaptor = + ArgumentCaptor.forClass(PhoneStateListener.class); + verify(mMockedTelephonyManager).listen(listenerCaptor.capture(), anyInt()); + + PhoneStateListener listener = listenerCaptor.getValue(); + ServiceState ss = mock(ServiceState.class); + doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(ss).getState(); + listener.onServiceStateChanged(ss); + + assertEquals("", mGsmCellBroadcastHandler.getCellBroadcastAreaInfo(0)); + } + + @Test + @SmallTest + public void testResetAreaInfoWithDefaultSubChanged() { + String areaInfo = "0000000000000000"; + mGsmCellBroadcastHandler.setCellBroadcastAreaInfo(0, areaInfo); + assertEquals(areaInfo, mGsmCellBroadcastHandler.getCellBroadcastAreaInfo(0)); + + TelephonyManager tm2 = mock(TelephonyManager.class); + doReturn(tm2).when(mMockedTelephonyManager).createForSubscriptionId(FAKE_SUBID + 1); + SubscriptionInfo subInfo = mock(SubscriptionInfo.class); + doReturn(subInfo).when(mMockedSubscriptionManager) + .getActiveSubscriptionInfoForSimSlotIndex(anyInt()); + doReturn(FAKE_SUBID + 1).when(subInfo).getSubscriptionId(); + Intent intent = new Intent(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); - intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, FAKE_SUBID); + intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, FAKE_SUBID + 1); sendBroadcast(intent); + ArgumentCaptor<PhoneStateListener> listenerCaptor = ArgumentCaptor.forClass(PhoneStateListener.class); mTestableLooper.processAllMessages(); - verify(mMockedTelephonyManager).listen(listenerCaptor.capture(), anyInt()); + + verify(tm2).listen(listenerCaptor.capture(), anyInt()); PhoneStateListener listener = listenerCaptor.getValue(); ServiceState ss = mock(ServiceState.class);