diff --git a/app/src/main/java/org/wikipedia/donate/donationreminder/DonationReminderHelper.kt b/app/src/main/java/org/wikipedia/donate/donationreminder/DonationReminderHelper.kt index da6d87a845a..9d583204d84 100644 --- a/app/src/main/java/org/wikipedia/donate/donationreminder/DonationReminderHelper.kt +++ b/app/src/main/java/org/wikipedia/donate/donationreminder/DonationReminderHelper.kt @@ -60,36 +60,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() { @@ -110,7 +110,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 diff --git a/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.kt b/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.kt index 778ee5678f1..79e586a3d0f 100644 --- a/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.kt +++ b/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.kt @@ -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) @@ -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( @@ -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 }