diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-05-17 12:50:41 +0300 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-05-17 12:50:41 +0300 |
| commit | 58ca2ad6dfe82234362e6d8898bbd53ab4e2cfaa (patch) | |
| tree | 916fec8f31a1dcd4ff8a699abf385960b481ba7c /org.fox.ttrss/src | |
| parent | 046aaae1ed5e1cf1c0b14d908bfbfb468c41af27 (diff) | |
display disabled feeds and feeds with error status if returned by API
Diffstat (limited to 'org.fox.ttrss/src')
3 files changed, 35 insertions, 3 deletions
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 51a852fc..6d3fd988 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 @@ -6,9 +6,11 @@ import android.app.Dialog; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.content.res.ColorStateList; import android.graphics.Typeface; import android.os.Bundle; import android.util.Log; +import android.util.TypedValue; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; @@ -20,6 +22,7 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.preference.PreferenceManager; @@ -429,7 +432,9 @@ public class FeedsFragment extends Fragment implements OnSharedPreferenceChangeL return oldItem.id == newItem.id && oldItem.is_cat == newItem.is_cat && oldItem.title.equals(newItem.title) && - oldItem.unread == newItem.unread; + oldItem.unread == newItem.unread && + oldItem.update_interval != newItem.update_interval && + oldItem.last_error.equals(newItem.last_error); } } @@ -484,6 +489,14 @@ public class FeedsFragment extends Fragment implements OnSharedPreferenceChangeL holder.title.setTypeface(null, Typeface.NORMAL); } + TypedValue tv = new TypedValue(); + m_activity.getTheme().resolveAttribute(feed.last_error.isEmpty() ? R.attr.colorOnSurface : R.attr.colorError, tv, true); + + holder.title.setTextColor(ColorStateList.valueOf(ContextCompat.getColor(m_activity, tv.resourceId))); + + Log.d(TAG, feed.update_interval + " " + feed.title); + + holder.title.setAlpha(feed.update_interval == -1 ? 0.5f : 1f); } if (holder.unreadCounter != null) { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsModel.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsModel.java index bd6ca21f..171fb29a 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsModel.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsModel.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; public class FeedsModel extends AndroidViewModel implements ApiCommon.ApiCaller { private final String TAG = this.getClass().getSimpleName(); @@ -117,10 +118,12 @@ public class FeedsModel extends AndroidViewModel implements ApiCommon.ApiCaller JsonArray content = result.getAsJsonArray(); if (content != null) { - Type listType = new TypeToken<List<Feed>>() { - }.getType(); + Type listType = new TypeToken<List<Feed>>() {}.getType(); + List<Feed> feeds = new Gson().fromJson(content, listType); + feeds = feeds.stream().peek(Feed::fixNullFields).collect(Collectors.toList()); + m_feeds.postValue(feeds); } } catch (Exception e) { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Feed.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Feed.java index f8a2be8f..c1ec027a 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Feed.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Feed.java @@ -18,19 +18,23 @@ public class Feed implements Comparable<Feed>, Parcelable { public int cat_id; public int last_updated; public int order_id; + public String last_error; public boolean is_cat; + public int update_interval; transient public boolean always_open_headlines; public Feed(int id) { this.id = id; this.title = "ID:" + id; this.is_cat = false; + this.last_error = ""; } public Feed(int id, String title, boolean is_cat) { this.id = id; this.title = title; this.is_cat = is_cat; + this.last_error = ""; } public Feed(Feed feed) { @@ -44,6 +48,8 @@ public class Feed implements Comparable<Feed>, Parcelable { order_id = feed.order_id; is_cat = feed.is_cat; always_open_headlines = feed.always_open_headlines; + last_error = feed.last_error; + update_interval = feed.update_interval; } public static final int MARKED = -1; @@ -116,6 +122,12 @@ public class Feed implements Comparable<Feed>, Parcelable { return this.title.compareTo(feed.title); } + public void fixNullFields() { + if (feed_url == null) feed_url = ""; + if (title == null) title = ""; + if (last_error == null) last_error = ""; + } + @Override public int describeContents() { return 0; @@ -133,6 +145,8 @@ public class Feed implements Comparable<Feed>, Parcelable { out.writeInt(is_cat ? 1 : 0); out.writeInt(order_id); out.writeInt(always_open_headlines ? 1 : 0); + out.writeString(last_error); + out.writeInt(update_interval); } public void readFromParcel(Parcel in) { @@ -146,6 +160,8 @@ public class Feed implements Comparable<Feed>, Parcelable { is_cat = in.readInt() == 1; order_id = in.readInt(); always_open_headlines = in.readInt() == 1; + last_error = in.readString(); + update_interval = in.readInt(); } @SuppressWarnings("rawtypes") |