diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt
index ef3f4a14c..148c2e1ef 100644
--- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt
+++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt
@@ -138,7 +138,16 @@ fun ZapVote(
)
.show()
}
- } else if (pollViewModel.isVoteAmountAtomic) {
+ } else if (pollViewModel.isVoteAmountAtomic()) {
+ // only allow one vote per option when min==max, i.e. atomic vote amount specified
+ if (pollViewModel.isPollOptionZappedBy(pollOption, account.userProfile())) {
+ scope.launch {
+ Toast
+ .makeText(context, R.string.one_vote_per_user_on_atomic_votes, Toast.LENGTH_SHORT)
+ .show()
+ }
+ return@combinedClickable
+ }
accountViewModel.zap(
baseNote,
pollViewModel.valueMaximum!!.toLong() * 1000,
@@ -263,11 +272,12 @@ fun ZapVoteAmountChoicePopup(
}
)
+ val isValidInputAmount = pollViewModel.isValidInputVoteAmount(amount)
Button(
modifier = Modifier.padding(horizontal = 3.dp),
- enabled = pollViewModel.isValidInputVoteAmount(amount),
+ enabled = isValidInputAmount,
onClick = {
- if (amount != null) {
+ if (amount != null && isValidInputAmount) {
accountViewModel.zap(
baseNote,
amount * 1000,
@@ -276,8 +286,8 @@ fun ZapVoteAmountChoicePopup(
context,
onError
)
+ onDismiss()
}
- onDismiss()
},
shape = RoundedCornerShape(20.dp),
colors = ButtonDefaults
@@ -291,7 +301,7 @@ fun ZapVoteAmountChoicePopup(
textAlign = TextAlign.Center,
modifier = Modifier.combinedClickable(
onClick = {
- if (amount != null) {
+ if (amount != null && isValidInputAmount) {
accountViewModel.zap(
baseNote,
amount * 1000,
@@ -300,8 +310,8 @@ fun ZapVoteAmountChoicePopup(
context,
onError
)
+ onDismiss()
}
- onDismiss()
},
onLongClick = {}
)
diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt
index 7e5da1765..77080d3e0 100644
--- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt
+++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt
@@ -28,12 +28,12 @@ class PollNoteViewModel {
closedAt = pollEvent?.getTagInt(CLOSED_AT)
}
+ fun isVoteAmountAtomic() = valueMaximum != null && valueMinimum != null && valueMinimum == valueMaximum
+
val isPollClosed: Boolean = closedAt?.let { // allow 2 minute leeway for zap to propagate
pollNote?.createdAt()?.plus(it * (86400 + 120))!! > Date().time / 1000
} == true
- val isVoteAmountAtomic = valueMaximum != null && valueMinimum != null && valueMinimum == valueMaximum
-
fun voteAmountPlaceHolderText(sats: String): String = if (valueMinimum == null && valueMaximum == null) {
sats
} else if (valueMinimum == null) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0fa1498cc..c73475bc1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -235,5 +235,6 @@
days
Poll is closed to new votes
Zap amount
+ Only one vote per user is allowed on this type of poll