diff options
author | Vinit Deshpande <vinitd@google.com> | 2015-04-15 00:29:47 -0700 |
---|---|---|
committer | Vinit Deshpande <vinitd@google.com> | 2015-04-15 00:29:47 -0700 |
commit | 01ad85125dd7cbe1107c679dcc362b9487700b9a (patch) | |
tree | f7b9a01c7e24f699fbc6fb806607478a207b563f /InCallUI/src/com/android/incallui/VideoCallPresenter.java | |
parent | 7fd5e5b73e2279d07eed498c46565e7bb170a3b0 (diff) | |
parent | 9e0d3a386a48d5f32dacb45bab96f0ea5752be36 (diff) |
am b04d61a..697f674 from mirror-m-wireless-internal-release
697f674 Fix orientation of preview surface when device rotated.
17de502 Merge "Always allow landscape mode if video call is the primary call" into m-wireless-dev
3692e77 Always allow landscape mode if video call is the primary call
a77ad8d Video calling landscape changes to match specs
cb74fc0 Merge "Simplify and rewire in-call buttons" into m-wireless-dev
ed0775d Simplify and rewire in-call buttons
80a1aad Hide incoming video until call is connected.
4f2a70b Merge "Cleanup AnswerFragment glowpad UI" into m-wireless-dev
6591f05 Merge "Initial refactoring for call buttons" into m-wireless-dev
c70a63c Initial refactoring for call buttons
4a63afd Hide end call button when video upgrade glowpad is showing
7ba13e9 Cleanup AnswerFragment glowpad UI
6b2b8df Show progress spinner when upgrading to video
c02794b Merge "Cleanup of Video Call pause functionality." into m-wireless-dev
bec5807 Standardize fragment layout names
bc65cbc Adding video call icon in secondary call info.
Diffstat (limited to 'InCallUI/src/com/android/incallui/VideoCallPresenter.java')
-rw-r--r-- | InCallUI/src/com/android/incallui/VideoCallPresenter.java | 95 |
1 files changed, 67 insertions, 28 deletions
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java index 43eef4b50..56f312f63 100644 --- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java +++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java @@ -65,7 +65,7 @@ import android.os.SystemProperties; * When downgrading to an audio-only video state, the {@code VideoCallPresenter} nulls both * surfaces. */ -public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi> implements +public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi> implements IncomingCallListener, InCallOrientationListener, InCallStateListener, InCallDetailsListener, SurfaceChangeListener, VideoEventListener, InCallVideoCallListenerNotifier.SessionModificationListener { @@ -167,7 +167,6 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi */ private int mCurrentCallSubstate; - /** Handler which resets request state to NO_REQUEST after an interval. */ private Handler mSessionModificationResetHandler; private static final long SESSION_MODIFICATION_RESET_DELAY_MS = 3000; @@ -339,11 +338,11 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi toggleFullScreen(); } - /** * Handles incoming calls. * - * @param state The in call state. + * @param oldState The old in call state. + * @param newState The new in call state. * @param call The call. */ @Override @@ -414,12 +413,14 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi + " hasVideoStateChanged=" + hasVideoStateChanged + " isVideoMode=" + isVideoMode()); - if (!hasVideoStateChanged) { return;} + if (!hasVideoStateChanged) { + return; + } updateCameraSelection(call); if (isVideoCall) { - enterVideoMode(call.getVideoCall(), call.getVideoState()); + enterVideoMode(call); } else if (isVideoMode()) { exitVideoMode(); } @@ -447,6 +448,9 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi if (!Objects.equals(prevCameraId, newCameraId) && CallUtils.isActiveVideoCall(call)) { enableCamera(call.getVideoCall(), true); } + + // Make sure we hide or show the video UI if needed. + showVideoUi(call.getVideoState(), call.getState()); } private void checkForCallSubstateChange(Call call) { @@ -487,7 +491,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi Log.d(this, "onPrimaryCallChanged: Entering video mode..."); updateCameraSelection(newPrimaryCall); - enterVideoMode(newPrimaryCall.getVideoCall(), newPrimaryCall.getVideoState()); + enterVideoMode(newPrimaryCall); } } @@ -538,6 +542,11 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi checkForVideoCallChange(call); checkForVideoStateChange(call); checkForCallStateChange(call); + checkForOrientationAllowedChange(call); + } + + private void checkForOrientationAllowedChange(Call call) { + InCallPresenter.getInstance().setInCallAllowsOrientationChange(CallUtils.isVideoCall(call)); } /** @@ -577,7 +586,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi } if (CallUtils.isVideoCall(call) && hasChanged) { - enterVideoMode(call.getVideoCall(), call.getVideoState()); + enterVideoMode(call); } } @@ -594,7 +603,10 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi * Enters video mode by showing the video surfaces and making other adjustments (eg. audio). * TODO(vt): Need to adjust size and orientation of preview surface here. */ - private void enterVideoMode(VideoCall videoCall, int newVideoState) { + private void enterVideoMode(Call call) { + VideoCall videoCall = call.getVideoCall(); + int newVideoState = call.getVideoState(); + Log.d(this, "enterVideoMode videoCall= " + videoCall + " videoState: " + newVideoState); VideoCallUi ui = getUi(); if (ui == null) { @@ -602,8 +614,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi return; } - showVideoUi(newVideoState); - InCallPresenter.getInstance().setInCallAllowsOrientationChange(true); + showVideoUi(newVideoState, call.getState()); // Communicate the current camera to telephony and make a request for the camera // capabilities. @@ -693,9 +704,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi private void exitVideoMode() { Log.d(this, "exitVideoMode"); - InCallPresenter.getInstance().setInCallAllowsOrientationChange(false); - - showVideoUi(VideoProfile.VideoState.AUDIO_ONLY); + showVideoUi(VideoProfile.VideoState.AUDIO_ONLY, Call.State.ACTIVE); enableCamera(mVideoCall, false); Log.d(this, "exitVideoMode mIsFullScreen: " + mIsFullScreen); @@ -707,21 +716,28 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi } /** - * Show video Ui depends on video state. + * Based on the current {@link VideoProfile.VideoState} and {@code CallState}, show or hide the + * incoming and outgoing video surfaces. The outgoing video surface is shown any time video + * is transmitting. The incoming video surface is shown whenever the video is un-paused and + * active. + * + * @param videoState The video state. + * @param callState The call state. */ - private void showVideoUi(int videoState) { + private void showVideoUi(int videoState, int callState) { VideoCallUi ui = getUi(); if (ui == null) { Log.e(this, "showVideoUi, VideoCallUi is null returning"); return; } - + boolean isPaused = VideoProfile.VideoState.isPaused(videoState); + boolean isCallActive = callState == Call.State.ACTIVE; if (VideoProfile.VideoState.isBidirectional(videoState)) { - ui.showVideoViews(true, true); + ui.showVideoViews(true, !isPaused && isCallActive); } else if (VideoProfile.VideoState.isTransmissionEnabled(videoState)) { ui.showVideoViews(true, false); } else if (VideoProfile.VideoState.isReceptionEnabled(videoState)) { - ui.showVideoViews(false, true); + ui.showVideoViews(false, !isPaused && isCallActive); } else { ui.hideVideoUi(); } @@ -818,6 +834,29 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi } mPreviewSurfaceState = PreviewSurfaceState.CAPABILITIES_RECEIVED; + changePreviewDimensions(width, height); + + // Check if the preview surface is ready yet; if it is, set it on the {@code VideoCall}. + // If it not yet ready, it will be set when when creation completes. + if (ui.isPreviewVideoSurfaceCreated()) { + mPreviewSurfaceState = PreviewSurfaceState.SURFACE_SET; + mVideoCall.setPreviewSurface(ui.getPreviewVideoSurface()); + } + } + + /** + * Changes the dimensions of the preview surface. + * + * @param width The new width. + * @param height The new height. + */ + private void changePreviewDimensions(int width, int height) { + VideoCallUi ui = getUi(); + if (ui == null) { + return; + } + + // Resize the surface used to display the preview video ui.setPreviewSurfaceSize(width, height); // Configure the preview surface to the correct aspect ratio. @@ -825,14 +864,10 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi if (width > 0 && height > 0) { aspectRatio = (float) width / (float) height; } - setPreviewSize(mDeviceOrientation, aspectRatio); - // Check if the preview surface is ready yet; if it is, set it on the {@code VideoCall}. - // If it not yet ready, it will be set when when creation completes. - if (ui.isPreviewVideoSurfaceCreated()) { - mPreviewSurfaceState = PreviewSurfaceState.SURFACE_SET; - mVideoCall.setPreviewSurface(ui.getPreviewVideoSurface()); - } + // Resize the textureview housing the preview video and rotate it appropriately based on + // the device orientation + setPreviewSize(mDeviceOrientation, aspectRatio); } /** @@ -874,8 +909,11 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi */ @Override public void onDeviceOrientationChanged(int orientation) { - Log.d(this, "onDeviceOrientationChanged: orientation=" + orientation); mDeviceOrientation = orientation; + Point previewDimensions = getUi().getPreviewSize(); + Log.d(this, "onDeviceOrientationChanged: orientation=" + orientation + " size: " + + previewDimensions); + changePreviewDimensions(previewDimensions.x, previewDimensions.y); } @Override @@ -939,6 +977,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi @Override public void onDowngradeToAudio(Call call) { + call.setSessionModificationState(Call.SessionModificationState.NO_REQUEST); // exit video mode exitVideoMode(); } @@ -1102,8 +1141,8 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi void setCallDataUsage(Context context, long dataUsage); void displayCallSessionEvent(int event); Point getScreenSize(); + Point getPreviewSize(); void cleanupSurfaces(); - boolean isActivityRestart(); void showCallSubstateChanged(int callSubstate); } } |