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);