From e4ca8197ff7e59844fda1072152bc1ed90086a9b Mon Sep 17 00:00:00 2001 From: scastrorico Date: Sun, 27 Mar 2016 00:08:19 +0100 Subject: [PATCH 1/6] Add support for theoldreader.com --- .classpath | 7 +++++-- .project | 16 ++++++++++++++++ project.properties | 2 +- .../easyrss/data/parser/ItemIdJSONParser.java | 7 ++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/.classpath b/.classpath index ed3db2b..224bf14 100644 --- a/.classpath +++ b/.classpath @@ -2,10 +2,13 @@ - - + + + + + diff --git a/.project b/.project index d9ad5c0..c3fc262 100644 --- a/.project +++ b/.project @@ -5,6 +5,16 @@ + + org.eclipse.andmore.ResourceManagerBuilder + + + + + org.eclipse.andmore.PreCompilerBuilder + + + com.android.ide.eclipse.adt.ResourceManagerBuilder @@ -25,8 +35,14 @@ + + org.eclipse.andmore.ApkBuilder + + + + org.eclipse.andmore.AndroidNature com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature diff --git a/project.properties b/project.properties index a5578ba..358ce4a 100644 --- a/project.properties +++ b/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=android-19 +target=android-22 diff --git a/src/org/freshrss/easyrss/data/parser/ItemIdJSONParser.java b/src/org/freshrss/easyrss/data/parser/ItemIdJSONParser.java index ed06410..b9c4e4e 100644 --- a/src/org/freshrss/easyrss/data/parser/ItemIdJSONParser.java +++ b/src/org/freshrss/easyrss/data/parser/ItemIdJSONParser.java @@ -50,7 +50,12 @@ private void parse() throws JsonParseException, IOException { case VALUE_STRING: if (level == 3) { if ("id".equals(name)) { - itemId.setUid(Long.toHexString(Long.valueOf(parser.getText()))); + String uid = parser.getText(); + try { + uid = Long.toHexString(Long.valueOf(parser.getText())); + } + catch (final NumberFormatException nfe) {} + itemId.setUid(uid); } else if ("timestampUsec".equals(name)) { itemId.setTimestamp(Long.valueOf(parser.getText())); } From 620ebd365181b33383cf26c151148422e3f4c163 Mon Sep 17 00:00:00 2001 From: scastrorico Date: Sun, 27 Mar 2016 23:04:56 +0200 Subject: [PATCH 2/6] Fix empty unread messages list after refresh Sort ItemIds by timestamp (Downward). That prevents mark all items as read if they are disordered. --- .../easyrss/network/GlobalItemDataSyncer.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java b/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java index 3a2fd4e..73341a0 100644 --- a/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java +++ b/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java @@ -14,6 +14,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.LinkedList; import java.util.List; @@ -250,6 +252,16 @@ public void onItemIdRetrieved(final ItemId itemId) throws IOException { itemIds.add(itemId); } }); + + // Sort ItemIds by timestamp (Downward). That prevents mark all + // items as read if they are disordered. + Collections.sort(itemIds, new Comparator() { + @Override + public int compare(ItemId lhs, ItemId rhs) { + return Long.valueOf(lhs.getTimestamp()).compareTo(rhs.getTimestamp()); + } + }); + for (int i = 0; i < itemIds.size(); i += 50) { if (i + 50 <= itemIds.size()) { dataMgr.markItemsAsReadItemIds(itemIds, i, i + 50); From 31ca466c31ee19f4587877bc2322f186e334460f Mon Sep 17 00:00:00 2001 From: scastrorico Date: Wed, 30 Mar 2016 23:20:24 +0200 Subject: [PATCH 3/6] Fix images not shown in article view In webview settings, if blockNetwokImage option is false images are not loaded (although they are in device and loaded with file:// scheme). --- src/org/freshrss/easyrss/VerticalSingleItemView.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/org/freshrss/easyrss/VerticalSingleItemView.java b/src/org/freshrss/easyrss/VerticalSingleItemView.java index 50ef1fe..5189347 100644 --- a/src/org/freshrss/easyrss/VerticalSingleItemView.java +++ b/src/org/freshrss/easyrss/VerticalSingleItemView.java @@ -38,6 +38,8 @@ import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; +import android.os.Build; +import android.util.Log; import android.util.TypedValue; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; @@ -320,7 +322,7 @@ public void holdItemViewScroll() { menu.findViewById(R.id.BtnOpenLink).setOnClickListener(null); } - @SuppressLint("SetJavaScriptEnabled") + @SuppressLint({ "SetJavaScriptEnabled", "NewApi" }) public void loadContent() { final WebSettings settings = webView.getSettings(); settings.setDefaultTextEncodingName(HTTP.UTF_8); @@ -331,20 +333,20 @@ public void loadContent() { final StringBuffer content = new StringBuffer(); if (item.getState().isCached()) { - settings.setBlockNetworkImage(true); content.append(DataUtils.readFromFile(new File(item.getFullContentStoragePath()))); } else { final SettingImageFetching sImgFetch = new SettingImageFetching(dataMgr); if (NetworkUtils.checkImageFetchingNetworkStatus(context, sImgFetch.getData())) { - settings.setBlockNetworkImage(false); content.append(DataUtils.readFromFile(new File(item.getOriginalContentStoragePath()))); } else { - settings.setBlockNetworkImage(true); content.append(DataUtils.readFromFile(new File(item.getStrippedContentStoragePath()))); } } content.append(DataUtils.DEFAULT_JS); content.append(theme == SettingTheme.THEME_NORMAL ? DataUtils.DEFAULT_NORMAL_CSS : DataUtils.DEFAULT_DARK_CSS); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + WebView.setWebContentsDebuggingEnabled(true); + } webView.loadDataWithBaseURL("file://" + item.getStoragePath() + "/", content.toString(), null, "utf-8", null); } From 221004e90ce9c013bf615ed1cd25330b28714c15 Mon Sep 17 00:00:00 2001 From: scastrorico Date: Thu, 21 Apr 2016 00:05:22 +0200 Subject: [PATCH 4/6] Fix 404 when refresh starred post In theoldreader.com, when application try to refresh starred post, it get a document not found error. --- src/org/freshrss/easyrss/network/url/StreamContentsURL.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/org/freshrss/easyrss/network/url/StreamContentsURL.java b/src/org/freshrss/easyrss/network/url/StreamContentsURL.java index 8e7ef06..9734855 100644 --- a/src/org/freshrss/easyrss/network/url/StreamContentsURL.java +++ b/src/org/freshrss/easyrss/network/url/StreamContentsURL.java @@ -11,8 +11,6 @@ package org.freshrss.easyrss.network.url; -import android.net.Uri; - /* * Reference: http://code.google.com/p/google-reader-api/wiki/ApiStreamContents */ @@ -34,7 +32,7 @@ public StreamContentsURL(final boolean isHttpsConnection, final String uid, fina @Override public String getBaseURL() { - return appendURL(serverUrl + URL_STREAM_CONTENTS, Uri.encode(uid, "/")); + return appendURL(serverUrl, URL_STREAM_CONTENTS); } public String getContinuation() { @@ -96,6 +94,7 @@ public void setNewestItemTime(final long newestItemTime) { public void setUid(final String uid) { this.uid = uid; + addParam("s", uid); } public void setUnread(final boolean isUnread) { From e6ed06e299b71a249e259253a2229fef9dac5fdd Mon Sep 17 00:00:00 2001 From: scastrorico Date: Sun, 29 May 2016 00:52:43 +0200 Subject: [PATCH 5/6] Fix expire time update If network was not available, expire time was updated although sync was not performed. --- .../easyrss/network/GlobalItemDataSyncer.java | 14 +++++++------- .../easyrss/network/SubscriptionDataSyncer.java | 12 ++++++------ .../freshrss/easyrss/network/TagDataSyncer.java | 9 ++++++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java b/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java index 73341a0..08a3e62 100644 --- a/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java +++ b/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java @@ -126,8 +126,14 @@ public void onProgressChanged(final String text, final int progress, final int m @Override protected void startSyncing() throws DataSyncerException { + + final Context context = dataMgr.getContext(); + if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { + return; + } + final String sExpTime = dataMgr.getSettingByName(Setting.SETTING_ITEM_LIST_EXPIRE_TIME); - if (networkConfig != SettingSyncMethod.SYNC_METHOD_MANUAL + if (networkConfig != SettingSyncMethod.SYNC_METHOD_MANUAL && sExpTime != null && Long.valueOf(sExpTime) + new SettingSyncInterval(dataMgr).toSeconds() * 1000 - 10 * 60 * 1000 > System .currentTimeMillis()) { @@ -154,9 +160,6 @@ protected void startSyncing() throws DataSyncerException { private void syncAllItems() throws DataSyncerException { final Context context = dataMgr.getContext(); - if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { - return; - } int count = 0; String sSetting = dataMgr.getSettingByName(Setting.SETTING_GLOBAL_NEWEST_ITEM_TIMESTAMP); long newestTimestamp = (sSetting == null) ? 0 : Long.valueOf(sSetting); @@ -228,9 +231,6 @@ private void syncUnreadCount() throws DataSyncerException { private void syncUnreadItems() throws DataSyncerException { final Context context = dataMgr.getContext(); - if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { - return; - } String sSetting = dataMgr.getSettingByName(Setting.SETTING_GLOBAL_ITEM_UNREAD_COUNT); final int unreadCount = (sSetting == null) ? 0 : Integer.valueOf(sSetting); if (unreadCount == 0) { diff --git a/src/org/freshrss/easyrss/network/SubscriptionDataSyncer.java b/src/org/freshrss/easyrss/network/SubscriptionDataSyncer.java index b295239..d63e7de 100644 --- a/src/org/freshrss/easyrss/network/SubscriptionDataSyncer.java +++ b/src/org/freshrss/easyrss/network/SubscriptionDataSyncer.java @@ -89,6 +89,12 @@ protected void finishSyncing() { @Override public void startSyncing() throws DataSyncerException { + + final Context context = dataMgr.getContext(); + if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { + return; + } + final String sExpTime = dataMgr.getSettingByName(Setting.SETTING_SUBSCRIPTION_LIST_EXPIRE_TIME); if (networkConfig != SettingSyncMethod.SYNC_METHOD_MANUAL && sExpTime != null @@ -105,9 +111,6 @@ public void startSyncing() throws DataSyncerException { private void syncSubscriptionIcons() throws DataSyncerException { final Context context = dataMgr.getContext(); - if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { - return; - } final ContentResolver resolver = context.getContentResolver(); final Cursor cur = resolver.query(Subscription.CONTENT_URI, new String[] { Subscription._UID, Subscription._ICON, Subscription._URL }, null, null, null); @@ -137,9 +140,6 @@ private void syncSubscriptionIcons() throws DataSyncerException { private void syncSubscriptions() throws DataSyncerException { final Context context = dataMgr.getContext(); - if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { - return; - } notifyProgressChanged(context.getString(R.string.TxtSyncingSubscriptions), -1, -1); final InputStream stream = httpGetQueryStream(new SubscriptionListURL(isHttpsConnection)); diff --git a/src/org/freshrss/easyrss/network/TagDataSyncer.java b/src/org/freshrss/easyrss/network/TagDataSyncer.java index c83625d..92070e9 100644 --- a/src/org/freshrss/easyrss/network/TagDataSyncer.java +++ b/src/org/freshrss/easyrss/network/TagDataSyncer.java @@ -83,6 +83,12 @@ protected void finishSyncing() { @Override public void startSyncing() throws DataSyncerException { + + final Context context = dataMgr.getContext(); + if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { + return; + } + final String sExpTime = dataMgr.getSettingByName(Setting.SETTING_TAG_LIST_EXPIRE_TIME); if (networkConfig != SettingSyncMethod.SYNC_METHOD_MANUAL && sExpTime != null @@ -98,9 +104,6 @@ public void startSyncing() throws DataSyncerException { private void syncTags() throws DataSyncerException { final Context context = dataMgr.getContext(); - if (!NetworkUtils.checkSyncingNetworkStatus(context, networkConfig)) { - return; - } notifyProgressChanged(context.getString(R.string.TxtSyncingTags), -1, -1); final InputStream stream = httpGetQueryStream(new TagListURL(isHttpsConnection)); From a44151603e5e24e1dddd36ff74ee12e0339553b1 Mon Sep 17 00:00:00 2001 From: scastrorico Date: Wed, 29 Jun 2016 23:26:01 +0200 Subject: [PATCH 6/6] Added BootReceiver and removed CONNECTIVITY_ACTION receiver Added BootReceiver to start syncingReceiver at boot time. Removed CONNECTIVITY action receiver because I think was useless. --- AndroidManifest.xml | 5 ----- src/org/freshrss/easyrss/BootReceiver.java | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 src/org/freshrss/easyrss/BootReceiver.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e301b5a..56cc78b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -41,11 +41,6 @@ - - - - -