diff options
38 files changed, 712 insertions, 1371 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 c96ea8bc..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 androidx.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 1527f64f..6408f28d 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 @@ -13,7 +13,7 @@ public class Application extends android.app.Application { // 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 ArticleList m_articles = new ArticleList(); + private final ArticleList m_articles = new ArticleList(); // we use this to pass a large temporary object between activities public Article tmpActiveArticle; @@ -21,7 +21,7 @@ public class Application extends android.app.Application { 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; 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 5065df06..86dd800e 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 androidx.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,13 @@ import android.webkit.WebViewClient; import android.widget.TextView; import androidx.core.text.HtmlCompat; +import androidx.preference.PreferenceManager; import com.google.android.material.button.MaterialButton; 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; @@ -129,15 +129,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 +149,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 +170,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 +178,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 +204,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 +233,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 != 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; } }); @@ -345,7 +324,7 @@ 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[^>+].*?"); 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 418e1dee..bda7393a 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,7 +6,6 @@ import android.content.SharedPreferences; import android.os.BadParcelableException; import android.os.Bundle; import android.os.Handler; -import androidx.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -14,6 +13,7 @@ import android.view.ViewGroup; 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 +22,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; @@ -137,24 +136,14 @@ public class ArticlePager extends androidx.fragment.app.Fragment { 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); } } } @@ -163,7 +152,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment { return view; } - @SuppressWarnings({ "serial" }) protected void refresh(final boolean append) { if (!append) { @@ -201,12 +189,7 @@ 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"))) { @@ -226,7 +209,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { if (m_article != null) { if (m_article.id == 0 || !Application.getArticles().containsId(m_article.id)) { - if (Application.getArticles().size() > 0) { + if (!Application.getArticles().isEmpty()) { m_article = Application.getArticles().get(0); m_listener.onArticleSelected(m_article, false); } @@ -267,7 +250,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; @@ -280,7 +263,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)); @@ -298,7 +281,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"); 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 d9c26589..cd798f1a 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,11 @@ 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 +22,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.SystemClock; -import androidx.preference.PreferenceManager; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; @@ -42,6 +39,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 +48,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 +80,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 +161,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 +182,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 +234,6 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc nmgr.createNotificationChannel(channel); } - m_databaseHelper = DatabaseHelper.getInstance(this); - m_prefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext()); @@ -311,12 +290,9 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc } 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) { + .setAction(R.string.dialog_close, v -> { - } - }) + }) .show(); } @@ -487,7 +463,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 +484,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 +578,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(); 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 b2d4830e..67d73b23 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 androidx.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; @@ -69,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); @@ -118,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(); } @@ -211,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()); } } } @@ -313,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); @@ -357,7 +348,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); 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 f5f7dc60..5b8212d2 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 androidx.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; @@ -48,7 +47,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 +59,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"); @@ -285,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(() -> refresh()); m_list = view.findViewById(R.id.feeds); m_adapter = new FeedCategoryListAdapter(getActivity(), R.layout.feeds_row, m_cats); @@ -335,7 +328,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt } 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; @@ -370,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); 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 9f4063d5..28e56699 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 androidx.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; @@ -54,7 +51,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,7 +73,7 @@ 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"); @@ -127,7 +124,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; @@ -255,21 +252,11 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi 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); - - } - }) + (dialog, which) -> m_activity.unsubscribeFeed(feed)) .setNegativeButton(R.string.dialog_cancel, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { + (dialog, which) -> { - } - }); + }); Dialog dlg = builder.create(); dlg.show(); @@ -344,12 +331,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(() -> refresh()); m_list = view.findViewById(R.id.feeds); @@ -358,12 +340,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); } @@ -439,7 +416,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi } 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; @@ -481,11 +458,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); 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 df9b8dc2..3937f938 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 androidx.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); @@ -106,7 +106,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 +172,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 +200,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; } @@ -226,7 +226,7 @@ public class GalleryActivity extends CommonActivity { } if ((firstFound || imgSrcFirst.equals("")) && item.url != null) { - if (m_items.size() == 0) + if (m_items.isEmpty()) m_items.add(item); else uncheckedItems.add(item); @@ -293,28 +293,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/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 d18d3298..c07c3408 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; @@ -19,7 +18,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import androidx.preference.PreferenceManager; import android.text.Html; import android.transition.Fade; import android.transition.Transition; @@ -35,9 +33,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 +48,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 +80,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,7 +107,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { private SharedPreferences m_prefs; private HeaderViewRecyclerAdapter m_adapter; - 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; @@ -187,20 +183,10 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { 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); - - } - }) + (dialog, which) -> catchupAbove(fa)) .setNegativeButton(R.string.dialog_cancel, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { + (dialog, which) -> { - } }); Dialog dialog = builder.create(); @@ -224,7 +210,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { tmp.add(a); } } - if (tmp.size() > 0) { + if (!tmp.isEmpty()) { m_activity.toggleArticlesUnread(tmp); //updateHeadlines(); } @@ -317,12 +303,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { 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); @@ -390,20 +371,17 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { 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); - } - - Application.getArticles().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(); } @@ -439,12 +417,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { 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); } } } @@ -476,12 +449,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { 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); } } @@ -506,7 +474,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { setActiveArticle(m_activeArticle); } - if (Application.getArticles().size() == 0) { + if (Application.getArticles().isEmpty()) { refresh(false); } @@ -525,7 +493,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { refresh(append, false); } - @SuppressWarnings({ "serial" }) public void refresh(final boolean append, boolean userInitiated) { Application.getArticles().stripFooters(); m_adapter.notifyDataSetChanged(); @@ -583,12 +550,7 @@ 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(); } } @@ -641,7 +603,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; @@ -660,7 +622,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)); @@ -688,7 +650,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"); @@ -740,18 +702,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); @@ -813,7 +772,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } private class ArticleListAdapter extends RecyclerView.Adapter<ArticleViewHolder> { - private ArticleList items; + private final ArticleList items; public static final int VIEW_NORMAL = 0; public static final int VIEW_UNREAD = 1; @@ -826,12 +785,12 @@ 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_minimumHeightToEmbed; + private final int m_screenHeight; private int m_lastAddedPosition; private final ConnectivityManager m_cmgr; @@ -919,67 +878,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); - 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_list.getChildPosition(holder.view)); - 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; + }); } } @@ -1020,17 +964,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { else holder.markedView.setIconTint(ColorStateList.valueOf(tvPrimary.data)); - holder.markedView.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - article.marked = !article.marked; + holder.markedView.setOnClickListener(v -> { + article.marked = !article.marked; - m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view)); + m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view)); - m_activity.saveArticleMarked(article); - } - }); + m_activity.saveArticleMarked(article); + }); } if (holder.scoreView != null) { @@ -1052,51 +992,38 @@ 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() { + holder.scoreView.setOnClickListener(v -> { + final EditText edit = new EditText(getActivity()); + edit.setText(String.valueOf(article.score)); - @Override - public void onClick(DialogInterface dialog, - int which) { + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()) + .setTitle(R.string.score_for_this_article) + .setPositiveButton(R.string.set_score, +(dialog, which) -> { - try { - int newScore = Integer.parseInt(edit.getText().toString()); +try { +int newScore = Integer.parseInt(edit.getText().toString()); - article.score = newScore; +article.score = newScore; - m_activity.saveArticleScore(article); +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) { +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), +(dialog, which) -> { - // +// - } - }).setView(edit); +}).setView(edit); - Dialog dialog = builder.create(); - dialog.show(); - } - }); + Dialog dialog = builder.create(); + dialog.show(); + }); } } @@ -1111,29 +1038,20 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { else holder.publishedView.setIconTint(ColorStateList.valueOf(tvPrimary.data)); - holder.publishedView.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - article.published = !article.published; - //m_adapter.notifyDataSetChanged(); - m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view)); + holder.publishedView.setOnClickListener(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); @@ -1191,75 +1109,60 @@ 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; - } - }); + 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(); - } - }); + popup.show(); + }); - holder.flavorImageView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - m_list.showContextMenuForChild(holder.view); - return true; - } - }); + holder.flavorImageView.setOnLongClickListener(v -> { + m_list.showContextMenuForChild(holder.view); + return true; + }); } //Log.d(TAG, "IMG: " + article.flavorImageUri + " STREAM: " + article.flavorStreamUri + " H:" + article.flavorViewHeight); @@ -1324,127 +1227,107 @@ 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; - } - }); + 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 -> { - m_activeTexture.setLayoutParams(lp); - } +try { +bar.setVisibility(View.GONE); +mp.setLooping(true); +mp.start(); +} catch (IllegalStateException 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) { - - } - } - ); + 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) { + + } + } + ); + + }); } 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)); } } @@ -1453,7 +1336,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(""); @@ -1484,44 +1367,32 @@ 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.getChildPosition(holder.view))); - popup.show(); - } - }); + popup.show(); + }); } } @@ -1550,7 +1421,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } private void updateTextCheckedState(final ArticleViewHolder holder, final Article article, final int position) { - String tmp = article.title.length() > 0 ? article.title.substring(0, 1).toUpperCase() : "?"; + String tmp = !article.title.isEmpty() ? article.title.substring(0, 1).toUpperCase() : "?"; if (article.selected) { holder.textImage.setImageDrawable(m_drawableBuilder.build(" ", 0xff616161)); 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 d2009ea0..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 androidx.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; @@ -210,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 +282,21 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList Application.getArticles().clear(); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); + new Handler().postDelayed(() -> { + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); - HeadlinesFragment hf = new HeadlinesFragment(); - hf.initialize(feed); + HeadlinesFragment hf = new HeadlinesFragment(); + hf.initialize(feed); - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); + ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - ft.commit(); + ft.commit(); - m_feedIsSelected = true; - m_userFeedSelected = selectedByUser; + m_feedIsSelected = true; + m_userFeedSelected = selectedByUser; - } - }, 250); + }, 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(); 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 29c82d7b..8080456c 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 androidx.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(); @@ -236,27 +214,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 +238,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()); @@ -345,13 +317,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 +331,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() { - - @Override - public void onClick(DialogInterface dialog, int id) { - int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition(); + copyToClipboard((String)itemUrls[selectedPosition]); + }).setPositiveButton(R.string.attachment_view, (dialog, 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 +382,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() { + (dialog3, which) -> { - @Override - public void onClick(DialogInterface dialog, - int which) { + // - // - - } }).setView(edit); - dialog = builder.create(); + Dialog dialog = builder.create(); dialog.show(); } return true; @@ -473,8 +417,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,42 +426,36 @@ 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()); @@ -545,34 +481,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 +518,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 +578,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 +592,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 +606,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 +630,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 +651,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 +671,7 @@ public class OnlineActivity extends CommonActivity { tmp.add(a); } } - if (tmp.size() > 0) { + if (!tmp.isEmpty()) { toggleArticlesUnread(tmp); hf.notifyUpdated(); invalidateOptionsMenu(); @@ -767,39 +679,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 +687,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 +729,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 +751,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 +819,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 +827,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 +845,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 +863,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 +873,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 +882,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 +892,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 +899,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)); @@ -1072,33 +932,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 +1036,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,8 +1052,7 @@ 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)); @@ -1217,8 +1065,7 @@ 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)); @@ -1232,8 +1079,7 @@ 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)); @@ -1280,13 +1126,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) { @@ -1337,7 +1183,6 @@ public class OnlineActivity extends CommonActivity { m_listener = listener; } - @SuppressWarnings("unchecked") @SuppressLint("StaticFieldLeak") protected void onPostExecute(JsonElement result) { if (result != null) { @@ -1415,8 +1260,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", "getApiLevel"); @@ -1447,7 +1291,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 67b535ce..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 androidx.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 8e5f93f8..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 androidx.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 3a18ccd5..a5011aaa 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,8 @@ package org.fox.ttrss.types; import android.os.Parcel; import android.os.Parcelable; -import java.util.ArrayList; import java.util.concurrent.CopyOnWriteArrayList; -@SuppressWarnings("serial") public class ArticleList extends CopyOnWriteArrayList<Article> implements Parcelable { @Override public int describeContents() { 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 f444ad98..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 androidx.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 0283305c..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; 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 b22c7e10..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 androidx.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 7ffe5b3d..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 androidx.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); |