aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/actions/OrientationChangeAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/actions/OrientationChangeAction.java')
-rw-r--r--OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/actions/OrientationChangeAction.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/actions/OrientationChangeAction.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/actions/OrientationChangeAction.java
new file mode 100644
index 000000000..cdded7d7f
--- /dev/null
+++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/actions/OrientationChangeAction.java
@@ -0,0 +1,74 @@
+package org.sufficientlysecure.keychain.actions;
+
+
+import java.util.Collection;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.pm.ActivityInfo;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
+import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
+import android.support.test.runner.lifecycle.Stage;
+import android.view.View;
+
+import org.hamcrest.Matcher;
+
+import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
+
+public class OrientationChangeAction implements ViewAction {
+ private final int orientation;
+
+ private OrientationChangeAction(int orientation) {
+ this.orientation = orientation;
+ }
+
+ @Override
+ public Matcher<View> getConstraints() {
+ return isRoot();
+ }
+
+ @Override
+ public String getDescription() {
+ return "change orientation to " + orientation;
+ }
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ uiController.loopMainThreadUntilIdle();
+
+ final Activity activity = findActivity(view.getContext());
+ if (activity == null){
+ throw new IllegalStateException("Could not find the current activity");
+ }
+
+ activity.setRequestedOrientation(orientation);
+
+ Collection<Activity> resumedActivities = ActivityLifecycleMonitorRegistry
+ .getInstance().getActivitiesInStage(Stage.RESUMED);
+
+ if (resumedActivities.isEmpty()) {
+ throw new RuntimeException("Could not change orientation");
+ }
+ }
+
+ private static Activity findActivity(Context context) {
+ if (context == null)
+ return null;
+ else if (context instanceof Activity)
+ return (Activity) context;
+ else if (context instanceof ContextWrapper)
+ return findActivity(((ContextWrapper) context).getBaseContext());
+
+ return null;
+ }
+
+ public static ViewAction orientationLandscape() {
+ return new OrientationChangeAction(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ }
+
+ public static ViewAction orientationPortrait() {
+ return new OrientationChangeAction(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ }
+} \ No newline at end of file