summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-12 06:39:25 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-12 06:39:25 +0300
commitdac515e79b40b9a3dbc2b05f216480b72fea11bb (patch)
tree8931ab48dd5c41ed4fb19f1548d63923f62a7dfd
parentaec7443a54a8292a62055fd2a72e71f4b8010ed3 (diff)
parent9c913c074e254082406dbcea10b39406064f7483 (diff)
Merge branch 'protected/single-headlines-list' into 'master'
use one instance of loaded articles and keep it in an application singleton See merge request tt-rss/tt-rss-android!31
-rwxr-xr-xorg.fox.ttrss/src/main/AndroidManifest.xml11
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java4
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java6
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java5
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/Application.java21
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java119
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java95
-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.java132
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java130
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java100
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java184
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsLoader.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java61
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java46
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java823
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/LogcatActivity.java9
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java115
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java523
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesFragment.java32
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/glide/OkHttpProgressGlideModule.java20
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java28
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/share/ShareActivity.java10
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/share/SubscribeActivity.java28
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java18
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java11
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/types/Attachment.java2
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedCategoryList.java1
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedList.java1
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/DatabaseHelper.java140
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/DetailActivityScrollingViewBehavior.java4
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java13
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java24
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/PrefsBackupAgent.java19
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/SimpleLoginManager.java7
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java3
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java27
-rw-r--r--org.fox.ttrss/src/main/res/menu/context_category.xml9
-rw-r--r--org.fox.ttrss/src/main/res/menu/context_feed.xml4
41 files changed, 923 insertions, 1909 deletions
diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml
index 0f66928f..61ea11bf 100755
--- a/org.fox.ttrss/src/main/AndroidManifest.xml
+++ b/org.fox.ttrss/src/main/AndroidManifest.xml
@@ -10,24 +10,17 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".Application"
android:allowBackup="true"
- android:backupAgent=".util.PrefsBackupAgent"
- android:fullBackupOnly="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config" >
- <!-- <meta-data android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule"
- tools:node="remove" /> -->
<meta-data android:name="org.fox.ttrss.glide.OkHttpProgressGlideModule"
android:value="GlideModule" />
@@ -196,10 +189,6 @@
</intent-filter>
</activity>
- <meta-data
- android:name="com.google.android.backup.api_key"
- android:value="AEdPqrEAAAAIwG6zsGB4qo6ZhjfwIJpm9WI7AqmWaoRXm6ZJnA" />
-
<receiver android:name=".util.DeviceBootReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java
index 9fd0623a..75963c96 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java
@@ -6,10 +6,10 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.preference.PreferenceManager;
import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.preference.PreferenceManager;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
@@ -126,7 +126,7 @@ public class ApiCommon {
String httpLogin = m_prefs.getString("http_login", "").trim();
String httpPassword = m_prefs.getString("http_password", "").trim();
- if (httpLogin.length() > 0) {
+ if (!httpLogin.isEmpty()) {
if (m_transportDebugging) Log.d(TAG, "Using HTTP Basic authentication.");
requestBuilder.addHeader("Authorization", Credentials.basic(httpLogin, httpPassword));
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java
index 18eedee1..259d7a28 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java
@@ -13,14 +13,14 @@ import java.util.HashMap;
public class ApiLoader extends AsyncTaskLoader<JsonElement> implements ApiCommon.ApiCaller {
private final String TAG = this.getClass().getSimpleName();
- private int m_responseCode = 0;
+ private final int m_responseCode = 0;
protected String m_responseMessage;
private int m_apiStatusCode = 0;
- private Context m_context;
+ private final Context m_context;
private String m_lastErrorMessage;
private ApiError m_lastError;
- private HashMap<String,String> m_params;
+ private final HashMap<String,String> m_params;
private JsonElement m_data;
ApiLoader(Context context, HashMap<String, String> params) {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java
index e6c323e9..409047f0 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java
@@ -11,13 +11,10 @@ import com.google.gson.JsonElement;
import java.util.HashMap;
public class ApiRequest extends AsyncTask<HashMap<String,String>, Integer, JsonElement> implements ApiCommon.ApiCaller {
- private final String TAG = this.getClass().getSimpleName();
- private boolean m_transportDebugging = false;
- private int m_responseCode = 0;
private int m_apiStatusCode = 0;
- private Context m_context;
+ private final Context m_context;
protected String m_lastErrorMessage;
protected ApiError m_lastError;
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java
index 5d82618a..b872d034 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java
@@ -10,19 +10,27 @@ import java.util.LinkedHashMap;
public class Application extends android.app.Application {
private static Application m_singleton;
-
- public ArticleList tmpArticleList;
- public Article tmpArticle;
+
+ // this is the only instance of a (large) object which contains all currently loaded articles and is
+ // used by all fragments and activities concurrently
+ private final ArticleList m_articles = new ArticleList();
+
+ // we use this to pass a large temporary object between activities
+ public Article tmpActiveArticle;
public int m_selectedArticleId;
public String m_sessionId;
public int m_apiLevel;
- public LinkedHashMap<String, String> m_customSortModes = new LinkedHashMap<String, String>();
+ public LinkedHashMap<String, String> m_customSortModes = new LinkedHashMap<>();
public static Application getInstance(){
return m_singleton;
}
-
+
+ public static ArticleList getArticles() {
+ return getInstance().m_articles;
+ }
+
@Override
public final void onCreate() {
super.onCreate();
@@ -39,7 +47,8 @@ public class Application extends android.app.Application {
out.putSerializable("gs:customSortTypes", m_customSortModes);
}
- public void load(Bundle in) {
+ /** @noinspection unchecked*/
+ public void load(Bundle in) {
if (in != null) {
m_sessionId = in.getString("gs:sessionId");
m_apiLevel = in.getInt("gs:apiLevel");
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 2b2bf090..3ee42976 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
@@ -6,14 +6,12 @@ import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.webkit.WebBackForwardList;
import android.webkit.WebSettings;
@@ -23,11 +21,11 @@ import android.webkit.WebViewClient;
import android.widget.TextView;
import androidx.core.text.HtmlCompat;
-
-import com.google.android.material.button.MaterialButton;
+import androidx.preference.PreferenceManager;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.Attachment;
+import org.jsoup.helper.StringUtil;
import java.net.MalformedURLException;
import java.net.URL;
@@ -58,7 +56,7 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
if (v.getId() == R.id.article_content) {
HitTestResult result = ((WebView)v).getHitTestResult();
- if (result != null && (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) {
+ if (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
menu.setHeaderTitle(result.getExtra());
getActivity().getMenuInflater().inflate(R.menu.content_gallery_entry, menu);
@@ -100,17 +98,6 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
m_activity.finish();
}
- /* 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);
-
- view.findViewById(R.id.article_scrollview).setVisibility(View.GONE);
- view.findViewById(R.id.article_fab).setVisibility(View.GONE);
-
- return view;
- } */
-
m_articleFontSize = m_prefs.getInt("article_font_size_sp_int", 16);
m_articleSmallFontSize = Math.max(10, Math.min(18, m_articleFontSize - 2));
@@ -129,15 +116,12 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
title.setText(HtmlCompat.fromHtml(titleStr, HtmlCompat.FROM_HTML_MODE_LEGACY));
//title.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
- title.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- m_activity.openUri(Uri.parse(m_article.link));
- } catch (Exception e) {
- e.printStackTrace();
- m_activity.toast(R.string.error_other_error);
- }
+ title.setOnClickListener(v -> {
+ try {
+ m_activity.openUri(Uri.parse(m_article.link));
+ } catch (Exception e) {
+ e.printStackTrace();
+ m_activity.toast(R.string.error_other_error);
}
});
@@ -152,18 +136,15 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
String commentsTitle = getResources().getQuantityString(R.plurals.article_comments, m_article.comments_count, m_article.comments_count);
comments.setText(commentsTitle);
//comments.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
- comments.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- String url = (m_article.comments_link != null && m_article.comments_link.length() > 0) ?
- m_article.comments_link : m_article.link;
-
- m_activity.openUri(Uri.parse(url));
- } catch (Exception e) {
- e.printStackTrace();
- m_activity.toast(R.string.error_other_error);
- }
+ comments.setOnClickListener(v -> {
+ try {
+ String url = (m_article.comments_link != null && !m_article.comments_link.isEmpty()) ?
+ m_article.comments_link : m_article.link;
+
+ m_activity.openUri(Uri.parse(url));
+ } catch (Exception e) {
+ e.printStackTrace();
+ m_activity.toast(R.string.error_other_error);
}
});
@@ -176,7 +157,7 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
View noteContainer = view.findViewById(R.id.note_container);
if (note != null && noteContainer != null) {
- if (m_article.note != null && m_article.note.length() > 0) {
+ if (m_article.note != null && !m_article.note.isEmpty()) {
note.setTextSize(TypedValue.COMPLEX_UNIT_SP, m_articleSmallFontSize);
note.setText(m_article.note);
noteContainer.setVisibility(View.VISIBLE);
@@ -184,12 +165,7 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
noteContainer.setVisibility(View.GONE);
}
- note.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- m_activity.editArticleNote(m_article);
- }
- });
+ note.setOnClickListener(view1 -> m_activity.editArticleNote(m_article));
}
TextView dv = view.findViewById(R.id.date);
@@ -215,20 +191,13 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
if (m_article.feed_title != null) {
String fTitle = m_article.feed_title;
- if (m_article.author != null && m_article.author.length() > 0) {
+ if (m_article.author != null && !m_article.author.isEmpty()) {
fTitle += " (" + getString(R.string.author_formatted, m_article.author) + ")";
}
tagv.setText(fTitle);
} else if (m_article.tags != null) {
- String tagsStr = "";
-
- for (String tag : m_article.tags)
- tagsStr += tag + ", ";
-
- tagsStr = tagsStr.replaceAll(", $", "");
-
- tagv.setText(tagsStr);
+ tagv.setText(StringUtil.join(m_article.tags, ", "));
} else {
tagv.setVisibility(View.GONE);
}
@@ -251,19 +220,16 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
return false;
} });
- m_web.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- HitTestResult result = ((WebView)v).getHitTestResult();
-
- if (result != null && (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) {
- registerForContextMenu(m_web);
- m_activity.openContextMenu(m_web);
- unregisterForContextMenu(m_web);
- return true;
- } else {
- return false;
- }
+ m_web.setOnLongClickListener(v -> {
+ HitTestResult result = ((WebView)v).getHitTestResult();
+
+ if (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
+ registerForContextMenu(m_web);
+ m_activity.openContextMenu(m_web);
+ unregisterForContextMenu(m_web);
+ return true;
+ } else {
+ return false;
}
});
@@ -272,23 +238,6 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
return view;
}
- private void setScoreImage(MaterialButton scoreView, int score) {
- TypedValue tv = new TypedValue();
- int scoreAttr = R.attr.ic_action_trending_flat;
-
- if (m_article.score > 0)
- scoreAttr = R.attr.ic_action_trending_up;
- else if (m_article.score < 0)
- scoreAttr = R.attr.ic_action_trending_down;
-
- m_activity.getTheme().resolveAttribute(scoreAttr, tv, true);
-
- scoreView.setIconResource(tv.resourceId);
-
- TypedValue tvPrimary = new TypedValue();
- m_activity.getTheme().resolveAttribute(R.attr.colorPrimary, tvPrimary, true);
- }
-
protected void renderContent(Bundle savedInstanceState) {
if (!isAdded() || m_web == null) return;
@@ -345,14 +294,14 @@ public class ArticleFragment extends androidx.fragment.app.Fragment {
content.append(articleContent);
- if (m_article.attachments != null && m_article.attachments.size() != 0) {
+ if (m_article.attachments != null && !m_article.attachments.isEmpty()) {
String flatContent = articleContent.replaceAll("[\r\n]", "");
boolean hasImages = flatContent.matches(".*?<img[^>+].*?");
for (Attachment a : m_article.attachments) {
if (a.content_type != null && a.content_url != null) {
try {
- if (a.content_type.indexOf("image") != -1 &&
+ if (a.content_type.contains("image") &&
(!hasImages || m_article.always_display_attachments)) {
URL url = new URL(a.content_url.trim());
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 445f94bb..5bef0dd2 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
@@ -6,14 +6,15 @@ import android.content.SharedPreferences;
import android.os.BadParcelableException;
import android.os.Bundle;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
+import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
@@ -22,7 +23,6 @@ import com.google.android.material.snackbar.Snackbar;
import com.google.gson.JsonElement;
import org.fox.ttrss.types.Article;
-import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
import org.fox.ttrss.util.HeadlinesRequest;
@@ -31,10 +31,9 @@ import java.util.HashMap;
public class ArticlePager extends androidx.fragment.app.Fragment {
private final String TAG = "ArticlePager";
- private RecyclerView.Adapter m_adapter;
+ private PagerAdapter m_adapter;
private HeadlinesEventListener m_listener;
protected Article m_article;
- protected ArticleList m_articles = new ArticleList(); //m_articles = Application.getInstance().m_loadedArticles;
private OnlineActivity m_activity;
private String m_searchQuery = "";
protected Feed m_feed;
@@ -44,18 +43,17 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
private boolean m_lazyLoadDisabled;
private ViewPager2 m_pager;
- private class PagerAdapter extends FragmentStateAdapter {
+ private static class PagerAdapter extends FragmentStateAdapter {
public PagerAdapter(FragmentActivity fa) {
super(fa);
}
- private ArticleFragment m_currentFragment;
-
@Override
+ @NonNull
public Fragment createFragment(int position) {
try {
- Article article = m_articles.get(position);
+ Article article = Application.getArticles().get(position);
if (article != null) {
ArticleFragment af = new ArticleFragment();
@@ -72,19 +70,14 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
@Override
public int getItemCount() {
- return m_articles.size();
+ return Application.getArticles().size();
}
- public ArticleFragment getCurrentFragment() {
- return m_currentFragment;
- }
-
}
- public void initialize(Article article, Feed feed, ArticleList articles) {
+ public void initialize(Article article, Feed feed) {
m_article = article;
m_feed = feed;
- m_articles = articles;
}
public void setSearchQuery(String searchQuery) {
@@ -96,7 +89,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
super.onSaveInstanceState(out);
out.putParcelable("m_article", m_article);
- //out.putParcelable("m_articles", m_articles);
out.putParcelable("m_feed", m_feed);
out.putInt("m_firstId", m_firstId);
}
@@ -118,17 +110,11 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_article_pager, container, false);
- if (savedInstanceState != null) {
- if (m_activity instanceof DetailActivity) {
- m_articles = ((DetailActivity)m_activity).m_articles;
- }
- }
-
m_adapter = new PagerAdapter(getActivity());
m_pager = view.findViewById(R.id.article_pager);
- int position = m_articles.indexOf(m_article);
+ int position = Application.getArticles().indexOf(m_article);
m_listener.onArticleSelected(m_article, false);
@@ -141,29 +127,19 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected: " + position);
- final Article article = m_articles.get(position);
+ final Article article = Application.getArticles().get(position);
if (article != null) {
m_article = article;
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- m_listener.onArticleSelected(article, false);
- }
- }, 250);
+ new Handler().postDelayed(() -> m_listener.onArticleSelected(article, false), 250);
//Log.d(TAG, "Page #" + position + "/" + m_adapter.getCount());
if (!m_refreshInProgress && !m_lazyLoadDisabled && (m_activity.isSmallScreen() || m_activity.isPortrait()) && position >= m_adapter.getItemCount() - 5) {
Log.d(TAG, "loading more articles...");
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- refresh(true);
- }
- }, 100);
+ new Handler().postDelayed(() -> refresh(true), 100);
}
}
}
@@ -172,7 +148,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
return view;
}
- @SuppressWarnings({ "serial" })
protected void refresh(final boolean append) {
if (!append) {
@@ -181,19 +156,14 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
m_refreshInProgress = true;
- @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, m_articles) {
- @Override
- protected void onProgressUpdate(Integer... progress) {
- m_activity.setProgress(progress[0] / progress[1] * 10000);
- }
-
+ @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) {
@Override
protected void onPostExecute(JsonElement result) {
if (isDetached() || !isAdded()) return;
if (!append) {
m_pager.setCurrentItem(0, false);
- m_articles.clear();
+ Application.getArticles().clear();
}
super.onPostExecute(result);
@@ -210,15 +180,10 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
//m_activity.toast(R.string.headlines_row_top_changed);
Snackbar.make(getView(), R.string.headlines_row_top_changed, Snackbar.LENGTH_LONG)
- .setAction(R.string.reload, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- refresh(false);
- }
- }).show();
+ .setAction(R.string.reload, v -> refresh(false)).show();
}
- if (m_amountLoaded < Integer.valueOf(m_prefs.getString("headlines_request_size", "15"))) {
+ if (m_amountLoaded < Integer.parseInt(m_prefs.getString("headlines_request_size", "15"))) {
m_lazyLoadDisabled = true;
}
@@ -234,9 +199,9 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
}
if (m_article != null) {
- if (m_article.id == 0 || !m_articles.containsId(m_article.id)) {
- if (m_articles.size() > 0) {
- m_article = m_articles.get(0);
+ if (m_article.id == 0 || !Application.getArticles().containsId(m_article.id)) {
+ if (!Application.getArticles().isEmpty()) {
+ m_article = Application.getArticles().get(0);
m_listener.onArticleSelected(m_article, false);
}
}
@@ -264,9 +229,9 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
// adaptive, all_articles, marked, published, unread
String viewMode = m_activity.getViewMode();
int numUnread = 0;
- int numAll = m_articles.size();
+ int numAll = Application.getArticles().size();
- for (Article a : m_articles) {
+ for (Article a : Application.getArticles()) {
if (a.unread) ++numUnread;
}
@@ -276,7 +241,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
skip = numAll;
} else if ("unread".equals(viewMode)) {
skip = numUnread;
- } else if (m_searchQuery != null && m_searchQuery.length() > 0) {
+ } else if (m_searchQuery != null && !m_searchQuery.isEmpty()) {
skip = numAll;
} else if ("adaptive".equals(viewMode)) {
skip = numUnread > 0 ? numUnread : numAll;
@@ -289,7 +254,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
req.setOffset(skip);
- HashMap<String,String> map = new HashMap<String, String>();
+ HashMap<String,String> map = new HashMap<>();
map.put("op", "getHeadlines");
map.put("sid", sessionId);
map.put("feed_id", String.valueOf(feed.id));
@@ -307,7 +272,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
if (feed.is_cat) map.put("is_cat", "true");
- if (m_searchQuery != null && m_searchQuery.length() != 0) {
+ if (m_searchQuery != null && !m_searchQuery.isEmpty()) {
map.put("search", m_searchQuery);
map.put("search_mode", "");
map.put("match_on", "both");
@@ -325,13 +290,13 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
}
}
- Log.d(TAG, "[AP] request more headlines, firstId=" + m_firstId);
+ Log.d(TAG, "[AP] request more headlines, firstId=" + m_firstId);
req.execute(map);
}
@Override
- public void onAttach(Activity activity) {
+ public void onAttach(@NonNull Activity activity) {
super.onAttach(activity);
m_listener = (HeadlinesEventListener)activity;
@@ -358,15 +323,15 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
if (m_article != article) {
m_article = article;
- int position = m_articles.indexOf(m_article);
+ int position = Application.getArticles().indexOf(m_article);
- m_pager.setCurrentItem(position);
+ m_pager.setCurrentItem(position, false);
}
}
public void selectArticle(boolean next) {
if (m_article != null) {
- int position = m_articles.indexOf(m_article);
+ int position = Application.getArticles().indexOf(m_article);
if (next)
position++;
@@ -374,7 +339,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
position--;
try {
- Article tmp = m_articles.get(position);
+ Article tmp = Application.getArticles().get(position);
if (tmp != null) {
setActiveArticle(tmp);
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 06f18667..86a31465 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
@@ -5,7 +5,6 @@ import android.content.SharedPreferences;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
-import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
@@ -35,18 +34,15 @@ public abstract class BaseFeedlistFragment extends androidx.fragment.app.Fragmen
View settings = view.findViewById(R.id.drawer_settings_btn);
- settings.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- Intent intent = new Intent(getActivity(),
- PreferencesActivity.class);
+ settings.setOnClickListener(v -> {
+ try {
+ Intent intent = new Intent(getActivity(),
+ PreferencesActivity.class);
- startActivityForResult(intent, 0);
+ startActivityForResult(intent, 0);
- } catch (Exception e) {
- e.printStackTrace();
- }
+ } catch (Exception e) {
+ e.printStackTrace();
}
});
@@ -54,11 +50,8 @@ public abstract class BaseFeedlistFragment extends androidx.fragment.app.Fragmen
// divider
final View footer = inflater.inflate(R.layout.drawer_divider, list, false);
- footer.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //
- }
+ footer.setOnClickListener(v -> {
+ //
});
list.addFooterView(footer);
@@ -76,20 +69,12 @@ public abstract class BaseFeedlistFragment extends androidx.fragment.app.Fragmen
final SwitchCompat rowSwitch = rowToggle.findViewById(R.id.row_switch);
rowSwitch.setChecked(activity.getUnreadOnly());
- rowSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton button, boolean isChecked) {
- activity.setUnreadOnly(isChecked);
- refresh();
- }
+ rowSwitch.setOnCheckedChangeListener((button, isChecked) -> {
+ activity.setUnreadOnly(isChecked);
+ refresh();
});
- footer.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- rowSwitch.setChecked(!rowSwitch.isChecked());
- }
- });
+ footer.setOnClickListener(v -> rowSwitch.setChecked(!rowSwitch.isChecked()));
}
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 d93a52d3..cdc261b7 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
@@ -9,13 +9,10 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.content.res.Configuration;
-import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
@@ -24,7 +21,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
-import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -42,6 +38,7 @@ import androidx.browser.customtabs.CustomTabsServiceConnection;
import androidx.browser.customtabs.CustomTabsSession;
import androidx.core.app.JobIntentService;
import androidx.core.content.FileProvider;
+import androidx.preference.PreferenceManager;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
@@ -50,7 +47,6 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.snackbar.Snackbar;
-import org.fox.ttrss.util.DatabaseHelper;
import org.fox.ttrss.widget.SmallWidgetProvider;
import org.fox.ttrss.widget.WidgetUpdateService;
import org.jsoup.Jsoup;
@@ -83,11 +79,6 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
public static final int PENDING_INTENT_CHROME_SHARE = 1;
- private DatabaseHelper m_databaseHelper;
-
- //private SQLiteDatabase m_readableDb;
- //private SQLiteDatabase m_writableDb;
-
private boolean m_smallScreenMode = true;
protected String m_theme;
private boolean m_needRestart;
@@ -169,14 +160,6 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
m_smallScreenMode = smallScreen;
}
- public DatabaseHelper getDatabaseHelper() {
- return m_databaseHelper;
- }
-
- public SQLiteDatabase getDatabase() {
- return m_databaseHelper.getWritableDatabase();
- }
-
public boolean getUnreadOnly() {
return m_prefs.getBoolean("show_unread_only", true);
}
@@ -198,12 +181,9 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
public void toast(String msg) {
Snackbar.make(findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG)
- .setAction(R.string.dialog_close, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
+ .setAction(R.string.dialog_close, v -> {
- }
- })
+ })
.show();
}
@@ -253,8 +233,6 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
nmgr.createNotificationChannel(channel);
}
- m_databaseHelper = DatabaseHelper.getInstance(this);
-
m_prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
@@ -302,34 +280,16 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
@SuppressLint({ "NewApi", "ServiceCast" })
@SuppressWarnings("deprecation")
public void copyToClipboard(String str) {
- if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
- android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
- clipboard.setText(str);
- } else {
- android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
- clipboard.setText(str);
- }
+ android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
+ clipboard.setText(str);
- Snackbar.make(findViewById(android.R.id.content), R.string.text_copied_to_clipboard, Snackbar.LENGTH_SHORT)
- .setAction(R.string.dialog_close, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
+ Snackbar.make(findViewById(android.R.id.content), R.string.text_copied_to_clipboard, Snackbar.LENGTH_SHORT)
+ .setAction(R.string.dialog_close, v -> {
- }
- })
+ })
.show();
}
- public boolean isUiNightMode() {
- try {
- int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
- return Configuration.UI_MODE_NIGHT_YES == nightModeFlags;
- } catch (Exception e) {
- return false;
- }
- }
-
protected void setAppTheme(SharedPreferences prefs) {
String theme = prefs.getString("theme", CommonActivity.THEME_DEFAULT);
@@ -358,7 +318,7 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
"headlines_swipe_to_dismiss", "headlines_mark_read_scroll", "headlines_request_size",
"force_phone_layout", "open_on_startup"};
- m_needRestart = Arrays.asList(filter).indexOf(key) != -1;
+ m_needRestart = Arrays.asList(filter).contains(key);
}
private CustomTabsSession getCustomTabSession() {
@@ -487,7 +447,7 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
if (uri.getScheme() == null) {
try {
- uri = Uri.parse("https:" + uri.toString());
+ uri = Uri.parse("https:" + uri);
} catch (Exception e) {
e.printStackTrace();
}
@@ -508,43 +468,37 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
.setView(dialogView)
.setMessage(uri.toString())
.setPositiveButton(R.string.quick_preview,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog, which) -> {
- if (!askEveryTimeCB.isChecked()) {
- SharedPreferences.Editor editor = m_prefs.edit();
- editor.putBoolean("custom_tabs_ask_always", false);
- editor.apply();
- }
+ if (!askEveryTimeCB.isChecked()) {
+ SharedPreferences.Editor editor = m_prefs.edit();
+ editor.putBoolean("custom_tabs_ask_always", false);
+ editor.apply();
+ }
- openUriWithCustomTab(finalUri);
+ openUriWithCustomTab(finalUri);
- }
- })
+ })
.setNegativeButton(R.string.open_with,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
-
- if (!askEveryTimeCB.isChecked()) {
- SharedPreferences.Editor editor = m_prefs.edit();
- editor.putBoolean("custom_tabs_ask_always", false);
- editor.putBoolean("enable_custom_tabs", false);
- editor.apply();
- }
-
- Intent intent = new Intent(Intent.ACTION_VIEW, finalUri);
-
- try {
- startActivity(intent);
- } catch (Exception e) {
- e.printStackTrace();
- toast(e.getMessage());
- }
+ (dialog, which) -> {
- }
- });
+ if (!askEveryTimeCB.isChecked()) {
+ SharedPreferences.Editor editor = m_prefs.edit();
+ editor.putBoolean("custom_tabs_ask_always", false);
+ editor.putBoolean("enable_custom_tabs", false);
+ editor.apply();
+ }
+
+ Intent intent = new Intent(Intent.ACTION_VIEW, finalUri);
+
+ try {
+ startActivity(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ toast(e.getMessage());
+ }
+
+ });
/*.setNegativeButton(R.string.cancel,
new Dialog.OnClickListener() {
public void onClick(DialogInterface dialog,
@@ -608,19 +562,14 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
// the wrong text if an image is used multiple times.
Document doc = Jsoup.parse(htmlContent);
Elements es = doc.getElementsByAttributeValue("src", url);
- if (es.size() > 0) {
+ if (!es.isEmpty()) {
if (es.get(0).hasAttr("title")) {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setCancelable(true)
.setMessage(es.get(0).attr("title"))
- .setPositiveButton(R.string.dialog_close, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- }
- }
- );
+ .setPositiveButton(R.string.dialog_close, (dialog, which) -> dialog.cancel()
+ );
Dialog dialog = builder.create();
dialog.show();
@@ -653,8 +602,7 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc
static public int dpToPx(Context context, int dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
- int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
- return px;
+ return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
}
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 ecde9d51..78dad5e3 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java
@@ -8,7 +8,6 @@ import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -16,6 +15,7 @@ import android.view.View;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.FragmentTransaction;
+import androidx.preference.PreferenceManager;
import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -26,7 +26,6 @@ import org.fox.ttrss.types.Feed;
public class DetailActivity extends OnlineActivity implements HeadlinesEventListener {
private final String TAG = this.getClass().getSimpleName();
- protected ArticleList m_articles = new ArticleList();
protected BottomAppBar m_bottomAppBar;
protected SharedPreferences m_prefs;
@@ -40,11 +39,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
setAppTheme(m_prefs);
- super.onCreate(savedInstanceState);
-
- if (savedInstanceState != null) {
- m_articles = savedInstanceState.getParcelable("m_articles");
- }
+ super.onCreate(savedInstanceState);
if (m_prefs.getBoolean("force_phone_layout", false)) {
setContentView(R.layout.activity_detail_phone);
@@ -74,47 +69,44 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
m_bottomAppBar = findViewById(R.id.detail_bottom_appbar);
if (m_bottomAppBar != null) {
- m_bottomAppBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
+ m_bottomAppBar.setOnMenuItemClickListener(item -> {
- final ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
- final HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
+ final ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
+ final HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
- Article article = ap.getSelectedArticle();
+ Article article = ap.getSelectedArticle();
- if (article == null) return false;
+ if (article == null) return false;
- int itemId = item.getItemId();
+ int itemId = item.getItemId();
- if (itemId == R.id.article_set_labels) {
- editArticleLabels(article);
+ if (itemId == R.id.article_set_labels) {
+ editArticleLabels(article);
- return true;
- } else if (itemId == R.id.toggle_attachments) {
- displayAttachments(article);
+ return true;
+ } else if (itemId == R.id.toggle_attachments) {
+ displayAttachments(article);
- return true;
- } else if (itemId == R.id.article_edit_note) {
- editArticleNote(article);
+ return true;
+ } else if (itemId == R.id.article_edit_note) {
+ editArticleNote(article);
- return true;
- } else if (itemId == R.id.article_set_score) {
- setArticleScore(article);
+ return true;
+ } else if (itemId == R.id.article_set_score) {
+ setArticleScore(article);
- return true;
- } else if (itemId == R.id.toggle_unread) {
- article.unread = !article.unread;
- saveArticleUnread(article);
+ return true;
+ } else if (itemId == R.id.toggle_unread) {
+ article.unread = !article.unread;
+ saveArticleUnread(article);
- if (hf != null) {
- hf.notifyUpdated();
- }
- }
+ if (hf != null) {
+ hf.notifyUpdated();
+ }
+ }
- return false;
- }
- });
+ return false;
+ });
}
FloatingActionButton fab = findViewById(R.id.detail_fab);
@@ -123,14 +115,11 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
if (m_prefs.getBoolean("enable_article_fab", true)) {
fab.show();
- fab.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (m_activeArticle != null) {
- openUri(Uri.parse(m_activeArticle.link));
- }
- }
- });
+ fab.setOnClickListener(view -> {
+ if (m_activeArticle != null) {
+ openUri(Uri.parse(m_activeArticle.link));
+ }
+ });
} else {
fab.hide();
}
@@ -152,35 +141,25 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
String feedTitle = i.getStringExtra("feed_title");
tmpFeed = new Feed(feedId, feedTitle, isCat);
-
- //Application.getInstance().m_loadedArticles.clear();
} else {
tmpFeed = i.getParcelableExtra("feed");
}
final Feed feed = tmpFeed;
- //final Article article = i.getParcelableExtra("article");
- final Article article = Application.getInstance().tmpArticle;
+ final Article article = Application.getInstance().tmpActiveArticle;
final String searchQuery = i.getStringExtra("searchQuery");
- ArticleList tmp = Application.getInstance().tmpArticleList;
-
- if (tmp != null) {
- m_articles.clear();
- m_articles.addAll(tmp);
- }
-
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
final HeadlinesFragment hf = new HeadlinesFragment();
- hf.initialize(feed, article, true, m_articles);
+ hf.initialize(feed, article, true);
hf.setSearchQuery(searchQuery);
ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES);
ArticlePager af = new ArticlePager();
- af.initialize(article != null ? hf.getArticleById(article.id) : new Article(), feed, m_articles);
+ af.initialize(article != null ? hf.getArticleById(article.id) : new Article(), feed);
af.setSearchQuery(searchQuery);
ft.replace(R.id.article_fragment, af, FRAG_ARTICLE);
@@ -226,7 +205,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
menu.findItem(R.id.toggle_unread).setIcon(article.unread ? R.drawable.baseline_mark_email_unread_24 :
R.drawable.baseline_email_24);
- menu.findItem(R.id.toggle_attachments).setVisible(article.attachments != null && article.attachments.size() > 0);
+ menu.findItem(R.id.toggle_attachments).setVisible(article.attachments != null && !article.attachments.isEmpty());
}
}
}
@@ -262,8 +241,6 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
public void onSaveInstanceState(Bundle out) {
super.onSaveInstanceState(out);
- out.putParcelable("m_articles", m_articles);
-
Application.getInstance().save(out);
}
@@ -330,16 +307,13 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
if (open) {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
-
- if (af != null) {
- af.setActiveArticle(article);
- }
- }
- }, 250);
+ new Handler().postDelayed(() -> {
+ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
+
+ if (af != null) {
+ af.setActiveArticle(article);
+ }
+ }, 250);
} else {
HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
@@ -355,13 +329,6 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
invalidateOptionsMenu();
}
- public void showSidebar(boolean show) {
- if (!isSmallScreen() && !isPortrait()) {
- findViewById(R.id.headlines_fragment).setVisibility(show ? View.VISIBLE : View.GONE);
- invalidateOptionsMenu();
- }
- }
-
@Override
public void onHeadlinesLoaded(boolean appended) {
HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
@@ -374,7 +341,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
if (hf != null) {
Article article = hf.getActiveArticle();
- if (article == null && hf.getAllArticles().size() > 0) {
+ if (article == null && !hf.getAllArticles().isEmpty()) {
article = hf.getAllArticles().get(0);
@@ -384,7 +351,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
.beginTransaction();
ArticlePager af = new ArticlePager();
- af.initialize(article, hf.getFeed(), m_articles);
+ af.initialize(article, hf.getFeed());
ft.replace(R.id.article_fragment, af, FRAG_ARTICLE);
ft.commitAllowingStateLoss();
@@ -396,8 +363,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
public void onBackPressed() {
Intent resultIntent = new Intent();
- Application.getInstance().tmpArticleList = m_articles;
- resultIntent.putExtra("activeArticle", m_activeArticle);
+ Application.getInstance().tmpActiveArticle = m_activeArticle;
setResult(Activity.RESULT_OK, resultIntent);
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 b805ee6a..df398624 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
@@ -5,9 +5,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.os.Build;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextMenu;
@@ -26,6 +24,7 @@ import android.widget.TextView;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
+import androidx.preference.PreferenceManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.gson.Gson;
@@ -39,7 +38,6 @@ import org.fox.ttrss.types.FeedCategoryList;
import java.lang.reflect.Type;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@@ -48,7 +46,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
LoaderManager.LoaderCallbacks<JsonElement> {
private final String TAG = this.getClass().getSimpleName();
private FeedCategoryListAdapter m_adapter;
- private FeedCategoryList m_cats = new FeedCategoryList();
+ private final FeedCategoryList m_cats = new FeedCategoryList();
FeedCategory m_selectedCat;
private MasterActivity m_activity;
private SwipeRefreshLayout m_swipeLayout;
@@ -60,8 +58,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
final String sessionId = m_activity.getSessionId();
final boolean unreadOnly = m_activity.getUnreadOnly();
- @SuppressWarnings("serial")
- HashMap<String, String> params = new HashMap<String, String>();
+ HashMap<String, String> params = new HashMap<>();
params.put("op", "getCategories");
params.put("sid", sessionId);
params.put("enable_nested", "true");
@@ -101,9 +98,10 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
}
for (FeedCategory c : cats) {
- if (c.id == -1) {
- specialCatFound = true;
- }
+ if (c.id == -1) {
+ specialCatFound = true;
+ break;
+ }
}
m_cats.addAll(cats);
@@ -151,7 +149,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
}
try {
- Collections.sort(m_cats, cmp);
+ m_cats.sort(cmp);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
@@ -218,40 +216,25 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
int itemId = item.getItemId();
if (itemId == R.id.browse_headlines) {
- if (true) {
- FeedCategory cat = getCategoryAtPosition(info.position);
- if (cat != null) {
- m_activity.onCatSelected(cat, true);
- //setSelectedCategory(cat);
- }
- }
+ FeedCategory cat = getCategoryAtPosition(info.position);
+ if (cat != null) {
+ m_activity.onCatSelected(cat, true);
+ //setSelectedCategory(cat);
+ }
return true;
} else if (itemId == R.id.browse_feeds) {
- if (true) {
- FeedCategory cat = getCategoryAtPosition(info.position);
- if (cat != null) {
- m_activity.onCatSelected(cat, false);
- //cf.setSelectedCategory(cat);
- }
- }
- return true;
- } else if (itemId == R.id.create_shortcut) {
- if (true) {
- FeedCategory cat = getCategoryAtPosition(info.position);
- if (cat != null) {
- m_activity.createCategoryShortcut(cat);
- //cf.setSelectedCategory(cat);
- }
- }
+ FeedCategory cat = getCategoryAtPosition(info.position);
+ if (cat != null) {
+ m_activity.onCatSelected(cat, false);
+ //cf.setSelectedCategory(cat);
+ }
return true;
} else if (itemId == R.id.catchup_category) {
- if (true) {
- final FeedCategory cat = getCategoryAtPosition(info.position);
+ final FeedCategory cat = getCategoryAtPosition(info.position);
- if (cat != null) {
- m_activity.catchupDialog(new Feed(cat.id, cat.title, true));
- }
- }
+ if (cat != null) {
+ m_activity.catchupDialog(new Feed(cat.id, cat.title, true));
+ }
return true;
}
Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId());
@@ -270,10 +253,6 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
if (cat != null)
menu.setHeaderTitle(cat.title);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- menu.findItem(R.id.create_shortcut).setVisible(false);
- }
-
super.onCreateContextMenu(menu, v, menuInfo);
}
@@ -304,12 +283,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
m_swipeLayout = view.findViewById(R.id.feeds_swipe_container);
- m_swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- refresh();
- }
- });
+ m_swipeLayout.setOnRefreshListener(this::refresh);
m_list = view.findViewById(R.id.feeds);
m_adapter = new FeedCategoryListAdapter(getActivity(), R.layout.feeds_row, m_cats);
@@ -338,7 +312,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
public void onResume() {
super.onResume();
- getLoaderManager().initLoader(0, null, this).forceLoad();
+ LoaderManager.getInstance(this).initLoader(0, null, this).forceLoad();
m_activity.invalidateOptionsMenu();
}
@@ -350,11 +324,11 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
m_swipeLayout.setRefreshing(true);
}
- getLoaderManager().restartLoader(0, null, this).forceLoad();
+ LoaderManager.getInstance(this).restartLoader(0, null, this).forceLoad();
}
private class FeedCategoryListAdapter extends ArrayAdapter<FeedCategory> {
- private ArrayList<FeedCategory> items;
+ private final ArrayList<FeedCategory> items;
public static final int VIEW_NORMAL = 0;
public static final int VIEW_SELECTED = 1;
@@ -389,12 +363,10 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
if (v == null) {
int layoutId = R.layout.feeds_row;
-
- switch (getItemViewType(position)) {
- case VIEW_SELECTED:
- layoutId = R.layout.feeds_row_selected;
- break;
- }
+
+ if (getItemViewType(position) == VIEW_SELECTED) {
+ layoutId = R.layout.feeds_row_selected;
+ }
LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(layoutId, null);
@@ -423,19 +395,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt
tu.setText(String.valueOf(cat.unread));
tu.setVisibility((cat.unread > 0) ? View.VISIBLE : View.INVISIBLE);
}
-
- /*ImageButton ib = (ImageButton) v.findViewById(R.id.feed_menu_button);
-
- if (ib != null) {
- ib.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- getActivity().openContextMenu(v);
- }
- });
- } */
-
return v;
}
}
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 1a038456..c936385b 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
@@ -4,13 +4,10 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.graphics.Typeface;
-import android.os.Build;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextMenu;
@@ -18,7 +15,6 @@ import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
@@ -30,6 +26,7 @@ import android.widget.TextView;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
+import androidx.preference.PreferenceManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -44,7 +41,6 @@ import org.fox.ttrss.types.FeedList;
import java.lang.reflect.Type;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@@ -54,7 +50,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
private final String TAG = this.getClass().getSimpleName();
private SharedPreferences m_prefs;
private FeedListAdapter m_adapter;
- private FeedList m_feeds = new FeedList();
+ private final FeedList m_feeds = new FeedList();
private MasterActivity m_activity;
Feed m_selectedFeed;
FeedCategory m_activeCategory;
@@ -76,14 +72,14 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
final String sessionId = m_activity.getSessionId();
final boolean unreadOnly = m_activity.getUnreadOnly() && (m_activeCategory == null || m_activeCategory.id != -1);
- HashMap<String,String> params = new HashMap<String,String>();
+ HashMap<String,String> params = new HashMap<>();
params.put("op", "getFeeds");
params.put("sid", sessionId);
params.put("include_nested", "true");
params.put("cat_id", String.valueOf(catId));
- if (unreadOnly) {
- params.put("unread_only", String.valueOf(unreadOnly));
- }
+
+ if (unreadOnly)
+ params.put("unread_only", "true");
return new FeedsLoader(getActivity().getApplicationContext(), params, catId);
}
@@ -127,7 +123,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
}
- if (m_enableParentBtn && m_activeCategory != null && m_activeCategory.id >= 0 && m_feeds.size() > 0) {
+ if (m_enableParentBtn && m_activeCategory != null && m_activeCategory.id >= 0 && !m_feeds.isEmpty()) {
Feed feed = new Feed(m_activeCategory.id, m_activeCategory.title, true);
feed.unread = catUnread;
feed.always_display_as_feed = true;
@@ -157,16 +153,11 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
} else {
m_activity.toast(al.getErrorMessage());
}
-
- //m_activity.setLoadingStatus(getErrorMessage(), false);
}
}
@Override
- public void onLoaderReset(Loader<JsonElement> loader) {
- /*m_feeds.clear();
- m_adapter.notifyDataSetChanged();*/
- }
+ public void onLoaderReset(Loader<JsonElement> loader) { }
@SuppressLint("DefaultLocale")
static class FeedUnreadComparator implements Comparator<Feed> {
@@ -206,9 +197,6 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
@Override
public int compare(Feed a, Feed b) {
- //Log.d(TAG, "A:" + a.title + " " + a.is_cat + " " + a.order_id);
- //Log.d(TAG, "B:" + b.title + " " + b.is_cat + " " + b.order_id);
-
if (a.id >= 0 && b.id >= 0)
if (a.is_cat && b.is_cat)
if (a.order_id != 0 && b.order_id != 0)
@@ -236,72 +224,46 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
- int itemId = item.getItemId();
- if (itemId == R.id.browse_headlines) {
- if (true) {
- Feed feed = getFeedAtPosition(info.position);
- if (feed != null) {
- m_activity.onFeedSelected(feed);
- }
- }
- return true;
- } else if (itemId == R.id.browse_feeds) {
- if (true) {
- Feed feed = getFeedAtPosition(info.position);
- if (feed != null) {
- m_activity.onCatSelected(new FeedCategory(feed.id, feed.title, feed.unread), false);
- }
- }
- return true;
- } else if (itemId == R.id.unsubscribe_feed) {
- if (true) {
- final Feed feed = getFeedAtPosition(info.position);
-
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext())
- .setMessage(getString(R.string.unsubscribe_from_prompt, feed.title))
- .setPositiveButton(R.string.unsubscribe,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
-
- m_activity.unsubscribeFeed(feed);
-
- }
- })
- .setNegativeButton(R.string.dialog_cancel,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
-
- }
- });
-
- Dialog dlg = builder.create();
- dlg.show();
- }
-
- return true;
- } else if (itemId == R.id.create_shortcut) {
- if (true) {
- Feed feed = getFeedAtPosition(info.position);
- if (feed != null) {
- m_activity.createFeedShortcut(feed);
- }
- }
- return true;
- } else if (itemId == R.id.catchup_feed) {
- if (true) {
- Feed feed = getFeedAtPosition(info.position);
-
- if (feed != null) {
- m_activity.catchupDialog(feed);
- }
- }
- return true;
- }
- Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId());
- return super.onContextItemSelected(item);
- }
+ int itemId = item.getItemId();
+ if (itemId == R.id.browse_headlines) {
+ Feed feed = getFeedAtPosition(info.position);
+ if (feed != null) {
+ m_activity.onFeedSelected(feed);
+ }
+ return true;
+ } else if (itemId == R.id.browse_feeds) {
+ Feed feed = getFeedAtPosition(info.position);
+ if (feed != null) {
+ m_activity.onCatSelected(new FeedCategory(feed.id, feed.title, feed.unread), false);
+ }
+ return true;
+ } else if (itemId == R.id.unsubscribe_feed) {
+ final Feed feed = getFeedAtPosition(info.position);
+
+ MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext())
+ .setMessage(getString(R.string.unsubscribe_from_prompt, feed.title))
+ .setPositiveButton(R.string.unsubscribe,
+ (dialog, which) -> m_activity.unsubscribeFeed(feed))
+ .setNegativeButton(R.string.dialog_cancel,
+ (dialog, which) -> {
+
+ });
+
+ Dialog dlg = builder.create();
+ dlg.show();
+
+ return true;
+ } else if (itemId == R.id.catchup_feed) {
+ Feed feed = getFeedAtPosition(info.position);
+
+ if (feed != null) {
+ m_activity.catchupDialog(feed);
+ }
+ return true;
+ }
+ Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId());
+ return super.onContextItemSelected(item);
+ }
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
@@ -323,11 +285,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
menu.findItem(R.id.unsubscribe_feed).setVisible(false);
}
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- menu.findItem(R.id.create_shortcut).setVisible(false);
- }
-
- super.onCreateContextMenu(menu, v, menuInfo);
+ super.onCreateContextMenu(menu, v, menuInfo);
}
@@ -364,12 +322,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
m_swipeLayout = view.findViewById(R.id.feeds_swipe_container);
- m_swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- refresh();
- }
- });
+ m_swipeLayout.setOnRefreshListener(this::refresh);
m_list = view.findViewById(R.id.feeds);
@@ -378,12 +331,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
if (m_enableParentBtn) {
View layout = inflater.inflate(R.layout.feeds_goback, m_list, false);
- layout.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- m_activity.getSupportFragmentManager().popBackStack();
- }
- });
+ layout.setOnClickListener(view1 -> m_activity.getSupportFragmentManager().popBackStack());
m_list.addHeaderView(layout, null, false);
}
@@ -417,7 +365,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
public void onResume() {
super.onResume();
- getLoaderManager().initLoader(0, null, this).forceLoad();
+ LoaderManager.getInstance(this).initLoader(0, null, this).forceLoad();
m_activity.invalidateOptionsMenu();
}
@@ -448,7 +396,6 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
}
}
- @SuppressWarnings({ "serial" })
public void refresh() {
if (!isAdded()) return;
@@ -456,11 +403,11 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
m_swipeLayout.setRefreshing(true);
}
- getLoaderManager().restartLoader(0, null, this).forceLoad();
+ LoaderManager.getInstance(this).restartLoader(0, null, this).forceLoad();
}
private class FeedListAdapter extends ArrayAdapter<Feed> {
- private ArrayList<Feed> items;
+ private final ArrayList<Feed> items;
public static final int VIEW_NORMAL = 0;
public static final int VIEW_SELECTED = 1;
@@ -502,11 +449,9 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
if (v == null) {
int layoutId = R.layout.feeds_row;
- switch (getItemViewType(position)) {
- case VIEW_SELECTED:
- layoutId = R.layout.feeds_row_selected;
- break;
- }
+ if (getItemViewType(position) == VIEW_SELECTED) {
+ layoutId = R.layout.feeds_row_selected;
+ }
LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(layoutId, null);
@@ -566,17 +511,6 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
tu.setVisibility((feed.unread > 0) ? View.VISIBLE : View.INVISIBLE);
}
- /*ImageButton ib = (ImageButton) v.findViewById(R.id.feed_menu_button);
-
- if (ib != null) {
- ib.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- getActivity().openContextMenu(v);
- }
- });
- }*/
-
return v;
}
}
@@ -595,7 +529,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
}
try {
- Collections.sort(m_feeds, cmp);
+ m_feeds.sort(cmp);
} catch (IllegalArgumentException e) {
// sort order got changed in prefs or something
e.printStackTrace();
@@ -613,8 +547,6 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi
String key) {
sortFeeds();
- //m_enableFeedIcons = m_prefs.getBoolean("download_feed_icons", false);
-
}
public Feed getFeedAtPosition(int position) {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsLoader.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsLoader.java
index 4df392f6..92ce64d2 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsLoader.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsLoader.java
@@ -5,7 +5,7 @@ import android.content.Context;
import java.util.HashMap;
class FeedsLoader extends ApiLoader {
- private int m_catId;
+ private final int m_catId;
public FeedsLoader(Context context, HashMap<String, String> params, int catId) {
super(context, params);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java
index 7868c6af..c527730b 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java
@@ -4,7 +4,6 @@ import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -21,6 +20,7 @@ import androidx.core.view.WindowInsetsControllerCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.preference.PreferenceManager;
import androidx.viewpager.widget.ViewPager;
import com.ToxicBakery.viewpager.transforms.DepthPageTransformer;
@@ -50,7 +50,7 @@ public class GalleryActivity extends CommonActivity {
private ProgressBar m_checkProgress;
private static class ArticleImagesPagerAdapter extends FragmentStatePagerAdapter {
- private List<GalleryEntry> m_items;
+ private final List<GalleryEntry> m_items;
public ArticleImagesPagerAdapter(FragmentManager fm, List<GalleryEntry> items) {
super(fm);
@@ -70,22 +70,17 @@ public class GalleryActivity extends CommonActivity {
GalleryEntry item = m_items.get(position);
switch (item.type) {
- case TYPE_IMAGE:
- if (true) {
- GalleryImageFragment frag = new GalleryImageFragment();
- frag.initialize(item.url);
+ case TYPE_IMAGE: {
+ GalleryImageFragment frag = new GalleryImageFragment();
+ frag.initialize(item.url);
- return frag;
- }
- break;
+ return frag;
+ }
case TYPE_VIDEO:
- if (true) {
- GalleryVideoFragment frag = new GalleryVideoFragment();
- frag.initialize(item.url, item.coverUrl);
+ GalleryVideoFragment frag = new GalleryVideoFragment();
+ frag.initialize(item.url, item.coverUrl);
- return frag;
- }
- break;
+ return frag;
}
return null;
@@ -106,7 +101,7 @@ public class GalleryActivity extends CommonActivity {
private class MediaCheckTask extends AsyncTask<List<GalleryEntry>, MediaProgressResult, List<GalleryEntry>> {
- private List<GalleryEntry> m_checkedItems = new ArrayList<>();
+ private final List<GalleryEntry> m_checkedItems = new ArrayList<>();
@Override
protected List<GalleryEntry> doInBackground(List<GalleryEntry>... params) {
@@ -172,7 +167,7 @@ public class GalleryActivity extends CommonActivity {
if (source != null) {
String src = source.attr("src");
- if (src.length() > 0) {
+ if (!src.isEmpty()) {
//Log.d(TAG, "vid/src=" + src);
if (src.startsWith("//")) {
@@ -200,7 +195,7 @@ public class GalleryActivity extends CommonActivity {
} else {
String src = elem.attr("src");
- if (src.length() > 0) {
+ if (!src.isEmpty()) {
if (src.startsWith("//")) {
src = "https:" + src;
}
@@ -225,8 +220,8 @@ public class GalleryActivity extends CommonActivity {
}
}
- if ((firstFound || imgSrcFirst.equals("")) && item.url != null) {
- if (m_items.size() == 0)
+ if ((firstFound || imgSrcFirst.isEmpty()) && item.url != null) {
+ if (m_items.isEmpty())
m_items.add(item);
else
uncheckedItems.add(item);
@@ -293,28 +288,20 @@ public class GalleryActivity extends CommonActivity {
m_content = savedInstanceState.getString("m_content");
}
- findViewById(R.id.gallery_overflow).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- PopupMenu popup = new PopupMenu(GalleryActivity.this, v);
- MenuInflater inflater = popup.getMenuInflater();
- inflater.inflate(R.menu.content_gallery_entry, popup.getMenu());
+ findViewById(R.id.gallery_overflow).setOnClickListener(v -> {
+ PopupMenu popup = new PopupMenu(GalleryActivity.this, v);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.content_gallery_entry, popup.getMenu());
- final GalleryEntry entry = m_items.get(m_pager.getCurrentItem());
+ final GalleryEntry entry = m_items.get(m_pager.getCurrentItem());
- popup.getMenu().findItem(R.id.article_img_share)
- .setVisible(entry.type == GalleryEntry.GalleryEntryType.TYPE_IMAGE);
+ popup.getMenu().findItem(R.id.article_img_share)
+ .setVisible(entry.type == GalleryEntry.GalleryEntryType.TYPE_IMAGE);
- popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- return onImageMenuItemSelected(item, entry);
- }
- });
+ popup.setOnMenuItemClickListener(item -> onImageMenuItemSelected(item, entry));
- popup.show();
+ popup.show();
- }
});
setTitle(m_title);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java
index addb48d3..8f9d5783 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java
@@ -47,7 +47,7 @@ public class GalleryImageFragment extends GalleryBaseFragment {
imgView.setOnTouchListener(touchHandler);
// shared element transitions stop GIFs from playing
- if (m_url.toLowerCase().indexOf(".gif") == -1) {
+ if (!m_url.toLowerCase().contains(".gif")) {
ViewCompat.setTransitionName(imgView, "gallery:" + m_url);
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java
index 2e2df149..a96e59b5 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java
@@ -126,17 +126,14 @@ public class GalleryVideoFragment extends GalleryBaseFragment {
registerForContextMenu(textureView);
- textureView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- if (!m_mediaController.isShowing())
- m_mediaController.show(5000);
- else
- m_mediaController.hide();
- } catch (Exception e) {
- e.printStackTrace();
- }
+ textureView.setOnClickListener(v -> {
+ try {
+ if (!m_mediaController.isShowing())
+ m_mediaController.show(5000);
+ else
+ m_mediaController.hide();
+ } catch (Exception e) {
+ e.printStackTrace();
}
});
@@ -215,22 +212,19 @@ public class GalleryVideoFragment extends GalleryBaseFragment {
e.printStackTrace();
}
- m_mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
- @Override
- public void onPrepared(MediaPlayer mp) {
- getView().findViewById(R.id.flavor_image).setVisibility(View.GONE);
- getView().findViewById(R.id.flavor_image_progress).setVisibility(View.GONE);
-
- try {
- resizeSurface(textureView);
- mp.setLooping(true);
-
- if (m_userVisibleHint) {
- mp.start();
- }
- } catch (IllegalStateException e) {
- e.printStackTrace();
+ m_mediaPlayer.setOnPreparedListener(mp -> {
+ getView().findViewById(R.id.flavor_image).setVisibility(View.GONE);
+ getView().findViewById(R.id.flavor_image_progress).setVisibility(View.GONE);
+
+ try {
+ resizeSurface(textureView);
+ mp.setLooping(true);
+
+ if (m_userVisibleHint) {
+ mp.start();
}
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
}
});
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 352ebab6..32943961 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
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
@@ -16,10 +15,8 @@ import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.text.Html;
import android.transition.Fade;
import android.transition.Transition;
@@ -35,9 +32,7 @@ import android.view.MenuItem;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.CheckBox;
@@ -52,6 +47,7 @@ import android.widget.TextView;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.view.ViewCompat;
+import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -83,7 +79,6 @@ import org.jsoup.nodes.Element;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.TimeZone;
@@ -111,13 +106,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private SharedPreferences m_prefs;
private HeaderViewRecyclerAdapter m_adapter;
- ArticleList m_articles = new ArticleList();
- private ArticleList m_readArticles = new ArticleList();
+ private final ArticleList m_readArticles = new ArticleList();
private HeadlinesEventListener m_listener;
private OnlineActivity m_activity;
private SwipeRefreshLayout m_swipeLayout;
- private int m_maxImageSize = 0;
- boolean m_compactLayoutMode = false;
+ boolean m_compactLayoutMode = false;
private RecyclerView m_list;
private LinearLayoutManager m_layoutManager;
@@ -127,7 +120,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public ArticleList getSelectedArticles() {
ArticleList tmp = new ArticleList();
- for (Article a : m_articles) {
+ for (Article a : Application.getArticles()) {
if (a.selected) tmp.add(a);
}
@@ -138,7 +131,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_feed = feed;
}
- public void initialize(Feed feed, Article activeArticle, boolean compactMode, ArticleList articles) {
+ public void initialize(Feed feed, Article activeArticle, boolean compactMode) {
m_feed = feed;
m_compactLayoutMode = compactMode;
@@ -146,9 +139,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_activeArticle = getArticleById(activeArticle.id);
}
- if (articles != null) {
- m_articles = articles;
- }
}
public boolean onArticleMenuItemSelected(MenuItem item, Article article, int position) {
@@ -184,32 +174,17 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_activity.shareArticle(article);
return true;
} else if (itemId == R.id.catchup_above) {
- if (true) {
-
- final Article fa = article;
-
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext())
- .setMessage(R.string.confirm_catchup_above)
- .setPositiveButton(R.string.dialog_ok,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
-
- catchupAbove(fa);
+ final Article fa = article;
- }
- })
- .setNegativeButton(R.string.dialog_cancel,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext())
+ .setMessage(R.string.confirm_catchup_above)
+ .setPositiveButton(R.string.dialog_ok,
+ (dialog, which) -> catchupAbove(fa))
+ .setNegativeButton(R.string.dialog_cancel,
+ (dialog, which) -> { });
- }
- });
-
- Dialog dialog = builder.create();
- dialog.show();
- }
+ Dialog dialog = builder.create();
+ dialog.show();
return true;
}
Log.d(TAG, "onArticleMenuItemSelected, unhandled id=" + item.getItemId());
@@ -228,7 +203,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
tmp.add(a);
}
}
- if (tmp.size() > 0) {
+ if (!tmp.isEmpty()) {
m_activity.toggleArticlesUnread(tmp);
//updateHeadlines();
}
@@ -253,12 +228,10 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public HeadlinesFragment() {
super();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- Transition fade = new Fade();
+ Transition fade = new Fade();
- setEnterTransition(fade);
- setReenterTransition(fade);
- }
+ setEnterTransition(fade);
+ setReenterTransition(fade);
}
@Override
@@ -283,20 +256,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_searchQuery = savedInstanceState.getString("m_searchQuery");
m_firstId = savedInstanceState.getInt("m_firstId");
m_lazyLoadDisabled = savedInstanceState.getBoolean("m_lazyLoadDisabled");
-
- /*ArrayList<Article> list = savedInstanceState.getParcelableArrayList("m_articles");
-
- m_articles.clear(); // ?
- m_articles.addAll(list);*/
-
- ArticleList tmp = Application.getInstance().tmpArticleList;
-
- if (tmp != null) {
- m_articles.clear();
- m_articles.addAll(Application.getInstance().tmpArticleList);
- }
-
- savedInstanceState.getBoolean("m_compactLayoutMode", m_compactLayoutMode);
+ m_compactLayoutMode = savedInstanceState.getBoolean("m_compactLayoutMode");
}
setRetainInstance(true);
@@ -313,21 +273,12 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
out.putString("m_searchQuery", m_searchQuery);
out.putInt("m_firstId", m_firstId);
out.putBoolean("m_lazyLoadDisabled", m_lazyLoadDisabled);
- //out.putParcelable("m_articles", m_articles);
out.putBoolean("m_compactLayoutMode", m_compactLayoutMode);
-
- Application.getInstance().tmpArticleList = m_articles;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- if (savedInstanceState != null) {
- if (m_activity instanceof DetailActivity) {
- m_articles = ((DetailActivity)m_activity).m_articles;
- }
- }
-
String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT");
if ("HL_COMPACT".equals(headlineMode) || "HL_COMPACT_NOIMAGES".equals(headlineMode))
@@ -335,20 +286,12 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
- m_maxImageSize = (int) (128 * metrics.density + 0.5);
-
- Log.d(TAG, "maxImageSize=" + m_maxImageSize);
View view = inflater.inflate(R.layout.fragment_headlines, container, false);
m_swipeLayout = view.findViewById(R.id.headlines_swipe_container);
- m_swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- refresh(false, true);
- }
- });
+ m_swipeLayout.setOnRefreshListener(() -> refresh(false, true));
m_list = view.findViewById(R.id.headlines_list);
registerForContextMenu(m_list);
@@ -357,14 +300,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_list.setLayoutManager(m_layoutManager);
m_list.setItemAnimator(new DefaultItemAnimator());
- /* if (m_compactLayoutMode) {
- MaterialDividerItemDecoration materialDivider = new MaterialDividerItemDecoration(m_list.getContext(), m_layoutManager.getOrientation());
- materialDivider.setDividerInsetStart(dpToPx(80));
-
- m_list.addItemDecoration(materialDivider);
- } */
-
- ArticleListAdapter adapter = new ArticleListAdapter(getActivity(), R.layout.headlines_row, m_articles);
+ ArticleListAdapter adapter = new ArticleListAdapter(Application.getArticles());
m_adapter = new HeaderViewRecyclerAdapter(adapter);
@@ -382,7 +318,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
- int position = viewHolder.getAdapterPosition() - m_adapter.getHeaderCount();
+ int position = viewHolder.getBindingAdapterPosition() - m_adapter.getHeaderCount();
Article article = getArticleAtPosition(position);
@@ -395,7 +331,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
- final int adapterPosition = viewHolder.getAdapterPosition();
+ final int adapterPosition = viewHolder.getBindingAdapterPosition();
final int position = adapterPosition - m_adapter.getHeaderCount();
try {
@@ -412,24 +348,21 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
wasUnread = false;
}
- m_articles.remove(position);
+ Application.getArticles().remove(position);
m_adapter.notifyDataSetChanged();
Snackbar.make(m_list, R.string.headline_undo_row_prompt, Snackbar.LENGTH_LONG)
- .setAction(getString(R.string.headline_undo_row_button), new OnClickListener() {
- @Override
- public void onClick(View v) {
-
- if (wasUnread) {
- article.unread = true;
- m_activity.saveArticleUnread(article);
- }
-
- m_articles.add(position, article);
- m_adapter.notifyItemInserted(adapterPosition);
- m_adapter.notifyItemRangeChanged(adapterPosition, 1);
- }
- }).show();
+ .setAction(getString(R.string.headline_undo_row_button), v -> {
+
+ if (wasUnread) {
+ article.unread = true;
+ m_activity.saveArticleUnread(article);
+ }
+
+ Application.getArticles().add(position, article);
+ m_adapter.notifyItemInserted(adapterPosition);
+ m_adapter.notifyItemRangeChanged(adapterPosition, 1);
+ }).show();
}
@@ -448,29 +381,12 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
- /*if (newState != RecyclerView.SCROLL_STATE_IDLE) {
-
- try {
- if (m_mediaPlayer != null && m_mediaPlayer.isPlaying()) {
- m_mediaPlayer.pause();
- }
- } catch (IllegalStateException e) {
- // i guess it was already released, oh well
- }
-
- }*/
-
if (newState == RecyclerView.SCROLL_STATE_IDLE && m_prefs.getBoolean("headlines_mark_read_scroll", false)) {
if (!m_readArticles.isEmpty()) {
m_activity.toggleArticlesUnread(m_readArticles);
m_readArticles.clear();
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- m_activity.refresh(false);
- }
- }, 100);
+ new Handler().postDelayed(() -> m_activity.refresh(false), 100);
}
}
}
@@ -486,7 +402,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (m_prefs.getBoolean("headlines_mark_read_scroll", false) && firstVisibleItem > m_adapter.getHeaderCount()) {
- if (firstVisibleItem <= m_articles.size() + m_adapter.getHeaderCount()) {
+ if (firstVisibleItem <= Application.getArticles().size() + m_adapter.getHeaderCount()) {
Article a = getArticleAtPosition(firstVisibleItem - m_adapter.getHeaderCount() - 1);
@@ -500,14 +416,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- if (!m_refreshInProgress && !m_lazyLoadDisabled && lastVisibleItem >= m_articles.size() - 5) {
+ if (!m_refreshInProgress && !m_lazyLoadDisabled && lastVisibleItem >= Application.getArticles().size() - 5) {
m_refreshInProgress = true;
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- refresh(true);
- }
- }, 100);
+ new Handler().postDelayed(() -> refresh(true), 100);
}
}
@@ -532,7 +443,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
setActiveArticle(m_activeArticle);
}
- if (m_articles.size() == 0) {
+ if (Application.getArticles().isEmpty()) {
refresh(false);
}
@@ -551,9 +462,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
refresh(append, false);
}
- @SuppressWarnings({ "serial" })
public void refresh(final boolean append, boolean userInitiated) {
- m_articles.stripFooters();
+ Application.getArticles().stripFooters();
m_adapter.notifyDataSetChanged();
if (!append) m_lazyLoadDisabled = false;
@@ -565,11 +475,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (!append) {
m_activity.getSupportActionBar().show();
- m_articles.clear();
+ Application.getArticles().clear();
m_adapter.notifyDataSetChanged();
} else {
if (!(m_activity instanceof DetailActivity)) {
- m_articles.add(new Article(Article.TYPE_LOADMORE));
+ Application.getArticles().add(new Article(Article.TYPE_LOADMORE));
m_adapter.notifyDataSetChanged();
}
}
@@ -577,12 +487,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
final String sessionId = m_activity.getSessionId();
final boolean isCat = m_feed.is_cat;
- @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, m_articles) {
- @Override
- protected void onProgressUpdate(Integer... progress) {
- m_activity.setProgress(Math.round((((float) progress[0] / (float) progress[1]) * 10000)));
- }
-
+ @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) {
@Override
protected void onPostExecute(JsonElement result) {
if (isDetached() || !isAdded()) return;
@@ -597,7 +502,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (result != null) {
- if (m_activeArticle != null && !m_articles.containsId(m_activeArticle.id)) {
+ if (m_activeArticle != null && !Application.getArticles().containsId(m_activeArticle.id)) {
m_activeArticle = null;
}
@@ -609,16 +514,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (m_activity.isSmallScreen() || !m_activity.isPortrait()) {
Snackbar.make(getView(), R.string.headlines_row_top_changed, Snackbar.LENGTH_LONG)
- .setAction(R.string.reload, new OnClickListener() {
- @Override
- public void onClick(View v) {
- refresh(false);
- }
- }).show();
+ .setAction(R.string.reload, v -> refresh(false)).show();
}
}
- if (m_amountLoaded < Integer.valueOf(m_prefs.getString("headlines_request_size", "15"))) {
+ if (m_amountLoaded < Integer.parseInt(m_prefs.getString("headlines_request_size", "15"))) {
//Log.d(TAG, "amount loaded < request size, disabling lazy load");
m_lazyLoadDisabled = true;
}
@@ -643,7 +543,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
if (!(m_activity instanceof DetailActivity)) {
- m_articles.add(new Article(Article.TYPE_AMR_FOOTER));
+ Application.getArticles().add(new Article(Article.TYPE_AMR_FOOTER));
m_adapter.notifyDataSetChanged();
}
}
@@ -655,9 +555,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
// adaptive, all_articles, marked, published, unread
String viewMode = m_activity.getViewMode();
int numUnread = 0;
- int numAll = m_articles.size();
+ int numAll = Application.getArticles().size();
- for (Article a : m_articles) {
+ for (Article a : Application.getArticles()) {
if (a.unread) ++numUnread;
}
@@ -667,7 +567,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
skip = numAll;
} else if ("unread".equals(viewMode)) {
skip = numUnread;
- } else if (m_searchQuery != null && m_searchQuery.length() > 0) {
+ } else if (m_searchQuery != null && !m_searchQuery.isEmpty()) {
skip = numAll;
} else if ("adaptive".equals(viewMode)) {
skip = numUnread > 0 ? numUnread : numAll;
@@ -686,7 +586,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
req.setOffset(skip);
- HashMap<String,String> map = new HashMap<String,String>();
+ HashMap<String,String> map = new HashMap<>();
map.put("op", "getHeadlines");
map.put("sid", sessionId);
map.put("feed_id", String.valueOf(m_feed.id));
@@ -714,7 +614,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
map.put("force_update", "true");
}
- if (m_searchQuery != null && m_searchQuery.length() != 0) {
+ if (m_searchQuery != null && !m_searchQuery.isEmpty()) {
map.put("search", m_searchQuery);
map.put("search_mode", "");
map.put("match_on", "both");
@@ -757,8 +657,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public View flavorImageOverflow;
public TextureView flavorVideoView;
public MaterialButton attachmentsView;
- //public int position;
- public boolean flavorImageEmbedded;
public ProgressTarget<String, GlideDrawable> flavorProgressTarget;
public ArticleViewHolder(View v) {
@@ -766,18 +664,15 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
view = v;
- view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- View flavorImage = view.findViewById(R.id.flavor_image);
+ view.getViewTreeObserver().addOnPreDrawListener(() -> {
+ View flavorImage = view.findViewById(R.id.flavor_image);
- if (flavorImage != null) {
- article.flavorViewHeight = flavorImage.getMeasuredHeight();
- }
+ if (flavorImage != null) {
+ article.flavorViewHeight = flavorImage.getMeasuredHeight();
+ }
- return true;
- }
- });
+ return true;
+ });
titleView = v.findViewById(R.id.title);
@@ -839,7 +734,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
private class ArticleListAdapter extends RecyclerView.Adapter<ArticleViewHolder> {
- private ArrayList<Article> items;
+ private final ArticleList items;
public static final int VIEW_NORMAL = 0;
public static final int VIEW_UNREAD = 1;
@@ -852,12 +747,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private final Integer[] origTitleColors = new Integer[VIEW_COUNT];
- private ColorGenerator m_colorGenerator = ColorGenerator.DEFAULT;
- private TextDrawable.IBuilder m_drawableBuilder = TextDrawable.builder().round();
+ private final ColorGenerator m_colorGenerator = ColorGenerator.DEFAULT;
+ private final TextDrawable.IBuilder m_drawableBuilder = TextDrawable.builder().round();
boolean flavorImageEnabled;
- private int m_minimumHeightToEmbed;
- private int m_screenHeight;
+ private final int m_screenHeight;
private int m_lastAddedPosition;
private final ConnectivityManager m_cmgr;
@@ -879,14 +773,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
return false;
}
- public ArticleListAdapter(Context context, int textViewResourceId, ArrayList<Article> items) {
+ public ArticleListAdapter(ArticleList items) {
super();
this.items = items;
Display display = m_activity.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
- m_minimumHeightToEmbed = size.y/3;
m_screenHeight = size.y;
String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT");
@@ -945,67 +838,52 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
// nothing else of interest for those below anyway
if (article.id < 0) return;
- holder.view.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- m_list.showContextMenuForChild(v);
- return true;
- }
- });
+ holder.view.setOnLongClickListener(v -> {
+ m_list.showContextMenuForChild(v);
+ return true;
+ });
- holder.view.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- m_listener.onArticleSelected(article);
+ holder.view.setOnClickListener(v -> {
+ m_listener.onArticleSelected(article);
- // only set active article when it makes sense (in DetailActivity)
- if (getActivity() instanceof DetailActivity) {
- m_activeArticle = article;
- m_adapter.notifyDataSetChanged();
- }
- }
- });
+ // only set active article when it makes sense (in DetailActivity)
+ if (getActivity() instanceof DetailActivity) {
+ m_activeArticle = article;
+ m_adapter.notifyDataSetChanged();
+ }
+ });
// block footer clicks to make button/selection clicking easier
if (holder.headlineFooter != null) {
- holder.headlineFooter.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- //
- }
- });
+ holder.headlineFooter.setOnClickListener(view -> {
+ //
+ });
}
if (holder.textImage != null) {
- updateTextCheckedState(holder, article, position);
+ updateTextCheckedState(holder, article);
- holder.textImage.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- Log.d(TAG, "textImage : onclicked");
+ holder.textImage.setOnClickListener(view -> {
+ Log.d(TAG, "textImage : onclicked");
- article.selected = !article.selected;
+ article.selected = !article.selected;
- updateTextCheckedState(holder, article, m_list.getChildPosition(holder.view));
+ updateTextCheckedState(holder, article);
- m_listener.onArticleListSelectionChange(getSelectedArticles());
+ m_listener.onArticleListSelectionChange(getSelectedArticles());
- Log.d(TAG, "num selected: " + getSelectedArticles().size());
- }
- });
+ Log.d(TAG, "num selected: " + getSelectedArticles().size());
+ });
ViewCompat.setTransitionName(holder.textImage, "gallery:" + article.flavorImageUri);
if (article.flavorImage != null) {
- holder.textImage.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
+ holder.textImage.setOnLongClickListener(v -> {
- openGalleryForType(article, holder, holder.textImage);
+ openGalleryForType(article, holder, holder.textImage);
- return true;
- }
- });
+ return true;
+ });
}
}
@@ -1046,17 +924,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
else
holder.markedView.setIconTint(ColorStateList.valueOf(tvPrimary.data));
- holder.markedView.setOnClickListener(new OnClickListener() {
+ holder.markedView.setOnClickListener(v -> {
+ article.marked = !article.marked;
- @Override
- public void onClick(View v) {
- article.marked = !article.marked;
+ m_adapter.notifyItemChanged(m_list.getChildAdapterPosition(holder.view));
- m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view));
-
- m_activity.saveArticleMarked(article);
- }
- });
+ m_activity.saveArticleMarked(article);
+ });
}
if (holder.scoreView != null) {
@@ -1078,51 +952,29 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
holder.scoreView.setIconTint(ColorStateList.valueOf(tvPrimary.data));
if (m_activity.getApiLevel() >= 16) {
- holder.scoreView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- final EditText edit = new EditText(getActivity());
- edit.setText(String.valueOf(article.score));
-
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext())
- .setTitle(R.string.score_for_this_article)
- .setPositiveButton(R.string.set_score,
- new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
-
- try {
- int newScore = Integer.parseInt(edit.getText().toString());
-
- article.score = newScore;
-
- m_activity.saveArticleScore(article);
-
- m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view));
- } catch (NumberFormatException e) {
- m_activity.toast(R.string.score_invalid);
- e.printStackTrace();
- }
- }
- })
- .setNegativeButton(getString(R.string.cancel),
- new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
-
- //
-
- }
- }).setView(edit);
+ holder.scoreView.setOnClickListener(v -> {
+ final EditText edit = new EditText(getActivity());
+ edit.setText(String.valueOf(article.score));
+
+ MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext())
+ .setTitle(R.string.score_for_this_article)
+ .setPositiveButton(R.string.set_score,
+ (dialog, which) -> {
+ try {
+ article.score = Integer.parseInt(edit.getText().toString());
+ m_activity.saveArticleScore(article);
+ m_adapter.notifyItemChanged(m_list.getChildAdapterPosition(holder.view));
+ } catch (NumberFormatException e) {
+ m_activity.toast(R.string.score_invalid);
+ e.printStackTrace();
+ }
+ })
+ .setNegativeButton(getString(R.string.cancel),
+ (dialog, which) -> { }).setView(edit);
- Dialog dialog = builder.create();
- dialog.show();
- }
- });
+ Dialog dialog = builder.create();
+ dialog.show();
+ });
}
}
@@ -1137,29 +989,19 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
else
holder.publishedView.setIconTint(ColorStateList.valueOf(tvPrimary.data));
- holder.publishedView.setOnClickListener(new OnClickListener() {
+ holder.publishedView.setOnClickListener(v -> {
+ article.published = !article.published;
+ m_adapter.notifyItemChanged(m_list.getChildAdapterPosition(holder.view));
- @Override
- public void onClick(View v) {
- article.published = !article.published;
- //m_adapter.notifyDataSetChanged();
- m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view));
-
- m_activity.saveArticlePublished(article);
- }
- });
+ m_activity.saveArticlePublished(article);
+ });
}
if (holder.attachmentsView != null) {
- if (article.attachments != null && article.attachments.size() > 0) {
+ if (article.attachments != null && !article.attachments.isEmpty()) {
holder.attachmentsView.setVisibility(View.VISIBLE);
- holder.attachmentsView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- m_activity.displayAttachments(article);
- }
- });
+ holder.attachmentsView.setOnClickListener(v -> m_activity.displayAttachments(article));
} else {
holder.attachmentsView.setVisibility(View.GONE);
@@ -1217,80 +1059,62 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
Glide.clear(holder.flavorImageView);
// this is needed if our flavor image goes behind base listview element
- holder.headlineHeader.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- m_listener.onArticleSelected(article);
-
- // only set active article when it makes sense (in DetailActivity)
- if (getActivity() instanceof DetailActivity) {
- m_activeArticle = article;
- m_adapter.notifyDataSetChanged();
- }
- }
- });
+ holder.headlineHeader.setOnClickListener(v -> {
+ m_listener.onArticleSelected(article);
- holder.headlineHeader.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- m_list.showContextMenuForChild(holder.view);
+ // only set active article when it makes sense (in DetailActivity)
+ if (getActivity() instanceof DetailActivity) {
+ m_activeArticle = article;
+ m_adapter.notifyDataSetChanged();
+ }
+ });
- return true;
- }
- });
+ holder.headlineHeader.setOnLongClickListener(v -> {
+ m_list.showContextMenuForChild(holder.view);
+
+ return true;
+ });
if (canShowFlavorImage() && article.flavorImageUri != null && holder.flavorImageView != null) {
if (holder.flavorImageOverflow != null) {
- holder.flavorImageOverflow.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- PopupMenu popup = new PopupMenu(getActivity(), holder.flavorImageOverflow);
- MenuInflater inflater = popup.getMenuInflater();
- inflater.inflate(R.menu.content_gallery_entry, popup.getMenu());
-
- popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
-
- Uri mediaUri = Uri.parse(article.flavorStreamUri != null ? article.flavorStreamUri : article.flavorImageUri);
-
- int itemId = item.getItemId();
- if (itemId == R.id.article_img_open) {
- m_activity.openUri(mediaUri);
- return true;
- } else if (itemId == R.id.article_img_copy) {
- m_activity.copyToClipboard(mediaUri.toString());
- return true;
- } else if (itemId == R.id.article_img_share) {
- m_activity.shareImageFromUri(mediaUri.toString());
- return true;
- } else if (itemId == R.id.article_img_share_url) {
- m_activity.shareText(mediaUri.toString());
- return true;
- } else if (itemId == R.id.article_img_view_caption) {
- m_activity.displayImageCaption(article.flavorImageUri, article.content);
- return true;
- }
- return false;
- }
- });
-
- popup.show();
- }
- });
-
- holder.flavorImageView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- m_list.showContextMenuForChild(holder.view);
- return true;
- }
- });
+ holder.flavorImageOverflow.setOnClickListener(v -> {
+ PopupMenu popup = new PopupMenu(getActivity(), holder.flavorImageOverflow);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.content_gallery_entry, popup.getMenu());
+
+ popup.setOnMenuItemClickListener(item -> {
+
+ Uri mediaUri = Uri.parse(article.flavorStreamUri != null ? article.flavorStreamUri : article.flavorImageUri);
+
+ int itemId = item.getItemId();
+ if (itemId == R.id.article_img_open) {
+ m_activity.openUri(mediaUri);
+ return true;
+ } else if (itemId == R.id.article_img_copy) {
+ m_activity.copyToClipboard(mediaUri.toString());
+ return true;
+ } else if (itemId == R.id.article_img_share) {
+ m_activity.shareImageFromUri(mediaUri.toString());
+ return true;
+ } else if (itemId == R.id.article_img_share_url) {
+ m_activity.shareText(mediaUri.toString());
+ return true;
+ } else if (itemId == R.id.article_img_view_caption) {
+ m_activity.displayImageCaption(article.flavorImageUri, article.content);
+ return true;
+ }
+ return false;
+ });
+
+ popup.show();
+ });
+
+ holder.flavorImageView.setOnLongClickListener(v -> {
+ m_list.showContextMenuForChild(holder.view);
+ return true;
+ });
}
- //Log.d(TAG, "IMG: " + article.flavorImageUri + " STREAM: " + article.flavorStreamUri + " H:" + article.flavorViewHeight);
- //Log.d(TAG, "TAG:" + holder.flavorImageOverflow.getTag());
-
holder.flavorImageView.setVisibility(View.VISIBLE);
holder.flavorImageView.setMaxHeight((int)(m_screenHeight * 0.6f));
@@ -1348,129 +1172,108 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
if (m_prefs.getBoolean("inline_video_player", false) && article.flavorImage != null &&
- "video".equals(article.flavorImage.tagName().toLowerCase()) && article.flavorStreamUri != null) {
-
- holder.flavorImageView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- releaseSurface();
- openGalleryForType(article, holder, holder.flavorImageView);
- return true;
- }
- });
-
- holder.flavorVideoView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- releaseSurface();
- openGalleryForType(article, holder, holder.flavorImageView);
- return true;
- }
- });
+ "video".equalsIgnoreCase(article.flavorImage.tagName()) && article.flavorStreamUri != null) {
+
+ holder.flavorImageView.setOnLongClickListener(v -> {
+ releaseSurface();
+ openGalleryForType(article, holder, holder.flavorImageView);
+ return true;
+ });
+
+ holder.flavorVideoView.setOnLongClickListener(v -> {
+ releaseSurface();
+ openGalleryForType(article, holder, holder.flavorImageView);
+ return true;
+ });
+
+ holder.flavorImageView.setOnClickListener(view -> {
+ releaseSurface();
+ m_mediaPlayer = new MediaPlayer();
+
+ holder.flavorVideoView.setVisibility(View.VISIBLE);
+ final ProgressBar bar = holder.flavorImageLoadingBar;
+
+ bar.setIndeterminate(true);
+ bar.setVisibility(View.VISIBLE);
+
+ holder.flavorVideoView.setOnClickListener(v -> {
+ try {
+ if (m_mediaPlayer.isPlaying())
+ m_mediaPlayer.pause();
+ else
+ m_mediaPlayer.start();
+ } catch (IllegalStateException e) {
+ releaseSurface();
+ }
+ });
- holder.flavorImageView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- releaseSurface();
- m_mediaPlayer = new MediaPlayer();
+ m_activeTexture = holder.flavorVideoView;
- holder.flavorVideoView.setVisibility(View.VISIBLE);
- final ProgressBar bar = holder.flavorImageLoadingBar;
+ ViewGroup.LayoutParams lp = m_activeTexture.getLayoutParams();
- bar.setIndeterminate(true);
- bar.setVisibility(View.VISIBLE);
+ Drawable drawable = holder.flavorImageView.getDrawable();
- holder.flavorVideoView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- if (m_mediaPlayer.isPlaying())
- m_mediaPlayer.pause();
- else
- m_mediaPlayer.start();
- } catch (IllegalStateException e) {
- releaseSurface();
- }
- }
- });
+ if (drawable != null) {
- m_activeTexture = holder.flavorVideoView;
+ float aspect = drawable.getIntrinsicWidth() / (float) drawable.getIntrinsicHeight();
- android.view.ViewGroup.LayoutParams lp = m_activeTexture.getLayoutParams();
+ lp.height = holder.flavorImageView.getMeasuredHeight();
+ lp.width = (int) (lp.height * aspect);
- Drawable drawable = holder.flavorImageView.getDrawable();
+ m_activeTexture.setLayoutParams(lp);
+ }
- if (drawable != null) {
+ holder.flavorVideoView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
+ @Override
+ public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
+ try {
+ m_mediaPlayer.setSurface(new Surface(surface));
- float aspect = drawable.getIntrinsicWidth() / (float) drawable.getIntrinsicHeight();
+ m_mediaPlayer.setDataSource(article.flavorStreamUri);
- lp.height = holder.flavorImageView.getMeasuredHeight();
- lp.width = (int) (lp.height * aspect);
+ m_mediaPlayer.setOnPreparedListener(mp -> {
+ try {
+ bar.setVisibility(View.GONE);
+ mp.setLooping(true);
+ mp.start();
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ }
+ });
- m_activeTexture.setLayoutParams(lp);
- }
+ m_mediaPlayer.prepareAsync();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
- holder.flavorVideoView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
- @Override
- public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
- try {
- m_mediaPlayer.setSurface(new Surface(surface));
-
- m_mediaPlayer.setDataSource(article.flavorStreamUri);
-
- m_mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
- @Override
- public void onPrepared(MediaPlayer mp) {
-
- try {
- bar.setVisibility(View.GONE);
- mp.setLooping(true);
- mp.start();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- }
- }
- });
-
- m_mediaPlayer.prepareAsync();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
- @Override
- public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
-
- }
-
- @Override
- public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
- try {
- m_mediaPlayer.release();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
-
- @Override
- public void onSurfaceTextureUpdated(SurfaceTexture surface) {
-
- }
- }
- );
+ }
- }
- });
+ @Override
+ public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
+ try {
+ m_mediaPlayer.release();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(SurfaceTexture surface) {
+
+ }
+ }
+ );
+
+ });
} else {
- holder.flavorImageView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- openGalleryForType(article, holder, holder.flavorImageView);
- }
- });
+ holder.flavorImageView.setOnClickListener(view -> openGalleryForType(article, holder, holder.flavorImageView));
}
}
@@ -1479,7 +1282,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (holder.authorView != null) {
holder.authorView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
- if (articleAuthor.length() > 0) {
+ if (!articleAuthor.isEmpty()) {
holder.authorView.setText(getString(R.string.author_formatted, articleAuthor));
} else {
holder.authorView.setText("");
@@ -1510,44 +1313,33 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (holder.selectionBoxView != null) {
holder.selectionBoxView.setChecked(article.selected);
- holder.selectionBoxView.setOnClickListener(new OnClickListener() {
+ holder.selectionBoxView.setOnClickListener(view -> {
+ CheckBox cb = (CheckBox)view;
- @Override
- public void onClick(View view) {
- CheckBox cb = (CheckBox)view;
+ article.selected = cb.isChecked();
- article.selected = cb.isChecked();
+ m_listener.onArticleListSelectionChange(getSelectedArticles());
- m_listener.onArticleListSelectionChange(getSelectedArticles());
-
- Log.d(TAG, "num selected: " + getSelectedArticles().size());
- }
- });
+ Log.d(TAG, "num selected: " + getSelectedArticles().size());
+ });
}
if (holder.menuButtonView != null) {
- holder.menuButtonView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
+ holder.menuButtonView.setOnClickListener(v -> {
- PopupMenu popup = new PopupMenu(getActivity(), v);
- MenuInflater inflater = popup.getMenuInflater();
- inflater.inflate(R.menu.context_headlines, popup.getMenu());
+ PopupMenu popup = new PopupMenu(getActivity(), v);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.context_headlines, popup.getMenu());
- popup.getMenu().findItem(R.id.article_set_labels).setEnabled(m_activity.getApiLevel() >= 1);
- popup.getMenu().findItem(R.id.article_edit_note).setEnabled(m_activity.getApiLevel() >= 1);
+ popup.getMenu().findItem(R.id.article_set_labels).setEnabled(m_activity.getApiLevel() >= 1);
+ popup.getMenu().findItem(R.id.article_edit_note).setEnabled(m_activity.getApiLevel() >= 1);
- popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- return onArticleMenuItemSelected(item, article, m_list.getChildPosition(holder.view));
- }
- });
+ popup.setOnMenuItemClickListener(item -> onArticleMenuItemSelected(item, article,
+ m_list.getChildAdapterPosition(holder.view)));
- popup.show();
- }
- });
+ popup.show();
+ });
}
}
@@ -1575,8 +1367,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
return items.size();
}
- private void updateTextCheckedState(final ArticleViewHolder holder, final Article article, final int position) {
- String tmp = article.title.length() > 0 ? article.title.substring(0, 1).toUpperCase() : "?";
+ private void updateTextCheckedState(final ArticleViewHolder holder, final Article article) {
+ String tmp = !article.title.isEmpty() ? article.title.substring(0, 1).toUpperCase() : "?";
if (article.selected) {
holder.textImage.setImageDrawable(m_drawableBuilder.build(" ", 0xff616161));
@@ -1619,7 +1411,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private void openGalleryForType(Article article, ArticleViewHolder holder, View transitionView) {
//Log.d(TAG, "openGalleryForType: " + article + " " + holder + " " + transitionView);
- if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) {
+ if ("iframe".equalsIgnoreCase(article.flavorImage.tagName())) {
m_activity.openUri(Uri.parse(article.flavorStreamUri));
} else {
@@ -1663,10 +1455,10 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private void adjustVideoKindView(ArticleViewHolder holder, Article article) {
if (article.flavorImage != null) {
- if (article.flavor_kind == Article.FLAVOR_KIND_YOUTUBE || "iframe".equals(article.flavorImage.tagName().toLowerCase())) {
+ if (article.flavor_kind == Article.FLAVOR_KIND_YOUTUBE || "iframe".equalsIgnoreCase(article.flavorImage.tagName())) {
holder.flavorVideoKindView.setImageResource(R.drawable.baseline_play_circle_outline_24);
holder.flavorVideoKindView.setVisibility(View.VISIBLE);
- } else if (article.flavor_kind == Article.FLAVOR_KIND_VIDEO || "video".equals(article.flavorImage.tagName().toLowerCase())) {
+ } else if (article.flavor_kind == Article.FLAVOR_KIND_VIDEO || "video".equalsIgnoreCase(article.flavorImage.tagName())) {
holder.flavorVideoKindView.setImageResource(R.drawable.baseline_play_circle_24);
holder.flavorVideoKindView.setVisibility(View.VISIBLE);
} else {
@@ -1681,12 +1473,12 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
int viewType = getItemViewType(position);
if (origTitleColors[viewType] == null)
// store original color
- origTitleColors[viewType] = Integer.valueOf(tv.getCurrentTextColor());
+ origTitleColors[viewType] = tv.getCurrentTextColor();
if (score < Article.SCORE_LOW) {
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
- tv.setTextColor(origTitleColors[viewType].intValue());
+ tv.setTextColor(origTitleColors[viewType]);
tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
}
@@ -1716,7 +1508,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
// returns cloned array without footers
public ArticleList getAllArticles() {
- ArticleList tmp = (ArticleList) m_articles.clone();
+ ArticleList tmp = (ArticleList) Application.getArticles().clone();
tmp.stripFooters();
return tmp;
@@ -1740,11 +1532,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
public void setSelection(ArticlesSelection select) {
- for (Article a : m_articles)
+ for (Article a : Application.getArticles())
a.selected = false;
if (select != ArticlesSelection.NONE) {
- for (Article a : m_articles) {
+ for (Article a : Application.getArticles()) {
if (select == ArticlesSelection.ALL || select == ArticlesSelection.UNREAD && a.unread) {
a.selected = true;
}
@@ -1758,7 +1550,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public Article getArticleAtPosition(int position) {
try {
- return m_articles.get(position);
+ return Application.getArticles().get(position);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
} catch (Exception e) {
@@ -1769,28 +1561,20 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
public Article getArticleById(int id) {
- for (Article a : m_articles) {
+ for (Article a : Application.getArticles()) {
if (a.id == id)
return a;
}
return null;
}
- public ArticleList getUnreadArticles() {
- ArticleList tmp = new ArticleList();
- for (Article a : m_articles) {
- if (a.unread) tmp.add(a);
- }
- return tmp;
- }
-
public Article getActiveArticle() {
return m_activeArticle;
}
public int getArticlePositionById(int id) {
- for (int i = 0; i < m_articles.size(); i++) {
- if (m_articles.get(i).id == id) {
+ for (int i = 0; i < Application.getArticles().size(); i++) {
+ if (Application.getArticles().get(i).id == id) {
return i + m_adapter.getHeaderCount();
}
}
@@ -1817,27 +1601,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
return m_feed;
}
- public void setArticles(ArticleList articles) {
- m_articles.clear();
- m_articles.addAll(articles);
-
- m_articles.add(new Article(Article.TYPE_AMR_FOOTER));
-
- m_adapter.notifyDataSetChanged();
- }
-
- public int pxToDp(int px) {
- DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
- int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
- return dp;
- }
-
- public int dpToPx(int dp) {
- DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
- int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
- return px;
- }
-
@Override
public void onPause() {
super.onPause();
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/LogcatActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/LogcatActivity.java
index 22db9e08..baa17267 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/LogcatActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/LogcatActivity.java
@@ -49,12 +49,9 @@ public class LogcatActivity extends CommonActivity {
final SwipeRefreshLayout swipeLayout = findViewById(R.id.logcat_swipe_container);
- swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- refresh();
- swipeLayout.setRefreshing(false);
- }
+ swipeLayout.setOnRefreshListener(() -> {
+ refresh();
+ swipeLayout.setRefreshing(false);
});
}
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 9d9d0901..f88ea1a8 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
@@ -3,13 +3,11 @@ package org.fox.ttrss;
import android.annotation.SuppressLint;
import android.app.Dialog;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
@@ -23,6 +21,7 @@ import androidx.core.view.WindowInsetsCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
+import androidx.preference.PreferenceManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -186,9 +185,7 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
if (!shortcutMode && openFeedId != 0) {
Log.d(TAG, "opening feed id: " + openFeedId);
- HeadlinesFragment hf = new HeadlinesFragment();
- hf.initialize(new Feed(openFeedId, openFeedTitle, openFeedIsCat));
- ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES);
+ onFeedSelected(new Feed(openFeedId, openFeedTitle, openFeedIsCat), false);
} else if (m_drawerLayout != null) {
m_drawerLayout.openDrawer(GravityCompat.START);
}
@@ -212,16 +209,13 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
if (fab != null) {
fab.show();
- fab.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
+ fab.setOnClickListener(view -> {
+ HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
- if (hf != null && hf.isAdded()) {
- hf.refresh(false);
- }
- }
- });
+ if (hf != null && hf.isAdded()) {
+ hf.refresh(false);
+ }
+ });
}
}
@@ -286,24 +280,23 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
m_drawerLayout.closeDrawers();
}
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- FragmentTransaction ft = getSupportFragmentManager()
- .beginTransaction();
+ Application.getArticles().clear();
- HeadlinesFragment hf = new HeadlinesFragment();
- hf.initialize(feed);
+ new Handler().postDelayed(() -> {
+ FragmentTransaction ft = getSupportFragmentManager()
+ .beginTransaction();
- ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES);
+ HeadlinesFragment hf = new HeadlinesFragment();
+ hf.initialize(feed);
- ft.commit();
+ ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES);
- m_feedIsSelected = true;
- m_userFeedSelected = selectedByUser;
+ ft.commit();
- }
- }, 250);
+ m_feedIsSelected = true;
+ m_userFeedSelected = selectedByUser;
+
+ }, 250);
Date date = new Date();
@@ -386,24 +379,20 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
.setTitle(getString(R.string.headlines_sort_articles_title))
.setSingleChoiceItems(
sortTitles,
- selectedIndex, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
+ selectedIndex, (dialog, which) -> {
- try {
+ try {
// Log.d(TAG, "sort selected index:" + which + ": " + sortNames[which]);
- setSortMode((String) sortNames[which]);
+ setSortMode((String) sortNames[which]);
- } catch (IndexOutOfBoundsException e) {
- e.printStackTrace();
- }
+ } catch (IndexOutOfBoundsException e) {
+ e.printStackTrace();
+ }
- dialog.cancel();
+ dialog.cancel();
- refresh();
- }
+ refresh();
});
Dialog dialog = builder.create();
@@ -482,8 +471,8 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
Intent intent = new Intent(MasterActivity.this, DetailActivity.class);
intent.putExtra("feed", hf.getFeed());
intent.putExtra("searchQuery", hf.getSearchQuery());
- Application.getInstance().tmpArticleList = hf.getAllArticles();
- Application.getInstance().tmpArticle = article;
+
+ Application.getInstance().tmpActiveArticle = article;
startActivityForResult(intent, HEADLINES_REQUEST);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
@@ -525,44 +514,20 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == HEADLINES_REQUEST && data != null) {
- ArticleList articles = Application.getInstance().tmpArticleList;
-
- if (articles != null) {
- HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
+ super.onActivityResult(requestCode, resultCode, data);
- if (hf != null) {
- hf.setArticles(articles);
- }
- }
- }
+ if (requestCode == HEADLINES_REQUEST) {
+ HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
- super.onActivityResult(requestCode, resultCode, data);
- }
+ if (hf != null) {
+ hf.notifyUpdated();
- // TODO: remove; not supported on oreo
- public void createFeedShortcut(Feed feed) {
- final Intent shortcutIntent = new Intent(this, MasterActivity.class);
- shortcutIntent.putExtra("feed_id", feed.id);
- shortcutIntent.putExtra("feed_is_cat", feed.is_cat);
- shortcutIntent.putExtra("feed_title", feed.title);
- shortcutIntent.putExtra("shortcut_mode", true);
-
- Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
-
- intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, feed.title);
- intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
- intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher));
- intent.putExtra("duplicate", false);
-
- sendBroadcast(intent);
-
- toast(R.string.shortcut_has_been_placed_on_the_home_screen);
- }
+ // this makes position in headlines in master activity (not quite) randomly jump around when returning
+ // even if active article hasn't been changed, i guess keeping it as-is is a lesser evil?
- // TODO: remove; not supported on oreo
- public void createCategoryShortcut(FeedCategory cat) {
- createFeedShortcut(new Feed(cat.id, cat.title, true));
+ // hf.setActiveArticle(Application.getInstance().tmpActiveArticle);
+ }
+ }
}
public void unsubscribeFeed(final Feed feed) {
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 2e73af7f..04629561 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
@@ -3,9 +3,6 @@ package org.fox.ttrss;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Point;
@@ -13,7 +10,6 @@ import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
@@ -27,6 +23,7 @@ import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
+import androidx.preference.PreferenceManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.gson.Gson;
@@ -47,6 +44,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+@SuppressLint("StaticFieldLeak")
public class OnlineActivity extends CommonActivity {
private final String TAG = this.getClass().getSimpleName();
@@ -81,7 +79,7 @@ public class OnlineActivity extends CommonActivity {
searchQuery = "";
}
- int titleStringId = searchQuery.length() > 0 ? R.string.catchup_dialog_title_search : R.string.catchup_dialog_title;
+ int titleStringId = !searchQuery.isEmpty() ? R.string.catchup_dialog_title_search : R.string.catchup_dialog_title;
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(getString(titleStringId, feed.title))
@@ -92,36 +90,26 @@ public class OnlineActivity extends CommonActivity {
getString(R.string.catchup_dialog_1week),
getString(R.string.catchup_dialog_2week)
},
- selectedIndex, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- }
- })
+ selectedIndex, (dialog, which) -> {
+ })
.setPositiveButton(R.string.catchup,
- new OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog, which) -> {
- ListView list = ((AlertDialog)dialog).getListView();
+ ListView list = ((AlertDialog)dialog).getListView();
- if (list.getCheckedItemCount() > 0) {
- int position = list.getCheckedItemPosition();
+ if (list.getCheckedItemCount() > 0) {
+ int position = list.getCheckedItemPosition();
- String[] catchupModes = { "all", "1day", "1week", "2week" };
- String mode = catchupModes[position];
+ String[] catchupModes = { "all", "1day", "1week", "2week" };
+ String mode = catchupModes[position];
- catchupFeed(feed, mode, true, searchQuery);
- }
- }
- })
+ catchupFeed(feed, mode, true, searchQuery);
+ }
+ })
.setNegativeButton(R.string.dialog_cancel,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog, which) -> {
- }
- });
+ });
Dialog dialog = builder.create();
dialog.show();
@@ -130,21 +118,11 @@ public class OnlineActivity extends CommonActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setMessage(getString(R.string.catchup_dialog_title, feed.title))
.setPositiveButton(R.string.catchup,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
-
- catchupFeed(feed, "all", true, "");
-
- }
- })
+ (dialog, which) -> catchupFeed(feed, "all", true, ""))
.setNegativeButton(R.string.dialog_cancel,
- new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog, which) -> {
- }
- });
+ });
Dialog dialog = builder.create();
dialog.show();
@@ -215,8 +193,6 @@ public class OnlineActivity extends CommonActivity {
super.onCreate(savedInstanceState);
- SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE);
-
setContentView(R.layout.activity_login);
Toolbar toolbar = findViewById(R.id.toolbar);
@@ -236,27 +212,21 @@ public class OnlineActivity extends CommonActivity {
public void login(boolean refresh, OnLoginFinishedListener listener) {
- if (m_prefs.getString("ttrss_url", "").trim().length() == 0) {
+ if (m_prefs.getString("ttrss_url", "").trim().isEmpty()) {
setLoadingStatus(R.string.login_need_configure);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setMessage(R.string.dialog_need_configure_prompt)
.setCancelable(false)
- .setPositiveButton(R.string.dialog_open_preferences, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // launch preferences
-
- Intent intent = new Intent(OnlineActivity.this,
- PreferencesActivity.class);
- startActivityForResult(intent, 0);
- }
- })
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
+ .setPositiveButton(R.string.dialog_open_preferences, (dialog, id) -> {
+ // launch preferences
+
+ Intent intent = new Intent(OnlineActivity.this,
+ PreferencesActivity.class);
+ startActivityForResult(intent, 0);
+ })
+ .setNegativeButton(R.string.cancel, (dialog, id) -> dialog.cancel());
Dialog alert = builder.create();
alert.show();
@@ -266,7 +236,7 @@ public class OnlineActivity extends CommonActivity {
LoginRequest ar = new LoginRequest(getApplicationContext(), refresh, listener);
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("op", "login");
map.put("user", m_prefs.getString("login", "").trim());
map.put("password", m_prefs.getString("password", "").trim());
@@ -293,9 +263,6 @@ public class OnlineActivity extends CommonActivity {
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
- /* AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
- .getMenuInfo(); */
-
final ArticlePager ap = (ArticlePager)getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
int itemId = item.getItemId();
@@ -345,13 +312,13 @@ public class OnlineActivity extends CommonActivity {
}
public void displayAttachments(Article article) {
- if (article != null && article.attachments != null && article.attachments.size() > 0) {
+ if (article != null && article.attachments != null && !article.attachments.isEmpty()) {
CharSequence[] items = new CharSequence[article.attachments.size()];
final CharSequence[] itemUrls = new CharSequence[article.attachments.size()];
for (int i = 0; i < article.attachments.size(); i++) {
- items[i] = article.attachments.get(i).title != null ? article.attachments.get(i).content_url :
- article.attachments.get(i).content_url;
+ items[i] = article.attachments.get(i).title != null && !article.attachments.get(i).title.isEmpty() ?
+ article.attachments.get(i).title : article.attachments.get(i).content_url;
itemUrls[i] = article.attachments.get(i).content_url;
}
@@ -359,35 +326,19 @@ public class OnlineActivity extends CommonActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.attachments_prompt)
.setCancelable(true)
- .setSingleChoiceItems(items, 0, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //
- }
- }).setNeutralButton(R.string.attachment_copy, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
+ .setSingleChoiceItems(items, 0, (dialog, which) -> {
+ //
+ }).setNeutralButton(R.string.attachment_copy, (dialog, which) -> {
+ int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
- copyToClipboard((String)itemUrls[selectedPosition]);
- }
- }).setPositiveButton(R.string.attachment_view, new OnClickListener() {
+ copyToClipboard((String)itemUrls[selectedPosition]);
+ }).setPositiveButton(R.string.attachment_view, (dialog, id) -> {
+ int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
- @Override
- public void onClick(DialogInterface dialog, int id) {
- int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
+ openUri(Uri.parse((String)itemUrls[selectedPosition]));
- openUri(Uri.parse((String)itemUrls[selectedPosition]));
-
- dialog.cancel();
- }
- }).setNegativeButton(R.string.dialog_cancel, new OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
+ dialog.cancel();
+ }).setNegativeButton(R.string.dialog_cancel, (dialog, id) -> dialog.cancel());
Dialog dialog = builder.create();
dialog.show();
@@ -426,38 +377,26 @@ public class OnlineActivity extends CommonActivity {
return true;
} else if (itemId == R.id.search) {
if (hf != null) {
- Dialog dialog = new Dialog(this);
-
final EditText edit = new EditText(this);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.search)
.setPositiveButton(getString(R.string.search),
- new OnClickListener() {
+ (dialog4, which) -> {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
+ String query = edit.getText().toString().trim();
- String query = edit.getText().toString().trim();
+ hf.setSearchQuery(query);
- hf.setSearchQuery(query);
-
- }
})
.setNegativeButton(getString(R.string.cancel),
- new OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog3, which) -> {
- //
+ //
- }
}).setView(edit);
- dialog = builder.create();
+ Dialog dialog = builder.create();
dialog.show();
}
return true;
@@ -473,8 +412,6 @@ public class OnlineActivity extends CommonActivity {
return true;
} else if (itemId == R.id.headlines_display_mode) {
if (hf != null) {
- Dialog dialog = new Dialog(this);
-
String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT");
String[] headlineModeNames = getResources().getStringArray(R.array.headline_mode_names);
final String[] headlineModeValues = getResources().getStringArray(R.array.headline_mode_values);
@@ -484,56 +421,53 @@ public class OnlineActivity extends CommonActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.headlines_set_view_mode)
.setSingleChoiceItems(headlineModeNames,
- selectedIndex, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- dialog.cancel();
+ selectedIndex, (dialog2, which) -> {
+ dialog2.cancel();
- SharedPreferences.Editor editor = m_prefs.edit();
- editor.putString("headline_mode", headlineModeValues[which]);
- editor.apply();
+ SharedPreferences.Editor editor = m_prefs.edit();
+ editor.putString("headline_mode", headlineModeValues[which]);
+ editor.apply();
- Intent intent = getIntent();
+ Intent intent = getIntent();
- Feed feed = hf.getFeed();
+ Feed feed = hf.getFeed();
- if (feed != null) {
- intent.putExtra("feed_id", feed.id);
- intent.putExtra("feed_is_cat", feed.is_cat);
- intent.putExtra("feed_title", feed.title);
- }
+ if (feed != null) {
+ intent.putExtra("feed_id", feed.id);
+ intent.putExtra("feed_is_cat", feed.is_cat);
+ intent.putExtra("feed_title", feed.title);
+ }
- finish();
+ finish();
- startActivity(intent);
- overridePendingTransition(0, 0);
- }
+ startActivity(intent);
+ overridePendingTransition(0, 0);
});
- dialog = builder.create();
+ Dialog dialog = builder.create();
dialog.show();
}
return true;
} else if (itemId == R.id.headlines_view_mode) {
if (hf != null) {
- Dialog dialog = new Dialog(this);
-
String viewMode = getViewMode();
- //Log.d(TAG, "viewMode:" + getViewMode());
-
int selectedIndex = 0;
- if (viewMode.equals("all_articles")) {
- selectedIndex = 1;
- } else if (viewMode.equals("marked")) {
- selectedIndex = 2;
- } else if (viewMode.equals("published")) {
- selectedIndex = 3;
- } else if (viewMode.equals("unread")) {
- selectedIndex = 4;
+ switch (viewMode) {
+ case "all_articles":
+ selectedIndex = 1;
+ break;
+ case "marked":
+ selectedIndex = 2;
+ break;
+ case "published":
+ selectedIndex = 3;
+ break;
+ case "unread":
+ selectedIndex = 4;
+ break;
}
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
@@ -545,34 +479,30 @@ public class OnlineActivity extends CommonActivity {
getString(R.string.headlines_starred),
getString(R.string.headlines_published),
getString(R.string.headlines_unread)},
- selectedIndex, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- switch (which) {
- case 0:
- setViewMode("adaptive");
- break;
- case 1:
- setViewMode("all_articles");
- break;
- case 2:
- setViewMode("marked");
- break;
- case 3:
- setViewMode("published");
- break;
- case 4:
- setViewMode("unread");
- break;
- }
- dialog.cancel();
-
- refresh();
+ selectedIndex, (dialog1, which) -> {
+ switch (which) {
+ case 0:
+ setViewMode("adaptive");
+ break;
+ case 1:
+ setViewMode("all_articles");
+ break;
+ case 2:
+ setViewMode("marked");
+ break;
+ case 3:
+ setViewMode("published");
+ break;
+ case 4:
+ setViewMode("unread");
+ break;
}
+ dialog1.cancel();
+
+ refresh();
});
- dialog = builder.create();
+ Dialog dialog = builder.create();
dialog.show();
}
@@ -586,24 +516,20 @@ public class OnlineActivity extends CommonActivity {
getString(R.string.headlines_select_all),
getString(R.string.headlines_select_unread),
getString(R.string.headlines_select_none)},
- 0, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- switch (which) {
- case 0:
- hf.setSelection(HeadlinesFragment.ArticlesSelection.ALL);
- break;
- case 1:
- hf.setSelection(HeadlinesFragment.ArticlesSelection.UNREAD);
- break;
- case 2:
- hf.setSelection(HeadlinesFragment.ArticlesSelection.NONE);
- break;
- }
- dialog.cancel();
- invalidateOptionsMenu();
+ 0, (dialog, which) -> {
+ switch (which) {
+ case 0:
+ hf.setSelection(HeadlinesFragment.ArticlesSelection.ALL);
+ break;
+ case 1:
+ hf.setSelection(HeadlinesFragment.ArticlesSelection.UNREAD);
+ break;
+ case 2:
+ hf.setSelection(HeadlinesFragment.ArticlesSelection.NONE);
+ break;
}
+ dialog.cancel();
+ invalidateOptionsMenu();
});
Dialog dialog = builder.create();
@@ -650,7 +576,7 @@ public class OnlineActivity extends CommonActivity {
if (hf != null) {
ArticleList selected = hf.getSelectedArticles();
- if (selected.size() > 0) {
+ if (!selected.isEmpty()) {
for (Article a : selected)
a.unread = !a.unread;
@@ -664,7 +590,7 @@ public class OnlineActivity extends CommonActivity {
if (hf != null) {
ArticleList selected = hf.getSelectedArticles();
- if (selected.size() > 0) {
+ if (!selected.isEmpty()) {
for (Article a : selected)
a.marked = !a.marked;
@@ -678,7 +604,7 @@ public class OnlineActivity extends CommonActivity {
if (hf != null) {
ArticleList selected = hf.getSelectedArticles();
- if (selected.size() > 0) {
+ if (!selected.isEmpty()) {
for (Article a : selected)
a.published = !a.published;
@@ -702,20 +628,10 @@ public class OnlineActivity extends CommonActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setMessage(R.string.confirm_catchup_above)
.setPositiveButton(R.string.dialog_ok,
- new OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
-
- catchupAbove(hf, ap);
-
- }
- })
+ (dialog, which) -> catchupAbove(hf, ap))
.setNegativeButton(R.string.dialog_cancel,
- new OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog, which) -> {
- }
});
Dialog dialog = builder.create();
@@ -733,12 +649,6 @@ public class OnlineActivity extends CommonActivity {
}
return true;
- /*case R.id.update_headlines:
- if (hf != null) {
- //m_pullToRefreshAttacher.setRefreshing(true);
- hf.refresh(false, true);
- }
- return true;*/
}
Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId());
return super.onOptionsItemSelected(item);
@@ -759,7 +669,7 @@ public class OnlineActivity extends CommonActivity {
tmp.add(a);
}
}
- if (tmp.size() > 0) {
+ if (!tmp.isEmpty()) {
toggleArticlesUnread(tmp);
hf.notifyUpdated();
invalidateOptionsMenu();
@@ -767,39 +677,6 @@ public class OnlineActivity extends CommonActivity {
}
}
- /* protected void catchupVisibleArticles() {
- final HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
-
- if (hf != null) {
- ArticleList articles = hf.getUnreadArticles();
-
- for (Article a : articles)
- a.unread = false;
-
- ApiRequest req = new ApiRequest(getApplicationContext()) {
- protected void onPostExecute(JsonElement result) {
- if (hf.isAdded()) {
- hf.refresh(false);
- }
- }
- };
-
- final String articleIds = articlesToIdString(articles);
-
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>() {
- {
- put("sid", getSessionId());
- put("op", "updateArticle");
- put("article_ids", articleIds);
- put("mode", "0");
- put("field", "2");
- }
- };
- req.execute(map);
- }
- } */
-
public void editArticleNote(final Article article) {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(article.title);
@@ -808,25 +685,21 @@ public class OnlineActivity extends CommonActivity {
topicEdit.setText(article.note);
builder.setView(topicEdit);
- builder.setPositiveButton(R.string.article_edit_note, new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- String note = topicEdit.getText().toString().trim();
-
- saveArticleNote(article, note);
-
- HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
- if (hf != null) hf.notifyUpdated();
-
- ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
- if (ap != null) ap.notifyUpdated();
- }
- });
+ builder.setPositiveButton(R.string.article_edit_note, (dialog, which) -> {
+ String note = topicEdit.getText().toString().trim();
+
+ saveArticleNote(article, note);
+
+ HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
+ if (hf != null) hf.notifyUpdated();
+
+ ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
+ if (ap != null) ap.notifyUpdated();
+ });
- builder.setNegativeButton(R.string.dialog_cancel, new Dialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- //
- }
- });
+ builder.setNegativeButton(R.string.dialog_cancel, (dialog, which) -> {
+ //
+ });
Dialog dialog = builder.create();
dialog.show();
@@ -854,31 +727,20 @@ public class OnlineActivity extends CommonActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(OnlineActivity.this)
.setTitle(R.string.article_set_labels)
- .setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which, final boolean isChecked) {
- final int labelId = itemIds[which];
-
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("sid", getSessionId());
- map.put("op", "setArticleLabel");
- map.put("label_id", String.valueOf(labelId));
- map.put("article_ids", String.valueOf(articleId));
- if (isChecked) map.put("assign", "true");
-
- ApiRequest req = new ApiRequest(OnlineActivity.this);
- req.execute(map);
-
- }
- }).setPositiveButton(R.string.dialog_close, new OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- }
- });
+ .setMultiChoiceItems(items, checkedItems, (dialog, which, isChecked) -> {
+ final int labelId = itemIds[which];
+
+ HashMap<String, String> map = new HashMap<>();
+ map.put("sid", getSessionId());
+ map.put("op", "setArticleLabel");
+ map.put("label_id", String.valueOf(labelId));
+ map.put("article_ids", String.valueOf(articleId));
+ if (isChecked) map.put("assign", "true");
+
+ ApiRequest req1 = new ApiRequest(OnlineActivity.this);
+ req1.execute(map);
+
+ }).setPositiveButton(R.string.dialog_close, (dialog, which) -> dialog.cancel());
Dialog dialog = builder.create();
dialog.show();
@@ -887,8 +749,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "getLabels");
map.put("article_id", String.valueOf(articleId));
@@ -956,7 +817,6 @@ public class OnlineActivity extends CommonActivity {
Application.getInstance().m_apiLevel = apiLevel;
}
- @SuppressWarnings({ "unchecked", "serial" })
public void saveArticleUnread(final Article article) {
ApiRequest req = new ApiRequest(getApplicationContext()) {
protected void onPostExecute(JsonElement result) {
@@ -965,7 +825,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
map.put("article_ids", String.valueOf(article.id));
@@ -983,7 +843,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
map.put("article_ids", String.valueOf(article.id));
@@ -1001,7 +861,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
map.put("article_ids", String.valueOf(article.id));
@@ -1011,7 +871,6 @@ public class OnlineActivity extends CommonActivity {
req.execute(map);
}
- @SuppressWarnings({ "unchecked", "serial" })
public void saveArticlePublished(final Article article) {
ApiRequest req = new ApiRequest(getApplicationContext()) {
@@ -1021,7 +880,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
map.put("article_ids", String.valueOf(article.id));
@@ -1031,7 +890,6 @@ public class OnlineActivity extends CommonActivity {
req.execute(map);
}
- @SuppressWarnings({ "unchecked", "serial" })
public void saveArticleNote(final Article article, final String note) {
ApiRequest req = new ApiRequest(getApplicationContext()) {
protected void onPostExecute(JsonElement result) {
@@ -1039,7 +897,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
map.put("article_ids", String.valueOf(article.id));
@@ -1050,15 +908,6 @@ public class OnlineActivity extends CommonActivity {
req.execute(map);
}
- public static String articlesToIdString(ArticleList articles) {
- String tmp = "";
-
- for (Article a : articles)
- tmp += a.id + ",";
-
- return tmp.replaceAll(",$", "");
- }
-
public void shareArticle(Article article) {
if (article != null) {
shareText(article.link, article.title);
@@ -1072,33 +921,23 @@ public class OnlineActivity extends CommonActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.score_for_this_article)
.setPositiveButton(R.string.set_score,
- new DialogInterface.OnClickListener() {
+ (dialog, which) -> {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
+ try {
+article.score = Integer.parseInt(edit.getText().toString());
- try {
- article.score = Integer.parseInt(edit.getText().toString());
-
- saveArticleScore(article);
- } catch (NumberFormatException e) {
- toast(R.string.score_invalid);
- e.printStackTrace();
- }
- }
- })
+ saveArticleScore(article);
+ } catch (NumberFormatException e) {
+ toast(R.string.score_invalid);
+ e.printStackTrace();
+ }
+ })
.setNegativeButton(getString(R.string.cancel),
- new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
+ (dialog, which) -> {
- //
+ //
- }
- }).setView(edit);
+ }).setView(edit);
Dialog dialog = builder.create();
dialog.show();
@@ -1186,8 +1025,7 @@ public class OnlineActivity extends CommonActivity {
}
};
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "catchupFeed");
map.put("feed_id", String.valueOf(feed.id));
@@ -1203,11 +1041,10 @@ public class OnlineActivity extends CommonActivity {
public void toggleArticlesMarked(final ArticleList articles) {
ApiRequest req = new ApiRequest(getApplicationContext());
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
- map.put("article_ids", articlesToIdString(articles));
+ map.put("article_ids", articles.getAsCommaSeparatedIds());
map.put("mode", "2");
map.put("field", "0");
@@ -1217,12 +1054,11 @@ public class OnlineActivity extends CommonActivity {
public void toggleArticlesUnread(final ArticleList articles) {
ApiRequest req = new ApiRequest(getApplicationContext());
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
- map.put("article_ids", articlesToIdString(articles));
- map.put("mode", "2");
+ map.put("article_ids", articles.getAsCommaSeparatedIds());
+ map.put("mode", "2");
map.put("field", "2");
req.execute(map);
@@ -1232,12 +1068,11 @@ public class OnlineActivity extends CommonActivity {
public void toggleArticlesPublished(final ArticleList articles) {
ApiRequest req = new ApiRequest(getApplicationContext());
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "updateArticle");
- map.put("article_ids", articlesToIdString(articles));
- map.put("mode", "2");
+ map.put("article_ids", articles.getAsCommaSeparatedIds());
+ map.put("mode", "2");
map.put("field", "1");
req.execute(map);
@@ -1280,13 +1115,13 @@ public class OnlineActivity extends CommonActivity {
HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
if (hf != null && !m_forceDisableActionMode) {
- if (hf.getSelectedArticles().size() > 0) {
+ if (!hf.getSelectedArticles().isEmpty()) {
if (m_headlinesActionMode == null) {
m_headlinesActionMode = startSupportActionMode(m_headlinesActionModeCallback);
}
m_headlinesActionMode.setTitle(String.valueOf(hf.getSelectedArticles().size()));
- } else if (hf.getSelectedArticles().size() == 0 && m_headlinesActionMode != null) {
+ } else if (hf.getSelectedArticles().isEmpty() && m_headlinesActionMode != null) {
m_headlinesActionMode.finish();
}
} else if (m_forceDisableActionMode && m_headlinesActionMode != null) {
@@ -1328,7 +1163,7 @@ public class OnlineActivity extends CommonActivity {
}
protected class LoginRequest extends ApiRequest {
- boolean m_refreshAfterLogin = false;
+ boolean m_refreshAfterLogin;
OnLoginFinishedListener m_listener;
public LoginRequest(Context context, boolean refresh, OnLoginFinishedListener listener) {
@@ -1337,7 +1172,6 @@ public class OnlineActivity extends CommonActivity {
m_listener = listener;
}
- @SuppressWarnings("unchecked")
@SuppressLint("StaticFieldLeak")
protected void onPostExecute(JsonElement result) {
if (result != null) {
@@ -1410,13 +1244,10 @@ public class OnlineActivity extends CommonActivity {
Log.d(TAG, "Received API level: " + getApiLevel());
loginSuccess(m_refreshAfterLogin);
-
- return;
}
};
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", getSessionId());
map.put("op", "getApiLevel");
@@ -1447,7 +1278,7 @@ public class OnlineActivity extends CommonActivity {
}
public LinkedHashMap<String, String> getSortModes() {
- LinkedHashMap<String, String> tmp = new LinkedHashMap<String, String>();
+ LinkedHashMap<String, String> tmp = new LinkedHashMap<>();
tmp.put("default", getString(R.string.headlines_sort_default));
tmp.put("feed_dates", getString(R.string.headlines_sort_newest_first));
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java
index 9ac9f56c..c880161a 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java
@@ -1,11 +1,11 @@
package org.fox.ttrss;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.view.MenuItem;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.FragmentTransaction;
+import androidx.preference.PreferenceManager;
public class PreferencesActivity extends CommonActivity {
@Override
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesFragment.java
index 6e4c10f5..6b7728a4 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesFragment.java
@@ -6,9 +6,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
@@ -26,26 +24,20 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
findPreference("ttrss_url").setSummary(prefs.getString("ttrss_url", getString(R.string.ttrss_url_summary)));
findPreference("login").setSummary(prefs.getString("login", getString(R.string.login_summary)));
- findPreference("show_logcat").setOnPreferenceClickListener(new androidx.preference.Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(@NonNull androidx.preference.Preference preference) {
- Intent intent = new Intent(getActivity(), LogcatActivity.class);
- startActivity(intent);
- return false;
- }
+ findPreference("show_logcat").setOnPreferenceClickListener(preference -> {
+ Intent intent = new Intent(getActivity(), LogcatActivity.class);
+ startActivity(intent);
+ return false;
});
- findPreference("network_settings").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- getActivity().getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.preferences_container, new NetworkPreferencesFragment() )
- .addToBackStack( NetworkPreferencesFragment.class.getSimpleName() )
- .commit();
-
- return false;
- }
+ findPreference("network_settings").setOnPreferenceClickListener(preference -> {
+ getActivity().getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.preferences_container, new NetworkPreferencesFragment() )
+ .addToBackStack( NetworkPreferencesFragment.class.getSimpleName() )
+ .commit();
+
+ return false;
});
CommonActivity activity = (CommonActivity) getActivity();
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/glide/OkHttpProgressGlideModule.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/glide/OkHttpProgressGlideModule.java
index 91e0ecf8..312988bf 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/glide/OkHttpProgressGlideModule.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/glide/OkHttpProgressGlideModule.java
@@ -40,14 +40,12 @@ public class OkHttpProgressGlideModule implements GlideModule {
}
private static Interceptor createInterceptor(final ResponseProgressListener listener) {
- return new Interceptor() {
- @Override public Response intercept(Chain chain) throws IOException {
- Request request = chain.request();
- Response response = chain.proceed(request);
- return response.newBuilder()
- .body(new OkHttpProgressResponseBody(request.url(), response.body(), listener))
- .build();
- }
+ return chain -> {
+ Request request = chain.request();
+ Response response = chain.proceed(request);
+ return response.newBuilder()
+ .body(new OkHttpProgressResponseBody(request.url(), response.body(), listener))
+ .build();
};
}
@@ -101,11 +99,7 @@ public class OkHttpProgressGlideModule implements GlideModule {
forget(key);
}
if (needsDispatch(key, bytesRead, contentLength, listener.getGranualityPercentage())) {
- handler.post(new Runnable() {
- @Override public void run() {
- listener.onProgress(bytesRead, contentLength);
- }
- });
+ handler.post(() -> listener.onProgress(bytesRead, contentLength));
}
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java
index ca13c746..5796f289 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java
@@ -1,16 +1,16 @@
package org.fox.ttrss.share;
import android.app.Dialog;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import androidx.preference.PreferenceManager;
+
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.fox.ttrss.ApiRequest;
@@ -53,25 +53,19 @@ public abstract class CommonShareActivity extends CommonActivity {
public void login(int requestId) {
- if (m_prefs.getString("ttrss_url", "").trim().length() == 0) {
+ if (m_prefs.getString("ttrss_url", "").trim().isEmpty()) {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setMessage(R.string.dialog_need_configure_prompt)
.setCancelable(false)
- .setPositiveButton(R.string.dialog_open_preferences, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // launch preferences
-
- Intent intent = new Intent(CommonShareActivity.this,
- PreferencesActivity.class);
- startActivityForResult(intent, 0);
- }
- })
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
+ .setPositiveButton(R.string.dialog_open_preferences, (dialog, id) -> {
+ // launch preferences
+
+ Intent intent = new Intent(CommonShareActivity.this,
+ PreferencesActivity.class);
+ startActivityForResult(intent, 0);
+ })
+ .setNegativeButton(R.string.cancel, (dialog, id) -> dialog.cancel());
Dialog alert = builder.create();
alert.show();
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/ShareActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/ShareActivity.java
index 9e391411..3a1553b6 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/ShareActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/ShareActivity.java
@@ -2,7 +2,6 @@ package org.fox.ttrss.share;
import android.content.Intent;
import android.os.Bundle;
-import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
@@ -53,12 +52,7 @@ public class ShareActivity extends CommonShareActivity {
m_button = (Button) findViewById(R.id.share_button);
- m_button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- login(0);
- }
- });
+ m_button.setOnClickListener(v -> login(0));
}
@Override
@@ -108,7 +102,7 @@ public class ShareActivity extends CommonShareActivity {
final EditText content = (EditText) findViewById(R.id.content);
if (url != null && title != null && content != null) {
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", m_sessionId);
map.put("op", "shareToPublished");
map.put("title", title.getText().toString());
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/SubscribeActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/SubscribeActivity.java
index df0c82f9..e71583d3 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/SubscribeActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/SubscribeActivity.java
@@ -39,8 +39,8 @@ public class SubscribeActivity extends CommonShareActivity {
private Button m_catButton;
private CatListAdapter m_catAdapter;
private FeedListAdapter m_feedAdapter;
- private FeedCategoryList m_cats = new FeedCategoryList();
- private ArrayList<Map.Entry<String, JsonElement>> m_feeds = new ArrayList<Map.Entry<String, JsonElement>>();
+ private final FeedCategoryList m_cats = new FeedCategoryList();
+ private final ArrayList<Map.Entry<String, JsonElement>> m_feeds = new ArrayList<>();
private ProgressBar m_progressBar;
private static final int REQ_CATS = 1;
@@ -95,7 +95,7 @@ public class SubscribeActivity extends CommonShareActivity {
m_progressBar = (ProgressBar) findViewById(R.id.subscribe_progress);
Spinner catList = (Spinner) findViewById(R.id.category_spinner);
- if (m_cats.size() == 0) m_cats.add(new FeedCategory(0, "Uncategorized", 0));
+ if (m_cats.isEmpty()) m_cats.add(new FeedCategory(0, "Uncategorized", 0));
m_catAdapter = new CatListAdapter(this, android.R.layout.simple_spinner_dropdown_item, m_cats);
catList.setAdapter(m_catAdapter);
@@ -127,21 +127,11 @@ public class SubscribeActivity extends CommonShareActivity {
m_postButton = (Button) findViewById(R.id.subscribe_button);
- m_postButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- login(REQ_POST);
- }
- });
+ m_postButton.setOnClickListener(v -> login(REQ_POST));
m_catButton = (Button) findViewById(R.id.cats_button);
- m_catButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- login(REQ_CATS);
- }
- });
+ m_catButton.setOnClickListener(v -> login(REQ_CATS));
login(REQ_CATS);
}
@@ -237,7 +227,7 @@ public class SubscribeActivity extends CommonShareActivity {
final EditText feedUrl = (EditText) findViewById(R.id.feed_url);
if (feedUrl != null ) {
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", m_sessionId);
map.put("op", "subscribeToFeed");
map.put("feed_url", feedUrl.getText().toString());
@@ -299,7 +289,7 @@ public class SubscribeActivity extends CommonShareActivity {
}
};
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", m_sessionId);
map.put("op", "getCategories");
@@ -326,7 +316,7 @@ public class SubscribeActivity extends CommonShareActivity {
}
private static class CatListAdapter extends ArrayAdapter<String> {
- private List<FeedCategory> m_items;
+ private final List<FeedCategory> m_items;
public CatListAdapter(Context context, int resource,
List<FeedCategory> items) {
@@ -355,7 +345,7 @@ public class SubscribeActivity extends CommonShareActivity {
}
private static class FeedListAdapter extends ArrayAdapter<String> {
- private List<Map.Entry<String, JsonElement>> m_items;
+ private final List<Map.Entry<String, JsonElement>> m_items;
public FeedListAdapter(Context context, int resource, List<Map.Entry<String, JsonElement>> items) {
super(context, resource);
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 0a49252b..f66df08d 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
@@ -26,7 +26,7 @@ public class Article implements Parcelable {
public int id;
public boolean unread;
- public boolean marked;
+ public boolean marked;
public boolean published;
public int score;
public int updated;
@@ -78,13 +78,13 @@ public class Article implements Parcelable {
}
public void collectMediaInfo() {
- if (flavor_image != null && flavor_image.length() > 0) {
+ if (flavor_image != null && !flavor_image.isEmpty()) {
flavorImageUri = flavor_image;
flavorImage = new Element("img")
.attr("src", flavorImageUri);
- if (flavor_stream != null && flavor_stream.length() > 0) {
+ if (flavor_stream != null && !flavor_stream.isEmpty()) {
flavorStreamUri = flavor_stream;
}
@@ -127,7 +127,7 @@ public class Article implements Parcelable {
String srcEmbed = flavorImage.attr("src");
- if (srcEmbed.length() > 0) {
+ if (!srcEmbed.isEmpty()) {
Pattern pattern = Pattern.compile("/embed/([\\w-]+)");
Matcher matcher = pattern.matcher(srcEmbed);
@@ -141,7 +141,7 @@ public class Article implements Parcelable {
} else {
flavorImageUri = flavorImage.attr("src");
- if (flavorImageUri.length() > 0 && flavorImageUri.startsWith("//")) {
+ if (!flavorImageUri.isEmpty() && flavorImageUri.startsWith("//")) {
flavorImageUri = "https:" + flavorImageUri;
}
@@ -157,7 +157,7 @@ public class Article implements Parcelable {
}
}
- if (flavorImageUri == null || flavorImageUri.length() == 0) {
+ if (flavorImageUri == null || flavorImageUri.isEmpty()) {
// consider attachments
if (attachments != null) {
for (Attachment a : attachments) {
@@ -185,7 +185,7 @@ public class Article implements Parcelable {
this.id = id;
this.title = "ID:" + id;
this.link = "";
- this.tags = new ArrayList<String>();
+ this.tags = new ArrayList<>();
}
@Override
@@ -231,13 +231,13 @@ public class Article implements Parcelable {
link = in.readString();
feed_id = in.readInt();
- if (tags == null) tags = new ArrayList<String>();
+ if (tags == null) tags = new ArrayList<>();
in.readStringList(tags);
content = in.readString();
excerpt = in.readString();
- attachments = new ArrayList<Attachment>();
+ attachments = new ArrayList<>();
in.readList(attachments, Attachment.class.getClassLoader());
feed_title = in.readString();
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java
index bee0a46d..bd108b25 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java
@@ -3,10 +3,10 @@ package org.fox.ttrss.types;
import android.os.Parcel;
import android.os.Parcelable;
-import java.util.ArrayList;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
-@SuppressWarnings("serial")
-public class ArticleList extends ArrayList<Article> implements Parcelable {
+public class ArticleList extends CopyOnWriteArrayList<Article> implements Parcelable {
@Override
public int describeContents() {
return 0;
@@ -55,6 +55,11 @@ public class ArticleList extends ArrayList<Article> implements Parcelable {
}
}
+ public String getAsCommaSeparatedIds() {
+ return this.stream().map(a -> String.valueOf(a.id))
+ .collect(Collectors.joining(","));
+ }
+
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Attachment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Attachment.java
index 6df0cb10..70212800 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Attachment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Attachment.java
@@ -39,7 +39,7 @@ public class Attachment implements Parcelable {
}
public String toString() {
- if (title != null && title.length() > 0) {
+ if (title != null && !title.isEmpty()) {
return title;
} else {
try {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedCategoryList.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedCategoryList.java
index 1671e8e8..ba8caaec 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedCategoryList.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedCategoryList.java
@@ -5,7 +5,6 @@ import android.os.Parcelable;
import java.util.ArrayList;
-@SuppressWarnings("serial")
public class FeedCategoryList extends ArrayList<FeedCategory> implements Parcelable {
public FeedCategoryList() { }
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedList.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedList.java
index fe4b8557..08164361 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedList.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/FeedList.java
@@ -5,7 +5,6 @@ import android.os.Parcelable;
import java.util.ArrayList;
-@SuppressWarnings("serial")
public class FeedList extends ArrayList<Feed> implements Parcelable {
public FeedList() { }
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DatabaseHelper.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DatabaseHelper.java
deleted file mode 100644
index e80f7116..00000000
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DatabaseHelper.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package org.fox.ttrss.util;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.provider.BaseColumns;
-
-
-public class DatabaseHelper extends SQLiteOpenHelper {
-
- @SuppressWarnings("unused")
- private final String TAG = this.getClass().getSimpleName();
- public static final String DATABASE_NAME = "OfflineStorage.db";
- public static final int DATABASE_VERSION = 5;
- private static DatabaseHelper m_instance;
- private Context m_context;
-
- private DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- m_context = context;
- }
-
- public static synchronized DatabaseHelper getInstance(Context context) {
-
- if (m_instance == null) {
- m_instance = new DatabaseHelper(context.getApplicationContext());
- }
-
- return m_instance;
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("DROP VIEW IF EXISTS cats_unread;");
- db.execSQL("DROP VIEW IF EXISTS feeds_unread;");
- db.execSQL("DROP TRIGGER IF EXISTS articles_set_modified;");
- db.execSQL("DROP TABLE IF EXISTS categories;");
- db.execSQL("DROP TABLE IF EXISTS feeds;");
- db.execSQL("DROP TABLE IF EXISTS articles;");
-
- db.execSQL("CREATE TABLE IF NOT EXISTS feeds (" +
- BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
- "feed_url TEXT, " +
- "title TEXT, " +
- "has_icon BOOLEAN, " +
- "cat_id INTEGER" +
- ");");
-
- db.execSQL("CREATE TABLE IF NOT EXISTS categories (" +
- BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
- "title TEXT" +
- ");");
-
- db.execSQL("CREATE TABLE IF NOT EXISTS articles (" +
- BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
- "unread BOOLEAN, " +
- "marked BOOLEAN, " +
- "published BOOLEAN, " +
- "score INTEGER, " +
- "updated INTEGER, " +
- "is_updated BOOLEAN, " +
- "title TEXT, " +
- "link TEXT, " +
- "feed_id INTEGER, " +
- "tags TEXT, " +
- "content TEXT, " +
- "author TEXT, " +
- "selected BOOLEAN, " +
- "modified BOOLEAN," +
- "modified_published BOOLEAN," +
- "modified_marked BOOLEAN" +
- ");");
-
- db.execSQL("CREATE TRIGGER articles_set_modified UPDATE OF marked, published, unread ON articles " +
- "BEGIN " +
- " UPDATE articles SET modified = 1 WHERE " + BaseColumns._ID + " = " + "OLD." + BaseColumns._ID + "; " +
- "END;");
-
- db.execSQL("CREATE VIEW feeds_unread AS SELECT feeds."+BaseColumns._ID+" AS "+BaseColumns._ID+", " +
- "feeds.title AS title, " +
- "cat_id, " +
- "SUM(articles.unread) AS unread FROM feeds " +
- "LEFT JOIN articles ON (articles.feed_id = feeds."+BaseColumns._ID+") " +
- "GROUP BY feeds."+BaseColumns._ID+", feeds.title;");
-
- //sqlite> select categories._id,categories.title,sum(articles.unread) from categories left j
- //oin feeds on (feeds.cat_id = categories._id) left join articles on (articles.feed_id = fee
- //ds._id) group by categories._id;
-
- db.execSQL("CREATE VIEW cats_unread AS SELECT categories."+BaseColumns._ID+" AS "+BaseColumns._ID+", " +
- "categories.title AS title, " +
- "SUM(articles.unread) AS unread FROM categories " +
- "LEFT JOIN feeds ON (feeds.cat_id = categories."+BaseColumns._ID+") "+
- "LEFT JOIN articles ON (articles.feed_id = feeds."+BaseColumns._ID+") " +
- "GROUP BY categories."+BaseColumns._ID+", categories.title;");
-
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- onCreate(db);
- }
-
- public boolean hasPendingOfflineData() {
- try {
- Cursor c = getReadableDatabase().query("articles",
- new String[] { "COUNT(*)" }, "modified = 1", null, null, null,
- null);
- if (c.moveToFirst()) {
- int modified = c.getInt(0);
- c.close();
-
- return modified > 0;
- }
- } catch (IllegalStateException e) {
- // db is closed? ugh
- }
-
- return false;
- }
-
- public boolean hasOfflineData() {
- try {
- Cursor c = getReadableDatabase().query("articles",
- new String[] { "COUNT(*)" }, null, null, null, null, null);
- if (c.moveToFirst()) {
- int modified = c.getInt(0);
- c.close();
-
- return modified > 0;
- }
- } catch (IllegalStateException e) {
- // db is closed?
- }
-
- return false;
- }
-
-}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DetailActivityScrollingViewBehavior.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DetailActivityScrollingViewBehavior.java
index 1d7b15df..e6371ff1 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DetailActivityScrollingViewBehavior.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/DetailActivityScrollingViewBehavior.java
@@ -2,13 +2,13 @@ package org.fox.ttrss.util;
import android.content.Context;
import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.view.ViewCompat;
+import androidx.preference.PreferenceManager;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.bottomappbar.BottomAppBar;
@@ -18,7 +18,7 @@ import java.util.List;
public class DetailActivityScrollingViewBehavior extends AppBarLayout.ScrollingViewBehavior {
- private SharedPreferences m_prefs;
+ private final SharedPreferences m_prefs;
public DetailActivityScrollingViewBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java
index fb2218c1..898cad88 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java
@@ -51,17 +51,18 @@ public class HeaderViewRecyclerAdapter extends RecyclerView.Adapter<RecyclerView
private static final int ADAPTER_MAX_TYPES = 100;
private RecyclerView.Adapter mWrappedAdapter;
- private List<View> mHeaderViews, mFooterViews;
- private Map<Class, Integer> mItemTypesOffset;
+ private final List<View> mHeaderViews;
+ private final List<View> mFooterViews;
+ private final Map<Class, Integer> mItemTypesOffset;
/**
* Construct a new header view recycler adapter
* @param adapter The underlying adapter to wrap
*/
public HeaderViewRecyclerAdapter(RecyclerView.Adapter adapter) {
- mHeaderViews = new ArrayList<View>();
- mFooterViews = new ArrayList<View>();
- mItemTypesOffset = new HashMap<Class, Integer>();
+ mHeaderViews = new ArrayList<>();
+ mFooterViews = new ArrayList<>();
+ mItemTypesOffset = new HashMap<>();
setWrappedAdapter(adapter);
}
@@ -176,7 +177,7 @@ public class HeaderViewRecyclerAdapter extends RecyclerView.Adapter<RecyclerView
return mItemTypesOffset.get(mWrappedAdapter.getClass());
}
- private RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() {
+ private final RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
super.onChanged();
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 1df20837..49883d23 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
@@ -24,9 +24,9 @@ public class HeadlinesRequest extends ApiRequest {
private final String TAG = this.getClass().getSimpleName();
private int m_offset = 0;
- private OnlineActivity m_activity;
- private ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles;
- private Feed m_feed;
+ private final OnlineActivity m_activity;
+ private final ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles;
+ private final Feed m_feed;
protected boolean m_firstIdChanged = false;
protected int m_firstId = 0;
@@ -72,8 +72,6 @@ public class HeadlinesRequest extends ApiRequest {
Type listType = new TypeToken<List<Article>>() {}.getType();
articles = new Gson().fromJson(content.get(1), listType);
} else {
- header = null;
-
Type listType = new TypeToken<List<Article>>() {}.getType();
articles = new Gson().fromJson(content, listType);
}
@@ -87,11 +85,6 @@ public class HeadlinesRequest extends ApiRequest {
while (m_articles.size() > HeadlinesFragment.HEADLINES_BUFFER_MAX) {
m_articles.remove(0);
}
-
- /*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();
@@ -103,17 +96,6 @@ public class HeadlinesRequest extends ApiRequest {
m_articles.add(f);
}
- /*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);
- else */
-
- //m_activity.setLoadingStatus(R.string.blank, false);
-
return;
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/PrefsBackupAgent.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/PrefsBackupAgent.java
deleted file mode 100644
index 2b33615f..00000000
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/PrefsBackupAgent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.fox.ttrss.util;
-
-import android.app.backup.BackupAgentHelper;
-import android.app.backup.SharedPreferencesBackupHelper;
-
-public class PrefsBackupAgent extends BackupAgentHelper {
- // The name of the SharedPreferences file
- static final String PREFS = "org.fox.ttrss_preferences";
-
- // A key to uniquely identify the set of backup data
- static final String PREFS_BACKUP_KEY = "prefs";
-
- // Allocate a helper and add it to the backup agent
- @Override
- public void onCreate() {
- SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);
- addHelper(PREFS_BACKUP_KEY, helper);
- }
-}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/SimpleLoginManager.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/SimpleLoginManager.java
index 7502a95c..abbe1ffa 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/SimpleLoginManager.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/SimpleLoginManager.java
@@ -14,7 +14,7 @@ public abstract class SimpleLoginManager {
private final String TAG = this.getClass().getSimpleName();
protected class LoginRequest extends ApiRequest {
- private int m_requestId;
+ private final int m_requestId;
protected String m_sessionId;
protected int m_apiLevel;
protected Context m_context;
@@ -55,8 +55,7 @@ public abstract class SimpleLoginManager {
}
};
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("sid", m_sessionId);
map.put("op", "getApiLevel");
@@ -80,7 +79,7 @@ public abstract class SimpleLoginManager {
public void logIn(Context context, int requestId, final String login, final String password) {
LoginRequest ar = new LoginRequest(context, requestId);
- HashMap<String, String> map = new HashMap<String, String>();
+ HashMap<String, String> map = new HashMap<>();
map.put("op", "login");
map.put("user", login.trim());
map.put("password", password.trim());
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java
index c86b3810..d525cb90 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java
@@ -7,11 +7,12 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
+import androidx.preference.PreferenceManager;
+
import org.fox.ttrss.CommonActivity;
import org.fox.ttrss.OnlineActivity;
import org.fox.ttrss.R;
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java
index 3e2d2eaf..43b12d9e 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java
@@ -10,12 +10,12 @@ import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.RemoteViews;
import androidx.annotation.NonNull;
import androidx.core.app.JobIntentService;
+import androidx.preference.PreferenceManager;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -58,19 +58,16 @@ public class WidgetUpdateService extends JobIntentService {
Log.d(TAG, "service update requested but network is not available, try: " + retryCount);
if (retryCount < 10) {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- Intent serviceIntent = new Intent(getApplicationContext(), WidgetUpdateService.class);
- serviceIntent.putExtra("retryCount", retryCount + 1);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- startForegroundService(serviceIntent);
- } else {
- startService(serviceIntent);
- }
-
+ new Handler().postDelayed(() -> {
+ Intent serviceIntent = new Intent(getApplicationContext(), WidgetUpdateService.class);
+ serviceIntent.putExtra("retryCount", retryCount + 1);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ startForegroundService(serviceIntent);
+ } else {
+ startService(serviceIntent);
}
+
}, 3 * 1000);
} else {
updateWidgets(-1, UPDATE_RESULT_ERROR_OTHER);
@@ -83,7 +80,7 @@ public class WidgetUpdateService extends JobIntentService {
m_prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
- if (m_prefs.getString("ttrss_url", "").trim().length() == 0) {
+ if (m_prefs.getString("ttrss_url", "").trim().isEmpty()) {
updateWidgets(-1, UPDATE_RESULT_ERROR_NEED_CONF);
@@ -124,7 +121,7 @@ public class WidgetUpdateService extends JobIntentService {
final String fSessionId = sessionId;
- HashMap<String, String> umap = new HashMap<String, String>();
+ HashMap<String, String> umap = new HashMap<>();
umap.put("op", "getUnread");
umap.put("feed_id", String.valueOf(feedId));
umap.put("sid", fSessionId);
diff --git a/org.fox.ttrss/src/main/res/menu/context_category.xml b/org.fox.ttrss/src/main/res/menu/context_category.xml
index f2547a6d..8f975c0a 100644
--- a/org.fox.ttrss/src/main/res/menu/context_category.xml
+++ b/org.fox.ttrss/src/main/res/menu/context_category.xml
@@ -3,10 +3,6 @@
<item
android:id="@+id/browse_headlines"
android:title="@string/category_browse_headlines"/>
-
- <!-- <item
- android:id="@+id/browse_articles"
- android:title="@string/category_browse_articles"/> -->
<item
android:id="@+id/browse_feeds"
@@ -15,8 +11,5 @@
<item
android:id="@+id/catchup_category"
android:title="@string/catchup"/>
-
- <item
- android:id="@+id/create_shortcut"
- android:title="@string/place_shortcut"/>
+
</menu> \ No newline at end of file
diff --git a/org.fox.ttrss/src/main/res/menu/context_feed.xml b/org.fox.ttrss/src/main/res/menu/context_feed.xml
index ba5ad55b..0b0cdc3e 100644
--- a/org.fox.ttrss/src/main/res/menu/context_feed.xml
+++ b/org.fox.ttrss/src/main/res/menu/context_feed.xml
@@ -17,10 +17,6 @@
android:title="@string/catchup"/>
<item
- android:id="@+id/create_shortcut"
- android:title="@string/place_shortcut"/>
-
- <item
android:id="@+id/unsubscribe_feed"
android:title="@string/unsubscribe"/>