Skip to content

Commit 5a4b837

Browse files
Merge branch 'main' into Serializable_extensions
2 parents 3347a7b + 5bd4d22 commit 5a4b837

File tree

30 files changed

+332
-22
lines changed

30 files changed

+332
-22
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 50452
40+
versionCode 50453
4141
testApplicationId 'org.wikipedia.test'
4242
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
4343
testInstrumentationRunnerArguments clearPackageData: 'true'
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.wikipedia.dataclient.donate
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
import org.wikipedia.util.DateUtil
6+
7+
@Suppress("unused")
8+
@Serializable
9+
class Campaign(
10+
val version: Int,
11+
val id: String = "",
12+
@SerialName("start_time") private val startTime: String? = null,
13+
@SerialName("end_time") private val endTime: String? = null,
14+
val platforms: Map<String, PlatformParams> = emptyMap(),
15+
val countries: List<String> = emptyList(),
16+
val assets: Map<String, Assets> = emptyMap()
17+
) {
18+
val startDateTime get() = startTime?.let { DateUtil.iso8601LocalDateTimeParse(it) }
19+
20+
val endDateTime get() = endTime?.let { DateUtil.iso8601LocalDateTimeParse(it) }
21+
22+
fun hasPlatform(platform: String): Boolean {
23+
return platforms.containsKey(platform)
24+
}
25+
26+
fun getAssetsForLang(lang: String): Assets? {
27+
return assets[lang]
28+
}
29+
30+
@Serializable
31+
class Assets(
32+
val text: String? = "",
33+
val footer: String? = "",
34+
val actions: Array<Action> = emptyArray()
35+
)
36+
37+
@Serializable
38+
class Action(
39+
val title: String = "",
40+
@SerialName("url") val rawUrl: String? = null
41+
) {
42+
val url get() = rawUrl?.replace("\$platform;", "Android")
43+
}
44+
45+
@Serializable
46+
class PlatformParams
47+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.wikipedia.dataclient.donate
2+
3+
import kotlinx.coroutines.Dispatchers
4+
import kotlinx.coroutines.withContext
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.json.JsonElement
7+
import kotlinx.serialization.json.decodeFromJsonElement
8+
import okhttp3.Request
9+
import org.wikipedia.dataclient.okhttp.OkHttpConnectionFactory
10+
import org.wikipedia.json.JsonUtil
11+
import org.wikipedia.settings.Prefs
12+
import org.wikipedia.util.GeoUtil
13+
import java.time.LocalDateTime
14+
15+
object CampaignCollection {
16+
17+
private const val CAMPAIGN_VERSION = 1
18+
19+
private const val CAMPAIGNS_URL = "https://donate.wikimedia.org/wiki/MediaWiki:AppsCampaignConfig.json?action=raw"
20+
private const val CAMPAIGNS_URL_DEBUG = "https://donate.wikimedia.org/wiki/MediaWiki:AppsCampaignConfigStaging.json?action=raw"
21+
22+
suspend fun getActiveCampaigns(): List<Campaign> {
23+
val campaignList = mutableListOf<Campaign>()
24+
25+
withContext(Dispatchers.IO) {
26+
val request = Request.Builder().url(CAMPAIGNS_URL_DEBUG).build()
27+
val response = OkHttpConnectionFactory.client.newCall(request).execute()
28+
val campaigns = JsonUtil.decodeFromString<List<JsonElement>>(response.body?.string()).orEmpty()
29+
30+
campaignList.addAll(campaigns.filter {
31+
val proto = JsonUtil.json.decodeFromJsonElement<CampaignProto>(it)
32+
proto.version == CAMPAIGN_VERSION
33+
}.map {
34+
JsonUtil.json.decodeFromJsonElement<Campaign>(it)
35+
}.filter {
36+
it.hasPlatform("Android") &&
37+
it.countries.contains(GeoUtil.geoIPCountry) &&
38+
(Prefs.ignoreDateForAnnouncements || (it.startDateTime?.isBefore(LocalDateTime.now()) == true && it.endDateTime?.isAfter(LocalDateTime.now()) == true))
39+
})
40+
}
41+
return campaignList
42+
}
43+
44+
@Serializable
45+
class CampaignProto(
46+
val version: Int = 0
47+
)
48+
}

app/src/main/java/org/wikipedia/edit/WikiTextKeyboardView.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,12 @@ class WikiTextKeyboardView : FrameLayout {
142142
if (title.wikiSite.languageCode != baseLangCode) {
143143
text += ":" + title.wikiSite.languageCode + ":"
144144
}
145-
text += StringUtil.fromHtml(title.displayText).toString() + "]]"
145+
val displayText = StringUtil.fromHtml(title.displayText).toString()
146+
text += if (StringUtil.removeUnderscores(title.prefixedText) != displayText) {
147+
title.prefixedText + "|" + displayText + "]]"
148+
} else {
149+
"$displayText]]"
150+
}
146151
editText?.inputConnection?.commitText(text, 1)
147152
}
148153
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,9 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
647647
private fun maybeShowAnnouncement() {
648648
title?.let {
649649
if (Prefs.hasVisitedArticlePage) {
650+
651+
// TODO: replace with new Campaign call
652+
650653
disposables.add(ServiceFactory.getRest(it.wikiSite).announcements
651654
.subscribeOn(Schedulers.io())
652655
.observeOn(AndroidSchedulers.mainThread())

app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSyncAdapter.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -433,10 +433,6 @@ class ReadingListSyncAdapter : JobIntentService() {
433433
}
434434
}
435435
localPage.remoteId = remotePage.id
436-
if (remotePage.summary != null) {
437-
localPage.description = remotePage.summary.description
438-
localPage.thumbUrl = remotePage.summary.thumbnailUrl
439-
}
440436
if (updateOnly) {
441437
L.d("Updating local page " + localPage.apiTitle)
442438
AppDatabase.instance.readingListPageDao().updateReadingListPage(localPage)

app/src/main/java/org/wikipedia/readinglist/sync/SyncedReadingLists.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package org.wikipedia.readinglist.sync
22

33
import kotlinx.serialization.SerialName
44
import kotlinx.serialization.Serializable
5-
import org.wikipedia.dataclient.page.PageSummary
65
import java.text.Normalizer
76
import java.time.Instant
87
import java.util.*
@@ -34,7 +33,6 @@ data class SyncedReadingLists(val lists: List<RemoteReadingList>? = null,
3433
private val title: String,
3534
val created: String = Instant.now().toString(),
3635
val updated: String = Instant.now().toString(),
37-
val summary: PageSummary? = null,
3836
@SerialName("deleted") val isDeleted: Boolean = false
3937
) {
4038
fun project(): String = Normalizer.normalize(project, Normalizer.Form.NFC)

app/src/main/java/org/wikipedia/richtext/CustomHtmlParser.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import android.graphics.drawable.Drawable
1010
import android.text.Editable
1111
import android.text.Html.ImageGetter
1212
import android.text.Html.TagHandler
13+
import android.text.Spannable
1314
import android.text.Spanned
15+
import android.text.style.TypefaceSpan
1416
import android.text.style.URLSpan
1517
import android.widget.TextView
1618
import androidx.core.graphics.applyCanvas
@@ -162,7 +164,7 @@ class CustomHtmlParser constructor(private val handler: TagHandler) : TagHandler
162164
} else if (tag == "a") {
163165
if (opening) {
164166
lastAClass = getValue(attributes, "class").orEmpty()
165-
} else if (output != null && output.isNotEmpty()) {
167+
} else if (!output.isNullOrEmpty()) {
166168
val spans = output.getSpans<URLSpan>(output.length - 1)
167169
if (spans.isNotEmpty()) {
168170
val span = spans.last()
@@ -173,6 +175,18 @@ class CustomHtmlParser constructor(private val handler: TagHandler) : TagHandler
173175
output.setSpan(URLSpanNoUnderline(span.url, color), start, end, 0)
174176
}
175177
}
178+
} else if (tag == "code" && output != null) {
179+
if (opening) {
180+
output.setSpan(TypefaceSpan("monospace"), output.length, output.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
181+
} else {
182+
val spans = output.getSpans<TypefaceSpan>(output.length)
183+
if (spans.isNotEmpty()) {
184+
val span = spans.last()
185+
val start = output.getSpanStart(span)
186+
output.removeSpan(span)
187+
output.setSpan(TypefaceSpan("monospace"), start, output.length, 0)
188+
}
189+
}
176190
}
177191
return false
178192
}

app/src/main/res/values-ba/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,7 @@
11801180
<string name="wikitext_template">Ҡалып</string>
11811181
<string name="wikitext_reference">Иҫкәрмә</string>
11821182
<string name="wikitext_preview_link">Һылтанманы ҡарап сығыу</string>
1183+
<string name="wikitext_mention_user">Ҡатнашыусыны телгә алырға</string>
11831184
<string name="insert_media_title">Медиа-файл ҡуйырға</string>
11841185
<string name="insert_media_search_description">Викимилектән файл һайлағыҙ</string>
11851186
<string name="insert_media_search_hint">Медиа эҙләргә</string>
@@ -1439,6 +1440,7 @@
14391440
<string name="reading_list_share_message_v2">Сәләм! Мин һеҙҙең менән Википедиялағы үҙемдең уҡыу исемлеге менән уртаҡлашырға теләйем:</string>
14401441
<string name="reading_list_share_survey_title">\"Уҡыу исемлектәре менән уртаҡлашыу\" мөмкинлеген яҡшыртырға ярҙам итә алаһығыҙмы?</string>
14411442
<string name="reading_list_share_survey_body">\"Уҡыу исемлектәре менән уртаҡлашырға\" — был тест функцияһы һәм уны яҡшыртыу йәки юйҙырыу өсөн фекерҙәрегеҙ кәрәк.</string>
1443+
<string name="talk_templates_manage_title">Ҡалыптар менән идара итеү</string>
14421444
<string name="talk_templates_empty_message">Һеҙҙә бер ниндәй ҙә иҫкәртеү хәбәрҙәре һаҡланмаған.</string>
14431445
<string name="talk_templates_new_message_title">Яңы хәбәр</string>
14441446
<string name="talk_templates_new_message_description">Иҫкәртеү яҙығыҙ.</string>

app/src/main/res/values-bn/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@
860860
<string name="suggested_edits_ip_blocked_title">আইপি বাধাপ্রাপ্ত</string>
861861
<string name="suggested_edits_last_edited">সর্বশেষ সম্পাদিত</string>
862862
<string name="suggested_edits_last_edited_never">কখনো না</string>
863-
<string name="suggested_edits_task_new" fuzzy="true">নতুন</string>
863+
<string name="suggested_edits_task_new">নতুন</string>
864864
<string name="suggested_edits_reactivation_notification_title">পরামর্শকৃত সম্পাদনা</string>
865865
<string name="suggested_edits_contributions_screen_title">%s-এর অবদান</string>
866866
<string name="suggested_edits_contribution_language_label">ভাষা</string>
@@ -997,6 +997,7 @@
997997
<string name="wikitext_numbered_list">সংখ্যায়িত তালিকা</string>
998998
<string name="wikitext_template">টেমপ্লেট</string>
999999
<string name="wikitext_reference">তথ্যসূত্র</string>
1000+
<string name="wikitext_mention_user">একজন ব্যবহারকারীকে উল্লেখ করুন</string>
10001001
<string name="insert_media_search_description">উইকিমিডিয়া কমন্স থেকে একটি ফাইল নির্বাচন করুন</string>
10011002
<string name="insert_media_search_hint">মিডিয়া অনুসন্ধান</string>
10021003
<string name="insert_media_settings" fuzzy="true">মিডিয়া সেটিং</string>

0 commit comments

Comments
 (0)