From 1f63fd0d1dfe2caa0736f46c3c1f4239847ce67d Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sun, 8 May 2011 03:32:04 +0100 Subject: [PATCH 01/11] code cleanup --- src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java b/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java index c24f70448..bc3d300b1 100644 --- a/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java +++ b/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java @@ -32,9 +32,6 @@ public class OPDSXMLReader extends ATOMXMLReader { private DCDate myDCIssued; private String myPriceCurrency; - //private ATOMTitle myTitle; // TODO: implement ATOMTextConstruct & ATOMTitle - //private ATOMSummary mySummary; // TODO: implement ATOMTextConstruct & ATOMSummary - public OPDSXMLReader(ATOMFeedHandler handler, boolean readEntryNotFeed) { super(handler, readEntryNotFeed); } From be9b4251a4acbc699d3f930c8d10a5e2e4ef2bbe Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sun, 8 May 2011 04:12:12 +0100 Subject: [PATCH 02/11] code cleanup --- .../fbreader/network/atom/ATOMXMLReader.java | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java b/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java index d3b4e88b9..1dfedc546 100644 --- a/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java +++ b/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java @@ -57,23 +57,23 @@ public class ATOMXMLReader extends ZLXMLReaderAdapter { protected static final int F_TITLE = 6; protected static final int F_UPDATED = 7; protected static final int F_AUTHOR = 8; - protected static final int FA_NAME = 9; - protected static final int FA_URI = 10; - protected static final int FA_EMAIL = 11; - protected static final int FE_AUTHOR = 12; - protected static final int FE_ID = 13; - protected static final int FE_CATEGORY = 14; - protected static final int FE_LINK = 15; - protected static final int FE_PUBLISHED = 16; - protected static final int FE_SUMMARY = 17; - protected static final int FE_CONTENT = 18; - protected static final int FE_TITLE = 19; - protected static final int FE_UPDATED = 20; - protected static final int FEA_NAME = 21; - protected static final int FEA_URI = 22; - protected static final int FEA_EMAIL = 23; - protected static final int F_SUBTITLE = 24; - protected static final int F_ICON = 25; + protected static final int F_SUBTITLE = 9; + protected static final int F_ICON = 10; + protected static final int FA_NAME = 11; + protected static final int FA_URI = 12; + protected static final int FA_EMAIL = 13; + protected static final int FE_AUTHOR = 14; + protected static final int FE_ID = 15; + protected static final int FE_CATEGORY = 16; + protected static final int FE_LINK = 17; + protected static final int FE_PUBLISHED = 18; + protected static final int FE_SUMMARY = 19; + protected static final int FE_CONTENT = 20; + protected static final int FE_TITLE = 21; + protected static final int FE_UPDATED = 22; + protected static final int FEA_NAME = 23; + protected static final int FEA_URI = 24; + protected static final int FEA_EMAIL = 25; protected static final int ATOM_STATE_FIRST_UNUSED = 26; From 63729bd0ae29b71e89ca929a56b48108773b87fd Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sun, 8 May 2011 05:29:07 +0100 Subject: [PATCH 03/11] apply NeworkLibrary.rewriteUrl() method to links in book descriptions --- .../fbreader/network/atom/ATOMXMLReader.java | 48 +++++++-------- .../network/atom/FormattedBuffer.java | 23 ++++++- .../fbreader/network/opds/OPDSXMLReader.java | 61 ++++++++++--------- 3 files changed, 76 insertions(+), 56 deletions(-) diff --git a/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java b/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java index 1dfedc546..1e6cb6d99 100644 --- a/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java +++ b/src/org/geometerplus/fbreader/network/atom/ATOMXMLReader.java @@ -48,32 +48,32 @@ public class ATOMXMLReader extends ZLXMLReaderAdapter { private Map myNamespaceMap; - protected static final int START = 0; + private static final int START = 0; protected static final int FEED = 1; protected static final int F_ENTRY = 2; - protected static final int F_ID = 3; - protected static final int F_LINK = 4; - protected static final int F_CATEGORY = 5; - protected static final int F_TITLE = 6; - protected static final int F_UPDATED = 7; - protected static final int F_AUTHOR = 8; - protected static final int F_SUBTITLE = 9; - protected static final int F_ICON = 10; - protected static final int FA_NAME = 11; - protected static final int FA_URI = 12; - protected static final int FA_EMAIL = 13; - protected static final int FE_AUTHOR = 14; - protected static final int FE_ID = 15; - protected static final int FE_CATEGORY = 16; + private static final int F_ID = 3; + private static final int F_LINK = 4; + private static final int F_CATEGORY = 5; + private static final int F_TITLE = 6; + private static final int F_UPDATED = 7; + private static final int F_AUTHOR = 8; + private static final int F_SUBTITLE = 9; + private static final int F_ICON = 10; + private static final int FA_NAME = 11; + private static final int FA_URI = 12; + private static final int FA_EMAIL = 13; + private static final int FE_AUTHOR = 14; + private static final int FE_ID = 15; + private static final int FE_CATEGORY = 16; protected static final int FE_LINK = 17; - protected static final int FE_PUBLISHED = 18; - protected static final int FE_SUMMARY = 19; + private static final int FE_PUBLISHED = 18; + private static final int FE_SUMMARY = 19; protected static final int FE_CONTENT = 20; - protected static final int FE_TITLE = 21; - protected static final int FE_UPDATED = 22; - protected static final int FEA_NAME = 23; - protected static final int FEA_URI = 24; - protected static final int FEA_EMAIL = 25; + private static final int FE_TITLE = 21; + private static final int FE_UPDATED = 22; + private static final int FEA_NAME = 23; + private static final int FEA_URI = 24; + private static final int FEA_EMAIL = 25; protected static final int ATOM_STATE_FIRST_UNUSED = 26; @@ -297,6 +297,7 @@ public class ATOMXMLReader extends ZLXMLReaderAdapter { } } break; + case FE_CONTENT: case FE_SUMMARY: case FE_TITLE: case F_TITLE: @@ -311,8 +312,7 @@ public class ATOMXMLReader extends ZLXMLReaderAdapter { return interruptReading; } - public boolean endElementHandler(final String ns, final String tag, - final String bufferContent) { + public boolean endElementHandler(String ns, String tag, String bufferContent) { boolean interruptReading = false; switch (myState) { case START: diff --git a/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java b/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java index d920828cb..5f01e3a0a 100644 --- a/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java +++ b/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java @@ -19,11 +19,13 @@ package org.geometerplus.fbreader.network.atom; -import android.text.Html; +import android.text.*; +import android.text.style.URLSpan; import org.geometerplus.zlibrary.core.xml.ZLStringMap; import org.geometerplus.fbreader.formats.xhtml.XHTMLReader; +import org.geometerplus.fbreader.network.NetworkLibrary; import org.geometerplus.fbreader.network.atom.ATOMConstants; public class FormattedBuffer { @@ -87,12 +89,29 @@ public class FormattedBuffer { switch (myType) { case Html: case XHtml: - return Html.fromHtml(text); + return getHtmlText(text); default: return text; } } + private CharSequence getHtmlText(String text) { + final Spanned htmlText = Html.fromHtml(text); + if (htmlText.getSpans(0, htmlText.length(), URLSpan.class).length == 0) { + return htmlText; + } + final Spannable newHtmlText = Spannable.Factory.getInstance().newSpannable(htmlText); + for (URLSpan span : newHtmlText.getSpans(0, newHtmlText.length(), URLSpan.class)) { + final int start = newHtmlText.getSpanStart(span); + final int end = newHtmlText.getSpanEnd(span); + final int flags = newHtmlText.getSpanFlags(span); + final String url = NetworkLibrary.Instance().rewriteUrl(span.getURL(), true); + newHtmlText.removeSpan(span); + newHtmlText.setSpan(new URLSpan(url), start, end, flags); + } + return newHtmlText; + } + @Override public String toString() { return myBuffer.toString(); diff --git a/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java b/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java index bc3d300b1..bf9e74e11 100644 --- a/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java +++ b/src/org/geometerplus/fbreader/network/opds/OPDSXMLReader.java @@ -91,11 +91,8 @@ public class OPDSXMLReader extends ATOMXMLReader { } @Override - public boolean startElementHandler(final String ns, final String tag, - final ZLStringMap attributes, final String bufferContent) { - final int state = myState; - final boolean interruptReading = super.startElementHandler(ns, tag, attributes, bufferContent); - switch (state) { + public boolean startElementHandler(String ns, String tag, ZLStringMap attributes, String bufferContent) { + switch (myState) { case FEED: if (ns == XMLNamespaces.OpenSearch) { if (tag == OPENSEARCH_TAG_TOTALRESULTS) { @@ -105,8 +102,10 @@ public class OPDSXMLReader extends ATOMXMLReader { } else if (tag == OPENSEARCH_TAG_STARTINDEX) { myState = OPENSEARCH_STARTINDEX; } + return false; + } else { + return super.startElementHandler(ns, tag, attributes, bufferContent); } - break; case F_ENTRY: if (ns == XMLNamespaces.DublinCoreTerms) { if (tag == DC_TAG_LANGUAGE) { @@ -117,41 +116,45 @@ public class OPDSXMLReader extends ATOMXMLReader { } else if (tag == DC_TAG_PUBLISHER) { myState = FE_DC_PUBLISHER; } + return false; } else if (ns == XMLNamespaces.CalibreMetadata) { if (tag == CALIBRE_TAG_SERIES) { myState = FE_CALIBRE_SERIES; } else if (tag == CALIBRE_TAG_SERIES_INDEX) { myState = FE_CALIBRE_SERIES_INDEX; } + return false; + } else { + return super.startElementHandler(ns, tag, attributes, bufferContent); } - break; case FE_LINK: if (ns == XMLNamespaces.Opds && tag == TAG_PRICE) { myPriceCurrency = attributes.getValue("currencycode"); myState = FEL_PRICE; + return false; } if (ns == XMLNamespaces.DublinCoreTerms && tag == DC_TAG_FORMAT) { myState = FEL_FORMAT; + return false; + } else { + return super.startElementHandler(ns, tag, attributes, bufferContent); } - break; case FE_CONTENT: - myFormattedBuffer.appendText(bufferContent); - myFormattedBuffer.appendStartTag(tag, attributes); + super.startElementHandler(ns, tag, attributes, bufferContent); // FIXME: HACK: html handling must be implemeted neatly if (tag == TAG_HACK_SPAN || attributes.getValue("class") == "price") { myState = FEC_HACK_SPAN; } - break; + return false; default: - break; + return super.startElementHandler(ns, tag, attributes, bufferContent); } - - return interruptReading; } - public boolean endElementHandler(final String ns, final String tag, - final String bufferContent) { - final boolean interruptReading = super.endElementHandler(ns, tag, bufferContent); + @Override + public boolean endElementHandler(String ns, String tag, String bufferContent) { switch (myState) { + default: + return super.endElementHandler(ns, tag, bufferContent); case FEL_PRICE: if (ns == XMLNamespaces.Opds && tag == TAG_PRICE) { if (bufferContent != null && myPriceCurrency != null) { @@ -160,7 +163,7 @@ public class OPDSXMLReader extends ATOMXMLReader { } myState = FE_LINK; } - break; + return false; case FEL_FORMAT: if (ns == XMLNamespaces.DublinCoreTerms && tag == DC_TAG_FORMAT) { if (bufferContent != null) { @@ -168,7 +171,7 @@ public class OPDSXMLReader extends ATOMXMLReader { } myState = FE_LINK; } - break; + return false; case FEC_HACK_SPAN: // FIXME: HACK myFormattedBuffer.appendText(bufferContent); @@ -178,14 +181,14 @@ public class OPDSXMLReader extends ATOMXMLReader { getOPDSEntry().addAttribute(KEY_PRICE, bufferContent.intern()); } myState = FE_CONTENT; - break; + return false; case FE_DC_LANGUAGE: if (ns == XMLNamespaces.DublinCoreTerms && tag == DC_TAG_LANGUAGE) { // FIXME:language can be lost:buffer will be truncated, if there are extension tags inside the tag getOPDSEntry().DCLanguage = bufferContent; myState = F_ENTRY; } - break; + return false; case FE_DC_ISSUED: if (ns == XMLNamespaces.DublinCoreTerms && tag == DC_TAG_ISSUED) { // FIXME:issued can be lost:buffer will be truncated, if there are extension tags inside the tag @@ -195,20 +198,20 @@ public class OPDSXMLReader extends ATOMXMLReader { myDCIssued = null; myState = F_ENTRY; } - break; + return false; case FE_DC_PUBLISHER: if (ns == XMLNamespaces.DublinCoreTerms && tag == DC_TAG_PUBLISHER) { // FIXME:publisher can be lost:buffer will be truncated, if there are extension tags inside the tag getOPDSEntry().DCPublisher = bufferContent; myState = F_ENTRY; } - break; + return false; case FE_CALIBRE_SERIES: if (ns == XMLNamespaces.CalibreMetadata && tag == CALIBRE_TAG_SERIES) { getOPDSEntry().SeriesTitle = bufferContent; myState = F_ENTRY; } - break; + return false; case FE_CALIBRE_SERIES_INDEX: if (ns == XMLNamespaces.CalibreMetadata && tag == CALIBRE_TAG_SERIES_INDEX) { if (bufferContent != null) { @@ -219,7 +222,7 @@ public class OPDSXMLReader extends ATOMXMLReader { } myState = F_ENTRY; } - break; + return false; case OPENSEARCH_TOTALRESULTS: if (ns == XMLNamespaces.OpenSearch && tag == OPENSEARCH_TAG_TOTALRESULTS) { if (getOPDSFeed() != null && bufferContent != null) { @@ -230,7 +233,7 @@ public class OPDSXMLReader extends ATOMXMLReader { } myState = FEED; } - break; + return false; case OPENSEARCH_ITEMSPERPAGE: if (ns == XMLNamespaces.OpenSearch && tag == OPENSEARCH_TAG_ITEMSPERPAGE) { if (getOPDSFeed() != null && bufferContent != null) { @@ -241,7 +244,7 @@ public class OPDSXMLReader extends ATOMXMLReader { } myState = FEED; } - break; + return false; case OPENSEARCH_STARTINDEX: if (ns == XMLNamespaces.OpenSearch && tag == OPENSEARCH_TAG_STARTINDEX) { if (getOPDSFeed() != null && bufferContent != null) { @@ -252,9 +255,7 @@ public class OPDSXMLReader extends ATOMXMLReader { } myState = FEED; } - break; - + return false; } - return interruptReading; } } From 584c98115d11b699edfd7d7b24ce2b524436992b Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sun, 8 May 2011 05:36:02 +0100 Subject: [PATCH 04/11] common class for html processing --- .../android/fbreader/BookInfoActivity.java | 4 +- .../fbreader/network/HtmlUtil.java | 42 +++++++++++++++++++ .../network/atom/FormattedBuffer.java | 23 +--------- 3 files changed, 46 insertions(+), 23 deletions(-) create mode 100644 src/org/geometerplus/fbreader/network/HtmlUtil.java diff --git a/src/org/geometerplus/android/fbreader/BookInfoActivity.java b/src/org/geometerplus/android/fbreader/BookInfoActivity.java index 1b5d7d6b9..047717411 100644 --- a/src/org/geometerplus/android/fbreader/BookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/BookInfoActivity.java @@ -27,7 +27,6 @@ import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; -import android.text.Html; import android.text.method.LinkMovementMethod; import android.util.DisplayMetrics; import android.view.View; @@ -45,6 +44,7 @@ import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageData; import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageManager; import org.geometerplus.fbreader.library.*; +import org.geometerplus.fbreader.network.HtmlUtil; import org.geometerplus.android.fbreader.preferences.EditBookInfoActivity; @@ -254,7 +254,7 @@ public class BookInfoActivity extends Activity { bodyView.setVisibility(View.GONE); } else { titleView.setText(myResource.getResource("annotation").getValue()); - bodyView.setText(Html.fromHtml(annotation)); + bodyView.setText(HtmlUtil.getHtmlText(annotation)); bodyView.setMovementMethod(new LinkMovementMethod()); } } diff --git a/src/org/geometerplus/fbreader/network/HtmlUtil.java b/src/org/geometerplus/fbreader/network/HtmlUtil.java new file mode 100644 index 000000000..83dbb8559 --- /dev/null +++ b/src/org/geometerplus/fbreader/network/HtmlUtil.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2010-2011 Geometer Plus + * + * 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.network; + +import android.text.*; +import android.text.style.URLSpan; + +public abstract class HtmlUtil { + public static CharSequence getHtmlText(String text) { + final Spanned htmlText = Html.fromHtml(text); + if (htmlText.getSpans(0, htmlText.length(), URLSpan.class).length == 0) { + return htmlText; + } + final Spannable newHtmlText = Spannable.Factory.getInstance().newSpannable(htmlText); + for (URLSpan span : newHtmlText.getSpans(0, newHtmlText.length(), URLSpan.class)) { + final int start = newHtmlText.getSpanStart(span); + final int end = newHtmlText.getSpanEnd(span); + final int flags = newHtmlText.getSpanFlags(span); + final String url = NetworkLibrary.Instance().rewriteUrl(span.getURL(), true); + newHtmlText.removeSpan(span); + newHtmlText.setSpan(new URLSpan(url), start, end, flags); + } + return newHtmlText; + } +} diff --git a/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java b/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java index 5f01e3a0a..cfdb34d53 100644 --- a/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java +++ b/src/org/geometerplus/fbreader/network/atom/FormattedBuffer.java @@ -19,13 +19,11 @@ package org.geometerplus.fbreader.network.atom; -import android.text.*; -import android.text.style.URLSpan; - import org.geometerplus.zlibrary.core.xml.ZLStringMap; import org.geometerplus.fbreader.formats.xhtml.XHTMLReader; import org.geometerplus.fbreader.network.NetworkLibrary; +import org.geometerplus.fbreader.network.HtmlUtil; import org.geometerplus.fbreader.network.atom.ATOMConstants; public class FormattedBuffer { @@ -89,29 +87,12 @@ public class FormattedBuffer { switch (myType) { case Html: case XHtml: - return getHtmlText(text); + return HtmlUtil.getHtmlText(text); default: return text; } } - private CharSequence getHtmlText(String text) { - final Spanned htmlText = Html.fromHtml(text); - if (htmlText.getSpans(0, htmlText.length(), URLSpan.class).length == 0) { - return htmlText; - } - final Spannable newHtmlText = Spannable.Factory.getInstance().newSpannable(htmlText); - for (URLSpan span : newHtmlText.getSpans(0, newHtmlText.length(), URLSpan.class)) { - final int start = newHtmlText.getSpanStart(span); - final int end = newHtmlText.getSpanEnd(span); - final int flags = newHtmlText.getSpanFlags(span); - final String url = NetworkLibrary.Instance().rewriteUrl(span.getURL(), true); - newHtmlText.removeSpan(span); - newHtmlText.setSpan(new URLSpan(url), start, end, flags); - } - return newHtmlText; - } - @Override public String toString() { return myBuffer.toString(); From 184b18a9f079d057faccc0cff30b661e354a7504 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Mon, 9 May 2011 22:35:06 +0100 Subject: [PATCH 05/11] updated ChangeLog --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6bfbbb5b7..c431aa28a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +===== 1.0.12 (May ??, 2011) ===== +* Html in book description + ===== 1.0.11 (May 07, 2011) ===== * Book description from OPDS full entry * Fixed LitRes 'my books' entry loading From 7e81e7f3ea0ea7c46ba8b202b1fdce3b864d6c7b Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Tue, 10 May 2011 11:13:01 +0100 Subject: [PATCH 06/11] image view setting --- assets/resources/application/en.xml | 9 +++ default.properties | 2 +- .../fbreader/ProcessHyperlinkAction.java | 4 ++ .../fbreader/image/ImageViewActivity.java | 18 +++++- .../preferences/PreferenceActivity.java | 4 ++ .../fbreader/fbreader/FBReaderApp.java | 9 +++ .../fbreader/fbreader/FBView.java | 61 +++++++++++++------ 7 files changed, 85 insertions(+), 22 deletions(-) diff --git a/assets/resources/application/en.xml b/assets/resources/application/en.xml index 473ee4e92..3e05d6b36 100644 --- a/assets/resources/application/en.xml +++ b/assets/resources/application/en.xml @@ -543,6 +543,15 @@ + + + + + + + + + diff --git a/default.properties b/default.properties index 513f21f10..401f269ca 100644 --- a/default.properties +++ b/default.properties @@ -10,4 +10,4 @@ # Project target. target=android-8 java.encoding=utf-8 -proguard.config=proguard.cfg +#proguard.config=proguard.cfg diff --git a/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java b/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java index 43a837075..8799c8eda 100644 --- a/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java +++ b/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java @@ -78,6 +78,10 @@ class ProcessHyperlinkAction extends FBAction { final Intent intent = new Intent(); intent.setClass(myBaseActivity, ImageViewActivity.class); intent.setData(Uri.parse(uriString)); + intent.putExtra( + ImageViewActivity.BACKGROUND_COLOR_KEY, + Reader.ImageViewBackgroundOption.getValue().getIntValue() + ); myBaseActivity.startActivity(intent); } catch (Exception e) { e.printStackTrace(); diff --git a/src/org/geometerplus/android/fbreader/image/ImageViewActivity.java b/src/org/geometerplus/android/fbreader/image/ImageViewActivity.java index 521b195b8..ce919320f 100644 --- a/src/org/geometerplus/android/fbreader/image/ImageViewActivity.java +++ b/src/org/geometerplus/android/fbreader/image/ImageViewActivity.java @@ -20,6 +20,7 @@ package org.geometerplus.android.fbreader.image; import android.app.Activity; +import android.content.Intent; import android.graphics.*; import android.net.Uri; import android.os.Bundle; @@ -28,12 +29,17 @@ import android.view.*; import org.geometerplus.zlibrary.core.filesystem.ZLFile; import org.geometerplus.zlibrary.core.image.*; import org.geometerplus.zlibrary.core.util.MimeType; +import org.geometerplus.zlibrary.core.util.ZLColor; import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication; import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageData; +import org.geometerplus.zlibrary.ui.android.util.ZLAndroidColorUtil; public class ImageViewActivity extends Activity { - Bitmap myBitmap; + public static final String BACKGROUND_COLOR_KEY = "bgColor"; + + private Bitmap myBitmap; + private ZLColor myBgColor; @Override protected void onCreate(Bundle icicle) { @@ -53,7 +59,13 @@ public class ImageViewActivity extends Activity { setContentView(new ImageView()); - final Uri uri = getIntent().getData(); + final Intent intent = getIntent(); + + myBgColor = new ZLColor( + intent.getIntExtra(BACKGROUND_COLOR_KEY, new ZLColor(127, 127, 127).getIntValue()) + ); + + final Uri uri = intent.getData(); if (ZLFileImage.SCHEME.equals(uri.getScheme())) { try { final String[] data = uri.getPath().split("\000"); @@ -96,7 +108,7 @@ public class ImageViewActivity extends Activity { @Override protected void onDraw(final Canvas canvas) { - myPaint.setColor(Color.rgb(128, 128, 128)); + myPaint.setColor(ZLAndroidColorUtil.rgb(myBgColor)); final int w = getWidth(); final int h = getHeight(); canvas.drawRect(0, 0, w, h, myPaint); diff --git a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java index f0e1d50ce..d5c9f43fc 100644 --- a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java @@ -382,6 +382,10 @@ public class PreferenceActivity extends ZLPreferenceActivity { )); dictionaryScreen.addOption(fbReader.DictionaryTappingActionOption, "tappingAction"); + final Screen imagesScreen = createPreferenceScreen("images"); + imagesScreen.addOption(fbReader.ImageTappingActionOption, "tappingAction"); + imagesScreen.addOption(fbReader.ImageViewBackgroundOption, "backgroundColor"); + final Screen cancelMenuScreen = createPreferenceScreen("cancelMenu"); cancelMenuScreen.addOption(fbReader.ShowPreviousBookInCancelMenuOption, "previousBook"); cancelMenuScreen.addOption(fbReader.ShowPositionsInCancelMenuOption, "positions"); diff --git a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java index af13d0502..3f1cc9bb2 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java +++ b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java @@ -26,6 +26,7 @@ import org.geometerplus.zlibrary.core.filesystem.*; import org.geometerplus.zlibrary.core.application.*; import org.geometerplus.zlibrary.core.dialogs.ZLDialogManager; import org.geometerplus.zlibrary.core.options.*; +import org.geometerplus.zlibrary.core.util.ZLColor; import org.geometerplus.zlibrary.text.hyphenation.ZLTextHyphenator; import org.geometerplus.zlibrary.text.view.ZLTextWordCursor; @@ -55,6 +56,14 @@ public final class FBReaderApp extends ZLApplication { public final ZLEnumOption DictionaryTappingActionOption = new ZLEnumOption("Options", "DictionaryTappingAction", DictionaryTappingAction.selectWord); + public final ZLColorOption ImageViewBackgroundOption = + new ZLColorOption("Colors", "ImageViewBackground", new ZLColor(127, 127, 127)); + public static enum ImageTappingAction { + doNothing, selectImage, openImageView + } + public final ZLEnumOption ImageTappingActionOption = + new ZLEnumOption("Options", "ImageTappingAction", ImageTappingAction.openImageView); + public final ZLIntegerRangeOption LeftMarginOption = new ZLIntegerRangeOption("Options", "LeftMargin", 0, 30, 4); public final ZLIntegerRangeOption RightMarginOption = diff --git a/src/org/geometerplus/fbreader/fbreader/FBView.java b/src/org/geometerplus/fbreader/fbreader/FBView.java index 644124ad4..b9179929b 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBView.java +++ b/src/org/geometerplus/fbreader/fbreader/FBView.java @@ -191,15 +191,25 @@ public final class FBView extends ZLTextView { return true; } - if (myReader.DictionaryTappingActionOption.getValue() != - FBReaderApp.DictionaryTappingAction.doNothing) { - final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.AnyRegionFilter); - if (region != null) { - selectRegion(region); - myReader.getViewWidget().reset(); - myReader.getViewWidget().repaint(); - return true; - } + final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.AnyRegionFilter); + boolean doSelectRegion = false; + if (region instanceof ZLTextWordRegion) { + doSelectRegion = + myReader.DictionaryTappingActionOption.getValue() != + FBReaderApp.DictionaryTappingAction.doNothing; + } else if (region instanceof ZLTextImageRegion) { + doSelectRegion = + myReader.ImageTappingActionOption.getValue() != + FBReaderApp.ImageTappingAction.doNothing; + } else if (region instanceof ZLTextHyperlinkRegion) { + doSelectRegion = true; + } + + if (doSelectRegion) { + selectRegion(region); + myReader.getViewWidget().reset(); + myReader.getViewWidget().repaint(); + return true; } return false; @@ -210,13 +220,17 @@ public final class FBView extends ZLTextView { return true; } - if (myReader.DictionaryTappingActionOption.getValue() != - FBReaderApp.DictionaryTappingAction.doNothing) { - final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.AnyRegionFilter); - if (region != null) { - selectRegion(region); - myReader.getViewWidget().reset(); - myReader.getViewWidget().repaint(); + final ZLTextElementRegion selectedRegion = getSelectedRegion(); + if (selectedRegion instanceof ZLTextHyperlinkRegion || + selectedRegion instanceof ZLTextWordRegion) { + if (myReader.DictionaryTappingActionOption.getValue() != + FBReaderApp.DictionaryTappingAction.doNothing) { + final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.AnyRegionFilter); + if (region instanceof ZLTextHyperlinkRegion || region instanceof ZLTextWordRegion) { + selectRegion(region); + myReader.getViewWidget().reset(); + myReader.getViewWidget().repaint(); + } } } return true; @@ -227,8 +241,19 @@ public final class FBView extends ZLTextView { return true; } - if (myReader.DictionaryTappingActionOption.getValue() == - FBReaderApp.DictionaryTappingAction.openDictionary) { + boolean doRunAction = false; + final ZLTextElementRegion region = getSelectedRegion(); + if (region instanceof ZLTextWordRegion) { + doRunAction = + myReader.DictionaryTappingActionOption.getValue() == + FBReaderApp.DictionaryTappingAction.openDictionary; + } else if (region instanceof ZLTextImageRegion) { + doRunAction = + myReader.ImageTappingActionOption.getValue() == + FBReaderApp.ImageTappingAction.openImageView; + } + + if (doRunAction) { myReader.doAction(ActionCode.PROCESS_HYPERLINK); return true; } From d165936fe8583c18204df65dcd1b958b92262d69 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Tue, 10 May 2011 11:20:42 +0100 Subject: [PATCH 07/11] resources synchronization --- assets/resources/application/cs.xml | 9 +++++++++ assets/resources/application/de.xml | 9 +++++++++ assets/resources/application/fr.xml | 9 +++++++++ assets/resources/application/gl.xml | 9 +++++++++ assets/resources/application/hu.xml | 9 +++++++++ assets/resources/application/it.xml | 9 +++++++++ assets/resources/application/nl.xml | 9 +++++++++ assets/resources/application/ru.xml | 9 +++++++++ assets/resources/application/th.xml | 9 +++++++++ assets/resources/application/uk.xml | 9 +++++++++ assets/resources/application/vi.xml | 9 +++++++++ assets/resources/application/zh.xml | 9 +++++++++ 12 files changed, 108 insertions(+) diff --git a/assets/resources/application/cs.xml b/assets/resources/application/cs.xml index 7f7d52185..e2a9b14bf 100644 --- a/assets/resources/application/cs.xml +++ b/assets/resources/application/cs.xml @@ -544,6 +544,15 @@ + + + + + + + + + diff --git a/assets/resources/application/de.xml b/assets/resources/application/de.xml index 943d1b38f..4added71f 100644 --- a/assets/resources/application/de.xml +++ b/assets/resources/application/de.xml @@ -531,6 +531,15 @@ + + + + + + + + + diff --git a/assets/resources/application/fr.xml b/assets/resources/application/fr.xml index 3486dd166..392507d99 100644 --- a/assets/resources/application/fr.xml +++ b/assets/resources/application/fr.xml @@ -533,6 +533,15 @@ + + + + + + + + + diff --git a/assets/resources/application/gl.xml b/assets/resources/application/gl.xml index 7741bf670..ffd5c0cb5 100644 --- a/assets/resources/application/gl.xml +++ b/assets/resources/application/gl.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/hu.xml b/assets/resources/application/hu.xml index 3158ff021..d7fb743cc 100644 --- a/assets/resources/application/hu.xml +++ b/assets/resources/application/hu.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/it.xml b/assets/resources/application/it.xml index 4a64aeb63..f0a314b6f 100644 --- a/assets/resources/application/it.xml +++ b/assets/resources/application/it.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/nl.xml b/assets/resources/application/nl.xml index e1732b213..3d2e49232 100644 --- a/assets/resources/application/nl.xml +++ b/assets/resources/application/nl.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/ru.xml b/assets/resources/application/ru.xml index 304eaa893..1a3707743 100644 --- a/assets/resources/application/ru.xml +++ b/assets/resources/application/ru.xml @@ -529,6 +529,15 @@ + + + + + + + + + diff --git a/assets/resources/application/th.xml b/assets/resources/application/th.xml index 3a2eda8dd..9cce38697 100644 --- a/assets/resources/application/th.xml +++ b/assets/resources/application/th.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/uk.xml b/assets/resources/application/uk.xml index c62c16959..b3f1348af 100644 --- a/assets/resources/application/uk.xml +++ b/assets/resources/application/uk.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/vi.xml b/assets/resources/application/vi.xml index e8459e11a..c6c93ff01 100644 --- a/assets/resources/application/vi.xml +++ b/assets/resources/application/vi.xml @@ -530,6 +530,15 @@ + + + + + + + + + diff --git a/assets/resources/application/zh.xml b/assets/resources/application/zh.xml index 74f87c687..65b6fb314 100644 --- a/assets/resources/application/zh.xml +++ b/assets/resources/application/zh.xml @@ -530,6 +530,15 @@ + + + + + + + + + From e5a346342b1bdf53686b4396030ae5c48cf67f95 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Tue, 10 May 2011 11:21:30 +0100 Subject: [PATCH 08/11] updated ChangeLog --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index c431aa28a..866ba2033 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ ===== 1.0.12 (May ??, 2011) ===== +* Image view settings * Html in book description ===== 1.0.11 (May 07, 2011) ===== From afebd2139aa4e94113c3826890a92cdc66781ff1 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Tue, 10 May 2011 11:21:56 +0100 Subject: [PATCH 09/11] proguard is enabled --- default.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.properties b/default.properties index 401f269ca..513f21f10 100644 --- a/default.properties +++ b/default.properties @@ -10,4 +10,4 @@ # Project target. target=android-8 java.encoding=utf-8 -#proguard.config=proguard.cfg +proguard.config=proguard.cfg From 1f4d3c1172d01cd60e67bbf2927a5361b186d56e Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Tue, 10 May 2011 13:24:58 +0100 Subject: [PATCH 10/11] unused messages have been removed --- assets/resources/zlibrary/cs.xml | 8 -------- assets/resources/zlibrary/de.xml | 8 -------- assets/resources/zlibrary/en.xml | 8 -------- assets/resources/zlibrary/fr.xml | 8 -------- assets/resources/zlibrary/gl.xml | 8 -------- assets/resources/zlibrary/hu.xml | 8 -------- assets/resources/zlibrary/it.xml | 8 -------- assets/resources/zlibrary/nl.xml | 8 -------- assets/resources/zlibrary/ru.xml | 8 -------- assets/resources/zlibrary/th.xml | 8 -------- assets/resources/zlibrary/uk.xml | 8 -------- assets/resources/zlibrary/vi.xml | 8 -------- assets/resources/zlibrary/zh.xml | 8 -------- .../zlibrary/core/network/ZLNetworkException.java | 8 -------- 14 files changed, 112 deletions(-) diff --git a/assets/resources/zlibrary/cs.xml b/assets/resources/zlibrary/cs.xml index 5fa0b5efc..491acc198 100644 --- a/assets/resources/zlibrary/cs.xml +++ b/assets/resources/zlibrary/cs.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/de.xml b/assets/resources/zlibrary/de.xml index 764f238ef..569818ec0 100644 --- a/assets/resources/zlibrary/de.xml +++ b/assets/resources/zlibrary/de.xml @@ -25,14 +25,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/en.xml b/assets/resources/zlibrary/en.xml index 0dec07d08..475cd11ee 100644 --- a/assets/resources/zlibrary/en.xml +++ b/assets/resources/zlibrary/en.xml @@ -23,14 +23,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/fr.xml b/assets/resources/zlibrary/fr.xml index f73c6b20e..ae9677753 100644 --- a/assets/resources/zlibrary/fr.xml +++ b/assets/resources/zlibrary/fr.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/gl.xml b/assets/resources/zlibrary/gl.xml index e6e7f97d8..f61cd9ba5 100644 --- a/assets/resources/zlibrary/gl.xml +++ b/assets/resources/zlibrary/gl.xml @@ -23,14 +23,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/hu.xml b/assets/resources/zlibrary/hu.xml index 55561ac81..02f773a49 100644 --- a/assets/resources/zlibrary/hu.xml +++ b/assets/resources/zlibrary/hu.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/it.xml b/assets/resources/zlibrary/it.xml index 7cf627e44..108b0701d 100644 --- a/assets/resources/zlibrary/it.xml +++ b/assets/resources/zlibrary/it.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/nl.xml b/assets/resources/zlibrary/nl.xml index 6fac220b9..f4fa1f8b2 100644 --- a/assets/resources/zlibrary/nl.xml +++ b/assets/resources/zlibrary/nl.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/ru.xml b/assets/resources/zlibrary/ru.xml index e33beb6f4..1cc20bf9c 100644 --- a/assets/resources/zlibrary/ru.xml +++ b/assets/resources/zlibrary/ru.xml @@ -23,14 +23,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/th.xml b/assets/resources/zlibrary/th.xml index 16a07e026..fca4312bd 100644 --- a/assets/resources/zlibrary/th.xml +++ b/assets/resources/zlibrary/th.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/uk.xml b/assets/resources/zlibrary/uk.xml index 9dde3f7d2..6a6323ac4 100644 --- a/assets/resources/zlibrary/uk.xml +++ b/assets/resources/zlibrary/uk.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/vi.xml b/assets/resources/zlibrary/vi.xml index 882601af2..e549cdbfc 100644 --- a/assets/resources/zlibrary/vi.xml +++ b/assets/resources/zlibrary/vi.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/assets/resources/zlibrary/zh.xml b/assets/resources/zlibrary/zh.xml index fe0a3cbe4..56f9ad078 100644 --- a/assets/resources/zlibrary/zh.xml +++ b/assets/resources/zlibrary/zh.xml @@ -24,14 +24,6 @@ - - - - - - - - diff --git a/src/org/geometerplus/zlibrary/core/network/ZLNetworkException.java b/src/org/geometerplus/zlibrary/core/network/ZLNetworkException.java index d81945738..63c9da637 100644 --- a/src/org/geometerplus/zlibrary/core/network/ZLNetworkException.java +++ b/src/org/geometerplus/zlibrary/core/network/ZLNetworkException.java @@ -31,8 +31,6 @@ public class ZLNetworkException extends Exception { public static final String ERROR_UNSUPPORTED_PROTOCOL = "unsupportedProtocol"; public static final String ERROR_INVALID_URL = "invalidURL"; public static final String ERROR_AUTHENTICATION_FAILED = "authenticationFailed"; - public static final String ERROR_SSL_SUBSYSTEM = "sslError"; - public static final String ERROR_SSL_PROTOCOL_ERROR = "sslProtocolError"; // Messages with one parameter: public static final String ERROR_SOMETHING_WRONG = "somethingWrongMessage"; @@ -42,12 +40,6 @@ public class ZLNetworkException extends Exception { public static final String ERROR_RESOLVE_HOST = "couldntResolveHostMessage"; public static final String ERROR_HOST_CANNOT_BE_REACHED = "hostCantBeReached"; public static final String ERROR_CONNECTION_REFUSED = "connectionRefused"; - public static final String ERROR_SSL_CONNECT = "sslConnectErrorMessage"; - public static final String ERROR_SSL_BAD_KEY = "sslBadKey"; - public static final String ERROR_SSL_PEER_UNVERIFIED = "sslPeerUnverified"; - public static final String ERROR_SSL_BAD_FILE = "sslBadCertificateFileMessage"; - public static final String ERROR_SSL_EXPIRED = "sslCertificateExpired"; - public static final String ERROR_SSL_NOT_YET_VALID = "sslCertificateNotYetValid"; private static ZLResource getResource() { return ZLResource.resource("dialog").getResource("networkError"); From 3846cc0d49dab121edb9e878cb12045a347621f3 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Wed, 11 May 2011 19:02:29 +0100 Subject: [PATCH 11/11] renaming: ZLTextElementRegion -> ZLTextRegion --- .../fbreader/ProcessHyperlinkAction.java | 2 +- .../fbreader/fbreader/FBView.java | 16 ++++---- .../text/view/ZLTextElementAreaVector.java | 4 +- .../text/view/ZLTextHyperlinkRegion.java | 2 +- .../zlibrary/text/view/ZLTextImageRegion.java | 2 +- ...xtElementRegion.java => ZLTextRegion.java} | 24 ++++++------ .../zlibrary/text/view/ZLTextView.java | 38 +++++++++---------- .../zlibrary/text/view/ZLTextWordRegion.java | 2 +- 8 files changed, 45 insertions(+), 45 deletions(-) rename src/org/geometerplus/zlibrary/text/view/{ZLTextElementRegion.java => ZLTextRegion.java} (82%) diff --git a/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java b/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java index 8799c8eda..8ecd1d7fb 100644 --- a/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java +++ b/src/org/geometerplus/android/fbreader/ProcessHyperlinkAction.java @@ -51,7 +51,7 @@ class ProcessHyperlinkAction extends FBAction { } public void run() { - final ZLTextElementRegion region = Reader.getTextView().getSelectedRegion(); + final ZLTextRegion region = Reader.getTextView().getSelectedRegion(); if (region instanceof ZLTextHyperlinkRegion) { Reader.getTextView().hideSelectedRegionBorder(); Reader.getViewWidget().repaint(); diff --git a/src/org/geometerplus/fbreader/fbreader/FBView.java b/src/org/geometerplus/fbreader/fbreader/FBView.java index b9179929b..35b79292f 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBView.java +++ b/src/org/geometerplus/fbreader/fbreader/FBView.java @@ -75,7 +75,7 @@ public final class FBView extends ZLTextView { return true; } - final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.HyperlinkFilter); + final ZLTextRegion region = findRegion(x, y, 10, ZLTextRegion.HyperlinkFilter); if (region != null) { selectRegion(region); myReader.getViewWidget().reset(); @@ -191,7 +191,7 @@ public final class FBView extends ZLTextView { return true; } - final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.AnyRegionFilter); + final ZLTextRegion region = findRegion(x, y, 10, ZLTextRegion.AnyRegionFilter); boolean doSelectRegion = false; if (region instanceof ZLTextWordRegion) { doSelectRegion = @@ -220,12 +220,12 @@ public final class FBView extends ZLTextView { return true; } - final ZLTextElementRegion selectedRegion = getSelectedRegion(); + final ZLTextRegion selectedRegion = getSelectedRegion(); if (selectedRegion instanceof ZLTextHyperlinkRegion || selectedRegion instanceof ZLTextWordRegion) { if (myReader.DictionaryTappingActionOption.getValue() != FBReaderApp.DictionaryTappingAction.doNothing) { - final ZLTextElementRegion region = findRegion(x, y, 10, ZLTextElementRegion.AnyRegionFilter); + final ZLTextRegion region = findRegion(x, y, 10, ZLTextRegion.AnyRegionFilter); if (region instanceof ZLTextHyperlinkRegion || region instanceof ZLTextWordRegion) { selectRegion(region); myReader.getViewWidget().reset(); @@ -242,7 +242,7 @@ public final class FBView extends ZLTextView { } boolean doRunAction = false; - final ZLTextElementRegion region = getSelectedRegion(); + final ZLTextRegion region = getSelectedRegion(); if (region instanceof ZLTextWordRegion) { doRunAction = myReader.DictionaryTappingActionOption.getValue() == @@ -270,10 +270,10 @@ public final class FBView extends ZLTextView { (diffY > 0 ? Direction.down : Direction.up) : (diffX > 0 ? Direction.leftToRight : Direction.rightToLeft); - ZLTextElementRegion region = currentRegion(); - final ZLTextElementRegion.Filter filter = + ZLTextRegion region = currentRegion(); + final ZLTextRegion.Filter filter = region instanceof ZLTextWordRegion || myReader.NavigateAllWordsOption.getValue() - ? ZLTextElementRegion.AnyRegionFilter : ZLTextElementRegion.ImageOrHyperlinkFilter; + ? ZLTextRegion.AnyRegionFilter : ZLTextRegion.ImageOrHyperlinkFilter; region = nextRegion(direction, filter); if (region != null) { selectRegion(region); diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextElementAreaVector.java b/src/org/geometerplus/zlibrary/text/view/ZLTextElementAreaVector.java index 7bbb563e5..88f35e012 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextElementAreaVector.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextElementAreaVector.java @@ -24,8 +24,8 @@ import java.util.ArrayList; final class ZLTextElementAreaVector extends ArrayList { private static final long serialVersionUID = -7880472347947563506L; - final ArrayList ElementRegions = new ArrayList(); - private ZLTextElementRegion myCurrentElementRegion; + final ArrayList ElementRegions = new ArrayList(); + private ZLTextRegion myCurrentElementRegion; @Override public void clear() { diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextHyperlinkRegion.java b/src/org/geometerplus/zlibrary/text/view/ZLTextHyperlinkRegion.java index 5ef53b908..5867e0d4b 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextHyperlinkRegion.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextHyperlinkRegion.java @@ -21,7 +21,7 @@ package org.geometerplus.zlibrary.text.view; import java.util.List; -public class ZLTextHyperlinkRegion extends ZLTextElementRegion { +public class ZLTextHyperlinkRegion extends ZLTextRegion { public final ZLTextHyperlink Hyperlink; ZLTextHyperlinkRegion(ZLTextHyperlink hyperlink, List list, int fromIndex) { diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextImageRegion.java b/src/org/geometerplus/zlibrary/text/view/ZLTextImageRegion.java index 7c76a08fc..ebfac21e4 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextImageRegion.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextImageRegion.java @@ -21,7 +21,7 @@ package org.geometerplus.zlibrary.text.view; import java.util.List; -public class ZLTextImageRegion extends ZLTextElementRegion { +public class ZLTextImageRegion extends ZLTextRegion { public final ZLTextImageElement ImageElement; ZLTextImageRegion(ZLTextImageElement imageElement, List list, int fromIndex) { diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextElementRegion.java b/src/org/geometerplus/zlibrary/text/view/ZLTextRegion.java similarity index 82% rename from src/org/geometerplus/zlibrary/text/view/ZLTextElementRegion.java rename to src/org/geometerplus/zlibrary/text/view/ZLTextRegion.java index b86552b85..3a6a35065 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextElementRegion.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextRegion.java @@ -23,25 +23,25 @@ import java.util.*; import org.geometerplus.zlibrary.core.view.ZLPaintContext; -public abstract class ZLTextElementRegion { +public abstract class ZLTextRegion { public static interface Filter { - boolean accepts(ZLTextElementRegion region); + boolean accepts(ZLTextRegion region); } public static Filter AnyRegionFilter = new Filter() { - public boolean accepts(ZLTextElementRegion region) { + public boolean accepts(ZLTextRegion region) { return true; } }; public static Filter HyperlinkFilter = new Filter() { - public boolean accepts(ZLTextElementRegion region) { + public boolean accepts(ZLTextRegion region) { return region instanceof ZLTextHyperlinkRegion; } }; public static Filter ImageOrHyperlinkFilter = new Filter() { - public boolean accepts(ZLTextElementRegion region) { + public boolean accepts(ZLTextRegion region) { return region instanceof ZLTextImageRegion || region instanceof ZLTextHyperlinkRegion; @@ -53,7 +53,7 @@ public abstract class ZLTextElementRegion { private int myToIndex; private ZLTextHorizontalConvexHull myHull; - ZLTextElementRegion(List list, int fromIndex) { + ZLTextRegion(List list, int fromIndex) { myList = list; myFromIndex = fromIndex; myToIndex = fromIndex + 1; @@ -90,27 +90,27 @@ public abstract class ZLTextElementRegion { return convexHull().distanceTo(x, y); } - boolean isAtRightOf(ZLTextElementRegion other) { + boolean isAtRightOf(ZLTextRegion other) { return other == null || myList.get(myFromIndex).XStart >= other.myList.get(other.myToIndex - 1).XEnd; } - boolean isAtLeftOf(ZLTextElementRegion other) { + boolean isAtLeftOf(ZLTextRegion other) { return other == null || other.isAtRightOf(this); } - boolean isUnder(ZLTextElementRegion other) { + boolean isUnder(ZLTextRegion other) { return other == null || myList.get(myFromIndex).YStart >= other.myList.get(other.myToIndex - 1).YEnd; } - boolean isOver(ZLTextElementRegion other) { + boolean isOver(ZLTextRegion other) { return other == null || other.isUnder(this); } - boolean isExactlyUnder(ZLTextElementRegion other) { + boolean isExactlyUnder(ZLTextRegion other) { if (other == null) { return true; } @@ -129,7 +129,7 @@ public abstract class ZLTextElementRegion { return false; } - boolean isExactlyOver(ZLTextElementRegion other) { + boolean isExactlyOver(ZLTextRegion other) { return other == null || other.isExactlyUnder(this); } } diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java index e835fb2be..09efce7fc 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java @@ -304,7 +304,7 @@ public abstract class ZLTextView extends ZLTextViewBase { ++index; } - final ZLTextElementRegion selectedElementRegion = getCurrentElementRegion(page); + final ZLTextRegion selectedElementRegion = getCurrentElementRegion(page); if (selectedElementRegion != null && myHighlightSelectedRegion) { selectedElementRegion.draw(context); } @@ -1285,7 +1285,7 @@ public abstract class ZLTextView extends ZLTextViewBase { } */ - private ZLTextElementRegion mySelectedRegion; + private ZLTextRegion mySelectedRegion; private boolean myHighlightSelectedRegion = true; public void hideSelectedRegionBorder() { @@ -1293,8 +1293,8 @@ public abstract class ZLTextView extends ZLTextViewBase { Application.getViewWidget().reset(); } - private ZLTextElementRegion getCurrentElementRegion(ZLTextPage page) { - final ArrayList elementRegions = page.TextElementMap.ElementRegions; + private ZLTextRegion getCurrentElementRegion(ZLTextPage page) { + final ArrayList elementRegions = page.TextElementMap.ElementRegions; final int index = elementRegions.indexOf(mySelectedRegion); if (index == -1) { return null; @@ -1302,14 +1302,14 @@ public abstract class ZLTextView extends ZLTextViewBase { return elementRegions.get(index); } - public ZLTextElementRegion getSelectedRegion() { + public ZLTextRegion getSelectedRegion() { return getCurrentElementRegion(myCurrentPage); } - protected ZLTextElementRegion findRegion(int x, int y, int maxDistance, ZLTextElementRegion.Filter filter) { - ZLTextElementRegion bestRegion = null; + protected ZLTextRegion findRegion(int x, int y, int maxDistance, ZLTextRegion.Filter filter) { + ZLTextRegion bestRegion = null; int distance = maxDistance + 1; - for (ZLTextElementRegion region : myCurrentPage.TextElementMap.ElementRegions) { + for (ZLTextRegion region : myCurrentPage.TextElementMap.ElementRegions) { if (filter.accepts(region)) { final int d = region.distanceTo(x, y); if (d < distance) { @@ -1321,7 +1321,7 @@ public abstract class ZLTextView extends ZLTextViewBase { return bestRegion; } - protected void selectRegion(ZLTextElementRegion region) { + protected void selectRegion(ZLTextRegion region) { if (region == null || !region.equals(mySelectedRegion)) { myHighlightSelectedRegion = true; } @@ -1333,11 +1333,11 @@ public abstract class ZLTextView extends ZLTextViewBase { myHighlightSelectedRegion = true; } - protected ZLTextElementRegion currentRegion() { + protected ZLTextRegion currentRegion() { if (mySelectedRegion == null) { return null; } - final ArrayList elementRegions = + final ArrayList elementRegions = myCurrentPage.TextElementMap.ElementRegions; if (elementRegions.isEmpty()) { return null; @@ -1346,8 +1346,8 @@ public abstract class ZLTextView extends ZLTextViewBase { return index >= 0 ? elementRegions.get(index) : null; } - protected ZLTextElementRegion nextRegion(Direction direction, ZLTextElementRegion.Filter filter) { - final ArrayList elementRegions = + protected ZLTextRegion nextRegion(Direction direction, ZLTextRegion.Filter filter) { + final ArrayList elementRegions = myCurrentPage.TextElementMap.ElementRegions; if (elementRegions.isEmpty()) { return null; @@ -1380,7 +1380,7 @@ public abstract class ZLTextView extends ZLTextViewBase { switch (direction) { case rightToLeft: for (; index >= 0; --index) { - final ZLTextElementRegion candidate = elementRegions.get(index); + final ZLTextRegion candidate = elementRegions.get(index); if (filter.accepts(candidate) && candidate.isAtLeftOf(mySelectedRegion)) { return candidate; } @@ -1388,7 +1388,7 @@ public abstract class ZLTextView extends ZLTextViewBase { break; case leftToRight: for (; index < elementRegions.size(); ++index) { - final ZLTextElementRegion candidate = elementRegions.get(index); + final ZLTextRegion candidate = elementRegions.get(index); if (filter.accepts(candidate) && candidate.isAtRightOf(mySelectedRegion)) { return candidate; } @@ -1396,9 +1396,9 @@ public abstract class ZLTextView extends ZLTextViewBase { break; case down: { - ZLTextElementRegion firstCandidate = null; + ZLTextRegion firstCandidate = null; for (; index < elementRegions.size(); ++index) { - final ZLTextElementRegion candidate = elementRegions.get(index); + final ZLTextRegion candidate = elementRegions.get(index); if (!filter.accepts(candidate)) { continue; } @@ -1415,9 +1415,9 @@ public abstract class ZLTextView extends ZLTextViewBase { break; } case up: - ZLTextElementRegion firstCandidate = null; + ZLTextRegion firstCandidate = null; for (; index >= 0; --index) { - final ZLTextElementRegion candidate = elementRegions.get(index); + final ZLTextRegion candidate = elementRegions.get(index); if (!filter.accepts(candidate)) { continue; } diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextWordRegion.java b/src/org/geometerplus/zlibrary/text/view/ZLTextWordRegion.java index 97583bb8a..cb21ecaad 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextWordRegion.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextWordRegion.java @@ -21,7 +21,7 @@ package org.geometerplus.zlibrary.text.view; import java.util.List; -public class ZLTextWordRegion extends ZLTextElementRegion { +public class ZLTextWordRegion extends ZLTextRegion { public final ZLTextWord Word; ZLTextWordRegion(ZLTextWord word, List list, int fromIndex) {