Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
4544011
Implement talk page cleanup using a worker
Isira-Seneviratne Aug 20, 2024
0f5e017
Convert remaining tasks to workers
Isira-Seneviratne Aug 20, 2024
552d2b5
Use Constraints constructor directly
Isira-Seneviratne Aug 20, 2024
ac984f9
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Aug 20, 2024
7e19557
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Aug 21, 2024
e2f6f7f
Merge branch 'refs/heads/main' into Recurring-tasks-WorkManager
Isira-Seneviratne Aug 22, 2024
8f83ddb
Rm unused constant
Isira-Seneviratne Aug 22, 2024
8e37884
Revert DAO changes for now
Isira-Seneviratne Aug 22, 2024
64c113f
Restore comment
Isira-Seneviratne Aug 22, 2024
3e610df
Merge branch 'refs/heads/main' into Recurring-tasks-WorkManager
Isira-Seneviratne Aug 22, 2024
ebedafa
Merge branch 'refs/heads/main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 8, 2024
029c873
Avoid running recurring tasks when battery is low
Isira-Seneviratne Sep 8, 2024
8e919b8
Merge branch 'refs/heads/main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 9, 2024
8d5d33a
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 10, 2024
e2fcaf6
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 14, 2024
bb1e38e
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 19, 2024
de11cd9
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 20, 2024
4d1443c
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Sep 29, 2024
b117289
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Oct 5, 2024
0bdd535
Merge branch 'refs/heads/main' into Recurring-tasks-WorkManager
Isira-Seneviratne Oct 13, 2024
7dbfa5d
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Oct 18, 2024
2a565ed
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Oct 20, 2024
aed02eb
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Nov 1, 2024
77c1652
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Nov 19, 2024
d719f0c
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Dec 5, 2024
4e02273
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Dec 13, 2024
748829e
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Feb 21, 2025
9ab9029
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Jul 5, 2025
c18f839
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Jul 14, 2025
22a30e8
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Jul 18, 2025
fbba68a
Merge branch 'main' into Recurring-tasks-WorkManager
Isira-Seneviratne Aug 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/src/main/java/org/wikipedia/activity/BaseActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ abstract class BaseActivity : AppCompatActivity(), ConnectionStateMonitor.Callba
supportActionBar?.setDisplayHomeAsUpEnabled(true)

// Conditionally execute all recurring tasks
RecurringTasksExecutor().run()
RecurringTasksExecutor.schedule()
if (Prefs.isReadingListsFirstTimeSync && AccountUtil.isLoggedIn) {
Prefs.isReadingListsFirstTimeSync = false
Prefs.isReadingListSyncEnabled = true
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package org.wikipedia.alphaupdater

import android.Manifest
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.app.PendingIntentCompat
import androidx.core.content.ContextCompat
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.Request
import okio.IOException
import org.wikipedia.dataclient.okhttp.OkHttpConnectionFactory.client
import org.wikipedia.notifications.NotificationCategory
import org.wikipedia.settings.PrefsIoUtil

class AlphaUpdateWorker(
appContext: Context,
params: WorkerParameters
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result {
val hashString = withContext(Dispatchers.IO) {
val request = Request.Builder().url(ALPHA_BUILD_DATA_URL).build()
try {
client.newCall(request).execute().body!!.use { it.string() }
} catch (e: IOException) {
// It's ok, we can do nothing.
null
}
}
if (hashString == null) {
return Result.failure()
}
if (PrefsIoUtil.getString(PREFERENCE_KEY_ALPHA_COMMIT, "") != hashString) {
showNotification()
}
PrefsIoUtil.setString(PREFERENCE_KEY_ALPHA_COMMIT, hashString)
return Result.success()
}

private fun showNotification() {
if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED) {
return
}
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(ALPHA_BUILD_APK_URL))
val pendingIntent = PendingIntentCompat.getActivity(applicationContext, 0, intent, 0, false)

val notificationManagerCompat = NotificationManagerCompat.from(applicationContext)
val notificationCategory = NotificationCategory.ALPHA_BUILD_CHECKER

val notificationBuilder = NotificationCompat.Builder(applicationContext, notificationCategory.id)
.setContentTitle(applicationContext.getString(notificationCategory.title))
.setContentText(applicationContext.getString(notificationCategory.description))
.setContentIntent(pendingIntent)
.setAutoCancel(true)
notificationBuilder.setSmallIcon(notificationCategory.iconResId)
notificationManagerCompat.notify(1, notificationBuilder.build())
}

companion object {
private const val PREFERENCE_KEY_ALPHA_COMMIT = "alpha_last_checked_commit"
private const val ALPHA_BUILD_APK_URL = "https://github.com/wikimedia/apps-android-wikipedia/releases/download/latest/app-alpha-universal-release.apk"
private const val ALPHA_BUILD_DATA_URL = "https://github.com/wikimedia/apps-android-wikipedia/releases/download/latest/rev-hash.txt"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,8 @@ class PollNotificationWorker(

companion object {
fun schedulePollNotificationJob(context: Context) {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val workRequest = OneTimeWorkRequestBuilder<PollNotificationWorker>()
.setConstraints(constraints)
.setConstraints(Constraints(NetworkType.CONNECTED))
.build()
WorkManager.getInstance(context).enqueue(workRequest)
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.wikipedia.recurring

import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import org.wikipedia.database.AppDatabase
import org.wikipedia.util.log.L
import java.time.LocalDate

class CategoriesTableCleanupWorker(
appContext: Context,
workerParams: WorkerParameters
) : CoroutineWorker(appContext, workerParams) {
override suspend fun doWork(): Result {
val twoYearsAgoTimeStamp = LocalDate.now().year - CLEANUP_TIME_IN_YEARS
AppDatabase.instance.categoryDao().deleteOlderThan(twoYearsAgoTimeStamp)
L.d("Successfully deleted Category data older than $CLEANUP_TIME_IN_YEARS years")
return Result.success()
}

companion object {
const val CLEANUP_TIME_IN_YEARS = 2
}
}
23 changes: 0 additions & 23 deletions app/src/main/java/org/wikipedia/recurring/DailyEventTask.kt

This file was deleted.

19 changes: 19 additions & 0 deletions app/src/main/java/org/wikipedia/recurring/DailyEventWorker.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.wikipedia.recurring

import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import org.wikipedia.WikipediaApp
import org.wikipedia.analytics.eventplatform.DailyStatsEvent
import org.wikipedia.analytics.eventplatform.EventPlatformClient

class DailyEventWorker(
appContext: Context,
params: WorkerParameters
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result {
DailyStatsEvent.log(WikipediaApp.instance)
EventPlatformClient.refreshStreamConfigs()
return Result.success()
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
package org.wikipedia.recurring

import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import org.wikipedia.readinglist.recommended.RecommendedReadingListHelper
import org.wikipedia.readinglist.recommended.RecommendedReadingListUpdateFrequency
import org.wikipedia.settings.Prefs
import java.time.DayOfWeek
import java.time.LocalDate
import java.util.Date
import java.util.concurrent.TimeUnit

class RecommendedReadingListTask() : RecurringTask() {
override val name = "generateRecommendedReadingListTask"

override fun shouldRun(lastRun: Date): Boolean {
if (millisSinceLastRun(lastRun) < TimeUnit.DAYS.toMillis(1)) {
return false
}
class RecommendedReadingListWorker(
appContext: Context,
workerParams: WorkerParameters,
) : CoroutineWorker(appContext, workerParams) {
override suspend fun doWork(): Result {
// And run either every day, or on the first day of the week or month
val now = LocalDate.now()
return when (Prefs.recommendedReadingListUpdateFrequency) {
val shouldRun = when (Prefs.recommendedReadingListUpdateFrequency) {
RecommendedReadingListUpdateFrequency.DAILY -> true
RecommendedReadingListUpdateFrequency.WEEKLY -> now.dayOfWeek.value == 1
RecommendedReadingListUpdateFrequency.WEEKLY -> now.dayOfWeek == DayOfWeek.MONDAY
RecommendedReadingListUpdateFrequency.MONTHLY -> now.dayOfMonth == 1
}
}

override suspend fun run(lastRun: Date) {
RecommendedReadingListHelper.generateRecommendedReadingList(true)
if (shouldRun) {
RecommendedReadingListHelper.generateRecommendedReadingList(true)
}
return Result.success()
}
}
45 changes: 0 additions & 45 deletions app/src/main/java/org/wikipedia/recurring/RecurringTask.kt

This file was deleted.

Loading
Loading