summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Newberger <alann@google.com>2014-11-04 10:18:41 -0800
committerAlan Newberger <alann@google.com>2014-11-04 10:29:04 -0800
commit25b78c8a18327bd73c3d4d34887dd63953aeaa8c (patch)
tree96784b2eb856f257e71893ac2f3eeb58a7e2a85b
parentc15ddae4862bb9a10b0142fac9558a5f899b1a21 (diff)
downloadandroid_frameworks_ex-25b78c8a18327bd73c3d4d34887dd63953aeaa8c.tar.gz
android_frameworks_ex-25b78c8a18327bd73c3d4d34887dd63953aeaa8c.tar.bz2
android_frameworks_ex-25b78c8a18327bd73c3d4d34887dd63953aeaa8c.zip
Ensure default handler always is set if no other error handler registered
To avoid memory leaks we set the error handler to null in activity onDestroy. But, the agent may receive callbacks after this, so ensure at minimum that we set the default logging handler to default handle errors post activity destroy. Bug: 18200874 Bug: 18202261 Change-Id: Ie7251a149ab02c474d8affd15af6b9ea48c2cdc0
-rw-r--r--camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java15
1 files changed, 10 insertions, 5 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
index cdd6993..201a905 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
@@ -55,24 +55,28 @@ class AndroidCameraAgentImpl extends CameraAgent {
private final HandlerThread mCameraHandlerThread;
private final CameraStateHolder mCameraState;
private final DispatchThread mDispatchThread;
- private CameraExceptionHandler mExceptionHandler = new CameraExceptionHandler(null) {
+
+ private static final CameraExceptionHandler sDefaultExceptionHandler =
+ new CameraExceptionHandler(null) {
@Override
public void onCameraError(int errorCode) {
- Log.w(TAG, "onCameraError called before handler set: " + errorCode);
+ Log.w(TAG, "onCameraError called with no handler set: " + errorCode);
}
@Override
public void onCameraException(RuntimeException ex, String commandHistory, int action,
int state) {
- Log.w(TAG, "onCameraException called before handler set", ex);
+ Log.w(TAG, "onCameraException called with no handler set", ex);
}
@Override
public void onDispatchThreadException(RuntimeException ex) {
- Log.w(TAG, "onDispatchThreadException called before handler set", ex);
+ Log.w(TAG, "onDispatchThreadException called with no handler set", ex);
}
};
+ private CameraExceptionHandler mExceptionHandler = sDefaultExceptionHandler;
+
AndroidCameraAgentImpl() {
mCameraHandlerThread = new HandlerThread("Camera Handler Thread");
mCameraHandlerThread.start();
@@ -117,7 +121,8 @@ class AndroidCameraAgentImpl extends CameraAgent {
@Override
public void setCameraExceptionHandler(CameraExceptionHandler exceptionHandler) {
- mExceptionHandler = exceptionHandler;
+ // In case of null set the default handler to route exceptions to logs
+ mExceptionHandler = exceptionHandler != null ? exceptionHandler : sDefaultExceptionHandler;
}
private static class AndroidCameraDeviceInfo implements CameraDeviceInfo {