Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2011 Selenium committers
   * 
   * 
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
   * in compliance with the License. You may obtain a copy of the License at
   * 
   * http://www.apache.org/licenses/LICENSE-2.0
   * 
  * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
 
 package io.selendroid.android;
 
 import java.util.List;
 
 
Implements touch capabilities of a device.
 
 public class AndroidTouchScreen implements TouchScreen {
 
   private final SelendroidDriver driver;
 
   public AndroidTouchScreen(SelendroidDriver driver) {
     this. = driver;
   }
 
   public void singleTap(Coordinates where) {
     Point toTap = where.getLocationOnScreen();
     List<MotionEventmotionEvents = new ArrayList<MotionEvent>();
     long downTime = SystemClock.uptimeMillis();
     motionEvents.add(getMotionEvent(downTimedownTime.toTap));
     motionEvents.add(getMotionEvent(downTimedownTime.toTap));
     sendMotionEvents(motionEvents);
   }
 
   public void down(int xint y) {
     List<MotionEventevent = new ArrayList<MotionEvent>();
     long downTime = SystemClock.uptimeMillis();
     Point coords = new Point(xy);
     event.add(getMotionEvent(downTimedownTime.coords));
     sendMotionEvents(event);
   }
 
   public void up(int xint y) {
     List<MotionEventevent = new ArrayList<MotionEvent>();
     long downTime = SystemClock.uptimeMillis();
     Point coords = new Point(xy);
     event.add(getMotionEvent(downTimedownTime.coords));
     sendMotionEvents(event);
   }
 
   public void move(int xint y) {
     List<MotionEventevent = new ArrayList<MotionEvent>();
     long downTime = SystemClock.uptimeMillis();
     Point coords = new Point(xy);
     event.add(getMotionEvent(downTimedownTime.coords));
     sendMotionEvents(event);
   }
 
   public void scroll(Coordinates whereint xOffsetint yOffset) {
     long downTime = SystemClock.uptimeMillis();
     List<MotionEventmotionEvents = new ArrayList<MotionEvent>();
     Point origin = where.getLocationOnScreen();
     Point destination = new Point(origin.x + xOffsetorigin.y + yOffset);
     motionEvents.add(getMotionEvent(downTimedownTime.origin));
 
     Scroll scroll = new Scroll(origindestinationdownTime);
     // Initial acceleration from origin to reference point
     motionEvents.addAll(getMoveEvents(downTimedownTimeoriginscroll.getDecelerationPoint(),
         scroll.INITIAL_STEPSscroll.TIME_BETWEEN_EVENTS));
     // Deceleration phase from reference point to destination
     motionEvents.addAll(getMoveEvents(downTimescroll.getEventTimeForReferencePoint(),
         scroll.getDecelerationPoint(), destinationscroll.DECELERATION_STEPS,
         scroll.TIME_BETWEEN_EVENTS));
 
     motionEvents.add(getMotionEvent(downTime,
         (downTime + scroll.getEventTimeForDestinationPoint()), .destination));
     sendMotionEvents(motionEvents);
   }
 
  public void doubleTap(Coordinates where) {
    Point toDoubleTap = where.getLocationOnScreen();
    List<MotionEventmotionEvents = new ArrayList<MotionEvent>();
    long downTime = SystemClock.uptimeMillis();
    motionEvents.add(getMotionEvent(downTimedownTime.toDoubleTap));
    motionEvents.add(getMotionEvent(downTimedownTime.toDoubleTap));
    motionEvents.add(getMotionEvent(downTimedownTime.toDoubleTap));
    motionEvents.add(getMotionEvent(downTimedownTime.toDoubleTap));
    sendMotionEvents(motionEvents);
  }
  public void longPress(Coordinates where) {
    long downTime = SystemClock.uptimeMillis();
    List<MotionEventmotionEvents = new ArrayList<MotionEvent>();
    Point point = where.getLocationOnScreen();
    motionEvents.add(getMotionEvent(downTimedownTime.point));
    motionEvents.add(getMotionEvent(downTime, (downTime + 3000), .point));
    sendMotionEvents(motionEvents);
  }
  public void scroll(final int xOffsetfinal int yOffset) {
    List<ViewscrollableContainer =
        ViewHierarchyAnalyzer.getDefaultInstance().findScrollableContainer();
    ServerInstrumentation instrumentation = ServerInstrumentation.getInstance();
    if (scrollableContainer == null) {
      // nothing to do
      return;
    }
    for (View view : scrollableContainer) {
      if (view instanceof AbsListView) {
        final AbsListView absListView = (AbsListViewview;
        instrumentation.runOnUiThread(new Runnable() {
          public void run() {
            absListView.scrollBy(xOffsetyOffset);
          }
        });
      } else if (view instanceof ScrollView) {
        final ScrollView scrollView = (ScrollViewview;
        instrumentation.runOnUiThread(new Runnable() {
          public void run() {
            scrollView.scrollBy(xOffsetyOffset);
          }
        });
      } else if (view instanceof WebView) {
        final WebView webView = (WebViewview;
        instrumentation.runOnUiThread(new Runnable() {
          public void run() {
            webView.scrollBy(xOffsetyOffset);
          }
        });
      }
    }
  }
  public void flick(final int speedXfinal int speedY) {
    List<ViewscrollableContainer =
        ViewHierarchyAnalyzer.getDefaultInstance().findScrollableContainer();
    ServerInstrumentation instrumentation = ServerInstrumentation.getInstance();
    if (scrollableContainer == null) {
      // nothing to do
      return;
    }
    for (View view : scrollableContainer) {
      if (view instanceof AbsListView) {
        // ignore
      } else if (view instanceof ScrollView) {
        final ScrollView scrollView = (ScrollViewview;
        instrumentation.runOnUiThread(new Runnable() {
          public void run() {
            scrollView.fling(speedY);
          }
        });
      } else if (view instanceof WebView) {
        final WebView webView = (WebViewview;
        instrumentation.runOnUiThread(new Runnable() {
          public void run() {
            webView.flingScroll(speedXspeedY);
          }
        });
      }
    }
  }
  public void flick(Coordinates whereint xOffsetint yOffsetint speed) {
    long downTime = SystemClock.uptimeMillis();
    List<MotionEventmotionEvents = new ArrayList<MotionEvent>();
    Point origin = where.getLocationOnScreen();
    Point destination = new Point(origin.x + xOffsetorigin.y + yOffset);
    Flick flick = new Flick(speed);
    motionEvents.add(getMotionEvent(downTimedownTime.origin));
    motionEvents.addAll(getMoveEvents(downTimedownTimeorigindestinationflick.STEPS,
        flick.getTimeBetweenEvents()));
    motionEvents.add(getMotionEvent(downTimeflick.getTimeForDestinationPoint(downTime),
        .destination));
    sendMotionEvents(motionEvents);
  }
  private MotionEvent getMotionEvent(long startlong eventTimeint actionPoint coords) {
    return MotionEvent.obtain(starteventTimeactioncoords.xcoords.y, 0);
  }
  private List<MotionEventgetMoveEvents(long downTimelong startingEVentTimePoint origin,
      Point destinationint stepslong timeBetweenEvents) {
    List<MotionEventmove = new ArrayList<MotionEvent>();
    MotionEvent event = null;
    float xStep = (destination.x - origin.x) / steps;
    float yStep = (destination.y - origin.y) / steps;
    float x = origin.x;
    float y = origin.y;
    long eventTime = startingEVentTime;
    for (int i = 0; i < steps - 1; i++) {
      x += xStep;
      y += yStep;
      eventTime += timeBetweenEvents;
      event = MotionEvent.obtain(downTimeeventTime.xy, 0);
      move.add(event);
    }
    eventTime += timeBetweenEvents;
    move.add(getMotionEvent(downTimeeventTime.destination));
    return move;
  }
  private void sendMotionEvents(final List<MotionEventeventsToSend) {
    ServerInstrumentation instr = ServerInstrumentation.getInstance();
    try {
      instr.waitForIdleSync();
      for (MotionEvent event : eventsToSend) {
        instr.sendPointerSync(event);
      }
    } catch (SecurityException ignored) {
      ignored.printStackTrace();
    }
  }
  final class Scroll {
    private Point origin;
    private Point destination;
    private long downTime;
    // A regular scroll usually has 15 gestures, where the last 5 are used for deceleration
    final static int INITIAL_STEPS = 10;
    final static int DECELERATION_STEPS = 5;
    final int TOTAL_STEPS =  + ;
    // Time in milliseconds to provide a speed similar to scroll
    final long TIME_BETWEEN_EVENTS = 50;
    public Scroll(Point originPoint destinationlong downTime) {
      this. = origin;
      this. = destination;
      this. = downTime;
    }
    // This method is used to calculate the point where the deceleration will start at 20% of the
    // distance to the destination point
    private Point getDecelerationPoint() {
      int deltaX = (. - .);
      int deltaY = (. - .);
      // Coordinates of reference point where deceleration should start for scroll gesture, on the
      // last 20% of the total distance to scroll
      int xRef = (int) (deltaX * 0.8);
      int yRef = (int) (deltaY * 0.8);
      return new Point(. + xRef. + yRef);
    }
    private long getEventTimeForReferencePoint() {
      return ( +  * );
    }
    private long getEventTimeForDestinationPoint() {
      return ( +  * );
    }
  }
  final class Flick {
    private final int SPEED_NORMAL = 0;
    private final int SPEED_FAST = 1;
    // A regular scroll usually has 4 gestures
    private final static int STEPS = 4;
    private int speed;
    public Flick(int speed) {
      this. = speed;
    }
    private long getTimeBetweenEvents() {
      if ( == ) {
        return 25; // Time in milliseconds to provide a speed similar to normal flick
      } else if ( == ) {
        return 9; // Time in milliseconds to provide a speed similar to fast flick
      }
      return 0;
    }
    private long getTimeForDestinationPoint(long downTime) {
      return (downTime +  * getTimeBetweenEvents());
    }
  }
New to GrepCode? Check out our FAQ X