commit d89d7c0f8d2e98982c842935267cb35dfe26d05f
parent ccde97c3bba9f05eab1b68f2b6ccac957c9a7e2a
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sun,  4 Feb 2024 17:45:23 +0100

fix(core): mark as seen

Diffstat:
Mcommon/src/main/assets/lang/en_US.json | 8++++++++
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt | 18++++++++++++++----
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/ui/menu/impl/FriendFeedInfoMenu.kt | 26++++++++++++++++++++++----
3 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json @@ -967,6 +967,14 @@ "multiple_media_toast": "You can only send one media at a time" }, + "mark_as_seen": { + "no_unseen_snaps_toast": "No unseen Snaps found!", + "seen_toast": "Marked as seen!", + "unseen_toast": "Marked as unseen!", + "already_seen_toast": "Already marked as seen!", + "already_unseen_toast": "Already marked as unseen!" + }, + "conversation_preview": { "streak_expiration": "expires in {day} days {hour} hours {minute} minutes", "total_messages": "Total sent/received messages: {count}", diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt @@ -1,5 +1,6 @@ package me.rhunk.snapenhance.core.database +import android.content.ContentValues import android.database.Cursor import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase.OpenParams @@ -55,8 +56,8 @@ class DatabaseAccess( ) }.onFailure { context.log.error("Failed to open database ${database.fileName}!", it) - }.getOrNull()?.takeIf { !writeMode }?.also { - openedDatabases[database] = it + }.getOrNull()?.also { + if (!writeMode) openedDatabases[database] = it } } @@ -367,13 +368,22 @@ class DatabaseAccess( } } - fun markFriendStoriesAsSeen(userId: String) { + fun setStoriesViewedState(userId: String, viewed: Boolean): Boolean { + var success = false useDatabase(DatabaseType.MAIN, writeMode = true)?.apply { performOperation { - execSQL("UPDATE StorySnap SET viewed = 1 WHERE userId = ?", arrayOf(userId)) + success = update( + "StorySnap", + ContentValues().apply { + put("viewed", if (viewed) 1 else 0) + }, + "userId = ? AND viewed != ?", + arrayOf(userId, if (viewed) "1" else "0") + ) > 0 } close() } + return success } fun getAccessTokens(userId: String): Map<String, String>? { diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/ui/menu/impl/FriendFeedInfoMenu.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/ui/menu/impl/FriendFeedInfoMenu.kt @@ -36,6 +36,7 @@ import me.rhunk.snapenhance.core.ui.ViewAppearanceHelper import me.rhunk.snapenhance.core.ui.applyTheme import me.rhunk.snapenhance.core.ui.menu.AbstractMenu import me.rhunk.snapenhance.core.ui.triggerRootCloseTouchEvent +import me.rhunk.snapenhance.core.util.ktx.vibrateLongPress import java.net.HttpURLConnection import java.net.URL import java.text.DateFormat @@ -124,7 +125,7 @@ class FriendFeedInfoMenu : AbstractMenu() { private fun markAsSeen(conversationId: String) { val messaging = context.feature(Messaging::class) val messageIds = messaging.getFeedCachedMessageIds(conversationId)?.takeIf { it.isNotEmpty() } ?: run { - context.shortToast("No recent snaps found") + context.shortToast(context.translation["mark_as_seen.no_unseen_snaps_toast"]) return } @@ -329,10 +330,27 @@ class FriendFeedInfoMenu : AbstractMenu() { viewConsumer(Button(view.context).apply { text = translation["mark_stories_as_seen_locally"] applyTheme(view.width, hasRadius = true) - setOnClickListener { - this@FriendFeedInfoMenu.context.apply { + + val translations = this@FriendFeedInfoMenu.context.translation.getCategory("mark_as_seen") + + this@FriendFeedInfoMenu.context.apply { + setOnClickListener { mainActivity?.triggerRootCloseTouchEvent() - database.markFriendStoriesAsSeen(targetUser) + if (database.setStoriesViewedState(targetUser, true)) { + shortToast(translations["seen_toast"]) + } else { + shortToast(translations["already_seen_toast"]) + } + } + setOnLongClickListener { + context.vibrateLongPress() + mainActivity?.triggerRootCloseTouchEvent() + if (database.setStoriesViewedState(targetUser, false)) { + shortToast(translations["unseen_toast"]) + } else { + shortToast(translations["already_unseen_toast"]) + } + true } } })