summaryrefslogtreecommitdiff
path: root/InCallUI/src/com
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2015-05-06 09:50:12 -0700
committerTyler Gunn <tgunn@google.com>2015-05-06 10:37:32 -0700
commitd078826fc9fc20009d69ed041464209ed83e2e0f (patch)
treea32e278445ec0a610e8984ecca19f29f6c2a1e30 /InCallUI/src/com
parent8afe058842b3af5789fe8eb5fb4eb010edd0acd9 (diff)
Fix issue where fast 180 degree landscape rotation is not detected.
- Cleaned up imports in InCallActivity. - Added new OrientationEventListener to listen for orientation changes to the device. This listener returns the current device rotation in degrees. Use the windowManager to get the current display rotation (e.g. in coarse 90 degree, 180, etc). - This solves the problem - can now detect rotation from landscape to landscape. Bug: 20727115 Change-Id: Icfad2b26083bb8236e9f4fe5580e3828cdef11b8
Diffstat (limited to 'InCallUI/src/com')
-rw-r--r--InCallUI/src/com/android/incallui/CallList.java7
-rw-r--r--InCallUI/src/com/android/incallui/InCallActivity.java57
2 files changed, 46 insertions, 18 deletions
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java
index e937bb162..bec81ec57 100644
--- a/InCallUI/src/com/android/incallui/CallList.java
+++ b/InCallUI/src/com/android/incallui/CallList.java
@@ -516,7 +516,12 @@ public class CallList {
*/
public void notifyCallsOfDeviceRotation(int rotation) {
for (Call call : mCallById.values()) {
- if (call.getVideoCall() != null) {
+ // First, ensure a VideoCall is set on the call so that the change can be sent to the
+ // provider (a VideoCall can be present for a call that does not currently have video,
+ // but can be upgraded to video).
+ // Second, ensure that the call videoState has video enabled (there is no need to set
+ // device orientation on a voice call which has not yet been upgraded to video).
+ if (call.getVideoCall() != null && CallUtils.isVideoCall(call)) {
call.getVideoCall().setDeviceOrientation(rotation);
}
}
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 5ecb96e3f..e8a632cd9 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -24,19 +24,21 @@ import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
-import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Point;
+import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Trace;
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
+import android.view.Display;
import android.view.MenuItem;
+import android.view.OrientationEventListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.KeyEvent;
@@ -122,10 +124,13 @@ public class InCallActivity extends Activity implements FragmentDisplayManager {
}
};
+ /** Listener for orientation changes. */
+ private OrientationEventListener mOrientationEventListener;
+
/**
- * Used to determine if a change in orientation has occurred.
+ * Used to determine if a change in rotation has occurred.
*/
- private static int sCurrentOrientation = Configuration.ORIENTATION_UNDEFINED;
+ private static int sPreviousRotation = -1;
@Override
protected void onCreate(Bundle icicle) {
@@ -193,6 +198,28 @@ public class InCallActivity extends Activity implements FragmentDisplayManager {
dialogFragment.setListener(mSelectAcctListener);
}
}
+
+ mOrientationEventListener = new OrientationEventListener(this,
+ SensorManager.SENSOR_DELAY_NORMAL) {
+ @Override
+ public void onOrientationChanged(int orientation) {
+ // 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);
+ }
+ }
+ };
+
+ if (mOrientationEventListener.canDetectOrientation()) {
+ Log.v(this, "Orientation detection enabled.");
+ mOrientationEventListener.enable();
+ } else {
+ Log.v(this, "Orientation detection disabled.");
+ mOrientationEventListener.disable();
+ }
Log.d(this, "onCreate(): exit");
}
@@ -215,9 +242,6 @@ public class InCallActivity extends Activity implements FragmentDisplayManager {
// setting activity should be last thing in setup process
InCallPresenter.getInstance().setActivity(this);
- // It is possible that the activity restarted because orientation changed.
- // Notify listeners if orientation changed.
- doOrientationChanged(getResources().getConfiguration().orientation);
InCallPresenter.getInstance().onActivityStarted();
}
@@ -474,20 +498,19 @@ public class InCallActivity extends Activity implements FragmentDisplayManager {
}
/**
- * Handles changes in device orientation.
+ * Handles changes in device rotation.
*
- * @param orientation The new device orientation.
+ * @param rotation The new device rotation.
*/
- private void doOrientationChanged(int orientation) {
- Log.d(this, "doOrientationChanged prevOrientation=" + sCurrentOrientation +
- " newOrientation=" + orientation);
- // Check to see if the orientation changed to prevent triggering orientation change events
+ private void doOrientationChanged(int rotation) {
+ Log.d(this, "doOrientationChanged prevOrientation=" + sPreviousRotation +
+ " newOrientation=" + rotation);
+ // Check to see if the rotation changed to prevent triggering rotation change events
// for other configuration changes.
- if (orientation != sCurrentOrientation) {
- sCurrentOrientation = orientation;
- InCallPresenter.getInstance().onDeviceRotationChange(
- getWindowManager().getDefaultDisplay().getRotation());
- InCallPresenter.getInstance().onDeviceOrientationChange(sCurrentOrientation);
+ if (rotation != sPreviousRotation) {
+ sPreviousRotation = rotation;
+ InCallPresenter.getInstance().onDeviceRotationChange(rotation);
+ InCallPresenter.getInstance().onDeviceOrientationChange(sPreviousRotation);
}
}