summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2014-09-02 12:08:25 -0700
committerTyler Gunn <tgunn@google.com>2014-09-02 12:08:25 -0700
commit7fc046b0f29e78d0cf5a4066c69f826ef4eda6fd (patch)
tree3ef0a3feb53f5fd5edc1ed44f36b7746dea8199b
parente0635a6b20c639f505fa356b15b2b7d82e86ebf2 (diff)
Fixing NPE in InCallCameraManager.
1. Changed InCallCameraManager to check for null context before getting the CAMERA_SERVICE. 2. Added try/catch around getSystemService call to ensure failures don't crash InCall UI. 3. Changed so that the InCallCameraManager is lazy loaded, only when it is actually used (previously it was initialized on InCall startup). Bug: 17355717 Change-Id: Ie5debaece1e5dca4d3c5b6a586a188f518696ab8
-rw-r--r--InCallUI/src/com/android/incallui/CallButtonPresenter.java12
-rw-r--r--InCallUI/src/com/android/incallui/InCallCameraManager.java18
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallPresenter.java13
3 files changed, 25 insertions, 18 deletions
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index 8a5170c88..1f7a36fed 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -41,7 +41,6 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
private boolean mAutomaticallyMuted = false;
private boolean mPreviousMuteState = false;
private boolean mShowManageConference = false;
- private InCallCameraManager mInCallCameraManager;
public CallButtonPresenter() {
}
@@ -55,7 +54,6 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
// register for call state changes last
InCallPresenter.getInstance().addListener(this);
InCallPresenter.getInstance().addIncomingCallListener(this);
- mInCallCameraManager = InCallPresenter.getInstance().getInCallCameraManager();
}
@Override
@@ -65,7 +63,6 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
InCallPresenter.getInstance().removeListener(this);
AudioModeProvider.getInstance().removeListener(this);
InCallPresenter.getInstance().removeIncomingCallListener(this);
- mInCallCameraManager = null;
}
@Override
@@ -236,14 +233,15 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
* false if we should switch to using the back-facing camera.
*/
public void switchCameraClicked(boolean useFrontFacingCamera) {
- mInCallCameraManager.setUseFrontFacingCamera(useFrontFacingCamera);
+ InCallCameraManager cameraManager = InCallPresenter.getInstance().getInCallCameraManager();
+ cameraManager.setUseFrontFacingCamera(useFrontFacingCamera);
VideoCall videoCall = mCall.getVideoCall();
if (videoCall == null) {
return;
}
- String cameraId = mInCallCameraManager.getActiveCameraId();
+ String cameraId = cameraManager.getActiveCameraId();
if (cameraId != null) {
videoCall.setCamera(cameraId);
videoCall.requestCameraCapabilities();
@@ -268,7 +266,9 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
mCall.getVideoState() | VideoProfile.VideoState.PAUSED);
videoCall.sendSessionModifyRequest(videoProfile);
} else {
- videoCall.setCamera(mInCallCameraManager.getActiveCameraId());
+ InCallCameraManager cameraManager = InCallPresenter.getInstance().
+ getInCallCameraManager();
+ videoCall.setCamera(cameraManager.getActiveCameraId());
VideoProfile videoProfile = new VideoProfile(
mCall.getVideoState() & ~VideoProfile.VideoState.PAUSED);
videoCall.sendSessionModifyRequest(videoProfile);
diff --git a/InCallUI/src/com/android/incallui/InCallCameraManager.java b/InCallUI/src/com/android/incallui/InCallCameraManager.java
index 084a98f92..ded9387f3 100644
--- a/InCallUI/src/com/android/incallui/InCallCameraManager.java
+++ b/InCallUI/src/com/android/incallui/InCallCameraManager.java
@@ -103,8 +103,22 @@ public class InCallCameraManager {
* @param context The context.
*/
private void initializeCameraList(Context context) {
- CameraManager cameraManager = (CameraManager) context.getSystemService(
- Context.CAMERA_SERVICE);
+ if (context == null) {
+ return;
+ }
+
+ CameraManager cameraManager = null;
+ try {
+ cameraManager = (CameraManager) context.getSystemService(
+ Context.CAMERA_SERVICE);
+ } catch (Exception e) {
+ Log.e(this, "Could not get camera service.");
+ return;
+ }
+
+ if (cameraManager == null) {
+ return;
+ }
String[] cameraIds = {};
try {
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index f218de265..452360554 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -125,11 +125,6 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
private boolean mIsVideoCall;
/**
- * Determines the active camera for transmitted video.
- */
- private InCallCameraManager mInCallCameraManager;
-
- /**
* Determines the device orientation (portrait/lanscape).
*/
private int mDeviceOrientation;
@@ -183,8 +178,6 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
InCallVideoCallListenerNotifier.getInstance().addSurfaceChangeListener(this);
InCallVideoCallListenerNotifier.getInstance().addVideoEventListener(this);
InCallVideoCallListenerNotifier.getInstance().addSessionModificationListener(this);
-
- mInCallCameraManager = InCallPresenter.getInstance().getInCallCameraManager();
mIsVideoCall = false;
}
@@ -203,8 +196,6 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
InCallVideoCallListenerNotifier.getInstance().removeSurfaceChangeListener(this);
InCallVideoCallListenerNotifier.getInstance().removeVideoEventListener(this);
InCallVideoCallListenerNotifier.getInstance().removeSessionModificationListener(this);
-
- mInCallCameraManager = null;
}
/**
@@ -425,7 +416,9 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
}
mPreviewSurfaceState = PreviewSurfaceState.CAMERA_SET;
- mVideoCall.setCamera(mInCallCameraManager.getActiveCameraId());
+ InCallCameraManager cameraManager = InCallPresenter.getInstance().
+ getInCallCameraManager();
+ mVideoCall.setCamera(cameraManager.getActiveCameraId());
mVideoCall.requestCameraCapabilities();
if (ui.isDisplayVideoSurfaceCreated()) {