Commit 2966f7dc authored by Theresa Sullivan's avatar Theresa Sullivan Committed by Chromium LUCI CQ

Re-enable TabbedAppMenuTest#testKeyboardMenuEnterOnTopItemLandscape

Use ActivityUtils#rotateActivityToOrientation (extracted from
TabUiTestHelper) to wait for the orientation change to complete before
proceeding with the rest of the test.

Bug: 945861
Change-Id: I75f897a62fa98d28eae1594fcc9a4d4391e6fae7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2645347Reviewed-by: default avatarYue Zhang <yuezhanggg@chromium.org>
Commit-Queue: Theresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846384}
parent 44b4d7f3
......@@ -41,7 +41,6 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.f
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.getSwipeToDismissAction;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.leaveTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.mergeAllNormalTabsToAGroup;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.switchTabModel;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabModelTabCount;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
......@@ -49,7 +48,6 @@ import static org.chromium.chrome.test.util.ViewUtils.onViewWaiting;
import static org.chromium.chrome.test.util.ViewUtils.waitForView;
import static org.chromium.components.embedder_support.util.UrlConstants.NTP_URL;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
......@@ -224,8 +222,7 @@ public class StartSurfaceLayoutTest {
@After
public void tearDown() {
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
TestThreadUtils.runOnUiThreadBlocking(
ChromeNightModeTestUtils::tearDownNightModeAfterChromeActivityDestroyed);
TestThreadUtils.runOnUiThreadBlocking(
......@@ -1009,12 +1006,12 @@ public class StartSurfaceLayoutTest {
CriteriaHelper.pollUiThread(TabSwitcherCoordinator::hasAppendedMessagesForTesting);
// Force portrait mode since the device can be wrongly in landscape. See crbug/1063639.
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
onView(withId(R.id.tab_list_view))
.check(MessageCardWidthAssertion.checkMessageItemSpanSize(3, 2));
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
onView(withId(R.id.tab_list_view))
.check(MessageCardWidthAssertion.checkMessageItemSpanSize(3, 3));
......
......@@ -20,9 +20,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.support.test.InstrumentationRegistry;
import android.support.test.uiautomator.UiDevice;
......@@ -48,6 +46,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.ChromeRenderTestRule;
import org.chromium.chrome.test.util.MenuUtils;
import org.chromium.chrome.test.util.browser.Features;
......@@ -91,8 +90,7 @@ public class PriceTrackingDialogTest {
@After
public void tearDown() {
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
}
@Test
......@@ -184,7 +182,7 @@ public class PriceTrackingDialogTest {
public void testRenderPriceTrackingDialog_Landscape() throws IOException {
final ChromeTabbedActivity cta = mActivityTestRule.getActivity();
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
MenuUtils.invokeCustomMenuActionSync(
InstrumentationRegistry.getInstrumentation(), cta, R.id.track_prices_row_menu_id);
verifyDialogShowing(cta);
......
......@@ -15,11 +15,9 @@ import static org.junit.Assert.assertTrue;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.createTabs;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.util.Pair;
import android.view.View;
......@@ -46,6 +44,7 @@ import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.ui.test.util.UiRestriction;
......@@ -88,8 +87,7 @@ public class TabGridAccessibilityHelperTest {
@After
public void tearDown() {
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
}
@Test
......@@ -142,7 +140,7 @@ public class TabGridAccessibilityHelperTest {
new ArrayList<>(Arrays.asList(TabMovementDirection.UP)));
});
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
// Verify action list in landscape mode with span count = 3.
onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view)))
......@@ -222,7 +220,7 @@ public class TabGridAccessibilityHelperTest {
assertEquals(1, (int) positions.second);
});
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view)))
.check((v, noMatchingViewException) -> {
......
......@@ -47,7 +47,6 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.f
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.getSwipeToDismissAction;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.mergeAllNormalTabsToAGroup;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.prepareTabsWithThumbnail;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyAllTabsHaveThumbnail;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabStripFaviconCount;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
......@@ -57,7 +56,6 @@ import static org.chromium.chrome.test.util.ViewUtils.onViewWaiting;
import static org.chromium.chrome.test.util.ViewUtils.waitForView;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
......@@ -106,6 +104,7 @@ import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.ChromeRenderTestRule;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
......@@ -173,8 +172,7 @@ public class TabGridDialogTest {
@After
public void tearDown() {
TabUiFeatureUtilities.setTabManagementModuleSupportedForTesting(null);
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
}
@Test
......@@ -563,7 +561,7 @@ public class TabGridDialogTest {
checkPosition(cta, false, true);
// Verify the size and position of TabSelectionEditor in landscape mode.
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
CriteriaHelper.pollUiThread(() -> parentView.getHeight() < parentView.getWidth());
checkPosition(cta, false, false);
......@@ -575,7 +573,7 @@ public class TabGridDialogTest {
// Verify the positioning in multi-window mode. Adjusting the height of the root view to
// mock entering/exiting multi-window mode.
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
CriteriaHelper.pollUiThread(() -> parentView.getHeight() > parentView.getWidth());
View rootView = cta.findViewById(R.id.coordinator);
int rootViewHeight = rootView.getHeight();
......@@ -721,7 +719,7 @@ public class TabGridDialogTest {
verifyAllTabsHaveThumbnail(cta.getCurrentTabModel());
// Rotate to landscape mode and create a tab group.
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
mergeAllNormalTabsToAGroup(cta);
verifyTabSwitcherCardCount(cta, 1);
openDialogFromTabSwitcherAndVerify(cta, 3, null);
......
......@@ -25,11 +25,9 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.c
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.closeFirstTabInTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.getSwipeToDismissAction;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
import static org.chromium.chrome.test.util.ViewUtils.onViewWaiting;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.drawable.Animatable;
import android.support.test.InstrumentationRegistry;
......@@ -63,6 +61,7 @@ import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.ChromeRenderTestRule;
import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.browser.Features;
......@@ -120,8 +119,7 @@ public class TabGridIphTest {
@After
public void tearDown() {
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
}
@Test
......@@ -225,7 +223,7 @@ public class TabGridIphTest {
ChromeTabbedActivity cta = mActivityTestRule.getActivity();
enterTabSwitcher(cta);
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
CriteriaHelper.pollUiThread(
TabSwitcherCoordinator::hasAppendedMessagesForTesting);
onView(withId(R.id.tab_grid_message_item)).check(matches(isDisplayed()));
......@@ -264,7 +262,7 @@ public class TabGridIphTest {
ChromeTabbedActivity cta = mActivityTestRule.getActivity();
enterTabSwitcher(cta);
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
CriteriaHelper.pollUiThread(TabSwitcherCoordinator::hasAppendedMessagesForTesting);
// Scroll to the position of the IPH entrance so that it is completely showing for Espresso
// click.
......
......@@ -28,8 +28,6 @@ import static org.chromium.base.test.util.CriteriaHelper.DEFAULT_POLLING_INTERVA
import static org.chromium.components.browser_ui.widget.RecyclerViewTestUtils.waitForStableRecyclerView;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.provider.Settings;
import android.support.test.InstrumentationRegistry;
import android.view.View;
......@@ -393,24 +391,6 @@ public class TabUiTestHelper {
return new OverviewModeBehaviorWatcher(cta.getLayoutManager(), false, true);
}
/**
* Rotate device to the target orientation. Do nothing if the screen is already in that
* orientation.
* @param cta The current running activity.
* @param orientation The target orientation we want the screen to rotate to.
*/
public static void rotateDeviceToOrientation(ChromeTabbedActivity cta, int orientation) {
if (cta.getResources().getConfiguration().orientation == orientation) return;
assertTrue(orientation == Configuration.ORIENTATION_LANDSCAPE
|| orientation == Configuration.ORIENTATION_PORTRAIT);
cta.setRequestedOrientation(orientation == Configuration.ORIENTATION_LANDSCAPE
? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat(cta.getResources().getConfiguration().orientation, is(orientation));
});
}
/**
* @return whether animators are enabled on device by checking whether the animation duration
* scale is set to 0.0.
......
......@@ -4,7 +4,7 @@
package org.chromium.chrome.browser.app.appmenu;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.support.test.InstrumentationRegistry;
import android.view.KeyEvent;
import android.view.Menu;
......@@ -17,6 +17,7 @@ import android.widget.TextView;
import androidx.test.filters.SmallTest;
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
......@@ -29,7 +30,6 @@ import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Criteria;
import org.chromium.base.test.util.CriteriaHelper;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.Restriction;
import org.chromium.base.test.util.UrlUtils;
......@@ -45,6 +45,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
import org.chromium.chrome.browser.ui.appmenu.AppMenuTestSupport;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.ChromeRenderTestRule;
import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
......@@ -99,6 +100,11 @@ public class TabbedAppMenuTest {
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}
@After
public void tearDown() {
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
}
/**
* Verify opening a new tab from the menu.
*/
......@@ -169,15 +175,12 @@ public class TabbedAppMenuTest {
* Test that hitting ENTER on the top item actually triggers the top item.
* Catches regressions for https://crbug.com/191239 for shrunken menus.
*/
/*
@SmallTest
@Feature({"Browser", "Main"})
*/
@Test
@DisabledTest(message = "crbug.com/945861")
public void testKeyboardMenuEnterOnTopItemLandscape() {
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(
mActivityTestRule.getActivity(), Configuration.ORIENTATION_LANDSCAPE);
showAppMenuAndAssertMenuShown();
moveToBoundary(true, false);
Assert.assertEquals(0, getCurrentFocusedRow());
......@@ -191,8 +194,8 @@ public class TabbedAppMenuTest {
@SmallTest
@Feature({"Browser", "Main"})
public void testKeyboardMenuEnterOnTopItemPortrait() {
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ActivityUtils.rotateActivityToOrientation(
mActivityTestRule.getActivity(), Configuration.ORIENTATION_PORTRAIT);
showAppMenuAndAssertMenuShown();
moveToBoundary(true, false);
Assert.assertEquals(0, getCurrentFocusedRow());
......
......@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.toolbar.top;
import static org.junit.Assert.assertTrue;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
import static org.chromium.chrome.test.util.ToolbarTestUtils.TAB_SWITCHER_TOOLBAR;
import static org.chromium.chrome.test.util.ToolbarTestUtils.TAB_SWITCHER_TOOLBAR_MENU;
......@@ -15,7 +14,6 @@ import static org.chromium.chrome.test.util.ToolbarTestUtils.TAB_SWITCHER_TOOLBA
import static org.chromium.chrome.test.util.ToolbarTestUtils.TAB_SWITCHER_TOOLBAR_NEW_TAB_VARIATION;
import static org.chromium.chrome.test.util.ToolbarTestUtils.checkToolbarButtonVisibility;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import androidx.test.filters.MediumTest;
......@@ -37,6 +35,7 @@ import org.chromium.chrome.browser.incognito.IncognitoUtils;
import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.ui.test.util.UiRestriction;
......@@ -60,8 +59,7 @@ public class AdaptiveToolbarTest {
@After
public void tearDown() {
CachedFeatureFlags.setForTesting(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, null);
mActivityTestRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
ActivityUtils.clearActivityOrientation(mActivityTestRule.getActivity());
}
private void setupFlagsAndLaunchActivity(boolean isGridTabSwitcherEnabled) {
......@@ -89,7 +87,7 @@ public class AdaptiveToolbarTest {
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_MENU, true);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_NEW_TAB, true);
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_MENU, true);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_NEW_TAB, true);
......@@ -114,7 +112,7 @@ public class AdaptiveToolbarTest {
TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_NEW_TAB_VARIATION, true);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_NEW_TAB, false);
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_MENU, true);
checkToolbarButtonVisibility(
......@@ -142,7 +140,7 @@ public class AdaptiveToolbarTest {
TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_NEW_TAB_VARIATION, false);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_NEW_TAB, true);
rotateDeviceToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
ActivityUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE);
checkToolbarButtonVisibility(TAB_SWITCHER_TOOLBAR, TAB_SWITCHER_TOOLBAR_MENU, true);
checkToolbarButtonVisibility(
......
......@@ -4,11 +4,16 @@
package org.chromium.chrome.test.util;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertTrue;
import android.app.Activity;
import android.app.Instrumentation;
import android.app.Instrumentation.ActivityMonitor;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
......@@ -193,4 +198,37 @@ public class ActivityUtils {
}, ACTIVITY_START_TIMEOUT_MS, CONDITION_POLL_INTERVAL_MS);
return (T) activity.getMainFragment();
}
/**
* Rotate device to the target orientation. Do nothing if the screen is already in that
* orientation. As a best practice, unset orientation in teardown using
* {@link #clearActivityOrientation(Activity)}.
*
* @param activity The activity on which to set requested orientation.
* @param orientation The target orientation we want the screen to rotate to. Expects one of
* either {@link Configuration#ORIENTATION_LANDSCAPE} or
* {@link Configuration#ORIENTATION_PORTRAIT}.
*/
public static void rotateActivityToOrientation(Activity activity, int orientation) {
if (activity.getResources().getConfiguration().orientation == orientation) return;
assertTrue("Incorrect orientation supplied.",
orientation == Configuration.ORIENTATION_LANDSCAPE
|| orientation == Configuration.ORIENTATION_PORTRAIT);
activity.setRequestedOrientation(orientation == Configuration.ORIENTATION_LANDSCAPE
? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat(
activity.getResources().getConfiguration().orientation, is(orientation));
});
}
/**
* Clear the requested orientation on the given activity (by setting it to unspecified).
*
* @param activity The activity on which to clear requested orientation.
*/
public static void clearActivityOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment