From ee1079a0796f60de7c113de5a3c1dd3494af7ad0 Mon Sep 17 00:00:00 2001 From: RallyBlock <50393307+RallyBlock@users.noreply.github.com> Date: Thu, 22 Oct 2026 20:46:32 -0700 Subject: [PATCH] Sync only while the app is open. --- README.md | 2 +- app/build.gradle.kts | 1 - .../java/com/racingapp/pitlog/RacingApp.kt | 3 +- .../java/com/racingapp/pitlog/data/PitSync.kt | 30 ------------------- .../com/racingapp/pitlog/data/SyncWorker.kt | 17 ----------- .../pitlog/ui/settings/SettingsScreen.kt | 2 +- gradle/libs.versions.toml | 2 -- 7 files changed, 3 insertions(+), 54 deletions(-) delete mode 100644 app/src/main/java/com/racingapp/pitlog/data/SyncWorker.kt diff --git a/README.md b/README.md index 83f433d..31d2ffb 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The gear icon opens **Car**. A new install already has the server address filled `http://sync.sleepingliongames.com:27017` -**Sync on its own** sends a save right away, checks about every 30 seconds while the app is open, and about every 15 minutes while it is closed. **Sync now** sends every car on the phone. +**Sync on its own** sends a save right away and checks about every 30 seconds while the app is open. It stays quiet while the app is closed. **Sync now** sends every car on the phone. Each car has its own token, shown on the **Car** screen. **Share token** sends that string to another phone. On the other phone, paste it under **Add a car from a token**. That phone then syncs that car. A different car gets a different token. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 28085cf..4115341 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -70,7 +70,6 @@ dependencies { implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.ktx) implementation(libs.kotlinx.coroutines.android) - implementation(libs.androidx.work) ksp(libs.androidx.room.compiler) debugImplementation(libs.androidx.compose.ui.tooling) testImplementation(libs.junit) diff --git a/app/src/main/java/com/racingapp/pitlog/RacingApp.kt b/app/src/main/java/com/racingapp/pitlog/RacingApp.kt index 438780a..94129bc 100644 --- a/app/src/main/java/com/racingapp/pitlog/RacingApp.kt +++ b/app/src/main/java/com/racingapp/pitlog/RacingApp.kt @@ -18,8 +18,7 @@ open class RacingApp : Application() { val dao = AppDatabase.create(this).raceDao() val preferences = SyncPreferences(this) runBlocking(Dispatchers.IO) { ensureCars(dao, preferences) } - val sync = PitSync(this, dao, preferences) + val sync = PitSync(dao, preferences) repository = Repository(dao, sync, preferences) - sync.schedule() } } diff --git a/app/src/main/java/com/racingapp/pitlog/data/PitSync.kt b/app/src/main/java/com/racingapp/pitlog/data/PitSync.kt index eb79012..20e46d6 100644 --- a/app/src/main/java/com/racingapp/pitlog/data/PitSync.kt +++ b/app/src/main/java/com/racingapp/pitlog/data/PitSync.kt @@ -1,17 +1,10 @@ package com.racingapp.pitlog.data -import android.content.Context -import androidx.work.Constraints -import androidx.work.ExistingPeriodicWorkPolicy -import androidx.work.NetworkType -import androidx.work.PeriodicWorkRequestBuilder -import androidx.work.WorkManager import java.net.HttpURLConnection import java.net.URL import java.time.LocalTime import java.time.format.DateTimeFormatter import java.util.UUID -import java.util.concurrent.TimeUnit import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -23,10 +16,7 @@ import org.json.JSONObject class SyncException(message: String) : Exception(message) -private const val WORK_NAME = "pitlog-sync" - class PitSync( - private val appContext: Context, private val dao: RaceDao, private val preferences: SyncPreferences, ) { @@ -39,30 +29,10 @@ class PitSync( fun saveAddress(address: String) { preferences.address = address.trim().trimEnd('/') - schedule() } fun setAutomatic(enabled: Boolean) { preferences.automatic = enabled - schedule() - } - - fun schedule() { - try { - val manager = WorkManager.getInstance(appContext) - if (!preferences.automatic || preferences.address.isBlank()) { - manager.cancelUniqueWork(WORK_NAME) - return - } - val request = PeriodicWorkRequestBuilder(15, TimeUnit.MINUTES) - .setConstraints( - Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build(), - ) - .build() - manager.enqueueUniquePeriodicWork(WORK_NAME, ExistingPeriodicWorkPolicy.UPDATE, request) - } catch (_: Exception) { - // Unit tests do not start WorkManager. - } } fun launchAutomatic() { diff --git a/app/src/main/java/com/racingapp/pitlog/data/SyncWorker.kt b/app/src/main/java/com/racingapp/pitlog/data/SyncWorker.kt deleted file mode 100644 index d4ae2c1..0000000 --- a/app/src/main/java/com/racingapp/pitlog/data/SyncWorker.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.racingapp.pitlog.data - -import android.content.Context -import androidx.work.CoroutineWorker -import androidx.work.WorkerParameters -import com.racingapp.pitlog.RacingApp - -class SyncWorker( - context: Context, - params: WorkerParameters, -) : CoroutineWorker(context, params) { - override suspend fun doWork(): Result { - val app = applicationContext as? RacingApp ?: return Result.success() - app.repository.syncAutomatic() - return Result.success() - } -} diff --git a/app/src/main/java/com/racingapp/pitlog/ui/settings/SettingsScreen.kt b/app/src/main/java/com/racingapp/pitlog/ui/settings/SettingsScreen.kt index bb2c13e..49e4279 100644 --- a/app/src/main/java/com/racingapp/pitlog/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/com/racingapp/pitlog/ui/settings/SettingsScreen.kt @@ -286,7 +286,7 @@ fun SettingsScreen(onBack: () -> Unit) { } SectionLabel("Server") Text( - "This is the Pelican address. Every car on this phone uses it. Sync on its own sends each save right away, checks every half minute while the app is open, and about every 15 minutes while it is closed.", + "This is the Pelican address. Every car on this phone uses it. Sync on its own sends each save right away and checks every half minute while the app is open.", color = MaterialTheme.colorScheme.onSurfaceVariant, ) Row( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 47e81e7..6c026af 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,6 @@ lifecycle = "2.11.0" activity = "1.12.4" core = "1.19.1" coroutines = "1.10.1" -work = "2.10.1" junit = "4.13.2" robolectric = "4.16" androidxTestCore = "1.6.1" @@ -32,7 +31,6 @@ androidx-room-runtime = { group = "androidx.room", name = "room-runtime", versio androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" } -androidx-work = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "work" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidxTestCore" }