summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-12 10:33:38 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-12 10:33:38 +0300
commit03a046da31b6f3333294f5046b76687a9b7f6e6a (patch)
treeba856fdfc883b8be836fc7dd537152fd9c387466
parentdac515e79b40b9a3dbc2b05f216480b72fea11bb (diff)
drop unused recycler adapter with headers, minor cleanup of other stuff
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java3
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java30
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java13
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java220
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java13
5 files changed, 22 insertions, 257 deletions
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 5bef0dd2..dcd378d5 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
@@ -15,7 +15,6 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceManager;
-import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
@@ -156,7 +155,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
m_refreshInProgress = true;
- @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) {
+ @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, Application.getArticles()) {
@Override
protected void onPostExecute(JsonElement result) {
if (isDetached() || !isAdded()) return;
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 32943961..215c379e 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
@@ -72,7 +72,6 @@ import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Attachment;
import org.fox.ttrss.types.Feed;
-import org.fox.ttrss.util.HeaderViewRecyclerAdapter;
import org.fox.ttrss.util.HeadlinesRequest;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
@@ -105,7 +104,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private SharedPreferences m_prefs;
- private HeaderViewRecyclerAdapter m_adapter;
+ private ArticleListAdapter m_adapter;
private final ArticleList m_readArticles = new ArticleList();
private HeadlinesEventListener m_listener;
private OnlineActivity m_activity;
@@ -216,7 +215,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (info != null) {
- Article article = getArticleAtPosition(info.position - m_adapter.getHeaderCount());
+ Article article = getArticleAtPosition(info.position);
if (!onArticleMenuItemSelected(item, article, info.position))
return super.onContextItemSelected(item);
@@ -300,9 +299,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_list.setLayoutManager(m_layoutManager);
m_list.setItemAnimator(new DefaultItemAnimator());
- ArticleListAdapter adapter = new ArticleListAdapter(Application.getArticles());
-
- m_adapter = new HeaderViewRecyclerAdapter(adapter);
+ m_adapter = new ArticleListAdapter(Application.getArticles());
m_list.setAdapter(m_adapter);
@@ -318,7 +315,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
- int position = viewHolder.getBindingAdapterPosition() - m_adapter.getHeaderCount();
+ int position = viewHolder.getBindingAdapterPosition();
Article article = getArticleAtPosition(position);
@@ -332,10 +329,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
final int adapterPosition = viewHolder.getBindingAdapterPosition();
- final int position = adapterPosition - m_adapter.getHeaderCount();
- try {
- final Article article = getArticleAtPosition(position);
+ try {
+ final Article article = getArticleAtPosition(adapterPosition);
final boolean wasUnread;
if (article != null && article.id > 0) {
@@ -348,7 +344,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
wasUnread = false;
}
- Application.getArticles().remove(position);
+ Application.getArticles().remove(adapterPosition);
m_adapter.notifyDataSetChanged();
Snackbar.make(m_list, R.string.headline_undo_row_prompt, Snackbar.LENGTH_LONG)
@@ -359,7 +355,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_activity.saveArticleUnread(article);
}
- Application.getArticles().add(position, article);
+ Application.getArticles().add(adapterPosition, article);
m_adapter.notifyItemInserted(adapterPosition);
m_adapter.notifyItemRangeChanged(adapterPosition, 1);
}).show();
@@ -400,11 +396,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
//Log.d(TAG, "onScrolled: FVI=" + firstVisibleItem + " LVI=" + lastVisibleItem);
- if (m_prefs.getBoolean("headlines_mark_read_scroll", false) && firstVisibleItem > m_adapter.getHeaderCount()) {
+ if (m_prefs.getBoolean("headlines_mark_read_scroll", false) && firstVisibleItem > 0) {
- if (firstVisibleItem <= Application.getArticles().size() + m_adapter.getHeaderCount()) {
+ if (firstVisibleItem <= Application.getArticles().size()) {
- Article a = getArticleAtPosition(firstVisibleItem - m_adapter.getHeaderCount() - 1);
+ Article a = getArticleAtPosition(firstVisibleItem);
if (a != null && a.unread) {
Log.d(TAG, "title=" + a.title);
@@ -487,7 +483,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
final String sessionId = m_activity.getSessionId();
final boolean isCat = m_feed.is_cat;
- @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) {
+ @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, Application.getArticles()) {
@Override
protected void onPostExecute(JsonElement result) {
if (isDetached() || !isAdded()) return;
@@ -1575,7 +1571,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public int getArticlePositionById(int id) {
for (int i = 0; i < Application.getArticles().size(); i++) {
if (Application.getArticles().get(i).id == id) {
- return i + m_adapter.getHeaderCount();
+ return i;
}
}
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 bd108b25..d18a1233 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,6 +3,7 @@ package org.fox.ttrss.types;
import android.os.Parcel;
import android.os.Parcelable;
+import java.util.ListIterator;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
@@ -43,15 +44,15 @@ public class ArticleList extends CopyOnWriteArrayList<Article> implements Parcel
readFromParcel(in);
}
+ /** strips all trailing items with negative IDs (Article.TYPE_LOADMORE, Article.TYPE_AMR_FOOTER) */
public void stripFooters() {
- for (int i = this.size()-1; i >= 0; i--) {
- Article a = this.get(i);
+ for (ListIterator<Article> iterator = this.listIterator(size()); iterator.hasPrevious();) {
+ final Article article = iterator.previous();
- if (a.id < 0) {
- this.remove(a);
- } else if (a.id > 0) {
+ if (article.id < 0)
+ this.remove(article);
+ else
break;
- }
}
}
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
deleted file mode 100755
index 898cad88..00000000
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeaderViewRecyclerAdapter.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package org.fox.ttrss.util;
-
-/*
- * Copyright (C) 2014 darnmason
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * <p>
- * RecyclerView adapter designed to wrap an existing adapter allowing the addition of
- * header views and footer views.
- * </p>
- * <p>
- * I implemented it to aid with the transition from ListView to RecyclerView where the ListView's
- * addHeaderView and addFooterView methods were used. Using this class you may initialize your
- * header views in the Fragment/Activity and add them to the adapter in the same way you used to
- * add them to a ListView.
- * </p>
- * <p>
- * I also required to be able to swap out multiple adapters with different content, therefore
- * setAdapter may be called multiple times.
- * </p>
- * Created by darnmason on 07/11/2014.
- */
-public class HeaderViewRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
-
- private static final int HEADERS_START = Integer.MIN_VALUE;
- private static final int FOOTERS_START = Integer.MIN_VALUE + 10;
- private static final int ITEMS_START = Integer.MIN_VALUE + 20;
- private static final int ADAPTER_MAX_TYPES = 100;
-
- private RecyclerView.Adapter mWrappedAdapter;
- 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<>();
- mFooterViews = new ArrayList<>();
- mItemTypesOffset = new HashMap<>();
- setWrappedAdapter(adapter);
- }
-
- /**
- * Replaces the underlying adapter, notifying RecyclerView of changes
- * @param adapter The new adapter to wrap
- */
- public void setAdapter(RecyclerView.Adapter adapter) {
- if(mWrappedAdapter != null && mWrappedAdapter.getItemCount() > 0) {
- notifyItemRangeRemoved(getHeaderCount(), mWrappedAdapter.getItemCount());
- }
- setWrappedAdapter(adapter);
- notifyItemRangeInserted(getHeaderCount(), mWrappedAdapter.getItemCount());
- }
-
- @Override
- public int getItemViewType(int position) {
- int hCount = getHeaderCount();
- if (position < hCount) return HEADERS_START + position;
- else {
- int itemCount = mWrappedAdapter.getItemCount();
- if (position < hCount + itemCount) {
- return getAdapterTypeOffset() + mWrappedAdapter.getItemViewType(position - hCount);
- }
- else return FOOTERS_START + position - hCount - itemCount;
- }
- }
-
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
- if (viewType < HEADERS_START + getHeaderCount())
- return new StaticViewHolder(mHeaderViews.get(viewType - HEADERS_START));
- else if (viewType < FOOTERS_START + getFooterCount())
- return new StaticViewHolder(mFooterViews.get(viewType - FOOTERS_START));
- else {
- return mWrappedAdapter.onCreateViewHolder(viewGroup, viewType - getAdapterTypeOffset());
- }
- }
-
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
- int hCount = getHeaderCount();
- if (position >= hCount && position < hCount + mWrappedAdapter.getItemCount())
- mWrappedAdapter.onBindViewHolder(viewHolder, position - hCount);
- }
-
- /**
- * Add a static view to appear at the start of the RecyclerView. Headers are displayed in the
- * order they were added.
- * @param view The header view to add
- */
- public void addHeaderView(View view) {
- mHeaderViews.add(view);
- }
-
- /**
- * Add a static view to appear at the end of the RecyclerView. Footers are displayed in the
- * order they were added.
- * @param view The footer view to add
- */
- public void addFooterView(View view) {
- mFooterViews.add(view);
- }
-
- public void removeFooterView(View view) {
- mFooterViews.remove(view);
- }
-
- public void removeAllFooterViews() {
- mFooterViews.clear();
- }
-
- @Override
- public int getItemCount() {
- return getHeaderCount() + getFooterCount() + getWrappedItemCount();
- }
-
- /**
- * @return The item count in the underlying adapter
- */
- public int getWrappedItemCount() {
- return mWrappedAdapter.getItemCount();
- }
-
- /**
- * @return The number of header views added
- */
- public int getHeaderCount() {
- return mHeaderViews.size();
- }
-
- /**
- * @return The number of footer views added
- */
- public int getFooterCount() {
- return mFooterViews.size();
- }
-
- private void setWrappedAdapter(RecyclerView.Adapter adapter) {
- if (mWrappedAdapter != null) mWrappedAdapter.unregisterAdapterDataObserver(mDataObserver);
- mWrappedAdapter = adapter;
- Class adapterClass = mWrappedAdapter.getClass();
- if(!mItemTypesOffset.containsKey(adapterClass)) putAdapterTypeOffset(adapterClass);
- mWrappedAdapter.registerAdapterDataObserver(mDataObserver);
- }
-
- private void putAdapterTypeOffset(Class adapterClass) {
- mItemTypesOffset.put(adapterClass, ITEMS_START + mItemTypesOffset.size() * ADAPTER_MAX_TYPES);
- }
-
- private int getAdapterTypeOffset() {
- return mItemTypesOffset.get(mWrappedAdapter.getClass());
- }
-
- private final RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() {
- @Override
- public void onChanged() {
- super.onChanged();
- notifyDataSetChanged();
- }
-
- @Override
- public void onItemRangeChanged(int positionStart, int itemCount) {
- super.onItemRangeChanged(positionStart, itemCount);
- notifyItemRangeChanged(positionStart + getHeaderCount(), itemCount);
- }
-
- @Override
- public void onItemRangeInserted(int positionStart, int itemCount) {
- super.onItemRangeInserted(positionStart, itemCount);
- notifyItemRangeInserted(positionStart + getHeaderCount(), itemCount);
- }
-
- @Override
- public void onItemRangeRemoved(int positionStart, int itemCount) {
- super.onItemRangeRemoved(positionStart, itemCount);
- notifyItemRangeRemoved(positionStart + getHeaderCount(), itemCount);
- }
-
- @Override
- public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
- super.onItemRangeMoved(fromPosition, toPosition, itemCount);
- int hCount = getHeaderCount();
- // TODO: No notifyItemRangeMoved method?
- notifyItemRangeChanged(fromPosition + hCount, toPosition + hCount + itemCount);
- }
- };
-
- private static class StaticViewHolder extends RecyclerView.ViewHolder {
-
- public StaticViewHolder(View itemView) {
- super(itemView);
- }
- }
-}
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 49883d23..dd4d45ac 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
@@ -15,7 +15,6 @@ import org.fox.ttrss.HeadlinesFragment;
import org.fox.ttrss.OnlineActivity;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
-import org.fox.ttrss.types.Feed;
import java.lang.reflect.Type;
import java.util.List;
@@ -26,30 +25,20 @@ public class HeadlinesRequest extends ApiRequest {
private int m_offset = 0;
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;
protected int m_amountLoaded = 0;
- public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) {
+ public HeadlinesRequest(Context context, OnlineActivity activity, ArticleList articles) {
super(context);
m_articles = articles;
m_activity = activity;
- m_feed = feed;
}
protected void onPostExecute(JsonElement result) {
if (result != null) {
try {
-
- // check if we are returning results for correct feed
- /* if (Application.getInstance().m_activeFeed != null && !m_feed.equals(Application.getInstance().m_activeFeed)) {
- Log.d(TAG, "received results for wrong feed, bailing out.");
- return;
- } */
-
JsonArray content = result.getAsJsonArray();
if (content != null) {
final List<Article> articles;