summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java')
-rw-r--r--java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java b/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java
new file mode 100644
index 000000000..0316a5fab
--- /dev/null
+++ b/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.incallui.answer.impl;
+
+import android.content.res.Configuration;
+import android.graphics.Point;
+import android.support.annotation.NonNull;
+import android.support.v4.app.Fragment;
+import android.view.TextureView;
+import android.view.View;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.FragmentUtils;
+import com.android.dialer.common.LogUtil;
+import com.android.incallui.video.protocol.VideoCallScreen;
+import com.android.incallui.video.protocol.VideoCallScreenDelegate;
+import com.android.incallui.video.protocol.VideoCallScreenDelegateFactory;
+import com.android.incallui.videosurface.bindings.VideoSurfaceBindings;
+
+/** Shows a video preview for an incoming call. */
+public class AnswerVideoCallScreen implements VideoCallScreen {
+ @NonNull private final Fragment fragment;
+ @NonNull private final TextureView textureView;
+ @NonNull private final VideoCallScreenDelegate delegate;
+
+ public AnswerVideoCallScreen(@NonNull Fragment fragment, @NonNull View view) {
+ this.fragment = fragment;
+
+ textureView =
+ Assert.isNotNull((TextureView) view.findViewById(R.id.incoming_preview_texture_view));
+ View overlayView =
+ Assert.isNotNull(view.findViewById(R.id.incoming_preview_texture_view_overlay));
+ view.setBackgroundColor(0xff000000);
+ delegate =
+ FragmentUtils.getParentUnsafe(fragment, VideoCallScreenDelegateFactory.class)
+ .newVideoCallScreenDelegate();
+ delegate.initVideoCallScreenDelegate(fragment.getContext(), this);
+
+ textureView.setVisibility(View.VISIBLE);
+ overlayView.setVisibility(View.VISIBLE);
+ }
+
+ public void onStart() {
+ LogUtil.i("AnswerVideoCallScreen.onStart", null);
+ delegate.onVideoCallScreenUiReady();
+ delegate.getLocalVideoSurfaceTexture().attachToTextureView(textureView);
+ }
+
+ public void onStop() {
+ LogUtil.i("AnswerVideoCallScreen.onStop", null);
+ delegate.onVideoCallScreenUiUnready();
+ }
+
+ @Override
+ public void showVideoViews(
+ boolean shouldShowPreview, boolean shouldShowRemote, boolean isRemotelyHeld) {
+ LogUtil.i(
+ "AnswerVideoCallScreen.showVideoViews",
+ "showPreview: %b, shouldShowRemote: %b",
+ shouldShowPreview,
+ shouldShowRemote);
+ }
+
+ @Override
+ public void onLocalVideoDimensionsChanged() {
+ LogUtil.i("AnswerVideoCallScreen.onLocalVideoDimensionsChanged", null);
+ updatePreviewVideoScaling();
+ }
+
+ @Override
+ public void onRemoteVideoDimensionsChanged() {}
+
+ @Override
+ public void onLocalVideoOrientationChanged() {
+ LogUtil.i("AnswerVideoCallScreen.onLocalVideoOrientationChanged", null);
+ updatePreviewVideoScaling();
+ }
+
+ @Override
+ public void updateFullscreenAndGreenScreenMode(
+ boolean shouldShowFullscreen, boolean shouldShowGreenScreen) {}
+
+ @Override
+ public Fragment getVideoCallScreenFragment() {
+ return fragment;
+ }
+
+ private void updatePreviewVideoScaling() {
+ if (textureView.getWidth() == 0 || textureView.getHeight() == 0) {
+ LogUtil.i(
+ "AnswerVideoCallScreen.updatePreviewVideoScaling", "view layout hasn't finished yet");
+ return;
+ }
+ Point cameraDimensions = delegate.getLocalVideoSurfaceTexture().getSurfaceDimensions();
+ if (cameraDimensions == null) {
+ LogUtil.i("AnswerVideoCallScreen.updatePreviewVideoScaling", "camera dimensions not set");
+ return;
+ }
+ if (isLandscape()) {
+ VideoSurfaceBindings.scaleVideoAndFillView(
+ textureView, cameraDimensions.x, cameraDimensions.y, delegate.getDeviceOrientation());
+ } else {
+ // Landscape, so dimensions are swapped
+ //noinspection SuspiciousNameCombination
+ VideoSurfaceBindings.scaleVideoAndFillView(
+ textureView, cameraDimensions.y, cameraDimensions.x, delegate.getDeviceOrientation());
+ }
+ }
+
+ private boolean isLandscape() {
+ return fragment.getResources().getConfiguration().orientation
+ == Configuration.ORIENTATION_LANDSCAPE;
+ }
+}