Add CB metrics from framework

Bug: 154555092
Test: manually verify using testdrive
Change-Id: I74a260e8fad5f36f0f94b6a8e13ca12c7457a1bc
diff --git a/Android.bp b/Android.bp
index eb0f8c8..3f87578 100644
--- a/Android.bp
+++ b/Android.bp
@@ -61,6 +61,7 @@
         ":framework-telephony-common-shared-srcs",
         ":net-utils-telephony-common-srcs",
         ":statslog-telephony-java-gen",
+        ":statslog-cellbroadcast-java-gen",
         "src/java/**/I*.aidl",
         "src/java/**/*.logtags",
     ],
diff --git a/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java b/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java
index eb25dbe..a991153 100644
--- a/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java
+++ b/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java
@@ -37,6 +37,7 @@
 import android.util.Log;
 import android.util.Pair;
 
+import com.android.cellbroadcastservice.CellBroadcastStatsLog;
 import com.android.internal.telephony.cdma.SmsMessage;
 
 import java.io.FileDescriptor;
@@ -146,7 +147,11 @@
                         return;
                     }
                     if (sServiceConnection.mService == null) {
-                        Log.d(TAG, "No connection to CB module, ignoring message.");
+                        final String errorMessage = "sServiceConnection.mService is null, ignoring message.";
+                        Log.d(TAG, errorMessage);
+                        CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_ERROR,
+                                CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_ERROR__TYPE__NO_CONNECTION_TO_CB_SERVICE,
+                                errorMessage);
                         return;
                     }
                     try {
@@ -155,15 +160,24 @@
                                         sServiceConnection.mService);
                         if (msg.what == EVENT_NEW_GSM_SMS_CB) {
                             mLocalLog.log("GSM SMS CB for phone " + mPhone.getPhoneId());
+                            CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_REPORTED,
+                                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_REPORTED__TYPE__GSM,
+                                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_REPORTED__SOURCE__FRAMEWORK);
                             cellBroadcastService.handleGsmCellBroadcastSms(mPhone.getPhoneId(),
                                     (byte[]) ((AsyncResult) msg.obj).result);
                         } else if (msg.what == EVENT_NEW_CDMA_SMS_CB) {
                             mLocalLog.log("CDMA SMS CB for phone " + mPhone.getPhoneId());
                             SmsMessage sms = (SmsMessage) msg.obj;
+                            CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_REPORTED,
+                                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_REPORTED__TYPE__CDMA,
+                                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_REPORTED__SOURCE__FRAMEWORK);
                             cellBroadcastService.handleCdmaCellBroadcastSms(mPhone.getPhoneId(),
                                     sms.getEnvelopeBearerData(), sms.getEnvelopeServiceCategory());
                         } else if (msg.what == EVENT_NEW_CDMA_SCP_MESSAGE) {
                             mLocalLog.log("CDMA SCP message for phone " + mPhone.getPhoneId());
+                            CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_REPORTED,
+                                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_REPORTED__TYPE__CDMA_SPC,
+                                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_REPORTED__SOURCE__FRAMEWORK);
                             Pair<SmsMessage, RemoteCallback> smsAndCallback =
                                     (Pair<SmsMessage, RemoteCallback>) msg.obj;
                             SmsMessage sms = smsAndCallback.first;
@@ -174,10 +188,13 @@
                                     callback);
                         }
                     } catch (RemoteException e) {
-                        Log.e(TAG, "Failed to connect to default app: "
-                                + mCellBroadcastServicePackage + " err: " + e.toString());
-                        mLocalLog.log("Failed to connect to default app: "
-                                + mCellBroadcastServicePackage + " err: " + e.toString());
+                        final String errorMessage = "Failed to connect to default app: "
+                                + mCellBroadcastServicePackage + " err: " + e.toString();
+                        Log.e(TAG, errorMessage);
+                        mLocalLog.log(errorMessage);
+                        CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_ERROR,
+                                CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_ERROR__TYPE__NO_CONNECTION_TO_CB_SERVICE,
+                                errorMessage);
                         mContext.unbindService(sServiceConnection);
                         sServiceConnection = null;
                     }
@@ -191,8 +208,12 @@
                         Context.BIND_AUTO_CREATE);
                 Log.d(TAG, "serviceWasBound=" + serviceWasBound);
                 if (!serviceWasBound) {
-                    Log.e(TAG, "Unable to bind to service");
-                    mLocalLog.log("Unable to bind to service");
+                    final String errorMessage = "Unable to bind to service";
+                    Log.e(TAG, errorMessage);
+                    mLocalLog.log(errorMessage);
+                    CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_ERROR,
+                            CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_ERROR__TYPE__NO_CONNECTION_TO_CB_SERVICE,
+                            errorMessage);
                     return;
                 }
             } else {
@@ -201,8 +222,12 @@
             mPhone.mCi.setOnNewGsmBroadcastSms(mModuleCellBroadcastHandler, EVENT_NEW_GSM_SMS_CB,
                     null);
         } else {
-            Log.e(TAG, "Unable to bind service; no cell broadcast service found");
-            mLocalLog.log("Unable to bind service; no cell broadcast service found");
+            final String errorMessage = "Unable to bind service; no cell broadcast service found";
+            Log.e(TAG, errorMessage);
+            mLocalLog.log(errorMessage);
+            CellBroadcastStatsLog.write(CellBroadcastStatsLog.CB_MESSAGE_ERROR,
+                    CellBroadcastStatsLog.CELL_BROADCAST_MESSAGE_ERROR__TYPE__NO_CONNECTION_TO_CB_SERVICE,
+                    errorMessage);
         }
     }