Search in sources :

Example 41 with PointerCoords

use of android.view.MotionEvent.PointerCoords in project android_frameworks_base by ResurrectionRemix.

the class EdgeGestureInputFilter method getTempPointerCoordsWithMinSizeLocked.

private PointerCoords[] getTempPointerCoordsWithMinSizeLocked(int size) {
    final int oldSize = mTempPointerCoords.length;
    if (oldSize < size) {
        PointerCoords[] oldTempPointerCoords = mTempPointerCoords;
        mTempPointerCoords = new PointerCoords[size];
        System.arraycopy(oldTempPointerCoords, 0, mTempPointerCoords, 0, oldSize);
    }
    for (int i = oldSize; i < size; i++) {
        mTempPointerCoords[i] = new PointerCoords();
    }
    return mTempPointerCoords;
}
Also used : PointerCoords(android.view.MotionEvent.PointerCoords)

Example 42 with PointerCoords

use of android.view.MotionEvent.PointerCoords in project android_frameworks_base by ResurrectionRemix.

the class PointerLocationView method onPointerEvent.

@Override
public void onPointerEvent(MotionEvent event) {
    final int action = event.getAction();
    int NP = mPointers.size();
    if (action == MotionEvent.ACTION_DOWN || (action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN) {
        final int index = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> // will be 0 for down
        MotionEvent.ACTION_POINTER_INDEX_SHIFT;
        if (action == MotionEvent.ACTION_DOWN) {
            for (int p = 0; p < NP; p++) {
                final PointerState ps = mPointers.get(p);
                ps.clearTrace();
                ps.mCurDown = false;
            }
            mCurDown = true;
            mCurNumPointers = 0;
            mMaxNumPointers = 0;
            mVelocity.clear();
            if (mAltVelocity != null) {
                mAltVelocity.clear();
            }
        }
        mCurNumPointers += 1;
        if (mMaxNumPointers < mCurNumPointers) {
            mMaxNumPointers = mCurNumPointers;
        }
        final int id = event.getPointerId(index);
        while (NP <= id) {
            PointerState ps = new PointerState();
            mPointers.add(ps);
            NP++;
        }
        if (mActivePointerId < 0 || !mPointers.get(mActivePointerId).mCurDown) {
            mActivePointerId = id;
        }
        final PointerState ps = mPointers.get(id);
        ps.mCurDown = true;
        InputDevice device = InputDevice.getDevice(event.getDeviceId());
        ps.mHasBoundingBox = device != null && device.getMotionRange(MotionEvent.AXIS_GENERIC_1) != null;
    }
    final int NI = event.getPointerCount();
    mVelocity.addMovement(event);
    mVelocity.computeCurrentVelocity(1);
    if (mAltVelocity != null) {
        mAltVelocity.addMovement(event);
        mAltVelocity.computeCurrentVelocity(1);
    }
    final int N = event.getHistorySize();
    for (int historyPos = 0; historyPos < N; historyPos++) {
        for (int i = 0; i < NI; i++) {
            final int id = event.getPointerId(i);
            final PointerState ps = mCurDown ? mPointers.get(id) : null;
            final PointerCoords coords = ps != null ? ps.mCoords : mTempCoords;
            event.getHistoricalPointerCoords(i, historyPos, coords);
            if (mPrintCoords) {
                logCoords("Pointer", action, i, coords, id, event);
            }
            if (ps != null) {
                ps.addTrace(coords.x, coords.y, false);
            }
        }
    }
    for (int i = 0; i < NI; i++) {
        final int id = event.getPointerId(i);
        final PointerState ps = mCurDown ? mPointers.get(id) : null;
        final PointerCoords coords = ps != null ? ps.mCoords : mTempCoords;
        event.getPointerCoords(i, coords);
        if (mPrintCoords) {
            logCoords("Pointer", action, i, coords, id, event);
        }
        if (ps != null) {
            ps.addTrace(coords.x, coords.y, true);
            ps.mXVelocity = mVelocity.getXVelocity(id);
            ps.mYVelocity = mVelocity.getYVelocity(id);
            mVelocity.getEstimator(id, ps.mEstimator);
            if (mAltVelocity != null) {
                ps.mAltXVelocity = mAltVelocity.getXVelocity(id);
                ps.mAltYVelocity = mAltVelocity.getYVelocity(id);
                mAltVelocity.getEstimator(id, ps.mAltEstimator);
            }
            ps.mToolType = event.getToolType(i);
            if (ps.mHasBoundingBox) {
                ps.mBoundingLeft = event.getAxisValue(MotionEvent.AXIS_GENERIC_1, i);
                ps.mBoundingTop = event.getAxisValue(MotionEvent.AXIS_GENERIC_2, i);
                ps.mBoundingRight = event.getAxisValue(MotionEvent.AXIS_GENERIC_3, i);
                ps.mBoundingBottom = event.getAxisValue(MotionEvent.AXIS_GENERIC_4, i);
            }
        }
    }
    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL || (action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP) {
        final int index = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> // will be 0 for UP
        MotionEvent.ACTION_POINTER_INDEX_SHIFT;
        final int id = event.getPointerId(index);
        final PointerState ps = mPointers.get(id);
        ps.mCurDown = false;
        if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
            mCurDown = false;
            mCurNumPointers = 0;
        } else {
            mCurNumPointers -= 1;
            if (mActivePointerId == id) {
                mActivePointerId = event.getPointerId(index == 0 ? 1 : 0);
            }
            ps.addTrace(Float.NaN, Float.NaN, false);
        }
    }
    invalidate();
}
Also used : InputDevice(android.view.InputDevice) PointerCoords(android.view.MotionEvent.PointerCoords) Paint(android.graphics.Paint)

Example 43 with PointerCoords

use of android.view.MotionEvent.PointerCoords in project android_frameworks_base by ResurrectionRemix.

the class UiObject method performTwoPointerGesture.

/**
     * Generates a two-pointer gesture with arbitrary starting and ending points.
     *
     * @param startPoint1 start point of pointer 1
     * @param startPoint2 start point of pointer 2
     * @param endPoint1 end point of pointer 1
     * @param endPoint2 end point of pointer 2
     * @param steps the number of steps for the gesture. Steps are injected 
     * about 5 milliseconds apart, so 100 steps may take around 0.5 seconds to complete.
     * @return <code>true</code> if all touch events for this gesture are injected successfully,
     *         <code>false</code> otherwise
     * @since API Level 18
     */
public boolean performTwoPointerGesture(Point startPoint1, Point startPoint2, Point endPoint1, Point endPoint2, int steps) {
    // avoid a divide by zero
    if (steps == 0)
        steps = 1;
    final float stepX1 = (endPoint1.x - startPoint1.x) / steps;
    final float stepY1 = (endPoint1.y - startPoint1.y) / steps;
    final float stepX2 = (endPoint2.x - startPoint2.x) / steps;
    final float stepY2 = (endPoint2.y - startPoint2.y) / steps;
    int eventX1, eventY1, eventX2, eventY2;
    eventX1 = startPoint1.x;
    eventY1 = startPoint1.y;
    eventX2 = startPoint2.x;
    eventY2 = startPoint2.y;
    // allocate for steps plus first down and last up
    PointerCoords[] points1 = new PointerCoords[steps + 2];
    PointerCoords[] points2 = new PointerCoords[steps + 2];
    // Include the first and last touch downs in the arrays of steps
    for (int i = 0; i < steps + 1; i++) {
        PointerCoords p1 = new PointerCoords();
        p1.x = eventX1;
        p1.y = eventY1;
        p1.pressure = 1;
        p1.size = 1;
        points1[i] = p1;
        PointerCoords p2 = new PointerCoords();
        p2.x = eventX2;
        p2.y = eventY2;
        p2.pressure = 1;
        p2.size = 1;
        points2[i] = p2;
        eventX1 += stepX1;
        eventY1 += stepY1;
        eventX2 += stepX2;
        eventY2 += stepY2;
    }
    // ending pointers coordinates
    PointerCoords p1 = new PointerCoords();
    p1.x = endPoint1.x;
    p1.y = endPoint1.y;
    p1.pressure = 1;
    p1.size = 1;
    points1[steps + 1] = p1;
    PointerCoords p2 = new PointerCoords();
    p2.x = endPoint2.x;
    p2.y = endPoint2.y;
    p2.pressure = 1;
    p2.size = 1;
    points2[steps + 1] = p2;
    return performMultiPointerGesture(points1, points2);
}
Also used : PointerCoords(android.view.MotionEvent.PointerCoords) Point(android.graphics.Point)

Example 44 with PointerCoords

use of android.view.MotionEvent.PointerCoords in project android_frameworks_base by crdroidandroid.

the class TouchExplorer method offsetEvent.

/**
     * Offsets all pointers in the given event by adding the specified X and Y
     * offsets.
     *
     * @param event The event to offset.
     * @param offsetX The X offset.
     * @param offsetY The Y offset.
     * @return An event with the offset pointers or the original event if both
     *         offsets are zero.
     */
private MotionEvent offsetEvent(MotionEvent event, int offsetX, int offsetY) {
    if (offsetX == 0 && offsetY == 0) {
        return event;
    }
    final int remappedIndex = event.findPointerIndex(mLongPressingPointerId);
    final int pointerCount = event.getPointerCount();
    PointerProperties[] props = PointerProperties.createArray(pointerCount);
    PointerCoords[] coords = PointerCoords.createArray(pointerCount);
    for (int i = 0; i < pointerCount; i++) {
        event.getPointerProperties(i, props[i]);
        event.getPointerCoords(i, coords[i]);
        if (i == remappedIndex) {
            coords[i].x += offsetX;
            coords[i].y += offsetY;
        }
    }
    return MotionEvent.obtain(event.getDownTime(), event.getEventTime(), event.getAction(), event.getPointerCount(), props, coords, event.getMetaState(), event.getButtonState(), 1.0f, 1.0f, event.getDeviceId(), event.getEdgeFlags(), event.getSource(), event.getFlags());
}
Also used : PointerCoords(android.view.MotionEvent.PointerCoords) PointerProperties(android.view.MotionEvent.PointerProperties) Point(android.graphics.Point)

Example 45 with PointerCoords

use of android.view.MotionEvent.PointerCoords in project android_frameworks_base by crdroidandroid.

the class TouchExplorer method onDoubleTap.

@Override
public boolean onDoubleTap(MotionEvent event, int policyFlags) {
    // Ignore the event if we aren't touch exploring.
    if (mCurrentState != STATE_TOUCH_EXPLORING) {
        return false;
    }
    // Remove pending event deliveries.
    mSendHoverEnterAndMoveDelayed.cancel();
    mSendHoverExitDelayed.cancel();
    if (mSendTouchExplorationEndDelayed.isPending()) {
        mSendTouchExplorationEndDelayed.forceSendAndRemove();
    }
    if (mSendTouchInteractionEndDelayed.isPending()) {
        mSendTouchInteractionEndDelayed.forceSendAndRemove();
    }
    final int pointerIndex = event.getActionIndex();
    final int pointerId = event.getPointerId(pointerIndex);
    Point clickLocation = mTempPoint;
    final int result = computeClickLocation(clickLocation);
    if (result == CLICK_LOCATION_NONE) {
        // consumed.
        return true;
    }
    // Do the click.
    PointerProperties[] properties = new PointerProperties[1];
    properties[0] = new PointerProperties();
    event.getPointerProperties(pointerIndex, properties[0]);
    PointerCoords[] coords = new PointerCoords[1];
    coords[0] = new PointerCoords();
    coords[0].x = clickLocation.x;
    coords[0].y = clickLocation.y;
    MotionEvent click_event = MotionEvent.obtain(event.getDownTime(), event.getEventTime(), MotionEvent.ACTION_DOWN, 1, properties, coords, 0, 0, 1.0f, 1.0f, event.getDeviceId(), 0, event.getSource(), event.getFlags());
    final boolean targetAccessibilityFocus = (result == CLICK_LOCATION_ACCESSIBILITY_FOCUS);
    sendActionDownAndUp(click_event, policyFlags, targetAccessibilityFocus);
    click_event.recycle();
    return true;
}
Also used : PointerCoords(android.view.MotionEvent.PointerCoords) Point(android.graphics.Point) PointerProperties(android.view.MotionEvent.PointerProperties) Point(android.graphics.Point) MotionEvent(android.view.MotionEvent)

Aggregations

PointerCoords (android.view.MotionEvent.PointerCoords)46 PointerProperties (android.view.MotionEvent.PointerProperties)26 Point (android.graphics.Point)20 MotionEvent (android.view.MotionEvent)16 Paint (android.graphics.Paint)7 Rect (android.graphics.Rect)5 InputDevice (android.view.InputDevice)5 GesturePoint (android.gesture.GesturePoint)1