summaryrefslogtreecommitdiff
path: root/org.fox.ttrss/src/main/java
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2019-08-15 09:38:30 +0300
committerAndrew Dolgov <[email protected]>2019-08-15 09:38:30 +0300
commite40b8aa0628e6a32322891bb047143bd75e350ed (patch)
treeee0eefe04308324f365a977288c4a4956abd8c67 /org.fox.ttrss/src/main/java
parentdfe11166d7e182d835278984518885c5c436a33a (diff)
support flavor_image/flavor_stream supplied via API
prevent GalleryActivity lockup if flavor image is not found
Diffstat (limited to 'org.fox.ttrss/src/main/java')
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java130
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java4
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java15
3 files changed, 87 insertions, 62 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java
index 8e7c4756..ebcceaf4 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java
@@ -151,6 +151,72 @@ public class GalleryActivity extends CommonActivity {
}
}
+ boolean collectGalleryContents(String imgSrcFirst, Document doc, List<GalleryEntry> uncheckedItems ) {
+ Elements elems = doc.select("img,video");
+
+ boolean firstFound = false;
+
+ for (Element elem : elems) {
+
+ GalleryEntry item = new GalleryEntry();
+
+ if ("video".equals(elem.tagName().toLowerCase())) {
+ String cover = elem.attr("poster");
+
+ Element source = elem.select("source").first();
+ String src = source.attr("src");
+
+ //Log.d(TAG, "vid/src=" + src);
+
+ if (src.startsWith("//")) {
+ src = "https:" + src;
+ }
+
+ if (imgSrcFirst.equals(src))
+ firstFound = true;
+
+ item.url = src;
+ item.coverUrl = cover;
+ item.type = GalleryEntry.GalleryEntryType.TYPE_VIDEO;
+
+ } else {
+ String src = elem.attr("src");
+
+ if (src.startsWith("//")) {
+ src = "https:" + src;
+ }
+
+ if (imgSrcFirst.equals(src))
+ firstFound = true;
+
+ Log.d(TAG, "img/fir=" + imgSrcFirst + ";");
+ Log.d(TAG, "img/src=" + src + "; ff=" + firstFound);
+
+ try {
+ Uri checkUri = Uri.parse(src);
+
+ if (!"data".equals(checkUri.getScheme().toLowerCase())) {
+ item.url = src;
+ item.type = GalleryEntry.GalleryEntryType.TYPE_IMAGE;
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ if ((firstFound || imgSrcFirst.equals("")) && item.url != null) {
+ if (m_items.size() == 0)
+ m_items.add(item);
+ else
+ uncheckedItems.add(item);
+ }
+ }
+
+ return firstFound;
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
ActivityCompat.postponeEnterTransition(this);
@@ -182,67 +248,11 @@ public class GalleryActivity extends CommonActivity {
String imgSrcFirst = getIntent().getStringExtra("firstSrc");
Document doc = Jsoup.parse(m_content);
- Elements elems = doc.select("img,video");
- boolean firstFound = false;
-
- for (Element elem : elems) {
-
- GalleryEntry item = new GalleryEntry();
-
- if ("video".equals(elem.tagName().toLowerCase())) {
- String cover = elem.attr("poster");
-
- Element source = elem.select("source").first();
- String src = source.attr("src");
-
- //Log.d(TAG, "vid/src=" + src);
-
- if (src.startsWith("//")) {
- src = "https:" + src;
- }
-
- if (imgSrcFirst.equals(src))
- firstFound = true;
-
- item.url = src;
- item.coverUrl = cover;
- item.type = GalleryEntry.GalleryEntryType.TYPE_VIDEO;
-
- } else {
- String src = elem.attr("src");
-
- if (src.startsWith("//")) {
- src = "https:" + src;
- }
-
- if (imgSrcFirst.equals(src))
- firstFound = true;
-
- Log.d(TAG, "img/fir=" + imgSrcFirst);
- Log.d(TAG, "img/src=" + src + "; ff=" + firstFound);
-
- try {
- Uri checkUri = Uri.parse(src);
-
- if (!"data".equals(checkUri.getScheme().toLowerCase())) {
- item.url = src;
- item.type = GalleryEntry.GalleryEntryType.TYPE_IMAGE;
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
- if (firstFound && item.url != null) {
- if (m_items.size() == 0)
- m_items.add(item);
- else
- uncheckedItems.add(item);
- }
- }
+ // if we were unable to find first image, try again for all media content so that
+ // gallery doesn't lock up because of a pending shared transition
+ if (!collectGalleryContents(imgSrcFirst, doc, uncheckedItems))
+ collectGalleryContents("", doc, uncheckedItems);
}
findViewById(R.id.gallery_overflow).setOnClickListener(new View.OnClickListener() {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
index fa53e714..ed3c7b24 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
@@ -1131,12 +1131,12 @@ public class HeadlinesFragment extends StateSavedFragment {
if (!m_prefs.getBoolean("headlines_show_content", true)) {
holder.excerptView.setVisibility(View.GONE);
} else {
- String excerpt;
+ String excerpt = "";
try {
if (article.excerpt != null) {
excerpt = article.excerpt;
- } else {
+ } else if (article.articleDoc != null) {
excerpt = article.articleDoc.text();
if (excerpt.length() > CommonActivity.EXCERPT_MAX_LENGTH)
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
index 070ddcc0..bb2c09f1 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
@@ -39,6 +39,8 @@ public class Article implements Parcelable {
public String author;
public String note;
public boolean selected;
+ public String flavor_image;
+ public String flavor_stream;
/* not serialized */
transient public Document articleDoc;
@@ -67,6 +69,19 @@ public class Article implements Parcelable {
}
public void collectMediaInfo() {
+ if (flavor_image != null && flavor_image.length() > 0) {
+ flavorImageUri = flavor_image;
+
+ flavorImage = new Element("img")
+ .attr("src", flavorImageUri);
+
+ if (flavor_stream != null && flavor_stream.length() > 0) {
+ flavorStreamUri = flavor_stream;
+ }
+
+ return;
+ }
+
articleDoc = Jsoup.parse(content);
if (articleDoc != null) {