Index: content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java |
index 907df4c03effd2ff59c00ab3026a5e9cca92566f..5cce3487e6ffc3df7e05f9e303d466eacdc73443 100644 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java |
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java |
@@ -4,6 +4,7 @@ |
package org.chromium.content.browser; |
+import android.app.Activity; |
import android.content.pm.ActivityInfo; |
import android.test.suitebuilder.annotation.MediumTest; |
@@ -15,6 +16,7 @@ import org.chromium.content.browser.test.util.MockOrientationObserver; |
import org.chromium.content.browser.test.util.OrientationChangeObserverCriteria; |
import org.chromium.content_shell_apk.ContentShellActivity; |
import org.chromium.content_shell_apk.ContentShellTestBase; |
+import org.chromium.ui.gfx.DeviceDisplayInfo; |
/** |
* Tests for ScreenOrientationListener and its implementations. |
@@ -30,22 +32,81 @@ public class ScreenOrientationListenerTest extends ContentShellTestBase { |
private MockOrientationObserver mObserver; |
+ private int mNaturalOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; |
+ |
/** |
- * Returns the expected orientation angle based on the orientation type. |
+ * Checks does the device orientation match the requested one. |
*/ |
- private static int orientationTypeToAngle(int orientation) { |
+ private boolean checkOrientationForLock(int orientation) { |
+ int expectedOrientation = orientationTypeToAngle(orientation); |
+ int currentOrientation = mObserver.mOrientation; |
switch (orientation) { |
case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: |
- return 0; |
case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: |
- return 90; |
case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT: |
- return 180; |
case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE: |
- return 270; |
+ if (expectedOrientation == currentOrientation) |
+ return true; |
+ else if (ALLOW_0_FOR_180 && expectedOrientation == 180 |
+ && currentOrientation == 0) |
+ return true; |
+ return false; |
default: |
- fail("Should not be there!"); |
- return 0; |
+ return false; |
+ } |
+ } |
+ |
+ /** |
+ * Returns the expected orientation angle based on the orientation type. |
+ */ |
+ private int orientationTypeToAngle(int orientation) { |
+ if (mNaturalOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { |
+ switch (orientation) { |
+ case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: |
+ return 0; |
+ case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: |
+ return 90; |
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT: |
+ return 180; |
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE: |
+ return -90; |
+ default: |
+ fail("Should not be there!"); |
+ return 0; |
+ } |
+ } else { // mNaturalOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE |
+ switch (orientation) { |
+ case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: |
+ return -90; |
+ case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: |
+ return 0; |
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT: |
+ return 90; |
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE: |
+ return 180; |
+ default: |
+ fail("Should not be there!"); |
+ return 0; |
+ } |
+ } |
+ } |
+ |
+ /** |
+ * Retrieves device natural orientation. |
+ */ |
+ private int getNaturalOrientation(Activity activity) { |
+ DeviceDisplayInfo displayInfo = DeviceDisplayInfo.create(activity); |
+ int rotation = displayInfo.getRotationDegrees(); |
+ if (rotation == 0 || rotation == 180) { |
+ if (displayInfo.getDisplayHeight() >= displayInfo.getDisplayWidth()) { |
+ return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; |
+ } |
+ return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; |
+ } else { |
+ if (displayInfo.getDisplayHeight() < displayInfo.getDisplayWidth()) { |
+ return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; |
+ } |
+ return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; |
} |
} |
@@ -85,6 +146,10 @@ public class ScreenOrientationListenerTest extends ContentShellTestBase { |
} |
}); |
+ // Calculate device natural orientation, as mObserver.mOrientation |
+ // is difference between current and natural orientation in degrees. |
+ mNaturalOrientation = getNaturalOrientation(activity); |
+ |
// Make sure we start all the tests with the same orientation. |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); |
} |
@@ -107,37 +172,35 @@ public class ScreenOrientationListenerTest extends ContentShellTestBase { |
@Feature({"ScreenOrientation"}) |
public void testVariousOrientationChanges() throws Exception { |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
- assertEquals(90, mObserver.mOrientation); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)); |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); |
- assertTrue(mObserver.mOrientation == 180 || |
- (ALLOW_0_FOR_180 && mObserver.mOrientation == 0)); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)); |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); |
- assertEquals(-90, mObserver.mOrientation); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)); |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); |
- assertEquals(0, mObserver.mOrientation); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)); |
} |
@MediumTest |
@Feature({"ScreenOrientation"}) |
public void testFlipPortrait() throws Exception { |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); |
- assertEquals(0, mObserver.mOrientation); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)); |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); |
- assertTrue(mObserver.mOrientation == 180 || |
- (ALLOW_0_FOR_180 && mObserver.mOrientation == 0)); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)); |
} |
@MediumTest |
@Feature({"ScreenOrientation"}) |
public void testFlipLandscape() throws Exception { |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
- assertEquals(90, mObserver.mOrientation); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)); |
lockOrientationAndWait(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); |
- assertEquals(-90, mObserver.mOrientation); |
+ assertTrue(checkOrientationForLock(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)); |
} |
} |