| Index: content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
|
| diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
|
| index 1ed3f4a52072ebfe24bc47949740210cf33a9c24..f2e0edba7fc87935e4161da8aef4d6f238145afd 100644
|
| --- a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
|
| +++ b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
|
| @@ -4,6 +4,8 @@
|
|
|
| package org.chromium.content.browser;
|
|
|
| +import android.app.Activity;
|
| +import android.content.pm.ActivityInfo;
|
| import android.test.suitebuilder.annotation.MediumTest;
|
|
|
| import org.chromium.base.ThreadUtils;
|
| @@ -15,6 +17,7 @@ import org.chromium.content.browser.test.util.OrientationChangeObserverCriteria;
|
| import org.chromium.content_public.common.ScreenOrientationValues;
|
| 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,26 +33,70 @@ public class ScreenOrientationProviderTest extends ContentShellTestBase {
|
|
|
| private MockOrientationObserver mObserver;
|
|
|
| + private int mNaturalOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
| +
|
| private boolean checkOrientationForLock(int orientations) {
|
| - switch (orientations) {
|
| - case ScreenOrientationValues.PORTRAIT_PRIMARY:
|
| - return mObserver.mOrientation == 0;
|
| - case ScreenOrientationValues.PORTRAIT_SECONDARY:
|
| - return mObserver.mOrientation == 180 ||
|
| - (ALLOW_0_FOR_180 && mObserver.mOrientation == 0);
|
| - case ScreenOrientationValues.LANDSCAPE_PRIMARY:
|
| - return mObserver.mOrientation == 90;
|
| - case ScreenOrientationValues.LANDSCAPE_SECONDARY:
|
| - return mObserver.mOrientation == -90;
|
| - case ScreenOrientationValues.PORTRAIT:
|
| - return mObserver.mOrientation == 0 || mObserver.mOrientation == 180;
|
| - case ScreenOrientationValues.LANDSCAPE:
|
| - return mObserver.mOrientation == 90 || mObserver.mOrientation == -90;
|
| - case ScreenOrientationValues.ANY:
|
| - // The orientation should not change but might and the value could be anything.
|
| - return true;
|
| - default:
|
| - return !mObserver.mHasChanged;
|
| + if (mNaturalOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
|
| + switch (orientations) {
|
| + case ScreenOrientationValues.PORTRAIT_PRIMARY:
|
| + return mObserver.mOrientation == 0;
|
| + case ScreenOrientationValues.PORTRAIT_SECONDARY:
|
| + return mObserver.mOrientation == 180 ||
|
| + (ALLOW_0_FOR_180 && mObserver.mOrientation == 0);
|
| + case ScreenOrientationValues.LANDSCAPE_PRIMARY:
|
| + return mObserver.mOrientation == 90;
|
| + case ScreenOrientationValues.LANDSCAPE_SECONDARY:
|
| + return mObserver.mOrientation == -90;
|
| + case ScreenOrientationValues.PORTRAIT:
|
| + return mObserver.mOrientation == 0 || mObserver.mOrientation == 180;
|
| + case ScreenOrientationValues.LANDSCAPE:
|
| + return mObserver.mOrientation == 90 || mObserver.mOrientation == -90;
|
| + case ScreenOrientationValues.ANY:
|
| + // The orientation should not change but might and the value could be anything.
|
| + return true;
|
| + default:
|
| + return !mObserver.mHasChanged;
|
| + }
|
| + } else { // mNaturalOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
| + switch (orientations) {
|
| + case ScreenOrientationValues.PORTRAIT_PRIMARY:
|
| + return mObserver.mOrientation == -90;
|
| + case ScreenOrientationValues.PORTRAIT_SECONDARY:
|
| + return mObserver.mOrientation == 90;
|
| + case ScreenOrientationValues.LANDSCAPE_PRIMARY:
|
| + return mObserver.mOrientation == 0;
|
| + case ScreenOrientationValues.LANDSCAPE_SECONDARY:
|
| + return mObserver.mOrientation == 180 ||
|
| + (ALLOW_0_FOR_180 && mObserver.mOrientation == 0);
|
| + case ScreenOrientationValues.PORTRAIT:
|
| + return mObserver.mOrientation == 90 || mObserver.mOrientation == -90;
|
| + case ScreenOrientationValues.LANDSCAPE:
|
| + return mObserver.mOrientation == 0 || mObserver.mOrientation == 180;
|
| + case ScreenOrientationValues.ANY:
|
| + // The orientation should not change but might and the value could be anything.
|
| + return true;
|
| + default:
|
| + return !mObserver.mHasChanged;
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * 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;
|
| }
|
| }
|
|
|
| @@ -90,6 +137,10 @@ public class ScreenOrientationProviderTest 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(ScreenOrientationValues.PORTRAIT_PRIMARY);
|
|
|
|
|