Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -65,36 +65,36 @@ object DonationReminderHelper {

val newArticleCount = config.articleVisit + 1
if (newArticleCount >= config.articleFrequency) {
// Activate reminder, reset counters and increment goal reached
Prefs.donationReminderConfig = config.copy(
articleVisit = 0,
isReminderReady = true,
timesReminderShown = 0,
goalReachedCount = config.goalReachedCount + 1
goalReachedCount = config.goalReachedCount + 1,
continuousArticleVisit = config.continuousArticleVisit + 1
)
} else {
// Just increment articleVisit counter
Prefs.donationReminderConfig = config.copy(
articleVisit = newArticleCount
articleVisit = newArticleCount,
continuousArticleVisit = config.continuousArticleVisit + 1
)
}
}

fun shouldShowReminderNow(): Boolean {
if (!isEnabled) return false
return Prefs.donationReminderConfig.shouldShowNow()
}

fun recordReminderShown() {
val config = Prefs.donationReminderConfig
val shouldShowNow = config.shouldShowNow()
if (shouldShowNow) {
val newCount = config.timesReminderShown + 1
Prefs.donationReminderConfig = config.copy(
timesReminderShown = newCount,
promptLastSeen = LocalDate.now().toEpochDay(),
// Deactivate reminder if we've shown it max times
isReminderReady = newCount < MAX_REMINDER_PROMPTS
)
}
return shouldShowNow
val newCount = config.timesReminderShown + 1

Prefs.donationReminderConfig = config.copy(
timesReminderShown = if (newCount != MAX_REMINDER_PROMPTS) newCount else 0,
promptLastSeen = LocalDate.now().toEpochDay(),
// Deactivate reminder if we've shown it max times
isReminderReady = newCount < MAX_REMINDER_PROMPTS,
continuousArticleVisit = if (newCount != MAX_REMINDER_PROMPTS) config.continuousArticleVisit else 0
)
}

fun dismissReminder() {
Expand All @@ -115,7 +115,8 @@ data class DonationReminderConfig(
val donateAmount: Float = 0f,
val isReminderReady: Boolean = false,
val timesReminderShown: Int = 0,
val goalReachedCount: Int = 0
val goalReachedCount: Int = 0,
var continuousArticleVisit: Int = 0
) {
val isSetup: Boolean get() = userEnabled && setupTimestamp != 0L && articleFrequency > 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,18 +140,17 @@ class PageHeaderView(context: Context, attrs: AttributeSet? = null) : LinearLayo

private fun updateDonationReminderCardContent(config: DonationReminderConfig?) {
config?.let { config ->
val articleText = context.resources.getQuantityString(
R.plurals.donation_reminders_text_articles, config.articleFrequency, config.articleFrequency
)
val donationAmount = DonateUtil.currencyFormat.format(Prefs.donationReminderConfig.donateAmount)
val titleText = if (config.goalReachedCount == 1) {
val isFirstImpression = config.timesReminderShown == 1
val articleText = getArticleTextForDonationReminder(isFirstImpression)
val titleText = if (config.goalReachedCount == 1 || config.timesReminderShown >= 1) {
context.getString(R.string.donation_reminders_first_milestone_reached_prompt_title, articleText, donationAmount)
} else {
context.getString(R.string.donation_reminders_subsequent_milestone_reached_prompt_title, articleText)
}

val dateText = DateUtil.getMMMMdYYYY(Date(config.setupTimestamp))
val messageText = context.getString(R.string.donation_reminders_prompt_message, dateText, articleText, donationAmount)
val messageText = context.getString(R.string.donation_reminders_prompt_message, dateText, getArticleTextForDonationReminder(false), donationAmount)
val positiveButtonText = context.getString(R.string.donation_reminders_prompt_positive_button)
val negativeButtonText = context.getString(R.string.donation_reminders_prompt_negative_button)
binding.donationReminderCardView.setTitle(titleText)
Expand All @@ -168,6 +167,19 @@ class PageHeaderView(context: Context, attrs: AttributeSet? = null) : LinearLayo
}
}

private fun getArticleTextForDonationReminder(isContinuousCount: Boolean): String {
val config = Prefs.donationReminderConfig
val articlesRead = if (isContinuousCount) {
config.continuousArticleVisit
} else {
config.articleFrequency
}

return context.resources.getQuantityString(
R.plurals.donation_reminders_text_articles, articlesRead, articlesRead
)
}

fun maybeShowDonationReminderCard() {
if (DonationReminderHelper.shouldShowReminderNow()) {
DonorExperienceEvent.logDonationReminderAction(
Expand All @@ -176,6 +188,7 @@ class PageHeaderView(context: Context, attrs: AttributeSet? = null) : LinearLayo
)
updateDonationReminderCardContent(Prefs.donationReminderConfig)
binding.donationReminderCardView.isVisible = true
DonationReminderHelper.recordReminderShown()
} else {
binding.donationReminderCardView.isVisible = false
}
Expand Down
Loading