Skip to content

Commit e259260

Browse files
Merge branch 'main' into Serializable_extensions
2 parents d015e1f + 2f7e7da commit e259260

File tree

56 files changed

+3357
-204
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+3357
-204
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ android {
3737
applicationId 'org.wikipedia'
3838
minSdk 21
3939
targetSdk 34
40-
versionCode 50453
40+
versionCode 50455
4141
testApplicationId 'org.wikipedia.test'
4242
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
4343
testInstrumentationRunnerArguments clearPackageData: 'true'

app/src/main/java/org/wikipedia/activity/SingleWebViewActivity.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.webkit.WebView
1313
import androidx.core.view.isVisible
1414
import org.wikipedia.R
1515
import org.wikipedia.WikipediaApp
16+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
1617
import org.wikipedia.databinding.ActivitySingleWebViewBinding
1718
import org.wikipedia.dataclient.WikiSite
1819
import org.wikipedia.dataclient.okhttp.OkHttpWebViewClient
@@ -115,6 +116,9 @@ class SingleWebViewActivity : BaseActivity() {
115116
}
116117

117118
private fun goBack() {
119+
if (intent.getStringExtra(EXTRA_PAGE_CONTENT_INFO).orEmpty() == PAGE_CONTENT_SOURCE_DONOR_EXPERIENCE) {
120+
DonorExperienceEvent.logAction("article_return_click", "webpay_processed")
121+
}
118122
pageTitle?.let {
119123
val entry = HistoryEntry(it, HistoryEntry.SOURCE_SINGLE_WEBVIEW)
120124
startActivity(PageActivity.newIntentForExistingTab(this@SingleWebViewActivity, entry, entry.title))
@@ -133,12 +137,15 @@ class SingleWebViewActivity : BaseActivity() {
133137
const val EXTRA_URL = "url"
134138
const val EXTRA_SHOW_BACK_BUTTON = "goBack"
135139
const val EXTRA_PAGE_TITLE = "pageTitle"
140+
const val EXTRA_PAGE_CONTENT_INFO = "pageContentInfo"
141+
const val PAGE_CONTENT_SOURCE_DONOR_EXPERIENCE = "donorExperience"
136142

137-
fun newIntent(context: Context, url: String, showBackButton: Boolean = false, pageTitle: PageTitle? = null): Intent {
143+
fun newIntent(context: Context, url: String, showBackButton: Boolean = false, pageTitle: PageTitle? = null, pageContentInfo: String? = null): Intent {
138144
return Intent(context, SingleWebViewActivity::class.java)
139145
.putExtra(EXTRA_URL, url)
140146
.putExtra(EXTRA_SHOW_BACK_BUTTON, showBackButton)
141147
.putExtra(EXTRA_PAGE_TITLE, pageTitle)
148+
.putExtra(EXTRA_PAGE_CONTENT_INFO, pageContentInfo)
142149
}
143150
}
144151
}

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@ class DonorExperienceEvent(
1313
private val action_data: String,
1414
private val primary_language: String,
1515
private val wiki_id: String,
16-
private val platform: String = "android"
16+
private var platform: String
1717
) : MobileAppsEvent(STREAM_NAME) {
1818

1919
companion object {
2020
private const val STREAM_NAME = "app_donor_experience"
2121

22-
fun logImpression(activeInterface: String, actionData: String = "", wikiId: String = "") {
23-
submitDonorExperienceEvent("impression", activeInterface, actionData, wikiId)
22+
fun logImpression(activeInterface: String, campaignId: String? = null, wikiId: String = "") {
23+
submitDonorExperienceEvent("impression", activeInterface, getActionDataString(campaignId), wikiId)
2424
}
2525

2626
fun logAction(
2727
action: String,
2828
activeInterface: String,
2929
wikiId: String = "",
30-
campaignId: Long? = null
30+
campaignId: String? = null
3131
) {
3232
submitDonorExperienceEvent(
3333
action,
@@ -37,7 +37,7 @@ class DonorExperienceEvent(
3737
)
3838
}
3939

40-
fun getActionDataString(campaignId: Long? = null): String {
40+
fun getActionDataString(campaignId: String? = null): String {
4141
return campaignId?.let { "campaign_id: $it, " }.orEmpty()
4242
}
4343

@@ -53,7 +53,8 @@ class DonorExperienceEvent(
5353
activeInterface,
5454
actionData,
5555
WikipediaApp.instance.languageState.appLanguageCode,
56-
wikiId
56+
wikiId,
57+
"android"
5758
)
5859
)
5960
}

app/src/main/java/org/wikipedia/navtab/MenuNavTabDialog.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.wikipedia.R
1212
import org.wikipedia.WikipediaApp
1313
import org.wikipedia.activity.FragmentUtil
1414
import org.wikipedia.analytics.eventplatform.BreadCrumbLogEvent
15+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
1516
import org.wikipedia.auth.AccountUtil
1617
import org.wikipedia.databinding.ViewMainDrawerBinding
1718
import org.wikipedia.page.ExtendedBottomSheetDialogFragment
@@ -70,6 +71,7 @@ class MenuNavTabDialog : ExtendedBottomSheetDialogFragment() {
7071
}
7172

7273
binding.mainDrawerDonateContainer.setOnClickListener {
74+
DonorExperienceEvent.logAction("donate_start_click", "more_menu")
7375
BreadCrumbLogEvent.logClick(requireActivity(), binding.mainDrawerDonateContainer)
7476
visitInExternalBrowser(requireContext(),
7577
Uri.parse(getString(R.string.donate_url,

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import org.wikipedia.activity.BaseActivity
3333
import org.wikipedia.activity.SingleWebViewActivity
3434
import org.wikipedia.analytics.eventplatform.ArticleLinkPreviewInteractionEvent
3535
import org.wikipedia.analytics.eventplatform.BreadCrumbLogEvent
36+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
3637
import org.wikipedia.analytics.metricsplatform.ArticleLinkPreviewInteraction
3738
import org.wikipedia.auth.AccountUtil
3839
import org.wikipedia.commons.FilePageActivity
@@ -517,7 +518,9 @@ class PageActivity : BaseActivity(), PageFragment.Callback, LinkPreviewDialog.Ca
517518
val utmCampaign = uri.getQueryParameter("utm_campaign")
518519
if (utmCampaign != null && utmCampaign == "Android") {
519520
// TODO: need to verify if the page can be displayed and logged properly.
520-
startActivity(SingleWebViewActivity.newIntent(this@PageActivity, uri.toString(), true, pageFragment.title))
521+
DonorExperienceEvent.logImpression("webpay_processed")
522+
startActivity(SingleWebViewActivity.newIntent(this@PageActivity, uri.toString(),
523+
true, pageFragment.title, SingleWebViewActivity.PAGE_CONTENT_SOURCE_DONOR_EXPERIENCE))
521524
finish()
522525
return
523526
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import org.wikipedia.WikipediaApp
5151
import org.wikipedia.activity.FragmentUtil.getCallback
5252
import org.wikipedia.analytics.eventplatform.ArticleFindInPageInteractionEvent
5353
import org.wikipedia.analytics.eventplatform.ArticleInteractionEvent
54+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
5455
import org.wikipedia.analytics.eventplatform.EventPlatformClient
5556
import org.wikipedia.analytics.eventplatform.WatchlistAnalyticsHelper
5657
import org.wikipedia.analytics.metricsplatform.ArticleFindInPageInteraction
@@ -664,7 +665,7 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
664665
}
665666

666667
private fun maybeShowAnnouncement() {
667-
title?.let {
668+
title?.let { pageTitle ->
668669
// Check if the pause time is older than 1 day.
669670
val dateDiff = Duration.between(Instant.ofEpochMilli(Prefs.announcementPauseTime), Instant.now())
670671
if (Prefs.hasVisitedArticlePage && dateDiff.toDays() >= 1) {
@@ -673,6 +674,8 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
673674
val availableCampaign = campaignList.find { campaign -> campaign.assets[app.appOrSystemLanguageCode] != null }
674675
availableCampaign?.let {
675676
if (!Prefs.announcementShownDialogs.contains(it.id)) {
677+
DonorExperienceEvent.logImpression("article_banner",
678+
it.id, pageTitle.wikiSite.languageCode)
676679
val dialog = CampaignDialog(requireActivity(), it)
677680
dialog.setCancelable(false)
678681
dialog.show()

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.Context
55
import androidx.appcompat.app.AlertDialog
66
import org.wikipedia.R
77
import org.wikipedia.WikipediaApp
8+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
89
import org.wikipedia.dataclient.donate.Campaign
910
import org.wikipedia.settings.Prefs
1011
import org.wikipedia.util.CustomTabsUtil
@@ -42,23 +43,28 @@ class CampaignDialog internal constructor(private val context: Context, val camp
4243
}
4344

4445
override fun onPositiveAction(url: String) {
46+
DonorExperienceEvent.logAction("donate_start_click", "article_banner", campaignId = campaign.id)
4547
val customTabUrl = Prefs.announcementCustomTabTestUrl.orEmpty().ifEmpty { url }
4648
CustomTabsUtil.openInCustomTab(context, customTabUrl)
4749
dismissDialog()
4850
}
4951

5052
override fun onNegativeAction() {
53+
DonorExperienceEvent.logAction("already_donated_click", "article_banner", campaignId = campaign.id)
5154
FeedbackUtil.showMessage(context as Activity, R.string.donation_campaign_donated_snackbar)
5255
dismissDialog()
5356
}
5457

5558
override fun onNeutralAction() {
59+
DonorExperienceEvent.logAction("later_click", "article_banner", campaignId = campaign.id)
5660
Prefs.announcementPauseTime = Date().time
5761
FeedbackUtil.showMessage(context as Activity, R.string.donation_campaign_maybe_later_snackbar)
62+
DonorExperienceEvent.logAction("reminder_toast", "article_banner", campaignId = campaign.id)
5863
dismissDialog(false)
5964
}
6065

6166
override fun onClose() {
67+
DonorExperienceEvent.logAction("close_click", "article_banner", campaignId = campaign.id)
6268
dismissDialog()
6369
}
6470
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package org.wikipedia.page.campaign
22

33
import android.content.Context
4+
import android.net.Uri
45
import android.view.LayoutInflater
56
import android.widget.FrameLayout
67
import androidx.core.text.method.LinkMovementMethodCompat
78
import androidx.core.view.isVisible
9+
import org.wikipedia.analytics.eventplatform.DonorExperienceEvent
810
import org.wikipedia.databinding.DialogCampaignBinding
911
import org.wikipedia.dataclient.donate.Campaign
12+
import org.wikipedia.page.LinkMovementMethodExt
1013
import org.wikipedia.util.FeedbackUtil
1114
import org.wikipedia.util.StringUtil
15+
import org.wikipedia.util.UriUtil
1216

1317
class CampaignDialogView(context: Context) : FrameLayout(context) {
1418
interface Callback {
@@ -30,7 +34,10 @@ class CampaignDialogView(context: Context) : FrameLayout(context) {
3034
binding.contentText.text = StringUtil.fromHtml(it.text)
3135
}
3236
if (!it.footer.isNullOrEmpty()) {
33-
binding.footerText.movementMethod = LinkMovementMethodCompat.getInstance()
37+
binding.footerText.movementMethod = LinkMovementMethodExt { url: String ->
38+
DonorExperienceEvent.logAction("donor_policy_click", "article_banner")
39+
UriUtil.visitInExternalBrowser(this.context, Uri.parse(url))
40+
}
3441
binding.footerText.text = StringUtil.fromHtml(it.footer)
3542
}
3643

app/src/main/java/org/wikipedia/util/StringUtil.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,11 @@ object StringUtil {
144144
textView.text = fromHtml(parentTextStr)
145145
}
146146

147-
fun setHighlightedAndBoldenedText(textView: TextView, input: CharSequence, query: String?) {
148-
textView.text = if (query.isNullOrEmpty()) input else buildSpannedString {
149-
append(input)
147+
fun setHighlightedAndBoldenedText(textView: TextView, parentText: CharSequence, query: String?) {
148+
textView.text = if (query.isNullOrEmpty()) parentText else buildSpannedString {
149+
append(parentText)
150150

151-
query.toRegex(HIGHLIGHT_REGEX_OPTIONS).findAll(input)
151+
query.toRegex(HIGHLIGHT_REGEX_OPTIONS).findAll(parentText)
152152
.forEach {
153153
val range = it.range
154154
val (start, end) = range.first to range.last + 1

app/src/main/res/layout/dialog_campaign.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,10 @@
2727
android:layout_width="match_parent"
2828
android:layout_height="wrap_content"
2929
android:layout_marginTop="16dp"
30-
android:layout_marginBottom="12dp"
3130
android:lineSpacingMultiplier="1.21"
3231
android:fontFamily="sans-serif"
33-
android:paddingStart="16dp"
34-
android:paddingEnd="16dp"
32+
android:paddingHorizontal="16dp"
33+
android:paddingBottom="24dp"
3534
android:textColor="?attr/primary_color"
3635
android:textSize="16sp"
3736
android:clipChildren="false"

0 commit comments

Comments
 (0)