Merge "Update CellBroadcastConfigTraker state for cleanupCdma case" into main
diff --git a/src/java/com/android/internal/telephony/CellBroadcastConfigTracker.java b/src/java/com/android/internal/telephony/CellBroadcastConfigTracker.java
index adb9904..6cc2d77 100644
--- a/src/java/com/android/internal/telephony/CellBroadcastConfigTracker.java
+++ b/src/java/com/android/internal/telephony/CellBroadcastConfigTracker.java
@@ -31,6 +31,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
+import com.android.internal.telephony.flags.Flags;
 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
 import com.android.internal.util.State;
 import com.android.internal.util.StateMachine;
@@ -192,7 +193,8 @@
                         // set gsm config if the config is changed
                         setGsmConfig(request.get3gppRanges(), request);
                         transitionTo(mGsmConfiguringState);
-                    } else if (!mCbRanges3gpp2.equals(request.get3gpp2Ranges())) {
+                    } else if (!Flags.cleanupCdma()
+                            && !mCbRanges3gpp2.equals(request.get3gpp2Ranges())) {
                         // set cdma config directly if no gsm config change but cdma config is
                         // changed
                         setCdmaConfig(request.get3gpp2Ranges(), request);
@@ -283,7 +285,8 @@
                     }
                     if (ar.exception == null) {
                         mCbRanges3gpp = request.get3gppRanges();
-                        if (!mCbRanges3gpp2.equals(request.get3gpp2Ranges())) {
+                        if (!Flags.cleanupCdma()
+                                && !mCbRanges3gpp2.equals(request.get3gpp2Ranges())) {
                             // set cdma config and transit to cdma configuring state if the config
                             // is changed.
                             setCdmaConfig(request.get3gpp2Ranges(), request);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CellBroadcastConfigTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/CellBroadcastConfigTrackerTest.java
index 6e6d4e4..0fdf90e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CellBroadcastConfigTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CellBroadcastConfigTrackerTest.java
@@ -43,6 +43,7 @@
 
 import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
 import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.Flags;
 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
 
 import org.junit.After;
@@ -132,6 +133,7 @@
         verify(mSpyCi, never()).setCdmaBroadcastConfig(any(), any());
         verify(mSpyCi, never()).setCdmaBroadcastActivation(anyBoolean(), any());
 
+        List<CellBroadcastIdRange> gsmRanges = new ArrayList<>(ranges);
         assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
 
         //Verify to set cdma config and activate, but no more for gsm as no change
@@ -150,39 +152,62 @@
         processAllMessages();
 
         verify(mSpyCi, times(1)).setGsmBroadcastConfig(any(), any());
-        verify(mSpyCi, times(1)).setCdmaBroadcastConfig(cdmaCaptor.capture(), msgCaptor.capture());
-        List<CdmaSmsBroadcastConfigInfo> cdmaArgs = Arrays.asList(
-                (CdmaSmsBroadcastConfigInfo[]) cdmaCaptor.getValue());
-        assertEquals(cdmaConfigs, cdmaArgs);
+        List<CdmaSmsBroadcastConfigInfo> cdmaArgs;
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(1)).setCdmaBroadcastConfig(cdmaCaptor.capture(),
+                    msgCaptor.capture());
+            cdmaArgs = Arrays.asList(
+                    (CdmaSmsBroadcastConfigInfo[]) cdmaCaptor.getValue());
+            assertEquals(cdmaConfigs, cdmaArgs);
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
+        } else {
+            verify(mSpyCi, never()).setCdmaBroadcastConfig(any(), any());
+        }
 
         verify(mSpyCi, times(1)).setGsmBroadcastActivation(anyBoolean(), any());
-        verify(mSpyCi, times(1)).setCdmaBroadcastActivation(eq(true), msgCaptor.capture());
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(1)).setCdmaBroadcastActivation(eq(true), msgCaptor.capture());
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
+        } else {
+            verify(mSpyCi, never()).setCdmaBroadcastActivation(anyBoolean(), any());
+        }
 
-        assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
+        if (!Flags.cleanupCdma()) {
+            assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
+        } else {
+            assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(gsmRanges));
+        }
 
         // Verify not to set cdma or gsm config as the config is not changed
         mPhone.setCellBroadcastIdRanges(ranges, r -> assertTrue(
                 TelephonyManager.CELL_BROADCAST_RESULT_SUCCESS == r));
         processAllMessages();
 
-        verify(mSpyCi, times(1)).setCdmaBroadcastConfig(any(), any());
-        verify(mSpyCi, times(1)).setCdmaBroadcastActivation(anyBoolean(), any());
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(1)).setCdmaBroadcastConfig(any(), any());
+            verify(mSpyCi, times(1)).setCdmaBroadcastActivation(anyBoolean(), any());
+        } else {
+            verify(mSpyCi, never()).setCdmaBroadcastConfig(any(), any());
+            verify(mSpyCi, never()).setCdmaBroadcastActivation(anyBoolean(), any());
+        }
         verify(mSpyCi, times(1)).setGsmBroadcastConfig(any(), any());
         verify(mSpyCi, times(1)).setGsmBroadcastActivation(anyBoolean(), any());
 
-        assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
+        if (!Flags.cleanupCdma()) {
+            assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
+        } else {
+            assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(gsmRanges));
+        }
 
         // Verify to reset ranges with empty ranges list
         mPhone.setCellBroadcastIdRanges(new ArrayList<>(), r -> assertTrue(
@@ -208,23 +233,29 @@
         msg.sendToTarget();
         processAllMessages();
 
-        verify(mSpyCi, times(2)).setCdmaBroadcastConfig(cdmaCaptor.capture(), msgCaptor.capture());
-        assertEquals(0, ((CdmaSmsBroadcastConfigInfo[]) cdmaCaptor.getValue()).length);
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(2)).setCdmaBroadcastConfig(cdmaCaptor.capture(),
+                    msgCaptor.capture());
+            assertEquals(0, ((CdmaSmsBroadcastConfigInfo[]) cdmaCaptor.getValue()).length);
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
 
-        // Verify to deavtivate cdma broadcast on empty ranges
-        verify(mSpyCi, times(1)).setCdmaBroadcastActivation(eq(false), msgCaptor.capture());
+            // Verify to deavtivate cdma broadcast on empty ranges
+            verify(mSpyCi, times(1)).setCdmaBroadcastActivation(eq(false), msgCaptor.capture());
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
+        } else {
+            verify(mSpyCi, never()).setCdmaBroadcastConfig(any(), any());
+            verify(mSpyCi, never()).setCdmaBroadcastActivation(anyBoolean(), any());
+        }
 
         assertTrue(mPhone.getCellBroadcastIdRanges().isEmpty());
 
@@ -252,25 +283,35 @@
         msg.sendToTarget();
         processAllMessages();
 
-        verify(mSpyCi, times(3)).setCdmaBroadcastConfig(cdmaCaptor.capture(), msgCaptor.capture());
-        cdmaArgs = Arrays.asList((CdmaSmsBroadcastConfigInfo[]) cdmaCaptor.getValue());
-        assertEquals(cdmaConfigs, cdmaArgs);
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(3)).setCdmaBroadcastConfig(cdmaCaptor.capture(),
+                    msgCaptor.capture());
+            cdmaArgs = Arrays.asList((CdmaSmsBroadcastConfigInfo[]) cdmaCaptor.getValue());
+            assertEquals(cdmaConfigs, cdmaArgs);
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
 
-        verify(mSpyCi, times(2)).setCdmaBroadcastActivation(eq(true), msgCaptor.capture());
+            verify(mSpyCi, times(2)).setCdmaBroadcastActivation(eq(true), msgCaptor.capture());
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
+        } else {
+            verify(mSpyCi, never()).setCdmaBroadcastConfig(any(), any());
+            verify(mSpyCi, never()).setCdmaBroadcastActivation(anyBoolean(), any());
+        }
 
-        assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
+        if (!Flags.cleanupCdma()) {
+            assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(ranges));
+        } else {
+            assertEquals(mPhone.getCellBroadcastIdRanges(), mergeRangesAsNeeded(gsmRanges));
+        }
     }
 
     @Test
@@ -335,8 +376,9 @@
         assertTrue(mPhone.getCellBroadcastIdRanges().isEmpty());
 
         // Verify the result on setCdmaBroadcastConfig failure
-        mPhone.setCellBroadcastIdRanges(ranges, r -> assertTrue(
-                TelephonyManager.CELL_BROADCAST_RESULT_FAIL_CONFIG == r));
+        mPhone.setCellBroadcastIdRanges(ranges, !Flags.cleanupCdma()
+                ? r -> assertTrue(TelephonyManager.CELL_BROADCAST_RESULT_FAIL_CONFIG == r)
+                : r -> assertTrue(TelephonyManager.CELL_BROADCAST_RESULT_SUCCESS == r));
         processAllMessages();
 
         verify(mSpyCi, times(3)).setGsmBroadcastConfig(any(), msgCaptor.capture());
@@ -355,14 +397,17 @@
         msg.sendToTarget();
         processAllMessages();
 
-        verify(mSpyCi, times(1)).setCdmaBroadcastConfig(any(), msgCaptor.capture());
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(1)).setCdmaBroadcastConfig(any(), msgCaptor.capture());
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg).exception = new RuntimeException();
-        msg.sendToTarget();
-        processAllMessages();
-
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg).exception = new RuntimeException();
+            msg.sendToTarget();
+            processAllMessages();
+        } else {
+            verify(mSpyCi, times(0)).setCdmaBroadcastConfig(any(), any());
+        }
         verify(mSpyCi, times(0)).setCdmaBroadcastActivation(anyBoolean(), any());
 
         List<CellBroadcastIdRange> ranges3gpp = new ArrayList<>();
@@ -371,28 +416,34 @@
         assertEquals(mPhone.getCellBroadcastIdRanges(), ranges3gpp);
 
         // Verify the result on setCdmaBroadcastActivation failure
-        mPhone.setCellBroadcastIdRanges(ranges, r -> assertTrue(
-                TelephonyManager.CELL_BROADCAST_RESULT_FAIL_ACTIVATION == r));
+        mPhone.setCellBroadcastIdRanges(ranges, !Flags.cleanupCdma()
+                ? r -> assertTrue(TelephonyManager.CELL_BROADCAST_RESULT_FAIL_ACTIVATION == r)
+                : r -> assertTrue(TelephonyManager.CELL_BROADCAST_RESULT_SUCCESS == r));
         processAllMessages();
 
         // Verify no more calls as there is no change of ranges for 3gpp
         verify(mSpyCi, times(3)).setGsmBroadcastConfig(any(), any());
         verify(mSpyCi, times(2)).setGsmBroadcastActivation(anyBoolean(), any());
-        verify(mSpyCi, times(2)).setCdmaBroadcastConfig(any(), msgCaptor.capture());
+        if (!Flags.cleanupCdma()) {
+            verify(mSpyCi, times(2)).setCdmaBroadcastConfig(any(), msgCaptor.capture());
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg);
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg);
+            msg.sendToTarget();
+            processAllMessages();
 
-        verify(mSpyCi, times(1)).setCdmaBroadcastActivation(anyBoolean(), msgCaptor.capture());
+            verify(mSpyCi, times(1)).setCdmaBroadcastActivation(anyBoolean(), msgCaptor.capture());
 
-        msg = msgCaptor.getValue();
-        assertNotNull(msg);
-        AsyncResult.forMessage(msg).exception = new RuntimeException();
-        msg.sendToTarget();
-        processAllMessages();
+            msg = msgCaptor.getValue();
+            assertNotNull(msg);
+            AsyncResult.forMessage(msg).exception = new RuntimeException();
+            msg.sendToTarget();
+            processAllMessages();
+        } else {
+            verify(mSpyCi, times(0)).setCdmaBroadcastConfig(any(), any());
+            verify(mSpyCi, times(0)).setCdmaBroadcastActivation(anyBoolean(), any());
+        }
 
         assertEquals(mPhone.getCellBroadcastIdRanges(), ranges3gpp);
     }