Merge "Log camera exception via UsageStatistics." into ub-camera-glacier
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 5ead5c4..af9af0f 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -538,8 +538,9 @@
 
     @Override
     public void onCameraDisabled(int cameraId) {
-        UsageStatistics.instance().cameraFailure(eventprotos.CameraFailure.FailureReason.SECURITY,
-                null);
+        UsageStatistics.instance().cameraFailure(
+                eventprotos.CameraFailure.FailureReason.SECURITY, null,
+                UsageStatistics.NONE, UsageStatistics.NONE);
         Log.w(TAG, "Camera disabled: " + cameraId);
         CameraUtil.showErrorAndFinish(this, R.string.camera_disabled);
     }
@@ -547,7 +548,8 @@
     @Override
     public void onDeviceOpenFailure(int cameraId, String info) {
         UsageStatistics.instance().cameraFailure(
-                eventprotos.CameraFailure.FailureReason.OPEN_FAILURE, info);
+                eventprotos.CameraFailure.FailureReason.OPEN_FAILURE, info,
+                UsageStatistics.NONE, UsageStatistics.NONE);
         Log.w(TAG, "Camera open failure: " + info);
         CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
     }
@@ -561,7 +563,8 @@
     @Override
     public void onReconnectionFailure(CameraAgent mgr, String info) {
         UsageStatistics.instance().cameraFailure(
-                eventprotos.CameraFailure.FailureReason.RECONNECT_FAILURE, null);
+                eventprotos.CameraFailure.FailureReason.RECONNECT_FAILURE, null,
+                UsageStatistics.NONE, UsageStatistics.NONE);
         Log.w(TAG, "Camera reconnection failure:" + info);
         CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
     }
@@ -1325,13 +1328,20 @@
                     Log.e(TAG, "Camera error callback. error=" + errorCode);
                 }
                 @Override
-                public void onCameraException(RuntimeException ex) {
+                public void onCameraException(
+                        RuntimeException ex, String commandHistory, int action, int state) {
                     Log.e(TAG, "Camera Exception", ex);
+                    UsageStatistics.instance().cameraFailure(
+                            eventprotos.CameraFailure.FailureReason.API_RUNTIME_EXCEPTION,
+                            commandHistory, action, state);
                     onFatalError();
                 }
                 @Override
                 public void onDispatchThreadException(RuntimeException ex) {
                     Log.e(TAG, "DispatchThread Exception", ex);
+                    UsageStatistics.instance().cameraFailure(
+                            eventprotos.CameraFailure.FailureReason.API_TIMEOUT,
+                            null, UsageStatistics.NONE, UsageStatistics.NONE);
                     onFatalError();
                 }
                 private void onFatalError() {
diff --git a/src_pd/com/android/camera/util/UsageStatistics.java b/src_pd/com/android/camera/util/UsageStatistics.java
index d68dec9..6c208de 100644
--- a/src_pd/com/android/camera/util/UsageStatistics.java
+++ b/src_pd/com/android/camera/util/UsageStatistics.java
@@ -26,6 +26,7 @@
 
 public class UsageStatistics {
     public static final long VIEW_TIMEOUT_MILLIS = 0;
+    public static final int NONE = -1;
 
     private static UsageStatistics sInstance;
 
@@ -66,7 +67,7 @@
                                       Boolean volumeButtonShutter) {
     }
 
-    public void cameraFailure(int cause, String info) {
+    public void cameraFailure(int cause, String info, int agentAction, int agentState) {
     }
 
     public void changeScreen(int newScreen, Integer interactionCause) {