From 25b78c8a18327bd73c3d4d34887dd63953aeaa8c Mon Sep 17 00:00:00 2001 From: Alan Newberger Date: Tue, 4 Nov 2014 10:18:41 -0800 Subject: 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 --- .../ex/camera2/portability/AndroidCameraAgentImpl.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'camera2') 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 { -- cgit v1.2.3