diff --git a/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/MultiImageView.kt b/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/MultiImageView.kt index 767371f5d..24755c615 100644 --- a/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/MultiImageView.kt +++ b/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/MultiImageView.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.component.MultiImageScreen import com.crisiscleanup.core.designsystem.component.TopBarBackAction diff --git a/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/SingleImageView.kt b/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/SingleImageView.kt index 4b45e3e19..c267033b1 100644 --- a/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/SingleImageView.kt +++ b/app-sandbox/src/main/java/com/crisiscleanup/sandbox/ui/SingleImageView.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.component.ViewImageScreen import com.crisiscleanup.sandbox.SingleImageViewModel diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 53714dfc4..2502c205e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,7 +14,7 @@ plugins { android { defaultConfig { - val buildVersion = 281 + val buildVersion = 286 applicationId = "com.crisiscleanup" versionCode = buildVersion versionName = "0.9.${buildVersion - 168}" @@ -94,6 +94,7 @@ android { packaging { resources { excludes.add("/META-INF/{AL2.0,LGPL2.1}") + excludes.add("/META-INF/versions/9/OSGI-INF/MANIFEST.MF") } } testOptions { diff --git a/app/src/main/java/com/crisiscleanup/network/CrisisCleanupInterceptorProvider.kt b/app/src/main/java/com/crisiscleanup/network/CrisisCleanupInterceptorProvider.kt index 29a61b10f..274b0294c 100644 --- a/app/src/main/java/com/crisiscleanup/network/CrisisCleanupInterceptorProvider.kt +++ b/app/src/main/java/com/crisiscleanup/network/CrisisCleanupInterceptorProvider.kt @@ -20,7 +20,6 @@ import com.crisiscleanup.core.network.retrofit.RequestHeaderKey import com.crisiscleanup.core.network.retrofit.RequestHeaderKeysLookup import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking -import kotlinx.datetime.Clock import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import okhttp3.Interceptor @@ -32,6 +31,7 @@ import java.io.IOException import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock private fun Json.parseNetworkErrors(response: String): List { var errors: List = emptyList() diff --git a/app/src/main/java/com/crisiscleanup/ui/CrisisCleanupApp.kt b/app/src/main/java/com/crisiscleanup/ui/CrisisCleanupApp.kt index 5421ae0bf..50441bc6c 100644 --- a/app/src/main/java/com/crisiscleanup/ui/CrisisCleanupApp.kt +++ b/app/src/main/java/com/crisiscleanup/ui/CrisisCleanupApp.kt @@ -45,7 +45,7 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.AuthState import com.crisiscleanup.MainActivityViewModel diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 6d0237010..166b54907 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -37,7 +37,7 @@ kotlin { } dependencies { - compileOnly(libs.android.gradlePlugin) + compileOnly(libs.android.gradleApiPlugin) compileOnly(libs.android.tools.common) compileOnly(libs.compose.gradlePlugin) compileOnly(libs.firebase.crashlytics.gradlePlugin) @@ -114,5 +114,9 @@ gradlePlugin { id = libs.plugins.nowinandroid.jvm.library.get().pluginId implementationClass = "JvmLibraryConventionPlugin" } + register("root") { + id = libs.plugins.nowinandroid.root.get().pluginId + implementationClass = "RootPlugin" + } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index f6b08c62d..8d5aa808a 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -16,7 +16,6 @@ import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension -import com.android.build.gradle.BaseExtension import com.google.samples.apps.nowinandroid.DefaultConfigTargetSdk import com.google.samples.apps.nowinandroid.configureBadgingTasks import com.google.samples.apps.nowinandroid.configureGradleManagedDevices @@ -45,7 +44,7 @@ class AndroidApplicationConventionPlugin : Plugin { } extensions.configure { configurePrintApksTask(this) - configureBadgingTasks(extensions.getByType(), this) + configureBadgingTasks(extensions.getByType(), this) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 6899d90c2..a848b6946 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -import com.android.build.gradle.LibraryExtension +import com.android.build.api.dsl.LibraryExtension import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 19fabf549..63a992b05 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -import com.android.build.gradle.LibraryExtension +import com.android.build.api.dsl.LibraryExtension import com.google.samples.apps.nowinandroid.configureAndroidCompose import org.gradle.api.Plugin import org.gradle.api.Project diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index 0042258f3..548b0c420 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -14,8 +14,8 @@ * limitations under the License. */ +import com.android.build.api.dsl.LibraryExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension -import com.android.build.gradle.LibraryExtension import com.google.samples.apps.nowinandroid.DefaultConfigTargetSdk import com.google.samples.apps.nowinandroid.configureFlavors import com.google.samples.apps.nowinandroid.configureGradleManagedDevices @@ -38,7 +38,8 @@ class AndroidLibraryConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) - defaultConfig.targetSdk = DefaultConfigTargetSdk + testOptions.targetSdk = DefaultConfigTargetSdk + lint.targetSdk = DefaultConfigTargetSdk defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testOptions.animationsDisabled = true configureFlavors(this) diff --git a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt index f7094a5d9..32f743dbd 100644 --- a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -import com.android.build.gradle.TestExtension +import com.android.build.api.dsl.TestExtension import com.google.samples.apps.nowinandroid.DefaultConfigTargetSdk import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid diff --git a/build-logic/convention/src/main/kotlin/RootPlugin.kt b/build-logic/convention/src/main/kotlin/RootPlugin.kt new file mode 100644 index 000000000..b704adf76 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/RootPlugin.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.google.samples.apps.nowinandroid.configureGraphTasks +import org.gradle.api.Plugin +import org.gradle.api.Project + +class RootPlugin : Plugin { + override fun apply(target: Project) { + require(target.path == ":") + target.subprojects { configureGraphTasks() } + } +} diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index ed2a5289b..3d050d86b 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -42,13 +42,6 @@ internal fun Project.configureAndroidCompose( "implementation"(libs.findLibrary("androidx-compose-ui-tooling-preview").get()) "debugImplementation"(libs.findLibrary("androidx-compose-ui-tooling").get()) } - - testOptions { - unitTests { - // For Robolectric - isIncludeAndroidResources = true - } - } } extensions.configure { diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt index 886c70625..229388001 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt @@ -18,8 +18,8 @@ package com.google.samples.apps.nowinandroid import com.android.SdkConstants import com.android.build.api.artifact.SingleArtifact +import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension -import com.android.build.gradle.BaseExtension import com.google.common.truth.Truth.assertWithMessage import org.gradle.api.DefaultTask import org.gradle.api.Project @@ -110,7 +110,7 @@ private fun String.capitalized() = replaceFirstChar { } fun Project.configureBadgingTasks( - baseExtension: BaseExtension, + baseExtension: ApplicationExtension, componentsExtension: ApplicationAndroidComponentsExtension, ) { // Registers a callback to be called, when a new variant is configured diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Graph.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Graph.kt new file mode 100644 index 000000000..439a50181 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Graph.kt @@ -0,0 +1,327 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid + +import com.android.utils.associateWithNotNull +import com.google.samples.apps.nowinandroid.PluginType.Unknown +import org.gradle.api.DefaultTask +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration +import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.MapProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity.NONE +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.assign +import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.withType +import kotlin.text.RegexOption.DOT_MATCHES_ALL + +/** + * Generates module dependency graphs with `graphDump` task, and update the corresponding `README.md` file with `graphUpdate`. + * + * This is not an optimal implementation and could be improved if needed: + * - [Graph.invoke] is **recursively** searching through dependent projects (although in practice it will never reach a stack overflow). + * - [Graph.invoke] is entirely re-executed for all projects, without re-using intermediate values. + * - [Graph.invoke] is always executed during Gradle's Configuration phase (but takes in general less than 1 ms for a project). + * + * The resulting graphs can be configured with `graph.ignoredProjects` and `graph.supportedConfigurations` properties. + */ +private class Graph( + private val root: Project, + private val dependencies: MutableMap>> = mutableMapOf(), + private val plugins: MutableMap = mutableMapOf(), + private val seen: MutableSet = mutableSetOf(), +) { + + private val ignoredProjects = root.providers.gradleProperty("graph.ignoredProjects") + .map { it.split(",").toSet() } + .orElse(emptySet()) + private val supportedConfigurations = + root.providers.gradleProperty("graph.supportedConfigurations") + .map { it.split(",").toSet() } + .orElse(setOf("api", "implementation", "baselineProfile", "testedApks")) + + operator fun invoke(project: Project = root): Graph { + if (project.path in seen) return this + seen += project.path + plugins.putIfAbsent( + project, + PluginType.entries.firstOrNull { project.pluginManager.hasPlugin(it.id) } ?: Unknown, + ) + dependencies.compute(project) { _, u -> u.orEmpty() } + project.configurations + .matching { it.name in supportedConfigurations.get() } + .associateWithNotNull { it.dependencies.withType().ifEmpty { null } } + .flatMap { (c, value) -> value.map { dep -> c to project.project(dep.path) } } + .filter { (_, p) -> p.path !in ignoredProjects.get() } + .forEach { (configuration: Configuration, projectDependency: Project) -> + dependencies.compute(project) { _, u -> u.orEmpty() + (configuration to projectDependency) } + invoke(projectDependency) + } + return this + } + + fun dependencies(): Map>> = dependencies + .mapKeys { it.key.path } + .mapValues { it.value.mapTo(mutableSetOf()) { (c, p) -> c.name to p.path } } + + fun plugins() = plugins.mapKeys { it.key.path } +} + +/** + * Declaration order is important, as only the first match will be retained. + */ +internal enum class PluginType(val id: String, val ref: String, val style: String) { + AndroidApplication( + id = "nowinandroid.android.application", + ref = "android-application", + style = "fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000", + ), + AndroidFeature( + id = "nowinandroid.android.feature", + ref = "android-feature", + style = "fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000", + ), + AndroidLibrary( + id = "nowinandroid.android.library", + ref = "android-library", + style = "fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000", + ), + AndroidTest( + id = "nowinandroid.android.test", + ref = "android-test", + style = "fill:#A0C4FF,stroke:#000,stroke-width:2px,color:#000", + ), + Jvm( + id = "nowinandroid.jvm.library", + ref = "jvm-library", + style = "fill:#BDB2FF,stroke:#000,stroke-width:2px,color:#000", + ), + Unknown( + id = "?", + ref = "unknown", + style = "fill:#FFADAD,stroke:#000,stroke-width:2px,color:#000", + ), +} + +internal fun Project.configureGraphTasks() { + if (!buildFile.exists()) return // Ignore root modules without build file + val dumpTask = tasks.register("graphDump") { + val graph = Graph(this@configureGraphTasks).invoke() + projectPath = this@configureGraphTasks.path + dependencies = graph.dependencies() + plugins = graph.plugins() + output = this@configureGraphTasks.layout.buildDirectory.file("mermaid/graph.txt") + legend = this@configureGraphTasks.layout.buildDirectory.file("mermaid/legend.txt") + } + tasks.register("graphUpdate") { + projectPath = this@configureGraphTasks.path + input = dumpTask.flatMap { it.output } + legend = dumpTask.flatMap { it.legend } + output = this@configureGraphTasks.layout.projectDirectory.file("README.md") + } +} + +@CacheableTask +private abstract class GraphDumpTask : DefaultTask() { + + @get:Input + abstract val projectPath: Property + + @get:Input + abstract val dependencies: MapProperty>> + + @get:Input + abstract val plugins: MapProperty + + @get:OutputFile + abstract val output: RegularFileProperty + + @get:OutputFile + abstract val legend: RegularFileProperty + + override fun getDescription() = "Dumps project dependencies to a mermaid file." + + @TaskAction + operator fun invoke() { + output.get().asFile.writeText(mermaid()) + legend.get().asFile.writeText(legend()) + logger.lifecycle(output.get().asFile.toPath().toUri().toString()) + } + + private fun mermaid() = buildString { + val dependencies: Set = dependencies.get() + .flatMapTo(mutableSetOf()) { (project, entries) -> entries.map { it.toDependency(project) } } + // FrontMatter configuration (not supported yet on GitHub.com) + appendLine( + // language=YAML + """ + --- + config: + layout: elk + elk: + nodePlacementStrategy: SIMPLE + --- + """.trimIndent(), + ) + // Graph declaration + appendLine("graph TB") + // Nodes and subgraphs (limited to a single nested layer) + val (rootProjects, nestedProjects) = dependencies + .map { listOf(it.project, it.dependency) }.flatten().toSet() + .plus(projectPath.get()) // Special case when this specific module has no other dependency + .groupBy { it.substringBeforeLast(":") } + .entries.partition { it.key.isEmpty() } + nestedProjects.sortedByDescending { it.value.size }.forEach { (group, projects) -> + appendLine(" subgraph $group") + appendLine(" direction TB") + projects.sorted().forEach { + appendLine(it.alias(indent = 4, plugins.get().getValue(it))) + } + appendLine(" end") + } + rootProjects.flatMap { it.value }.sortedDescending().forEach { + appendLine(it.alias(indent = 2, plugins.get().getValue(it))) + } + // Links + if (dependencies.isNotEmpty()) appendLine() + dependencies + .sortedWith(compareBy({ it.project }, { it.dependency }, { it.configuration })) + .forEach { appendLine(it.link(indent = 2)) } + // Classes + appendLine() + PluginType.entries.forEach { appendLine(it.classDef()) } + } + + private fun legend() = buildString { + appendLine("graph TB") + listOf( + "application" to PluginType.AndroidApplication, + "feature" to PluginType.AndroidFeature, + "library" to PluginType.AndroidLibrary, + "jvm" to PluginType.Jvm, + ).forEach { (name, type) -> + appendLine(name.alias(indent = 2, type)) + } + appendLine() + listOf( + Dependency("application", "implementation", "feature"), + Dependency("library", "api", "jvm"), + ).forEach { + appendLine(it.link(indent = 2)) + } + appendLine() + PluginType.entries.forEach { appendLine(it.classDef()) } + } + + private class Dependency(val project: String, val configuration: String, val dependency: String) + + private fun Pair.toDependency(project: String) = + Dependency(project, configuration = first, dependency = second) + + private fun String.alias(indent: Int, pluginType: PluginType): String = buildString { + append(" ".repeat(indent)) + append(this@alias) + append("[").append(substringAfterLast(":")).append("]:::") + append(pluginType.ref) + } + + private fun Dependency.link(indent: Int) = buildString { + append(" ".repeat(indent)) + append(project).append(" ") + append( + when (configuration) { + "api" -> "-->" + "implementation" -> "-.->" + else -> "-.->|$configuration|" + }, + ) + append(" ").append(dependency) + } + + private fun PluginType.classDef() = "classDef $ref $style;" +} + +@CacheableTask +private abstract class GraphUpdateTask : DefaultTask() { + + @get:Input + abstract val projectPath: Property + + @get:InputFile + @get:PathSensitive(NONE) + abstract val input: RegularFileProperty + + @get:InputFile + @get:PathSensitive(NONE) + abstract val legend: RegularFileProperty + + @get:OutputFile + abstract val output: RegularFileProperty + + override fun getDescription() = "Updates Markdown file with the corresponding dependency graph." + + @TaskAction + operator fun invoke() = with(output.get().asFile) { + if (!exists()) { + createNewFile() + writeText( + """ + # `${projectPath.get()}` + + ## Module dependency graph + + + + """.trimIndent(), + ) + } + val mermaid = input.get().asFile.readText().trimTrailingNewLines() + val legend = legend.get().asFile.readText().trimTrailingNewLines() + val regex = """()(.*?)()""".toRegex(DOT_MATCHES_ALL) + val text = readText().replace(regex) { match -> + val (start, _, end) = match.destructured + """ + |$start + |```mermaid + |$mermaid + |``` + | + |
📋 Graph legend + | + |```mermaid + |$legend + |``` + | + |
+ |$end + """.trimMargin() + } + writeText(text) + } + + private fun String.trimTrailingNewLines() = lines() + .dropLastWhile(String::isBlank) + .joinToString(System.lineSeparator()) +} diff --git a/build.gradle.kts b/build.gradle.kts index ea2b400b6..706b2d8d3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,5 +22,14 @@ plugins { alias(libs.plugins.ksp) apply false alias(libs.plugins.secrets) apply false alias(libs.plugins.room) apply false - alias(libs.plugins.module.graph) apply true // Plugin applied to allow module graph generation + alias(libs.plugins.nowinandroid.root) } + +subprojects { + tasks.withType().configureEach { + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime") + freeCompilerArgs.add("-Xannotation-default-target=param-property") + } + } +} \ No newline at end of file diff --git a/core/addresssearch/src/main/java/com/crisiscleanup/core/addresssearch/GooglePlaceAddressSearchRepository.kt b/core/addresssearch/src/main/java/com/crisiscleanup/core/addresssearch/GooglePlaceAddressSearchRepository.kt index 3539d8eca..3e95c44e7 100644 --- a/core/addresssearch/src/main/java/com/crisiscleanup/core/addresssearch/GooglePlaceAddressSearchRepository.kt +++ b/core/addresssearch/src/main/java/com/crisiscleanup/core/addresssearch/GooglePlaceAddressSearchRepository.kt @@ -31,13 +31,13 @@ import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.tasks.await -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant class GooglePlaceAddressSearchRepository @Inject constructor( @ApplicationContext private val context: Context, @@ -51,7 +51,10 @@ class GooglePlaceAddressSearchRepository @Inject constructor( private suspend fun placesClient(): PlacesClient { placesClientMutex.withLock { if (placesClientInternal == null) { - Places.initialize(context, settingsProvider.mapsApiKey) + Places.initializeWithNewPlacesApiEnabled( + context, + settingsProvider.mapsApiKey, + ) placesClientInternal = Places.createClient(context) } } diff --git a/core/appnav/src/main/java/com/crisiscleanup/core/appnav/CommonNavigation.kt b/core/appnav/src/main/java/com/crisiscleanup/core/appnav/CommonNavigation.kt index 18edf39f5..03f3782e5 100644 --- a/core/appnav/src/main/java/com/crisiscleanup/core/appnav/CommonNavigation.kt +++ b/core/appnav/src/main/java/com/crisiscleanup/core/appnav/CommonNavigation.kt @@ -2,7 +2,7 @@ package com.crisiscleanup.core.appnav import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.ViewModel import androidx.navigation.NavBackStackEntry import androidx.navigation.NavController diff --git a/core/common/src/main/java/com/crisiscleanup/core/common/DateUtil.kt b/core/common/src/main/java/com/crisiscleanup/core/common/DateUtil.kt index f8d647874..4887caa0e 100644 --- a/core/common/src/main/java/com/crisiscleanup/core/common/DateUtil.kt +++ b/core/common/src/main/java/com/crisiscleanup/core/common/DateUtil.kt @@ -1,14 +1,14 @@ package com.crisiscleanup.core.common import com.github.marlonlom.utilities.timeago.TimeAgo -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant -import kotlinx.datetime.toJavaInstant -import kotlinx.datetime.toKotlinInstant import java.time.ZoneId import java.time.format.DateTimeFormatter import java.time.temporal.ChronoUnit +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant +import kotlin.time.toJavaInstant +import kotlin.time.toKotlinInstant val Instant.relativeTime: String get() = TimeAgo.using(toEpochMilliseconds()) diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/WorksiteInteractor.kt b/core/data/src/main/java/com/crisiscleanup/core/data/WorksiteInteractor.kt index c9dd9a80b..bf14f6f7e 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/WorksiteInteractor.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/WorksiteInteractor.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.data -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant interface WorksiteInteractor { fun onSelectCase( diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/CountTimeTracker.kt b/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/CountTimeTracker.kt index a94651999..8a1d8d6ea 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/CountTimeTracker.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/CountTimeTracker.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.data.incidentcache -import kotlinx.datetime.Clock +import kotlin.time.Clock class CountTimeTracker { private val counts = mutableListOf() diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentDataPullReporter.kt b/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentDataPullReporter.kt index 742213825..fdb9f2cea 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentDataPullReporter.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentDataPullReporter.kt @@ -3,8 +3,8 @@ package com.crisiscleanup.core.data.incidentcache import com.crisiscleanup.core.data.model.IncidentDataPullStats import com.crisiscleanup.core.data.model.IncidentPullDataType import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant interface IncidentDataPullReporter { val incidentDataPullStats: Flow diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentOrganizationsSyncer.kt b/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentOrganizationsSyncer.kt index ee7a99004..ab0f840fa 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentOrganizationsSyncer.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/incidentcache/IncidentOrganizationsSyncer.kt @@ -13,8 +13,8 @@ import com.crisiscleanup.core.network.CrisisCleanupNetworkDataSource import kotlinx.coroutines.CancellationException import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive -import kotlinx.datetime.Clock import javax.inject.Inject +import kotlin.time.Clock interface OrganizationsSyncer { suspend fun sync(incidentId: Long) diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataPullStats.kt b/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataPullStats.kt index 70afb170f..63783009b 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataPullStats.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataPullStats.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.data.model import com.crisiscleanup.core.model.data.EmptyIncident -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant enum class IncidentPullDataType { WorksitesCore, diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataSyncParameters.kt b/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataSyncParameters.kt index a946144df..c3fef171c 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataSyncParameters.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/model/IncidentDataSyncParameters.kt @@ -1,11 +1,11 @@ package com.crisiscleanup.core.data.model -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import kotlinx.serialization.Serializable import kotlin.math.abs +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant data class IncidentDataSyncParameters( val incidentId: Long, diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkFlag.kt b/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkFlag.kt index 201d93636..b08638f16 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkFlag.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkFlag.kt @@ -3,7 +3,7 @@ package com.crisiscleanup.core.data.model import com.crisiscleanup.core.database.model.WorksiteFlagEntity import com.crisiscleanup.core.model.data.WorksiteFlagType import com.crisiscleanup.core.network.model.NetworkWorksiteFull -import kotlinx.datetime.Clock +import kotlin.time.Clock fun NetworkWorksiteFull.FlagShort.asEntity() = WorksiteFlagEntity( id = 0, diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkLanguage.kt b/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkLanguage.kt index 4d90d7226..e6ccf5c6a 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkLanguage.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/model/NetworkLanguage.kt @@ -3,9 +3,9 @@ package com.crisiscleanup.core.data.model import com.crisiscleanup.core.database.model.LanguageTranslationEntity import com.crisiscleanup.core.network.model.NetworkLanguageDescription import com.crisiscleanup.core.network.model.NetworkLanguageTranslation -import kotlinx.datetime.Instant import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import kotlin.time.Instant fun NetworkLanguageDescription.asEntity() = LanguageTranslationEntity( key = subtag, diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountDataRefresher.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountDataRefresher.kt index 16af9b161..1470a22f3 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountDataRefresher.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountDataRefresher.kt @@ -13,13 +13,13 @@ import com.crisiscleanup.core.network.model.profilePictureUrl import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant @Singleton class AccountDataRefresher @Inject constructor( diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountUpdateRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountUpdateRepository.kt index 0c545f92a..1d9b10efa 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountUpdateRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/AccountUpdateRepository.kt @@ -7,8 +7,8 @@ import com.crisiscleanup.core.model.data.InitiatePhoneLoginResult import com.crisiscleanup.core.model.data.PasswordResetInitiation import com.crisiscleanup.core.network.CrisisCleanupAccountApi import kotlinx.coroutines.flow.first -import kotlinx.datetime.Clock import javax.inject.Inject +import kotlin.time.Clock interface AccountUpdateRepository { suspend fun initiateEmailMagicLink(emailAddress: String): Boolean diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/AppMetricsRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/AppMetricsRepository.kt index 7b7166ea0..dfdb64cc4 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/AppMetricsRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/AppMetricsRepository.kt @@ -18,10 +18,10 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.launch -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock +import kotlin.time.Instant // TODO Rename to AppInfoRepository interface LocalAppMetricsRepository { diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/CaseHistoryRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/CaseHistoryRepository.kt index 75b1ea7bb..cfbdac482 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/CaseHistoryRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/CaseHistoryRepository.kt @@ -20,9 +20,9 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Instant interface CaseHistoryRepository { val loadingWorksiteId: Flow diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/CasesFilterRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/CasesFilterRepository.kt index e278102a0..0d20b16b4 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/CasesFilterRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/CasesFilterRepository.kt @@ -16,9 +16,9 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.withContext -import kotlinx.datetime.Clock import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock interface CasesFilterRepository { val casesFilters: CasesFilter diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/CrisisCleanupAccountDataRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/CrisisCleanupAccountDataRepository.kt index d3ed45166..610568b7e 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/CrisisCleanupAccountDataRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/CrisisCleanupAccountDataRepository.kt @@ -20,10 +20,10 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock import org.jetbrains.annotations.VisibleForTesting import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentCacheRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentCacheRepository.kt index c7a46ae43..c7c85e977 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentCacheRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentCacheRepository.kt @@ -54,17 +54,17 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import kotlinx.serialization.json.Json import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant import kotlinx.coroutines.flow.combine as kCombine interface IncidentCacheRepository { diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentClaimThresholdRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentClaimThresholdRepository.kt index 98f5145a9..10b54cacc 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentClaimThresholdRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentClaimThresholdRepository.kt @@ -10,6 +10,7 @@ import com.crisiscleanup.core.database.dao.IncidentDao import com.crisiscleanup.core.database.dao.IncidentDaoPlus import com.crisiscleanup.core.datastore.AccountInfoDataSource import com.crisiscleanup.core.model.data.IncidentClaimThreshold +import com.crisiscleanup.core.model.data.IncidentsData import kotlinx.coroutines.flow.first import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @@ -48,7 +49,13 @@ class CrisisCleanupIncidentClaimThresholdRepository @Inject constructor( incidentThresholds: List, ) { try { - incidentDaoPlus.saveIncidentThresholds(accountId, incidentThresholds) + val incidentsData = incidentSelector.data.value + val incidentIds = (incidentsData as? IncidentsData.Incidents)?.incidents + ?.map { it.id } + ?.toSet() + ?: emptySet() + val thresholds = incidentThresholds.filter { incidentIds.contains(it.incidentId) } + incidentDaoPlus.saveIncidentThresholds(accountId, thresholds) } catch (e: Exception) { logger.logException(e) } diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentsRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentsRepository.kt index 3ffe987b5..cf38a9058 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentsRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/IncidentsRepository.kt @@ -3,7 +3,7 @@ package com.crisiscleanup.core.data.repository import com.crisiscleanup.core.model.data.Incident import com.crisiscleanup.core.model.data.IncidentIdNameType import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Instant +import kotlin.time.Instant interface IncidentsRepository { val isLoading: Flow diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/LanguageTranslationsRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/LanguageTranslationsRepository.kt index c61891a31..b96652164 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/LanguageTranslationsRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/LanguageTranslationsRepository.kt @@ -33,10 +33,10 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock import java.util.Locale import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock interface LanguageTranslationsRepository : KeyTranslator { val isLoading: Flow diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListDataRefresher.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListDataRefresher.kt index 1f0a206f2..498579a78 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListDataRefresher.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListDataRefresher.kt @@ -4,12 +4,12 @@ import com.crisiscleanup.core.common.log.AppLogger import com.crisiscleanup.core.common.log.CrisisCleanupLoggers import com.crisiscleanup.core.common.log.Logger import com.crisiscleanup.core.data.ListsDataSyncer -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant @Singleton class ListDataRefresher @Inject constructor( diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListsRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListsRepository.kt index b8e169fa9..b5f488bf6 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListsRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/ListsRepository.kt @@ -37,8 +37,8 @@ import com.crisiscleanup.core.network.model.NetworkList import com.crisiscleanup.core.network.model.NetworkWorksiteFull import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import kotlinx.datetime.Clock import javax.inject.Inject +import kotlin.time.Clock interface ListsRepository { fun streamIncidentLists(incidentId: Long): Flow> diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/LocalImageRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/LocalImageRepository.kt index 7c18d1f5e..a19395bf5 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/LocalImageRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/LocalImageRepository.kt @@ -5,6 +5,7 @@ import android.content.Context import android.net.Uri import android.os.Bundle import android.provider.MediaStore +import androidx.core.net.toUri import com.crisiscleanup.core.common.log.AppLogger import com.crisiscleanup.core.common.log.CrisisCleanupLoggers import com.crisiscleanup.core.common.log.Logger @@ -43,7 +44,7 @@ interface LocalImageRepository { suspend fun deleteLocalImage(id: Long) - suspend fun syncWorksiteMedia(worksiteId: Long): Int + suspend fun syncWorksiteMedia(worksiteId: Long): UploadMediaResult } class CrisisCleanupLocalImageRepository @Inject constructor( @@ -59,11 +60,8 @@ class CrisisCleanupLocalImageRepository @Inject constructor( ) : LocalImageRepository { private val fileUploadMutex = Mutex() - private val _syncingWorksiteId = MutableStateFlow(EmptyWorksite.id) - override val syncingWorksiteId = _syncingWorksiteId - - private val _syncingWorksiteImage = MutableStateFlow(0L) - override val syncingWorksiteImage = _syncingWorksiteImage + override val syncingWorksiteId = MutableStateFlow(EmptyWorksite.id) + override val syncingWorksiteImage = MutableStateFlow(0L) override fun streamNetworkImageUrl(id: Long) = networkFileDao.streamNetworkImageUrl(id) override fun streamLocalImageUri(id: Long) = localImageDao.streamLocalImageUri(id) @@ -146,39 +144,39 @@ class CrisisCleanupLocalImageRepository @Inject constructor( return writeApi.addFileToWorksite(networkWorksiteId, fileUpload.id, imageTag) } - override suspend fun syncWorksiteMedia(worksiteId: Long): Int { + override suspend fun syncWorksiteMedia(worksiteId: Long): UploadMediaResult { val imagesPendingUpload = localImageDao.getWorksiteLocalImages(worksiteId) if (imagesPendingUpload.isEmpty()) { - return 0 + return UploadMediaResult(worksiteId) } val networkWorksiteId = worksiteDao.getWorksiteNetworkId(worksiteId) if (networkWorksiteId <= 0) { - return 0 + return UploadMediaResult(worksiteId) } syncLogger.type = "worksite-$worksiteId-media" syncLogger.log("Syncing ${imagesPendingUpload.size} images") - var saveCount = 0 + val syncedImageIds = mutableSetOf() var deleteLogMessage = "" if (fileUploadMutex.tryLock()) { - _syncingWorksiteId.value = worksiteId + syncingWorksiteId.value = worksiteId try { for (localImage in imagesPendingUpload) { - val uri = Uri.parse(localImage.uri) - if (uri == null) { + val uri = localImage.uri.toUri() + if (uri.toString().isBlank()) { deleteLogMessage = "Invalid URI ${localImage.uri}" } else { - val (fileName, mimeType) = getFileNameType(uri) - if (fileName.isBlank() || mimeType.isBlank()) { - deleteLogMessage = "File not found from ${localImage.uri}" - } else { - _syncingWorksiteImage.value = localImage.id + try { + val (fileName, mimeType) = getFileNameType(uri) + if (fileName.isBlank() || mimeType.isBlank()) { + deleteLogMessage = "File not found from ${localImage.uri}" + } else { + syncingWorksiteImage.value = localImage.id - try { val imageFile = copyImageToFile(uri, fileName) if (imageFile == null) { syncLogger.log("Unable to copy image", localImage.uri) @@ -194,16 +192,16 @@ class CrisisCleanupLocalImageRepository @Inject constructor( localImage, networkFile.asEntity(), ) - saveCount++ + syncedImageIds.add(localImage.id) syncLogger.log( "Synced ${localImage.id} (${networkFile.id} file ${networkFile.file})", - "$saveCount/${imagesPendingUpload.size}", + "${syncedImageIds.size}/${imagesPendingUpload.size}", ) } - } catch (e: Exception) { - appLogger.logException(e) - syncLogger.log("Sync error", e.message ?: "") } + } catch (e: Exception) { + appLogger.logException(e) + syncLogger.log("Sync error", e.message ?: "") } } @@ -216,14 +214,27 @@ class CrisisCleanupLocalImageRepository @Inject constructor( } } } finally { + syncingWorksiteId.value = EmptyWorksite.id + syncingWorksiteImage.value = 0 fileUploadMutex.unlock() - _syncingWorksiteId.value = EmptyWorksite.id - _syncingWorksiteImage.value = 0 } } syncLogger.flush() - return saveCount + val unsyncedIds = imagesPendingUpload.map { it.id } + .filter { !syncedImageIds.contains(it) } + .toSet() + return UploadMediaResult( + worksiteId, + syncedImageIds = syncedImageIds, + unsyncedImageIds = unsyncedIds, + ) } } + +data class UploadMediaResult( + val worksiteId: Long, + val syncedImageIds: Set = emptySet(), + val unsyncedImageIds: Set = emptySet(), +) diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstIncidentsRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstIncidentsRepository.kt index 9154537a4..b8cc4b4a7 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstIncidentsRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstIncidentsRepository.kt @@ -35,11 +35,11 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.withContext -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration.Companion.days +import kotlin.time.Instant @Singleton class OfflineFirstIncidentsRepository @Inject constructor( diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstWorksitesRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstWorksitesRepository.kt index e8bb67617..a36c25a6d 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstWorksitesRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/OfflineFirstWorksitesRepository.kt @@ -44,10 +44,10 @@ import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.stateIn -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock +import kotlin.time.Instant @Singleton class OfflineFirstWorksitesRepository @Inject constructor( diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/OrgVolunteerRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/OrgVolunteerRepository.kt index 5f333aa89..c6cf23950 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/OrgVolunteerRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/OrgVolunteerRepository.kt @@ -13,8 +13,8 @@ import com.crisiscleanup.core.model.data.JoinOrgResult import com.crisiscleanup.core.model.data.OrgInviteResult import com.crisiscleanup.core.model.data.OrgUserInviteInfo import com.crisiscleanup.core.network.CrisisCleanupRegisterApi -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Instant interface OrgVolunteerRepository { suspend fun requestInvitation(invite: InvitationRequest): InvitationRequestResult? diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/SearchWorksiteRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/SearchWorksiteRepository.kt index c52cc11fc..419b893b7 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/SearchWorksiteRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/SearchWorksiteRepository.kt @@ -18,10 +18,10 @@ import com.crisiscleanup.core.model.data.WorksiteSummary import com.crisiscleanup.core.network.CrisisCleanupNetworkDataSource import com.crisiscleanup.core.network.model.NetworkWorksiteShort import kotlinx.coroutines.coroutineScope -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant interface SearchWorksitesRepository { suspend fun searchWorksites( diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/ShareLocationRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/ShareLocationRepository.kt index a8a8d1486..30fa6a33a 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/ShareLocationRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/ShareLocationRepository.kt @@ -6,13 +6,13 @@ import com.crisiscleanup.core.common.log.CrisisCleanupLoggers import com.crisiscleanup.core.common.log.Logger import com.crisiscleanup.core.network.CrisisCleanupWriteApi import kotlinx.coroutines.flow.first -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant interface ShareLocationRepository { suspend fun shareLocation() diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/SyncLogRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/SyncLogRepository.kt index 3103d3170..da9ff3ff5 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/SyncLogRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/SyncLogRepository.kt @@ -10,6 +10,7 @@ import com.crisiscleanup.core.common.di.ApplicationScope import com.crisiscleanup.core.common.network.CrisisCleanupDispatchers.IO import com.crisiscleanup.core.common.network.Dispatcher import com.crisiscleanup.core.common.sync.SyncLogger +import com.crisiscleanup.core.data.IncidentSelector import com.crisiscleanup.core.data.model.asEntity import com.crisiscleanup.core.database.dao.SyncLogDao import com.crisiscleanup.core.database.model.PopulatedSyncLog @@ -26,8 +27,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import kotlinx.datetime.Clock import javax.inject.Inject +import kotlin.time.Clock interface SyncLogRepository { fun streamLogCount(): Flow @@ -40,6 +41,7 @@ interface SyncLogRepository { class PagingSyncLogRepository @Inject constructor( private val syncLogDao: SyncLogDao, private val appEnv: AppEnv, + private val incidentSelector: IncidentSelector, @ApplicationScope private val coroutineScope: CoroutineScope, @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, ) : SyncLogger, SyncLogRepository { @@ -53,11 +55,14 @@ class PagingSyncLogRepository @Inject constructor( }, ) + private val isLogging: Boolean + get() = appEnv.isNotProduction || incidentSelector.incidentId.value == 171L + override var type = "" override fun log(message: String, details: String, type: String): SyncLogger { // TODO Log if sync logging is enabled - if (appEnv.isNotProduction) { + if (isLogging) { logEntries.add( SyncLog( 0, diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/TeamsRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/TeamsRepository.kt index 974892375..eb01bf600 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/TeamsRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/TeamsRepository.kt @@ -18,9 +18,9 @@ import com.crisiscleanup.core.network.model.tryThrowException import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.mapLatest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock +import kotlin.time.Instant interface TeamsRepository { suspend fun streamIncidentTeams(incidentId: Long): Flow diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteChangeRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteChangeRepository.kt index bddb3202e..b6be65fed 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteChangeRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteChangeRepository.kt @@ -34,9 +34,9 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.sync.Mutex -import kotlinx.datetime.Clock import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock interface WorksiteChangeRepository { val syncingWorksiteIds: Flow> @@ -434,18 +434,27 @@ class CrisisCleanupWorksiteChangeRepository @Inject constructor( } } + // TODO Write integration tests override suspend fun syncWorksiteMedia(): Boolean { - val worksitesWithImages = localImageDao.getUploadImageWorksiteIds() - var isSyncedAll = true - for (worksiteImageUpload in worksitesWithImages) { - val worksiteId = worksiteImageUpload.id - val syncCount = localImageRepository.syncWorksiteMedia(worksiteId) - if (syncCount > 0) { - syncWorksite(worksiteId) + var unsyncedImageIds = mutableSetOf() + for (i in 0..<3) { + val worksitesWithImages = localImageDao.getUploadImageWorksiteIds() + for (worksiteImageUpload in worksitesWithImages) { + val worksiteId = worksiteImageUpload.id + val syncResult = localImageRepository.syncWorksiteMedia(worksiteId) + unsyncedImageIds.addAll(syncResult.unsyncedImageIds) + if (syncResult.syncedImageIds.isNotEmpty()) { + syncWorksite(worksiteId) + } + } + + val newestImageId = localImageDao.getNewestLocalImageId() + if (newestImageId == null || unsyncedImageIds.contains(newestImageId)) { + break + } else { + unsyncedImageIds = mutableSetOf() } - val unsyncedCount = worksiteImageUpload.count - syncCount - isSyncedAll = isSyncedAll && unsyncedCount == 0 } - return isSyncedAll + return unsyncedImageIds.isEmpty() } } diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteImageRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteImageRepository.kt index e527c85cc..f968ee461 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteImageRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksiteImageRepository.kt @@ -81,7 +81,7 @@ class OfflineFirstWorksiteImageRepository @Inject constructor( get() = newWorksiteImagesCache.isNotEmpty() override fun setUriFileAccessPermissions(uri: Uri) { - // TODO v29 fails to set access permission + // TODO API 29 (v10) fails to set access permission // Must inform user file uploads will not work try { val flag = Intent.FLAG_GRANT_READ_URI_PERMISSION diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksitesRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksitesRepository.kt index 75b3afce5..bee829148 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksitesRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/WorksitesRepository.kt @@ -12,8 +12,8 @@ import com.crisiscleanup.core.model.data.WorksiteSummary import com.crisiscleanup.core.network.model.NetworkWorksiteChange import com.crisiscleanup.core.network.model.NetworkWorksiteFull import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant interface WorksitesRepository { // Filtering sometimes requires scanning diff --git a/core/data/src/main/java/com/crisiscleanup/core/data/repository/fake/FakeAccountRepository.kt b/core/data/src/main/java/com/crisiscleanup/core/data/repository/fake/FakeAccountRepository.kt index 087ee8e02..d5e5978ec 100644 --- a/core/data/src/main/java/com/crisiscleanup/core/data/repository/fake/FakeAccountRepository.kt +++ b/core/data/src/main/java/com/crisiscleanup/core/data/repository/fake/FakeAccountRepository.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map -import kotlinx.datetime.Instant +import kotlin.time.Instant /** * For specifying account information (without needing internet) diff --git a/core/data/src/test/java/com/crisiscleanup/core/data/WorkTypeAnalyzerTest.kt b/core/data/src/test/java/com/crisiscleanup/core/data/WorkTypeAnalyzerTest.kt index 189a48277..8349383aa 100644 --- a/core/data/src/test/java/com/crisiscleanup/core/data/WorkTypeAnalyzerTest.kt +++ b/core/data/src/test/java/com/crisiscleanup/core/data/WorkTypeAnalyzerTest.kt @@ -12,11 +12,11 @@ import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock import kotlinx.serialization.json.Json import org.junit.Before import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.time.Clock class WorkTypeAnalyzerTest { @MockK diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestCrisisCleanupDatabase.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestCrisisCleanupDatabase.kt index 0ed021e05..e5e6ae41d 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestCrisisCleanupDatabase.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestCrisisCleanupDatabase.kt @@ -52,7 +52,7 @@ import com.crisiscleanup.core.database.model.WorksiteNoteEntity import com.crisiscleanup.core.database.model.WorksiteRootEntity import com.crisiscleanup.core.database.model.WorksiteSyncStatsEntity import com.crisiscleanup.core.database.util.InstantConverter -import kotlinx.datetime.Instant +import kotlin.time.Instant @Database( entities = [ diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestUtil.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestUtil.kt index 9aac6740b..a16aed793 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestUtil.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/TestUtil.kt @@ -10,11 +10,11 @@ import com.crisiscleanup.core.common.sync.SyncLogger import com.crisiscleanup.core.model.data.Worksite import com.crisiscleanup.core.model.data.WorksiteChangeSerializer import io.mockk.spyk -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicInteger +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant object TestUtil { // TODO Change spys to mock when https://github.com/mockk/mockk/issues/1035 is fixed diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/WorksiteTestUtil.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/WorksiteTestUtil.kt index c648f02ab..46004e970 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/WorksiteTestUtil.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/WorksiteTestUtil.kt @@ -5,7 +5,7 @@ import com.crisiscleanup.core.common.KeyTranslator import com.crisiscleanup.core.database.dao.testIncidentEntity import com.crisiscleanup.core.database.model.WorksiteEntity import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.datetime.Instant +import kotlin.time.Instant // Data and util for tests relating to worksites object WorksiteTestUtil { diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/IncidentDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/IncidentDaoTest.kt index 4262b94fc..56de0053c 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/IncidentDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/IncidentDaoTest.kt @@ -11,11 +11,11 @@ import com.crisiscleanup.core.model.data.Incident import com.crisiscleanup.core.testing.util.nowTruncateMillis import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class IncidentDaoTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/LanguageDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/LanguageDaoTest.kt index 8360d5f61..fb3546065 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/LanguageDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/LanguageDaoTest.kt @@ -8,14 +8,14 @@ import com.crisiscleanup.core.model.data.Language import com.crisiscleanup.core.model.data.LanguageTranslations import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.junit.Before import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.days +import kotlin.time.Instant class LanguageDaoTest { private lateinit var db: CrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeDaoTest.kt index 5beff3377..3660b9082 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeDaoTest.kt @@ -7,12 +7,12 @@ import com.crisiscleanup.core.database.TestUtil.testSyncLogger import com.crisiscleanup.core.database.WorksiteTestUtil import com.crisiscleanup.core.database.model.WorkTypeEntity import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class WorkTypeDaoTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDaoTest.kt index a7c5738c5..341737acd 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDaoTest.kt @@ -5,12 +5,12 @@ import com.crisiscleanup.core.database.TestUtil import com.crisiscleanup.core.database.WorksiteTestUtil import com.crisiscleanup.core.database.model.WorkTypeTransferRequestEntity import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant private val now = Clock.System.now() diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoTest.kt index 076d00bcb..b402513e5 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoTest.kt @@ -29,15 +29,15 @@ import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.verify import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant class WorksiteChangeDaoTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeTransferDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeTransferDaoTest.kt index 7cb2dac17..657b4a226 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeTransferDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeTransferDaoTest.kt @@ -21,14 +21,14 @@ import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.verify import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant private val now = Clock.System.now() diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeUpdateSyncTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeUpdateSyncTest.kt index 4c459d757..b0272d0e9 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeUpdateSyncTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteChangeUpdateSyncTest.kt @@ -15,15 +15,15 @@ import com.crisiscleanup.core.database.model.WorksiteRootEntity import com.crisiscleanup.core.model.data.WorksiteChangeArchiveAction import com.crisiscleanup.core.model.data.WorksiteSyncResult import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class WorksiteChangeUpdateSyncTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteDaoTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteDaoTest.kt index fa1d8201b..32d55b4c7 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteDaoTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteDaoTest.kt @@ -10,15 +10,15 @@ import com.crisiscleanup.core.database.WorksiteTestUtil.testIncidents import com.crisiscleanup.core.database.model.WorkTypeEntity import com.crisiscleanup.core.database.model.WorksiteEntity import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNotEquals import kotlin.test.assertNotNull import kotlin.test.assertNull +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class WorksiteDaoTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteFormDataFlagNoteTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteFormDataFlagNoteTest.kt index 1b77f35ad..0144b49c8 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteFormDataFlagNoteTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteFormDataFlagNoteTest.kt @@ -15,12 +15,12 @@ import com.crisiscleanup.core.model.data.WorksiteFlag import com.crisiscleanup.core.model.data.WorksiteFormValue import com.crisiscleanup.core.model.data.WorksiteNote import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class WorksiteFormDataFlagNoteTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncFillTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncFillTest.kt index 42f7c4846..f554e6eca 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncFillTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncFillTest.kt @@ -9,15 +9,15 @@ import com.crisiscleanup.core.database.model.WorksiteFormDataEntity import com.crisiscleanup.core.database.model.WorksiteNoteEntity import com.crisiscleanup.core.database.model.WorksiteRootEntity import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class WorksiteSyncFillTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncReconciliationTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncReconciliationTest.kt index b183c3125..ef57d8c71 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncReconciliationTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteSyncReconciliationTest.kt @@ -12,13 +12,13 @@ import com.crisiscleanup.core.database.model.IncidentWorksiteIds import com.crisiscleanup.core.database.model.RecentWorksiteEntity import com.crisiscleanup.core.database.model.WorksiteEntity import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant class WorksiteSyncReconciliationTest { private lateinit var db: TestCrisisCleanupDatabase diff --git a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteWorkTypeTest.kt b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteWorkTypeTest.kt index 8ce757891..cb24314be 100644 --- a/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteWorkTypeTest.kt +++ b/core/database/src/androidTest/java/com/crisiscleanup/core/database/dao/WorksiteWorkTypeTest.kt @@ -10,13 +10,13 @@ import com.crisiscleanup.core.database.model.WorksiteEntity import com.crisiscleanup.core.database.model.asExternalModel import com.crisiscleanup.core.model.data.WorkType import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant /** * Sync worksites with work types diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/IncidentDataSyncParameterDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/IncidentDataSyncParameterDao.kt index 4556b7bca..4fbf47a7a 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/IncidentDataSyncParameterDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/IncidentDataSyncParameterDao.kt @@ -6,7 +6,7 @@ import androidx.room.Query import androidx.room.Transaction import com.crisiscleanup.core.database.model.IncidentDataSyncParametersEntity import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface IncidentDataSyncParameterDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/ListDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/ListDao.kt index 5084db299..7bdd54c40 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/ListDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/ListDao.kt @@ -9,7 +9,7 @@ import androidx.room.Transaction import com.crisiscleanup.core.database.model.ListEntity import com.crisiscleanup.core.database.model.PopulatedList import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface ListDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/LocalImageDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/LocalImageDao.kt index 60643e120..ffce4b806 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/LocalImageDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/LocalImageDao.kt @@ -85,4 +85,15 @@ interface LocalImageDao { """, ) fun getUploadImageWorksiteIds(): List + + @Transaction + @Query( + """ + SELECT id + FROM worksite_local_images + ORDER BY id DESC + LIMIT 1 + """, + ) + fun getNewestLocalImageId(): Long? } diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/SyncLogDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/SyncLogDao.kt index 7e9e960e5..910dbdc89 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/SyncLogDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/SyncLogDao.kt @@ -8,9 +8,9 @@ import androidx.room.Transaction import com.crisiscleanup.core.database.model.PopulatedSyncLog import com.crisiscleanup.core.database.model.SyncLogEntity import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock import kotlin.time.Duration.Companion.days +import kotlin.time.Instant @Dao interface SyncLogDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDao.kt index 8abb58fff..f751ac99e 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDao.kt @@ -10,7 +10,7 @@ import com.crisiscleanup.core.database.model.PopulatedTeam import com.crisiscleanup.core.database.model.TeamEntity import com.crisiscleanup.core.database.model.TeamMemberCrossRef import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface TeamDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDaoPlus.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDaoPlus.kt index 696c36203..fe7aef295 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDaoPlus.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/TeamDaoPlus.kt @@ -11,8 +11,8 @@ import com.crisiscleanup.core.database.model.PersonContactEntity import com.crisiscleanup.core.database.model.PopulatedLocalModifiedAt import com.crisiscleanup.core.database.model.TeamEntity import com.crisiscleanup.core.database.model.TeamMemberCrossRef -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Instant class TeamDaoPlus @Inject constructor( internal val db: CrisisCleanupDatabase, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeDao.kt index 8e33f7c99..6a517b0e0 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeDao.kt @@ -8,7 +8,7 @@ import androidx.room.Transaction import androidx.room.Update import com.crisiscleanup.core.database.model.PopulatedIdNetworkId import com.crisiscleanup.core.database.model.WorkTypeEntity -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface WorkTypeDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDao.kt index 9fbb7b72d..66b565ebf 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorkTypeTransferRequestDao.kt @@ -6,7 +6,7 @@ import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Transaction import com.crisiscleanup.core.database.model.WorkTypeTransferRequestEntity -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface WorkTypeTransferRequestDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDao.kt index 16001d413..09fef106c 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDao.kt @@ -9,8 +9,8 @@ import com.crisiscleanup.core.database.model.PopulatedWorksite import com.crisiscleanup.core.database.model.PopulatedWorksiteChange import com.crisiscleanup.core.database.model.WorksiteChangeEntity import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant @Dao interface WorksiteChangeDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoPlus.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoPlus.kt index 02a3dcd5c..0bcb2b1c1 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoPlus.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteChangeDaoPlus.kt @@ -26,9 +26,9 @@ import com.crisiscleanup.core.model.data.Worksite import com.crisiscleanup.core.model.data.WorksiteChangeArchiveAction import com.crisiscleanup.core.model.data.WorksiteChangeSerializer import com.crisiscleanup.core.model.data.WorksiteSyncResult -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock +import kotlin.time.Instant class WorksiteChangeDaoPlus @Inject constructor( private val db: CrisisCleanupDatabase, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDao.kt index 303203907..8dfbaa984 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDao.kt @@ -18,7 +18,7 @@ import com.crisiscleanup.core.database.model.PopulatedWorksiteMapVisual import com.crisiscleanup.core.database.model.WorksiteEntity import com.crisiscleanup.core.database.model.WorksiteRootEntity import kotlinx.coroutines.flow.Flow -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface WorksiteDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDaoPlus.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDaoPlus.kt index a1775e624..8418073b7 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDaoPlus.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteDaoPlus.kt @@ -30,10 +30,10 @@ import com.crisiscleanup.core.model.data.OrganizationLocationAreaBounds import com.crisiscleanup.core.model.data.WorksiteSortBy import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock import kotlin.time.Duration.Companion.days +import kotlin.time.Instant class WorksiteDaoPlus @Inject constructor( internal val db: CrisisCleanupDatabase, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteFlagDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteFlagDao.kt index d6d5dd61a..3f7b4be60 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteFlagDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteFlagDao.kt @@ -8,7 +8,7 @@ import androidx.room.Transaction import androidx.room.Update import com.crisiscleanup.core.database.model.PopulatedIdNetworkId import com.crisiscleanup.core.database.model.WorksiteFlagEntity -import kotlinx.datetime.Instant +import kotlin.time.Instant @Dao interface WorksiteFlagDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteNoteDao.kt b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteNoteDao.kt index 2733205df..340c65b7a 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteNoteDao.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/dao/WorksiteNoteDao.kt @@ -7,9 +7,9 @@ import androidx.room.Query import androidx.room.Transaction import com.crisiscleanup.core.database.model.PopulatedIdNetworkId import com.crisiscleanup.core.database.model.WorksiteNoteEntity -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant @Dao interface WorksiteNoteDao { diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/BoundedSyncedWorksiteIds.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/BoundedSyncedWorksiteIds.kt index 315b05ea5..a6ca092fb 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/BoundedSyncedWorksiteIds.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/BoundedSyncedWorksiteIds.kt @@ -2,7 +2,7 @@ package com.crisiscleanup.core.database.model import androidx.room.ColumnInfo import androidx.room.Relation -import kotlinx.datetime.Instant +import kotlin.time.Instant data class BoundedSyncedWorksiteIds( val id: Long, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/CaseHistoryEventEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/CaseHistoryEventEntity.kt index 72edd438b..08ab4aa44 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/CaseHistoryEventEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/CaseHistoryEventEntity.kt @@ -5,7 +5,7 @@ import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.Index import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "case_history_events", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/CasesFilter.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/CasesFilter.kt index dfb0cc21f..34fae9d5e 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/CasesFilter.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/CasesFilter.kt @@ -5,7 +5,7 @@ import com.crisiscleanup.core.common.kmToMiles import com.crisiscleanup.core.common.radians import com.crisiscleanup.core.model.data.CasesFilter import com.crisiscleanup.core.model.data.OrganizationLocationAreaBounds -import kotlinx.datetime.Instant +import kotlin.time.Instant fun CasesFilter.passesFilter( organizationAffiliates: Set, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentDataSyncParametersEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentDataSyncParametersEntity.kt index 83f9b4c08..1fcae2b07 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentDataSyncParametersEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentDataSyncParametersEntity.kt @@ -4,7 +4,7 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "incident_data_sync_parameters", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentEntity.kt index e51b1a163..8b86f9ee4 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentEntity.kt @@ -7,8 +7,8 @@ import androidx.room.Index import androidx.room.PrimaryKey import com.crisiscleanup.core.model.data.IncidentFormField import com.crisiscleanup.core.model.data.IncidentLocation -import kotlinx.datetime.Instant import kotlinx.serialization.json.Json +import kotlin.time.Instant @Entity( "incidents", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentOrganizationSyncStatsEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentOrganizationSyncStatsEntity.kt index 911889857..e23ee921b 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentOrganizationSyncStatsEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/IncidentOrganizationSyncStatsEntity.kt @@ -5,8 +5,8 @@ import androidx.room.Entity import androidx.room.PrimaryKey import com.crisiscleanup.core.model.data.IncidentDataSyncStats import com.crisiscleanup.core.model.data.SyncAttempt -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant @Entity( "incident_organization_sync_stats", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/LanguageTranslationEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/LanguageTranslationEntity.kt index fc2d64aea..acc3e944b 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/LanguageTranslationEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/LanguageTranslationEntity.kt @@ -3,7 +3,7 @@ package com.crisiscleanup.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity("language_translations") data class LanguageTranslationEntity( diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/ListEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/ListEntity.kt index fa93b5961..4340b326b 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/ListEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/ListEntity.kt @@ -6,7 +6,7 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.Index.Order import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "lists", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/NetworkFileEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/NetworkFileEntity.kt index 96cf6e43d..83481752b 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/NetworkFileEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/NetworkFileEntity.kt @@ -6,7 +6,7 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.PrimaryKey import com.crisiscleanup.core.model.data.NetworkImage -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "network_files", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLanguageTranslation.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLanguageTranslation.kt index d19671d53..29e1b9671 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLanguageTranslation.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLanguageTranslation.kt @@ -3,9 +3,9 @@ package com.crisiscleanup.core.database.model import androidx.room.Embedded import com.crisiscleanup.core.model.data.Language import com.crisiscleanup.core.model.data.LanguageTranslations -import kotlinx.datetime.Instant import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlin.time.Instant data class PopulatedLanguage( val key: String, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLocalModifiedAt.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLocalModifiedAt.kt index 7980107a8..dc4cb8534 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLocalModifiedAt.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedLocalModifiedAt.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.database.model import androidx.room.ColumnInfo -import kotlinx.datetime.Instant +import kotlin.time.Instant data class PopulatedLocalModifiedAt( @ColumnInfo("id") diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedWorksite.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedWorksite.kt index b635248bd..ce54dd4f3 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedWorksite.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/PopulatedWorksite.kt @@ -8,7 +8,7 @@ import com.crisiscleanup.core.model.data.WorkTypeStatusClaim import com.crisiscleanup.core.model.data.Worksite import com.crisiscleanup.core.model.data.WorksiteFlagType import com.crisiscleanup.core.model.data.WorksiteMapMark -import kotlinx.datetime.Instant +import kotlin.time.Instant /** * For read-only purposes with minimal data diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/RecentWorksiteEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/RecentWorksiteEntity.kt index 8de2ba57e..11007a8e0 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/RecentWorksiteEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/RecentWorksiteEntity.kt @@ -6,7 +6,7 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.Index.Order import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "recent_worksites", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/SyncLogEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/SyncLogEntity.kt index 867ba5eb2..f2007bfeb 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/SyncLogEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/SyncLogEntity.kt @@ -4,7 +4,7 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "sync_logs", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/TeamEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/TeamEntity.kt index 8c5a24dd2..4c4cd4ba3 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/TeamEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/TeamEntity.kt @@ -6,7 +6,7 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.Index.Order import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "teams_root", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorkTypeTransferRequestEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorkTypeTransferRequestEntity.kt index 65efd2779..f14796485 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorkTypeTransferRequestEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorkTypeTransferRequestEntity.kt @@ -6,7 +6,7 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.PrimaryKey import com.crisiscleanup.core.model.data.WorkTypeRequest -import kotlinx.datetime.Instant +import kotlin.time.Instant @Entity( "worksite_work_type_requests", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/Worksite.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/Worksite.kt index 2a70e2889..7b8dad266 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/Worksite.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/Worksite.kt @@ -4,7 +4,7 @@ import com.crisiscleanup.core.common.PhoneNumberUtil.searchablePhoneNumbers import com.crisiscleanup.core.common.UuidGenerator import com.crisiscleanup.core.model.data.WorkType import com.crisiscleanup.core.model.data.Worksite -import kotlinx.datetime.Clock +import kotlin.time.Clock fun Worksite.asEntities( uuidGenerator: UuidGenerator, diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteChangeEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteChangeEntity.kt index f9f50b789..ffa77b390 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteChangeEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteChangeEntity.kt @@ -6,8 +6,8 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.Index.Order import androidx.room.PrimaryKey -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant @Entity( "worksite_changes", diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteEntity.kt index 491b29bb4..d28f6b07f 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteEntity.kt @@ -11,7 +11,7 @@ import com.crisiscleanup.core.common.KeyTranslator import com.crisiscleanup.core.model.data.WorkType import com.crisiscleanup.core.model.data.WorksiteFlag import com.crisiscleanup.core.model.data.WorksiteNote -import kotlinx.datetime.Instant +import kotlin.time.Instant // Changes below should update WORKSITES_STABLE_MODEL_BUILD_VERSION in core.network diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteSyncStatsEntity.kt b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteSyncStatsEntity.kt index 70ba8df3d..e17839638 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteSyncStatsEntity.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/model/WorksiteSyncStatsEntity.kt @@ -4,7 +4,7 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.PrimaryKey -import kotlinx.datetime.Instant +import kotlin.time.Instant // These entities are obsolete // Not removing for database consistency diff --git a/core/database/src/main/java/com/crisiscleanup/core/database/util/InstantConverter.kt b/core/database/src/main/java/com/crisiscleanup/core/database/util/InstantConverter.kt index 34e2d4e84..61a2d8697 100644 --- a/core/database/src/main/java/com/crisiscleanup/core/database/util/InstantConverter.kt +++ b/core/database/src/main/java/com/crisiscleanup/core/database/util/InstantConverter.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.database.util import androidx.room.TypeConverter -import kotlinx.datetime.Instant +import kotlin.time.Instant class InstantConverter { @TypeConverter diff --git a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/AccountInfoDataSource.kt b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/AccountInfoDataSource.kt index b91657576..72c751363 100644 --- a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/AccountInfoDataSource.kt +++ b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/AccountInfoDataSource.kt @@ -7,9 +7,9 @@ import com.crisiscleanup.core.model.data.AccountData import com.crisiscleanup.core.model.data.OrgData import com.crisiscleanup.core.model.data.emptyOrgData import kotlinx.coroutines.flow.map -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject +import kotlin.time.Instant // TODO Rewrite tests diff --git a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/CasesFiltersDataSource.kt b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/CasesFiltersDataSource.kt index 1e3b1ee5f..9e91288bc 100644 --- a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/CasesFiltersDataSource.kt +++ b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/CasesFiltersDataSource.kt @@ -9,8 +9,8 @@ import com.crisiscleanup.core.model.data.WorksiteFlagType import com.crisiscleanup.core.model.data.flagFromLiteral import com.crisiscleanup.core.model.data.statusFromLiteral import kotlinx.coroutines.flow.map -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Instant class CasesFiltersDataSource @Inject constructor( private val dataStore: DataStore, diff --git a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/IncidentCachePreferencesDataSource.kt b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/IncidentCachePreferencesDataSource.kt index 17bbc9745..a269d8ff3 100644 --- a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/IncidentCachePreferencesDataSource.kt +++ b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/IncidentCachePreferencesDataSource.kt @@ -4,8 +4,8 @@ import androidx.datastore.core.DataStore import com.crisiscleanup.core.model.data.BoundedRegionParameters import com.crisiscleanup.core.model.data.IncidentWorksitesCachePreferences import kotlinx.coroutines.flow.map -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Instant class IncidentCachePreferencesDataSource @Inject constructor( private val dataStore: DataStore, diff --git a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSource.kt b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSource.kt index 54491ce3b..86cbdc306 100644 --- a/core/datastore/src/main/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSource.kt +++ b/core/datastore/src/main/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSource.kt @@ -7,9 +7,9 @@ import com.crisiscleanup.core.model.data.AppOpenInstant import com.crisiscleanup.core.model.data.BuildEndOfLife import com.crisiscleanup.core.model.data.MinSupportedAppVersion import kotlinx.coroutines.flow.map -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock +import kotlin.time.Instant class LocalAppMetricsDataSource @Inject constructor( private val appMetrics: DataStore, diff --git a/core/datastore/src/test/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSourceTest.kt b/core/datastore/src/test/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSourceTest.kt index 51d00a243..cf0230501 100644 --- a/core/datastore/src/test/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSourceTest.kt +++ b/core/datastore/src/test/java/com/crisiscleanup/core/datastore/LocalAppMetricsDataSourceTest.kt @@ -9,13 +9,13 @@ import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.impl.annotations.MockK import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder import kotlin.test.assertEquals import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant class LocalAppMetricsDataSourceTest { @MockK diff --git a/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/MapsIncidentBoundsProvider.kt b/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/MapsIncidentBoundsProvider.kt index cf71d5bf1..ba1a6acce 100644 --- a/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/MapsIncidentBoundsProvider.kt +++ b/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/MapsIncidentBoundsProvider.kt @@ -17,12 +17,12 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.mapLatest -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant interface IncidentBoundsProvider { val mappingBoundsIncidentIds: Flow> diff --git a/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/model/MapViewCameraUpdate.kt b/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/model/MapViewCameraUpdate.kt index d82835ead..b163e5829 100644 --- a/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/model/MapViewCameraUpdate.kt +++ b/core/mapmarker/src/main/java/com/crisiscleanup/core/mapmarker/model/MapViewCameraUpdate.kt @@ -2,9 +2,9 @@ package com.crisiscleanup.core.mapmarker.model import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.LatLngBounds -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicBoolean +import kotlin.time.Clock +import kotlin.time.Instant data class MapViewCameraBounds( val bounds: LatLngBounds, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/AccountData.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/AccountData.kt index 829a1fc4f..11d884b98 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/AccountData.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/AccountData.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant /** * General data on a user account diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/AppMetricsData.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/AppMetricsData.kt index 85ad84e87..8f24a923d 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/AppMetricsData.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/AppMetricsData.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class AppMetricsData( @Deprecated("Was for an initial release of app under different account") diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/AppOpenInstant.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/AppOpenInstant.kt index 1cf192dbb..373e79cde 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/AppOpenInstant.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/AppOpenInstant.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class AppOpenInstant( val version: Long = 0, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/CaseHistoryEvent.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/CaseHistoryEvent.kt index 67d6576ab..cf45ee498 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/CaseHistoryEvent.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/CaseHistoryEvent.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class CaseHistoryUserEvents( val userId: Long, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/CasesFilter.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/CasesFilter.kt index c105394fb..b4cadbf04 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/CasesFilter.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/CasesFilter.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant import kotlin.time.Duration.Companion.days +import kotlin.time.Instant const val DEFAULT_SVI = 0f private const val DEFAULT_FILTER_DISTANCE = 0f diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/CrisisCleanupList.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/CrisisCleanupList.kt index 8989e8606..577a1024d 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/CrisisCleanupList.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/CrisisCleanupList.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class CrisisCleanupList( val id: Long, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/Incident.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/Incident.kt index 3861f486d..fd6d665d5 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/Incident.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/Incident.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant interface IncidentIdProvider { val id: Long diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentDataSyncStats.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentDataSyncStats.kt index 8d905c0e5..c07897a29 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentDataSyncStats.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentDataSyncStats.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant /** * Build version of the app where worksite (related) entity models were last changed diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentWorksitesCachePreferences.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentWorksitesCachePreferences.kt index 92d47b631..dadf1bccd 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentWorksitesCachePreferences.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/IncidentWorksitesCachePreferences.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant const val BOUNDED_REGION_RADIUS_MILES_DEFAULT = 30.0 diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/JoinOrgInvite.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/JoinOrgInvite.kt index d102aa552..3d57f6414 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/JoinOrgInvite.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/JoinOrgInvite.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class JoinOrgInvite( val token: String, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/Language.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/Language.kt index c576dde3e..67fbd1023 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/Language.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/Language.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class Language( val key: String, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/LocalChange.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/LocalChange.kt index bb00eee4b..a8952b6f6 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/LocalChange.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/LocalChange.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class LocalChange( val isLocalModified: Boolean, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/ModelInstantUtil.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/ModelInstantUtil.kt index 71200b342..7d56721b2 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/ModelInstantUtil.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/ModelInstantUtil.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant val Instant.isPast: Boolean get() = this < Clock.System.now() diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/NetworkImage.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/NetworkImage.kt index ac250dddb..4fb1a8d3f 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/NetworkImage.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/NetworkImage.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class NetworkImage( val id: Long, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/OrgUserInviteInfo.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/OrgUserInviteInfo.kt index 60dcf33bd..162446a82 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/OrgUserInviteInfo.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/OrgUserInviteInfo.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant import java.net.URL +import kotlin.time.Instant data class OrgUserInviteInfo( val displayName: String, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/PasswordResetInitiation.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/PasswordResetInitiation.kt index befe58799..ef8b47278 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/PasswordResetInitiation.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/PasswordResetInitiation.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class PasswordResetInitiation( val expiresAt: Instant?, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/SavedWorksiteChange.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/SavedWorksiteChange.kt index b72e54897..d63f0e846 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/SavedWorksiteChange.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/SavedWorksiteChange.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class SavedWorksiteChange( val id: Long, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncAttempt.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncAttempt.kt index 7553a36cb..0155f1c6c 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncAttempt.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncAttempt.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Clock import kotlin.math.ln +import kotlin.time.Clock data class SyncAttempt( val successfulSeconds: Long, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncLog.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncLog.kt index b59587394..64bcd76a2 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncLog.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/SyncLog.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class SyncLog( val id: Long, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkType.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkType.kt index d0c5cb065..8a941b157 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkType.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkType.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock import kotlin.time.Duration.Companion.days +import kotlin.time.Instant internal val WorkTypeReleaseDaysThreshold = 30.days diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkTypeRequest.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkTypeRequest.kt index 562763537..582c616ab 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkTypeRequest.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/WorkTypeRequest.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Instant +import kotlin.time.Instant data class WorkTypeRequest( val workType: String, diff --git a/core/model/src/main/java/com/crisiscleanup/core/model/data/Worksite.kt b/core/model/src/main/java/com/crisiscleanup/core/model/data/Worksite.kt index 4dfb21cac..92434c038 100644 --- a/core/model/src/main/java/com/crisiscleanup/core/model/data/Worksite.kt +++ b/core/model/src/main/java/com/crisiscleanup/core/model/data/Worksite.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.model.data -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant enum class AutoContactFrequency(val literal: String) { None(""), diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupAccountApi.kt b/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupAccountApi.kt index 8a5e9241a..26867f14c 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupAccountApi.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupAccountApi.kt @@ -2,8 +2,8 @@ package com.crisiscleanup.core.network import com.crisiscleanup.core.model.data.InitiatePhoneLoginResult import com.crisiscleanup.core.network.model.InitiatePasswordResetResult -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant interface CrisisCleanupAccountApi { suspend fun initiateMagicLink(emailAddress: String): Boolean diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupNetworkDataSource.kt b/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupNetworkDataSource.kt index d7ca56710..898bc5ce5 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupNetworkDataSource.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupNetworkDataSource.kt @@ -27,7 +27,7 @@ import com.crisiscleanup.core.network.model.NetworkWorksiteFull import com.crisiscleanup.core.network.model.NetworkWorksiteLocationSearch import com.crisiscleanup.core.network.model.NetworkWorksiteShort import com.crisiscleanup.core.network.model.NetworkWorksitesPageResult -import kotlinx.datetime.Instant +import kotlin.time.Instant interface CrisisCleanupNetworkDataSource { suspend fun getProfileData(accountId: Long): NetworkAccountProfileResult diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupWriteApi.kt b/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupWriteApi.kt index 97434625b..8837eb354 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupWriteApi.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/CrisisCleanupWriteApi.kt @@ -9,8 +9,8 @@ import com.crisiscleanup.core.network.model.NetworkType import com.crisiscleanup.core.network.model.NetworkWorkType import com.crisiscleanup.core.network.model.NetworkWorksiteFull import com.crisiscleanup.core.network.model.NetworkWorksitePush -import kotlinx.datetime.Instant import java.io.File +import kotlin.time.Instant interface CrisisCleanupWriteApi { suspend fun saveWorksite( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLife.kt b/core/network/src/main/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLife.kt index 8f07f3a79..b8a34c2ce 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLife.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLife.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.network.endoflife -import kotlinx.datetime.Instant import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkBuildEndOfLife( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAcceptTermsPayload.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAcceptTermsPayload.kt index e5aa9c66d..fdf229332 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAcceptTermsPayload.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAcceptTermsPayload.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkAcceptTermsPayload( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAccountProfileResult.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAccountProfileResult.kt index 314c06aaa..a9fb80243 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAccountProfileResult.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkAccountProfileResult.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.NetworkOrganizationShortDeserializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkAccountProfileResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkCaseHistory.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkCaseHistory.kt index e83f79abb..6e5641fd8 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkCaseHistory.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkCaseHistory.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkCaseHistoryResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkEvent.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkEvent.kt index e53f65d12..216c15f0e 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkEvent.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkEvent.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkEvent( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFile.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFile.kt index 3d66a2be8..31dd5dae6 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFile.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFile.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import okhttp3.RequestBody.Companion.toRequestBody +import kotlin.time.Instant @Serializable data class NetworkFile( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlag.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlag.kt index 275d4d0fc..b4fa62854 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlag.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlag.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkFlag( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataResult.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataResult.kt index 4d7ecb4a1..cb4bd08af 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataResult.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataResult.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.InstantSerializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkFlagsFormDataResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkIncident.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkIncident.kt index ef698c012..2aba8eeb3 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkIncident.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkIncident.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.IterableStringSerializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkIncidentsResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationInfo.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationInfo.kt index b8bd8ac4a..eb0704810 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationInfo.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationInfo.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkInvitationInfoResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationRequest.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationRequest.kt index 120eb83c1..543242102 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationRequest.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkInvitationRequest.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkInvitationRequest( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkList.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkList.kt index ef57cf226..5f2230a21 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkList.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkList.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkListsResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkNote.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkNote.kt index c70c9d41c..97f0cc5e8 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkNote.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkNote.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.InstantSerializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkNote( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPasswordRecovery.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPasswordRecovery.kt index 38102afdc..bdd15a72f 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPasswordRecovery.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPasswordRecovery.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkEmailPayload( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPersistentInvitation.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPersistentInvitation.kt index cdff84abb..f2f4ba2fa 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPersistentInvitation.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPersistentInvitation.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkCreateOrgInvitation( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPointLocation.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPointLocation.kt index b78e7e8fc..a4700ad97 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPointLocation.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkPointLocation.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkPointLocation( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkRequestRedeploy.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkRequestRedeploy.kt index 1de5c78e5..d09339270 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkRequestRedeploy.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkRequestRedeploy.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkRequestRedeploy( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkType.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkType.kt index 6f907c883..5806cd034 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkType.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkType.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkType( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkUser.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkUser.kt index 4ae8573b6..bcc3b4139 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkUser.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkUser.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkUser( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkType.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkType.kt index 231c0cef8..302b8f3e5 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkType.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkType.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.InstantSerializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkWorkType( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequest.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequest.kt index 6157c5aa0..27edc9f56 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequest.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequest.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkWorkTypeRequestResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksite.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksite.kt index 76c9038b6..c905ad3ff 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksite.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksite.kt @@ -1,10 +1,10 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.InstantSerializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.Transient +import kotlin.time.Instant @Serializable data class NetworkWorksitesFullResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksiteChange.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksiteChange.kt index 00feb3f5f..bf42c6b84 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksiteChange.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksiteChange.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkWorksiteChangesResult( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksitePush.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksitePush.kt index 03e6e18f8..d1cbb8fd0 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksitePush.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/NetworkWorksitePush.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model import com.crisiscleanup.core.network.model.util.InstantSerializer -import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class NetworkWorksitePush( diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/WorksiteSearchFilter.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/WorksiteSearchFilter.kt index fdcbd5285..b1d5d54d3 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/WorksiteSearchFilter.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/WorksiteSearchFilter.kt @@ -4,10 +4,10 @@ import com.crisiscleanup.core.model.data.CasesFilter import com.crisiscleanup.core.model.data.WorkTypeStatus import com.crisiscleanup.core.model.data.closedWorkTypeStatuses import com.crisiscleanup.core.model.data.openWorkTypeStatuses -import kotlinx.datetime.Instant -import kotlinx.datetime.toJavaInstant import java.time.ZoneId import java.time.format.DateTimeFormatter +import kotlin.time.Instant +import kotlin.time.toJavaInstant private val CasesFilter.statusQueryString: String? get() { diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/model/util/InstantSerializer.kt b/core/network/src/main/java/com/crisiscleanup/core/network/model/util/InstantSerializer.kt index a758cb102..09ad5b124 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/model/util/InstantSerializer.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/model/util/InstantSerializer.kt @@ -1,12 +1,12 @@ package com.crisiscleanup.core.network.model.util -import kotlinx.datetime.Instant import kotlinx.serialization.KSerializer import kotlinx.serialization.descriptors.PrimitiveKind.STRING import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlin.time.Instant object InstantSerializer : KSerializer { override fun deserialize(decoder: Decoder): Instant = diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/AccountApiClient.kt b/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/AccountApiClient.kt index 7a80ab765..24a9c8d67 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/AccountApiClient.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/AccountApiClient.kt @@ -14,7 +14,6 @@ import com.crisiscleanup.core.network.model.NetworkPhoneCodeResult import com.crisiscleanup.core.network.model.NetworkPhonePayload import com.crisiscleanup.core.network.model.NetworkTransferOrganizationPayload import com.crisiscleanup.core.network.model.NetworkTransferOrganizationResult -import kotlinx.datetime.Instant import retrofit2.Retrofit import retrofit2.http.Body import retrofit2.http.GET @@ -22,6 +21,7 @@ import retrofit2.http.PATCH import retrofit2.http.POST import retrofit2.http.Path import javax.inject.Inject +import kotlin.time.Instant private interface AccountApi { @POST("magic_link") diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/DataApiClient.kt b/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/DataApiClient.kt index 00ee3e31e..0aedbc161 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/DataApiClient.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/DataApiClient.kt @@ -31,7 +31,6 @@ import com.crisiscleanup.core.network.model.NetworkWorksitesFullResult import com.crisiscleanup.core.network.model.NetworkWorksitesPageResult import com.crisiscleanup.core.network.model.NetworkWorksitesShortResult import com.crisiscleanup.core.network.model.tryThrowException -import kotlinx.datetime.Instant import retrofit2.Retrofit import retrofit2.http.GET import retrofit2.http.Header @@ -40,6 +39,7 @@ import retrofit2.http.Query import retrofit2.http.QueryMap import retrofit2.http.Tag import javax.inject.Inject +import kotlin.time.Instant private interface DataSourceApi { @TokenAuthenticationHeader diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/WriteApiClient.kt b/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/WriteApiClient.kt index 14f63b8fb..a29bd4da9 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/WriteApiClient.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/retrofit/WriteApiClient.kt @@ -26,7 +26,6 @@ import com.crisiscleanup.core.network.model.NetworkWorksiteFull import com.crisiscleanup.core.network.model.NetworkWorksitePush import com.crisiscleanup.core.network.model.asPartMap import com.crisiscleanup.core.network.model.networkTypeFavorite -import kotlinx.datetime.Instant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody @@ -48,6 +47,7 @@ import retrofit2.http.Path import retrofit2.http.Url import java.io.File import javax.inject.Inject +import kotlin.time.Instant private interface DataChangeApi { @TokenAuthenticationHeader diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChange.kt b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChange.kt index c74b0994a..c15f29d29 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChange.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChange.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.network.worksitechange -import kotlinx.datetime.Instant import kotlinx.serialization.Serializable +import kotlin.time.Instant /** * 01 Initial model diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeProcessor.kt b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeProcessor.kt index 9819bf5ee..95a32e480 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeProcessor.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeProcessor.kt @@ -16,7 +16,7 @@ import com.crisiscleanup.core.network.model.NetworkWorksiteFull import kotlinx.coroutines.flow.first import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import kotlinx.datetime.Instant +import kotlin.time.Instant class WorksiteChangeProcessor( private val changeSetOperator: WorksiteChangeSetOperator, diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSet.kt b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSet.kt index cbc10cfda..5c014a017 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSet.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSet.kt @@ -3,7 +3,7 @@ package com.crisiscleanup.core.network.worksitechange import com.crisiscleanup.core.network.model.NetworkFlag import com.crisiscleanup.core.network.model.NetworkNote import com.crisiscleanup.core.network.model.NetworkWorksitePush -import kotlinx.datetime.Instant +import kotlin.time.Instant data class WorksiteChangeSet( val updatedAtFallback: Instant, diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSetOperator.kt b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSetOperator.kt index 91aff9b4c..7aac7a6f0 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSetOperator.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteChangeSetOperator.kt @@ -7,11 +7,11 @@ import com.crisiscleanup.core.network.model.NetworkNote import com.crisiscleanup.core.network.model.NetworkWorkType import com.crisiscleanup.core.network.model.NetworkWorksiteFull import com.crisiscleanup.core.network.model.NetworkWorksitePush -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock import kotlin.time.Duration import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant // Updates to below (and related) must pass regression tests. // Think through any and all data changes carefully and completely in terms of diff --git a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteSnapshot.kt b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteSnapshot.kt index 2057f61de..7da4836cf 100644 --- a/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteSnapshot.kt +++ b/core/network/src/main/java/com/crisiscleanup/core/network/worksitechange/WorksiteSnapshot.kt @@ -6,8 +6,8 @@ import com.crisiscleanup.core.network.model.NetworkFlag import com.crisiscleanup.core.network.model.NetworkNote import com.crisiscleanup.core.network.model.NetworkWorkType import com.crisiscleanup.core.network.model.NetworkWorksiteFull -import kotlinx.datetime.Instant import kotlinx.serialization.Serializable +import kotlin.time.Instant @Serializable data class WorksiteSnapshot( diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLifeTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLifeTest.kt index d596d9e94..53b01c71f 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLifeTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/endoflife/NetworkBuildEndOfLifeTest.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.endoflife import com.crisiscleanup.core.network.model.TestUtil -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Instant class NetworkBuildEndOfLifeTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountProfileTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountProfileTest.kt index d98de0e6e..f6b23efca 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountProfileTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountProfileTest.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNull +import kotlin.time.Instant class NetworkAccountProfileTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountTest.kt index 2046e1c5c..262fb094f 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkAccountTest.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Instant class NetworkAccountTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataTest.kt index 897fec13a..e48189400 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkFlagsFormDataTest.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNull +import kotlin.time.Instant class NetworkFlagsFormDataTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequestTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequestTest.kt index 6d53be524..ae66dc400 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequestTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorkTypeRequestTest.kt @@ -1,10 +1,10 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull +import kotlin.time.Instant class NetworkWorkTypeRequestTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorksitesSearchTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorksitesSearchTest.kt index 653fc1684..7a0f5f59b 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorksitesSearchTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/NetworkWorksitesSearchTest.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNull +import kotlin.time.Instant class NetworkWorksitesSearchTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/NewestWorkTypesTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/NewestWorkTypesTest.kt index c80d14081..c896163ab 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/NewestWorkTypesTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/NewestWorkTypesTest.kt @@ -1,11 +1,11 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNull +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant private val now = Clock.System.now() diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/TestUtil.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/TestUtil.kt index a1b635917..3fe56faff 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/TestUtil.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/TestUtil.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.network.model -import kotlinx.datetime.Instant import kotlinx.serialization.json.Json +import kotlin.time.Instant object TestUtil { val json = Json { ignoreUnknownKeys = true } diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/model/util/IterableStringSerializerTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/model/util/IterableStringSerializerTest.kt index ef666b350..4c424c94b 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/model/util/IterableStringSerializerTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/model/util/IterableStringSerializerTest.kt @@ -2,11 +2,11 @@ package com.crisiscleanup.core.network.model.util import com.crisiscleanup.core.network.model.NetworkCrisisCleanupApiError import com.crisiscleanup.core.network.model.NetworkIncident -import kotlinx.datetime.Instant import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Instant class IterableStringSerializerTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/ChangeTestUtil.kt b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/ChangeTestUtil.kt index 9df97028e..81d27dfa5 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/ChangeTestUtil.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/ChangeTestUtil.kt @@ -7,10 +7,10 @@ import com.crisiscleanup.core.network.model.NetworkNote import com.crisiscleanup.core.network.model.NetworkType import com.crisiscleanup.core.network.model.NetworkWorkType import com.crisiscleanup.core.network.model.NetworkWorksiteFull -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant internal val createdAtA = Clock.System.now().minus(10.days) internal val updatedAtA = createdAtA.plus(1.hours) diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NetworkFlagChangeTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NetworkFlagChangeTest.kt index 17f72c805..84fbf2b0c 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NetworkFlagChangeTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NetworkFlagChangeTest.kt @@ -1,9 +1,9 @@ package com.crisiscleanup.core.network.worksitechange import com.crisiscleanup.core.network.model.NetworkFlag -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Instant class NetworkFlagChangeTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NewNoteTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NewNoteTest.kt index 6d0848e3f..4d8a344b9 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NewNoteTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/NewNoteTest.kt @@ -1,13 +1,13 @@ package com.crisiscleanup.core.network.worksitechange import com.crisiscleanup.core.network.model.NetworkNote -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant class NewNoteTest { @Test diff --git a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/WorkTypeChangeTest.kt b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/WorkTypeChangeTest.kt index fbc53485b..743d6f8fc 100644 --- a/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/WorkTypeChangeTest.kt +++ b/core/network/src/test/java/com/crisiscleanup/core/network/worksitechange/WorkTypeChangeTest.kt @@ -1,13 +1,13 @@ package com.crisiscleanup.core.network.worksitechange import com.crisiscleanup.core.network.model.NetworkWorkType -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertNull +import kotlin.time.Clock import kotlin.time.Duration.Companion.days +import kotlin.time.Instant class WorkTypeChangeTest { private val emptyChangesResult = Triple( diff --git a/core/testing/src/main/java/com/crisiscleanup/core/testing/model/WorksiteModelUtil.kt b/core/testing/src/main/java/com/crisiscleanup/core/testing/model/WorksiteModelUtil.kt index 864758152..1a772d40b 100644 --- a/core/testing/src/main/java/com/crisiscleanup/core/testing/model/WorksiteModelUtil.kt +++ b/core/testing/src/main/java/com/crisiscleanup/core/testing/model/WorksiteModelUtil.kt @@ -6,7 +6,7 @@ import com.crisiscleanup.core.model.data.Worksite import com.crisiscleanup.core.model.data.WorksiteFlag import com.crisiscleanup.core.model.data.WorksiteFormValue import com.crisiscleanup.core.model.data.WorksiteNote -import kotlinx.datetime.Instant +import kotlin.time.Instant fun makeTestWorksite( prevUpdatedAt: Instant, diff --git a/core/testing/src/main/java/com/crisiscleanup/core/testing/util/TestDateUtil.kt b/core/testing/src/main/java/com/crisiscleanup/core/testing/util/TestDateUtil.kt index 26c4b7a81..e09437b20 100644 --- a/core/testing/src/main/java/com/crisiscleanup/core/testing/util/TestDateUtil.kt +++ b/core/testing/src/main/java/com/crisiscleanup/core/testing/util/TestDateUtil.kt @@ -1,7 +1,7 @@ package com.crisiscleanup.core.testing.util -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant val nowTruncateMillis: Instant get() { diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccessTokenDecoder.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccessTokenDecoder.kt index fea504799..051c13af7 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccessTokenDecoder.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccessTokenDecoder.kt @@ -1,6 +1,6 @@ package com.crisiscleanup.feature.authentication -import kotlinx.datetime.Instant +import kotlin.time.Instant interface AccessTokenDecoder { fun decode(accessToken: String): DecodedAccessToken diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccountDataRepository.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccountDataRepository.kt index 7e9bcf124..42888a2bd 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccountDataRepository.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/AccountDataRepository.kt @@ -3,7 +3,7 @@ package com.crisiscleanup.feature.authentication import com.crisiscleanup.core.data.repository.AccountDataRepository import com.crisiscleanup.core.model.data.OrgData import com.crisiscleanup.core.network.model.NetworkUserProfile -import kotlinx.datetime.Clock +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds suspend fun AccountDataRepository.setAccount( diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/JwtDecoder.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/JwtDecoder.kt index 842b3182e..ff7b8bf51 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/JwtDecoder.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/JwtDecoder.kt @@ -1,8 +1,8 @@ package com.crisiscleanup.feature.authentication import com.auth0.android.jwt.JWT -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Instant class JwtDecoder @Inject constructor() : AccessTokenDecoder { override fun decode(accessToken: String): DecodedAccessToken { diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/PasswordRecoverViewModel.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/PasswordRecoverViewModel.kt index 3a11f2681..0a7726908 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/PasswordRecoverViewModel.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/PasswordRecoverViewModel.kt @@ -22,8 +22,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock import javax.inject.Inject +import kotlin.time.Clock @HiltViewModel class PasswordRecoverViewModel @Inject constructor( diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithEmailScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithEmailScreen.kt index 838169f28..a808709b9 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithEmailScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithEmailScreen.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithPhoneScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithPhoneScreen.kt index 6f12f4ae4..76107f09f 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithPhoneScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/LoginWithPhoneScreen.kt @@ -38,7 +38,7 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.toSize -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/MagicLinkLoginScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/MagicLinkLoginScreen.kt index e7e6e5224..8c1455abe 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/MagicLinkLoginScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/MagicLinkLoginScreen.kt @@ -8,7 +8,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.AnimatedBusyIndicator diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/OrgPersistentInviteScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/OrgPersistentInviteScreen.kt index 12b3d0fdd..5afad51fb 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/OrgPersistentInviteScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/OrgPersistentInviteScreen.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Size import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.unit.toSize -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.common.relativeTime import com.crisiscleanup.core.designsystem.LocalAppTranslator @@ -36,7 +36,7 @@ import com.crisiscleanup.core.ui.scrollFlingListener import com.crisiscleanup.feature.authentication.InviteDisplayInfo import com.crisiscleanup.feature.authentication.OrgPersistentInviteViewModel import kotlinx.coroutines.launch -import kotlinx.datetime.Clock +import kotlin.time.Clock import kotlin.time.Duration.Companion.days @OptIn(ExperimentalMaterial3Api::class) diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasswordRecoverScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasswordRecoverScreen.kt index 7b3740202..2a2e5b994 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasswordRecoverScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasswordRecoverScreen.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasteOrgInviteScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasteOrgInviteScreen.kt index a09dc8675..d17795480 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasteOrgInviteScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/PasteOrgInviteScreen.kt @@ -12,7 +12,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RequestOrgAccessScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RequestOrgAccessScreen.kt index 70bd41635..04f27a6e0 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RequestOrgAccessScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RequestOrgAccessScreen.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.toSize -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.compose.AsyncImage import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/ResetPasswordScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/ResetPasswordScreen.kt index 537d671aa..73f41e4d9 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/ResetPasswordScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/ResetPasswordScreen.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RootAuthScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RootAuthScreen.kt index edb161ac2..6cac4fbd4 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RootAuthScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/RootAuthScreen.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/VolunteerScanQrCodeScreen.kt b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/VolunteerScanQrCodeScreen.kt index d00af1238..a2dee7ccc 100644 --- a/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/VolunteerScanQrCodeScreen.kt +++ b/feature/authentication/src/main/java/com/crisiscleanup/feature/authentication/ui/VolunteerScanQrCodeScreen.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.testTag import androidx.compose.ui.viewinterop.AndroidView import androidx.core.content.ContextCompat -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.CrisisCleanupButton import com.crisiscleanup.core.designsystem.component.OpenSettingsDialog diff --git a/feature/authentication/src/test/java/com/crisiscleanup/feature/authentication/AuthenticationViewModelTest.kt b/feature/authentication/src/test/java/com/crisiscleanup/feature/authentication/AuthenticationViewModelTest.kt index 5e262c7bf..7cfd10684 100644 --- a/feature/authentication/src/test/java/com/crisiscleanup/feature/authentication/AuthenticationViewModelTest.kt +++ b/feature/authentication/src/test/java/com/crisiscleanup/feature/authentication/AuthenticationViewModelTest.kt @@ -32,7 +32,6 @@ import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest -import kotlinx.datetime.Clock import org.junit.Before import org.junit.Rule import org.junit.Test @@ -42,6 +41,7 @@ import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertNotEquals import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CasesWorksiteInteractor.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CasesWorksiteInteractor.kt index 9d2d3f6e0..9ce07111c 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CasesWorksiteInteractor.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CasesWorksiteInteractor.kt @@ -11,11 +11,11 @@ import dagger.hilt.components.SingletonComponent import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant @Singleton class CasesWorksiteInteractor @Inject constructor( diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CreateEditCaseViewModel.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CreateEditCaseViewModel.kt index 9d2ca237c..91254196a 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CreateEditCaseViewModel.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/CreateEditCaseViewModel.kt @@ -78,11 +78,11 @@ import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import javax.inject.Inject +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant @HiltViewModel class CreateEditCaseViewModel @Inject constructor( diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/FormDataEditor.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/FormDataEditor.kt index 2753b8d7d..2db5acd03 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/FormDataEditor.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/FormDataEditor.kt @@ -7,8 +7,8 @@ import com.crisiscleanup.core.commoncase.model.WORK_FORM_GROUP_KEY import com.crisiscleanup.core.model.data.Worksite import com.crisiscleanup.feature.caseeditor.model.FormFieldsInputData import com.crisiscleanup.feature.caseeditor.util.updateWorkTypeStatuses -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant interface FormDataEditor { val inputData: FormFieldsInputData diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/NetworkRefreshClient.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/NetworkRefreshClient.kt index 1e63ce03e..eb6de8af2 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/NetworkRefreshClient.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/NetworkRefreshClient.kt @@ -6,13 +6,13 @@ import com.crisiscleanup.core.data.repository.IncidentsRepository import com.crisiscleanup.core.data.repository.LanguageTranslationsRepository import com.crisiscleanup.core.model.data.EmptyIncident import kotlinx.coroutines.flow.first -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicLong import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Clock import kotlin.time.Duration.Companion.hours +import kotlin.time.Instant @Singleton class IncidentRefresher @Inject constructor( diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ViewCaseViewModel.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ViewCaseViewModel.kt index 7ed6f752b..535e70e4d 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ViewCaseViewModel.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ViewCaseViewModel.kt @@ -71,11 +71,11 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock -import kotlinx.datetime.toJavaInstant import java.time.format.DateTimeFormatter import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject +import kotlin.time.Clock +import kotlin.time.toJavaInstant @HiltViewModel class ViewCaseViewModel @Inject constructor( diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CaseHistoryScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CaseHistoryScreen.kt index 5b3b47e42..c72c653d7 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CaseHistoryScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CaseHistoryScreen.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.common.relativeTime import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CreateEditCaseScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CreateEditCaseScreen.kt index 896b0fea0..0f9fc3f65 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CreateEditCaseScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/CreateEditCaseScreen.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.appnav.ViewImageArgs import com.crisiscleanup.core.appnav.WorksiteImagesArgs diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/DynamicFormCronSelect.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/DynamicFormCronSelect.kt index f07c65a12..d17431e20 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/DynamicFormCronSelect.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/DynamicFormCronSelect.kt @@ -51,9 +51,9 @@ import com.philjay.Frequency import com.philjay.RRule import com.philjay.Weekday import com.philjay.WeekdayNum -import kotlinx.datetime.Instant -import kotlinx.datetime.toJavaInstant import java.time.format.DateTimeFormatter +import kotlin.time.Instant +import kotlin.time.toJavaInstant private val recurringDateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd").utcTimeZone diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/FullAddressSearchScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/FullAddressSearchScreen.kt index 5583f6e13..38a4e72d6 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/FullAddressSearchScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/FullAddressSearchScreen.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.data.model.ExistingWorksiteIdentifier import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/MoveLocationOnMapScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/MoveLocationOnMapScreen.kt index 27ee0fd2f..0d05c238d 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/MoveLocationOnMapScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/MoveLocationOnMapScreen.kt @@ -22,7 +22,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.data.model.ExistingWorksiteIdentifier import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/NotesFlagsScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/NotesFlagsScreen.kt index 68629ba04..a69de7bbf 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/NotesFlagsScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/NotesFlagsScreen.kt @@ -54,7 +54,8 @@ internal fun NoteView( } var noteText = note.note if (noteText.contains('<') && - noteText.contains('>') + noteText.contains('>') || + noteText.contains("&#") ) { noteText = HtmlCompat.fromHtml(noteText, HtmlCompat.FROM_HTML_MODE_COMPACT).toString() } diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ShareCaseScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ShareCaseScreen.kt index 908989362..50d7f4b48 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ShareCaseScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ShareCaseScreen.kt @@ -37,7 +37,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.toSize import androidx.compose.ui.window.PopupProperties -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.common.KeyResourceTranslator import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/TransferWorkTypesScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/TransferWorkTypesScreen.kt index 40ee0833b..6afbca693 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/TransferWorkTypesScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/TransferWorkTypesScreen.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.commoncase.WorkTypeTransferType import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ViewCaseScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ViewCaseScreen.kt index a0aff002c..fd5e73740 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ViewCaseScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/ViewCaseScreen.kt @@ -55,7 +55,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.appnav.ViewImageArgs import com.crisiscleanup.core.appnav.WorksiteImagesArgs diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/AddFlagScreen.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/AddFlagScreen.kt index fe43f10f2..8c186c04e 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/AddFlagScreen.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/AddFlagScreen.kt @@ -35,7 +35,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.toSize import androidx.compose.ui.window.PopupProperties -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.data.model.ExistingWorksiteIdentifier import com.crisiscleanup.core.data.model.ExistingWorksiteIdentifierNone diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/HighPriorityFlagView.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/HighPriorityFlagView.kt index ad648b366..92086ef8d 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/HighPriorityFlagView.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/HighPriorityFlagView.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.CrisisCleanupAlertDialog diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/ReportAbuseFlagView.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/ReportAbuseFlagView.kt index 0a2e347d6..540f7c41e 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/ReportAbuseFlagView.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/ReportAbuseFlagView.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.ImeAction -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.CrisisCleanupRadioButton diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/UpsetClientFlagView.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/UpsetClientFlagView.kt index 7d74799b3..4eb685c23 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/UpsetClientFlagView.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/UpsetClientFlagView.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.ImeAction -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.CrisisCleanupRadioButton diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongIncidentFlagView.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongIncidentFlagView.kt index 2613babbd..46be79f99 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongIncidentFlagView.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongIncidentFlagView.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.toSize import androidx.compose.ui.window.PopupProperties -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.AnimatedBusyIndicator diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongLocationFlagView.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongLocationFlagView.kt index b92ff5ace..5645bd209 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongLocationFlagView.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/ui/addflag/WrongLocationFlagView.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.CrisisCleanupTextButton diff --git a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtil.kt b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtil.kt index 36ed8ddea..fc1839a9e 100644 --- a/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtil.kt +++ b/feature/caseeditor/src/main/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtil.kt @@ -4,8 +4,8 @@ import androidx.compose.runtime.MutableState import com.crisiscleanup.core.model.data.WorkType import com.crisiscleanup.core.model.data.Worksite import com.crisiscleanup.feature.caseeditor.model.FieldDynamicValue -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock +import kotlin.time.Instant // TODO Additional test coverage fun Worksite.updateWorkTypeStatuses( diff --git a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/RruleHumanReadableTextTest.kt b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/RruleHumanReadableTextTest.kt index 268b3c709..31de0bab4 100644 --- a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/RruleHumanReadableTextTest.kt +++ b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/RruleHumanReadableTextTest.kt @@ -7,10 +7,10 @@ import com.philjay.Weekday import com.philjay.WeekdayNum import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.datetime.Instant -import kotlinx.datetime.toJavaInstant import org.junit.Assert.assertEquals import org.junit.Test +import kotlin.time.Instant +import kotlin.time.toJavaInstant class RruleHumanReadableTextTest { private val translator = object : KeyResourceTranslator { diff --git a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/LocationInputDataFlagFormDataTest.kt b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/LocationInputDataFlagFormDataTest.kt index 41df661dd..b68d39a6e 100644 --- a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/LocationInputDataFlagFormDataTest.kt +++ b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/LocationInputDataFlagFormDataTest.kt @@ -8,11 +8,11 @@ import com.crisiscleanup.core.testing.model.makeTestWorksite import com.crisiscleanup.core.testing.model.makeTestWorksiteFlag import io.mockk.MockKAnnotations import io.mockk.impl.annotations.MockK -import kotlinx.datetime.Clock import org.junit.Before import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds diff --git a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/WorksiteFormDataChangeTest.kt b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/WorksiteFormDataChangeTest.kt index c2ec0338a..94465172c 100644 --- a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/WorksiteFormDataChangeTest.kt +++ b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/model/WorksiteFormDataChangeTest.kt @@ -3,10 +3,10 @@ package com.crisiscleanup.feature.caseeditor.model import com.crisiscleanup.core.model.data.WorksiteFormValue import com.crisiscleanup.core.network.model.DynamicValue import com.crisiscleanup.core.testing.model.makeTestWorksite -import kotlinx.datetime.Clock import org.junit.Test import kotlin.test.assertFalse import kotlin.test.assertTrue +import kotlin.time.Clock import kotlin.time.Duration.Companion.days class WorksiteFormDataChangeTest { diff --git a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtilTest.kt b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtilTest.kt index 1270c800f..7a140c0d6 100644 --- a/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtilTest.kt +++ b/feature/caseeditor/src/test/java/com/crisiscleanup/feature/caseeditor/util/WorkTypeUtilTest.kt @@ -10,9 +10,9 @@ import com.crisiscleanup.core.model.data.WorksiteFlag import com.crisiscleanup.core.model.data.WorksiteFormValue import com.crisiscleanup.core.network.model.DynamicValue import com.crisiscleanup.feature.caseeditor.model.FieldDynamicValue -import kotlinx.datetime.Clock import org.junit.Test import kotlin.test.assertEquals +import kotlin.time.Clock class WorkTypeUtilTest { diff --git a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/CasesViewModel.kt b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/CasesViewModel.kt index 6249ae200..8901fd56b 100644 --- a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/CasesViewModel.kt +++ b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/CasesViewModel.kt @@ -87,12 +87,12 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant import com.crisiscleanup.core.commonassets.R as commonAssetsR @OptIn(FlowPreview::class) diff --git a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapBoundsManager.kt b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapBoundsManager.kt index c43d9c0d3..a07e88733 100644 --- a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapBoundsManager.kt +++ b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapBoundsManager.kt @@ -31,9 +31,9 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.shareIn -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant @OptIn(kotlinx.coroutines.FlowPreview::class) internal class CasesMapBoundsManager( diff --git a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapTileLayerManager.kt b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapTileLayerManager.kt index da05c0fdf..a1c9ef230 100644 --- a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapTileLayerManager.kt +++ b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/map/CasesMapTileLayerManager.kt @@ -8,7 +8,7 @@ import com.crisiscleanup.core.model.data.EmptyIncident import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.datetime.Clock +import kotlin.time.Clock /** * Signals when the Compose map tile layer should invalidate its cache and/or redraw new or updated tiles. diff --git a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesFilterScreen.kt b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesFilterScreen.kt index 60883dd71..31a0833fe 100644 --- a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesFilterScreen.kt +++ b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesFilterScreen.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.common.KeyResourceTranslator import com.crisiscleanup.core.common.noonTime @@ -80,10 +80,10 @@ import com.crisiscleanup.core.ui.scrollFlingListener import com.crisiscleanup.feature.cases.CasesFilterViewModel import com.crisiscleanup.feature.cases.CollapsibleFilterSection import kotlinx.coroutines.launch -import kotlinx.datetime.Instant -import kotlinx.datetime.toJavaInstant import java.time.ZoneId import java.time.format.DateTimeFormatter +import kotlin.time.Instant +import kotlin.time.toJavaInstant private val dateFormatter = DateTimeFormatter .ofPattern("yyyy-MM-dd") diff --git a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesSearchScreen.kt b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesSearchScreen.kt index 52403ef6c..f315ea3be 100644 --- a/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesSearchScreen.kt +++ b/feature/cases/src/main/java/com/crisiscleanup/feature/cases/ui/CasesSearchScreen.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.commoncase.model.CaseSummaryResult import com.crisiscleanup.core.commoncase.ui.listCaseResults diff --git a/feature/dashboard/src/main/java/com/crisiscleanup/feature/dashboard/DashboardScreen.kt b/feature/dashboard/src/main/java/com/crisiscleanup/feature/dashboard/DashboardScreen.kt index 461dbb3f4..2018bbf51 100644 --- a/feature/dashboard/src/main/java/com/crisiscleanup/feature/dashboard/DashboardScreen.kt +++ b/feature/dashboard/src/main/java/com/crisiscleanup/feature/dashboard/DashboardScreen.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel @Composable internal fun DashboardRoute( diff --git a/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/IncidentWorksitesCacheViewModel.kt b/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/IncidentWorksitesCacheViewModel.kt index 5acc05b5b..94416fade 100644 --- a/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/IncidentWorksitesCacheViewModel.kt +++ b/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/IncidentWorksitesCacheViewModel.kt @@ -34,12 +34,12 @@ import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject +import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds +import kotlin.time.Instant @HiltViewModel class IncidentWorksitesCacheViewModel @Inject constructor( diff --git a/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/ui/IncidentWorksitesCacheScreen.kt b/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/ui/IncidentWorksitesCacheScreen.kt index b5e25d702..815171ae8 100644 --- a/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/ui/IncidentWorksitesCacheScreen.kt +++ b/feature/incidentcache/src/main/kotlin/com/crisiscleanup/feature/incidentcache/ui/IncidentWorksitesCacheScreen.kt @@ -40,7 +40,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.common.milesToMeters import com.crisiscleanup.core.data.repository.IncidentCacheStage diff --git a/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ListsScreen.kt b/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ListsScreen.kt index e8fa9cbe4..f13ee53b6 100644 --- a/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ListsScreen.kt +++ b/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ListsScreen.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems diff --git a/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ViewListScreen.kt b/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ViewListScreen.kt index 7a5ceec14..4dd000f7a 100644 --- a/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ViewListScreen.kt +++ b/feature/lists/src/main/kotlin/com/crisiscleanup/feature/crisiscleanuplists/ui/ViewListScreen.kt @@ -19,7 +19,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.common.ParsedPhoneNumber import com.crisiscleanup.core.common.relativeTime diff --git a/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/ViewImageScreen.kt b/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/ViewImageScreen.kt index cd8e1bac4..656fccde5 100644 --- a/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/ViewImageScreen.kt +++ b/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/ViewImageScreen.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.component.ViewImageScreen import com.crisiscleanup.feature.mediamanage.ViewImageViewModel diff --git a/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/WorksiteImagesScreen.kt b/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/WorksiteImagesScreen.kt index 4a5738c34..9ba5f483e 100644 --- a/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/WorksiteImagesScreen.kt +++ b/feature/mediamanage/src/main/java/com/crisiscleanup/feature/mediamanage/ui/WorksiteImagesScreen.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.coerceIn import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.toSize -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.compose.AsyncImage import com.crisiscleanup.core.designsystem.component.MultiImageScreen diff --git a/feature/menu/src/main/java/com/crisiscleanup/feature/menu/MenuViewModel.kt b/feature/menu/src/main/java/com/crisiscleanup/feature/menu/MenuViewModel.kt index 46f5419b4..afd2a525d 100644 --- a/feature/menu/src/main/java/com/crisiscleanup/feature/menu/MenuViewModel.kt +++ b/feature/menu/src/main/java/com/crisiscleanup/feature/menu/MenuViewModel.kt @@ -71,6 +71,11 @@ class MenuViewModel @Inject constructor( val isDebuggable = appEnv.isDebuggable val isNotProduction = appEnv.isNotProduction + val showSyncLogs = incidentSelector.incidentId + .map { + appEnv.isNotProduction || it == 171L + } + val termsOfServiceUrl = appSettingsProvider.termsOfServiceUrl val privacyPolicyUrl = appSettingsProvider.privacyPolicyUrl val gettingStartedVideoUrl = appSettingsProvider.gettingStartedVideoUrl diff --git a/feature/menu/src/main/java/com/crisiscleanup/feature/menu/ui/MenuScreen.kt b/feature/menu/src/main/java/com/crisiscleanup/feature/menu/ui/MenuScreen.kt index 697313d84..5562e8b04 100644 --- a/feature/menu/src/main/java/com/crisiscleanup/feature/menu/ui/MenuScreen.kt +++ b/feature/menu/src/main/java/com/crisiscleanup/feature/menu/ui/MenuScreen.kt @@ -250,6 +250,8 @@ private fun MenuScreen( } } + val showSyncLogs by viewModel.showSyncLogs.collectAsStateWithLifecycle(false) + LazyColumn( Modifier.weight(1f) .sizeIn(maxWidth = LocalDimensions.current.contentMaxWidth), @@ -409,14 +411,16 @@ private fun MenuScreen( } } - if (viewModel.isNotProduction) { + if (showSyncLogs) { item { CrisisCleanupTextButton( onClick = openSyncLogs, text = "See sync logs", ) } + } + if (viewModel.isNotProduction) { item { CrisisCleanupTextButton( onClick = viewModel::checkInactivity, diff --git a/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/InviteTeammateScreen.kt b/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/InviteTeammateScreen.kt index 28eeab927..e278c0062 100644 --- a/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/InviteTeammateScreen.kt +++ b/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/InviteTeammateScreen.kt @@ -41,7 +41,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.min import androidx.compose.ui.unit.toSize import androidx.compose.ui.window.PopupProperties -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.AnimatedBusyIndicator diff --git a/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/RequestRedeployScreen.kt b/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/RequestRedeployScreen.kt index f4ad003c5..234bc2064 100644 --- a/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/RequestRedeployScreen.kt +++ b/feature/organizationmanage/src/main/java/com/crisiscleanup/feature/organizationmanage/ui/RequestRedeployScreen.kt @@ -21,7 +21,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyButton diff --git a/feature/syncinsights/src/main/java/com/crisiscleanup/feature/syncinsights/ui/SyncInsightsScreen.kt b/feature/syncinsights/src/main/java/com/crisiscleanup/feature/syncinsights/ui/SyncInsightsScreen.kt index 24815adc5..66d236f0d 100644 --- a/feature/syncinsights/src/main/java/com/crisiscleanup/feature/syncinsights/ui/SyncInsightsScreen.kt +++ b/feature/syncinsights/src/main/java/com/crisiscleanup/feature/syncinsights/ui/SyncInsightsScreen.kt @@ -15,7 +15,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems diff --git a/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/TeamsScreen.kt b/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/TeamsScreen.kt index 83ebd0b0c..7101bdb4d 100644 --- a/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/TeamsScreen.kt +++ b/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/TeamsScreen.kt @@ -24,7 +24,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.appcomponent.ui.AppTopBar import com.crisiscleanup.core.designsystem.LocalAppTranslator diff --git a/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/ViewTeamScreen.kt b/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/ViewTeamScreen.kt index 51f42a747..415e02aea 100644 --- a/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/ViewTeamScreen.kt +++ b/feature/team/src/main/java/com/crisiscleanup/feature/team/ui/ViewTeamScreen.kt @@ -2,7 +2,7 @@ package com.crisiscleanup.feature.team.ui import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.crisiscleanup.feature.team.ViewTeamViewModel @Composable diff --git a/feature/userfeedback/src/main/java/com/crisiscleanup/feature/userfeedback/ui/UserFeedbackScreen.kt b/feature/userfeedback/src/main/java/com/crisiscleanup/feature/userfeedback/ui/UserFeedbackScreen.kt index 935b7db07..f06f687cb 100644 --- a/feature/userfeedback/src/main/java/com/crisiscleanup/feature/userfeedback/ui/UserFeedbackScreen.kt +++ b/feature/userfeedback/src/main/java/com/crisiscleanup/feature/userfeedback/ui/UserFeedbackScreen.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.crisiscleanup.core.designsystem.LocalAppTranslator import com.crisiscleanup.core.designsystem.component.BusyIndicatorFloatingTopCenter diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 92840601c..31658bcb3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,29 +2,29 @@ accompanist = "0.37.3" androidDesugarJdkLibs = "2.1.5" # AGP and tools should be updated together -androidGradlePlugin = "8.11.1" -androidTools = "31.12.0" -androidMapsUtil = "3.14.0" -androidMapsUtilKtx = "5.2.0" -androidMaterial = "1.12.0" -androidxActivity = "1.10.1" +androidGradlePlugin = "8.13.0" +androidTools = "31.13.0" +androidMapsUtil = "3.19.0" +androidMapsUtilKtx = "5.2.1" +androidMaterial = "1.13.0" +androidxActivity = "1.11.0" androidxAppCompat = "1.7.1" androidxBrowser = "1.9.0" -androidxCamera = "1.4.2" -androidxComposeBom = "2025.07.00" -androidxComposeMaterial3 = "1.3.2" -androidxComposeRuntimeTracing = "1.8.3" +androidxCamera = "1.5.1" +androidxComposeBom = "2025.10.00" +androidxComposeMaterial3 = "1.4.0" +androidxComposeRuntimeTracing = "1.9.3" androidxConstraintLayout = "1.1.1" -androidxCore = "1.16.0" +androidxCore = "1.17.0" androidxCoreSplashscreen = "1.0.1" androidxDataStore = "1.1.7" androidxEspresso = "3.7.0" -androidxHiltNavigationCompose = "1.2.0" -androidxLifecycle = "2.9.2" +androidxHiltNavigationCompose = "1.3.0" +androidxLifecycle = "2.9.4" androidxLintGradle = "1.0.0-alpha05" -androidxMacroBenchmark = "1.4.0" -androidxMetrics = "1.0.0-beta02" -androidxNavigation = "2.9.3" +androidxMacroBenchmark = "1.4.1" +androidxMetrics = "1.0.0" +androidxNavigation = "2.9.5" androidxPaging = "3.3.6" androidxProfileinstaller = "1.4.1" androidxStartup = "1.2.0" @@ -35,46 +35,46 @@ androidxTestRules = "1.7.0" androidxTestRunner = "1.7.0" androidxTracing = "1.3.0" androidxUiAutomator = "2.3.0" -androidxWindowManager = "1.4.0" -androidxWork = "2.10.3" +androidxWindowManager = "1.5.0" +androidxWork = "2.10.5" apacheCommonsText = "1.14.0" coil = "2.7.0" dependencyGuard = "0.5.0" -firebaseBom = "34.1.0" +firebaseBom = "34.4.0" firebaseCrashlyticsPlugin = "3.0.6" firebasePerfPlugin = "2.0.1" -gmsPlugin = "4.4.3" -googleMapsCompose = "6.7.1" -googlePlaces = "4.4.1" -hilt = "2.57" -hiltExt = "1.2.0" +gmsPlugin = "4.4.4" +googleMapsCompose = "6.12.1" +googlePlaces = "5.0.0" +hilt = "2.57.2" +hiltExt = "1.3.0" jacoco = "0.8.12" junit4 = "4.13.2" jwtDecode = "2.0.2" -kotlin = "2.1.10" +kotlin = "2.2.20" kotlinxCoroutines = "1.10.2" kotlinxCoroutinesPlayServices = "1.10.2" -kotlinxDatetime = "0.6.2" +kotlinxDatetime = "0.7.1" kotlinxSerializationJson = "1.9.0" -ksp = "2.1.10-1.0.31" -libphonenumber = "9.0.11" +ksp = "2.2.20-2.0.4" +libphonenumber = "9.0.16" mlkitBarcodeScanning = "17.3.0" -mockk = "1.14.5" +mockk = "1.14.6" moduleGraph = "2.9.0" -okhttp = "5.1.0" +okhttp = "5.2.1" philJayRrule = "1.0.3" playServicesAuth = "21.4.0" -playServicesAuthPhone = "18.2.0" +playServicesAuthPhone = "18.3.0" playServicesLocation = "21.3.0" playServicesMaps = "19.2.0" -protobuf = "4.31.1" +protobuf = "4.32.1" protobufPlugin = "0.9.5" retrofit = "3.0.0" retrofitKotlinxSerializationJson = "1.0.0" -room = "2.7.2" +room = "2.8.2" secrets = "2.0.1" timeAgo = "4.1.0" -truth = "1.4.4" +truth = "1.4.5" turbine = "1.2.1" zxing = "3.5.3" @@ -199,7 +199,7 @@ turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine zxing = { group = "com.google.zxing", name = "core", version.ref = "zxing" } # Dependencies of the included build-logic -android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } +android-gradleApiPlugin = { group = "com.android.tools.build", name = "gradle-api", version.ref = "androidGradlePlugin" } android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" } compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } firebase-crashlytics-gradlePlugin = { group = "com.google.firebase", name = "firebase-crashlytics-gradle", version.ref = "firebaseCrashlyticsPlugin" } @@ -243,3 +243,4 @@ nowinandroid-android-room = { id = "nowinandroid.android.room" } nowinandroid-android-test = { id = "nowinandroid.android.test" } nowinandroid-hilt = { id = "nowinandroid.hilt" } nowinandroid-jvm-library = { id = "nowinandroid.jvm.library" } +nowinandroid-root = { id = "nowinandroid.root" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 62c1cb4a4..47dc27220 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ -#Mon Jan 06 13:11:12 EST 2025 +#Wed Oct 15 18:02:21 EDT 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/lint/build.gradle.kts b/lint/build.gradle.kts index cfe2afdbb..2b7fdd108 100644 --- a/lint/build.gradle.kts +++ b/lint/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { `java-library` @@ -11,16 +11,16 @@ java { targetCompatibility = JavaVersion.VERSION_17 } -tasks.withType().configureEach { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_17 } } dependencies { compileOnly(libs.kotlin.stdlib) compileOnly(libs.lint.api) + testImplementation(libs.kotlin.test) testImplementation(libs.lint.checks) testImplementation(libs.lint.tests) - testImplementation(kotlin("test")) } diff --git a/sync/work/src/main/java/com/crisiscleanup/sync/initializers/SyncWorkHelpers.kt b/sync/work/src/main/java/com/crisiscleanup/sync/initializers/SyncWorkHelpers.kt index 9d14d981f..ac21a786e 100644 --- a/sync/work/src/main/java/com/crisiscleanup/sync/initializers/SyncWorkHelpers.kt +++ b/sync/work/src/main/java/com/crisiscleanup/sync/initializers/SyncWorkHelpers.kt @@ -47,7 +47,7 @@ fun scheduleSyncMedia(context: Context, syncImmediate: Boolean) { WorkManager.getInstance(context).apply { enqueueUniqueWork( SYNC_MEDIA_WORK_NAME, - ExistingWorkPolicy.REPLACE, + ExistingWorkPolicy.KEEP, SyncMediaWorker.oneTimeSyncWork(syncImmediate), ) } diff --git a/sync/work/src/main/java/com/crisiscleanup/sync/workers/InactivityWorker.kt b/sync/work/src/main/java/com/crisiscleanup/sync/workers/InactivityWorker.kt index 3f98c1441..00e526982 100644 --- a/sync/work/src/main/java/com/crisiscleanup/sync/workers/InactivityWorker.kt +++ b/sync/work/src/main/java/com/crisiscleanup/sync/workers/InactivityWorker.kt @@ -18,8 +18,8 @@ import dagger.assisted.AssistedInject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext -import kotlinx.datetime.Clock import java.util.concurrent.TimeUnit +import kotlin.time.Clock import kotlin.time.Duration.Companion.days private const val REPEAT_DURATION_DAYS = 2L