diff options
author | Sai Kumar Sanagavarapu <ssanagav@codeaurora.org> | 2015-03-20 11:50:19 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-03-26 22:06:43 -0700 |
commit | a70d2697103d1dd667aa0f067d263b75fe65c53c (patch) | |
tree | b0b26caf9166a0eee7bb60bb6af10cc873791e75 | |
parent | d343fc2bef002a3ceb4c3414fdac57c4bae11c59 (diff) | |
download | android_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
-rw-r--r-- | res/values/qcomstrings.xml | 4 | ||||
-rw-r--r-- | src/com/android/camera/CameraErrorCallback.java | 42 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 1 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaModule.java | 2 |
5 files changed, 43 insertions, 8 deletions
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 5bab9841b..0742577fc 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -886,5 +886,9 @@ <string name="text_tsmakeup_alert_quit">Quit</string> <string name="all_in_focus">All in Focus</string> + + <string name="camera_thermal_shutdown">Phone overheated, closing camera.</string> + <string name="camera_server_died">Media server died, closing camera.</string> + <string name="camera_unknown_error">Unknown error, closing camera.</string> </resources> 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 |