mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 10:49:24 +02:00
refactoring: all tap actions are implemented using FBAction
This commit is contained in:
parent
28044053b3
commit
1dff5cad88
5 changed files with 100 additions and 80 deletions
|
@ -38,11 +38,11 @@ public interface ActionCode {
|
|||
String SET_TEXT_VIEW_MODE_VISIT_HYPERLINKS = "hyperlinksOnlyMode";
|
||||
String SET_TEXT_VIEW_MODE_VISIT_ALL_WORDS = "dictionaryMode";
|
||||
|
||||
String TURN_TO_PREVIOUS_PAGE = "previousPage";
|
||||
String TURN_TO_NEXT_PAGE = "nextPage";
|
||||
String TURN_PAGE_BACK = "previousPage";
|
||||
String TURN_PAGE_FORWARD = "nextPage";
|
||||
|
||||
String VOLUME_KEY_SCROLL_FORWARD = "volumeKeyScrollForward";
|
||||
String VOLUME_KEY_SCROLL_BACKWARD = "volumeKeyScrollBackward";
|
||||
String VOLUME_KEY_SCROLL_BACK = "volumeKeyScrollBackward";
|
||||
String SHOW_MENU = "menu";
|
||||
String SHOW_NAVIGATION = "navigate";
|
||||
String CANCEL = "cancel";
|
||||
|
|
|
@ -107,8 +107,11 @@ public final class FBReaderApp extends ZLApplication {
|
|||
addAction(ActionCode.FIND_PREVIOUS, new FindPreviousAction(this));
|
||||
addAction(ActionCode.CLEAR_FIND_RESULTS, new ClearFindResultsAction(this));
|
||||
|
||||
addAction(ActionCode.VOLUME_KEY_SCROLL_FORWARD, new VolumeKeyScrollingAction(this, true));
|
||||
addAction(ActionCode.VOLUME_KEY_SCROLL_BACKWARD, new VolumeKeyScrollingAction(this, false));
|
||||
addAction(ActionCode.TURN_PAGE_FORWARD, new TurnPageAction(this, true, false));
|
||||
addAction(ActionCode.TURN_PAGE_BACK, new TurnPageAction(this, false, false));
|
||||
|
||||
addAction(ActionCode.VOLUME_KEY_SCROLL_FORWARD, new TurnPageAction(this, true, true));
|
||||
addAction(ActionCode.VOLUME_KEY_SCROLL_BACK, new TurnPageAction(this, false, true));
|
||||
|
||||
addAction(ActionCode.CANCEL, new CancelAction(this));
|
||||
//addAction(ActionCode.COPY_SELECTED_TEXT_TO_CLIPBOARD, new DummyAction(this));
|
||||
|
|
|
@ -48,30 +48,6 @@ public final class FBView extends ZLTextView {
|
|||
super.onScrollingFinished(viewPage);
|
||||
}
|
||||
|
||||
final void doScrollPage(boolean forward) {
|
||||
final boolean horizontal = ScrollingPreferences.Instance().HorizontalOption.getValue();
|
||||
if (getAnimationType() != Animation.none) {
|
||||
if (forward) {
|
||||
ZLTextWordCursor cursor = getEndCursor();
|
||||
if (cursor != null &&
|
||||
!cursor.isNull() &&
|
||||
(!cursor.isEndOfParagraph() || !cursor.getParagraphCursor().isLast())) {
|
||||
startAutoScrolling(horizontal ? PAGE_RIGHT : PAGE_BOTTOM);
|
||||
}
|
||||
} else {
|
||||
ZLTextWordCursor cursor = getStartCursor();
|
||||
if (cursor != null &&
|
||||
!cursor.isNull() &&
|
||||
(!cursor.isStartOfParagraph() || !cursor.getParagraphCursor().isFirst())) {
|
||||
startAutoScrolling(horizontal ? PAGE_LEFT : PAGE_TOP);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
scrollPage(forward, ZLTextView.ScrollingMode.NO_OVERLAPPING, 0);
|
||||
myReader.repaintView();
|
||||
}
|
||||
}
|
||||
|
||||
private int myStartX;
|
||||
private int myStartY;
|
||||
private boolean myIsManualScrollingActive;
|
||||
|
@ -127,38 +103,31 @@ public final class FBView extends ZLTextView {
|
|||
}
|
||||
|
||||
final ScrollingPreferences preferences = ScrollingPreferences.Instance();
|
||||
final ScrollingPreferences.FingerScrolling fingerScrolling =
|
||||
preferences.FingerScrollingOption.getValue();
|
||||
|
||||
final TapZone tapZone = getZoneByCoordinates(x, y, 3);
|
||||
if (!preferences.HorizontalOption.getValue()) {
|
||||
tapZone.mirror45();
|
||||
}
|
||||
final boolean doTapScrolling =
|
||||
fingerScrolling == ScrollingPreferences.FingerScrolling.byTap ||
|
||||
fingerScrolling == ScrollingPreferences.FingerScrolling.byTapAndFlick;
|
||||
String actionCode = null;
|
||||
switch (tapZone.HIndex) {
|
||||
case 0:
|
||||
if (doTapScrolling) {
|
||||
doScrollPage(false);
|
||||
}
|
||||
actionCode = ActionCode.TURN_PAGE_BACK;
|
||||
break;
|
||||
case 1:
|
||||
switch (tapZone.VIndex) {
|
||||
case 0:
|
||||
myReader.doAction(ActionCode.SHOW_NAVIGATION);
|
||||
actionCode = ActionCode.SHOW_NAVIGATION;
|
||||
break;
|
||||
case 2:
|
||||
myReader.doAction(ActionCode.SHOW_MENU);
|
||||
actionCode = ActionCode.SHOW_MENU;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (doTapScrolling) {
|
||||
doScrollPage(true);
|
||||
}
|
||||
actionCode = ActionCode.TURN_PAGE_FORWARD;
|
||||
break;
|
||||
}
|
||||
myReader.doAction(actionCode);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
86
src/org/geometerplus/fbreader/fbreader/TurnPageAction.java
Normal file
86
src/org/geometerplus/fbreader/fbreader/TurnPageAction.java
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2011 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.fbreader.fbreader;
|
||||
|
||||
import org.geometerplus.zlibrary.text.view.ZLTextWordCursor;
|
||||
|
||||
class TurnPageAction extends FBAction {
|
||||
private final boolean myForward;
|
||||
private final boolean myIsVolumeKeyAction;
|
||||
|
||||
TurnPageAction(FBReaderApp fbreader, boolean forward, boolean isVolumeKeyAction) {
|
||||
super(fbreader);
|
||||
myForward = forward;
|
||||
myIsVolumeKeyAction = isVolumeKeyAction;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
final ScrollingPreferences preferences = ScrollingPreferences.Instance();
|
||||
if (myIsVolumeKeyAction && !preferences.VolumeKeysOption.getValue()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final ScrollingPreferences.FingerScrolling fingerScrolling =
|
||||
preferences.FingerScrollingOption.getValue();
|
||||
if (fingerScrolling != ScrollingPreferences.FingerScrolling.byTap &&
|
||||
fingerScrolling != ScrollingPreferences.FingerScrolling.byTapAndFlick) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean forward = myForward;
|
||||
if (myIsVolumeKeyAction && preferences.InvertVolumeKeysOption.getValue()) {
|
||||
forward = !forward;
|
||||
}
|
||||
|
||||
if (forward) {
|
||||
ZLTextWordCursor cursor = Reader.getTextView().getEndCursor();
|
||||
return
|
||||
cursor != null &&
|
||||
!cursor.isNull() &&
|
||||
(!cursor.isEndOfParagraph() || !cursor.getParagraphCursor().isLast());
|
||||
} else {
|
||||
ZLTextWordCursor cursor = Reader.getTextView().getStartCursor();
|
||||
return
|
||||
cursor != null &&
|
||||
!cursor.isNull() &&
|
||||
(!cursor.isStartOfParagraph() || !cursor.getParagraphCursor().isFirst());
|
||||
}
|
||||
}
|
||||
|
||||
public void run() {
|
||||
final ScrollingPreferences preferences = ScrollingPreferences.Instance();
|
||||
boolean forward = myForward;
|
||||
if (myIsVolumeKeyAction && preferences.InvertVolumeKeysOption.getValue()) {
|
||||
forward = !forward;
|
||||
}
|
||||
final FBView view = Reader.getTextView();
|
||||
if (view.getAnimationType() != FBView.Animation.none) {
|
||||
final boolean horizontal = preferences.HorizontalOption.getValue();
|
||||
if (forward) {
|
||||
view.startAutoScrolling(horizontal ? FBView.PAGE_RIGHT : FBView.PAGE_BOTTOM);
|
||||
} else {
|
||||
view.startAutoScrolling(horizontal ? FBView.PAGE_LEFT : FBView.PAGE_TOP);
|
||||
}
|
||||
} else {
|
||||
view.scrollPage(forward, FBView.ScrollingMode.NO_OVERLAPPING, 0);
|
||||
Reader.repaintView();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2011 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.fbreader.fbreader;
|
||||
|
||||
class VolumeKeyScrollingAction extends FBAction {
|
||||
private final boolean myForward;
|
||||
|
||||
VolumeKeyScrollingAction(FBReaderApp fbreader, boolean forward) {
|
||||
super(fbreader);
|
||||
myForward = forward;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return ScrollingPreferences.Instance().VolumeKeysOption.getValue();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
boolean isInverted = ScrollingPreferences.Instance().InvertVolumeKeysOption.getValue();
|
||||
Reader.getTextView().doScrollPage(isInverted ? !myForward : myForward);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue