Replace retrofit with ktor

pull/3212/head
Alex Baker 11 months ago
parent ec75c8c24c
commit 0ba7753437

@ -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))

@ -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!!)

@ -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<String, Cookie>()
override suspend fun get(requestUrl: Url): List<Cookie> =
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")
}
}
}
}

@ -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
)
}
}

@ -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<Config, HttpErrorHandler> {
override val key = AttributeKey<HttpErrorHandler>("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
}
}
}
}

@ -1,5 +0,0 @@
package org.tasks.http
import java.io.IOException
class HttpException(code: Int, message: String) : IOException("$code $message")

@ -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 <T> Response<T>.toMicrosoftError()
= errorBody()?.string()?.let { Json.decodeFromString<Error>(it) }
suspend fun HttpResponse.toMicrosoftError() = body<Error>()
}
}

@ -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 <T> requestFailed(result: Response<T>) {
private fun requestFailed(exception: Exception) {
Timber.e(exception)
_viewState.update {
it.copy(
requestInFlight = false,
error = HttpException(result),
error = exception,
)
}
}
}
}

@ -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<TaskLists>
@GET
suspend fun paginateLists(@Url nextPage: String): Response<TaskLists>
@POST("/v1.0/me/todo/lists")
suspend fun createList(@Body body: RequestBody): Response<TaskLists.TaskList>
@PATCH("/v1.0/me/todo/lists/{listId}")
suspend fun updateList(
@Path("listId") listId: String,
@Body body: RequestBody
): Response<TaskLists.TaskList>
@DELETE("/v1.0/me/todo/lists/{listId}")
suspend fun deleteList(@Path("listId") listId: String): Response<ResponseBody>
@GET("/v1.0/me/todo/lists/{listId}/tasks/delta")
suspend fun getTasks(@Path("listId") listId: String): Response<Tasks>
@GET
suspend fun paginateTasks(@Url nextPage: String): Response<Tasks>
@POST("/v1.0/me/todo/lists/{listId}/tasks")
suspend fun createTask(
@Path("listId") listId: String,
@Body body: RequestBody
): Response<Tasks.Task>
@PATCH("/v1.0/me/todo/lists/{listId}/tasks/{taskId}")
suspend fun updateTask(
@Path("listId") listId: String,
@Path("taskId") taskId: String,
@Body body: RequestBody
): Response<Tasks.Task>
@DELETE("/v1.0/me/todo/lists/{listId}/tasks/{taskId}")
suspend fun deleteTask(
@Path("listId") listId: String,
@Path("taskId") taskId: String
): Response<ResponseBody>
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")
}

@ -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<TaskList>,
@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(
}
}
}
}
}

@ -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<Task>,
@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<LinkedResource>? = 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,

@ -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<Tasks>(readFile(path)).value.first()
fun readFile(path: String): String {
val uri = javaClass.classLoader?.getResource(path)?.toURI()

@ -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 (*)

@ -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 (*)

@ -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" }

Loading…
Cancel
Save