Add dump reset for rcs metrics

Bug: b/204820968, b/207321347
Test: adb shell am dump service com.android.phone.TelephonyDebugService
--metricsproto
Test: adb shell am dump service com.android.phone.TelephonyDebugService
--metricsproto --keep

Change-Id: Ia818d7a515a742ba8f0afb800a84ad26fafc64ee
Merged-In: Ia818d7a515a742ba8f0afb800a84ad26fafc64ee
diff --git a/src/java/com/android/internal/telephony/metrics/RcsStats.java b/src/java/com/android/internal/telephony/metrics/RcsStats.java
index 2d63d1f..694b3d5 100644
--- a/src/java/com/android/internal/telephony/metrics/RcsStats.java
+++ b/src/java/com/android/internal/telephony/metrics/RcsStats.java
@@ -56,6 +56,7 @@
 import android.telephony.ims.RcsContactPresenceTuple;
 import android.telephony.ims.RcsContactUceCapability;
 import android.telephony.ims.aidl.IRcsConfigCallback;
+import android.util.Base64;
 import android.util.IndentingPrintWriter;
 
 import com.android.ims.rcs.uce.UceStatsWriter;
@@ -82,6 +83,7 @@
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -1644,4 +1646,84 @@
         }
         pw.decreaseIndent();
     }
+
+    /**
+     * Reset all events
+     */
+    public synchronized void reset() {
+        if (mAtomsStorage == null || mAtomsStorage.mAtoms == null) {
+            return;
+        }
+
+        PersistAtomsProto.PersistAtoms metricAtoms = mAtomsStorage.mAtoms;
+
+        metricAtoms.imsRegistrationFeatureTagStats =
+                PersistAtomsProto.ImsRegistrationFeatureTagStats.emptyArray();
+        metricAtoms.rcsClientProvisioningStats =
+                PersistAtomsProto.RcsClientProvisioningStats.emptyArray();
+        metricAtoms.rcsAcsProvisioningStats =
+                PersistAtomsProto.RcsAcsProvisioningStats.emptyArray();
+        metricAtoms.sipDelegateStats = PersistAtomsProto.SipDelegateStats.emptyArray();
+        metricAtoms.sipTransportFeatureTagStats =
+                PersistAtomsProto.SipTransportFeatureTagStats.emptyArray();
+        metricAtoms.sipMessageResponse = PersistAtomsProto.SipMessageResponse.emptyArray();
+        metricAtoms.sipTransportSession = PersistAtomsProto.SipTransportSession.emptyArray();
+        metricAtoms.imsDedicatedBearerListenerEvent =
+                PersistAtomsProto.ImsDedicatedBearerListenerEvent.emptyArray();
+        metricAtoms.imsDedicatedBearerEvent =
+                PersistAtomsProto.ImsDedicatedBearerEvent.emptyArray();
+        metricAtoms.imsRegistrationServiceDescStats =
+                PersistAtomsProto.ImsRegistrationServiceDescStats.emptyArray();
+        metricAtoms.uceEventStats = PersistAtomsProto.UceEventStats.emptyArray();
+        metricAtoms.presenceNotifyEvent = PersistAtomsProto.PresenceNotifyEvent.emptyArray();
+        metricAtoms.gbaEvent = PersistAtomsProto.GbaEvent.emptyArray();
+    }
+
+    /**
+     * Convert the PersistAtomsProto into Base-64 encoded string
+     *
+     * @return Encoded string
+     */
+    public String buildLog() {
+        PersistAtomsProto.PersistAtoms log = buildProto();
+        return Base64.encodeToString(
+                PersistAtomsProto.PersistAtoms.toByteArray(log), Base64.DEFAULT);
+    }
+
+    /**
+     * Build the PersistAtomsProto
+     *
+     * @return PersistAtomsProto.PersistAtoms
+     */
+    public PersistAtomsProto.PersistAtoms buildProto() {
+        PersistAtomsProto.PersistAtoms log = new PersistAtomsProto.PersistAtoms();
+
+        PersistAtomsProto.PersistAtoms atoms = mAtomsStorage.mAtoms;
+        log.imsRegistrationFeatureTagStats = Arrays.copyOf(atoms.imsRegistrationFeatureTagStats,
+                atoms.imsRegistrationFeatureTagStats.length);
+        log.rcsClientProvisioningStats = Arrays.copyOf(atoms.rcsClientProvisioningStats,
+                atoms.rcsClientProvisioningStats.length);
+        log.rcsAcsProvisioningStats = Arrays.copyOf(atoms.rcsAcsProvisioningStats,
+                atoms.rcsAcsProvisioningStats.length);
+        log.sipDelegateStats = Arrays.copyOf(atoms.sipDelegateStats, atoms.sipDelegateStats.length);
+        log.sipTransportFeatureTagStats = Arrays.copyOf(atoms.sipTransportFeatureTagStats,
+                atoms.sipTransportFeatureTagStats.length);
+        log.sipMessageResponse = Arrays.copyOf(atoms.sipMessageResponse,
+                atoms.sipMessageResponse.length);
+        log.sipTransportSession = Arrays.copyOf(atoms.sipTransportSession,
+                atoms.sipTransportSession.length);
+        log.imsDedicatedBearerListenerEvent = Arrays.copyOf(atoms.imsDedicatedBearerListenerEvent,
+                atoms.imsDedicatedBearerListenerEvent.length);
+        log.imsDedicatedBearerEvent = Arrays.copyOf(atoms.imsDedicatedBearerEvent,
+                atoms.imsDedicatedBearerEvent.length);
+        log.imsRegistrationServiceDescStats = Arrays.copyOf(atoms.imsRegistrationServiceDescStats,
+                atoms.imsRegistrationServiceDescStats.length);
+        log.uceEventStats = Arrays.copyOf(atoms.uceEventStats, atoms.uceEventStats.length);
+        log.presenceNotifyEvent = Arrays.copyOf(atoms.presenceNotifyEvent,
+                atoms.presenceNotifyEvent.length);
+        log.gbaEvent = Arrays.copyOf(atoms.gbaEvent, atoms.gbaEvent.length);
+
+        return log;
+    }
+
 }
diff --git a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
index 2f7d998..7028d95 100644
--- a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
+++ b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
@@ -290,12 +290,14 @@
                     break;
                 case "--metricsproto":
                     pw.println(convertProtoToBase64String(buildProto()));
+                    pw.println(RcsStats.getInstance().buildLog());
                     if (reset) {
                         reset();
                     }
                     break;
                 case "--metricsprototext":
                     pw.println(buildProto().toString());
+                    pw.println(RcsStats.getInstance().buildProto().toString());
                     break;
             }
         }
@@ -747,6 +749,8 @@
                     .setRadioState(mLastRadioState.get(key)).build();
             addTelephonyEvent(event);
         }
+
+        RcsStats.getInstance().reset();
     }
 
     /**