Add expiry information to gift conversation items.

fork-5.53.8
Alex Hart 2022-05-16 12:49:17 -03:00 zatwierdzone przez Cody Henthorne
rodzic ce2418ce9f
commit a1025a8e9a
3 zmienionych plików z 57 dodań i 1 usunięć

Wyświetl plik

@ -13,6 +13,7 @@ import com.google.android.material.button.MaterialButton
import org.signal.core.util.DimensionUnit
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.BadgeImageView
import org.thoughtcrime.securesms.badges.gifts.Gifts.formatExpiry
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
import org.thoughtcrime.securesms.mms.GlideRequests
@ -50,7 +51,7 @@ class GiftMessageView @JvmOverloads constructor(
fun setGiftBadge(glideRequests: GlideRequests, giftBadge: GiftBadge, isOutgoing: Boolean, callback: Callback) {
titleView.setText(R.string.GiftMessageView__gift_badge)
descriptionView.text = resources.getQuantityString(R.plurals.GiftMessageView__lasts_for_d_months, 1, 1)
descriptionView.text = giftBadge.formatExpiry(context)
actionView.icon = null
actionView.setOnClickListener { callback.onViewGiftBadgeClicked() }
actionView.isEnabled = true

Wyświetl plik

@ -1,5 +1,9 @@
package org.thoughtcrime.securesms.badges.gifts
import android.content.Context
import org.signal.libsignal.zkgroup.InvalidInputException
import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.database.model.StoryType
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
@ -7,6 +11,8 @@ import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.Base64
import java.lang.Integer.min
import java.util.concurrent.TimeUnit
/**
* Helper object for Gift badges
@ -45,4 +51,36 @@ object Gifts {
giftBadge
)
}
/**
* @return the expiration time from the redemption token, in UNIX epoch seconds.
*/
private fun GiftBadge.getExpiry(): Long {
return try {
ReceiptCredentialPresentation(redemptionToken.toByteArray()).receiptExpirationTime
} catch (e: InvalidInputException) {
return 0L
}
}
fun GiftBadge.formatExpiry(context: Context): String {
val expiry = getExpiry()
val timeRemaining = TimeUnit.SECONDS.toMillis(expiry) - System.currentTimeMillis()
if (timeRemaining <= 0) {
return context.getString(R.string.Gifts__expired)
}
val days = TimeUnit.MILLISECONDS.toDays(timeRemaining).toInt()
if (days > 0) {
return context.resources.getQuantityString(R.plurals.Gifts__d_days_remaining, days, days)
}
val hours = TimeUnit.MILLISECONDS.toHours(timeRemaining).toInt()
if (hours > 0) {
return context.resources.getQuantityString(R.plurals.Gifts__d_hours_remaining, hours, hours)
}
val minutes = min(1, TimeUnit.MILLISECONDS.toMinutes(timeRemaining).toInt())
return context.resources.getQuantityString(R.plurals.Gifts__d_minutes_remaining, minutes, minutes)
}
}

Wyświetl plik

@ -4824,6 +4824,23 @@
<item quantity="one">Group Story · %1$d viewer</item>
<item quantity="other">Group Story · %1$d viewers</item>
</plurals>
<!-- Gift expiry days remaining -->
<plurals name="Gifts__d_days_remaining">
<item quantity="one">%1$d days remaining</item>
<item quantity="other">%1$d days remaining</item>
</plurals>
<!-- Gift expiry hours remaining -->
<plurals name="Gifts__d_hours_remaining">
<item quantity="one">%1$d hours remaining</item>
<item quantity="other">%1$d hours remaining</item>
</plurals>
<!-- Gift expiry minutes remaining -->
<plurals name="Gifts__d_minutes_remaining">
<item quantity="one">%1$d minute remaining</item>
<item quantity="other">%1$d minutes remaining</item>
</plurals>
<!-- Gift expiry expired -->
<string name="Gifts__expired">Expired</string>
<!-- EOF -->