Skip to content

Commit d1db3b6

Browse files
coolteyWilliamraidbrant
authored
Donation reminder: instrumentation for v2 (#6110)
* Donation reminder: instrumentation for v2 * Verified * Code review comments * Remove the feature flag * Appends the ab test group before constructing the campaign id * Revert "Appends the ab test group before constructing the campaign id" This reverts commit aa9e654. * Append after constructed ID for campaign dialog --------- Co-authored-by: William Rai <[email protected]> Co-authored-by: Dmitry Brant <[email protected]>
1 parent ae2da60 commit d1db3b6

File tree

8 files changed

+48
-19
lines changed

8 files changed

+48
-19
lines changed

app/src/main/java/org/wikipedia/analytics/eventplatform/DonorExperienceEvent.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ open class DonorExperienceEvent {
3333
campaignId: String? = null,
3434
articleFrequency: Int? = null,
3535
donateAmount: Float? = null,
36-
settingSelect: Boolean? = null
36+
groupAssigned: String? = null
3737
) {
3838
val actionData = DonationRemindersActionData(
3939
defaultMilestone = defaultMilestone,
4040
campaignId = campaignId?.let { CampaignCollection.getFormattedCampaignId(campaignId) },
4141
articleFrequency = articleFrequency,
4242
donateAmount = donateAmount,
43-
settingSelect = settingSelect
43+
groupAssigned = groupAssigned
4444
)
4545
submit(
4646
action,
@@ -75,7 +75,6 @@ open class DonorExperienceEvent {
7575
@SerialName("campaign_id") val campaignId: String? = null,
7676
@SerialName("read_freq") val articleFrequency: Int? = null,
7777
@SerialName("donate_amount") val donateAmount: Float? = null,
78-
@SerialName("setting_select") val settingSelect: Boolean? = null,
79-
@SerialName("user_group") val userGroup: String? = null
78+
@SerialName("group") val groupAssigned: String? = null
8079
)
8180
}

app/src/main/java/org/wikipedia/donate/DonateDialog.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,26 +123,26 @@ class DonateDialog : ExtendedBottomSheetDialogFragment() {
123123
DonorExperienceEvent.logDonationReminderAction(
124124
activeInterface = "reminder_milestone",
125125
action = "gpay_click",
126-
campaignId = DonationReminderHelper.CAMPAIGN_ID
126+
campaignId = DonationReminderHelper.campaignId
127127
)
128128
(requireActivity() as? BaseActivity)?.launchDonateActivity(
129-
GooglePayComponent.getDonateActivityIntent(requireActivity(), filledAmount = donateAmount, campaignId = DonationReminderHelper.CAMPAIGN_ID))
129+
GooglePayComponent.getDonateActivityIntent(requireActivity(), filledAmount = donateAmount, campaignId = DonationReminderHelper.campaignId))
130130
}
131131
binding.donateGooglePayDifferentAmountButton.isVisible = true
132132
binding.donateGooglePayDifferentAmountButton.setOnClickListener {
133133
DonorExperienceEvent.logDonationReminderAction(
134134
activeInterface = "reminder_milestone",
135135
action = "other_gpay_click",
136-
campaignId = DonationReminderHelper.CAMPAIGN_ID
136+
campaignId = DonationReminderHelper.campaignId
137137
)
138138
(requireActivity() as? BaseActivity)?.launchDonateActivity(
139-
GooglePayComponent.getDonateActivityIntent(requireActivity(), campaignId = DonationReminderHelper.CAMPAIGN_ID))
139+
GooglePayComponent.getDonateActivityIntent(requireActivity(), campaignId = DonationReminderHelper.campaignId))
140140
}
141141
binding.donateOtherButton.setOnClickListener {
142142
DonorExperienceEvent.logDonationReminderAction(
143143
activeInterface = "reminder_milestone",
144144
action = "other_method_click",
145-
campaignId = DonationReminderHelper.CAMPAIGN_ID
145+
campaignId = DonationReminderHelper.campaignId
146146
)
147147
onDonateClicked()
148148
}

app/src/main/java/org/wikipedia/donate/donationreminder/DonationReminderActivity.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ class DonationReminderActivity : BaseActivity() {
3737
onFooterButtonClick = {
3838
if (viewModel.isFromSettings) {
3939
UriUtil.visitInExternalBrowser(this, getString(R.string.donation_reminders_experiment_url).toUri())
40-
val activeInterface = if (viewModel.isFromSettings) "global_setting" else "reminder_config"
4140
DonorExperienceEvent.logDonationReminderAction(
42-
activeInterface = activeInterface,
41+
activeInterface = "global_setting",
4342
action = "reminder_about_click"
4443
)
4544
} else {
@@ -56,9 +55,17 @@ class DonationReminderActivity : BaseActivity() {
5655
}
5756
),
5857
onLearnMoreClick = {
58+
DonorExperienceEvent.logDonationReminderAction(
59+
activeInterface = if (viewModel.isFromSettings) "global_setting" else "reminder_config",
60+
action = "overflow_learn_more_click"
61+
)
5962
UriUtil.visitInExternalBrowser(this, getString(R.string.donation_reminders_experiment_url).toUri())
6063
},
6164
onReportClick = {
65+
DonorExperienceEvent.logDonationReminderAction(
66+
activeInterface = if (viewModel.isFromSettings) "global_setting" else "reminder_config",
67+
action = "overflow_problem_click"
68+
)
6269
FeedbackUtil.composeEmail(this,
6370
subject = getString(R.string.donation_reminders_settings_report_email_subject),
6471
body = getString(R.string.donation_reminders_settings_report_email_body))
@@ -73,7 +80,8 @@ class DonationReminderActivity : BaseActivity() {
7380
if (!viewModel.isFromSettings) {
7481
DonorExperienceEvent.logDonationReminderAction(
7582
activeInterface = "reminder_config",
76-
action = "impression"
83+
action = "impression",
84+
campaignId = DonationReminderHelper.campaignId
7785
)
7886
}
7987
}

app/src/main/java/org/wikipedia/donate/donationreminder/DonationReminderHelper.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,25 @@ import org.wikipedia.util.ReleaseUtil
1313
import java.time.LocalDate
1414

1515
object DonationReminderHelper {
16-
const val CAMPAIGN_ID = "appmenu_reminder"
1716
const val MAX_REMINDER_PROMPTS = 2
1817
private val validReadCountOnSeconds = if (ReleaseUtil.isDevRelease) 1 else 15
1918

2019
private val isTestGroupUser = DonationReminderAbTest().isTestGroupUser()
2120
private val enabledCountries = listOf(
2221
"GB", "AU", "CA"
2322
)
24-
private val isInEligibleCountry get() = ReleaseUtil.isDevRelease || enabledCountries.contains(GeoUtil.geoIPCountry.orEmpty())
23+
val isInEligibleCountry get() = ReleaseUtil.isDevRelease || enabledCountries.contains(GeoUtil.geoIPCountry.orEmpty())
2524

2625
val defaultReadFrequencyOptions = listOf(5, 10, 15, 25, 50)
2726

28-
// TODO: remove the feature flag before Dec 1 2025.
2927
val isEnabled
30-
get() = ReleaseUtil.isDevRelease || !ReleaseUtil.isProdRelease && isInEligibleCountry &&
31-
LocalDate.now() <= LocalDate.of(2026, 3, 15) && isTestGroupUser
28+
get() = ReleaseUtil.isDevRelease || isInEligibleCountry &&
29+
LocalDate.now() <= LocalDate.of(2026, 3, 15) && isTestGroupUser
3230

3331
val hasActiveReminder get() = Prefs.donationReminderConfig.userEnabled && Prefs.donationReminderConfig.isReminderReady && isInEligibleCountry
3432

33+
val campaignId = "appmenu_" + (if (isTestGroupUser) "reminderB" else "reminderA")
34+
3535
var shouldShowSettingSnackbar = false
3636

3737
fun thankYouMessageForSettings(): String {

app/src/main/java/org/wikipedia/page/PageFragment.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import org.wikipedia.dataclient.okhttp.HttpStatusException
7575
import org.wikipedia.dataclient.okhttp.OkHttpWebViewClient
7676
import org.wikipedia.descriptions.DescriptionEditActivity
7777
import org.wikipedia.diff.ArticleEditDetailsActivity
78+
import org.wikipedia.donate.donationreminder.DonationReminderAbTest
7879
import org.wikipedia.donate.donationreminder.DonationReminderActivity
7980
import org.wikipedia.donate.donationreminder.DonationReminderHelper
8081
import org.wikipedia.edit.EditHandler
@@ -710,6 +711,12 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
710711
if (!Prefs.announcementShownDialogs.contains(campaignId)) {
711712
DonorExperienceEvent.logAction("impression", "article_banner", pageTitle.wikiSite.languageCode, campaignId)
712713
campaignDialog = CampaignDialog(requireActivity(), it, onNeutralBtnClick = { campaignId ->
714+
DonorExperienceEvent.logDonationReminderAction(
715+
action = "group_assigned",
716+
activeInterface = "article_banner",
717+
groupAssigned = if (DonationReminderAbTest().isTestGroupUser()) "android_remind_b" else "android_remind_a",
718+
campaignId = DonationReminderHelper.campaignId
719+
)
713720
Prefs.announcementShownDialogs = setOf(campaignId)
714721
donationReminderLauncher.launch(DonationReminderActivity.newIntent(requireContext()))
715722
})

app/src/main/java/org/wikipedia/page/campaign/CampaignDialog.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.wikipedia.WikipediaApp
88
import org.wikipedia.activity.BaseActivity
99
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
1010
import org.wikipedia.dataclient.donate.Campaign
11+
import org.wikipedia.donate.donationreminder.DonationReminderAbTest
1112
import org.wikipedia.donate.donationreminder.DonationReminderHelper
1213
import org.wikipedia.settings.Prefs
1314
import org.wikipedia.util.CustomTabsUtil
@@ -19,7 +20,10 @@ import java.util.Date
1920

2021
class CampaignDialog internal constructor(private val context: Context, val campaign: Campaign, val onNeutralBtnClick: ((campaignId: String) -> Unit)? = null) : AlertDialog.Builder(context), CampaignDialogView.Callback {
2122
private var dialog: AlertDialog? = null
22-
private val campaignId = campaign.getIdForLang(WikipediaApp.instance.appOrSystemLanguageCode)
23+
private val campaignId = campaign.getIdForLang(WikipediaApp.instance.appOrSystemLanguageCode) +
24+
if (DonationReminderHelper.isInEligibleCountry) {
25+
if (DonationReminderAbTest().isTestGroupUser()) "_reminderB" else "_reminderA"
26+
} else ""
2327

2428
init {
2529
val campaignView = CampaignDialogView(context)
@@ -28,6 +32,8 @@ class CampaignDialog internal constructor(private val context: Context, val camp
2832
campaignView.showNeutralButton = dateDiff.toDays() >= 1 && campaign.endDateTime?.isAfter(LocalDateTime.now().plusDays(1)) == true || Prefs.ignoreDateForAnnouncements
2933
campaignView.setupViews(campaignId, campaign.getAssetsForLang(WikipediaApp.instance.appOrSystemLanguageCode))
3034
setView(campaignView)
35+
36+
DonorExperienceEvent.logAction("impression", "article_banner", campaignId = campaignId)
3137
}
3238

3339
override fun show(): AlertDialog {

app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ class LeadImagesHandler(private val parentFragment: PageFragment,
211211
DonorExperienceEvent.logDonationReminderAction(
212212
activeInterface = "reminder_milestone",
213213
action = "donate_start_click",
214-
campaignId = DonationReminderHelper.CAMPAIGN_ID
214+
campaignId = DonationReminderHelper.campaignId
215215
)
216216
ExclusiveBottomSheetPresenter.show(parentFragment.parentFragmentManager, DonateDialog.newInstance(fromDonationReminder = true))
217217
}
@@ -224,6 +224,10 @@ class LeadImagesHandler(private val parentFragment: PageFragment,
224224
)
225225
FeedbackUtil.makeSnackbar(activity, activity.getString(R.string.donation_reminders_prompt_dismiss_snackbar))
226226
.setAction(R.string.donation_reminders_snackbar_modify_button_label) {
227+
DonorExperienceEvent.logDonationReminderAction(
228+
activeInterface = "reminder_milestone",
229+
action = "setting_click"
230+
)
227231
activity.startActivity(DonationReminderActivity.newIntent(activity))
228232
}.show()
229233
}

app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.wikipedia.BuildConfig
1111
import org.wikipedia.Constants
1212
import org.wikipedia.R
1313
import org.wikipedia.WikipediaApp
14+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
1415
import org.wikipedia.analytics.eventplatform.RecommendedReadingListEvent
1516
import org.wikipedia.analytics.eventplatform.YearInReviewEvent
1617
import org.wikipedia.auth.AccountUtil
@@ -134,6 +135,10 @@ internal class SettingsPreferenceLoader(fragment: PreferenceFragmentCompat) : Ba
134135
}
135136
}
136137
findPreference(R.string.preference_key_delete_local_donation_history).onPreferenceClickListener = Preference.OnPreferenceClickListener {
138+
DonorExperienceEvent.logDonationReminderAction(
139+
activeInterface = "global_setting",
140+
action = "clear_donation_hist_click"
141+
)
137142
val hasDonations = Prefs.donationResults.isNotEmpty()
138143

139144
if (hasDonations) {

0 commit comments

Comments
 (0)