/** * Copyright (c) 2015 unfoldingWord * http://creativecommons.org/licenses/MIT/ * See LICENSE file for details. * Contributors: * PJ Fechner <pj@actsmedia.com> */ package view; import android.content.res.Resources; import android.os.Handler; import android.view.MotionEvent; import android.view.View; import org.unfoldingword.mobile.R; /** * Created by Fechner on 8/20/15. */ public class ReadingDoubleTapHandler implements View.OnTouchListener { private ReadingDoubleTapHandlerListener listener; private Handler handler = new Handler(); private int numberOfTaps = 0; private long lastTapTimeMs = 0; private long touchDownMs = 0; private int tapTimeout; private int doubleTapTimeout; public ReadingDoubleTapHandler(Resources resources, ReadingDoubleTapHandlerListener listener) { this.listener = listener; tapTimeout = resources.getInteger(R.integer.tap_timeout); doubleTapTimeout = resources.getInteger(R.integer.double_tap_timeout); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { touchDownMs = System.currentTimeMillis(); if ((numberOfTaps > 0) && (System.currentTimeMillis() - lastTapTimeMs) < doubleTapTimeout) { return true; } break; } case MotionEvent.ACTION_UP: { handler.removeCallbacksAndMessages(null); if ((System.currentTimeMillis() - touchDownMs) > tapTimeout) { //it was not a tap numberOfTaps = 0; lastTapTimeMs = 0; break; } if ((numberOfTaps > 0) && (System.currentTimeMillis() - lastTapTimeMs) < doubleTapTimeout) { numberOfTaps += 1; } else { numberOfTaps = 1; } lastTapTimeMs = System.currentTimeMillis(); // if(numberOfTaps == 1){ // checkShouldChangeNavBarHidden(); // return false; // } if (numberOfTaps == 2) { if (listener != null) { return listener.doubleTapWasRegistered(); } } } } return false; } public interface ReadingDoubleTapHandlerListener{ /** * Called when the handler registers a double tap * @return True if the listener has consumed the event */ boolean doubleTapWasRegistered(); } }