Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/news-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Luhmer <david-dev@live.de>2020-07-23 18:01:07 +0300
committerDavid Luhmer <david-dev@live.de>2020-07-23 18:01:07 +0300
commit4645b04779bbb18ee63d44a09b1973cfff0e5910 (patch)
tree5795ece6a5e7c79841998ffb7e0bff4c3aa7841b /News-Android-App/src/main
parent5e2c96e4170a39b3286ce9ee14785688a8e988e2 (diff)
add support for media thumbnails
Signed-off-by: David Luhmer <david-dev@live.de>
Diffstat (limited to 'News-Android-App/src/main')
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java2
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ViewHolder.java25
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java2
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/Version7.java (renamed from News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/Version6.java)11
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/DaoMaster.java4
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItem.java32
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java31
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java15
8 files changed, 104 insertions, 18 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java
index 0c932a8c..e158faa1 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java
@@ -440,7 +440,7 @@ public class LoginDialogActivity extends AppCompatActivity {
public static void ShowAlertDialog(String title, String text, Activity activity)
{
// Linkify the message
- final SpannableString s = new SpannableString(text);
+ final SpannableString s = new SpannableString(text != null ? text : activity.getString(R.string.select_account_unknown_error_toast));
Linkify.addLinks(s, Linkify.ALL);
AlertDialog aDialog = new AlertDialog.Builder(activity)
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ViewHolder.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ViewHolder.java
index 1b703ca5..7af3614f 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ViewHolder.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ViewHolder.java
@@ -29,6 +29,7 @@ import com.nostra13.universalimageloader.core.ImageLoader;
import org.greenrobot.eventbus.Subscribe;
+import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
@@ -280,19 +281,21 @@ public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickL
}
if(textViewBody != null) {
- String body = rssItem.getBody();
+ String body = rssItem.getMediaDescription();
+ if(body == null || body.isEmpty()) {
+ body = rssItem.getBody();
+ }
+
+ boolean limitLength = true;
// Strip html from String
if(selectedListLayout == 0) {
textViewBody.setMaxLines(scaleTextLines(mPrefs));
- body = getBodyText(body, false);
-
+ limitLength = false;
} else if(selectedListLayout == 3) {
textViewBody.setMaxLines(200);
- body = getBodyText(body, false);
-
- } else {
- body = getBodyText(body, true);
+ limitLength = false;
}
+ body = getBodyText(body, limitLength);
textViewBody.setText(Html.fromHtml(body));
scaleTextSize(textViewBody, textSizeBody, false, mPrefs);
}
@@ -311,7 +314,13 @@ public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickL
if(imgViewThumbnail != null) {
imgViewThumbnail.setColorFilter(null);
String body = rssItem.getBody();
- List<String> images = ImageHandler.getImageLinksFromText(body);
+ List<String> images;
+ if(rssItem.getMediaThumbnail() != null && !rssItem.getMediaThumbnail().isEmpty()) {
+ images = new ArrayList();
+ images.add(rssItem.getMediaThumbnail());
+ } else {
+ images = ImageHandler.getImageLinksFromText(body);
+ }
if(images.size() > 0) {
imgViewThumbnail.setVisibility(View.VISIBLE);
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java
index b88eeda8..ef5ef537 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java
@@ -26,7 +26,7 @@ public class DatabaseOrmGenerator {
public static void main(String[] args) throws Exception {
List<SchemaVersion> versions = new ArrayList<>();
- versions.add(new Version6(true));
+ versions.add(new Version7(true));
validateSchemas(versions);
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/Version6.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/Version7.java
index 3c88aae1..06c144e0 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/Version6.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/Version7.java
@@ -4,14 +4,14 @@ import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Property;
import de.greenrobot.daogenerator.Schema;
-public class Version6 extends SchemaVersion {
+public class Version7 extends SchemaVersion {
/**
* Constructor
*
* @param current
*/
- public Version6(boolean current) {
+ public Version7(boolean current) {
super(current);
Schema schema = getSchema();
@@ -23,7 +23,7 @@ public class Version6 extends SchemaVersion {
*/
@Override
public int getVersionNumber() {
- return 6;
+ return 7;
}
@SuppressWarnings("unused") // id properties (folderId, etc.) need to be in database
@@ -69,6 +69,11 @@ public class Version6 extends SchemaVersion {
rssItem.addStringProperty("enclosureLink");
rssItem.addStringProperty("enclosureMime");
+ rssItem.addStringProperty("mediaThumbnail");
+ rssItem.addStringProperty("mediaDescription");
+
+ rssItem.addBooleanProperty("rtl");
+
feed.addToOne(folder, folderIdProperty);
folder.addToMany(feed, folderIdProperty);
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/DaoMaster.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/DaoMaster.java
index 42431f6b..90b1e600 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/DaoMaster.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/DaoMaster.java
@@ -11,10 +11,10 @@ import de.greenrobot.dao.identityscope.IdentityScopeType;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
- * Master of DAO (schema version 6): knows all DAOs.
+ * Master of DAO (schema version 7): knows all DAOs.
*/
public class DaoMaster extends AbstractDaoMaster {
- public static final int SCHEMA_VERSION = 6;
+ public static final int SCHEMA_VERSION = 7;
/** Creates underlying database table using DAOs. */
public static void createAllTables(SQLiteDatabase db, boolean ifNotExists) {
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItem.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItem.java
index 3fc9d5be..43916ef2 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItem.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItem.java
@@ -33,6 +33,9 @@ public class RssItem implements HasId<Long> {
private java.util.Date pubDate;
private String enclosureLink;
private String enclosureMime;
+ private String mediaThumbnail;
+ private String mediaDescription;
+ private Boolean rtl;
/** Used to resolve relations */
private transient DaoSession daoSession;
@@ -54,7 +57,7 @@ public class RssItem implements HasId<Long> {
this.id = id;
}
- public RssItem(long id, long feedId, String link, String title, String body, Boolean read, Boolean starred, String author, String guid, String guidHash, String fingerprint, Boolean read_temp, Boolean starred_temp, java.util.Date lastModified, java.util.Date pubDate, String enclosureLink, String enclosureMime) {
+ public RssItem(long id, long feedId, String link, String title, String body, Boolean read, Boolean starred, String author, String guid, String guidHash, String fingerprint, Boolean read_temp, Boolean starred_temp, java.util.Date lastModified, java.util.Date pubDate, String enclosureLink, String enclosureMime, String mediaThumbnail, String mediaDescription, Boolean rtl) {
this.id = id;
this.feedId = feedId;
this.link = link;
@@ -72,6 +75,9 @@ public class RssItem implements HasId<Long> {
this.pubDate = pubDate;
this.enclosureLink = enclosureLink;
this.enclosureMime = enclosureMime;
+ this.mediaThumbnail = mediaThumbnail;
+ this.mediaDescription = mediaDescription;
+ this.rtl = rtl;
}
/** called by internal mechanisms, do not call yourself. */
@@ -224,6 +230,30 @@ public class RssItem implements HasId<Long> {
this.enclosureMime = enclosureMime;
}
+ public String getMediaThumbnail() {
+ return mediaThumbnail;
+ }
+
+ public void setMediaThumbnail(String mediaThumbnail) {
+ this.mediaThumbnail = mediaThumbnail;
+ }
+
+ public String getMediaDescription() {
+ return mediaDescription;
+ }
+
+ public void setMediaDescription(String mediaDescription) {
+ this.mediaDescription = mediaDescription;
+ }
+
+ public Boolean getRtl() {
+ return rtl;
+ }
+
+ public void setRtl(Boolean rtl) {
+ this.rtl = rtl;
+ }
+
/** To-one relationship, resolved on first access. */
public Feed getFeed() {
long __key = this.feedId;
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java
index f5fd6922..ba4e1139 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java
@@ -44,6 +44,9 @@ public class RssItemDao extends AbstractDao<RssItem, Long> {
public final static Property PubDate = new Property(14, java.util.Date.class, "pubDate", false, "PUB_DATE");
public final static Property EnclosureLink = new Property(15, String.class, "enclosureLink", false, "ENCLOSURE_LINK");
public final static Property EnclosureMime = new Property(16, String.class, "enclosureMime", false, "ENCLOSURE_MIME");
+ public final static Property MediaThumbnail = new Property(17, String.class, "mediaThumbnail", false, "MEDIA_THUMBNAIL");
+ public final static Property MediaDescription = new Property(18, String.class, "mediaDescription", false, "MEDIA_DESCRIPTION");
+ public final static Property Rtl = new Property(19, Boolean.class, "rtl", false, "RTL");
};
private DaoSession daoSession;
@@ -79,7 +82,10 @@ public class RssItemDao extends AbstractDao<RssItem, Long> {
"\"LAST_MODIFIED\" INTEGER," + // 13: lastModified
"\"PUB_DATE\" INTEGER," + // 14: pubDate
"\"ENCLOSURE_LINK\" TEXT," + // 15: enclosureLink
- "\"ENCLOSURE_MIME\" TEXT);"); // 16: enclosureMime
+ "\"ENCLOSURE_MIME\" TEXT," + // 16: enclosureMime
+ "\"MEDIA_THUMBNAIL\" TEXT," + // 17: mediaThumbnail
+ "\"MEDIA_DESCRIPTION\" TEXT," + // 18: mediaDescription
+ "\"RTL\" INTEGER);"); // 19: rtl
// Add Indexes
db.execSQL("CREATE INDEX " + constraint + "IDX_RSS_ITEM_FEED_ID ON RSS_ITEM" +
" (\"FEED_ID\");");
@@ -156,6 +162,21 @@ public class RssItemDao extends AbstractDao<RssItem, Long> {
if (enclosureMime != null) {
stmt.bindString(17, enclosureMime);
}
+
+ String mediaThumbnail = entity.getMediaThumbnail();
+ if (mediaThumbnail != null) {
+ stmt.bindString(18, mediaThumbnail);
+ }
+
+ String mediaDescription = entity.getMediaDescription();
+ if (mediaDescription != null) {
+ stmt.bindString(19, mediaDescription);
+ }
+
+ Boolean rtl = entity.getRtl();
+ if (rtl != null) {
+ stmt.bindLong(20, rtl ? 1L: 0L);
+ }
}
@Override
@@ -190,7 +211,10 @@ public class RssItemDao extends AbstractDao<RssItem, Long> {
cursor.isNull(offset + 13) ? null : new java.util.Date(cursor.getLong(offset + 13)), // lastModified
cursor.isNull(offset + 14) ? null : new java.util.Date(cursor.getLong(offset + 14)), // pubDate
cursor.isNull(offset + 15) ? null : cursor.getString(offset + 15), // enclosureLink
- cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16) // enclosureMime
+ cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16), // enclosureMime
+ cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17), // mediaThumbnail
+ cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18), // mediaDescription
+ cursor.isNull(offset + 19) ? null : cursor.getShort(offset + 19) != 0 // rtl
);
return entity;
}
@@ -215,6 +239,9 @@ public class RssItemDao extends AbstractDao<RssItem, Long> {
entity.setPubDate(cursor.isNull(offset + 14) ? null : new java.util.Date(cursor.getLong(offset + 14)));
entity.setEnclosureLink(cursor.isNull(offset + 15) ? null : cursor.getString(offset + 15));
entity.setEnclosureMime(cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16));
+ entity.setMediaThumbnail(cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17));
+ entity.setMediaDescription(cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18));
+ entity.setRtl(cursor.isNull(offset + 19) ? null : cursor.getShort(offset + 19) != 0);
}
/** @inheritdoc */
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java
index 4d524dc2..27c270b8 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java
@@ -51,6 +51,11 @@ class InsertRssItemIntoDatabase {
String enclosureLink = getStringOrEmpty("enclosureLink", e);
String enclosureMime = getStringOrEmpty("enclosureMime", e);
+ String mediaThumbnail = getStringOrEmpty("mediaThumbnail", e);
+ String mediaDescription = getStringOrEmpty("mediaDescription", e);
+
+ Boolean rtl = getBooleanOrDefault("rtl", false, e);
+
if(enclosureLink.trim().equals("") && url.matches("^https?://(www.)?youtube.com/.*")) {
enclosureLink = url;
enclosureMime = "youtube";
@@ -69,6 +74,7 @@ class InsertRssItemIntoDatabase {
rssItem.setStarred(e.get("starred").getAsBoolean());
rssItem.setStarred_temp(rssItem.getStarred());
rssItem.setPubDate(pubDate);
+ rssItem.setRtl(rtl);
//Possible XSS fields
rssItem.setTitle(e.get("title").getAsString());
@@ -76,6 +82,8 @@ class InsertRssItemIntoDatabase {
rssItem.setLink(url);
rssItem.setEnclosureLink(enclosureLink);
rssItem.setEnclosureMime(enclosureMime);
+ rssItem.setMediaDescription(mediaDescription);
+ rssItem.setMediaThumbnail(mediaThumbnail);
if(rssItem.getFingerprint() == null) {
rssItem.setFingerprint(UUID.randomUUID().toString());
@@ -96,4 +104,11 @@ class InsertRssItemIntoDatabase {
}
}
+ private static Boolean getBooleanOrDefault(String key, Boolean defaultValue, JsonObject jObj) {
+ if(jObj.has(key) && !jObj.get(key).isJsonNull()) {
+ return jObj.get(key).getAsBoolean();
+ } else {
+ return defaultValue;
+ }
+ }
}