Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#102 FIX #772

Merged
merged 4 commits into from
Nov 25, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

33 changes: 16 additions & 17 deletions src/main/java/io/appium/java_client/MultiTouchAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,15 @@

package io.appium.java_client;

import static com.google.common.base.Preconditions.checkArgument;
import static java.util.stream.Collectors.toList;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;

import java.util.List;
import java.util.Map;

/**
* Used for Webdriver 3 multi-touch gestures
* See the Webriver 3 spec https://dvcs.w3.org/hg/webdriver/raw-file/default/webdriver-spec.html
Expand Down Expand Up @@ -62,28 +67,22 @@ public MultiTouchAction add(TouchAction action) {
* Perform the multi-touch action on the mobile performsTouchActions.
*/
public MultiTouchAction perform() {
int size = actions.build().size();
if (size > 1) {
List<TouchAction> touchActions = actions.build();
checkArgument(touchActions.size() > 0,
"MultiTouch action must have at least one TouchAction added before it can be performed");
if (touchActions.size() > 1) {
performsTouchActions.performMultiTouchAction(this);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can returns this immediately here, so then else block is not needed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mykola-mokhnach
I can't understand how to do it

performsTouchActions.performMultiTouchAction(this);

is void

performsTouchActions.performTouchAction(touchActions.get(0));

returns TouchAction

Copy link
Contributor

@mykola-mokhnach mykola-mokhnach Nov 25, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

        if (touchActions.size() > 1) {
            performsTouchActions.performMultiTouchAction(this);
            return this;
        }
        //android doesn't like having multi-touch actions with only a single TouchAction...
        performsTouchActions.performTouchAction(touchActions.get(0));
        return this;

} else if (size == 1) {
//android doesn't like having multi-touch actions with only a single TouchAction...
performsTouchActions.performTouchAction(actions.build().get(0));
} else {
throw new MissingParameterException(
"MultiTouch action must have at least one TouchAction "
+ "added before it can be performed");
}
return this;
} //android doesn't like having multi-touch actions with only a single TouchAction...
performsTouchActions.performTouchAction(touchActions.get(0));
return this;
}

protected ImmutableMap<String, ImmutableList<Object>> getParameters() {
ImmutableList.Builder<Object> listOfActionChains = ImmutableList.builder();
protected Map<String, List<Object>> getParameters() {
ImmutableList<TouchAction> touchActions = actions.build();

touchActions.forEach(action -> {
listOfActionChains.add(action.getParameters().get("actions"));
});
return ImmutableMap.of("actions", listOfActionChains.build());
return ImmutableMap.of("actions",
touchActions.stream().map(touchAction ->
touchAction.getParameters().get("actions")).collect(toList()));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import static io.appium.java_client.MobileCommand.PERFORM_MULTI_TOUCH;
import static io.appium.java_client.MobileCommand.PERFORM_TOUCH_ACTION;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Map;

public interface PerformsTouchActions extends ExecutesMethod {
/**
Expand All @@ -37,7 +37,7 @@ public interface PerformsTouchActions extends ExecutesMethod {
* @return the same touch action object
*/
default TouchAction performTouchAction(TouchAction touchAction) {
ImmutableMap<String, ImmutableList<Object>> parameters = touchAction.getParameters();
Map<String, List<Object>> parameters = touchAction.getParameters();
execute(PERFORM_TOUCH_ACTION, parameters);
return touchAction.clearParameters();
}
Expand All @@ -54,7 +54,7 @@ default TouchAction performTouchAction(TouchAction touchAction) {
* @param multiAction the MultiTouchAction object to perform.
*/
default void performMultiTouchAction(MultiTouchAction multiAction) {
ImmutableMap<String, ImmutableList<Object>> parameters = multiAction.getParameters();
Map<String, List<Object>> parameters = multiAction.getParameters();
execute(PERFORM_MULTI_TOUCH, parameters);
multiAction.clearActions();
}
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/io/appium/java_client/TouchAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import static io.appium.java_client.touch.LongPressOptions.longPressOptions;
import static io.appium.java_client.touch.offset.ElementOption.element;
import static io.appium.java_client.touch.offset.PointOption.point;
import static java.util.stream.Collectors.toList;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
Expand All @@ -34,6 +35,8 @@
import org.openqa.selenium.WebElement;

import java.time.Duration;
import java.util.List;
import java.util.Map;

/**
* Used for Webdriver 3 touch actions
Expand Down Expand Up @@ -415,13 +418,10 @@ public T perform() {
*
* @return A map of parameters for this touch action to pass as part of mjsonwp.
*/
protected ImmutableMap<String, ImmutableList<Object>> getParameters() {

ImmutableList.Builder<Object> parameters = builder();
ImmutableList<ActionParameter> actionList = parameterBuilder.build();

actionList.forEach(action -> parameters.add(action.getParameterMap()));
return ImmutableMap.of("actions", parameters.build());
protected Map<String, List<Object>> getParameters() {
List<ActionParameter> actionList = parameterBuilder.build();
return ImmutableMap.of("actions", actionList.stream()
.map(ActionParameter::getParameterMap).collect(toList()));
}

/**
Expand Down