summaryrefslogtreecommitdiff
path: root/InCallUI
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2015-04-13 16:24:21 -0700
committerTyler Gunn <tgunn@google.com>2015-04-13 23:36:37 +0000
commit9e0d3a386a48d5f32dacb45bab96f0ea5752be36 (patch)
tree47064c7edff5c7a13dd163434555731a92955023 /InCallUI
parentb41550c23c84adefd90ecb2c667dc5832739ef1c (diff)
Fix orientation of preview surface when device rotated.
- Cleaned up some unused methods in InCallActivity. - In onDeviceOrientationChanged, handle orientatoin change by resizing surface. - Fixed setPreviewSize which was not rotating the surface the appropriate way (ensured it was setting a transform on the surface, and also made sure that the correct dimensions were being passed in). Bug: 19850018 Change-Id: Ia9324ce6bad5a797839e69ba20244f2bcc44acb5
Diffstat (limited to 'InCallUI')
-rw-r--r--InCallUI/src/com/android/incallui/InCallActivity.java15
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallFragment.java47
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallPresenter.java43
3 files changed, 66 insertions, 39 deletions
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 873c288a4..601a5155d 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -448,16 +448,11 @@ public class InCallActivity extends Activity {
return false;
}
- @Override
- public void onConfigurationChanged(Configuration config) {
- InCallPresenter.getInstance().getProximitySensor().onConfigurationChanged(config);
- Log.d(this, "onConfigurationChanged "+config.orientation);
-
- doOrientationChanged(config.orientation);
- super.onConfigurationChanged(config);
- }
-
-
+ /**
+ * Handles changes in device orientation.
+ *
+ * @param orientation The new device orientation.
+ */
private void doOrientationChanged(int orientation) {
Log.d(this, "doOrientationChanged prevOrientation=" + sCurrentOrientation +
" newOrientation=" + orientation);
diff --git a/InCallUI/src/com/android/incallui/VideoCallFragment.java b/InCallUI/src/com/android/incallui/VideoCallFragment.java
index 11b5bc65f..1d711a882 100644
--- a/InCallUI/src/com/android/incallui/VideoCallFragment.java
+++ b/InCallUI/src/com/android/incallui/VideoCallFragment.java
@@ -19,6 +19,7 @@ package com.android.incallui;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.SurfaceTexture;
import android.os.Bundle;
@@ -88,11 +89,6 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
private View mVideoViews;
/**
- * {@code True} when the entering the activity again after a restart due to orientation change.
- */
- private boolean mIsActivityRestart;
-
- /**
* {@code True} when the layout of the activity has been completed.
*/
private boolean mIsLayoutComplete = false;
@@ -385,12 +381,20 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
Log.e(this, "onClick: Presenter is null.");
}
}
+
+ /**
+ * Returns the dimensions of the surface.
+ *
+ * @return The dimensions of the surface.
+ */
+ public Point getSurfaceDimensions() {
+ return new Point(mWidth, mHeight);
+ }
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mIsActivityRestart = sVideoSurfacesInUse;
}
/**
@@ -675,12 +679,6 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
}
}
- @Override
- public boolean isActivityRestart() {
- Log.d(this, "isActivityRestart " + mIsActivityRestart);
- return mIsActivityRestart;
- }
-
/**
* @return {@code True} if the display video surface has been created.
*/
@@ -741,12 +739,12 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
params.height = height;
preview.setLayoutParams(params);
- int rotation = InCallPresenter.toRotationAngle(getCurrentRotation());
- int rotationAngle = 360 - rotation;
- preview.setRotation(rotationAngle);
- Log.d(this, "setPreviewSize: rotation=" + rotation +
- " rotationAngle=" + rotationAngle);
-
+ // The width and height are interchanged outside of this method based on the current
+ // orientation, so we can transform using "width", which will be either the width or
+ // the height.
+ Matrix transform = new Matrix();
+ transform.setScale(-1, 1, width/2, 0);
+ preview.setTransform(transform);
}
}
@@ -853,6 +851,19 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
}
/**
+ * Determines the size of the preview surface.
+ *
+ * @return {@link Point} specifying the width and height of the preview surface.
+ */
+ @Override
+ public Point getPreviewSize() {
+ if (sPreviewSurface == null) {
+ return null;
+ }
+ return sPreviewSurface.getSurfaceDimensions();
+ }
+
+ /**
* Inflates the {@link ViewStub} containing the incoming and outgoing surfaces, if necessary,
* and creates {@link VideoCallSurface} instances to track the surfaces.
*/
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index d49e2cdd9..5bd7fbe6c 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 {
@@ -165,7 +165,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;
@@ -833,6 +832,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.
@@ -840,14 +862,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);
}
/**
@@ -889,8 +907,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
@@ -1118,8 +1139,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);
}
}