/** * Copyright (c) 2012-2013 Nokia Corporation. All rights reserved. * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. * Oracle and Java are trademarks or registered trademarks of Oracle and/or its * affiliates. Other product and company names mentioned herein may be trademarks * or trade names of their respective owners. * See LICENSE.TXT for license information. */ package com.nokia.example.amaze.gestures; /** * Helper class for detecting double taps. */ public class DoubleTapDetector { // Constants private static final int DOUBLE_TAP_TIMEOUT = 400; // Milliseconds private static final int JITTER_THRESHOLD = 20; // Members private final Listener _listener; private long _lastTapTime = 0; private int[] _lastTapCoordinate = new int[2]; /** * Constructor. * @param listener The listener. */ public DoubleTapDetector(Listener listener) { _listener = listener; _lastTapCoordinate[0] = -1; _lastTapCoordinate[1] = -1; } /** * Checks if a double tap has occured. If not, then saves the details of * this tap. * @param x X coordinate of the tap event. * @param y Y coordinate of the tap event. * @return True if the double tap was detected, false otherwise. */ public boolean onTapped(int x, int y) { long currentTime = System.currentTimeMillis(); if (currentTime - _lastTapTime < DOUBLE_TAP_TIMEOUT && Math.abs(_lastTapCoordinate[0] - x) < JITTER_THRESHOLD && Math.abs(_lastTapCoordinate[1] - y) < JITTER_THRESHOLD) { // Double tap! if (_listener != null) { // Notify the listener _listener.onDoubleTapDetected(); } _lastTapCoordinate[0] = -1; _lastTapCoordinate[1] = -1; return true; } // Store the current time and tap coordinates _lastTapTime = currentTime; _lastTapCoordinate[0] = x; _lastTapCoordinate[1] = y; return false; } /** * Interface for the listener. */ public interface Listener { void onDoubleTapDetected(); } }