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
parent5e2c96e4170a39b3286ce9ee14785688a8e988e2 (diff)
add support for media thumbnails
Signed-off-by: David Luhmer <david-dev@live.de>
-rw-r--r--News-Android-App/build.gradle22
-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
9 files changed, 115 insertions, 29 deletions
diff --git a/News-Android-App/build.gradle b/News-Android-App/build.gradle
index 7541a00f..13c39047 100644
--- a/News-Android-App/build.gradle
+++ b/News-Android-App/build.gradle
@@ -121,12 +121,12 @@ repositories {
maven { url "https://dl.bintray.com/lukaville/maven" } //Needed for com.nbsp:library:1.8 in Material File Picker
}
-final DAGGER_VERSION = '2.26'
+final DAGGER_VERSION = '2.27'
final BUTTERKNIFE_VERSION = '10.2.1'
final ESPRESSO_VERSION = '3.2.0'
final OKHTTP_VERSION = '3.12.10'
-final MOCKITO_VERSION = '3.3.1'
-final RETROFIT_VERSION = '2.6.4'
+final MOCKITO_VERSION = '3.3.3'
+final RETROFIT_VERSION = '2.9.0'
dependencies {
// core android studio module
@@ -134,18 +134,18 @@ dependencies {
// You must install or update the Google Repository through the SDK manager to use this dependency.
// The Google Repository (separate from the corresponding library) can be found in the Extras category.
// implementation 'com.google.android.gms:play-services:4.2.42'
- // implementation project(':Android-SingleSignOn')
+ implementation project(':Android-SingleSignOn')
// implementation project(path: ':MaterialShowcaseView:library', configuration: 'default')
- implementation 'com.github.nextcloud:Android-SingleSignOn:0.5.0'
+ // implementation 'com.github.nextcloud:Android-SingleSignOn:0.5.0'
implementation 'com.github.David-Development:MaterialShowcaseView:bf6afa225d'
- implementation "androidx.core:core:1.2.0"
+ implementation "androidx.core:core:1.3.1"
implementation 'androidx.annotation:annotation:1.1.0'
implementation "androidx.appcompat:appcompat:1.1.0"
- implementation "androidx.preference:preference:1.1.0"
+ implementation "androidx.preference:preference:1.1.1"
// https://mvnrepository.com/artifact/com.google.android.material/material
- implementation "com.google.android.material:material:1.2.0-alpha05"
+ implementation "com.google.android.material:material:1.3.0-alpha01"
//implementation "com.google.android.material:material:1.0.0"
implementation "androidx.palette:palette:1.0.0"
implementation "androidx.recyclerview:recyclerview:1.1.0"
@@ -165,7 +165,7 @@ dependencies {
implementation ('de.greenrobot:greendao-generator:2.0.0') {
exclude group: 'org.freemarker'
}
- //implementation 'org.freemarker:freemarker:2.3.23' //Required for DAO generation
+ //implementation 'org.freemarker:freemarker:2.3.23' // Required for DAO generation
//implementation 'org.apache.commons:commons-lang3:3.4'
implementation 'com.github.gabrielemariotti.changeloglib:changelog:2.1.0'
implementation 'org.jsoup:jsoup:1.13.1'
@@ -180,7 +180,7 @@ dependencies {
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
- implementation 'io.reactivex.rxjava2:rxjava:2.2.18'
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.19'
implementation "com.squareup.retrofit2:adapter-rxjava2:$RETROFIT_VERSION"
implementation "com.squareup.retrofit2:retrofit:$RETROFIT_VERSION"
@@ -208,7 +208,7 @@ dependencies {
//androidTestImplementation "com.squareup.okhttp3:mockwebserver:${OKHTTP_VERSION}"
- androidTestImplementation 'tools.fastlane:screengrab:1.2.0'
+ androidTestImplementation 'tools.fastlane:screengrab:2.0.0'
//androidTestImplementation "org.mockito:mockito-core:MOCKITO_VERSION"
androidTestImplementation "org.mockito:mockito-android:$MOCKITO_VERSION"
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;
+ }
+ }
}