Skip to content

Commit 0734d40

Browse files
Merge branch 'main' into Serializable_extensions
# Conflicts: # app/src/main/java/org/wikipedia/suggestededits/SuggestedEditsCardsFragment.kt
2 parents e259260 + acb84fe commit 0734d40

File tree

133 files changed

+6183
-663
lines changed

Some content is hidden

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

133 files changed

+6183
-663
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 50455
40+
versionCode 50456
4141
testApplicationId 'org.wikipedia.test'
4242
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
4343
testInstrumentationRunnerArguments clearPackageData: 'true'

app/src/main/AndroidManifest.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@
263263

264264
<activity android:name=".suggestededits.SuggestedEditsImageRecsOnboardingActivity" />
265265

266+
<activity android:name=".suggestededits.SuggestedEditsRecentEditsOnboardingActivity" />
267+
266268
<activity
267269
android:name=".watchlist.WatchlistActivity"
268270
android:label="@string/watchlist_title"
@@ -277,6 +279,14 @@
277279
android:name=".suggestededits.SuggestedEditsImageTagEditActivity"
278280
android:theme="@style/AppTheme.ActionBar" />
279281

282+
<activity
283+
android:name=".suggestededits.SuggestedEditsRecentEditsActivity"/>
284+
285+
<activity
286+
android:name=".suggestededits.SuggestedEditsRecentEditsFilterActivity"
287+
android:label="@string/patroller_tasks_filters_title"
288+
android:theme="@style/AppTheme.ActionBar"/>
289+
280290
<activity
281291
android:name=".commons.FilePageActivity"
282292
android:label=""
@@ -329,6 +339,14 @@
329339
android:label="@string/insert_media_title"
330340
android:configChanges="orientation|keyboardHidden|keyboard|screenSize" />
331341

342+
<activity
343+
android:name=".talk.template.TalkTemplatesActivity"
344+
android:theme="@style/AppTheme.ActionBar" />
345+
346+
<activity
347+
android:name=".talk.template.AddTemplateActivity"
348+
android:theme="@style/AppTheme" />
349+
332350
<provider
333351
android:name=".WikipediaFileProvider"
334352
android:authorities="${applicationId}.fileprovider"

app/src/main/java/org/wikipedia/Constants.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ object Constants {
9494
TALK_TOPICS_ACTIVITY("talkTopicsActivity"),
9595
TALK_TOPIC_ACTIVITY("talkTopicActivity"),
9696
TALK_REPLY_ACTIVITY("talkReplyActivity"),
97+
ADD_TEMPLATE_ACTIVITY("addTemplateActivity"),
9798
EDIT_ACTIVITY("editActivity"),
9899
TOOLBAR("toolbar"),
99100
VOICE("voice"),
@@ -102,6 +103,7 @@ object Constants {
102103
WIDGET("widget"),
103104
USER_CONTRIB_ACTIVITY("userContribActivity"),
104105
EDIT_ADD_IMAGE("editAddImage"),
106+
SUGGESTED_EDITS_RECENT_EDITS("suggestedEditsRecentEdits"),
105107
}
106108

107109
enum class ImageEditType(name: String) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.wikipedia.analytics.eventplatform
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Suppress("unused")
7+
@Serializable
8+
@SerialName("/analytics/mobile_apps/app_interaction/1.0.0")
9+
class AppInteractionEvent(
10+
private val action: String,
11+
private val active_interface: String,
12+
private val action_data: String,
13+
private val primary_language: String,
14+
private val wiki_id: String,
15+
private var platform: String,
16+
) : MobileAppsEvent(STREAM_NAME) {
17+
companion object {
18+
var STREAM_NAME = "app_donor_experience"
19+
}
20+
}

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

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,8 @@
11
package org.wikipedia.analytics.eventplatform
22

3-
import kotlinx.serialization.SerialName
4-
import kotlinx.serialization.Serializable
53
import org.wikipedia.WikipediaApp
64

7-
@Suppress("unused")
8-
@Serializable
9-
@SerialName("/analytics/mobile_apps/app_interaction/1.0.0")
10-
class DonorExperienceEvent(
11-
private val action: String,
12-
private val active_interface: String,
13-
private val action_data: String,
14-
private val primary_language: String,
15-
private val wiki_id: String,
16-
private var platform: String
17-
) : MobileAppsEvent(STREAM_NAME) {
5+
class DonorExperienceEvent {
186

197
companion object {
208
private const val STREAM_NAME = "app_donor_experience"
@@ -47,8 +35,9 @@ class DonorExperienceEvent(
4735
actionData: String,
4836
wikiId: String
4937
) {
38+
AppInteractionEvent.STREAM_NAME = STREAM_NAME
5039
EventPlatformClient.submit(
51-
DonorExperienceEvent(
40+
AppInteractionEvent(
5241
action,
5342
activeInterface,
5443
actionData,
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.wikipedia.analytics.eventplatform
2+
3+
import org.wikipedia.WikipediaApp
4+
import org.wikipedia.settings.Prefs
5+
6+
class PatrollerExperienceEvent {
7+
8+
companion object {
9+
private const val STREAM_NAME = "app_patroller_experience"
10+
11+
fun logImpression(activeInterface: String) {
12+
submitPatrollerActivityEvent("impression", activeInterface)
13+
}
14+
15+
fun logAction(action: String, activeInterface: String, actionData: String = "") {
16+
submitPatrollerActivityEvent(action, activeInterface, actionData)
17+
}
18+
19+
fun getActionDataString(
20+
revisionId: Long? = null,
21+
feedbackOption: String? = null,
22+
feedbackText: String? = null,
23+
messageType: String? = null,
24+
summaryText: String? = null,
25+
filterSelected: String? = null,
26+
filterWiki: String? = null,
27+
filtersList: String? = null,
28+
appLanguageCodeAdded: String? = null,
29+
appLanguageCodes: String? = null,
30+
): String {
31+
val revisionIdStr = revisionId?.let { "revision_id: $it, " }.orEmpty()
32+
val feedbackStr = feedbackOption?.let { "feedback: $it, " }.orEmpty()
33+
val feedbackTextStr = feedbackText?.let { "feedback_text: $it, " }.orEmpty()
34+
val savedMessageStr = messageType?.let { "saved_message: $it, " }.orEmpty()
35+
val summaryTextStr = summaryText?.let { "summary_text: $it, " }.orEmpty()
36+
val wasSummaryAddedStr = summaryText?.let { summaryText.isNotEmpty().toString() }.orEmpty()
37+
val filterSelectedStr = filterSelected?.let { "filter_selected: $it, " }.orEmpty()
38+
val filterWikiStr = filterWiki?.let { "filter_wiki_selected: $it, " }.orEmpty()
39+
val filtersListStr = filtersList?.let { "filters_list: $it, " }.orEmpty()
40+
val appLanguageCodeAddedStr = appLanguageCodeAdded?.let { "app_language_code_added: $it, " }.orEmpty()
41+
val appLanguageCodesStr = appLanguageCodes?.let { "app_language_codes: $it, " }.orEmpty()
42+
return revisionIdStr + feedbackStr + feedbackTextStr + savedMessageStr + summaryTextStr + wasSummaryAddedStr +
43+
filterSelectedStr + filterWikiStr + filtersListStr + appLanguageCodeAddedStr + appLanguageCodesStr
44+
}
45+
46+
private fun submitPatrollerActivityEvent(action: String, activeInterface: String, actionData: String = "") {
47+
AppInteractionEvent.STREAM_NAME = STREAM_NAME
48+
EventPlatformClient.submit(
49+
AppInteractionEvent(
50+
action,
51+
activeInterface,
52+
actionData,
53+
WikipediaApp.instance.languageState.appLanguageCode,
54+
Prefs.recentEditsWikiCode,
55+
"android"
56+
)
57+
)
58+
}
59+
}
60+
}

app/src/main/java/org/wikipedia/database/AppDatabase.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ import org.wikipedia.search.db.RecentSearchDao
2727
import org.wikipedia.staticdata.MainPageNameData
2828
import org.wikipedia.talk.db.TalkPageSeen
2929
import org.wikipedia.talk.db.TalkPageSeenDao
30+
import org.wikipedia.talk.db.TalkTemplate
31+
import org.wikipedia.talk.db.TalkTemplateDao
3032

3133
const val DATABASE_NAME = "wikipedia.db"
32-
const val DATABASE_VERSION = 24
34+
const val DATABASE_VERSION = 25
3335

3436
@Database(
3537
entities = [
@@ -41,7 +43,8 @@ const val DATABASE_VERSION = 24
4143
OfflineObject::class,
4244
ReadingList::class,
4345
ReadingListPage::class,
44-
Notification::class
46+
Notification::class,
47+
TalkTemplate::class
4548
],
4649
version = DATABASE_VERSION
4750
)
@@ -63,6 +66,7 @@ abstract class AppDatabase : RoomDatabase() {
6366
abstract fun readingListDao(): ReadingListDao
6467
abstract fun readingListPageDao(): ReadingListPageDao
6568
abstract fun notificationDao(): NotificationDao
69+
abstract fun talkTemplateDao(): TalkTemplateDao
6670

6771
companion object {
6872
val MIGRATION_19_20 = object : Migration(19, 20) {
@@ -170,10 +174,15 @@ abstract class AppDatabase : RoomDatabase() {
170174
database.execSQL("CREATE TABLE IF NOT EXISTS `Notification` (`id` INTEGER NOT NULL, `wiki` TEXT NOT NULL, `read` TEXT, `category` TEXT NOT NULL, `type` TEXT NOT NULL, `revid` INTEGER NOT NULL, `title` TEXT, `agent` TEXT, `timestamp` TEXT, `contents` TEXT, PRIMARY KEY(`id`, `wiki`))")
171175
}
172176
}
177+
private val MIGRATION_24_25 = object : Migration(24, 25) {
178+
override fun migrate(database: SupportSQLiteDatabase) {
179+
database.execSQL("CREATE TABLE IF NOT EXISTS `TalkTemplate` (`id` INTEGER NOT NULL, `type` INTEGER NOT NULL, `order` INTEGER NOT NULL, `title` TEXT NOT NULL, `subject` TEXT NOT NULL, `message` TEXT NOT NULL, PRIMARY KEY(`id`))")
180+
}
181+
}
173182

174183
val instance: AppDatabase by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
175184
Room.databaseBuilder(WikipediaApp.instance, AppDatabase::class.java, DATABASE_NAME)
176-
.addMigrations(MIGRATION_19_20, MIGRATION_20_21, MIGRATION_21_22, MIGRATION_22_23, MIGRATION_23_24)
185+
.addMigrations(MIGRATION_19_20, MIGRATION_20_21, MIGRATION_21_22, MIGRATION_22_23, MIGRATION_23_24, MIGRATION_24_25)
177186
.allowMainThreadQueries() // TODO: remove after migration
178187
.fallbackToDestructiveMigration()
179188
.build()

app/src/main/java/org/wikipedia/dataclient/Service.kt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,13 @@ interface Service {
161161
val randomWithImageInfo: Observable<MwQueryResponse>
162162

163163
@Headers("Cache-Control: no-cache")
164-
@GET(MW_API_PREFIX + "action=query&list=recentchanges&rcprop=title|timestamp|ids|oresscores|sizes|tags|user|parsedcomment|comment|flags&rcnamespace=0&rctoponly=1&rctype=edit|new")
164+
@GET(MW_API_PREFIX + "action=query&list=recentchanges&rcprop=title|timestamp|ids|oresscores|sizes|tags|user|parsedcomment|comment|flags&rcnamespace=0&rctype=edit|new")
165165
suspend fun getRecentEdits(
166166
@Query("rclimit") count: Int,
167167
@Query("rcstart") startTimeStamp: String,
168-
@Query("rcshow") filters: String?
168+
@Query("rctoponly") latestRevisions: String?,
169+
@Query("rcshow") filters: String?,
170+
@Query("rccontinue") continueStr: String?
169171
): MwQueryResponse
170172

171173
@FormUrlEncoded
@@ -367,7 +369,7 @@ interface Service {
367369
@Field("data-ge-task-image-recommendation") imageRecommendationJson: String? = null,
368370
): Edit
369371

370-
@GET(MW_API_PREFIX + "action=query&list=usercontribs&ucprop=ids|title|timestamp|comment|size|flags|sizediff|tags&meta=userinfo&uiprop=groups|blockinfo|editcount|latestcontrib")
372+
@GET(MW_API_PREFIX + "action=query&list=usercontribs&ucprop=ids|title|timestamp|comment|size|flags|sizediff|tags&meta=userinfo&uiprop=groups|blockinfo|editcount|latestcontrib|rights")
371373
suspend fun getUserContributions(
372374
@Query("ucuser") username: String,
373375
@Query("uclimit") maxCount: Int,
@@ -506,29 +508,36 @@ interface Service {
506508
@GET(MW_API_PREFIX + "action=query&prop=revisions&rvslots=main&rvprop=timestamp|user|ids|comment|tags")
507509
suspend fun getLastModified(@Query("titles") titles: String): MwQueryResponse
508510

509-
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user&rvdir=newer")
511+
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user|oresscores&rvdir=newer")
510512
suspend fun getRevisionDetailsAscending(
511513
@Query("titles") titles: String?,
512514
@Query("pageids") pageIds: String?,
513515
@Query("rvlimit") count: Int,
514516
@Query("rvstartid") revisionStartId: Long?
515517
): MwQueryResponse
516518

517-
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user&rvdir=older")
519+
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user|oresscores&rvdir=older")
518520
suspend fun getRevisionDetailsDescending(
519521
@Query("titles") titles: String,
520522
@Query("rvlimit") count: Int,
521523
@Query("rvstartid") revisionStartId: Long?,
522524
@Query("rvcontinue") continueStr: String?,
523525
): MwQueryResponse
524526

525-
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user&rvdir=older")
527+
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user|oresscores&rvdir=older")
526528
suspend fun getRevisionDetailsWithInfo(
527529
@Query("pageids") pageIds: String,
528530
@Query("rvlimit") count: Int,
529531
@Query("rvstartid") revisionStartId: Long
530532
): MwQueryResponse
531533

534+
@GET(MW_API_PREFIX + "action=query&prop=info|revisions&rvslots=main&rvprop=ids|timestamp|size|flags|comment|parsedcomment|user|oresscores&rvdir=older&inprop=watched&meta=userinfo&uiprop=rights")
535+
suspend fun getRevisionDetailsWithUserInfo(
536+
@Query("pageids") pageIds: String,
537+
@Query("rvlimit") count: Int,
538+
@Query("rvstartid") revisionStartId: Long
539+
): MwQueryResponse
540+
532541
@POST(MW_API_PREFIX + "action=thank")
533542
@FormUrlEncoded
534543
suspend fun postThanksToRevision(

app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryPage.kt

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

33
import kotlinx.serialization.SerialName
44
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.json.JsonArray
56
import kotlinx.serialization.json.JsonElement
67
import kotlinx.serialization.json.JsonObject
78
import kotlinx.serialization.json.decodeFromJsonElement
@@ -98,6 +99,12 @@ class MwQueryPage {
9899
val comment: String = ""
99100
val parsedcomment: String = ""
100101

102+
private val oresscores: JsonElement? = null
103+
val ores: MwQueryResult.OresResult?
104+
get() = if (oresscores != null && oresscores !is JsonArray) {
105+
JsonUtil.json.decodeFromJsonElement<MwQueryResult.OresResult>(oresscores)
106+
} else null
107+
101108
val contentMain get() = getContentFromSlot("main")
102109

103110
var diffSize = 0

app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResponse.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ open class MwQueryResponse : MwResponse() {
2020
val gpsoffset = 0
2121
@SerialName("continue") val continuation: String? = null
2222
@SerialName("uccontinue") val ucContinuation: String? = null
23+
@SerialName("rccontinue") val rcContinuation: String? = null
2324
@SerialName("rvcontinue") val rvContinuation: String? = null
2425
@SerialName("gcmcontinue") val gcmContinuation: String? = null
2526
}

0 commit comments

Comments
 (0)