summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSai Kumar Sanagavarapu <ssanagav@codeaurora.org>2015-03-20 11:50:19 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-03-26 22:06:43 -0700
commita70d2697103d1dd667aa0f067d263b75fe65c53c (patch)
treeb0b26caf9166a0eee7bb60bb6af10cc873791e75 /src
parentd343fc2bef002a3ceb4c3414fdac57c4bae11c59 (diff)
downloadandroid_packages_apps_Snap-a70d2697103d1dd667aa0f067d263b75fe65c53c.tar.gz
android_packages_apps_Snap-a70d2697103d1dd667aa0f067d263b75fe65c53c.tar.bz2
android_packages_apps_Snap-a70d2697103d1dd667aa0f067d263b75fe65c53c.zip
SnapdragonCamera: Handle Camera device errors gracefully.
Handle Camera device errors from lower layers gracefully by finishing the activity and there by closing camera session and app. Also, display a toast message signifying the error because of which camera app is being shutdown. Change-Id: I86c4caf174356148bd4725329ea13ec82e944b94
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/CameraErrorCallback.java42
-rw-r--r--src/com/android/camera/PhotoModule.java1
-rw-r--r--src/com/android/camera/VideoModule.java2
-rw-r--r--src/com/android/camera/WideAnglePanoramaModule.java2
4 files changed, 39 insertions, 8 deletions
diff --git a/src/com/android/camera/CameraErrorCallback.java b/src/com/android/camera/CameraErrorCallback.java
index 7029ac427..dd627bd0a 100644
--- a/src/com/android/camera/CameraErrorCallback.java
+++ b/src/com/android/camera/CameraErrorCallback.java
@@ -17,20 +17,50 @@
package com.android.camera;
import android.util.Log;
+import android.widget.Toast;
+import com.android.camera.ui.RotateTextToast;
+import org.codeaurora.snapcam.R;
public class CameraErrorCallback
implements android.hardware.Camera.ErrorCallback {
private static final String TAG = "CameraErrorCallback";
+ public CameraActivity mActivity = null;
+ //custom error code for thermal shutdown. This should be in sync
+ //with HAL.
+ private static final int THERMAL_SHUTDOWN = 50;
+
+ public void setActivity(CameraActivity activity) {
+ mActivity = activity;
+ }
@Override
public void onError(int error, android.hardware.Camera camera) {
Log.e(TAG, "Got camera error callback. error=" + error);
- if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED
- || error == android.hardware.Camera.CAMERA_ERROR_UNKNOWN) {
- // We are not sure about the current state of the app (in preview or
- // snapshot or recording). Closing the app is better than creating a
- // new Camera object.
- throw new RuntimeException("Media server died.");
+ // We are not sure about the current state of the app (in preview or
+ // snapshot or recording). Closing the app is better than creating a
+ // new Camera object.
+ if (mActivity != null) {
+ final int resId;
+ switch (error) {
+ case android.hardware.Camera.CAMERA_ERROR_SERVER_DIED:
+ resId = R.string.camera_server_died;
+ break;
+ case THERMAL_SHUTDOWN:
+ resId = R.string.camera_thermal_shutdown;
+ break;
+ case android.hardware.Camera.CAMERA_ERROR_UNKNOWN:
+ default:
+ resId = R.string.camera_unknown_error;
+ break;
+ }
+ mActivity.runOnUiThread(new Runnable() {
+ public void run() {
+ RotateTextToast.makeText(mActivity, resId, Toast.LENGTH_LONG).show();
+ mActivity.finish();
+ }
+ });
+ } else {
+ throw new RuntimeException("Unknown error");
}
}
}
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 3e98ccb75..af786321a 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -2626,6 +2626,7 @@ public class PhotoModule
Log.w(TAG, "startPreview: parameters for preview are not ready.");
return;
}
+ mErrorCallback.setActivity(mActivity);
mCameraDevice.setErrorCallback(mErrorCallback);
// ICS camera frameworks has a bug. Face detection state is not cleared 1589
// after taking a picture. Stop the preview to work around it. The bug
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 17b8ce1ce..c48bde709 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -1073,7 +1073,7 @@ public class VideoModule implements CameraModule,
mStartPrevPending = false;
return;
}
-
+ mErrorCallback.setActivity(mActivity);
mCameraDevice.setErrorCallback(mErrorCallback);
if (mPreviewing == true) {
stopPreview();
diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java
index e7025a1a7..d45e47925 100644
--- a/src/com/android/camera/WideAnglePanoramaModule.java
+++ b/src/com/android/camera/WideAnglePanoramaModule.java
@@ -1038,7 +1038,7 @@ public class WideAnglePanoramaModule
// UI is not ready.
return;
}
-
+ mErrorCallback.setActivity(mActivity);
mCameraDevice.setErrorCallback(mErrorCallback);
// This works around a driver issue. startPreview may fail if