From cfe49cd0819426cee30feac27d3cbef1533587be Mon Sep 17 00:00:00 2001 From: folkemat <96705437+folkemat@users.noreply.github.com> Date: Fri, 6 Sep 2024 20:51:01 +0200 Subject: [PATCH] Tapping on a message in the inbox marks it as read --- .../redreader/common/PrefsUtility.java | 8 ++++ .../redreader/reddit/RedditAPI.java | 35 ++++++++++++++ .../redreader/views/RedditInboxItemView.java | 47 +++++++++++++++++++ src/main/res/values/strings.xml | 5 ++ src/main/res/xml/prefs_behaviour.xml | 8 ++++ 5 files changed, 103 insertions(+) diff --git a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java index 1262439fb..384a6a65a 100644 --- a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java +++ b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java @@ -117,6 +117,8 @@ public static boolean isRefreshRequired(final Context context, final String key) || key.equals(context.getString(R.string.pref_behaviour_pinned_subredditsort_key)) || key.equals(context.getString( R.string.pref_behaviour_blocked_subredditsort_key)) + || key.equals(context.getString( + R.string.pref_behaviour_inbox_tapping_is_reading_key)) || key.equals(context.getString( R.string.pref_appearance_hide_headertoolbar_commentlist_key)) || key.equals(context.getString( @@ -887,6 +889,12 @@ public static boolean pref_behaviour_post_title_opens_comments() { false); } + public static boolean pref_behaviour_inbox_tapping_is_reading() { + return getBoolean( + R.string.pref_behaviour_inbox_tapping_is_reading_key, + false); + } + // pref_behaviour_imageview_mode public enum ImageViewMode { diff --git a/src/main/java/org/quantumbadger/redreader/reddit/RedditAPI.java b/src/main/java/org/quantumbadger/redreader/reddit/RedditAPI.java index 0fdbd5e96..8601e99d6 100644 --- a/src/main/java/org/quantumbadger/redreader/reddit/RedditAPI.java +++ b/src/main/java/org/quantumbadger/redreader/reddit/RedditAPI.java @@ -487,6 +487,41 @@ public void onDataStreamComplete( })); } + public static void markMessageAsRead( + final CacheManager cm, + final APIResponseHandler.ActionResponseHandler responseHandler, + final RedditAccount user, + final String messageId, + final Context context) { + + final LinkedList postFields = new LinkedList<>(); + + postFields.add(new PostField("id", messageId)); + + cm.makeRequest(createPostRequestUnprocessedResponse( + Constants.Reddit.getUri("/api/read_message"), + user, + postFields, + context, + new CacheRequestCallbacks() { + @Override + public void onFailure(@NonNull final RRError error) { + responseHandler.notifyFailure(error); + } + + @Override + public void onDataStreamComplete( + @NonNull final GenericFactory stream, + final TimestampUTC timestamp, + @NonNull final UUID session, + final boolean fromCache, + @Nullable final String mimetype) { + + responseHandler.notifySuccess(); + } + })); + } + public static void editComment( final CacheManager cm, final APIResponseHandler.ActionResponseHandler responseHandler, diff --git a/src/main/java/org/quantumbadger/redreader/views/RedditInboxItemView.java b/src/main/java/org/quantumbadger/redreader/views/RedditInboxItemView.java index 3a4717d10..6da264484 100644 --- a/src/main/java/org/quantumbadger/redreader/views/RedditInboxItemView.java +++ b/src/main/java/org/quantumbadger/redreader/views/RedditInboxItemView.java @@ -24,12 +24,22 @@ import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; + +import org.quantumbadger.redreader.account.RedditAccountManager; import org.quantumbadger.redreader.activities.BaseActivity; +import org.quantumbadger.redreader.activities.BugReportActivity; +import org.quantumbadger.redreader.cache.CacheManager; import org.quantumbadger.redreader.common.General; import org.quantumbadger.redreader.common.Optional; import org.quantumbadger.redreader.common.PrefsUtility; +import org.quantumbadger.redreader.common.RRError; import org.quantumbadger.redreader.common.RRThemeAttributes; +import org.quantumbadger.redreader.reddit.APIResponseHandler; +import org.quantumbadger.redreader.reddit.RedditAPI; import org.quantumbadger.redreader.reddit.prepared.RedditChangeDataManager; +import org.quantumbadger.redreader.reddit.prepared.RedditPreparedMessage; +import org.quantumbadger.redreader.reddit.prepared.RedditRenderableComment; import org.quantumbadger.redreader.reddit.prepared.RedditRenderableInboxItem; public class RedditInboxItemView extends LinearLayout { @@ -140,6 +150,43 @@ public void reset( public void handleInboxClick(final BaseActivity activity) { if(currentItem != null) { currentItem.handleInboxClick(activity); + + //Mark clicked msg as read + if (PrefsUtility.pref_behaviour_inbox_tapping_is_reading()) { + final String messageID; + //Two different types of inbox messages + if (currentItem instanceof RedditRenderableComment){ + final RedditRenderableComment comment = ((RedditRenderableComment) currentItem); + messageID = String.valueOf(comment.getIdAndType()); + } else if (currentItem instanceof RedditPreparedMessage){ + final RedditPreparedMessage message = ((RedditPreparedMessage) currentItem); + messageID = String.valueOf(message.idAndType); + } else { + return; + } + RedditAPI.markMessageAsRead( + CacheManager.getInstance(activity), + new APIResponseHandler.ActionResponseHandler(activity) { + @Override + protected void onSuccess() { + // Do nothing (result expected) + } + + @Override + protected void onFailure(@NonNull final RRError error) { + General.showResultDialog(activity, error); + } + + @Override + protected void onCallbackException(final Throwable t) { + BugReportActivity.handleGlobalError(activity, t); + } + }, + RedditAccountManager.getInstance(activity).getDefaultAccount(), + messageID, + activity + ); + } } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 4d1f752c7..06bff5353 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1902,4 +1902,9 @@ Horizontal padding Compact title + + + Inbox + pref_behaviour_inbox_tapping_is_reading + Tapping a message marks it as read diff --git a/src/main/res/xml/prefs_behaviour.xml b/src/main/res/xml/prefs_behaviour.xml index ff44f146e..b8cd47b6f 100644 --- a/src/main/res/xml/prefs_behaviour.xml +++ b/src/main/res/xml/prefs_behaviour.xml @@ -200,6 +200,14 @@ + + + + + +