package org.geogebra.web.html5.gui.util;
import com.google.gwt.event.dom.client.TouchMoveEvent;
import com.google.gwt.event.dom.client.TouchMoveHandler;
import com.google.gwt.event.dom.client.TouchStartEvent;
import com.google.gwt.event.dom.client.TouchStartHandler;
import com.google.gwt.user.client.ui.Widget;
/**
* The static methods of this class should be used to check for duplicated
* events (e.g. TouchStart and MouseDown) and to prevent that one event is
* unintentionally used for multiple purposes (e.g. open and close keyboard)
*/
public class CancelEventTimer {
private static long lastTouchEvent = 0;
private static long lastKeyboardEvent = 0;
private static long lastBlurEvent = 0;
private static boolean blurEnabled;
private static long avRestoreWidthEvent = 0;
/**
* amount of time (ms) in which all mouse events are ignored after a touch
* event
*/
public static final int TIME_BETWEEN_TOUCH_AND_MOUSE = 500;
/**
* amount of time (ms) in which background-clicks are not closing the
* keyboard
*/
public static final int TIME_BEFORE_HIDING_KEYBOARD = 250;
/**
* amount of time (ms) in which all blur events are ignored after a click
* event
*/
public static final int TIME_BETWEEN_BLUR_AND_CLICK = 500;
/**
* amount of time (ms) in which AV width restoring is canceled.
*
*/
private static final long TIME_BEFORE_RESTORING_AV_WIDTH = 500;
/**
* called at the end of any touch event
*/
public static void touchEventOccured() {
lastTouchEvent = System.currentTimeMillis();
}
/**
* called at the end of any blur event
*/
public static void blurEventOccured() {
lastBlurEvent = System.currentTimeMillis();
blurEnabled = true;
}
/**
* disable any blur event
*/
public static void disableBlurEvent() {
blurEnabled = false;
}
/**
* called at the beginning of a mouse event
*
* @return whether the actual mouse event should be canceled
*/
public static boolean cancelMouseEvent() {
return System.currentTimeMillis() - lastTouchEvent < TIME_BETWEEN_TOUCH_AND_MOUSE;
}
/**
* called at the beginning of a blur event
*
* @return whether the actual blur event should be canceled
*/
public static boolean cancelBlurEvent() {
return !blurEnabled || System.currentTimeMillis()
- lastBlurEvent < TIME_BETWEEN_BLUR_AND_CLICK;
}
/**
* called after the keyboard is set to visible
*/
public static void keyboardSetVisible() {
lastKeyboardEvent = System.currentTimeMillis();
}
/**
* called at the beginning of a background click
*
* @return true if the actual event should not hide the keyboard; false
* otherwise
*/
public static boolean cancelKeyboardHide() {
return System.currentTimeMillis() - lastKeyboardEvent < TIME_BEFORE_HIDING_KEYBOARD;
}
/**
* called after Algebra View should restore its original width (after
* editing an item)
*/
public static void avRestoreWidth() {
avRestoreWidthEvent = System.currentTimeMillis();
}
public static boolean cancelAVRestoreWidth() {
return System.currentTimeMillis()
- avRestoreWidthEvent < TIME_BEFORE_RESTORING_AV_WIDTH;
}
public static void killTouch(Widget evPanel) {
evPanel.addDomHandler(new TouchStartHandler() {
public void onTouchStart(TouchStartEvent event) {
event.preventDefault();
}
}, TouchStartEvent.getType());
evPanel.addDomHandler(new TouchMoveHandler() {
public void onTouchMove(TouchMoveEvent event) {
event.preventDefault();
}
}, TouchMoveEvent.getType());
}
}