package org.ebookdroid.ui.viewer.views; import org.sufficientlysecure.viewer.R; import org.ebookdroid.common.touch.DefaultGestureDetector; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.widget.TextView; import org.emdev.common.log.LogContext; import org.emdev.common.log.LogManager; import org.emdev.ui.actions.IActionController; public class BookmarkView extends TextView { protected final LogContext LCTX = LogManager.root().lctx("BookmarkView", true); protected IActionController<?> actions; protected DefaultGestureDetector detector; public BookmarkView(final Context context) { super(context); init(context); } public BookmarkView(final Context context, final AttributeSet attrs) { super(context, attrs); init(context); } public BookmarkView(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); init(context); } protected void init(final Context context) { detector = new DefaultGestureDetector(context, new GestureListener()); } public IActionController<?> getActions() { return actions; } public void setActions(final IActionController<?> actions) { this.actions = actions; } @Override public boolean onTouchEvent(final MotionEvent event) { if (LCTX.isDebugEnabled()) { LCTX.d("onTouch(" + event + ")"); } super.onTouchEvent(event); return detector.onTouchEvent(event); } protected class GestureListener extends SimpleOnGestureListener { /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onSingleTapConfirmed(android.view.MotionEvent) */ @Override public boolean onSingleTapConfirmed(final MotionEvent e) { if (LCTX.isDebugEnabled()) { LCTX.d("onSingleTapConfirmed(" + e + ")"); } if (actions != null) { actions.getOrCreateAction(R.id.actions_setBookmarkedPage).onClick(BookmarkView.this); } return true; // processTap(TouchManager.Touch.SingleTap, e); } /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onDoubleTap(android.view.MotionEvent) */ @Override public boolean onDoubleTap(final MotionEvent e) { if (LCTX.isDebugEnabled()) { LCTX.d("onDoubleTap(" + e + ")"); } if (actions != null) { actions.getOrCreateAction(R.id.bookmark_add).onClick(BookmarkView.this); } return true; // processTap(TouchManager.Touch.DoubleTap, e); } /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onLongPress(android.view.MotionEvent) */ @Override public void onLongPress(final MotionEvent e) { if (LCTX.isDebugEnabled()) { LCTX.d("onLongPress(" + e + ")"); } final MotionEvent cancel = MotionEvent.obtain(e); cancel.setAction(MotionEvent.ACTION_CANCEL); detector.onTouchEvent(cancel); cancel.recycle(); } /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onDown(android.view.MotionEvent) */ @Override public boolean onDown(final MotionEvent e) { return true; } /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onSingleTapUp(android.view.MotionEvent) */ @Override public boolean onSingleTapUp(final MotionEvent e) { return true; } /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onFling(android.view.MotionEvent, * android.view.MotionEvent, float, float) */ @Override public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float vX, final float vY) { return true; } /** * {@inheritDoc} * * @see android.view.GestureDetector.SimpleOnGestureListener#onScroll(android.view.MotionEvent, * android.view.MotionEvent, float, float) */ @Override public boolean onScroll(final MotionEvent e1, final MotionEvent e2, final float distanceX, final float distanceY) { return true; } } }