OSDN Git Service

Add history info for camera open failure log.
authorAngus Kong <shkong@google.com>
Fri, 25 Apr 2014 18:41:23 +0000 (11:41 -0700)
committerAngus Kong <shkong@google.com>
Mon, 28 Apr 2014 22:02:55 +0000 (15:02 -0700)
bug:14365703
Change-Id: I4b2259e12121cac5b8165f5c5dbacf9cb3a936a6

src/com/android/camera/CameraActivity.java
src/com/android/camera/app/AndroidCameraManagerImpl.java
src/com/android/camera/app/CameraController.java
src/com/android/camera/app/CameraManager.java

index 287b93a..a5a2914 100644 (file)
@@ -70,7 +70,6 @@ import android.widget.ImageView;
 import android.widget.ShareActionProvider;
 
 import com.android.camera.app.AppController;
-import com.android.camera.app.CameraApp;
 import com.android.camera.app.CameraAppUI;
 import com.android.camera.app.CameraController;
 import com.android.camera.app.CameraManager;
@@ -486,7 +485,8 @@ public class CameraActivity extends Activity
     }
 
     @Override
-    public void onDeviceOpenFailure(int cameraId) {
+    public void onDeviceOpenFailure(int cameraId, String info) {
+        // TODO: send "info" to UsageStatistics logging.
         UsageStatistics.instance().cameraFailure(
                 eventprotos.CameraFailure.FailureReason.OPEN_FAILURE);
         CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
index 3c72cfb..5400395 100644 (file)
@@ -49,6 +49,7 @@ class AndroidCameraManagerImpl implements CameraManager {
     private static final Log.Tag TAG = new Log.Tag("AndroidCamMgrImpl");
     private static final long CAMERA_OPERATION_TIMEOUT_MS = 2500;
     private static final long MAX_MESSAGE_QUEUE_LENGTH = 256;
+    private static final int MAX_HISTORY_SIZE = 400;
 
     private Parameters mParameters;
     private boolean mParametersIsDirty;
@@ -237,8 +238,11 @@ class AndroidCameraManagerImpl implements CameraManager {
      * The handler on which the actual camera operations happen.
      */
     private class CameraHandler extends Handler {
+
         private Camera mCamera;
 
+        private LinkedList<Integer> mMsgHistory;
+
         private class CaptureCallbacks {
             public final ShutterCallback mShutter;
             public final PictureCallback mRaw;
@@ -256,6 +260,20 @@ class AndroidCameraManagerImpl implements CameraManager {
 
         CameraHandler(Looper looper) {
             super(looper);
+            mMsgHistory = new LinkedList<Integer>();
+            // We add a -1 at the beginning to mark the very beginning of the
+            // history.
+            mMsgHistory.offerLast(-1);
+        }
+
+        private String generateHistoryString(int cameraId) {
+            String info = new String("HIST");
+            info += "_ID" + cameraId;
+            for (Integer msg : mMsgHistory) {
+                info = info + '_' + msg.toString();
+            }
+            info += "_HEND";
+            return info;
         }
 
         private void startFaceDetection() {
@@ -314,6 +332,10 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         @Override
         public void handleMessage(final Message msg) {
+            mMsgHistory.offerLast(msg.what);
+            while (mMsgHistory.size() > MAX_HISTORY_SIZE) {
+                mMsgHistory.pollFirst();
+            }
             try {
                 switch (msg.what) {
                     case OPEN_CAMERA: {
@@ -340,7 +362,7 @@ class AndroidCameraManagerImpl implements CameraManager {
                             }
                         } else {
                             if (openCallback != null) {
-                                openCallback.onDeviceOpenFailure(cameraId);
+                                openCallback.onDeviceOpenFailure(cameraId, generateHistoryString(cameraId));
                             }
                         }
                         break;
@@ -528,8 +550,10 @@ class AndroidCameraManagerImpl implements CameraManager {
                 } else {
                     if (mCamera == null) {
                         if (msg.what == OPEN_CAMERA) {
+                            final int cameraId = msg.arg1;
                             if (msg.obj != null) {
-                                ((CameraOpenCallback) msg.obj).onDeviceOpenFailure(msg.arg1);
+                                ((CameraOpenCallback) msg.obj).onDeviceOpenFailure(
+                                        msg.arg1, generateHistoryString(cameraId));
                             }
                         } else {
                             Log.w(TAG, "Cannot handle message " + msg.what + ", mCamera is null.");
@@ -1451,11 +1475,11 @@ class AndroidCameraManagerImpl implements CameraManager {
         }
 
         @Override
-        public void onDeviceOpenFailure(final int cameraId) {
+        public void onDeviceOpenFailure(final int cameraId, final String info) {
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    mCallback.onDeviceOpenFailure(cameraId);
+                    mCallback.onDeviceOpenFailure(cameraId, info);
                 }
             });
         }
index 560705a..aa046ff 100644 (file)
@@ -148,9 +148,9 @@ public class CameraController implements CameraManager.CameraOpenCallback, Camer
     }
 
     @Override
-    public void onDeviceOpenFailure(int cameraId) {
+    public void onDeviceOpenFailure(int cameraId, String info) {
         if (mCallbackReceiver != null) {
-            mCallbackReceiver.onDeviceOpenFailure(cameraId);
+            mCallbackReceiver.onDeviceOpenFailure(cameraId, info);
         }
     }
 
index 6c295c8..c8c060a 100644 (file)
@@ -137,8 +137,9 @@ public interface CameraManager {
          * caught.
          *
          * @param cameraId The camera with the hardware failure.
+         * @param info The extra info regarding this failure.
          */
-        public void onDeviceOpenFailure(int cameraId);
+        public void onDeviceOpenFailure(int cameraId, String info);
 
         /**
          * Callback when trying to open the camera which is already opened.