From 0fed7e62bfa0d8351b91d3531228a113637963a3 Mon Sep 17 00:00:00 2001 From: Sascha Haeberling Date: Mon, 14 Apr 2014 14:41:57 -0700 Subject: [PATCH] Safeguard callback receiver to prevent crashes. Bug: 13765929 It is safe to add these checks here. The receiver is only set in the constructor, and it's only created in one place, which is onCreate. And the parameter is the Activity itself, so it can never be null. This means the NPE can only happen if onCameraOpened is called after removeCallbackReceiver is called, which is in onDestroy of the activity. In this case it's safe to exit. Change-Id: Ibffd6d54679b564a11b3e83319896241f2e306ad --- src/com/android/camera/app/CameraController.java | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/com/android/camera/app/CameraController.java b/src/com/android/camera/app/CameraController.java index 78edb971a..560705a84 100644 --- a/src/com/android/camera/app/CameraController.java +++ b/src/com/android/camera/app/CameraController.java @@ -130,32 +130,42 @@ public class CameraController implements CameraManager.CameraOpenCallback, Camer @Override public void onCameraOpened(CameraManager.CameraProxy camera) { mCameraProxy = camera; - if(mRequestingCameraId == EMPTY_REQUEST) { + if (mRequestingCameraId == EMPTY_REQUEST) { // Not requesting any camera. return; } mRequestingCameraId = EMPTY_REQUEST; - mCallbackReceiver.onCameraOpened(camera); + if (mCallbackReceiver != null) { + mCallbackReceiver.onCameraOpened(camera); + } } @Override public void onCameraDisabled(int cameraId) { - mCallbackReceiver.onCameraDisabled(cameraId); + if (mCallbackReceiver != null) { + mCallbackReceiver.onCameraDisabled(cameraId); + } } @Override public void onDeviceOpenFailure(int cameraId) { - mCallbackReceiver.onDeviceOpenFailure(cameraId); + if (mCallbackReceiver != null) { + mCallbackReceiver.onDeviceOpenFailure(cameraId); + } } @Override public void onDeviceOpenedAlready(int cameraId) { - mCallbackReceiver.onDeviceOpenedAlready(cameraId); + if (mCallbackReceiver != null) { + mCallbackReceiver.onDeviceOpenedAlready(cameraId); + } } @Override public void onReconnectionFailure(CameraManager mgr) { - mCallbackReceiver.onReconnectionFailure(mgr); + if (mCallbackReceiver != null) { + mCallbackReceiver.onReconnectionFailure(mgr); + } } @Override -- 2.11.0