summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/camera/AndroidCameraManagerImpl.java28
-rw-r--r--src/com/android/camera/CameraActivity.java9
-rw-r--r--src/com/android/camera/CameraManager.java9
-rw-r--r--src_pd/com/android/camera/util/UsageStatistics.java1
4 files changed, 43 insertions, 4 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index 97ec6af18..e67c7b463 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -118,6 +118,8 @@ class AndroidCameraManagerImpl implements CameraManager {
}
private class CameraHandler extends Handler {
+ CameraOpenErrorCallbackForward errorCbInstance;
+
CameraHandler(Looper looper) {
super(looper);
}
@@ -251,6 +253,7 @@ class AndroidCameraManagerImpl implements CameraManager {
return;
}
mCamera.release();
+ errorCbInstance = null;
mCamera = null;
return;
@@ -284,7 +287,13 @@ class AndroidCameraManagerImpl implements CameraManager {
return;
case START_PREVIEW_ASYNC:
- mCamera.startPreview();
+ try {
+ mCamera.startPreview();
+ } catch (Exception e) {
+ e.printStackTrace();
+ if (errorCbInstance != null)
+ errorCbInstance.onStartPreviewFailure(msg.arg1);
+ }
return;
case STOP_PREVIEW:
@@ -415,9 +424,10 @@ class AndroidCameraManagerImpl implements CameraManager {
@Override
public CameraManager.CameraProxy cameraOpen(
Handler handler, int cameraId, CameraOpenErrorCallback callback) {
- mCameraHandler.obtainMessage(OPEN_CAMERA, cameraId, 0,
- CameraOpenErrorCallbackForward.getNewInstance(
- handler, callback)).sendToTarget();
+ mCameraHandler.errorCbInstance = CameraOpenErrorCallbackForward
+ .getNewInstance(handler, callback);
+ mCameraHandler.obtainMessage(OPEN_CAMERA, cameraId, 0, mCameraHandler.errorCbInstance)
+ .sendToTarget();
mCameraHandler.waitDone();
if (mCamera != null) {
return new AndroidCameraProxyImpl();
@@ -990,5 +1000,15 @@ class AndroidCameraManagerImpl implements CameraManager {
}
});
}
+
+ @Override
+ public void onStartPreviewFailure(final int cameraId) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onStartPreviewFailure(cameraId);
+ }
+ });
+ }
}
}
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index b2705e2b2..186fa514a 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -320,6 +320,15 @@ public class CameraActivity extends Activity
CameraUtil.showErrorAndFinish(CameraActivity.this,
R.string.cannot_connect_camera);
}
+
+ @Override
+ public void onStartPreviewFailure(int cameraId) {
+ UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA,
+ UsageStatistics.ACTION_START_PREVIEW_FAIL, "startpreview");
+
+ CameraUtil.showErrorAndFinish(CameraActivity.this,
+ R.string.cannot_connect_camera);
+ }
};
// update the status of storage space when SD card status changed.
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java
index f6afce854..d379a2fe0 100644
--- a/src/com/android/camera/CameraManager.java
+++ b/src/com/android/camera/CameraManager.java
@@ -130,6 +130,15 @@ public interface CameraManager {
* with the reconnect failure.
*/
public void onReconnectionFailure(CameraManager mgr);
+
+ /**
+ * Callback when startPreview failure runtime exception is
+ * caught.
+ *
+ * @param cameraId The camera with the hardware failure.
+ */
+ public void onStartPreviewFailure(int cameraId);
+
}
/**
diff --git a/src_pd/com/android/camera/util/UsageStatistics.java b/src_pd/com/android/camera/util/UsageStatistics.java
index 98dc89c9f..b39dcf137 100644
--- a/src_pd/com/android/camera/util/UsageStatistics.java
+++ b/src_pd/com/android/camera/util/UsageStatistics.java
@@ -31,6 +31,7 @@ public class UsageStatistics {
public static final String ACTION_FOREGROUNDED = "Foregrounded";
public static final String ACTION_OPEN_FAIL = "OpenFailure";
+ public static final String ACTION_START_PREVIEW_FAIL = "StartPreviewFailure";
public static final String ACTION_SCREEN_CHANGED = "ScreenChanged";
public static final String ACTION_FILMSTRIP = "Filmstrip";
public static final String ACTION_TOUCH_FOCUS= "TouchFocus";