Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
theScrabi committed May 7, 2018
2 parents ba60da0 + 5dfda2d commit 86baf31
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 60 deletions.
4 changes: 2 additions & 2 deletions org.fox.ttrss/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fox.ttrss"
android:versionCode="472"
android:versionName="1.238">
android:versionCode="476"
android:versionName="1.242">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expand Down
12 changes: 6 additions & 6 deletions org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBar;
import android.text.Html;
Expand Down Expand Up @@ -162,8 +161,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bun
final View view = inflater.inflate(R.layout.fragment_article, container, false);

// couldn't reinitialize state properly, might as well bail out
// tfw m_activity is null
if (m_article == null && m_activity != null) {
if (m_article == null) {
m_activity.finish();
}

Expand Down Expand Up @@ -407,14 +405,16 @@ public boolean onLongClick(View v) {

m_web.setVisibility(View.VISIBLE);

//renderContent(savedInstanceState);
// we no longer use async rendering because chrome 66 webview breaks on it sometimes

new Handler().postDelayed(new Runnable() {
/*new Handler().postDelayed(new Runnable() {
@Override
public void run() {
renderContent(savedInstanceState);
}
}, 250);
}, 250);*/

renderContent(savedInstanceState);

return view;
}
Expand Down
27 changes: 26 additions & 1 deletion org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,12 @@
import org.fox.ttrss.glide.ProgressTarget;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Attachment;
import org.fox.ttrss.types.Feed;
import org.fox.ttrss.util.HeaderViewRecyclerAdapter;
import org.fox.ttrss.util.HeadlinesRequest;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
Expand Down Expand Up @@ -1561,7 +1564,29 @@ private void openGalleryForType(Article article, ArticleViewHolder holder, View

intent.putExtra("firstSrc", article.flavorStreamUri != null ? article.flavorStreamUri : article.flavorImageUri);
intent.putExtra("title", article.title);
intent.putExtra("content", article.content);

// FIXME maybe: gallery view works with document as html, it's easier to add this hack rather than
// rework it to additionally operate on separate attachment array (?)
// also, maybe consider video attachments? kinda hard to do without a poster tho (for flavor view)

String tempContent = article.content;

if (article.attachments != null) {
Document doc = new Document("");

for (Attachment a : article.attachments) {
if (a.content_type != null) {
if (a.content_type.contains("image/")) {
Element img = new Element("img").attr("src", a.content_url);
doc.appendChild(img);
}
}
}

tempContent = doc.outerHtml() + tempContent;
}

intent.putExtra("content", tempContent);

ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(m_activity,
Expand Down
18 changes: 14 additions & 4 deletions org.fox.ttrss/src/main/java/org/fox/ttrss/tasker/TaskerReceiver.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
Expand Down Expand Up @@ -43,8 +44,12 @@ protected void onLoginSuccess(int requestId, String sessionId, int apiLevel) {
OfflineDownloadService.class);
intent.putExtra("sessionId", sessionId);
intent.putExtra("batchMode", true);

fContext.startService(intent);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
fContext.startForegroundService(intent);
} else {
fContext.startService(intent);
}
}
break;
case TaskerSettingsActivity.ACTION_UPLOAD:
Expand All @@ -53,8 +58,13 @@ protected void onLoginSuccess(int requestId, String sessionId, int apiLevel) {
OfflineUploadService.class);
intent.putExtra("sessionId", sessionId);
intent.putExtra("batchMode", true);

fContext.startService(intent);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
fContext.startForegroundService(intent);
} else {
fContext.startService(intent);
}

}
break;
default:
Expand Down
98 changes: 60 additions & 38 deletions org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,67 +67,89 @@ public void cleanupExcerpt() {
}

public void collectMediaInfo() {
articleDoc = Jsoup.parse(content);

if (articleDoc != null) {
mediaList = articleDoc.select("img,video,iframe[src*=youtube.com/embed/]");
// consider attachments first
if (attachments != null) {
for (Attachment a : attachments) {
if (a.content_type != null && a.content_type.contains("image/")) {
flavorImageUri = a.content_url;

if (flavorImageUri != null && flavorImageUri.startsWith("//")) {
flavorImageUri = "https:" + flavorImageUri;
}

// this is needed for the gallery view
flavorImage = new Element("img")
.attr("src", flavorImageUri);

for (Element e : mediaList) {
if ("iframe".equals(e.tagName().toLowerCase())) {
flavorImage = e;
break;
} /*else if ("video".equals(e.tagName().toLowerCase())) {
flavorImage = e;
break;
}*/
}
}
}

// doing this the hard way then
if (flavorImageUri == null) {
articleDoc = Jsoup.parse(content);

if (articleDoc != null) {
mediaList = articleDoc.select("img,video,iframe[src*=youtube.com/embed/]");

if (flavorImage == null) {
for (Element e : mediaList) {
if ("iframe".equals(e.tagName().toLowerCase())) {
flavorImage = e;
break;
} /*else if ("video".equals(e.tagName().toLowerCase())) {
flavorImage = e;
break;
}*/
}
}

if (flavorImage != null) {
if (flavorImage == null) {
for (Element e : mediaList) {
flavorImage = e;
break;
}
}

try {
if (flavorImage != null) {
try {

if ("video".equals(flavorImage.tagName().toLowerCase())) {
Element source = flavorImage.select("source").first();
flavorStreamUri = source.attr("src");
if ("video".equals(flavorImage.tagName().toLowerCase())) {
Element source = flavorImage.select("source").first();
flavorStreamUri = source.attr("src");

flavorImageUri = flavorImage.attr("poster");
} else if ("iframe".equals(flavorImage.tagName().toLowerCase())) {
flavorImageUri = flavorImage.attr("poster");
} else if ("iframe".equals(flavorImage.tagName().toLowerCase())) {

String srcEmbed = flavorImage.attr("src");
String srcEmbed = flavorImage.attr("src");

if (srcEmbed.length() > 0) {
Pattern pattern = Pattern.compile("/embed/([\\w-]+)");
Matcher matcher = pattern.matcher(srcEmbed);
if (srcEmbed.length() > 0) {
Pattern pattern = Pattern.compile("/embed/([\\w-]+)");
Matcher matcher = pattern.matcher(srcEmbed);

if (matcher.find()) {
youtubeVid = matcher.group(1);
if (matcher.find()) {
youtubeVid = matcher.group(1);

flavorImageUri = "https://img.youtube.com/vi/" + youtubeVid + "/hqdefault.jpg";
flavorStreamUri = "https://youtu.be/" + youtubeVid;
flavorImageUri = "https://img.youtube.com/vi/" + youtubeVid + "/hqdefault.jpg";
flavorStreamUri = "https://youtu.be/" + youtubeVid;
}
}
} else {
flavorImageUri = flavorImage.attr("src");

if (flavorImageUri != null && flavorImageUri.startsWith("//")) {
flavorImageUri = "https:" + flavorImageUri;
}
}
} else {
flavorImageUri = flavorImage.attr("src");

if (flavorImageUri != null && flavorImageUri.startsWith("//")) {
flavorImageUri = "https:" + flavorImageUri;
flavorStreamUri = null;
}
} catch (Exception e) {
e.printStackTrace();

flavorImage = null;
flavorImageUri = null;
flavorStreamUri = null;
}
} catch (Exception e) {
e.printStackTrace();

flavorImage = null;
flavorImageUri = null;
flavorStreamUri = null;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package org.fox.ttrss.widget;

import android.app.Notification;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.preference.PreferenceManager;
Expand All @@ -29,6 +31,15 @@ public class WidgetUpdateService extends Service {
public static final int UPDATE_RESULT_ERROR_NEED_CONF = 3;
public static final int UPDATE_IN_PROGRESS = 4;

@Override
public void onCreate() {
super.onCreate();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForeground(1, new Notification());
}
}

@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
Expand All @@ -43,10 +54,7 @@ protected boolean isNetworkAvailable() {

// if no network is available networkInfo will be null
// otherwise check if we are connected
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
return networkInfo != null && networkInfo.isConnected();
}

@Override
Expand All @@ -67,7 +75,12 @@ public void onStart(Intent intent, int startId) {
public void run() {
Intent serviceIntent = new Intent(getApplicationContext(), WidgetUpdateService.class);
serviceIntent.putExtra("retryCount", retryCount + 1);
startService(serviceIntent);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(serviceIntent);
} else {
startService(serviceIntent);
}

}
}, 3 * 1000);
Expand Down
12 changes: 8 additions & 4 deletions org.fox.ttrss/src/main/res/values-pt-rBR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@
<string name="error_invalid_api_url">Erro: A URL da API é inválida</string>
<string name="go_offline">Modo offline</string>
<string name="go_online">Modo online</string>
<string name="offline_switch_error">Falha ao preparar o modo offline (ver log)</string>
<!-- <string name="no_feeds">Nenhum feed para mostrar display</string> -->
<string name="offline_switch_failed">Falha ao preparar modo offline</string>
<!-- <string name="no_feeds">Nenhum feed para mostrar</string> -->
<string name="dialog_offline_prompt">O Login falhou, mas você tem dados armazenados. Mudar para modo offline?</string>
<string name="dialog_offline_success">Modo offline está disponível</string>
<string name="dialog_offline_go">Mudar para offline</string>
Expand All @@ -88,9 +88,10 @@
<string name="notify_uploading_title">Sincronizando dados offline</string>
<string name="offline_sync_success">Sincronização de dados offline completa</string>
<string name="offline_mode">Modo offline</string>
<string name="offline_image_cache_enabled">Armazenar imagens</string>
<string name="offline_image_cache_enabled_summary">Baixar imagens para o cartão SD. Isso pode aumentar consideravelmente o tempo para o modo offline.</string>
<string name="offline_media_cache_enabled">Fazer cache de mídia</string>
<string name="offline_media_cache_enabled_summary">Baixar arquivos de mídia. Isso aumenta significativamente o tempo necessário para ir para o modo offline</string>
<string name="notify_downloading_images">Baixando imagens (%1$d)…</string>
<string name="notify_downloading_media">Baixando arquivos de mídia…</string>
<string name="article_set_labels">Definir marcadores</string>
<string name="search">Pesquisar</string>
<string name="cancel">Cancelar</string>
Expand Down Expand Up @@ -254,4 +255,7 @@
<string name="pref_widget_update_interval_summary">Esse intervalo não é preciso devido a limitações do Android</string>
<string name="prefs_offline_sort_by_feed">Agrupar títulos por feeds</string>
<string name="reload">Recarregar</string>
<string name="offline_sync_try_again">Tentar novamente</string>
<string name="offline_tap_to_switch">Pressione para alterar para offline</string>
<string name="offline_no_articles">Nenhum artigo baixado</string>
</resources>

0 comments on commit 86baf31

Please sign in to comment.