Reset cell broadcast config before enabling all channels

Before cell broadcast config service enabling all channels, it
reset all channels that were previously enabled. This will make
sure the full channel config can be pushed down to modem. This
also solved the issue that channel config not sending to modem
when SIM is swapped. Note that a hidden API is added and will
be unhide in the next Android release.

Fix: 155027085
Test: Manual
Merged-In: Id571b990f4e45aea5bbab0dbadce48dda7b2bc56
Change-Id: Id571b990f4e45aea5bbab0dbadce48dda7b2bc56
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index 991375c..b376660 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -2978,4 +2978,29 @@
             Log.e(TAG, "setPremiumSmsPermission() RemoteException", e);
         }
     }
+
+    /**
+     * Reset all cell broadcast ranges. Previously enabled ranges will become invalid after this.
+     *
+     * @return {@code true} if succeeded, otherwise {@code false}.
+     *
+     * // TODO: Unhide the API in S.
+     * @hide
+     */
+    public boolean resetAllCellBroadcastRanges() {
+        boolean success = false;
+
+        try {
+            ISms iSms = getISmsService();
+            if (iSms != null) {
+                // If getSubscriptionId() returns INVALID or an inactive subscription, we will use
+                // the default phone internally.
+                success = iSms.resetAllCellBroadcastRanges(getSubscriptionId());
+            }
+        } catch (RemoteException ex) {
+            // ignore it
+        }
+
+        return success;
+    }
 }
diff --git a/telephony/java/com/android/internal/telephony/ISms.aidl b/telephony/java/com/android/internal/telephony/ISms.aidl
index 89f811e..9ec3c67 100644
--- a/telephony/java/com/android/internal/telephony/ISms.aidl
+++ b/telephony/java/com/android/internal/telephony/ISms.aidl
@@ -563,4 +563,14 @@
      * @return capacity of ICC
      */
     int getSmsCapacityOnIccForSubscriber(int subId);
+
+    /**
+     * Reset all cell broadcast ranges. Previously enabled ranges will become invalid after this.
+     *
+     * @param subId Subscription index
+     * @return {@code true} if succeeded, otherwise {@code false}.
+     *
+     * @hide
+     */
+    boolean resetAllCellBroadcastRanges(int subId);
 }
diff --git a/telephony/java/com/android/internal/telephony/ISmsImplBase.java b/telephony/java/com/android/internal/telephony/ISmsImplBase.java
index f1182f7..c361d5b 100644
--- a/telephony/java/com/android/internal/telephony/ISmsImplBase.java
+++ b/telephony/java/com/android/internal/telephony/ISmsImplBase.java
@@ -212,4 +212,9 @@
     public int getSmsCapacityOnIccForSubscriber(int subId) {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    public boolean resetAllCellBroadcastRanges(int subId) {
+        throw new UnsupportedOperationException();
+    }
 }