summaryrefslogtreecommitdiff
path: root/org.fox.ttrss
diff options
context:
space:
mode:
Diffstat (limited to 'org.fox.ttrss')
-rwxr-xr-xorg.fox.ttrss/build.gradle2
-rwxr-xr-xorg.fox.ttrss/src/main/AndroidManifest.xml5
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java9
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java18
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java41
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java64
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java8
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java121
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java7
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java25
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java5
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java7
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java4
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java7
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java16
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java13
-rwxr-xr-xorg.fox.ttrss/src/main/res/values/style.xml32
19 files changed, 276 insertions, 112 deletions
diff --git a/org.fox.ttrss/build.gradle b/org.fox.ttrss/build.gradle
index a5aec718..94373e3a 100755
--- a/org.fox.ttrss/build.gradle
+++ b/org.fox.ttrss/build.gradle
@@ -31,7 +31,7 @@ dependencies {
compile files('libs/universal-image-loader-1.9.3.jar')
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
- compile 'com.google.code.gson:gson:2.3'
+ compile 'com.google.code.gson:gson:2.4'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.shamanland:fab:0.0.5'
compile 'ch.acra:acra:4.5.0'
diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml
index 53c5334c..3a8df8db 100755
--- a/org.fox.ttrss/src/main/AndroidManifest.xml
+++ b/org.fox.ttrss/src/main/AndroidManifest.xml
@@ -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="398"
- android:versionName="1.166" >
+ android:versionCode="411"
+ android:versionName="1.177" >
<uses-sdk
android:minSdkVersion="16"
@@ -17,6 +17,7 @@
android:name=".Application"
android:allowBackup="true"
android:backupAgent=".util.PrefsBackupAgent"
+ android:fullBackupOnly="true"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
index a1a2f019..1c0afca8 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
@@ -3,6 +3,7 @@ package org.fox.ttrss;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.SharedPreferences;
+import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -181,7 +182,7 @@ public class ArticleFragment extends Fragment {
m_contentView = view.findViewById(R.id.article_scrollview);
m_customViewContainer = (FrameLayout) view.findViewById(R.id.article_fullscreen_video);
- if (m_article.id == HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED) {
+ /* if (m_article.id == HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED) {
TextView statusMessage = (TextView) view.findViewById(R.id.article_status_message);
statusMessage.setText(R.string.headlines_row_top_changed);
statusMessage.setVisibility(View.VISIBLE);
@@ -190,7 +191,7 @@ public class ArticleFragment extends Fragment {
view.findViewById(R.id.article_fab).setVisibility(View.GONE);
return view;
- }
+ } */
NotifyingScrollView scrollView = (NotifyingScrollView) view.findViewById(R.id.article_scrollview);
m_fab = view.findViewById(R.id.article_fab);
@@ -447,6 +448,10 @@ public class ArticleFragment extends Fragment {
ws.setMediaPlaybackRequiresUserGesture(false);
}
+ if (CommonActivity.THEME_DARK.equals(m_prefs.getString("theme", CommonActivity.THEME_DEFAULT))) {
+ m_web.setBackgroundColor(Color.BLACK);
+ }
+
if (m_prefs.getBoolean("justify_article_text", true)) {
cssOverride += "body { text-align : justify; } ";
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java
index 6c3f90da..f1c9eab0 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java
@@ -81,7 +81,13 @@ public class ArticlePager extends Fragment {
if (savedInstanceState != null) {
m_article = savedInstanceState.getParcelable("article");
- m_articles = ((DetailActivity)m_activity).m_articles;
+
+ if (! (m_activity instanceof DetailActivity)) {
+ m_articles = savedInstanceState.getParcelable("articles");
+ } else {
+ m_articles = ((DetailActivity)m_activity).m_articles;
+ }
+
m_feed = savedInstanceState.getParcelable("feed");
m_firstId = savedInstanceState.getInt("firstId");
}
@@ -159,8 +165,11 @@ public class ArticlePager extends Fragment {
if (result != null) {
- if (m_firstIdChanged) {
- m_articles.add(new Article(HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED));
+ if (m_firstIdChanged && !(m_activity instanceof DetailActivity && !m_activity.isPortrait())) {
+ // TODO: show an information message in viewpager without modifying m_articles
+ //m_articles.add(new Article(HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED));
+
+ m_activity.toast(R.string.headlines_row_top_changed);
}
ArticlePager.this.m_firstId = m_firstId;
@@ -175,7 +184,7 @@ public class ArticlePager extends Fragment {
}
if (m_article != null) {
- if (m_article.id == 0 || m_articles.indexOf(m_article) == -1) {
+ if (m_article.id == 0 || !m_articles.containsId(m_article.id)) {
if (m_articles.size() > 0) {
m_article = m_articles.get(0);
m_listener.onArticleSelected(m_article, false);
@@ -273,6 +282,7 @@ public class ArticlePager extends Fragment {
out.setClassLoader(getClass().getClassLoader());
out.putParcelable("article", m_article);
+ out.putParcelable("articles", m_articles);
out.putParcelable("feed", m_feed);
out.putInt("firstId", m_firstId);
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java
index 3b58b93a..51df75e3 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java
@@ -31,6 +31,8 @@ public abstract class BaseFeedlistFragment extends Fragment {
if (true /*m_activity.findViewById(R.id.headlines_drawer) != null*/) {
try {
+ boolean needSettingsFooter = false;
+
if (activity.isSmallScreen()) {
View layout = inflater.inflate(R.layout.drawer_header, list, false);
list.addHeaderView(layout, null, false);
@@ -60,10 +62,12 @@ public abstract class BaseFeedlistFragment extends Fragment {
ActivityCompat.startActivityForResult(getActivity(), intent, 0, options.toBundle());
} catch (Exception e) {
-
+ e.printStackTrace();
}
}
});
+ } else {
+ needSettingsFooter = true;
}
/* deal with ~material~ footers */
@@ -108,6 +112,41 @@ public abstract class BaseFeedlistFragment extends Fragment {
});
if (isRoot) {
+ if (needSettingsFooter) {
+ // settings (as a list footer row)
+
+ footer = inflater.inflate(R.layout.feeds_row, list, false);
+ footer.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ Intent intent = new Intent(getActivity(),
+ PreferencesActivity.class);
+
+ ActivityOptionsCompat options = ActivityOptionsCompat
+ .makeSceneTransitionAnimation(getActivity(), v, "SETTINGS_REVEAL");
+
+ ActivityCompat.startActivityForResult(getActivity(), intent, 0, options.toBundle());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ list.addFooterView(footer);
+ text = (TextView) footer.findViewById(R.id.title);
+ text.setText(R.string.action_settings);
+
+ icon = (ImageView) footer.findViewById(R.id.icon);
+ tv = new TypedValue();
+ getActivity().getTheme().resolveAttribute(R.attr.ic_settings, tv, true);
+ icon.setImageResource(tv.resourceId);
+
+ TextView counter = (TextView) footer.findViewById(R.id.unread_counter);
+ counter.setText(R.string.blank);
+ }
+
// offline
footer = inflater.inflate(R.layout.feeds_row, list, false);
footer.setOnClickListener(new View.OnClickListener() {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java
index 4cada7e0..5811a7f9 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java
@@ -31,11 +31,18 @@ import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
+import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiscCache;
+import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
+import com.nostra13.universalimageloader.core.ImageLoader;
+import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
+
import org.fox.ttrss.util.DatabaseHelper;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
+import java.io.File;
+import java.io.IOException;
import java.util.Arrays;
public class CommonActivity extends ActionBarActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -160,6 +167,23 @@ public class CommonActivity extends ActionBarActivity implements SharedPreferenc
CustomTabsClient.bindCustomTabsService(this, "com.android.chrome", m_customTabServiceConnection);
+ if (!ImageLoader.getInstance().isInited()) {
+ ImageLoaderConfiguration config;
+
+ try {
+ config = new ImageLoaderConfiguration.Builder(getApplicationContext())
+ .diskCache(
+ new LruDiscCache(new File(getCacheDir(), "article-images"),
+ DefaultConfigurationFactory.createFileNameGenerator(),
+ 100 * 1024 * 1024))
+ .build();
+ } catch (IOException e) {
+ config = new ImageLoaderConfiguration.Builder(getApplicationContext())
+ .build();
+ }
+ ImageLoader.getInstance().init(config);
+ }
+
super.onCreate(savedInstanceState);
}
@@ -256,11 +280,11 @@ public class CommonActivity extends ActionBarActivity implements SharedPreferenc
}
protected void shareText(String text) {
- startActivity(getShareIntent(text, null));
+ startActivity(Intent.createChooser(getShareIntent(text, null), text));
}
protected void shareText(String text, String subject) {
- startActivity(getShareIntent(text, subject));
+ startActivity(Intent.createChooser(getShareIntent(text, subject), text));
}
private void openUriWithCustomTab(Uri uri) {
@@ -285,15 +309,30 @@ public class CommonActivity extends ActionBarActivity implements SharedPreferenc
CustomTabsIntent intent = builder.build();
- intent.launchUrl(this, uri);
+ try {
+ intent.launchUrl(this, uri);
+ } catch (Exception e) {
+ e.printStackTrace();
+ toast(e.getMessage());
+ }
}
}
// uses chrome custom tabs when available
- public void openUri(final Uri uri) {
+ public void openUri(Uri uri) {
boolean enableCustomTabs = m_prefs.getBoolean("enable_custom_tabs", true);
final boolean askEveryTime = m_prefs.getBoolean("custom_tabs_ask_always", true);
+ if (uri.getScheme() == null) {
+ try {
+ uri = Uri.parse("https:" + uri.toString());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ final Uri finalUri = uri;
+
if (enableCustomTabs && m_customTabClient != null) {
if (askEveryTime) {
@@ -316,7 +355,7 @@ public class CommonActivity extends ActionBarActivity implements SharedPreferenc
editor.apply();
}
- openUriWithCustomTab(uri);
+ openUriWithCustomTab(finalUri);
}
})
@@ -332,9 +371,14 @@ public class CommonActivity extends ActionBarActivity implements SharedPreferenc
editor.apply();
}
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ Intent intent = new Intent(Intent.ACTION_VIEW, finalUri);
- startActivity(intent);
+ try {
+ startActivity(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ toast(e.getMessage());
+ }
}
});
@@ -362,7 +406,11 @@ public class CommonActivity extends ActionBarActivity implements SharedPreferenc
} else {
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
+ try {
+ startActivity(intent);
+ } catch (Exception e) {
+ toast(e.getMessage());
+ }
}
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java
index 8cab4845..dafcbe66 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java
@@ -279,6 +279,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
Article article = hf.getActiveArticle();
if (article == null && hf.getAllArticles().size() > 0) {
+
article = hf.getAllArticles().get(0);
hf.setActiveArticle(article);
@@ -304,7 +305,12 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
setResult(Activity.RESULT_OK, resultIntent);
- super.onBackPressed();
+ try {
+ super.onBackPressed();
+ } catch (IllegalStateException e) {
+ // java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
+ e.printStackTrace();
+ }
}
@Override
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java
index 02fd7985..24be6292 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java
@@ -315,7 +315,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
@Override
protected void onPostExecute(JsonElement result) {
- if (isDetached()) return;
+ if (isDetached() || !isAdded()) return;
if (m_swipeLayout != null) m_swipeLayout.setRefreshing(false);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java
index 41c0f69c..6d567ff8 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java
@@ -496,7 +496,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
@Override
protected void onPostExecute(JsonElement result) {
- if (isDetached()) return;
+ if (isDetached() || !isAdded()) return;
if (getView() != null) {
View loadingBar = getView().findViewById(R.id.feeds_loading_bar);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
index b69fe3be..e3f0c26f 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
@@ -69,9 +69,7 @@ import com.shamanland.fab.ShowHideOnScroll;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
-import org.fox.ttrss.util.EnlargingImageView;
import org.fox.ttrss.util.HeadlinesRequest;
-import org.jsoup.Jsoup;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -90,8 +88,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public static final int HEADLINES_REQUEST_SIZE = 30;
public static final int HEADLINES_BUFFER_MAX = 500;
- public static final int ARTICLE_SPECIAL_LOADMORE = -1;
- public static final int ARTICLE_SPECIAL_TOP_CHANGED = -3;
+ //public static final int ARTICLE_SPECIAL_LOADMORE = -1;
+ //public static final int ARTICLE_SPECIAL_TOP_CHANGED = -3;
private final String TAG = this.getClass().getSimpleName();
@@ -101,6 +99,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
private boolean m_refreshInProgress = false;
private boolean m_autoCatchupDisabled = false;
private int m_firstId = 0;
+ private boolean m_lazyLoadDisabled = false;
private SharedPreferences m_prefs;
@@ -117,6 +116,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
private int m_listPreviousVisibleItem;
private ListView m_list;
private ImageLoader m_imageLoader = ImageLoader.getInstance();
+ private View m_listLoadingView;
+ private View m_topChangedView;
+ private View m_amrFooterView;
public ArticleList getSelectedArticles() {
ArticleList tmp = new ArticleList();
@@ -406,6 +408,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
m_searchQuery = (String) savedInstanceState.getCharSequence("searchQuery");
m_compactLayoutMode = savedInstanceState.getBoolean("compactLayoutMode");
m_firstId = savedInstanceState.getInt("firstId");
+ m_lazyLoadDisabled = savedInstanceState.getBoolean("lazyLoadDisabled");
}
String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT");
@@ -433,24 +436,37 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
m_list = (ListView)view.findViewById(R.id.headlines_list);
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.headlines_fab);
- m_list.setOnTouchListener(new ShowHideOnScroll(fab));
- fab.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- refresh(false);
- }
- });
- if (m_prefs.getBoolean("headlines_mark_read_scroll", false)) {
+ if (! (getActivity() instanceof DetailActivity)) {
+
+ m_list.setOnTouchListener(new ShowHideOnScroll(fab));
+ fab.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ refresh(false);
+ }
+ });
+ } else {
+ fab.setVisibility(View.GONE);
+ }
+
+ m_listLoadingView = inflater.inflate(R.layout.headlines_row_loadmore, m_list, false);
+ //m_list.addFooterView(m_listLoadingView, null, false);
+ //m_listLoadingView.setVisibility(View.GONE);
+
+ m_topChangedView = inflater.inflate(R.layout.headlines_row_top_changed, m_list, false);
+ //m_list.addFooterView(m_topChangedView, null, false);
+ //m_topChangedView.setVisibility(View.GONE);*/
+
+ if (m_prefs.getBoolean("headlines_mark_read_scroll", false)) {
WindowManager wm = (WindowManager) m_activity.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int screenHeight = display.getHeight();
- View layout = inflater.inflate(R.layout.headlines_footer, container, false);
+ m_amrFooterView = inflater.inflate(R.layout.headlines_footer, container, false);
+ m_amrFooterView.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, screenHeight));
- layout.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, screenHeight));
-
- m_list.addFooterView(layout, null, false);
+ m_list.addFooterView(m_amrFooterView, null, false);
}
if (m_activity.isSmallScreen()) {
@@ -553,6 +569,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
@SuppressWarnings({ "serial" })
public void refresh(boolean append, boolean userInitiated) {
+ m_list.removeFooterView(m_listLoadingView);
+ m_list.removeFooterView(m_topChangedView);
+ m_list.removeFooterView(m_amrFooterView);
+
+ if (!append) m_lazyLoadDisabled = false;
+
if (m_activity != null && m_feed != null) {
m_refreshInProgress = true;
@@ -591,18 +613,33 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
super.onPostExecute(result);
- if (isAdded()) {
- if (m_swipeLayout != null) m_swipeLayout.setRefreshing(false);
- }
+ if (m_swipeLayout != null) m_swipeLayout.setRefreshing(false);
+
+ //m_listLoadingView.setVisibility(View.GONE);
+ m_list.removeFooterView(m_listLoadingView);
+ m_list.removeFooterView(m_topChangedView);
+ m_list.removeFooterView(m_amrFooterView);
if (result != null) {
m_refreshInProgress = false;
- if (m_articles.indexOf(m_activeArticle) == -1)
+ if (m_activeArticle != null && !m_articles.containsId(m_activeArticle.id)) {
m_activeArticle = null;
+ }
if (m_firstIdChanged) {
- m_articles.add(new Article(ARTICLE_SPECIAL_TOP_CHANGED));
+ m_lazyLoadDisabled = true;
+
+ //m_activity.toast(R.string.headlines_row_top_changed);
+
+ //m_topChangedView.setVisibility(View.VISIBLE);
+ //m_articles.add(new Article(ARTICLE_SPECIAL_TOP_CHANGED));
+
+ m_list.addFooterView(m_topChangedView, null, false);
+ }
+
+ if (m_amountLoaded < HEADLINES_REQUEST_SIZE) {
+ m_lazyLoadDisabled = true;
}
HeadlinesFragment.this.m_firstId = m_firstId;
@@ -613,7 +650,11 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
// not sure why but listview sometimes gets positioned while ignoring the header so
// top headline content becomes partially obscured by the toolbar on phones
// (not reproducible on avd)
- if (!fappend) m_list.smoothScrollToPosition(0);
+ if (!fappend) {
+ m_list.smoothScrollToPosition(0);
+ }
+
+ //m_listLoadingView.setVisibility(m_amountLoaded == HEADLINES_REQUEST_SIZE ? View.VISIBLE : View.GONE);
} else {
if (m_lastError == ApiError.LOGIN_FAILED) {
@@ -629,6 +670,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
//m_activity.setLoadingStatus(getErrorMessage(), false);
}
}
+
+ if (m_amrFooterView != null) m_list.addFooterView(m_amrFooterView, null, false);
}
};
@@ -657,7 +700,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
} else {
skip = numAll;
}
-
+
+ if (skip > 0) {
+ m_list.addFooterView(m_listLoadingView, null, false);
+ //m_listLoadingView.setVisibility(View.VISIBLE);
+ }
+
} else {
//m_activity.setLoadingStatus(R.string.blank, true);
}
@@ -727,6 +775,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
out.putCharSequence("searchQuery", m_searchQuery);
out.putBoolean("compactLayoutMode", m_compactLayoutMode);
out.putInt("firstId", m_firstId);
+ out.putBoolean("lazyLoadDisabled", m_lazyLoadDisabled);
}
static class HeadlineViewHolder {
@@ -760,10 +809,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public static final int VIEW_UNREAD = 1;
public static final int VIEW_SELECTED = 2;
public static final int VIEW_SELECTED_UNREAD = 3;
- public static final int VIEW_LOADMORE = 4;
- public static final int VIEW_TOP_CHANGED = 5;
+ //public static final int VIEW_LOADMORE = 4;
+ //public static final int VIEW_TOP_CHANGED = 4;
- public static final int VIEW_COUNT = VIEW_TOP_CHANGED+1;
+ public static final int VIEW_COUNT = VIEW_SELECTED_UNREAD + 1;
private final Integer[] origTitleColors = new Integer[VIEW_COUNT];
private final int titleHighScoreUnreadColor;
@@ -816,11 +865,11 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public int getItemViewType(int position) {
Article a = items.get(position);
- if (a.id == ARTICLE_SPECIAL_LOADMORE) {
- return VIEW_LOADMORE;
- } else if (a.id == ARTICLE_SPECIAL_TOP_CHANGED) {
+ /*if (a.id == ARTICLE_SPECIAL_LOADMORE) {
+ return VIEW_LOADMORE; */
+ /*if (a.id == ARTICLE_SPECIAL_TOP_CHANGED) {
return VIEW_TOP_CHANGED;
- } else if (m_activeArticle != null && a.id == m_activeArticle.id && a.unread) {
+ } else */ if (m_activeArticle != null && a.id == m_activeArticle.id && a.unread) {
return VIEW_SELECTED_UNREAD;
} else if (m_activeArticle != null && a.id == m_activeArticle.id) {
return VIEW_SELECTED;
@@ -916,12 +965,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
int layoutId = m_compactLayoutMode ? R.layout.headlines_row_compact : R.layout.headlines_row;
switch (getItemViewType(position)) {
- case VIEW_LOADMORE:
+ /*case VIEW_LOADMORE:
layoutId = R.layout.headlines_row_loadmore;
break;
case VIEW_TOP_CHANGED:
layoutId = R.layout.headlines_row_top_changed;
- break;
+ break;*/
case VIEW_UNREAD:
layoutId = m_compactLayoutMode ? R.layout.headlines_row_unread_compact : R.layout.headlines_row_unread;
break;
@@ -1567,10 +1616,6 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (!m_refreshInProgress && m_articles.findById(ARTICLE_SPECIAL_LOADMORE) != null && firstVisibleItem + visibleItemCount == m_articles.size()) {
- refresh(true);
- }
-
if (m_prefs.getBoolean("headlines_mark_read_scroll", false) && firstVisibleItem > (m_activity.isSmallScreen() ? 1 : 0) && !m_autoCatchupDisabled) {
Article a = (Article) view.getItemAtPosition(firstVisibleItem - 1);
@@ -1596,6 +1641,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
m_listPreviousVisibleItem = firstVisibleItem;
}
+
+ if (!m_refreshInProgress && !m_lazyLoadDisabled && /*m_articles.findById(ARTICLE_SPECIAL_LOADMORE) != null &&*/ firstVisibleItem + visibleItemCount == m_articles.size()) {
+ refresh(true);
+ }
}
@Override
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
index 1515883c..51781582 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
@@ -387,7 +387,12 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
m_drawerLayout.openDrawer(Gravity.START);
} else {
- super.onBackPressed();
+ try {
+ super.onBackPressed();
+ } catch (IllegalStateException e) {
+ // java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
+ e.printStackTrace();
+ }
}
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java
index 7d4c2a19..355c5a58 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java
@@ -168,23 +168,6 @@ public class OnlineActivity extends CommonActivity {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- if (!ImageLoader.getInstance().isInited()) {
- ImageLoaderConfiguration config;
-
- try {
- config = new ImageLoaderConfiguration.Builder(getApplicationContext())
- .diskCache(
- new LruDiscCache(new File(getCacheDir(), "article-images"),
- DefaultConfigurationFactory.createFileNameGenerator(),
- 100 * 1024 * 1024))
- .build();
- } catch (IOException e) {
- config = new ImageLoaderConfiguration.Builder(getApplicationContext())
- .build();
- }
- ImageLoader.getInstance().init(config);
- }
-
//m_pullToRefreshAttacher = PullToRefreshAttacher.get(this);
if (isOffline) {
@@ -289,8 +272,12 @@ public class OnlineActivity extends CommonActivity {
@Override
public void onPause() {
super.onPause();
-
- unregisterReceiver(m_broadcastReceiver);
+
+ try {
+ unregisterReceiver(m_broadcastReceiver);
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ }
}
@Override
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java
index 617787e1..9c7974ea 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.SharedPreferences;
import android.database.Cursor;
+import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
@@ -29,6 +30,7 @@ import android.widget.TextView;
import com.shamanland.fab.ShowHideOnScroll;
+import org.fox.ttrss.CommonActivity;
import org.fox.ttrss.R;
import org.fox.ttrss.util.ImageCacheService;
import org.fox.ttrss.util.NotifyingScrollView;
@@ -238,6 +240,9 @@ public class OfflineArticleFragment extends Fragment {
final WebView web = (WebView)view.findViewById(R.id.article_content);
if (web != null) {
+ if (CommonActivity.THEME_DARK.equals(m_prefs.getString("theme", CommonActivity.THEME_DEFAULT))) {
+ web.setBackgroundColor(Color.BLACK);
+ }
web.setWebViewClient(new WebViewClient() {
@Override
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java
index 6031d730..4b484566 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java
@@ -201,7 +201,12 @@ public class OfflineDetailActivity extends OfflineActivity implements OfflineHea
@Override
public void onBackPressed() {
- super.onBackPressed();
+ try {
+ super.onBackPressed();
+ } catch (IllegalStateException e) {
+ // java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
+ e.printStackTrace();
+ }
}
@Override
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java
index 90bcd93e..f1827d21 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java
@@ -47,7 +47,7 @@ public class OfflineFeedCategoriesFragment extends BaseFeedlistFragment implemen
menu.findItem(R.id.create_shortcut).setEnabled(false);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
- Cursor cursor = (Cursor)getCatAtPosition(info.position);
+ Cursor cursor = getCatAtPosition(info.position);
if (cursor != null)
menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex("title")));
@@ -57,7 +57,7 @@ public class OfflineFeedCategoriesFragment extends BaseFeedlistFragment implemen
}
public Cursor createCursor() {
- String unreadOnly = BaseColumns._ID + "> 0 AND " + (m_activity.getUnreadOnly() ? "unread > 0" : "1");
+ String unreadOnly = BaseColumns._ID + ">= 0 AND " + (m_activity.getUnreadOnly() ? "unread > 0" : "1");
String order = m_prefs.getBoolean("sort_feeds_by_unread", false) ? "unread DESC, title" : "title";
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java
index 1823d133..ed146845 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java
@@ -275,7 +275,12 @@ public class OfflineMasterActivity extends OfflineActivity implements OfflineHea
m_drawerLayout.openDrawer(Gravity.START);
} else {
- super.onBackPressed();
+ try {
+ super.onBackPressed();
+ } catch (IllegalStateException e) {
+ // java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
+ e.printStackTrace();
+ }
}
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
index aaa78532..bffcb8da 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
@@ -2,7 +2,6 @@ package org.fox.ttrss.types;
import android.os.Parcel;
import android.os.Parcelable;
-import android.util.Log;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@@ -39,16 +38,13 @@ public class Article implements Parcelable {
public boolean selected;
/* not serialized */
- public Document articleDoc;
- public Element flavorImage;
+ transient public Document articleDoc;
+ transient public Element flavorImage;
- public String flavorImageUri;
- public String flavorStreamUri;
- public String youtubeVid;
-
- //public int flavorImageCount;
-
- public List<Element> mediaList = new ArrayList<>();
+ transient public String flavorImageUri;
+ transient public String flavorStreamUri;
+ transient public String youtubeVid;
+ transient public List<Element> mediaList = new ArrayList<>();
public Article(Parcel in) {
readFromParcel(in);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java
index 891d1d1a..54df9da4 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java
@@ -32,6 +32,7 @@ public class HeadlinesRequest extends ApiRequest {
protected boolean m_firstIdChanged = false;
protected int m_firstId = 0;
+ protected int m_amountLoaded = 0;
public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) {
super(context);
@@ -86,12 +87,14 @@ public class HeadlinesRequest extends ApiRequest {
m_articles.remove(0);
}
- if (m_articles.get(m_articles.size()-1).id == HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE) {
+ /*if (m_articles.get(m_articles.size()-1).id == HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE) {
m_articles.remove(m_articles.size()-1); // remove previous placeholder
- }
+ }*/
}
-
+
+ m_amountLoaded = articles.size();
+
for (Article f : articles)
if (!m_articles.containsId(f.id)) {
f.collectMediaInfo();
@@ -99,10 +102,10 @@ public class HeadlinesRequest extends ApiRequest {
m_articles.add(f);
}
- if (articles.size() == HEADLINES_REQUEST_SIZE) {
+ /*if (articles.size() == HEADLINES_REQUEST_SIZE) {
Article placeholder = new Article(HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE);
m_articles.add(placeholder);
- }
+ }*/
/* if (m_articles.size() == 0)
m_activity.setLoadingStatus(R.string.no_headlines_to_display, false);
diff --git a/org.fox.ttrss/src/main/res/values/style.xml b/org.fox.ttrss/src/main/res/values/style.xml
index 74aad95a..71c8b612 100755
--- a/org.fox.ttrss/src/main/res/values/style.xml
+++ b/org.fox.ttrss/src/main/res/values/style.xml
@@ -18,14 +18,14 @@
<item name="headlineHeaderBackground">#ccffffff</item>
<item name="headlineUnreadBackground">@android:color/white</item>
<item name="feedsSelectedBackground">#dddddd</item>
- <item name="feedlistTextColor">@android:color/primary_text_light</item>
- <item name="feedlistSelectedTextColor">@android:color/primary_text_light</item>
- <item name="headlineUnreadTextColor">@android:color/primary_text_light</item>
- <item name="headlineSelectedTextColor">@android:color/primary_text_light</item>
- <item name="headlineExcerptTextColor">@android:color/secondary_text_light</item>
+ <item name="feedlistTextColor">@android:color/black</item>
+ <item name="feedlistSelectedTextColor">@android:color/black</item>
+ <item name="headlineUnreadTextColor">@android:color/black</item>
+ <item name="headlineSelectedTextColor">@android:color/black</item>
+ <item name="headlineExcerptTextColor">#323232</item>
<item name="headlineSecondaryTextColor">#909090</item>
<item name="headlineSelectedSecondaryTextColor">?headlineSelectedExcerptTextColor</item>
- <item name="headlineSelectedExcerptTextColor">@android:color/secondary_text_light</item>
+ <item name="headlineSelectedExcerptTextColor">#323232</item>
<item name="headlineTitleHighScoreUnreadTextColor">#008000</item>
<item name="linkColor">?colorPrimary</item>
<item name="loadingBackground">@android:color/white</item>
@@ -33,7 +33,7 @@
<item name="articleNoteBackground">#fff7d5</item>
<item name="parentBtnBackground">#dddddd</item>
<item name="articleHeader">@android:color/transparent</item>
- <item name="articleHeaderTextColor">@android:color/primary_text_light</item>
+ <item name="articleHeaderTextColor">@android:color/black</item>
<item name="articleTextColor">@android:color/black</item>
<item name="floatingActionButtonStyle">@style/FabTheme</item>
<item name="headlineFooterColor">?colorPrimary</item>
@@ -71,34 +71,34 @@
<!-- <item name="statusBarHintColor">?colorPrimary</item> -->
<item name="unreadCounterColor">#909090</item>
- <item name="feedlistTextColor">@android:color/primary_text_dark</item>
- <item name="headlineUnreadTextColor">@android:color/primary_text_dark</item>
+ <item name="feedlistTextColor">@android:color/white</item>
+ <item name="headlineUnreadTextColor">@android:color/white</item>
<item name="headlineSelectedTextColor">@android:color/white</item>
- <item name="headlineExcerptTextColor">@android:color/secondary_text_dark</item>
+ <item name="headlineExcerptTextColor">#bebebe</item>
<item name="headlineSecondaryTextColor">#909090</item>
<item name="headlineTitleHighScoreUnreadTextColor">#00FF00</item>
- <item name="headlineSelectedExcerptTextColor">@android:color/secondary_text_dark</item>
+ <item name="headlineSelectedExcerptTextColor">#bebebe</item>
<item name="headlineSelectedSecondaryTextColor">?headlineSelectedExcerptTextColor</item>
<item name="headlineSelectedBackground">#1c1c1c</item>
<item name="headlineHeaderBackground">#99000000</item>
<item name="headlineUnreadBackground">#101010</item>
<item name="linkColor">?colorPrimary</item>
<item name="loadingBackground">@android:color/black</item>
- <item name="articleNoteTextColor">@android:color/secondary_text_dark</item>
+ <item name="articleNoteTextColor">#bebebe</item>
<item name="articleNoteBackground">#303030</item>
<item name="parentBtnBackground">#101010</item>
<item name="ttrssHorizontalDivider">@android:drawable/divider_horizontal_dark</item>
<item name="feedlistBackground">#1c1d1e</item>
<item name="headlinesBackground">#1c1d1e</item>
- <item name="articleBackground">#1c1d1e</item>
+ <item name="articleBackground">@android:color/black</item>
<item name="feedsSelectedBackground">#1c1c1c</item>
- <item name="feedlistSelectedTextColor">@android:color/primary_text_dark</item>
+ <item name="feedlistSelectedTextColor">@android:color/white</item>
<item name="articleHeader">@android:color/transparent</item>
- <item name="articleHeaderTextColor">@android:color/primary_text_dark</item>
+ <item name="articleHeaderTextColor">@android:color/white</item>
<item name="floatingActionButtonStyle">@style/FabTheme</item>
<item name="articleTextColor">#e0e0e0</item>
<item name="headlineFooterColor">?colorPrimary</item>
- <item name="articleHeaderSeparator">@android:color/black</item>
+ <item name="articleHeaderSeparator">#303030</item>
<item name="colorPrimary">#607D8B</item>
<item name="colorPrimaryDark">#455A64</item>