Commit 4b3c7082 authored by Marcin Wiacek's avatar Marcin Wiacek Committed by Commit Bot

Replace enum with @IntDef (javatests)

@IntDef/@StringDef annotation are preferred way for declaring
set of String/int values.

1. they need less space in APK than enum, see
https://developer.android.com/topic/performance/reduce-apk-size#remove-enums
2. they give more control over allowed values than "static final" values

Main goal of patch is writing "static final" values, enum
and some classes in one common @IntDef/@StringDef form:

1. with @IntDef/@StringDef first, @Retention second
   and related @interface third
2. with values inside @interface
3. with NUM_ENTRIES declaring number of entries if necessary
4. with comment about numbering from 0 without gaps when necessary
5. with @Retention(RetentionPolicy.SOURCE)
6. without "static final" in the @interface

Change-Id: I6aeb3571f6e72dd3599a4a6055189a227312d5c4
Reviewed-on: https://chromium-review.googlesource.com/1154527Reviewed-by: default avataragrieve <agrieve@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarAmirhossein Simjour <asimjour@chromium.org>
Commit-Queue: Marcin Wiącek <marcin@mwiacek.com>
Cr-Commit-Position: refs/heads/master@{#584198}
parent fd253972
...@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.download.DownloadForegroundService.get ...@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.download.DownloadForegroundService.get
import static org.chromium.chrome.browser.download.DownloadSnackbarController.INVALID_NOTIFICATION_ID; import static org.chromium.chrome.browser.download.DownloadSnackbarController.INVALID_NOTIFICATION_ID;
import android.app.Notification; import android.app.Notification;
import android.support.annotation.IntDef;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
import android.support.v4.app.ServiceCompat; import android.support.v4.app.ServiceCompat;
...@@ -29,6 +30,8 @@ import org.chromium.chrome.browser.notifications.NotificationBuilderFactory; ...@@ -29,6 +30,8 @@ import org.chromium.chrome.browser.notifications.NotificationBuilderFactory;
import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions; import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -49,14 +52,22 @@ public class DownloadForegroundServiceTest { ...@@ -49,14 +52,22 @@ public class DownloadForegroundServiceTest {
* Mimics behavior of DownloadForegroundService except for calls to the actual service. * Mimics behavior of DownloadForegroundService except for calls to the actual service.
*/ */
public static class MockDownloadForegroundService extends DownloadForegroundService { public static class MockDownloadForegroundService extends DownloadForegroundService {
static enum MethodID { START_FOREGROUND, STOP_FOREGROUND_FLAGS, RELAUNCH_NOTIFICATION } @IntDef({MethodID.START_FOREGROUND, MethodID.STOP_FOREGROUND_FLAGS,
MethodID.RELAUNCH_NOTIFICATION})
@Retention(RetentionPolicy.SOURCE)
public @interface MethodID {
int START_FOREGROUND = 0;
int STOP_FOREGROUND_FLAGS = 1;
int RELAUNCH_NOTIFICATION = 2;
}
int mTargetSdk = 20; int mTargetSdk = 20;
int mStopForegroundFlags = -1; int mStopForegroundFlags = -1;
int mRelaunchedNotificationId = INVALID_NOTIFICATION_ID; int mRelaunchedNotificationId = INVALID_NOTIFICATION_ID;
int mNextNotificationId = INVALID_NOTIFICATION_ID; int mNextNotificationId = INVALID_NOTIFICATION_ID;
List<MethodID> mMethodCalls = new ArrayList<>(); // Used for saving MethodID values.
List<Integer> mMethodCalls = new ArrayList<>();
// Clears stored flags/boolean/id/method calls. Call between tests runs. // Clears stored flags/boolean/id/method calls. Call between tests runs.
void clearStoredState() { void clearStoredState() {
...@@ -123,7 +134,7 @@ public class DownloadForegroundServiceTest { ...@@ -123,7 +134,7 @@ public class DownloadForegroundServiceTest {
@Feature({"Download"}) @Feature({"Download"})
public void testStartForeground_sdkAtLeast24() { public void testStartForeground_sdkAtLeast24() {
mForegroundService.mTargetSdk = 24; mForegroundService.mTargetSdk = 24;
List<MockDownloadForegroundService.MethodID> expectedMethodCalls = List<Integer> expectedMethodCalls =
Arrays.asList(MockDownloadForegroundService.MethodID.START_FOREGROUND); Arrays.asList(MockDownloadForegroundService.MethodID.START_FOREGROUND);
// Test the case where there is no other pinned notification and the service starts. // Test the case where there is no other pinned notification and the service starts.
...@@ -165,7 +176,7 @@ public class DownloadForegroundServiceTest { ...@@ -165,7 +176,7 @@ public class DownloadForegroundServiceTest {
@SmallTest @SmallTest
@Feature({"Download"}) @Feature({"Download"})
public void testStartForeground_sdkLessThan24() { public void testStartForeground_sdkLessThan24() {
List<MockDownloadForegroundService.MethodID> expectedMethodCalls = List<Integer> expectedMethodCalls =
Arrays.asList(MockDownloadForegroundService.MethodID.START_FOREGROUND); Arrays.asList(MockDownloadForegroundService.MethodID.START_FOREGROUND);
// Test the case where there is no other pinned notification and the service starts. // Test the case where there is no other pinned notification and the service starts.
...@@ -204,7 +215,7 @@ public class DownloadForegroundServiceTest { ...@@ -204,7 +215,7 @@ public class DownloadForegroundServiceTest {
@Feature({"Download"}) @Feature({"Download"})
public void testStopForeground_sdkAtLeast24() { public void testStopForeground_sdkAtLeast24() {
mForegroundService.mTargetSdk = 24; mForegroundService.mTargetSdk = 24;
List<MockDownloadForegroundService.MethodID> expectedMethodCalls = List<Integer> expectedMethodCalls =
Arrays.asList(MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS); Arrays.asList(MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS);
// When the service gets stopped with request to detach but not kill notification (pause). // When the service gets stopped with request to detach but not kill notification (pause).
...@@ -264,7 +275,7 @@ public class DownloadForegroundServiceTest { ...@@ -264,7 +275,7 @@ public class DownloadForegroundServiceTest {
boolean isNotificationHandledProperly = mForegroundService.stopDownloadForegroundService( boolean isNotificationHandledProperly = mForegroundService.stopDownloadForegroundService(
DownloadForegroundService.StopForegroundNotification.DETACH_OR_PERSIST, DownloadForegroundService.StopForegroundNotification.DETACH_OR_PERSIST,
FAKE_DOWNLOAD_ID1, mNotification); FAKE_DOWNLOAD_ID1, mNotification);
List<MockDownloadForegroundService.MethodID> expectedMethodCalls = List<Integer> expectedMethodCalls =
Arrays.asList(MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS); Arrays.asList(MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS);
assertEquals(expectedMethodCalls, mForegroundService.mMethodCalls); assertEquals(expectedMethodCalls, mForegroundService.mMethodCalls);
assertEquals(ServiceCompat.STOP_FOREGROUND_DETACH, mForegroundService.mStopForegroundFlags); assertEquals(ServiceCompat.STOP_FOREGROUND_DETACH, mForegroundService.mStopForegroundFlags);
...@@ -323,7 +334,7 @@ public class DownloadForegroundServiceTest { ...@@ -323,7 +334,7 @@ public class DownloadForegroundServiceTest {
boolean isNotificationHandledProperly = mForegroundService.stopDownloadForegroundService( boolean isNotificationHandledProperly = mForegroundService.stopDownloadForegroundService(
DownloadForegroundService.StopForegroundNotification.DETACH_OR_PERSIST, DownloadForegroundService.StopForegroundNotification.DETACH_OR_PERSIST,
FAKE_DOWNLOAD_ID1, mNotification); FAKE_DOWNLOAD_ID1, mNotification);
List<MockDownloadForegroundService.MethodID> expectedMethodCalls = List<Integer> expectedMethodCalls =
Arrays.asList(MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS); Arrays.asList(MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS);
assertEquals(expectedMethodCalls, mForegroundService.mMethodCalls); assertEquals(expectedMethodCalls, mForegroundService.mMethodCalls);
assertEquals(ServiceCompat.STOP_FOREGROUND_DETACH, mForegroundService.mStopForegroundFlags); assertEquals(ServiceCompat.STOP_FOREGROUND_DETACH, mForegroundService.mStopForegroundFlags);
...@@ -381,7 +392,7 @@ public class DownloadForegroundServiceTest { ...@@ -381,7 +392,7 @@ public class DownloadForegroundServiceTest {
boolean isNotificationHandledProperly = mForegroundService.stopDownloadForegroundService( boolean isNotificationHandledProperly = mForegroundService.stopDownloadForegroundService(
DownloadForegroundService.StopForegroundNotification.DETACH_OR_PERSIST, DownloadForegroundService.StopForegroundNotification.DETACH_OR_PERSIST,
FAKE_DOWNLOAD_ID1, mNotification); FAKE_DOWNLOAD_ID1, mNotification);
List<MockDownloadForegroundService.MethodID> expectedMethodCalls = List<Integer> expectedMethodCalls =
Arrays.asList(MockDownloadForegroundService.MethodID.RELAUNCH_NOTIFICATION, Arrays.asList(MockDownloadForegroundService.MethodID.RELAUNCH_NOTIFICATION,
MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS); MockDownloadForegroundService.MethodID.STOP_FOREGROUND_FLAGS);
assertEquals(expectedMethodCalls, mForegroundService.mMethodCalls); assertEquals(expectedMethodCalls, mForegroundService.mMethodCalls);
......
...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.download; ...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.download;
import android.content.Context; import android.content.Context;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.support.annotation.IntDef;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
import android.util.Log; import android.util.Log;
...@@ -37,6 +38,8 @@ import org.chromium.content.browser.test.util.Criteria; ...@@ -37,6 +38,8 @@ import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.net.ConnectionType; import org.chromium.net.ConnectionType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Queue; import java.util.Queue;
...@@ -63,18 +66,23 @@ public class DownloadManagerServiceTest { ...@@ -63,18 +66,23 @@ public class DownloadManagerServiceTest {
/** /**
* The Ids of different methods in this mock object. * The Ids of different methods in this mock object.
*/ */
static enum MethodID { @IntDef({MethodID.DOWNLOAD_SUCCESSFUL, MethodID.DOWNLOAD_FAILED, MethodID.DOWNLOAD_PROGRESS,
DOWNLOAD_SUCCESSFUL, MethodID.DOWNLOAD_PAUSED, MethodID.DOWNLOAD_INTERRUPTED,
DOWNLOAD_FAILED, MethodID.CANCEL_DOWNLOAD_ID, MethodID.CLEAR_PENDING_DOWNLOADS})
DOWNLOAD_PROGRESS, @Retention(RetentionPolicy.SOURCE)
DOWNLOAD_PAUSED, public @interface MethodID {
DOWNLOAD_INTERRUPTED, int DOWNLOAD_SUCCESSFUL = 0;
CANCEL_DOWNLOAD_ID, int DOWNLOAD_FAILED = 1;
CLEAR_PENDING_DOWNLOADS int DOWNLOAD_PROGRESS = 2;
int DOWNLOAD_PAUSED = 3;
int DOWNLOAD_INTERRUPTED = 4;
int CANCEL_DOWNLOAD_ID = 5;
int CLEAR_PENDING_DOWNLOADS = 6;
} }
private final Queue<Pair<MethodID, Object>> mExpectedCalls = // Use MethodID for Integer values.
new ConcurrentLinkedQueue<Pair<MethodID, Object>>(); private final Queue<Pair<Integer, Object>> mExpectedCalls =
new ConcurrentLinkedQueue<Pair<Integer, Object>>();
public MockDownloadNotifier() { public MockDownloadNotifier() {
expect(MethodID.CLEAR_PENDING_DOWNLOADS, null); expect(MethodID.CLEAR_PENDING_DOWNLOADS, null);
...@@ -85,7 +93,7 @@ public class DownloadManagerServiceTest { ...@@ -85,7 +93,7 @@ public class DownloadManagerServiceTest {
this(); this();
} }
public MockDownloadNotifier expect(MethodID method, Object param) { public MockDownloadNotifier expect(@MethodID int method, Object param) {
mExpectedCalls.clear(); mExpectedCalls.clear();
mExpectedCalls.add(getMethodSignature(method, param)); mExpectedCalls.add(getMethodSignature(method, param));
return this; return this;
...@@ -101,21 +109,21 @@ public class DownloadManagerServiceTest { ...@@ -101,21 +109,21 @@ public class DownloadManagerServiceTest {
}); });
} }
public MockDownloadNotifier andThen(MethodID method, Object param) { public MockDownloadNotifier andThen(@MethodID int method, Object param) {
mExpectedCalls.add(getMethodSignature(method, param)); mExpectedCalls.add(getMethodSignature(method, param));
return this; return this;
} }
static Pair<MethodID, Object> getMethodSignature(MethodID methodId, Object param) { static Pair<Integer, Object> getMethodSignature(@MethodID int methodId, Object param) {
return new Pair<MethodID, Object>(methodId, param); return new Pair<Integer, Object>(methodId, param);
} }
void assertCorrectExpectedCall(MethodID methodId, Object param, boolean matchParams) { void assertCorrectExpectedCall(@MethodID int methodId, Object param, boolean matchParams) {
Log.w("MockDownloadNotifier", "Called: " + methodId); Log.w("MockDownloadNotifier", "Called: " + methodId);
Assert.assertFalse("Unexpected call:, no call expected, but got: " + methodId, Assert.assertFalse("Unexpected call:, no call expected, but got: " + methodId,
mExpectedCalls.isEmpty()); mExpectedCalls.isEmpty());
Pair<MethodID, Object> actual = getMethodSignature(methodId, param); Pair<Integer, Object> actual = getMethodSignature(methodId, param);
Pair<MethodID, Object> expected = mExpectedCalls.poll(); Pair<Integer, Object> expected = mExpectedCalls.poll();
Assert.assertEquals("Unexpected call", expected.first, actual.first); Assert.assertEquals("Unexpected call", expected.first, actual.first);
if (matchParams) { if (matchParams) {
Assert.assertTrue( Assert.assertTrue(
......
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.omaha; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.omaha;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.support.annotation.IntDef;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
...@@ -28,6 +29,8 @@ import java.io.ByteArrayOutputStream; ...@@ -28,6 +29,8 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
...@@ -72,7 +75,8 @@ public class OmahaBaseTest { ...@@ -72,7 +75,8 @@ public class OmahaBaseTest {
private TimestampPair mTimestampsOnRegisterNewRequest; private TimestampPair mTimestampsOnRegisterNewRequest;
private TimestampPair mTimestampsOnSaveState; private TimestampPair mTimestampsOnSaveState;
MockOmahaDelegate(Context context, DeviceType deviceType, InstallSource installSource) { MockOmahaDelegate(
Context context, DeviceType deviceType, @InstallSource int installSource) {
mContext = context; mContext = context;
mIsOnTablet = deviceType == DeviceType.TABLET; mIsOnTablet = deviceType == DeviceType.TABLET;
mIsInForeground = true; mIsInForeground = true;
...@@ -143,11 +147,40 @@ public class OmahaBaseTest { ...@@ -143,11 +147,40 @@ public class OmahaBaseTest {
} }
} }
private enum InstallSource { SYSTEM_IMAGE, ORGANIC } @IntDef({InstallSource.SYSTEM_IMAGE, InstallSource.ORGANIC})
private enum ServerResponse { SUCCESS, FAILURE } @Retention(RetentionPolicy.SOURCE)
private enum ConnectionStatus { RESPONDS, TIMES_OUT } private @interface InstallSource {
private enum InstallEvent { SEND, DONT_SEND } int SYSTEM_IMAGE = 0;
private enum PostStatus { DUE, NOT_DUE } int ORGANIC = 1;
}
@IntDef({ServerResponse.SUCCESS, ServerResponse.FAILURE})
@Retention(RetentionPolicy.SOURCE)
private @interface ServerResponse {
int SUCCESS = 0;
int FAILURE = 1;
}
@IntDef({ConnectionStatus.RESPONDS, ConnectionStatus.TIMES_OUT})
@Retention(RetentionPolicy.SOURCE)
private @interface ConnectionStatus {
int RESPONDS = 0;
int TIMES_OUT = 1;
}
@IntDef({InstallEvent.SEND, InstallEvent.DONT_SEND})
@Retention(RetentionPolicy.SOURCE)
private @interface InstallEvent {
int SEND = 0;
int DONT_SEND = 1;
}
@IntDef({PostStatus.DUE, PostStatus.NOT_DUE})
@Retention(RetentionPolicy.SOURCE)
private @interface PostStatus {
int DUE = 0;
int NOT_DUE = 1;
}
private AdvancedMockContext mContext; private AdvancedMockContext mContext;
private MockOmahaDelegate mDelegate; private MockOmahaDelegate mDelegate;
...@@ -159,7 +192,7 @@ public class OmahaBaseTest { ...@@ -159,7 +192,7 @@ public class OmahaBaseTest {
} }
private MockOmahaBase createOmahaBase( private MockOmahaBase createOmahaBase(
ServerResponse response, ConnectionStatus status, DeviceType deviceType) { @ServerResponse int response, @ConnectionStatus int status, DeviceType deviceType) {
MockOmahaBase omahaClient = new MockOmahaBase(mDelegate, response, status, deviceType); MockOmahaBase omahaClient = new MockOmahaBase(mDelegate, response, status, deviceType);
return omahaClient; return omahaClient;
} }
...@@ -183,8 +216,8 @@ public class OmahaBaseTest { ...@@ -183,8 +216,8 @@ public class OmahaBaseTest {
private final boolean mConnectionTimesOut; private final boolean mConnectionTimesOut;
private final boolean mIsOnTablet; private final boolean mIsOnTablet;
public MockOmahaBase(OmahaDelegate delegate, ServerResponse serverResponse, public MockOmahaBase(OmahaDelegate delegate, @ServerResponse int serverResponse,
ConnectionStatus connectionStatus, DeviceType deviceType) { @ConnectionStatus int connectionStatus, DeviceType deviceType) {
super(delegate); super(delegate);
mSendValidResponse = serverResponse == ServerResponse.SUCCESS; mSendValidResponse = serverResponse == ServerResponse.SUCCESS;
mConnectionTimesOut = connectionStatus == ConnectionStatus.TIMES_OUT; mConnectionTimesOut = connectionStatus == ConnectionStatus.TIMES_OUT;
...@@ -588,9 +621,9 @@ public class OmahaBaseTest { ...@@ -588,9 +621,9 @@ public class OmahaBaseTest {
mConnectionTimesOut = connectionTimesOut; mConnectionTimesOut = connectionTimesOut;
if (sendValidResponse) { if (sendValidResponse) {
mHTTPResponseCode = 200; mHTTPResponseCode = HttpURLConnection.HTTP_OK; // 200
} else { } else {
mHTTPResponseCode = 404; mHTTPResponseCode = HttpURLConnection.HTTP_NOT_FOUND; // 404
} }
} }
......
...@@ -7,10 +7,8 @@ package org.chromium.chrome.browser.suggestions; ...@@ -7,10 +7,8 @@ package org.chromium.chrome.browser.suggestions;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
import static org.chromium.chrome.browser.suggestions.SuggestionsSheetVisibilityChangeObserverTest.TestVisibilityChangeObserver.Event.Hidden;
import static org.chromium.chrome.browser.suggestions.SuggestionsSheetVisibilityChangeObserverTest.TestVisibilityChangeObserver.Event.InitialReveal;
import static org.chromium.chrome.browser.suggestions.SuggestionsSheetVisibilityChangeObserverTest.TestVisibilityChangeObserver.Event.StateChange;
import android.support.annotation.IntDef;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.Espresso; import android.support.test.espresso.Espresso;
import android.support.test.espresso.action.ViewActions; import android.support.test.espresso.action.ViewActions;
...@@ -29,6 +27,7 @@ import org.chromium.base.test.util.Restriction; ...@@ -29,6 +27,7 @@ import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ntp.NtpUiCaptureTestData; import org.chromium.chrome.browser.ntp.NtpUiCaptureTestData;
import org.chromium.chrome.browser.suggestions.SuggestionsSheetVisibilityChangeObserverTest.TestVisibilityChangeObserver.Event;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
import org.chromium.chrome.test.BottomSheetTestRule; import org.chromium.chrome.test.BottomSheetTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
...@@ -36,6 +35,8 @@ import org.chromium.chrome.test.util.browser.suggestions.DummySuggestionsEventRe ...@@ -36,6 +35,8 @@ import org.chromium.chrome.test.util.browser.suggestions.DummySuggestionsEventRe
import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule; import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule;
import org.chromium.ui.test.util.UiRestriction; import org.chromium.ui.test.util.UiRestriction;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
/** /**
...@@ -75,16 +76,16 @@ public class SuggestionsSheetVisibilityChangeObserverTest { ...@@ -75,16 +76,16 @@ public class SuggestionsSheetVisibilityChangeObserverTest {
public void testHomeSheetVisibilityOnWebPage() { public void testHomeSheetVisibilityOnWebPage() {
// Pull sheet to half. We use the animated variants to be closer to user triggered events. // Pull sheet to half. We use the animated variants to be closer to user triggered events.
mActivityRule.setSheetState(BottomSheet.SheetState.HALF, true); mActivityRule.setSheetState(BottomSheet.SheetState.HALF, true);
mObserver.expectEvents(InitialReveal, StateChange); mObserver.expectEvents(Event.INITIAL_REVEAL, Event.STATE_CHANGE);
mEventReporter.surfaceOpenedHelper.waitForCallback(); mEventReporter.surfaceOpenedHelper.waitForCallback();
// Pull sheet to full. // Pull sheet to full.
mActivityRule.setSheetState(BottomSheet.SheetState.FULL, true); mActivityRule.setSheetState(BottomSheet.SheetState.FULL, true);
mObserver.expectEvents(StateChange); mObserver.expectEvents(Event.STATE_CHANGE);
// close // close
Espresso.pressBack(); Espresso.pressBack();
mObserver.expectEvents(Hidden, StateChange, StateChange); mObserver.expectEvents(Event.HIDDEN, Event.STATE_CHANGE, Event.STATE_CHANGE);
} }
@Test @Test
...@@ -119,19 +120,26 @@ public class SuggestionsSheetVisibilityChangeObserverTest { ...@@ -119,19 +120,26 @@ public class SuggestionsSheetVisibilityChangeObserverTest {
// Changing the state of the sheet closes the omnibox suggestions and shows the home sheet. // Changing the state of the sheet closes the omnibox suggestions and shows the home sheet.
mActivityRule.setSheetState(BottomSheet.SheetState.HALF, true); mActivityRule.setSheetState(BottomSheet.SheetState.HALF, true);
mObserver.expectEvents(InitialReveal, StateChange); mObserver.expectEvents(Event.INITIAL_REVEAL, Event.STATE_CHANGE);
mEventReporter.surfaceOpenedHelper.waitForCallback(); mEventReporter.surfaceOpenedHelper.waitForCallback();
// Back closes the bottom sheet. // Back closes the bottom sheet.
Espresso.pressBack(); Espresso.pressBack();
mObserver.expectEvents(Hidden, StateChange, StateChange); mObserver.expectEvents(Event.HIDDEN, Event.STATE_CHANGE, Event.STATE_CHANGE);
assertEquals(BottomSheet.SheetState.PEEK, mActivityRule.getBottomSheet().getSheetState()); assertEquals(BottomSheet.SheetState.PEEK, mActivityRule.getBottomSheet().getSheetState());
mEventReporter.surfaceOpenedHelper.verifyCallCount(); mEventReporter.surfaceOpenedHelper.verifyCallCount();
} }
static class TestVisibilityChangeObserver extends SuggestionsSheetVisibilityChangeObserver { static class TestVisibilityChangeObserver extends SuggestionsSheetVisibilityChangeObserver {
public enum Event { InitialReveal, Shown, Hidden, StateChange } @IntDef({Event.INITIAL_REVEAL, Event.SHOWN, Event.HIDDEN, Event.STATE_CHANGE})
@Retention(RetentionPolicy.SOURCE)
public @interface Event {
int INITIAL_REVEAL = 0;
int SHOWN = 1;
int HIDDEN = 2;
int STATE_CHANGE = 3;
}
private final ChromeActivity mActivity; private final ChromeActivity mActivity;
...@@ -167,19 +175,19 @@ public class SuggestionsSheetVisibilityChangeObserverTest { ...@@ -167,19 +175,19 @@ public class SuggestionsSheetVisibilityChangeObserverTest {
mStateChangedHelper.notifyCalled(); mStateChangedHelper.notifyCalled();
} }
public void expectEvents(Event... events) { public void expectEvents(@Event int... events) {
for (Event e : events) { for (@Event int e : events) {
switch (e) { switch (e) {
case InitialReveal: case Event.INITIAL_REVEAL:
mInitialRevealHelper.waitForCallback(); mInitialRevealHelper.waitForCallback();
break; break;
case Shown: case Event.SHOWN:
mShownHelper.waitForCallback(); mShownHelper.waitForCallback();
break; break;
case Hidden: case Event.HIDDEN:
mHiddenHelper.waitForCallback(); mHiddenHelper.waitForCallback();
break; break;
case StateChange: case Event.STATE_CHANGE:
mStateChangedHelper.waitForCallback(); mStateChangedHelper.waitForCallback();
break; break;
} }
......
...@@ -6,11 +6,14 @@ package org.chromium.chrome.browser.vr; ...@@ -6,11 +6,14 @@ package org.chromium.chrome.browser.vr;
import android.content.Context; import android.content.Context;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.IntDef;
import com.google.vr.testframework.controller.ControllerTestApi; import com.google.vr.testframework.controller.ControllerTestApi;
import org.junit.Assert; import org.junit.Assert;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -23,7 +26,15 @@ import java.util.concurrent.TimeUnit; ...@@ -23,7 +26,15 @@ import java.util.concurrent.TimeUnit;
* - PairedControllerAddress: "FOO" * - PairedControllerAddress: "FOO"
*/ */
public class EmulatedVrController { public class EmulatedVrController {
public enum ScrollDirection { UP, DOWN, LEFT, RIGHT } @IntDef({ScrollDirection.UP, ScrollDirection.DOWN, ScrollDirection.LEFT, ScrollDirection.RIGHT})
@Retention(RetentionPolicy.SOURCE)
public @interface ScrollDirection {
int UP = 0;
int DOWN = 1;
int LEFT = 2;
int RIGHT = 3;
}
private static final int FIRST_INPUT_DELAY_MS = 500; private static final int FIRST_INPUT_DELAY_MS = 500;
private final ControllerTestApi mApi; private final ControllerTestApi mApi;
private boolean mHaveSentInputSinceEnteringVr; private boolean mHaveSentInputSinceEnteringVr;
...@@ -125,23 +136,23 @@ public class EmulatedVrController { ...@@ -125,23 +136,23 @@ public class EmulatedVrController {
* @param speed how long to wait between steps in the scroll, with higher * @param speed how long to wait between steps in the scroll, with higher
* numbers resulting in a faster scroll. * numbers resulting in a faster scroll.
*/ */
public void scroll(ScrollDirection direction, int steps, int speed) { public void scroll(@ScrollDirection int direction, int steps, int speed) {
float startX, startY, endX, endY; float startX, startY, endX, endY;
startX = startY = endX = endY = 0.5f; startX = startY = endX = endY = 0.5f;
switch (direction) { switch (direction) {
case UP: case ScrollDirection.UP:
startY = 0.1f; startY = 0.1f;
endY = 0.9f; endY = 0.9f;
break; break;
case DOWN: case ScrollDirection.DOWN:
startY = 0.9f; startY = 0.9f;
endY = 0.1f; endY = 0.1f;
break; break;
case LEFT: case ScrollDirection.LEFT:
startX = 0.1f; startX = 0.1f;
endX = 0.9f; endX = 0.9f;
break; break;
case RIGHT: case ScrollDirection.RIGHT:
startX = 0.9f; startX = 0.9f;
endX = 0.1f; endX = 0.1f;
break; break;
......
...@@ -11,6 +11,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_ ...@@ -11,6 +11,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM;
import android.graphics.PointF; import android.graphics.PointF;
import android.support.annotation.IntDef;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
...@@ -43,6 +44,8 @@ import org.chromium.content.browser.test.util.CriteriaHelper; ...@@ -43,6 +44,8 @@ import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content.browser.test.util.DOMUtils; import org.chromium.content.browser.test.util.DOMUtils;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
...@@ -72,9 +75,28 @@ public class VrBrowserNavigationTest { ...@@ -72,9 +75,28 @@ public class VrBrowserNavigationTest {
private static final String TEST_PAGE_WEBXR_URL = private static final String TEST_PAGE_WEBXR_URL =
WebXrVrTestFramework.getFileUrlForHtmlTestFile("test_navigation_webxr_page"); WebXrVrTestFramework.getFileUrlForHtmlTestFile("test_navigation_webxr_page");
private enum Page { PAGE_2D, PAGE_2D_2, PAGE_WEBVR, PAGE_WEBXR } @IntDef({Page.PAGE_2D, Page.PAGE_2D_2, Page.PAGE_WEBVR, Page.PAGE_WEBXR})
private enum PresentationMode { NON_PRESENTING, PRESENTING } @Retention(RetentionPolicy.SOURCE)
private enum FullscreenMode { NON_FULLSCREENED, FULLSCREENED } private @interface Page {
int PAGE_2D = 0;
int PAGE_2D_2 = 1;
int PAGE_WEBVR = 2;
int PAGE_WEBXR = 3;
}
@IntDef({PresentationMode.NON_PRESENTING, PresentationMode.PRESENTING})
@Retention(RetentionPolicy.SOURCE)
private @interface PresentationMode {
int NON_PRESENTING = 0;
int PRESENTING = 1;
}
@IntDef({FullscreenMode.NON_FULLSCREENED, FullscreenMode.FULLSCREENED})
@Retention(RetentionPolicy.SOURCE)
private @interface FullscreenMode {
int NON_FULLSCREENED = 0;
int FULLSCREENED = 1;
}
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
...@@ -84,15 +106,15 @@ public class VrBrowserNavigationTest { ...@@ -84,15 +106,15 @@ public class VrBrowserNavigationTest {
VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS); VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS);
} }
private String getUrl(Page page) { private String getUrl(@Page int page) {
switch (page) { switch (page) {
case PAGE_2D: case Page.PAGE_2D:
return TEST_PAGE_2D_URL; return TEST_PAGE_2D_URL;
case PAGE_2D_2: case Page.PAGE_2D_2:
return TEST_PAGE_2D_2_URL; return TEST_PAGE_2D_2_URL;
case PAGE_WEBVR: case Page.PAGE_WEBVR:
return TEST_PAGE_WEBVR_URL; return TEST_PAGE_WEBVR_URL;
case PAGE_WEBXR: case Page.PAGE_WEBXR:
return TEST_PAGE_WEBXR_URL; return TEST_PAGE_WEBXR_URL;
default: default:
throw new UnsupportedOperationException("Don't know page type " + page); throw new UnsupportedOperationException("Don't know page type " + page);
...@@ -104,7 +126,7 @@ public class VrBrowserNavigationTest { ...@@ -104,7 +126,7 @@ public class VrBrowserNavigationTest {
* {@link ChromeActivityTestRule#loadUrl loadUrl} but makes sure page initiates the * {@link ChromeActivityTestRule#loadUrl loadUrl} but makes sure page initiates the
* navigation. This is desirable since we are testing navigation transitions end-to-end. * navigation. This is desirable since we are testing navigation transitions end-to-end.
*/ */
private void navigateTo(final Page to) throws InterruptedException { private void navigateTo(final @Page int to) throws InterruptedException {
ChromeTabUtils.waitForTabPageLoaded(mTestRule.getActivity().getActivityTab(), () -> { ChromeTabUtils.waitForTabPageLoaded(mTestRule.getActivity().getActivityTab(), () -> {
mVrBrowserTestFramework.runJavaScriptOrFail( mVrBrowserTestFramework.runJavaScriptOrFail(
"window.location.href = '" + getUrl(to) + "';", POLL_TIMEOUT_SHORT_MS); "window.location.href = '" + getUrl(to) + "';", POLL_TIMEOUT_SHORT_MS);
...@@ -118,8 +140,8 @@ public class VrBrowserNavigationTest { ...@@ -118,8 +140,8 @@ public class VrBrowserNavigationTest {
Assert.assertTrue("Failed to enter fullscreen", DOMUtils.isFullscreen(webContents)); Assert.assertTrue("Failed to enter fullscreen", DOMUtils.isFullscreen(webContents));
} }
private void assertState(WebContents wc, Page page, PresentationMode presentationMode, private void assertState(WebContents wc, @Page int page, @PresentationMode int presentationMode,
FullscreenMode fullscreenMode) throws InterruptedException, TimeoutException { @FullscreenMode int fullscreenMode) throws InterruptedException, TimeoutException {
Assert.assertTrue("Browser is not in VR", VrShellDelegate.isInVr()); Assert.assertTrue("Browser is not in VR", VrShellDelegate.isInVr());
Assert.assertEquals("Browser is not on correct web site", getUrl(page), wc.getVisibleUrl()); Assert.assertEquals("Browser is not on correct web site", getUrl(page), wc.getVisibleUrl());
Assert.assertEquals("Browser's presentation mode does not match expectation", Assert.assertEquals("Browser's presentation mode does not match expectation",
...@@ -192,7 +214,7 @@ public class VrBrowserNavigationTest { ...@@ -192,7 +214,7 @@ public class VrBrowserNavigationTest {
impl2dToWeb(Page.PAGE_WEBXR, mWebXrVrTestFramework); impl2dToWeb(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void impl2dToWeb(Page page, WebXrVrTestFramework framework) private void impl2dToWeb(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(TEST_PAGE_2D_URL, PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(TEST_PAGE_2D_URL, PAGE_LOAD_TIMEOUT_S);
...@@ -225,7 +247,7 @@ public class VrBrowserNavigationTest { ...@@ -225,7 +247,7 @@ public class VrBrowserNavigationTest {
impl2dFullscreenToWeb(Page.PAGE_WEBXR, mWebXrVrTestFramework); impl2dFullscreenToWeb(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void impl2dFullscreenToWeb(Page page, WebXrVrTestFramework framework) private void impl2dFullscreenToWeb(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(TEST_PAGE_2D_URL, PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(TEST_PAGE_2D_URL, PAGE_LOAD_TIMEOUT_S);
enterFullscreenOrFail(framework.getFirstTabWebContents()); enterFullscreenOrFail(framework.getFirstTabWebContents());
...@@ -259,7 +281,7 @@ public class VrBrowserNavigationTest { ...@@ -259,7 +281,7 @@ public class VrBrowserNavigationTest {
webTo2dImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework); webTo2dImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void webTo2dImpl(Page page, WebXrVrTestFramework framework) private void webTo2dImpl(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S);
...@@ -292,7 +314,7 @@ public class VrBrowserNavigationTest { ...@@ -292,7 +314,7 @@ public class VrBrowserNavigationTest {
webToWebImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework); webToWebImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void webToWebImpl(Page page, WebXrVrTestFramework framework) private void webToWebImpl(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S);
...@@ -325,7 +347,7 @@ public class VrBrowserNavigationTest { ...@@ -325,7 +347,7 @@ public class VrBrowserNavigationTest {
webPresentingTo2dImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework); webPresentingTo2dImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void webPresentingTo2dImpl(Page page, WebXrVrTestFramework framework) private void webPresentingTo2dImpl(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S);
framework.enterSessionWithUserGestureOrFail(); framework.enterSessionWithUserGestureOrFail();
...@@ -359,7 +381,7 @@ public class VrBrowserNavigationTest { ...@@ -359,7 +381,7 @@ public class VrBrowserNavigationTest {
webPresentingToWebImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework); webPresentingToWebImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void webPresentingToWebImpl(Page page, WebXrVrTestFramework framework) private void webPresentingToWebImpl(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S);
framework.enterSessionWithUserGestureOrFail(); framework.enterSessionWithUserGestureOrFail();
...@@ -393,7 +415,7 @@ public class VrBrowserNavigationTest { ...@@ -393,7 +415,7 @@ public class VrBrowserNavigationTest {
webFullscreenTo2dImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework); webFullscreenTo2dImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void webFullscreenTo2dImpl(Page page, WebXrVrTestFramework framework) private void webFullscreenTo2dImpl(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S);
enterFullscreenOrFail(framework.getFirstTabWebContents()); enterFullscreenOrFail(framework.getFirstTabWebContents());
...@@ -427,7 +449,7 @@ public class VrBrowserNavigationTest { ...@@ -427,7 +449,7 @@ public class VrBrowserNavigationTest {
webFullscreenToWebImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework); webFullscreenToWebImpl(Page.PAGE_WEBXR, mWebXrVrTestFramework);
} }
private void webFullscreenToWebImpl(Page page, WebXrVrTestFramework framework) private void webFullscreenToWebImpl(@Page int page, WebXrVrTestFramework framework)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S); framework.loadUrlAndAwaitInitialization(getUrl(page), PAGE_LOAD_TIMEOUT_S);
enterFullscreenOrFail(framework.getFirstTabWebContents()); enterFullscreenOrFail(framework.getFirstTabWebContents());
......
...@@ -37,7 +37,7 @@ public class ChromeTabbedActivityVrTestRule ...@@ -37,7 +37,7 @@ public class ChromeTabbedActivityVrTestRule
} }
@Override @Override
public SupportedActivity getRestriction() { public @SupportedActivity int getRestriction() {
return SupportedActivity.CTA; return SupportedActivity.CTA;
} }
......
...@@ -28,7 +28,7 @@ public class ChromeTabbedActivityXrTestRule ...@@ -28,7 +28,7 @@ public class ChromeTabbedActivityXrTestRule
} }
@Override @Override
public SupportedActivity getRestriction() { public @SupportedActivity int getRestriction() {
return SupportedActivity.CTA; return SupportedActivity.CTA;
} }
} }
...@@ -41,7 +41,7 @@ public class CustomTabActivityVrTestRule extends CustomTabActivityTestRule imple ...@@ -41,7 +41,7 @@ public class CustomTabActivityVrTestRule extends CustomTabActivityTestRule imple
} }
@Override @Override
public SupportedActivity getRestriction() { public @SupportedActivity int getRestriction() {
return SupportedActivity.CCT; return SupportedActivity.CCT;
} }
......
...@@ -31,7 +31,7 @@ public class CustomTabActivityXrTestRule extends CustomTabActivityTestRule imple ...@@ -31,7 +31,7 @@ public class CustomTabActivityXrTestRule extends CustomTabActivityTestRule imple
} }
@Override @Override
public SupportedActivity getRestriction() { public @SupportedActivity int getRestriction() {
return SupportedActivity.CCT; return SupportedActivity.CCT;
} }
} }
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.vr.rules; package org.chromium.chrome.browser.vr.rules;
import android.support.annotation.IntDef;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
...@@ -30,16 +32,19 @@ import java.lang.annotation.Target; ...@@ -30,16 +32,19 @@ import java.lang.annotation.Target;
@Target({ElementType.METHOD}) @Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface HeadTrackingMode { public @interface HeadTrackingMode {
public enum SupportedMode { @IntDef({SupportedMode.FROZEN, SupportedMode.SWEEP, SupportedMode.ROTATE,
FROZEN, // Locked looking straight forward. SupportedMode.CIRCLE_STRAFE, SupportedMode.MOTION_SICKNESS})
SWEEP, // Rotates back and forth horizontally in a 180 degree arc. @Retention(RetentionPolicy.RUNTIME)
ROTATE, // Rotates 360 degrees. public @interface SupportedMode {
CIRCLE_STRAFE, // Rotates 360 degrees, and if 6DOF is supported, changes position. int FROZEN = 0; // Locked looking straight forward.
MOTION_SICKNESS // Moves in a figure-eight-like pattern. int SWEEP = 1; // Rotates back and forth horizontally in a 180 degree arc.
int ROTATE = 2; // Rotates 360 degrees.
int CIRCLE_STRAFE = 3; // Rotates 360 degrees, and if 6DOF is supported, changes position.
int MOTION_SICKNESS = 4; // Moves in a figure-eight-like pattern.
} }
/** /**
* @return The supported mode. * @return The supported mode.
*/ */
public SupportedMode value(); public @SupportedMode int value();
} }
...@@ -35,7 +35,7 @@ public class WebappActivityVrTestRule extends WebappActivityTestRule implements ...@@ -35,7 +35,7 @@ public class WebappActivityVrTestRule extends WebappActivityTestRule implements
} }
@Override @Override
public SupportedActivity getRestriction() { public @SupportedActivity int getRestriction() {
return SupportedActivity.WAA; return SupportedActivity.WAA;
} }
......
...@@ -29,7 +29,7 @@ public class WebappActivityXrTestRule extends WebappActivityTestRule implements ...@@ -29,7 +29,7 @@ public class WebappActivityXrTestRule extends WebappActivityTestRule implements
} }
@Override @Override
public SupportedActivity getRestriction() { public @SupportedActivity int getRestriction() {
return SupportedActivity.WAA; return SupportedActivity.WAA;
} }
} }
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.vr.rules; package org.chromium.chrome.browser.vr.rules;
import android.support.annotation.IntDef;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
...@@ -25,15 +27,18 @@ import java.lang.annotation.Target; ...@@ -25,15 +27,18 @@ import java.lang.annotation.Target;
@Target({ElementType.METHOD}) @Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface XrActivityRestriction { public @interface XrActivityRestriction {
public enum SupportedActivity { @IntDef({SupportedActivity.CTA, SupportedActivity.CCT, SupportedActivity.WAA,
CTA, // ChromeTabbedActivity/Normal Chrome SupportedActivity.ALL})
CCT, // CustomTabActivity/Chrome Custom Tab @Retention(RetentionPolicy.SOURCE)
WAA, // WebappActivity/Progressive Web App public @interface SupportedActivity {
ALL // Run in all of the above int CTA = 0; // ChromeTabbedActivity/Normal Chrome
int CCT = 1; // CustomTabActivity/Chrome Custom Tab
int WAA = 2; // WebappActivity/Progressive Web App
int ALL = 3; // Run in all of the above
} }
/** /**
* @return A list of activity restrictions. * @return A list of activity restrictions.
*/ */
public SupportedActivity[] value(); public @SupportedActivity int[] value();
} }
...@@ -17,9 +17,9 @@ import org.chromium.chrome.browser.vr.util.XrTestRuleUtils; ...@@ -17,9 +17,9 @@ import org.chromium.chrome.browser.vr.util.XrTestRuleUtils;
* one of the supported Activity types for the test. * one of the supported Activity types for the test.
*/ */
public class XrActivityRestrictionRule implements TestRule { public class XrActivityRestrictionRule implements TestRule {
private SupportedActivity mCurrentRestriction; private @SupportedActivity int mCurrentRestriction;
public XrActivityRestrictionRule(SupportedActivity currentRestriction) { public XrActivityRestrictionRule(@SupportedActivity int currentRestriction) {
mCurrentRestriction = currentRestriction; mCurrentRestriction = currentRestriction;
} }
...@@ -35,7 +35,8 @@ public class XrActivityRestrictionRule implements TestRule { ...@@ -35,7 +35,8 @@ public class XrActivityRestrictionRule implements TestRule {
return generateIgnoreStatement(); return generateIgnoreStatement();
} }
SupportedActivity[] activities = annotation.value(); @SupportedActivity
int[] activities = annotation.value();
for (int i = 0; i < activities.length; i++) { for (int i = 0; i < activities.length; i++) {
if (activities[i] == mCurrentRestriction || activities[i] == SupportedActivity.ALL) { if (activities[i] == mCurrentRestriction || activities[i] == SupportedActivity.ALL) {
return base; return base;
......
...@@ -15,5 +15,5 @@ public interface XrTestRule { ...@@ -15,5 +15,5 @@ public interface XrTestRule {
* @return The XrActivityRestriction.SupportedActivity that this rule is restricted to running * @return The XrActivityRestriction.SupportedActivity that this rule is restricted to running
* in. * in.
*/ */
public SupportedActivity getRestriction(); public @SupportedActivity int getRestriction();
} }
...@@ -148,7 +148,7 @@ public class HeadTrackingUtils { ...@@ -148,7 +148,7 @@ public class HeadTrackingUtils {
* @param rule The VrTestRule used by the current test case. * @param rule The VrTestRule used by the current test case.
* @param mode The HeadTrackingMode.SupportedMode value to set the fake head tracker mode to. * @param mode The HeadTrackingMode.SupportedMode value to set the fake head tracker mode to.
*/ */
public static void applyHeadTrackingMode(VrTestRule rule, SupportedMode mode) { public static void applyHeadTrackingMode(VrTestRule rule, @SupportedMode int mode) {
applyHeadTrackingModeInternal(rule, mode); applyHeadTrackingModeInternal(rule, mode);
// TODO(bsheedy): Remove this sleep if the head tracking service ever exposes a way to be // TODO(bsheedy): Remove this sleep if the head tracking service ever exposes a way to be
// notified when a setting has been applied. // notified when a setting has been applied.
...@@ -194,24 +194,24 @@ public class HeadTrackingUtils { ...@@ -194,24 +194,24 @@ public class HeadTrackingUtils {
InstrumentationRegistry.getContext().startService(typeIntent); InstrumentationRegistry.getContext().startService(typeIntent);
} }
public static String supportedModeToString(SupportedMode mode) { public static String supportedModeToString(@SupportedMode int mode) {
switch (mode) { switch (mode) {
case FROZEN: case SupportedMode.FROZEN:
return "frozen"; return "frozen";
case SWEEP: case SupportedMode.SWEEP:
return "sweep"; return "sweep";
case ROTATE: case SupportedMode.ROTATE:
return "rotate"; return "rotate";
case CIRCLE_STRAFE: case SupportedMode.CIRCLE_STRAFE:
return "circle_strafe"; return "circle_strafe";
case MOTION_SICKNESS: case SupportedMode.MOTION_SICKNESS:
return "motion_sickness"; return "motion_sickness";
default: default:
return "unknown_mode"; return "unknown_mode";
} }
} }
private static void applyHeadTrackingModeInternal(VrTestRule rule, SupportedMode mode) { private static void applyHeadTrackingModeInternal(VrTestRule rule, @SupportedMode int mode) {
restartHeadTrackingServiceIfNecessary(rule); restartHeadTrackingServiceIfNecessary(rule);
// Set the fake tracker mode to the given value. // Set the fake tracker mode to the given value.
Intent modeIntent = new Intent(ACTION_SET_FAKE_TRACKER_MODE); Intent modeIntent = new Intent(ACTION_SET_FAKE_TRACKER_MODE);
......
...@@ -7,12 +7,16 @@ package org.chromium.chrome.browser.vr.util; ...@@ -7,12 +7,16 @@ package org.chromium.chrome.browser.vr.util;
import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_CHECK_INTERVAL_SHORT_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_CHECK_INTERVAL_SHORT_MS;
import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS;
import android.support.annotation.IntDef;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.infobar.InfoBar; import org.chromium.chrome.browser.infobar.InfoBar;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.util.InfoBarUtil; import org.chromium.chrome.test.util.InfoBarUtil;
import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.CriteriaHelper;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List; import java.util.List;
/** /**
...@@ -20,8 +24,12 @@ import java.util.List; ...@@ -20,8 +24,12 @@ import java.util.List;
* a high level. * a high level.
*/ */
public class VrInfoBarUtils { public class VrInfoBarUtils {
public enum Button { PRIMARY, SECONDARY } @IntDef({Button.PRIMARY, Button.SECONDARY})
; @Retention(RetentionPolicy.SOURCE)
public @interface Button {
int PRIMARY = 0;
int SECONDARY = 1;
}
/** /**
* Determines whether InfoBars are present in the current activity. * Determines whether InfoBars are present in the current activity.
...@@ -43,12 +51,12 @@ public class VrInfoBarUtils { ...@@ -43,12 +51,12 @@ public class VrInfoBarUtils {
* @param rule The ChromeActivityTestRule to get the InfoBars from. * @param rule The ChromeActivityTestRule to get the InfoBars from.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static void clickInfoBarButton(final Button button, ChromeActivityTestRule rule) { public static void clickInfoBarButton(final @Button int button, ChromeActivityTestRule rule) {
if (!isInfoBarPresent(rule)) return; if (!isInfoBarPresent(rule)) return;
final List<InfoBar> infoBars = rule.getInfoBars(); final List<InfoBar> infoBars = rule.getInfoBars();
ThreadUtils.runOnUiThreadBlocking(() -> { ThreadUtils.runOnUiThreadBlocking(() -> {
switch (button) { switch (button) {
case PRIMARY: case Button.PRIMARY:
InfoBarUtil.clickPrimaryButton(infoBars.get(0)); InfoBarUtil.clickPrimaryButton(infoBars.get(0));
break; break;
default: default:
......
...@@ -83,15 +83,15 @@ public class XrTestRuleUtils { ...@@ -83,15 +83,15 @@ public class XrTestRuleUtils {
* @param activity The SupportedActivity value to convert to a String. * @param activity The SupportedActivity value to convert to a String.
* @return A String representation of the activity. * @return A String representation of the activity.
*/ */
public static String supportedActivityToString(SupportedActivity activity) { public static String supportedActivityToString(@SupportedActivity int activity) {
switch (activity) { switch (activity) {
case CTA: case SupportedActivity.CTA:
return "ChromeTabbedActivity"; return "ChromeTabbedActivity";
case CCT: case SupportedActivity.CCT:
return "CustomTabActivity"; return "CustomTabActivity";
case WAA: case SupportedActivity.WAA:
return "WebappActivity"; return "WebappActivity";
case ALL: case SupportedActivity.ALL:
return "AllActivities"; return "AllActivities";
default: default:
return "UnknownActivity"; return "UnknownActivity";
......
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