diff options
author | Tyler Gunn <tgunn@google.com> | 2014-09-02 12:08:25 -0700 |
---|---|---|
committer | Tyler Gunn <tgunn@google.com> | 2014-09-02 12:08:25 -0700 |
commit | 7fc046b0f29e78d0cf5a4066c69f826ef4eda6fd (patch) | |
tree | 3ef0a3feb53f5fd5edc1ed44f36b7746dea8199b /InCallUI | |
parent | e0635a6b20c639f505fa356b15b2b7d82e86ebf2 (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
Diffstat (limited to 'InCallUI')
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()) { |