package com.dmc.callcrm.sync import android.content.Context import androidx.work.CoroutineWorker import androidx.work.Constraints import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.NetworkType import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import androidx.work.WorkerParameters import com.dmc.callcrm.ApiConfig import java.util.concurrent.TimeUnit class SyncWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx, params) { override suspend fun doWork(): Result { val ok = Syncer.run(applicationContext) return if (ok) Result.success() else Result.retry() } companion object { private const val NAME = "dmc_periodic_sync" /** Schedule the recurring background sync (idempotent). */ fun schedule(ctx: Context) { val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() val req = PeriodicWorkRequestBuilder( ApiConfig.SYNC_INTERVAL_MIN, TimeUnit.MINUTES ).setConstraints(constraints).build() WorkManager.getInstance(ctx).enqueueUniquePeriodicWork( NAME, ExistingPeriodicWorkPolicy.KEEP, req ) } } }