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/AndroidManifest.xml b/AndroidManifest.xml index e301b5a..56cc78b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -41,11 +41,6 @@ - - - - - - - - - WLAN有りの時のみ自動同期 - ネットワーク有りの時のみ自動同期 - 自動同期オフ - - - WLAN有りの時のみ画像をダウロード - ネットワーク有りの時のみ画像をダウロード - 画像をダウロードしない - - - デフォルトテーマ - ナイトモード - - - 1時間 - 2時間 - 3時間 - 4時間 - 6時間 - 20分 - 30分 - - + + + + + WLAN有りの時のみ自動同期 + ネットワーク有りの時のみ自動同期 + 自動同期オフ + + + WLAN有りの時のみ画像をダウロード + ネットワーク有りの時のみ画像をダウロード + 画像をダウロードしない + + + デフォルトテーマ + ナイトモード + + + 1時間 + 2時間 + 3時間 + 4時間 + 6時間 + 20分 + 30分 + + \ No newline at end of file diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 9e09ec1..5aa8e2f 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -1,124 +1,124 @@ - - - - EasyRSS - ログイン - 確認 - キャンセル - Google Reader アカウント - パスワード - 未読のアイテムはありません - 未読のタグはありません - 未読のフィードはありません - 確認 - 全て既読にしますか。 - ログアウトと時キャッシュはクリアします、続きますか。 - 同期 - ストリージ - 読む - 全て - 全て登録 - タグ - 登録 - アイテムを読む - スターを付く - 未読 - 全て - すべての未読のアイテム - すべてのスター付きのアイテム - これは最初のアイテム - これは最後のアイテム - 処理中 - マーク中… - マーク中… - キャッシュをクリアしている… - EasyRSS - 設定 - EasyRSS について - 設定 - EasyRSS について - へ送信… - へアイテムのテキストを送信… - へアイテムの内容を送信… - ヘルプ - ログアウト - 自動同期 - この機能をオンにすれば、EasyRSSは特定なネットワーク環境で自動にGoogle Readerから新しいアイテムをダウロードして、同期します。 - 画像のロード - いつか画像をロードします。 - 画像のプリロード - 同期の時に画像をダウロードしますかしないか(画像のロードありのみ有効)。 - ローカルのアイテムの数 - 通信データ縮減のため、すべてのアイテム及び画像はSDカードで保存している。大きな領域を占めるることがあります。 - すぐに同期 - この機能をオンにすれば、アイテムの変更はすぐにサーバーと同期 - HTTPS 接続 - この機能をオンにすれば、EasyRSSとGoogle Readerサーバーの接続はHTTPSプロトコルを使います。 - 同期頻度 - 同期頻度を設定する(自動同期ありのみ有効)。 - 降順に並び替え - アイテムを表示する時の並び替え方法を変える。 - 通知 - 新着アイテムの通知方法を設定します。 - ブラウザ - ブラウザを選択する。 - フォントサイズ - デフォルトのサイズを設定します。 - テーマ - テーマを変更。 - すべて既読にする時の確認 - すべて既読にする前に確認ダイアログを表示する。 - 音量キーで切り替え - 音量キーでアイテムを切り替えますか。 - ナイトモード - デフォルト - 必要な空き容量を計算 - まだ計算していません。 - 計算 - 計算中… - 古いバージョンのデータベースをクリアしています… - 古いアイテムをクリアしています… - 現在のバージョン - EasyRSSについて (@EasyRSS) - EasyRSS\nhttps://github.com/Alkarex/EasyRSS - 作成者について - 孫征 (@sunzheng91)\n復旦大学計算機科学専攻\nwww.pursuer.me - 前回の同期 - 不明 - 登録してるフィードを同期中… - タグを同期中… - アイテムを同期中… - 未読のアイテムを同期中… - アイテムと画像を同期中… - 情報を同期中… - アイテムをロードする - ロード中 - ロード中… - 認証中… - Google Reader アカウントでログイン - 認証された Google アカウントで体験する - 既読にする - 未読にする - スターを付く - スターを外す - 前のアイテムを既読にする - EasyRSS経由 - 更新、しばらくお待ちください… - モバイル表示 - デスクトップ表示 - (EasyRSS Mobilizerによって生成されます) - 一時間未満前 - %d 時間前 - %d 日前 - イメージをロードすることができません - 次回からこのダイアログを表示しない - 「設定 > 読む > すべて既読にする時の確認」でこの設定を変更できます。 - ブラウザを選択してください - 毎回確認する - デフォルトブラウザ (モバイル版) - デフォルトブラウザ(デスクトップ版) - サードパーティブラウザ - 「設定 > 読む > ブラウザ」でこの設定を変更できます。 - クリップボードにコピー - Sync failed - + + + + EasyRSS + ログイン + 確認 + キャンセル + Google Reader アカウント + パスワード + 未読のアイテムはありません + 未読のタグはありません + 未読のフィードはありません + 確認 + 全て既読にしますか。 + ログアウトと時キャッシュはクリアします、続きますか。 + 同期 + ストリージ + 読む + 全て + 全て登録 + タグ + 登録 + アイテムを読む + スターを付く + 未読 + 全て + すべての未読のアイテム + すべてのスター付きのアイテム + これは最初のアイテム + これは最後のアイテム + 処理中 + マーク中… + マーク中… + キャッシュをクリアしている… + EasyRSS - 設定 + EasyRSS について + 設定 + EasyRSS について + へ送信… + へアイテムのテキストを送信… + へアイテムの内容を送信… + ヘルプ + ログアウト + 自動同期 + この機能をオンにすれば、EasyRSSは特定なネットワーク環境で自動にGoogle Readerから新しいアイテムをダウロードして、同期します。 + 画像のロード + いつか画像をロードします。 + 画像のプリロード + 同期の時に画像をダウロードしますかしないか(画像のロードありのみ有効)。 + ローカルのアイテムの数 + 通信データ縮減のため、すべてのアイテム及び画像はSDカードで保存している。大きな領域を占めるることがあります。 + すぐに同期 + この機能をオンにすれば、アイテムの変更はすぐにサーバーと同期 + HTTPS 接続 + この機能をオンにすれば、EasyRSSとGoogle Readerサーバーの接続はHTTPSプロトコルを使います。 + 同期頻度 + 同期頻度を設定する(自動同期ありのみ有効)。 + 降順に並び替え + アイテムを表示する時の並び替え方法を変える。 + 通知 + 新着アイテムの通知方法を設定します。 + ブラウザ + ブラウザを選択する。 + フォントサイズ + デフォルトのサイズを設定します。 + テーマ + テーマを変更。 + すべて既読にする時の確認 + すべて既読にする前に確認ダイアログを表示する。 + 音量キーで切り替え + 音量キーでアイテムを切り替えますか。 + ナイトモード + デフォルト + 必要な空き容量を計算 + まだ計算していません。 + 計算 + 計算中… + 古いバージョンのデータベースをクリアしています… + 古いアイテムをクリアしています… + 現在のバージョン + EasyRSSについて (@EasyRSS) + EasyRSS\nhttps://github.com/Alkarex/EasyRSS + 作成者について + 孫征 (@sunzheng91)\n復旦大学計算機科学専攻\nwww.pursuer.me + 前回の同期 + 不明 + 登録してるフィードを同期中… + タグを同期中… + アイテムを同期中… + 未読のアイテムを同期中… + アイテムと画像を同期中… + 情報を同期中… + アイテムをロードする + ロード中 + ロード中… + 認証中… + Google Reader アカウントでログイン + 認証された Google アカウントで体験する + 既読にする + 未読にする + スターを付く + スターを外す + 前のアイテムを既読にする + EasyRSS経由 + 更新、しばらくお待ちください… + モバイル表示 + デスクトップ表示 + (EasyRSS Mobilizerによって生成されます) + 一時間未満前 + %d 時間前 + %d 日前 + イメージをロードすることができません + 次回からこのダイアログを表示しない + 「設定 > 読む > すべて既読にする時の確認」でこの設定を変更できます。 + ブラウザを選択してください + 毎回確認する + デフォルトブラウザ (モバイル版) + デフォルトブラウザ(デスクトップ版) + サードパーティブラウザ + 「設定 > 読む > ブラウザ」でこの設定を変更できます。 + クリップボードにコピー + Sync failed + \ No newline at end of file diff --git a/res/values/attrs.xml b/res/values/attrs.xml index bddc113..0f65e03 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/freshrss/easyrss/BootReceiver.java b/src/org/freshrss/easyrss/BootReceiver.java new file mode 100644 index 0000000..e6b5937 --- /dev/null +++ b/src/org/freshrss/easyrss/BootReceiver.java @@ -0,0 +1,16 @@ +package org.freshrss.easyrss; + +import org.freshrss.easyrss.network.NetworkUtils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class BootReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + NetworkUtils.startSyncingTimer(context); + } + +} diff --git a/src/org/freshrss/easyrss/VerticalSingleItemView.java b/src/org/freshrss/easyrss/VerticalSingleItemView.java index 75f2c93..faee236 100644 --- a/src/org/freshrss/easyrss/VerticalSingleItemView.java +++ b/src/org/freshrss/easyrss/VerticalSingleItemView.java @@ -51,6 +51,7 @@ import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; +import android.webkit.WebSettings.RenderPriority; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.CheckBox; diff --git a/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java b/src/org/freshrss/easyrss/network/GlobalItemDataSyncer.java index 3a2fd4e..08a3e62 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; @@ -124,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()) { @@ -152,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); @@ -226,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) { @@ -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); 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)); 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) {