summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--InCallUI/src/com/android/incallui/InCallActivity.java28
-rw-r--r--InCallUI/src/com/android/incallui/InCallPresenter.java12
-rw-r--r--InCallUI/src/com/android/incallui/InCallVideoCallCallback.java2
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallPresenter.java22
4 files changed, 45 insertions, 19 deletions
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 289bf6388..d1bebe738 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -39,6 +39,7 @@ import android.text.TextUtils;
import android.view.Display;
import android.view.MenuItem;
import android.view.OrientationEventListener;
+import android.view.Surface;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.KeyEvent;
@@ -203,10 +204,29 @@ public class InCallActivity extends Activity implements FragmentDisplayManager {
SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
+ // Device is flat, don't change orientation.
+ if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
+ return;
+ }
+
+ int newRotation = Surface.ROTATION_0;
+ // We only shift if we're within 22.5 (23) degrees of the target
+ // orientation. This avoids flopping back and forth when holding
+ // the device at 45 degrees or so.
+ if (orientation >= 337 || orientation <= 23) {
+ newRotation = Surface.ROTATION_0;
+ } else if (orientation >= 67 && orientation <= 113) {
+ // Why not 90? Because screen and sensor orientation are
+ // reversed.
+ newRotation = Surface.ROTATION_270;
+ } else if (orientation >= 157 && orientation <= 203) {
+ newRotation = Surface.ROTATION_180;
+ } else if (orientation >= 247 && orientation <= 293) {
+ newRotation = Surface.ROTATION_90;
+ }
+
// Orientation is the current device orientation in degrees. Ultimately we want
// the rotation (in fixed 90 degree intervals).
- Display display = getWindowManager().getDefaultDisplay();
- int newRotation = display.getRotation();
if (newRotation != sPreviousRotation) {
doOrientationChanged(newRotation);
}
@@ -500,7 +520,9 @@ public class InCallActivity extends Activity implements FragmentDisplayManager {
/**
* Handles changes in device rotation.
*
- * @param rotation The new device rotation.
+ * @param rotation The new device rotation (one of: {@link Surface#ROTATION_0},
+ * {@link Surface#ROTATION_90}, {@link Surface#ROTATION_180},
+ * {@link Surface#ROTATION_270}).
*/
private void doOrientationChanged(int rotation) {
Log.d(this, "doOrientationChanged prevOrientation=" + sPreviousRotation +
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 022651cfc..18b268654 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -1339,7 +1339,9 @@ public class InCallPresenter implements CallList.Listener,
/**
* Handles changes to the device rotation.
*
- * @param rotation The device rotation.
+ * @param rotation The device rotation (one of: {@link Surface#ROTATION_0},
+ * {@link Surface#ROTATION_90}, {@link Surface#ROTATION_180},
+ * {@link Surface#ROTATION_270}).
*/
public void onDeviceRotationChange(int rotation) {
Log.d(this, "onDeviceRotationChange: rotation=" + rotation);
@@ -1353,7 +1355,9 @@ public class InCallPresenter implements CallList.Listener,
/**
* Converts rotation constants to rotation in degrees.
- * @param rotation Rotation constants.
+ * @param rotation Rotation constants (one of: {@link Surface#ROTATION_0},
+ * {@link Surface#ROTATION_90}, {@link Surface#ROTATION_180},
+ * {@link Surface#ROTATION_270}).
*/
public static int toRotationAngle(int rotation) {
int rotationAngle;
@@ -1379,7 +1383,9 @@ public class InCallPresenter implements CallList.Listener,
/**
* Notifies listeners of changes in orientation (e.g. portrait/landscape).
*
- * @param orientation The orientation of the device.
+ * @param orientation The orientation of the device (one of: {@link Surface#ROTATION_0},
+ * {@link Surface#ROTATION_90}, {@link Surface#ROTATION_180},
+ * {@link Surface#ROTATION_270}).
*/
public void onDeviceOrientationChange(int orientation) {
for (InCallOrientationListener listener : mOrientationListeners) {
diff --git a/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java b/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
index a35404a76..87b886d81 100644
--- a/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
+++ b/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
@@ -28,7 +28,7 @@ import android.telecom.VideoProfile.CameraCapabilities;
public class InCallVideoCallCallback extends VideoCall.Callback {
/**
- * The call associated with this {@link InCallVideoClient}.
+ * The call associated with this {@link InCallVideoCallCallback}.
*/
private Call mCall;
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index ed7edf93c..20f3912b4 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -91,13 +91,6 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
};
/**
- * Determines the device orientation (portrait/lanscape).
- */
- public int getDeviceOrientation() {
- return mDeviceOrientation;
- }
-
- /**
* Defines the state of the preview surface negotiation with the telephony layer.
*/
private class PreviewSurfaceState {
@@ -947,8 +940,10 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
/**
* Handles changes to the device orientation.
- * See: {@link Configuration.ORIENTATION_LANDSCAPE}, {@link Configuration.ORIENTATION_PORTRAIT}
- * @param orientation The device orientation.
+ *
+ * @param orientation The device orientation (one of: {@link Surface#ROTATION_0},
+ * {@link Surface#ROTATION_90}, {@link Surface#ROTATION_180},
+ * {@link Surface#ROTATION_270}).
*/
@Override
public void onDeviceOrientationChanged(int orientation) {
@@ -1009,9 +1004,10 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
/**
* Sets the preview surface size based on the current device orientation.
- * See: {@link Configuration.ORIENTATION_LANDSCAPE}, {@link Configuration.ORIENTATION_PORTRAIT}
*
- * @param orientation The device orientation.
+ * @param orientation The device orientation (one of: {@link Surface#ROTATION_0},
+ * {@link Surface#ROTATION_90}, {@link Surface#ROTATION_180},
+ * {@link Surface#ROTATION_270}).
* @param aspectRatio The aspect ratio of the camera (width / height).
*/
private void setPreviewSize(int orientation, float aspectRatio) {
@@ -1023,10 +1019,12 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
int height;
int width;
- if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ if (orientation == Surface.ROTATION_90 || orientation == Surface.ROTATION_270) {
+ // Landscape or reverse landscape orientation.
width = (int) (mMinimumVideoDimension * aspectRatio);
height = (int) mMinimumVideoDimension;
} else {
+ // Portrait or reverse portrait orientation.
width = (int) mMinimumVideoDimension;
height = (int) (mMinimumVideoDimension * aspectRatio);
}