From 0ba77534372f0709be5a25094288b85c49341d95 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 27 Dec 2024 05:35:03 -0600 Subject: [PATCH] Replace retrofit with ktor --- app/build.gradle.kts | 6 +- .../BaseCaldavCalendarSettingsActivity.kt | 2 +- .../org/tasks/http/AndroidCookieStorage.kt | 41 +++ .../java/org/tasks/http/HttpClientFactory.kt | 54 ++-- .../java/org/tasks/http/HttpErrorHandler.kt | 47 ++++ .../main/java/org/tasks/http/HttpException.kt | 5 - .../java/org/tasks/sync/microsoft/Error.kt | 7 +- .../MicrosoftListSettingsActivityViewModel.kt | 44 ++-- .../tasks/sync/microsoft/MicrosoftService.kt | 108 ++++---- .../org/tasks/sync/microsoft/TaskLists.kt | 11 +- .../java/org/tasks/sync/microsoft/Tasks.kt | 19 +- app/src/test/java/org/tasks/TestUtilities.kt | 6 +- deps_fdroid.txt | 205 +++++++++++---- deps_googleplay.txt | 245 ++++++++++++------ gradle/libs.versions.toml | 7 +- 15 files changed, 557 insertions(+), 250 deletions(-) create mode 100644 app/src/main/java/org/tasks/http/AndroidCookieStorage.kt create mode 100644 app/src/main/java/org/tasks/http/HttpErrorHandler.kt delete mode 100644 app/src/main/java/org/tasks/http/HttpException.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0a9d0ea26..c57076106 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -227,8 +227,6 @@ dependencies { implementation(libs.colorpicker) implementation(libs.appauth) implementation(libs.osmdroid) - implementation(libs.retrofit) - implementation(libs.retrofit.moshi) implementation(libs.androidx.recyclerview) implementation(platform(libs.androidx.compose)) @@ -246,6 +244,10 @@ dependencies { implementation(libs.coil.svg) implementation(libs.coil.gif) + implementation(libs.ktor) + implementation(libs.ktor.content.negotiation) + implementation(libs.ktor.serialization) + implementation(libs.accompanist.permissions) googleplayImplementation(platform(libs.firebase)) diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt index e47359c72..56533e0c0 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt @@ -106,7 +106,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() { hideProgressIndicator() when (t) { is HttpException -> showSnackbar(t.message) - is retrofit2.HttpException -> showSnackbar(t.message() ?: "HTTP ${t.code()}") + is org.tasks.http.HttpException -> showSnackbar(t.message ?: "HTTP ${t.code}") is DisplayableException -> showSnackbar(t.resId) is ConnectException -> showSnackbar(R.string.network_error) else -> showSnackbar(R.string.error_adding_account, t.message!!) diff --git a/app/src/main/java/org/tasks/http/AndroidCookieStorage.kt b/app/src/main/java/org/tasks/http/AndroidCookieStorage.kt new file mode 100644 index 000000000..b8a590971 --- /dev/null +++ b/app/src/main/java/org/tasks/http/AndroidCookieStorage.kt @@ -0,0 +1,41 @@ +package org.tasks.http + +import android.content.Context +import androidx.core.content.edit +import io.ktor.client.plugins.cookies.CookiesStorage +import io.ktor.client.plugins.cookies.matches +import io.ktor.http.Cookie +import io.ktor.http.Url +import io.ktor.http.parseServerSetCookieHeader +import timber.log.Timber + +class AndroidCookieStorage( + context: Context, + key: String?, +) : CookiesStorage { + private val prefs = context.getSharedPreferences("cookies_$key", Context.MODE_PRIVATE) + private val cookies = mutableMapOf() + + override suspend fun get(requestUrl: Url): List = + cookies.values.filter { it.matches(requestUrl) } + + override suspend fun addCookie(requestUrl: Url, cookie: Cookie) { + cookies[cookie.name] = cookie + prefs.edit { + putString(cookie.name, cookie.toString()) + } + } + + override fun close() { + } + + init { + prefs.all.forEach { (name, value) -> + if (value is String) { + cookies[name] = parseServerSetCookieHeader(value) + } else { + Timber.e("Invalid cookie: $name -> $value") + } + } + } +} diff --git a/app/src/main/java/org/tasks/http/HttpClientFactory.kt b/app/src/main/java/org/tasks/http/HttpClientFactory.kt index 4ace586d2..479ee4730 100644 --- a/app/src/main/java/org/tasks/http/HttpClientFactory.kt +++ b/app/src/main/java/org/tasks/http/HttpClientFactory.kt @@ -4,10 +4,18 @@ import android.content.Context import at.bitfire.cert4android.CustomCertManager import at.bitfire.dav4jvm.BasicDigestAuthHandler import dagger.hilt.android.qualifiers.ApplicationContext +import io.ktor.client.HttpClient +import io.ktor.client.engine.android.Android +import io.ktor.client.plugins.HttpTimeout +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.cookies.HttpCookies +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.request.header +import io.ktor.serialization.kotlinx.json.json import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.serialization.json.Json import net.openid.appauth.AuthState -import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.internal.tls.OkHostnameVerifier import org.tasks.DebugNetworkInterceptor @@ -18,8 +26,6 @@ import org.tasks.preferences.Preferences import org.tasks.security.KeyStoreEncryption import org.tasks.sync.microsoft.MicrosoftService import org.tasks.sync.microsoft.requestTokenRefresh -import retrofit2.Retrofit -import retrofit2.converter.moshi.MoshiConverterFactory import javax.inject.Inject import javax.net.ssl.SSLContext @@ -92,25 +98,33 @@ class HttpClientFactory @Inject constructor( if (!authState.isAuthorized) { throw RuntimeException("Needs authentication") } - val client = newClient(cookieKey = account.username) { - it.addInterceptor { chain -> - chain.proceed( - chain.request().newBuilder() - .header("Authorization", "Bearer ${authState.accessToken}") - .build() + val client = HttpClient(Android) { + expectSuccess = true + + install(ContentNegotiation) { + json( + Json { + ignoreUnknownKeys = true + } ) } - } - val retrofit = Retrofit.Builder() - .baseUrl(URL_MICROSOFT) - .addConverterFactory(MoshiConverterFactory.create()) - .client(client) - .build() - return retrofit.create(MicrosoftService::class.java) - } - companion object { - const val URL_MICROSOFT = "https://graph.microsoft.com" - val MEDIA_TYPE_JSON = "application/json".toMediaType() + defaultRequest { + header("Authorization", "Bearer ${authState.accessToken}") + } + + install(HttpTimeout) { + requestTimeoutMillis = 30_000 + } + + install(HttpCookies) { + storage = AndroidCookieStorage(context = context, key = account.username) + } + + install(HttpErrorHandler) + } + return MicrosoftService( + client = client + ) } } diff --git a/app/src/main/java/org/tasks/http/HttpErrorHandler.kt b/app/src/main/java/org/tasks/http/HttpErrorHandler.kt new file mode 100644 index 000000000..3c19b0a1a --- /dev/null +++ b/app/src/main/java/org/tasks/http/HttpErrorHandler.kt @@ -0,0 +1,47 @@ +package org.tasks.http + +import io.ktor.client.HttpClient +import io.ktor.client.plugins.HttpClientPlugin +import io.ktor.client.plugins.HttpSend +import io.ktor.client.plugins.plugin +import io.ktor.client.statement.HttpResponse +import io.ktor.http.isSuccess +import io.ktor.util.AttributeKey + +open class NetworkException(cause: Throwable? = null) : Exception(cause) +class UnauthorizedException(cause: Throwable? = null) : NetworkException(cause) +class NotFoundException(cause: Throwable? = null) : NetworkException(cause) +class ServiceUnavailableException(cause: Throwable? = null) : NetworkException(cause) +class HttpException(val code: Int, override val message: String? = null) : NetworkException() + +class HttpErrorHandler { + class Config { + var handleError: suspend (HttpResponse) -> Unit = {} + } + + companion object Plugin : HttpClientPlugin { + override val key = AttributeKey("HttpErrorHandler") + + override fun prepare(block: Config.() -> Unit): HttpErrorHandler { + val config = Config().apply(block) + return HttpErrorHandler() + } + + override fun install(plugin: HttpErrorHandler, scope: HttpClient) { + scope.plugin(HttpSend).intercept { request -> + val originalCall = execute(request) + + if (!originalCall.response.status.isSuccess()) { + when (originalCall.response.status.value) { + 401 -> throw UnauthorizedException() + 404 -> throw NotFoundException() + in 500..599 -> throw ServiceUnavailableException() + else -> throw HttpException(originalCall.response.status.value) + } + } + + originalCall + } + } + } +} diff --git a/app/src/main/java/org/tasks/http/HttpException.kt b/app/src/main/java/org/tasks/http/HttpException.kt deleted file mode 100644 index 42ba65c48..000000000 --- a/app/src/main/java/org/tasks/http/HttpException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.tasks.http - -import java.io.IOException - -class HttpException(code: Int, message: String) : IOException("$code $message") \ No newline at end of file diff --git a/app/src/main/java/org/tasks/sync/microsoft/Error.kt b/app/src/main/java/org/tasks/sync/microsoft/Error.kt index da53f0638..7f5b241c7 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/Error.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/Error.kt @@ -1,8 +1,8 @@ package org.tasks.sync.microsoft +import io.ktor.client.call.body +import io.ktor.client.statement.HttpResponse import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json -import retrofit2.Response @Serializable data class Error( @@ -15,7 +15,6 @@ data class Error( ) companion object { - fun Response.toMicrosoftError() - = errorBody()?.string()?.let { Json.decodeFromString(it) } + suspend fun HttpResponse.toMicrosoftError() = body() } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt index fd00bcf1d..f688fd929 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt @@ -7,17 +7,12 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json -import okhttp3.RequestBody.Companion.toRequestBody import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar import org.tasks.http.HttpClientFactory -import org.tasks.http.HttpClientFactory.Companion.MEDIA_TYPE_JSON -import retrofit2.HttpException -import retrofit2.Response +import timber.log.Timber import javax.inject.Inject @HiltViewModel @@ -47,30 +42,29 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor( _viewState.update { it.copy(requestInFlight = true) } val microsoftService = httpClientFactory.getMicrosoftService(account) val taskList = TaskLists.TaskList(displayName = displayName) - val body = Json.encodeToString(taskList).toRequestBody(MEDIA_TYPE_JSON) - val result = microsoftService.createList(body) - if (result.isSuccessful) { + try { + val result = microsoftService.createList(taskList) val list = CaldavCalendar( account = this@MicrosoftListSettingsActivityViewModel.account.uuid ).apply { - result.body()?.applyTo(this) + result.applyTo(this) } caldavDao.insert(list) _viewState.update { it.copy(result = list) } - } else { - requestFailed(result) + } catch (e: Exception) { + requestFailed(e) } } suspend fun deleteList() { _viewState.update { it.copy(requestInFlight = true) } val microsoftService = httpClientFactory.getMicrosoftService(account) - val result = microsoftService.deleteList(list?.uuid!!) - if (result.isSuccessful) { + try { + val result = microsoftService.deleteList(list?.uuid!!) taskDeleter.delete(list) _viewState.update { it.copy(deleted = true) } - } else { - requestFailed(result) + } catch (e: Exception) { + requestFailed(e) } } @@ -78,14 +72,13 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor( _viewState.update { it.copy(requestInFlight = true) } val microsoftService = httpClientFactory.getMicrosoftService(account) val taskList = TaskLists.TaskList(displayName = displayName) - val body = Json.encodeToString(taskList).toRequestBody(MEDIA_TYPE_JSON) - val result = microsoftService.updateList(list?.uuid!!, body) - if (result.isSuccessful) { - result.body()?.applyTo(list) + try { + val result = microsoftService.updateList(list?.uuid!!, taskList) + result.applyTo(list) caldavDao.update(list) _viewState.update { it.copy(result = list) } - } else { - requestFailed(result) + } catch (e: Exception) { + requestFailed(e) } } @@ -93,12 +86,13 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor( _viewState.update { it.copy(error = null) } } - private fun requestFailed(result: Response) { + private fun requestFailed(exception: Exception) { + Timber.e(exception) _viewState.update { it.copy( requestInFlight = false, - error = HttpException(result), + error = exception, ) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftService.kt b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftService.kt index 91f5bfc9a..9ccf8483b 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftService.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftService.kt @@ -1,51 +1,63 @@ package org.tasks.sync.microsoft -import okhttp3.RequestBody -import okhttp3.ResponseBody -import retrofit2.Response -import retrofit2.http.* - -interface MicrosoftService { - @GET("/v1.0/me/todo/lists") - suspend fun getLists(): Response - - @GET - suspend fun paginateLists(@Url nextPage: String): Response - - @POST("/v1.0/me/todo/lists") - suspend fun createList(@Body body: RequestBody): Response - - @PATCH("/v1.0/me/todo/lists/{listId}") - suspend fun updateList( - @Path("listId") listId: String, - @Body body: RequestBody - ): Response - - @DELETE("/v1.0/me/todo/lists/{listId}") - suspend fun deleteList(@Path("listId") listId: String): Response - - @GET("/v1.0/me/todo/lists/{listId}/tasks/delta") - suspend fun getTasks(@Path("listId") listId: String): Response - - @GET - suspend fun paginateTasks(@Url nextPage: String): Response - - @POST("/v1.0/me/todo/lists/{listId}/tasks") - suspend fun createTask( - @Path("listId") listId: String, - @Body body: RequestBody - ): Response - - @PATCH("/v1.0/me/todo/lists/{listId}/tasks/{taskId}") - suspend fun updateTask( - @Path("listId") listId: String, - @Path("taskId") taskId: String, - @Body body: RequestBody - ): Response - - @DELETE("/v1.0/me/todo/lists/{listId}/tasks/{taskId}") - suspend fun deleteTask( - @Path("listId") listId: String, - @Path("taskId") taskId: String - ): Response +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.delete +import io.ktor.client.request.get +import io.ktor.client.request.patch +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.http.ContentType +import io.ktor.http.contentType + +class MicrosoftService( + private val client: HttpClient +) { + private val baseUrl: String = "https://graph.microsoft.com/v1.0/me/todo" + + suspend fun getLists(): TaskLists = client.get("$baseUrl/lists").body() + + suspend fun paginateLists(nextPage: String): TaskLists = client.get(nextPage).body() + + suspend fun createList(body: TaskLists.TaskList): TaskLists.TaskList = + client + .post("$baseUrl/lists") { + contentType(ContentType.Application.Json) + setBody(body) + } + .body() + + suspend fun updateList(listId: String, body: TaskLists.TaskList): TaskLists.TaskList = + client + .patch("$baseUrl/lists/$listId") { + contentType(ContentType.Application.Json) + setBody(body) + } + .body() + + suspend fun deleteList(listId: String) = client.delete("$baseUrl/lists/$listId") + + suspend fun getTasks(listId: String): Tasks = + client.get("$baseUrl/lists/$listId/tasks/delta").body() + + suspend fun paginateTasks(nextPage: String): Tasks = client.get(nextPage).body() + + suspend fun createTask(listId: String, body: Tasks.Task): Tasks.Task = + client + .post("$baseUrl/lists/$listId/tasks") { + contentType(ContentType.Application.Json) + setBody(body) + } + .body() + + suspend fun updateTask(listId: String, taskId: String, body: Tasks.Task): Tasks.Task = + client + .patch("$baseUrl/lists/$listId/tasks/$taskId") { + contentType(ContentType.Application.Json) + setBody(body) + } + .body() + + suspend fun deleteTask(listId: String, taskId: String) = + client.delete("$baseUrl/lists/$listId/tasks/$taskId") } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/sync/microsoft/TaskLists.kt b/app/src/main/java/org/tasks/sync/microsoft/TaskLists.kt index bbf6b7f53..6d164bdc6 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/TaskLists.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/TaskLists.kt @@ -1,17 +1,18 @@ package org.tasks.sync.microsoft -import com.squareup.moshi.Json +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import org.tasks.data.entity.CaldavCalendar +@Serializable data class TaskLists( - @field:Json(name = "@odata.context") val context: String, + @SerialName("@odata.context") val context: String, val value: List, - @field:Json(name = "@odata.nextLink") val nextPage: String?, + @SerialName("@odata.nextLink") val nextPage: String?, ) { @Serializable data class TaskList( - @Json(name = "@odata.etag") val etag: String? = null, + @SerialName("@odata.etag") val etag: String? = null, val displayName: String? = null, val isOwner: Boolean? = null, val isShared: Boolean? = null, @@ -31,4 +32,4 @@ data class TaskLists( } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/tasks/sync/microsoft/Tasks.kt b/app/src/main/java/org/tasks/sync/microsoft/Tasks.kt index 685caf633..efee2b5bd 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/Tasks.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/Tasks.kt @@ -1,14 +1,17 @@ package org.tasks.sync.microsoft -import com.squareup.moshi.Json +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +@Serializable data class Tasks( val value: List, - @field:Json(name = "@odata.nextLink") val nextPage: String?, - @field:Json(name = "@odata.deltaLink") val nextDelta: String?, + @SerialName("@odata.nextLink") val nextPage: String? = null, + @SerialName("@odata.deltaLink") val nextDelta: String? = null, ) { + @Serializable data class Task( - @field:Json(name = "@odata.etag") val etag: String? = null, + @SerialName("@odata.etag") val etag: String? = null, val id: String? = null, val title: String? = null, val body: Body? = null, @@ -22,13 +25,15 @@ data class Tasks( val dueDateTime: DateTime? = null, val linkedResources: List? = null, val recurrence: Recurrence? = null, - @field:Json(name = "@removed") val removed: Removed? = null, + @SerialName("@removed") val removed: Removed? = null, ) { + @Serializable data class Body( val content: String, val contentType: String, ) + @Serializable data class LinkedResource( val applicationName: String, val displayName: String, @@ -36,19 +41,23 @@ data class Tasks( val id: String, ) + @Serializable data class Removed( val reason: String, ) + @Serializable data class DateTime( val dateTime: String, val timeZone: String, ) + @Serializable data class Recurrence( val pattern: Pattern, ) + @Serializable data class Pattern( val type: RecurrenceType, val interval: Int, diff --git a/app/src/test/java/org/tasks/TestUtilities.kt b/app/src/test/java/org/tasks/TestUtilities.kt index f96c3c1b7..18594ca34 100644 --- a/app/src/test/java/org/tasks/TestUtilities.kt +++ b/app/src/test/java/org/tasks/TestUtilities.kt @@ -2,8 +2,8 @@ package org.tasks import android.content.Context import at.bitfire.ical4android.Task.Companion.tasksFromReader -import com.squareup.moshi.Moshi import kotlinx.coroutines.runBlocking +import kotlinx.serialization.json.Json import org.tasks.caldav.applyRemote import org.tasks.caldav.iCalendar.Companion.reminders import org.tasks.data.entity.Alarm @@ -20,6 +20,8 @@ import java.util.Locale import java.util.TimeZone object TestUtilities { + private val json = Json { ignoreUnknownKeys = true } + fun withTZ(id: String, runnable: suspend () -> Unit) = withTZ(TimeZone.getTimeZone(id), runnable) @@ -90,7 +92,7 @@ object TestUtilities { } private fun mstodoFromFile(path: String): Tasks.Task = - Moshi.Builder().build().adapter(Tasks::class.java).fromJson(readFile(path))!!.value.first() + json.decodeFromString(readFile(path)).value.first() fun readFile(path: String): String { val uri = javaClass.classLoader?.getResource(path)?.toURI() diff --git a/deps_fdroid.txt b/deps_fdroid.txt index ee17d3756..22d3c5bae 100644 --- a/deps_fdroid.txt +++ b/deps_fdroid.txt @@ -28,14 +28,15 @@ +| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.7 +| | +--- androidx.annotation:annotation:1.8.1 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 -+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 ++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +| | | +--- org.jetbrains:annotations:23.0.0 -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 (c) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (c) -+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 (c) -+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 (c) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 (c) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (c) ++| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0 (c) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -62,10 +63,10 @@ +| | | \--- androidx.tracing:tracing-ktx:1.2.0 (c) +| | \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 (*) -+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -89,13 +90,13 @@ +| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.0 +| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.7 +| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.7 +| | +--- androidx.annotation:annotation:1.8.0 -> 1.8.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.8.7 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) @@ -150,7 +151,7 @@ +| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7 (c) +| | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.7 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 (c) @@ -205,8 +206,8 @@ +| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.7 +| +--- androidx.annotation:annotation:1.8.0 -> 1.8.1 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -258,8 +259,8 @@ +| | +--- org.jetbrains.kotlinx:atomicfu:0.17.0 -> 0.23.2 +| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.23.2 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:{prefer 1.9.21} -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.room:room-common:2.7.0-alpha12 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c) +| | \--- androidx.room:room-ktx:2.7.0-alpha12 (c) @@ -272,7 +273,9 @@ +| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (c) +| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 (c) +| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 (c) -+| | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 (c) ++| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.7.3 (c) ++| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 (c) ++| | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.7.3 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.1.0 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 +| | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 @@ -293,8 +296,8 @@ +| | | +--- androidx.annotation:annotation-experimental:1.4.1 (*) +| | | +--- androidx.collection:collection:1.4.4 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | +--- androidx.compose.runtime:runtime-livedata:1.7.6 (c) +| | | \--- androidx.compose.runtime:runtime-saveable:1.7.6 (c) +| | +--- androidx.compose.ui:ui:1.7.6 (c) @@ -321,7 +324,7 @@ +| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.24 -> 2.1.0 +| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) +| | | +--- org.jetbrains.kotlinx:atomicfu:0.23.2 (*) -+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | +--- org.jetbrains.compose.foundation:foundation:1.7.1 +| | | +--- androidx.compose.foundation:foundation:1.7.5 -> 1.7.6 +| | | | \--- androidx.compose.foundation:foundation-android:1.7.6 @@ -375,7 +378,7 @@ +| | | | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.1.0 (*) +| | | | | | | | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c) +| | | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -401,7 +404,7 @@ +| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.7 +| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.7 (*) +| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -519,7 +522,7 @@ +| | | | | | | | | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*) +| | | | | | | | | \--- androidx.emoji2:emoji2-views-helper:1.3.0 (c) +| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | | | | +--- androidx.compose.ui:ui:1.7.6 (c) +| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.7.6 (c) +| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c) @@ -558,8 +561,8 @@ +| | | | | | | +--- androidx.profileinstaller:profileinstaller:1.3.1 -> 1.4.0 (*) +| | | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | | | +--- androidx.compose.ui:ui-geometry:1.7.6 (c) +| | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c) +| | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c) @@ -572,7 +575,7 @@ +| | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (*) +| | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (*) +| | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | | \--- androidx.compose.animation:animation:1.7.6 (c) +| | | | | +--- androidx.compose.foundation:foundation-layout:1.7.6 +| | | | | | \--- androidx.compose.foundation:foundation-layout-android:1.7.6 @@ -616,14 +619,14 @@ +| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.6.11 -> 1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.8.4 +| | | | | | | +--- androidx.arch.core:core-common:2.2.0 (*) +| | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.4 (*) +| | | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.6.11 -> 1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.8.4 +| | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.4 (*) @@ -635,7 +638,7 @@ +| | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.6.11 -> 1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.7.1 (*) +| | | | | | +--- org.jetbrains.compose.collection-internal:collection:1.7.1 (*) +| | | | | | +--- org.jetbrains.compose.runtime:runtime:1.7.1 (*) @@ -670,14 +673,14 @@ +| | | | | | | +--- org.jetbrains.compose.ui:ui-unit:1.7.1 (*) +| | | | | | | +--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlinx:atomicfu:0.23.2 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.compose.ui:ui-unit:1.7.1 (*) +| | | | | | +--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) +| | | | | | +--- org.jetbrains.kotlinx:atomicfu:0.23.2 (*) -+| | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | +--- org.jetbrains.compose.ui:ui-unit:1.7.1 (*) +| | | | | +--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) -+| | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | +--- org.jetbrains.compose.collection-internal:collection:1.7.1 (*) +| | | | +--- org.jetbrains.compose.foundation:foundation-layout:1.7.1 +| | | | | +--- androidx.compose.foundation:foundation-layout:1.7.5 -> 1.7.6 (*) @@ -697,7 +700,7 @@ +| | | +--- org.jetbrains.compose.ui:ui:1.7.1 (*) +| | | +--- org.jetbrains.compose.ui:ui-text:1.7.1 (*) +| | | \--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) -+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| +--- org.jetbrains.compose.foundation:foundation:1.7.1 (*) +| +--- org.jetbrains.compose.material3:material3:1.7.1 +| | +--- androidx.compose.material3:material3:1.3.1 @@ -789,7 +792,7 @@ +| | | | +--- androidx.annotation:annotation:1.7.0 -> 1.8.1 (*) +| | | | +--- org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.22 -> 2.1.0 (*) +| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | +--- androidx.datastore:datastore:1.1.1 (c) +| | | | +--- androidx.datastore:datastore-core-okio:1.1.1 (c) +| | | | +--- androidx.datastore:datastore-preferences:1.1.1 (c) @@ -801,14 +804,14 @@ +| | | | | \--- com.squareup.okio:okio-jvm:3.9.0 +| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) +| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | +--- androidx.datastore:datastore:1.1.1 (c) +| | | | +--- androidx.datastore:datastore-core:1.1.1 (c) +| | | | +--- androidx.datastore:datastore-preferences:1.1.1 (c) +| | | | \--- androidx.datastore:datastore-preferences-core:1.1.1 (c) +| | | +--- com.squareup.okio:okio:3.4.0 -> 3.9.0 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | +--- androidx.datastore:datastore-core:1.1.1 (c) +| | | +--- androidx.datastore:datastore-core-okio:1.1.1 (c) +| | | +--- androidx.datastore:datastore-preferences:1.1.1 (c) @@ -824,7 +827,7 @@ +| | | +--- androidx.datastore:datastore-core-okio:1.1.1 (c) +| | | \--- androidx.datastore:datastore-preferences:1.1.1 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.datastore:datastore:1.1.1 (c) +| | +--- androidx.datastore:datastore-preferences-core:1.1.1 (c) +| | +--- androidx.datastore:datastore-core:1.1.1 (c) @@ -954,7 +957,7 @@ +| | | +--- com.damnhandy:handy-uri-templates:2.1.8 +| | | | \--- joda-time:joda-time:2.10.2 +| | | \--- com.google.re2j:re2j:1.6 -+| | +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.3 ++| | +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.16 +| | +--- commons-codec:commons-codec:1.15 -> 1.17.0 +| | +--- org.apache.commons:commons-lang3:3.12.0 +| | +--- org.apache.commons:commons-collections4:4.4 @@ -964,7 +967,7 @@ +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21 -> 2.1.0 (*) +| +--- commons-io:commons-io:2.6 +| +--- org.slf4j:slf4j-jdk14:2.0.3 -+| | \--- org.slf4j:slf4j-api:2.0.3 ++| | \--- org.slf4j:slf4j-api:2.0.3 -> 2.0.16 +| \--- androidx.core:core-ktx:1.9.0 -> 1.13.1 (*) ++--- com.github.bitfireAT:cert4android:7814052 +| +--- androidx.databinding:databinding-common:7.2.0 -> 8.7.3 @@ -989,7 +992,7 @@ +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (*) +| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -1099,7 +1102,7 @@ +| | +--- androidx.concurrent:concurrent-futures-ktx:1.1.0 +| | | +--- androidx.concurrent:concurrent-futures:1.1.0 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.71 -> 2.1.0 (*) -+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4 -> 1.8.1 (*) ++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4 -> 1.9.0 (*) +| | +--- androidx.core:core:1.12.0 -> 1.13.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.6.2 -> 2.8.7 (*) +| | +--- androidx.lifecycle:lifecycle-service:2.6.2 -> 2.8.7 (*) @@ -1107,7 +1110,7 @@ +| | | +--- androidx.room:room-common:2.7.0-alpha12 (*) +| | | +--- androidx.room:room-runtime:2.7.0-alpha12 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | | +--- androidx.room:room-common:2.7.0-alpha12 (c) +| | | +--- androidx.room:room-runtime:2.7.0-alpha12 (c) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c) @@ -1118,7 +1121,7 @@ +| | | \--- androidx.tracing:tracing:1.2.0 (c) +| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | +--- androidx.work:work-runtime-ktx:2.10.0 (c) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c) +| \--- com.google.dagger:hilt-android:2.49 -> 2.54 (*) @@ -1182,7 +1185,7 @@ +| | +--- androidx.core:core:1.1.0 -> 1.13.1 (*) +| | +--- androidx.window:window:1.0.0 +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.9.0 (*) +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.1 (*) +| | | +--- androidx.collection:collection:1.1.0 -> 1.4.4 (*) +| | | \--- androidx.core:core:1.3.2 -> 1.13.1 (*) @@ -1247,12 +1250,6 @@ +| +--- androidx.annotation:annotation:1.1.0 -> 1.8.1 (*) +| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava ++--- org.osmdroid:osmdroid-android:6.1.20 -++--- com.squareup.retrofit2:retrofit:2.9.0 -+| \--- com.squareup.okhttp3:okhttp:3.14.9 -> 4.12.0 (*) -++--- com.squareup.retrofit2:converter-moshi:2.9.0 -+| +--- com.squareup.retrofit2:retrofit:2.9.0 (*) -+| \--- com.squareup.moshi:moshi:1.8.0 -+| \--- com.squareup.okio:okio:1.16.0 -> 3.9.0 (*) ++--- androidx.recyclerview:recyclerview:1.3.2 (*) ++--- androidx.compose:compose-bom:2024.11.00 +| +--- androidx.compose.foundation:foundation:1.7.5 -> 1.7.6 (c) @@ -1343,7 +1340,7 @@ +| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.1 (*) +| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0 +| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.7.6 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.9.0 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 2.1.0 (*) +| | +--- io.coil-kt:coil-base:2.7.0 +| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.1 (*) @@ -1354,7 +1351,7 @@ +| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.1 (*) +| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 -> 1.4.0 (*) +| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.8.7 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -> 1.9.0 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*) +| | | \--- com.squareup.okio:okio:3.9.0 (*) @@ -1378,8 +1375,106 @@ +| +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 (*) +| +--- io.coil-kt:coil-base:2.7.0 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +++--- io.ktor:ktor-client-android:3.0.3 ++| \--- io.ktor:ktor-client-android-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- io.ktor:ktor-client-core:3.0.3 ++| | \--- io.ktor:ktor-client-core-jvm:3.0.3 ++| | +--- org.slf4j:slf4j-api:2.0.16 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- io.ktor:ktor-http:3.0.3 ++| | | \--- io.ktor:ktor-http-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-utils:3.0.3 ++| | | | \--- io.ktor:ktor-utils-jvm:3.0.3 ++| | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | +--- io.ktor:ktor-io:3.0.3 ++| | | | | \--- io.ktor:ktor-io-jvm:3.0.3 ++| | | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-io-core:0.5.4 ++| | | | | | \--- org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.5.4 ++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-io-bytestring:0.5.4 ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.5.4 ++| | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) ++| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) ++| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- io.ktor:ktor-events:3.0.3 ++| | | \--- io.ktor:ktor-events-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | +--- io.ktor:ktor-utils:3.0.3 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- io.ktor:ktor-websocket-serialization:3.0.3 ++| | | \--- io.ktor:ktor-websocket-serialization-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | +--- io.ktor:ktor-serialization:3.0.3 ++| | | | \--- io.ktor:ktor-serialization-jvm:3.0.3 ++| | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | | +--- io.ktor:ktor-websockets:3.0.3 ++| | | | | \--- io.ktor:ktor-websockets-jvm:3.0.3 ++| | | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- io.ktor:ktor-sse:3.0.3 ++| | | \--- io.ktor:ktor-sse-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0 ++| | +--- org.slf4j:slf4j-api:1.7.32 -> 2.0.16 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +++--- io.ktor:ktor-client-content-negotiation:3.0.3 ++| \--- io.ktor:ktor-client-content-negotiation-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| +--- io.ktor:ktor-client-core:3.0.3 (*) ++| +--- io.ktor:ktor-serialization:3.0.3 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +++--- io.ktor:ktor-serialization-kotlinx-json:3.0.3 ++| \--- io.ktor:ktor-serialization-kotlinx-json-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| +--- io.ktor:ktor-http:3.0.3 (*) ++| +--- io.ktor:ktor-serialization-kotlinx:3.0.3 ++| | \--- io.ktor:ktor-serialization-kotlinx-jvm:3.0.3 ++| | +--- org.slf4j:slf4j-api:2.0.16 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- io.ktor:ktor-http:3.0.3 (*) ++| | +--- io.ktor:ktor-serialization:3.0.3 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.7.3 ++| | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.7.3 ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 (*) ++| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.1.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-io-core:0.4.0 -> 0.5.4 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +\--- com.google.accompanist:accompanist-permissions:0.37.0 + +--- androidx.activity:activity-compose:1.9.0 -> 1.9.3 (*) + +--- androidx.compose.foundation:foundation:1.7.0 -> 1.7.6 (*) -+ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.1 (*) ++ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.9.0 (*) + \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.1.0 (*) diff --git a/deps_googleplay.txt b/deps_googleplay.txt index f8e57ec21..1b645784c 100644 --- a/deps_googleplay.txt +++ b/deps_googleplay.txt @@ -28,15 +28,16 @@ +| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.7 +| | +--- androidx.annotation:annotation:1.8.1 -> 1.9.0 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 -+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 ++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +| | | +--- org.jetbrains:annotations:23.0.0 -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 (c) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 (c) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (c) -+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 (c) -+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 (c) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 (c) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (c) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.0 (c) ++| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0 (c) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -63,10 +64,10 @@ +| | | \--- androidx.tracing:tracing-ktx:1.2.0 (c) +| | \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 (*) -+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -90,13 +91,13 @@ +| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.0 +| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.7 +| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.7 +| | +--- androidx.annotation:annotation:1.8.0 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.8.7 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -151,7 +152,7 @@ +| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7 (c) +| | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.7 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 (c) @@ -206,8 +207,8 @@ +| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.7 +| +--- androidx.annotation:annotation:1.8.0 -> 1.9.0 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -234,9 +235,9 @@ ++--- com.google.firebase:firebase-crashlytics -> 19.3.0 +| +--- com.google.firebase:firebase-sessions:2.0.7 +| | +--- com.google.firebase:firebase-common:21.0.0 -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4 -> 1.8.1 -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4 -> 1.9.0 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 (*) +| | | | +--- com.google.android.gms:play-services-tasks:16.0.1 -> 18.2.0 +| | | | | \--- com.google.android.gms:play-services-basement:18.4.0 +| | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.4 (*) @@ -277,7 +278,7 @@ +| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.1.0 (*) +| | | | | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -322,7 +323,7 @@ +| | | | | | \--- androidx.collection:collection:1.1.0 -> 1.4.4 (*) +| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) +| | | | | \--- androidx.fragment:fragment-ktx:1.8.5 (c) -+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) ++| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| | | +--- com.google.firebase:firebase-components:18.0.0 +| | | | +--- com.google.firebase:firebase-annotations:16.2.0 +| | | | | \--- javax.inject:javax.inject:1 @@ -390,7 +391,7 @@ +| | | | | | \--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.1.0 +| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) +| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | +--- androidx.datastore:datastore:1.1.1 (c) +| | | | | +--- androidx.datastore:datastore-core-okio:1.1.1 (c) +| | | | | +--- androidx.datastore:datastore-preferences:1.1.1 (c) @@ -402,14 +403,14 @@ +| | | | | | \--- com.squareup.okio:okio-jvm:3.9.0 +| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.0 (*) +| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | +--- androidx.datastore:datastore:1.1.1 (c) +| | | | | +--- androidx.datastore:datastore-core:1.1.1 (c) +| | | | | +--- androidx.datastore:datastore-preferences:1.1.1 (c) +| | | | | \--- androidx.datastore:datastore-preferences-core:1.1.1 (c) +| | | | +--- com.squareup.okio:okio:3.4.0 -> 3.9.0 (*) +| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | +--- androidx.datastore:datastore-core:1.1.1 (c) +| | | | +--- androidx.datastore:datastore-core-okio:1.1.1 (c) +| | | | +--- androidx.datastore:datastore-preferences:1.1.1 (c) @@ -425,7 +426,7 @@ +| | | | +--- androidx.datastore:datastore-core-okio:1.1.1 (c) +| | | | \--- androidx.datastore:datastore-preferences:1.1.1 (c) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | +--- androidx.datastore:datastore:1.1.1 (c) +| | | +--- androidx.datastore:datastore-preferences-core:1.1.1 (c) +| | | +--- androidx.datastore:datastore-core:1.1.1 (c) @@ -475,7 +476,7 @@ +| | | | +--- androidx.annotation:annotation:1.6.0 -> 1.9.0 (*) +| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.13.1 (*) +| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 2.1.0 (*) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.1 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.9.0 (*) +| | | | \--- androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 (c) +| | | +--- androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +| | | | +--- androidx.annotation:annotation:1.2.0 -> 1.9.0 (*) @@ -487,7 +488,7 @@ +| | | | | \--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava +| | | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 2.1.0 (*) -+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.1 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.9.0 (*) +| | | | \--- androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 (c) +| | | +--- com.google.android.gms:play-services-base:18.5.0 +| | | | +--- androidx.collection:collection:1.0.0 -> 1.4.4 (*) @@ -551,8 +552,8 @@ +| +--- com.google.android.gms:play-services-basement:18.4.0 (*) +| +--- com.google.android.gms:play-services-tasks:18.2.0 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.0 -> 2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) ++--- com.google.android.gms:play-services-maps:19.0.0 +| +--- androidx.fragment:fragment:1.0.0 -> 1.8.5 (*) +| +--- com.google.android.gms:play-services-base:18.5.0 (*) @@ -569,7 +570,7 @@ +| | +--- com.google.android.gms:play-services-location:19.0.0 -> 21.3.0 (*) +| | \--- com.google.android.gms:play-services-tasks:18.1.0 -> 18.2.0 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.0 -> 2.1.0 (*) -+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0 -> 1.8.1 (*) ++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0 -> 1.9.0 (*) ++--- com.google.android.play:review-ktx:2.0.2 +| +--- androidx.core:core:1.1.0 -> 1.13.1 (*) +| +--- androidx.fragment:fragment:1.1.0 -> 1.8.5 (*) @@ -580,8 +581,8 @@ +| | +--- com.google.android.gms:play-services-tasks:18.2.0 (*) +| | \--- com.google.android.play:core-common:2.0.4 +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 -> 2.1.0 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.8.1 (*) -+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.9.0 (*) ++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.9.0 (*) ++--- com.google.android.gms:play-services-oss-licenses:17.1.0 +| +--- androidx.appcompat:appcompat:1.0.0 -> 1.7.0 +| | +--- androidx.activity:activity:1.7.0 -> 1.9.3 (*) @@ -634,15 +635,15 @@ +| +--- com.google.android.gms:play-services-basement:18.4.0 (*) +| \--- com.google.android.gms:play-services-tasks:18.2.0 (*) ++--- com.google.android.horologist:horologist-datalayer-phone:0.6.22 -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.9.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.7 (*) +| +--- androidx.wear:wear-remote-interactions:1.1.0-rc01 +| | +--- androidx.annotation:annotation:1.8.1 -> 1.9.0 (*) +| | +--- androidx.concurrent:concurrent-futures-ktx:1.1.0 +| | | +--- androidx.concurrent:concurrent-futures:1.1.0 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.71 -> 2.1.0 (*) -+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4 -> 1.8.1 (*) ++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4 -> 1.9.0 (*) +| | +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.4.0 (*) +| | +--- com.google.android.gms:play-services-wearable:17.1.0 -> 19.0.0 +| | | +--- androidx.core:core:1.0.0 -> 1.13.1 (*) @@ -651,7 +652,7 @@ +| | | \--- com.google.android.gms:play-services-tasks:18.2.0 (*) +| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| +--- com.google.android.horologist:horologist-annotations:0.6.22 +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) +| +--- com.google.android.horologist:horologist-datalayer:0.6.22 @@ -694,8 +695,8 @@ +| | | +--- androidx.compose.animation:animation-android:1.7.5 -> 1.7.6 (c) +| | | +--- androidx.compose.foundation:foundation-layout-android:1.7.5 -> 1.7.6 (c) +| | | \--- androidx.compose.animation:animation-core-android:1.7.5 -> 1.7.6 (c) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.7 (*) +| | +--- androidx.lifecycle:lifecycle-service:2.8.7 (*) +| | +--- com.google.android.horologist:horologist-annotations:0.6.22 (*) @@ -710,9 +711,9 @@ +| +--- com.google.android.gms:play-services-wearable:19.0.0 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) ++--- com.google.android.horologist:horologist-datalayer-grpc:0.6.22 -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-service:2.8.7 (*) -+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1 -> 1.9.0 (*) +| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.7 (*) +| +--- androidx.wear:wear-remote-interactions:1.1.0-rc01 (*) +| +--- com.google.android.horologist:horologist-annotations:0.6.22 (*) @@ -724,7 +725,7 @@ +| | \--- com.google.guava:guava:33.3.1-android (*) +| +--- io.grpc:grpc-kotlin-stub:1.4.1 +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 -> 1.9.0 (*) +| | +--- io.grpc:grpc-stub:1.57.2 +| | | +--- io.grpc:grpc-api:1.57.2 -> 1.69.0 (*) +| | | \--- com.google.guava:guava:32.0.1-android -> 33.3.1-android (*) @@ -792,8 +793,8 @@ +| | +--- org.jetbrains.kotlinx:atomicfu:0.17.0 -> 0.23.2 +| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.23.2 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:{prefer 1.9.21} -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.room:room-common:2.7.0-alpha12 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c) +| | \--- androidx.room:room-ktx:2.7.0-alpha12 (c) @@ -806,7 +807,9 @@ +| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (c) +| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 (c) +| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 (c) -+| | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 (c) ++| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.7.3 (c) ++| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 (c) ++| | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.7.3 (c) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.1.0 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 +| | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 @@ -827,8 +830,8 @@ +| | | +--- androidx.annotation:annotation-experimental:1.4.1 (*) +| | | +--- androidx.collection:collection:1.4.4 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | +--- androidx.compose.runtime:runtime-livedata:1.7.6 (c) +| | | \--- androidx.compose.runtime:runtime-saveable:1.7.6 (c) +| | +--- androidx.compose.ui:ui:1.7.6 (c) @@ -855,7 +858,7 @@ +| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.24 -> 2.1.0 +| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*) +| | | +--- org.jetbrains.kotlinx:atomicfu:0.23.2 (*) -+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | +--- org.jetbrains.compose.foundation:foundation:1.7.1 +| | | +--- androidx.compose.foundation:foundation:1.7.5 -> 1.7.6 +| | | | \--- androidx.compose.foundation:foundation-android:1.7.6 @@ -881,7 +884,7 @@ +| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.7 +| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.7 (*) +| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -993,7 +996,7 @@ +| | | | | | | | +--- androidx.core:core:1.7.0 -> 1.13.1 (*) +| | | | | | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*) +| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | | | | +--- androidx.compose.ui:ui:1.7.6 (c) +| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.7.6 (c) +| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c) @@ -1032,8 +1035,8 @@ +| | | | | | | +--- androidx.profileinstaller:profileinstaller:1.3.1 -> 1.4.0 (*) +| | | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) -+| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) ++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | | | +--- androidx.compose.ui:ui-geometry:1.7.6 (c) +| | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c) +| | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c) @@ -1046,7 +1049,7 @@ +| | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (*) +| | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (*) +| | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | | | | | \--- androidx.compose.animation:animation:1.7.6 (c) +| | | | | +--- androidx.compose.foundation:foundation-layout:1.7.6 +| | | | | | \--- androidx.compose.foundation:foundation-layout-android:1.7.6 @@ -1090,14 +1093,14 @@ +| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.6.11 -> 1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.8.4 +| | | | | | | +--- androidx.arch.core:core-common:2.2.0 (*) +| | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.4 (*) +| | | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.6.11 -> 1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.8.4 +| | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.4 (*) @@ -1109,7 +1112,7 @@ +| | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.5 -> 2.8.7 (*) +| | | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.6.11 -> 1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.0 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.7.1 (*) +| | | | | | +--- org.jetbrains.compose.collection-internal:collection:1.7.1 (*) +| | | | | | +--- org.jetbrains.compose.runtime:runtime:1.7.1 (*) @@ -1144,14 +1147,14 @@ +| | | | | | | +--- org.jetbrains.compose.ui:ui-unit:1.7.1 (*) +| | | | | | | +--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) +| | | | | | | +--- org.jetbrains.kotlinx:atomicfu:0.23.2 (*) -+| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | | +--- org.jetbrains.compose.ui:ui-unit:1.7.1 (*) +| | | | | | +--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) +| | | | | | +--- org.jetbrains.kotlinx:atomicfu:0.23.2 (*) -+| | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | | +--- org.jetbrains.compose.ui:ui-unit:1.7.1 (*) +| | | | | +--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) -+| | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| | | | +--- org.jetbrains.compose.collection-internal:collection:1.7.1 (*) +| | | | +--- org.jetbrains.compose.foundation:foundation-layout:1.7.1 +| | | | | +--- androidx.compose.foundation:foundation-layout:1.7.5 -> 1.7.6 (*) @@ -1171,7 +1174,7 @@ +| | | +--- org.jetbrains.compose.ui:ui:1.7.1 (*) +| | | +--- org.jetbrains.compose.ui:ui-text:1.7.1 (*) +| | | \--- org.jetbrains.compose.ui:ui-util:1.7.1 (*) -+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.8.1 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.9.0 (*) +| +--- org.jetbrains.compose.foundation:foundation:1.7.1 (*) +| +--- org.jetbrains.compose.material3:material3:1.7.1 +| | +--- androidx.compose.material3:material3:1.3.1 @@ -1315,7 +1318,7 @@ +| | | +--- com.damnhandy:handy-uri-templates:2.1.8 +| | | | \--- joda-time:joda-time:2.10.2 +| | | \--- com.google.re2j:re2j:1.6 -+| | +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.3 ++| | +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.16 +| | +--- commons-codec:commons-codec:1.15 -> 1.17.0 +| | +--- org.apache.commons:commons-lang3:3.12.0 +| | +--- org.apache.commons:commons-collections4:4.4 @@ -1325,7 +1328,7 @@ +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21 -> 2.1.0 (*) +| +--- commons-io:commons-io:2.6 +| +--- org.slf4j:slf4j-jdk14:2.0.3 -+| | \--- org.slf4j:slf4j-api:2.0.3 ++| | \--- org.slf4j:slf4j-api:2.0.3 -> 2.0.16 +| \--- androidx.core:core-ktx:1.9.0 -> 1.13.1 (*) ++--- com.github.bitfireAT:cert4android:7814052 +| +--- androidx.databinding:databinding-common:7.2.0 -> 8.7.3 @@ -1350,7 +1353,7 @@ +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (*) +| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.9.0 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c) +| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c) @@ -1456,7 +1459,7 @@ +| | | +--- androidx.room:room-common:2.7.0-alpha12 (*) +| | | +--- androidx.room:room-runtime:2.7.0-alpha12 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | | +--- androidx.room:room-common:2.7.0-alpha12 (c) +| | | +--- androidx.room:room-runtime:2.7.0-alpha12 (c) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c) @@ -1467,7 +1470,7 @@ +| | | \--- androidx.tracing:tracing:1.2.0 (c) +| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.0 (*) -+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.1 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.9.0 (*) +| | +--- androidx.work:work-runtime-ktx:2.10.0 (c) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c) +| \--- com.google.dagger:hilt-android:2.49 -> 2.54 (*) @@ -1531,7 +1534,7 @@ +| | +--- androidx.core:core:1.1.0 -> 1.13.1 (*) +| | +--- androidx.window:window:1.0.0 +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.1.0 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.9.0 (*) +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.9.0 (*) +| | | +--- androidx.collection:collection:1.1.0 -> 1.4.4 (*) +| | | \--- androidx.core:core:1.3.2 -> 1.13.1 (*) @@ -1593,12 +1596,6 @@ +| +--- androidx.annotation:annotation:1.1.0 -> 1.9.0 (*) +| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava ++--- org.osmdroid:osmdroid-android:6.1.20 -++--- com.squareup.retrofit2:retrofit:2.9.0 -+| \--- com.squareup.okhttp3:okhttp:3.14.9 -> 4.12.0 (*) -++--- com.squareup.retrofit2:converter-moshi:2.9.0 -+| +--- com.squareup.retrofit2:retrofit:2.9.0 (*) -+| \--- com.squareup.moshi:moshi:1.8.0 -+| \--- com.squareup.okio:okio:1.16.0 -> 3.9.0 (*) ++--- androidx.recyclerview:recyclerview:1.3.2 (*) ++--- androidx.compose:compose-bom:2024.11.00 (*) ++--- androidx.compose.ui:ui -> 1.7.6 (*) @@ -1651,7 +1648,7 @@ +| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.1 (*) +| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0 +| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.7.6 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.9.0 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 2.1.0 (*) +| | +--- io.coil-kt:coil-base:2.7.0 +| | | +--- androidx.annotation:annotation:1.7.1 -> 1.9.0 (*) @@ -1662,7 +1659,7 @@ +| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.9.0 (*) +| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 -> 1.4.0 (*) +| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.8.7 (*) -+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -> 1.9.0 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*) +| | | \--- com.squareup.okio:okio:3.9.0 (*) @@ -1686,8 +1683,106 @@ +| +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 (*) +| +--- io.coil-kt:coil-base:2.7.0 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +++--- io.ktor:ktor-client-android:3.0.3 ++| \--- io.ktor:ktor-client-android-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- io.ktor:ktor-client-core:3.0.3 ++| | \--- io.ktor:ktor-client-core-jvm:3.0.3 ++| | +--- org.slf4j:slf4j-api:2.0.16 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- io.ktor:ktor-http:3.0.3 ++| | | \--- io.ktor:ktor-http-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-utils:3.0.3 ++| | | | \--- io.ktor:ktor-utils-jvm:3.0.3 ++| | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | +--- io.ktor:ktor-io:3.0.3 ++| | | | | \--- io.ktor:ktor-io-jvm:3.0.3 ++| | | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-io-core:0.5.4 ++| | | | | | \--- org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.5.4 ++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-io-bytestring:0.5.4 ++| | | | | | | \--- org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.5.4 ++| | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) ++| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) ++| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- io.ktor:ktor-events:3.0.3 ++| | | \--- io.ktor:ktor-events-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | +--- io.ktor:ktor-utils:3.0.3 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- io.ktor:ktor-websocket-serialization:3.0.3 ++| | | \--- io.ktor:ktor-websocket-serialization-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | +--- io.ktor:ktor-serialization:3.0.3 ++| | | | \--- io.ktor:ktor-serialization-jvm:3.0.3 ++| | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | | +--- io.ktor:ktor-websockets:3.0.3 ++| | | | | \--- io.ktor:ktor-websockets-jvm:3.0.3 ++| | | | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- io.ktor:ktor-sse:3.0.3 ++| | | \--- io.ktor:ktor-sse-jvm:3.0.3 ++| | | +--- org.slf4j:slf4j-api:2.0.16 ++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | | +--- io.ktor:ktor-http:3.0.3 (*) ++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0 ++| | +--- org.slf4j:slf4j-api:1.7.32 -> 2.0.16 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +++--- io.ktor:ktor-client-content-negotiation:3.0.3 ++| \--- io.ktor:ktor-client-content-negotiation-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| +--- io.ktor:ktor-client-core:3.0.3 (*) ++| +--- io.ktor:ktor-serialization:3.0.3 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +++--- io.ktor:ktor-serialization-kotlinx-json:3.0.3 ++| \--- io.ktor:ktor-serialization-kotlinx-json-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| +--- io.ktor:ktor-http:3.0.3 (*) ++| +--- io.ktor:ktor-serialization-kotlinx:3.0.3 ++| | \--- io.ktor:ktor-serialization-kotlinx-jvm:3.0.3 ++| | +--- org.slf4j:slf4j-api:2.0.16 ++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| | +--- io.ktor:ktor-http:3.0.3 (*) ++| | +--- io.ktor:ktor-serialization:3.0.3 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.7.3 ++| | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.7.3 ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 (*) ++| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.1.0 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) ++| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 (*) ++| | \--- org.jetbrains.kotlinx:kotlinx-io-core:0.4.0 -> 0.5.4 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +\--- com.google.accompanist:accompanist-permissions:0.37.0 + +--- androidx.activity:activity-compose:1.9.0 -> 1.9.3 (*) + +--- androidx.compose.foundation:foundation:1.7.0 -> 1.7.6 (*) -+ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.1 (*) ++ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.9.0 (*) + \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.1.0 (*) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 19f1fd5f8..eb02d12f4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,6 +37,7 @@ junit-junit = "4.13.2" junit = "1.2.1" kotlin = "2.1.0" kotlinx-coroutines = "1.10.1" +ktor = "3.0.3" leakcanary = "2.14" lib-recur = "0.11.4" lifecycle = "2.8.7" @@ -56,7 +57,6 @@ play-services-oss-licenses = "17.1.0" preference = "1.2.1" protobuf = "4.29.2" recyclerview = "1.3.2" -retrofit = "2.9.0" rfc5545-datetime = "0.2.4" room = "2.7.0-alpha12" shortcut-badger = "1.1.22" @@ -147,6 +147,9 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version = "0.6.1" } kotlinx-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.3.8" } kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.7.3" } +ktor = { module = "io.ktor:ktor-client-android", version.ref = "ktor" } +ktor-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } +ktor-serialization = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } leakcanary = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" } locale = { module = "com.twofortyfouram:android-plugin-api-for-locale", version.ref = "locale" } make-it-easy = { module = "com.natpryce:make-it-easy", version.ref = "make-it-easy" } @@ -169,8 +172,6 @@ play-review = { module = "com.google.android.play:review-ktx", version = "2.0.2" play-services-maps = { module = "com.google.android.gms:play-services-maps", version.ref = "play-services-maps" } play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "play-services-location" } play-services-oss-licenses = { module = "com.google.android.gms:play-services-oss-licenses", version.ref = "play-services-oss-licenses" } -retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } -retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "retrofit" } shortcut-badger = { module = "me.leolin:ShortcutBadger", version.ref = "shortcut-badger" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } xpp3 = { module = "org.ogce:xpp3", version.ref = "xpp3" }