diff options
11 files changed, 143 insertions, 278 deletions
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 6408f28d..b872d034 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java @@ -47,7 +47,8 @@ public class Application extends android.app.Application { out.putSerializable("gs:customSortTypes", m_customSortModes); } - public void load(Bundle in) { + /** @noinspection unchecked*/ + public void load(Bundle in) { if (in != null) { m_sessionId = in.getString("gs:sessionId"); m_apiLevel = in.getInt("gs:apiLevel"); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java index bda7393a..5bef0dd2 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java @@ -11,6 +11,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.preference.PreferenceManager; @@ -30,7 +31,7 @@ import java.util.HashMap; public class ArticlePager extends androidx.fragment.app.Fragment { private final String TAG = "ArticlePager"; - private RecyclerView.Adapter m_adapter; + private PagerAdapter m_adapter; private HeadlinesEventListener m_listener; protected Article m_article; private OnlineActivity m_activity; @@ -42,15 +43,14 @@ public class ArticlePager extends androidx.fragment.app.Fragment { private boolean m_lazyLoadDisabled; private ViewPager2 m_pager; - private class PagerAdapter extends FragmentStateAdapter { + private static class PagerAdapter extends FragmentStateAdapter { public PagerAdapter(FragmentActivity fa) { super(fa); } - private ArticleFragment m_currentFragment; - @Override + @NonNull public Fragment createFragment(int position) { try { Article article = Application.getArticles().get(position); @@ -73,10 +73,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment { return Application.getArticles().size(); } - public ArticleFragment getCurrentFragment() { - return m_currentFragment; - } - } public void initialize(Article article, Feed feed) { @@ -162,11 +158,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment { @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) { @Override - protected void onProgressUpdate(Integer... progress) { - m_activity.setProgress(progress[0] / progress[1] * 10000); - } - - @Override protected void onPostExecute(JsonElement result) { if (isDetached() || !isAdded()) return; @@ -192,7 +183,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { .setAction(R.string.reload, v -> refresh(false)).show(); } - if (m_amountLoaded < Integer.valueOf(m_prefs.getString("headlines_request_size", "15"))) { + if (m_amountLoaded < Integer.parseInt(m_prefs.getString("headlines_request_size", "15"))) { m_lazyLoadDisabled = true; } @@ -299,13 +290,13 @@ public class ArticlePager extends androidx.fragment.app.Fragment { } } - Log.d(TAG, "[AP] request more headlines, firstId=" + m_firstId); + Log.d(TAG, "[AP] request more headlines, firstId=" + m_firstId); req.execute(map); } @Override - public void onAttach(Activity activity) { + public void onAttach(@NonNull Activity activity) { super.onAttach(activity); m_listener = (HeadlinesEventListener)activity; 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 cd798f1a..cdc261b7 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/CommonActivity.java @@ -13,7 +13,6 @@ 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.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.ConnectivityManager; @@ -281,31 +280,16 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc @SuppressLint({ "NewApi", "ServiceCast" }) @SuppressWarnings("deprecation") public void copyToClipboard(String str) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - clipboard.setText(str); - } else { - android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - clipboard.setText(str); - } + android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + clipboard.setText(str); - Snackbar.make(findViewById(android.R.id.content), R.string.text_copied_to_clipboard, Snackbar.LENGTH_SHORT) + Snackbar.make(findViewById(android.R.id.content), R.string.text_copied_to_clipboard, Snackbar.LENGTH_SHORT) .setAction(R.string.dialog_close, v -> { }) .show(); } - public boolean isUiNightMode() { - try { - int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; - - return Configuration.UI_MODE_NIGHT_YES == nightModeFlags; - } catch (Exception e) { - return false; - } - } - protected void setAppTheme(SharedPreferences prefs) { String theme = prefs.getString("theme", CommonActivity.THEME_DEFAULT); @@ -334,7 +318,7 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc "headlines_swipe_to_dismiss", "headlines_mark_read_scroll", "headlines_request_size", "force_phone_layout", "open_on_startup"}; - m_needRestart = Arrays.asList(filter).indexOf(key) != -1; + m_needRestart = Arrays.asList(filter).contains(key); } private CustomTabsSession getCustomTabSession() { @@ -618,8 +602,7 @@ public class CommonActivity extends AppCompatActivity implements SharedPreferenc static public int dpToPx(Context context, int dp) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); - int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); - return px; + return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java index 67d73b23..78dad5e3 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java @@ -39,7 +39,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList setAppTheme(m_prefs); - super.onCreate(savedInstanceState); + super.onCreate(savedInstanceState); if (m_prefs.getBoolean("force_phone_layout", false)) { setContentView(R.layout.activity_detail_phone); @@ -329,13 +329,6 @@ ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(F invalidateOptionsMenu(); } - public void showSidebar(boolean show) { - if (!isSmallScreen() && !isPortrait()) { - findViewById(R.id.headlines_fragment).setVisibility(show ? View.VISIBLE : View.GONE); - invalidateOptionsMenu(); - } - } - @Override public void onHeadlinesLoaded(boolean appended) { HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); 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 5b8212d2..df398624 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java @@ -38,7 +38,6 @@ import org.fox.ttrss.types.FeedCategoryList; import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -99,9 +98,10 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt } for (FeedCategory c : cats) { - if (c.id == -1) { - specialCatFound = true; - } + if (c.id == -1) { + specialCatFound = true; + break; + } } m_cats.addAll(cats); @@ -149,7 +149,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt } try { - Collections.sort(m_cats, cmp); + m_cats.sort(cmp); } catch (IllegalArgumentException e) { e.printStackTrace(); } @@ -283,7 +283,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt m_swipeLayout = view.findViewById(R.id.feeds_swipe_container); - m_swipeLayout.setOnRefreshListener(() -> refresh()); + m_swipeLayout.setOnRefreshListener(this::refresh); m_list = view.findViewById(R.id.feeds); m_adapter = new FeedCategoryListAdapter(getActivity(), R.layout.feeds_row, m_cats); 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 28e56699..c936385b 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java @@ -41,7 +41,6 @@ import org.fox.ttrss.types.FeedList; import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -78,9 +77,9 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi params.put("sid", sessionId); params.put("include_nested", "true"); params.put("cat_id", String.valueOf(catId)); - if (unreadOnly) { - params.put("unread_only", String.valueOf(unreadOnly)); - } + + if (unreadOnly) + params.put("unread_only", "true"); return new FeedsLoader(getActivity().getApplicationContext(), params, catId); } @@ -154,16 +153,11 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi } else { m_activity.toast(al.getErrorMessage()); } - - //m_activity.setLoadingStatus(getErrorMessage(), false); } } @Override - public void onLoaderReset(Loader<JsonElement> loader) { - /*m_feeds.clear(); - m_adapter.notifyDataSetChanged();*/ - } + public void onLoaderReset(Loader<JsonElement> loader) { } @SuppressLint("DefaultLocale") static class FeedUnreadComparator implements Comparator<Feed> { @@ -203,9 +197,6 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi @Override public int compare(Feed a, Feed b) { - //Log.d(TAG, "A:" + a.title + " " + a.is_cat + " " + a.order_id); - //Log.d(TAG, "B:" + b.title + " " + b.is_cat + " " + b.order_id); - if (a.id >= 0 && b.id >= 0) if (a.is_cat && b.is_cat) if (a.order_id != 0 && b.order_id != 0) @@ -331,7 +322,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi m_swipeLayout = view.findViewById(R.id.feeds_swipe_container); - m_swipeLayout.setOnRefreshListener(() -> refresh()); + m_swipeLayout.setOnRefreshListener(this::refresh); m_list = view.findViewById(R.id.feeds); @@ -538,7 +529,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi } try { - Collections.sort(m_feeds, cmp); + m_feeds.sort(cmp); } catch (IllegalArgumentException e) { // sort order got changed in prefs or something e.printStackTrace(); 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 3937f938..c527730b 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryActivity.java @@ -70,22 +70,17 @@ public class GalleryActivity extends CommonActivity { GalleryEntry item = m_items.get(position); switch (item.type) { - case TYPE_IMAGE: - if (true) { - GalleryImageFragment frag = new GalleryImageFragment(); - frag.initialize(item.url); + case TYPE_IMAGE: { + GalleryImageFragment frag = new GalleryImageFragment(); + frag.initialize(item.url); - return frag; - } - break; + return frag; + } case TYPE_VIDEO: - if (true) { - GalleryVideoFragment frag = new GalleryVideoFragment(); - frag.initialize(item.url, item.coverUrl); + GalleryVideoFragment frag = new GalleryVideoFragment(); + frag.initialize(item.url, item.coverUrl); - return frag; - } - break; + return frag; } return null; @@ -225,7 +220,7 @@ public class GalleryActivity extends CommonActivity { } } - if ((firstFound || imgSrcFirst.equals("")) && item.url != null) { + if ((firstFound || imgSrcFirst.isEmpty()) && item.url != null) { if (m_items.isEmpty()) m_items.add(item); else diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java index addb48d3..8f9d5783 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryImageFragment.java @@ -47,7 +47,7 @@ public class GalleryImageFragment extends GalleryBaseFragment { imgView.setOnTouchListener(touchHandler); // shared element transitions stop GIFs from playing - if (m_url.toLowerCase().indexOf(".gif") == -1) { + if (!m_url.toLowerCase().contains(".gif")) { ViewCompat.setTransitionName(imgView, "gallery:" + m_url); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java index c07c3408..32943961 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java @@ -15,7 +15,6 @@ import android.media.MediaPlayer; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.Html; @@ -111,8 +110,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { private HeadlinesEventListener m_listener; private OnlineActivity m_activity; private SwipeRefreshLayout m_swipeLayout; - private int m_maxImageSize = 0; - boolean m_compactLayoutMode = false; + boolean m_compactLayoutMode = false; private RecyclerView m_list; private LinearLayoutManager m_layoutManager; @@ -176,22 +174,17 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_activity.shareArticle(article); return true; } else if (itemId == R.id.catchup_above) { - if (true) { + final Article fa = article; - final Article fa = article; + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()) + .setMessage(R.string.confirm_catchup_above) + .setPositiveButton(R.string.dialog_ok, + (dialog, which) -> catchupAbove(fa)) + .setNegativeButton(R.string.dialog_cancel, + (dialog, which) -> { }); - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()) - .setMessage(R.string.confirm_catchup_above) - .setPositiveButton(R.string.dialog_ok, - (dialog, which) -> catchupAbove(fa)) - .setNegativeButton(R.string.dialog_cancel, - (dialog, which) -> { - - }); - - Dialog dialog = builder.create(); - dialog.show(); - } + Dialog dialog = builder.create(); + dialog.show(); return true; } Log.d(TAG, "onArticleMenuItemSelected, unhandled id=" + item.getItemId()); @@ -235,12 +228,10 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { public HeadlinesFragment() { super(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Transition fade = new Fade(); + Transition fade = new Fade(); - setEnterTransition(fade); - setReenterTransition(fade); - } + setEnterTransition(fade); + setReenterTransition(fade); } @Override @@ -295,9 +286,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { DisplayMetrics metrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); - m_maxImageSize = (int) (128 * metrics.density + 0.5); - - Log.d(TAG, "maxImageSize=" + m_maxImageSize); View view = inflater.inflate(R.layout.fragment_headlines, container, false); @@ -312,14 +300,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_list.setLayoutManager(m_layoutManager); m_list.setItemAnimator(new DefaultItemAnimator()); - /* if (m_compactLayoutMode) { - MaterialDividerItemDecoration materialDivider = new MaterialDividerItemDecoration(m_list.getContext(), m_layoutManager.getOrientation()); - materialDivider.setDividerInsetStart(dpToPx(80)); - - m_list.addItemDecoration(materialDivider); - } */ - - ArticleListAdapter adapter = new ArticleListAdapter(getActivity(), R.layout.headlines_row, Application.getArticles()); + ArticleListAdapter adapter = new ArticleListAdapter(Application.getArticles()); m_adapter = new HeaderViewRecyclerAdapter(adapter); @@ -337,7 +318,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { @Override public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { - int position = viewHolder.getAdapterPosition() - m_adapter.getHeaderCount(); + int position = viewHolder.getBindingAdapterPosition() - m_adapter.getHeaderCount(); Article article = getArticleAtPosition(position); @@ -350,7 +331,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - final int adapterPosition = viewHolder.getAdapterPosition(); + final int adapterPosition = viewHolder.getBindingAdapterPosition(); final int position = adapterPosition - m_adapter.getHeaderCount(); try { @@ -400,18 +381,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); - /*if (newState != RecyclerView.SCROLL_STATE_IDLE) { - - try { - if (m_mediaPlayer != null && m_mediaPlayer.isPlaying()) { - m_mediaPlayer.pause(); - } - } catch (IllegalStateException e) { - // i guess it was already released, oh well - } - - }*/ - if (newState == RecyclerView.SCROLL_STATE_IDLE && m_prefs.getBoolean("headlines_mark_read_scroll", false)) { if (!m_readArticles.isEmpty()) { m_activity.toggleArticlesUnread(m_readArticles); @@ -520,11 +489,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) { @Override - protected void onProgressUpdate(Integer... progress) { - m_activity.setProgress(Math.round((((float) progress[0] / (float) progress[1]) * 10000))); - } - - @Override protected void onPostExecute(JsonElement result) { if (isDetached() || !isAdded()) return; @@ -554,7 +518,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } } - if (m_amountLoaded < Integer.valueOf(m_prefs.getString("headlines_request_size", "15"))) { + if (m_amountLoaded < Integer.parseInt(m_prefs.getString("headlines_request_size", "15"))) { //Log.d(TAG, "amount loaded < request size, disabling lazy load"); m_lazyLoadDisabled = true; } @@ -693,8 +657,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { public View flavorImageOverflow; public TextureView flavorVideoView; public MaterialButton attachmentsView; - //public int position; - public boolean flavorImageEmbedded; public ProgressTarget<String, GlideDrawable> flavorProgressTarget; public ArticleViewHolder(View v) { @@ -789,7 +751,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { private final TextDrawable.IBuilder m_drawableBuilder = TextDrawable.builder().round(); boolean flavorImageEnabled; - private final int m_minimumHeightToEmbed; private final int m_screenHeight; private int m_lastAddedPosition; @@ -812,14 +773,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { return false; } - public ArticleListAdapter(Context context, int textViewResourceId, ArticleList items) { + public ArticleListAdapter(ArticleList items) { super(); this.items = items; Display display = m_activity.getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); - m_minimumHeightToEmbed = size.y/3; m_screenHeight = size.y; String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT"); @@ -901,14 +861,14 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } if (holder.textImage != null) { - updateTextCheckedState(holder, article, position); + updateTextCheckedState(holder, article); holder.textImage.setOnClickListener(view -> { Log.d(TAG, "textImage : onclicked"); article.selected = !article.selected; - updateTextCheckedState(holder, article, m_list.getChildPosition(holder.view)); + updateTextCheckedState(holder, article); m_listener.onArticleListSelectionChange(getSelectedArticles()); @@ -967,7 +927,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { holder.markedView.setOnClickListener(v -> { article.marked = !article.marked; - m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view)); + m_adapter.notifyItemChanged(m_list.getChildAdapterPosition(holder.view)); m_activity.saveArticleMarked(article); }); @@ -999,27 +959,18 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { 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()); - -article.score = newScore; - -m_activity.saveArticleScore(article); - -m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view)); -} catch (NumberFormatException e) { -m_activity.toast(R.string.score_invalid); -e.printStackTrace(); -} -}) - .setNegativeButton(getString(R.string.cancel), -(dialog, which) -> { - -// - -}).setView(edit); + (dialog, which) -> { + try { + article.score = Integer.parseInt(edit.getText().toString()); + m_activity.saveArticleScore(article); + m_adapter.notifyItemChanged(m_list.getChildAdapterPosition(holder.view)); + } catch (NumberFormatException e) { + m_activity.toast(R.string.score_invalid); + e.printStackTrace(); + } + }) + .setNegativeButton(getString(R.string.cancel), + (dialog, which) -> { }).setView(edit); Dialog dialog = builder.create(); dialog.show(); @@ -1040,8 +991,7 @@ e.printStackTrace(); holder.publishedView.setOnClickListener(v -> { article.published = !article.published; - //m_adapter.notifyDataSetChanged(); - m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view)); + m_adapter.notifyItemChanged(m_list.getChildAdapterPosition(holder.view)); m_activity.saveArticlePublished(article); }); @@ -1134,27 +1084,27 @@ e.printStackTrace(); 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; -}); + 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(); }); @@ -1165,9 +1115,6 @@ return false; }); } - //Log.d(TAG, "IMG: " + article.flavorImageUri + " STREAM: " + article.flavorStreamUri + " H:" + article.flavorViewHeight); - //Log.d(TAG, "TAG:" + holder.flavorImageOverflow.getTag()); - holder.flavorImageView.setVisibility(View.VISIBLE); holder.flavorImageView.setMaxHeight((int)(m_screenHeight * 0.6f)); @@ -1225,7 +1172,7 @@ return false; } if (m_prefs.getBoolean("inline_video_player", false) && article.flavorImage != null && - "video".equals(article.flavorImage.tagName().toLowerCase()) && article.flavorStreamUri != null) { + "video".equalsIgnoreCase(article.flavorImage.tagName()) && article.flavorStreamUri != null) { holder.flavorImageView.setOnLongClickListener(v -> { releaseSurface(); @@ -1250,15 +1197,15 @@ return false; bar.setVisibility(View.VISIBLE); holder.flavorVideoView.setOnClickListener(v -> { -try { -if (m_mediaPlayer.isPlaying()) -m_mediaPlayer.pause(); -else -m_mediaPlayer.start(); -} catch (IllegalStateException e) { -releaseSurface(); -} -}); + try { + if (m_mediaPlayer.isPlaying()) + m_mediaPlayer.pause(); + else + m_mediaPlayer.start(); + } catch (IllegalStateException e) { + releaseSurface(); + } + }); m_activeTexture = holder.flavorVideoView; @@ -1285,15 +1232,14 @@ releaseSurface(); m_mediaPlayer.setDataSource(article.flavorStreamUri); m_mediaPlayer.setOnPreparedListener(mp -> { - -try { -bar.setVisibility(View.GONE); -mp.setLooping(true); -mp.start(); -} catch (IllegalStateException e) { -e.printStackTrace(); -} -}); + try { + bar.setVisibility(View.GONE); + mp.setLooping(true); + mp.start(); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + }); m_mediaPlayer.prepareAsync(); } catch (Exception e) { @@ -1389,7 +1335,8 @@ e.printStackTrace(); 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(item -> onArticleMenuItemSelected(item, article, m_list.getChildPosition(holder.view))); + popup.setOnMenuItemClickListener(item -> onArticleMenuItemSelected(item, article, + m_list.getChildAdapterPosition(holder.view))); popup.show(); }); @@ -1420,7 +1367,7 @@ e.printStackTrace(); return items.size(); } - private void updateTextCheckedState(final ArticleViewHolder holder, final Article article, final int position) { + private void updateTextCheckedState(final ArticleViewHolder holder, final Article article) { String tmp = !article.title.isEmpty() ? article.title.substring(0, 1).toUpperCase() : "?"; if (article.selected) { @@ -1464,7 +1411,7 @@ e.printStackTrace(); private void openGalleryForType(Article article, ArticleViewHolder holder, View transitionView) { //Log.d(TAG, "openGalleryForType: " + article + " " + holder + " " + transitionView); - if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) { + if ("iframe".equalsIgnoreCase(article.flavorImage.tagName())) { m_activity.openUri(Uri.parse(article.flavorStreamUri)); } else { @@ -1508,10 +1455,10 @@ e.printStackTrace(); private void adjustVideoKindView(ArticleViewHolder holder, Article article) { if (article.flavorImage != null) { - if (article.flavor_kind == Article.FLAVOR_KIND_YOUTUBE || "iframe".equals(article.flavorImage.tagName().toLowerCase())) { + if (article.flavor_kind == Article.FLAVOR_KIND_YOUTUBE || "iframe".equalsIgnoreCase(article.flavorImage.tagName())) { holder.flavorVideoKindView.setImageResource(R.drawable.baseline_play_circle_outline_24); holder.flavorVideoKindView.setVisibility(View.VISIBLE); - } else if (article.flavor_kind == Article.FLAVOR_KIND_VIDEO || "video".equals(article.flavorImage.tagName().toLowerCase())) { + } else if (article.flavor_kind == Article.FLAVOR_KIND_VIDEO || "video".equalsIgnoreCase(article.flavorImage.tagName())) { holder.flavorVideoKindView.setImageResource(R.drawable.baseline_play_circle_24); holder.flavorVideoKindView.setVisibility(View.VISIBLE); } else { @@ -1526,12 +1473,12 @@ e.printStackTrace(); int viewType = getItemViewType(position); if (origTitleColors[viewType] == null) // store original color - origTitleColors[viewType] = Integer.valueOf(tv.getCurrentTextColor()); + origTitleColors[viewType] = tv.getCurrentTextColor(); if (score < Article.SCORE_LOW) { tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); } else { - tv.setTextColor(origTitleColors[viewType].intValue()); + tv.setTextColor(origTitleColors[viewType]); tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); } } @@ -1621,14 +1568,6 @@ e.printStackTrace(); return null; } - public ArticleList getUnreadArticles() { - ArticleList tmp = new ArticleList(); - for (Article a : Application.getArticles()) { - if (a.unread) tmp.add(a); - } - return tmp; - } - public Article getActiveArticle() { return m_activeArticle; } @@ -1662,27 +1601,6 @@ e.printStackTrace(); return m_feed; } - public void setArticles(ArticleList articles) { - Application.getArticles().clear(); - Application.getArticles().addAll(articles); - - Application.getArticles().add(new Article(Article.TYPE_AMR_FOOTER)); - - m_adapter.notifyDataSetChanged(); - } - - public int pxToDp(int px) { - DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); - int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); - return dp; - } - - public int dpToPx(int dp) { - DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); - int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); - return px; - } - @Override public void onPause() { super.onPause(); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index 8080456c..04629561 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -193,8 +193,6 @@ public class OnlineActivity extends CommonActivity { super.onCreate(savedInstanceState); - SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE); - setContentView(R.layout.activity_login); Toolbar toolbar = findViewById(R.id.toolbar); @@ -265,9 +263,6 @@ public class OnlineActivity extends CommonActivity { @Override public boolean onContextItemSelected(android.view.MenuItem item) { - /* AdapterContextMenuInfo info = (AdapterContextMenuInfo) item - .getMenuInfo(); */ - final ArticlePager ap = (ArticlePager)getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); int itemId = item.getItemId(); @@ -458,18 +453,21 @@ public class OnlineActivity extends CommonActivity { if (hf != null) { String viewMode = getViewMode(); - //Log.d(TAG, "viewMode:" + getViewMode()); - int selectedIndex = 0; - if (viewMode.equals("all_articles")) { - selectedIndex = 1; - } else if (viewMode.equals("marked")) { - selectedIndex = 2; - } else if (viewMode.equals("published")) { - selectedIndex = 3; - } else if (viewMode.equals("unread")) { - selectedIndex = 4; + switch (viewMode) { + case "all_articles": + selectedIndex = 1; + break; + case "marked": + selectedIndex = 2; + break; + case "published": + selectedIndex = 3; + break; + case "unread": + selectedIndex = 4; + break; } MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this) @@ -910,15 +908,6 @@ public class OnlineActivity extends CommonActivity { req.execute(map); } - public static String articlesToIdString(ArticleList articles) { - String tmp = ""; - - for (Article a : articles) - tmp += a.id + ","; - - return tmp.replaceAll(",$", ""); - } - public void shareArticle(Article article) { if (article != null) { shareText(article.link, article.title); @@ -1055,7 +1044,7 @@ article.score = Integer.parseInt(edit.getText().toString()); HashMap<String, String> map = new HashMap<>(); map.put("sid", getSessionId()); map.put("op", "updateArticle"); - map.put("article_ids", articlesToIdString(articles)); + map.put("article_ids", articles.getAsCommaSeparatedIds()); map.put("mode", "2"); map.put("field", "0"); @@ -1068,8 +1057,8 @@ article.score = Integer.parseInt(edit.getText().toString()); HashMap<String, String> map = new HashMap<>(); map.put("sid", getSessionId()); map.put("op", "updateArticle"); - map.put("article_ids", articlesToIdString(articles)); - map.put("mode", "2"); + map.put("article_ids", articles.getAsCommaSeparatedIds()); + map.put("mode", "2"); map.put("field", "2"); req.execute(map); @@ -1082,8 +1071,8 @@ article.score = Integer.parseInt(edit.getText().toString()); HashMap<String, String> map = new HashMap<>(); map.put("sid", getSessionId()); map.put("op", "updateArticle"); - map.put("article_ids", articlesToIdString(articles)); - map.put("mode", "2"); + map.put("article_ids", articles.getAsCommaSeparatedIds()); + map.put("mode", "2"); map.put("field", "1"); req.execute(map); @@ -1174,7 +1163,7 @@ article.score = Integer.parseInt(edit.getText().toString()); } protected class LoginRequest extends ApiRequest { - boolean m_refreshAfterLogin = false; + boolean m_refreshAfterLogin; OnLoginFinishedListener m_listener; public LoginRequest(Context context, boolean refresh, OnLoginFinishedListener listener) { @@ -1255,8 +1244,6 @@ article.score = Integer.parseInt(edit.getText().toString()); Log.d(TAG, "Received API level: " + getApiLevel()); loginSuccess(m_refreshAfterLogin); - - return; } }; 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 a5011aaa..bd108b25 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java @@ -4,6 +4,7 @@ import android.os.Parcel; import android.os.Parcelable; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; public class ArticleList extends CopyOnWriteArrayList<Article> implements Parcelable { @Override @@ -54,6 +55,11 @@ public class ArticleList extends CopyOnWriteArrayList<Article> implements Parcel } } + public String getAsCommaSeparatedIds() { + return this.stream().map(a -> String.valueOf(a.id)) + .collect(Collectors.joining(",")); + } + @SuppressWarnings("rawtypes") public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { |