commit 598128ea0d39667c6282d5d28819b2b99285dbaf
parent 26c850802b7f6751297a2f3b92ea1815cbad7322
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sun, 17 Mar 2024 12:06:33 +0100
feat(core/ui): ff menu toasts
Diffstat:
2 files changed, 46 insertions(+), 21 deletions(-)
diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json
@@ -76,6 +76,10 @@
},
"rules": {
+ "toasts": {
+ "enabled": "{ruleName} enabled",
+ "disabled": "{ruleName} disabled"
+ },
"modes": {
"blacklist": "Blacklist mode",
"whitelist": "Whitelist mode"
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
@@ -13,6 +13,11 @@ import android.widget.LinearLayout
import android.widget.ProgressBar
import android.widget.Switch
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.CheckCircleOutline
+import androidx.compose.material.icons.filled.Info
+import androidx.compose.material.icons.filled.NotInterested
+import androidx.compose.material.icons.filled.WarningAmber
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.remember
@@ -129,7 +134,10 @@ 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(context.translation["mark_as_seen.no_unseen_snaps_toast"])
+ context.inAppOverlay.showStatusToast(
+ Icons.Default.WarningAmber,
+ context.translation["mark_as_seen.no_unseen_snaps_toast"]
+ )
return
}
@@ -275,15 +283,16 @@ class FriendFeedInfoMenu : AbstractMenu() {
return conversationId to focusedConversationTargetUser
}
- private fun createToggleFeature(viewConsumer: ((View) -> Unit), text: String, isChecked: () -> Boolean, toggle: (Boolean) -> Unit) {
- val switch = Switch(context.androidContext)
- switch.text = context.translation[text]
- switch.isChecked = isChecked()
- switch.applyTheme(hasRadius = true)
- switch.setOnCheckedChangeListener { _: CompoundButton?, checked: Boolean ->
- toggle(checked)
- }
- viewConsumer(switch)
+ private fun createToggleFeature(viewConsumer: ((View) -> Unit), value: String, checked: () -> Boolean, toggle: (Boolean) -> Unit) {
+ viewConsumer(Switch(context.androidContext).apply {
+ text = this@FriendFeedInfoMenu.context.translation[value]
+ isChecked = checked()
+ applyTheme(hasRadius = true)
+ isSoundEffectsEnabled = false
+ setOnCheckedChangeListener { _, checked ->
+ toggle(checked)
+ }
+ })
}
override fun inject(parent: ViewGroup, view: View, viewConsumer: ((View) -> Unit)) {
@@ -315,13 +324,22 @@ class FriendFeedInfoMenu : AbstractMenu() {
createToggleFeature(viewConsumer,
ruleFeature.ruleType.translateOptionKey(ruleState.key),
{ ruleFeature.getState(conversationId) },
- { ruleFeature.setState(conversationId, it) }
+ {
+ ruleFeature.setState(conversationId, it)
+ context.inAppOverlay.showStatusToast(
+ if (it) Icons.Default.CheckCircleOutline else Icons.Default.NotInterested,
+ context.translation.format("rules.toasts.${if (it) "enabled" else "disabled"}", "ruleName" to context.translation[ruleFeature.ruleType.translateOptionKey(ruleState.key)]),
+ durationMs = 1500
+ )
+ context.mainActivity?.triggerRootCloseTouchEvent()
+ }
)
}
if (friendFeedMenuOptions.contains("mark_snaps_as_seen")) {
viewConsumer(Button(view.context).apply {
text = translation["mark_snaps_as_seen"]
+ isSoundEffectsEnabled = false
applyTheme(view.width, hasRadius = true)
setOnClickListener {
this@FriendFeedInfoMenu.context.mainActivity?.triggerRootCloseTouchEvent()
@@ -334,26 +352,29 @@ class FriendFeedInfoMenu : AbstractMenu() {
viewConsumer(Button(view.context).apply {
text = translation["mark_stories_as_seen_locally"]
applyTheme(view.width, hasRadius = true)
+ isSoundEffectsEnabled = false
val translations = this@FriendFeedInfoMenu.context.translation.getCategory("mark_as_seen")
this@FriendFeedInfoMenu.context.apply {
setOnClickListener {
mainActivity?.triggerRootCloseTouchEvent()
- if (database.setStoriesViewedState(targetUser, true)) {
- shortToast(translations["seen_toast"])
- } else {
- shortToast(translations["already_seen_toast"])
- }
+ this@FriendFeedInfoMenu.context.inAppOverlay.showStatusToast(
+ Icons.Default.Info,
+ if (database.setStoriesViewedState(targetUser, true)) translations["seen_toast"]
+ else translations["already_seen_toast"],
+ durationMs = 2500
+ )
}
setOnLongClickListener {
context.vibrateLongPress()
mainActivity?.triggerRootCloseTouchEvent()
- if (database.setStoriesViewedState(targetUser, false)) {
- shortToast(translations["unseen_toast"])
- } else {
- shortToast(translations["already_unseen_toast"])
- }
+ this@FriendFeedInfoMenu.context.inAppOverlay.showStatusToast(
+ Icons.Default.Info,
+ if (database.setStoriesViewedState(targetUser, false)) translations["unseen_toast"]
+ else translations["already_unseen_toast"],
+ durationMs = 2500
+ )
true
}
}