diff --git a/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java b/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java index 6682281c2..a1cd2f04c 100644 --- a/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java +++ b/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java @@ -48,6 +48,9 @@ public class SelectionBookmarkAction extends FBAndroidAction { } else { bookmark = Reader.addSelectionBookmark(); } + if (bookmark == null) { + return; + } final SuperActivityToast toast = new SuperActivityToast(BaseActivity, SuperToast.Type.BUTTON); diff --git a/src/org/geometerplus/android/fbreader/SelectionCopyAction.java b/src/org/geometerplus/android/fbreader/SelectionCopyAction.java index 0de0d8abc..6791624fe 100644 --- a/src/org/geometerplus/android/fbreader/SelectionCopyAction.java +++ b/src/org/geometerplus/android/fbreader/SelectionCopyAction.java @@ -25,6 +25,8 @@ import android.text.ClipboardManager; import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.fbreader.fbreader.FBReaderApp; +import org.geometerplus.fbreader.fbreader.FBView; +import org.geometerplus.fbreader.util.TextSnippet; import org.geometerplus.android.util.UIMessageUtil; @@ -35,8 +37,14 @@ public class SelectionCopyAction extends FBAndroidAction { @Override protected void run(Object ... params) { - final String text = Reader.getTextView().getSelectedSnippet().getText(); - Reader.getTextView().clearSelection(); + final FBView fbview = Reader.getTextView(); + final TextSnippet snippet = fbview.getSelectedSnippet(); + if (snippet == null) { + return; + } + + final String text = snippet.getText(); + fbview.clearSelection(); final ClipboardManager clipboard = (ClipboardManager)BaseActivity.getApplication().getSystemService(Application.CLIPBOARD_SERVICE); diff --git a/src/org/geometerplus/android/fbreader/SelectionShareAction.java b/src/org/geometerplus/android/fbreader/SelectionShareAction.java index c7140d449..5a3b4d503 100644 --- a/src/org/geometerplus/android/fbreader/SelectionShareAction.java +++ b/src/org/geometerplus/android/fbreader/SelectionShareAction.java @@ -24,6 +24,8 @@ import android.content.Intent; import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.fbreader.fbreader.FBReaderApp; +import org.geometerplus.fbreader.fbreader.FBView; +import org.geometerplus.fbreader.util.TextSnippet; public class SelectionShareAction extends FBAndroidAction { SelectionShareAction(FBReader baseActivity, FBReaderApp fbreader) { @@ -32,9 +34,15 @@ public class SelectionShareAction extends FBAndroidAction { @Override protected void run(Object ... params) { - final String text = Reader.getTextView().getSelectedSnippet().getText(); + final FBView fbview = Reader.getTextView(); + final TextSnippet snippet = fbview.getSelectedSnippet(); + if (snippet == null) { + return; + } + + final String text = snippet.getText(); final String title = Reader.getCurrentBook().getTitle(); - Reader.getTextView().clearSelection(); + fbview.clearSelection(); final Intent intent = new Intent(android.content.Intent.ACTION_SEND); intent.setType("text/plain"); diff --git a/src/org/geometerplus/android/fbreader/SelectionTranslateAction.java b/src/org/geometerplus/android/fbreader/SelectionTranslateAction.java index 441ec215b..9b8a18b7c 100644 --- a/src/org/geometerplus/android/fbreader/SelectionTranslateAction.java +++ b/src/org/geometerplus/android/fbreader/SelectionTranslateAction.java @@ -20,6 +20,8 @@ package org.geometerplus.android.fbreader; import org.geometerplus.fbreader.fbreader.*; +import org.geometerplus.fbreader.util.TextSnippet; + import org.geometerplus.android.fbreader.dict.DictionaryUtil; public class SelectionTranslateAction extends FBAndroidAction { @@ -30,10 +32,16 @@ public class SelectionTranslateAction extends FBAndroidAction { @Override protected void run(Object ... params) { final FBView fbview = Reader.getTextView(); - final DictionaryHighlighting dictionaryHilite = new DictionaryHighlighting(fbview); + final DictionaryHighlighting dictionaryHilite = DictionaryHighlighting.get(fbview); + final TextSnippet snippet = fbview.getSelectedSnippet(); + + if (dictionaryHilite == null || snippet == null) { + return; + } + DictionaryUtil.openTextInDictionary( BaseActivity, - fbview.getSelectedSnippet().getText(), + snippet.getText(), fbview.getCountOfSelectedWords() == 1, fbview.getSelectionStartY(), fbview.getSelectionEndY(), diff --git a/src/org/geometerplus/fbreader/fbreader/DictionaryHighlighting.java b/src/org/geometerplus/fbreader/fbreader/DictionaryHighlighting.java index 8dde2e85d..61398878b 100644 --- a/src/org/geometerplus/fbreader/fbreader/DictionaryHighlighting.java +++ b/src/org/geometerplus/fbreader/fbreader/DictionaryHighlighting.java @@ -23,12 +23,23 @@ import org.geometerplus.zlibrary.core.util.ZLColor; import org.geometerplus.zlibrary.text.view.*; public final class DictionaryHighlighting extends ZLTextSimpleHighlighting { - public DictionaryHighlighting(ZLTextView view) { - this(view, view.getSelectionHighlighting()); + public static DictionaryHighlighting get(ZLTextView view) { + final ZLTextHighlighting hilite = view.getSelectionHighlighting(); + if (hilite == null) { + return null; + } + + final ZLTextPosition start = hilite.getStartPosition(); + final ZLTextPosition end = hilite.getEndPosition(); + if (start == null || end == null) { + return null; + } + + return new DictionaryHighlighting(view, start, end); } - private DictionaryHighlighting(ZLTextView view, ZLTextHighlighting selection) { - super(view, selection.getStartPosition(), selection.getEndPosition()); + private DictionaryHighlighting(ZLTextView view, ZLTextPosition start, ZLTextPosition end) { + super(view, start, end); } @Override diff --git a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java index 476517402..cebe4f246 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java +++ b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java @@ -35,8 +35,7 @@ import org.geometerplus.fbreader.bookmodel.*; import org.geometerplus.fbreader.fbreader.options.*; import org.geometerplus.fbreader.formats.*; import org.geometerplus.fbreader.network.sync.SyncData; -import org.geometerplus.fbreader.util.AutoTextSnippet; -import org.geometerplus.fbreader.util.EmptyTextSnippet; +import org.geometerplus.fbreader.util.*; public final class FBReaderApp extends ZLApplication { public interface ExternalFileOpener { @@ -269,12 +268,16 @@ public final class FBReaderApp extends ZLApplication { public Bookmark addSelectionBookmark() { final FBView fbView = getTextView(); + final TextSnippet snippet = fbView.getSelectedSnippet(); + if (snippet == null) { + return null; + } final Bookmark bookmark = new Bookmark( Collection, Model.Book, fbView.getModel().getId(), - fbView.getSelectedSnippet(), + snippet, true ); Collection.saveBookmark(bookmark); diff --git a/src/org/geometerplus/fbreader/fbreader/FBView.java b/src/org/geometerplus/fbreader/fbreader/FBView.java index 5fc182d1e..1e88569ee 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBView.java +++ b/src/org/geometerplus/fbreader/fbreader/FBView.java @@ -763,10 +763,11 @@ public final class FBView extends ZLTextView { public TextSnippet getSelectedSnippet() { final ZLTextPosition start = getSelectionStartPosition(); final ZLTextPosition end = getSelectionEndPosition(); - final TextBuildTraverser traverser = new TextBuildTraverser(this); - if (!isSelectionEmpty()) { - traverser.traverse(start, end); + if (start == null || end == null) { + return null; } + final TextBuildTraverser traverser = new TextBuildTraverser(this); + traverser.traverse(start, end); return new FixedTextSnippet(start, end, traverser.getText()); }