Clean up ComposeViews in fragments

pull/3283/head
Alex Baker 11 months ago
parent ae40b31945
commit 44ed6ea444

@ -179,7 +179,7 @@ dependencies {
implementation(libs.androidx.hilt.work)
implementation(libs.androidx.datastore)
implementation(libs.androidx.fragment.ktx)
implementation(libs.androidx.fragment.compose)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewmodel)
@ -238,7 +238,6 @@ dependencies {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.material.icons.extended)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation("androidx.compose.ui:ui-viewbinding")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation(libs.coil.compose)
implementation(libs.coil.video)

@ -13,12 +13,12 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.PointerEventPass
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidViewBinding
import androidx.core.os.BundleCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.fragment.compose.AndroidFragment
import androidx.fragment.compose.content
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreoMR1
@ -49,15 +49,6 @@ import org.tasks.data.dao.UserActivityDao
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.TagData
import org.tasks.data.entity.Task
import org.tasks.databinding.TaskEditCalendarBinding
import org.tasks.databinding.TaskEditFilesBinding
import org.tasks.databinding.TaskEditLocationBinding
import org.tasks.databinding.TaskEditRemindersBinding
import org.tasks.databinding.TaskEditRepeatBinding
import org.tasks.databinding.TaskEditStartDateBinding
import org.tasks.databinding.TaskEditSubtasksBinding
import org.tasks.databinding.TaskEditTagsBinding
import org.tasks.databinding.TaskEditTimerBinding
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DialogBuilder
@ -116,115 +107,109 @@ class TaskEditFragment : Fragment() {
get() = BundleCompat.getParcelable(requireArguments(), EXTRA_TASK, Task::class.java)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
if (atLeastOreoMR1()) {
activity?.setShowWhenLocked(preferences.showEditScreenWithoutUnlock)
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
LaunchedEffect(Unit) {
if (atLeastOreoMR1()) {
activity?.setShowWhenLocked(preferences.showEditScreenWithoutUnlock)
}
}
val view = ComposeView(requireActivity()).apply {
setContent {
TasksTheme(theme = theme.themeBase.index,) {
val viewState = editViewModel.viewState.collectAsStateWithLifecycle().value
BackHandler {
if (viewState.backButtonSavesTask) {
lifecycleScope.launch {
save()
}
} else {
discardButtonClick()
}
TasksTheme(theme = theme.themeBase.index,) {
val viewState = editViewModel.viewState.collectAsStateWithLifecycle().value
BackHandler {
if (viewState.backButtonSavesTask) {
lifecycleScope.launch {
save()
}
LaunchedEffect(viewState.isNew) {
if (!viewState.isNew) {
notificationManager.cancel(viewState.task.id)
}
} else {
discardButtonClick()
}
}
LaunchedEffect(viewState.isNew) {
if (!viewState.isNew) {
notificationManager.cancel(viewState.task.id)
}
}
TaskEditScreen(
viewState = viewState,
comments = userActivityDao
.watchComments(viewState.task.uuid)
.collectAsStateWithLifecycle(emptyList())
.value,
save = { lifecycleScope.launch { save() } },
discard = { discardButtonClick() },
onBackPressed = { activity?.onBackPressed() },
delete = { deleteButtonClick() },
openBeastModeSettings = {
editViewModel.hideBeastModeHint(click = true)
beastMode.launch(Intent(context, BeastModePreferences::class.java))
},
dismissBeastMode = { editViewModel.hideBeastModeHint(click = false) },
deleteComment = {
lifecycleScope.launch {
userActivityDao.delete(it)
}
TaskEditScreen(
viewState = viewState,
comments = userActivityDao
.watchComments(viewState.task.uuid)
.collectAsStateWithLifecycle(emptyList())
.value,
save = { lifecycleScope.launch { save() } },
discard = { discardButtonClick() },
onBackPressed = { activity?.onBackPressed() },
delete = { deleteButtonClick() },
openBeastModeSettings = {
editViewModel.hideBeastModeHint(click = true)
beastMode.launch(Intent(context, BeastModePreferences::class.java))
},
dismissBeastMode = { editViewModel.hideBeastModeHint(click = false) },
deleteComment = {
lifecycleScope.launch {
userActivityDao.delete(it)
}
},
) { tag ->
// TODO: remove ui-viewbinding library when these are all migrated
when (tag) {
TAG_TITLE ->
TitleRow(
viewState = viewState,
requestFocus = viewState.showKeyboard,
)
},
) { tag ->
val context = LocalContext.current
when (tag) {
TAG_TITLE ->
TitleRow(
viewState = viewState,
requestFocus = viewState.showKeyboard,
)
TAG_DUE_DATE -> DueDateRow()
TAG_PRIORITY ->
PriorityRow(
priority = viewState.task.priority,
onChangePriority = { editViewModel.setPriority(it) },
)
TAG_DUE_DATE -> DueDateRow()
TAG_PRIORITY ->
PriorityRow(
priority = viewState.task.priority,
onChangePriority = { editViewModel.setPriority(it) },
)
TAG_DESCRIPTION ->
DescriptionRow(
text = viewState.task.notes,
onChanged = { text -> editViewModel.setDescription(text.toString().trim { it <= ' ' }) },
linkify = if (viewState.linkify) linkify else null,
markdownProvider = markdownProvider,
)
TAG_DESCRIPTION ->
DescriptionRow(
text = viewState.task.notes,
onChanged = { text -> editViewModel.setDescription(text.toString().trim { it <= ' ' }) },
linkify = if (viewState.linkify) linkify else null,
markdownProvider = markdownProvider,
)
TAG_LIST ->
ListRow(
list = viewState.list,
colorProvider = { chipProvider.getColor(it) },
onClick = {
listPickerLauncher.launch(
context = context,
selectedFilter = viewState.list,
listsOnly = true
)
}
TAG_LIST ->
ListRow(
list = viewState.list,
colorProvider = { chipProvider.getColor(it) },
onClick = {
listPickerLauncher.launch(
context = context,
selectedFilter = viewState.list,
listsOnly = true
)
}
)
TAG_CREATION ->
InfoRow(
creationDate = viewState.task.creationDate,
modificationDate = viewState.task.modificationDate,
completionDate = viewState.task.completionDate,
locale = locale,
)
CalendarControlSet.TAG -> AndroidViewBinding(TaskEditCalendarBinding::inflate)
StartDateControlSet.TAG -> AndroidViewBinding(
TaskEditStartDateBinding::inflate
)
ReminderControlSet.TAG -> AndroidViewBinding(
TaskEditRemindersBinding::inflate
)
TAG_CREATION ->
InfoRow(
creationDate = viewState.task.creationDate,
modificationDate = viewState.task.modificationDate,
completionDate = viewState.task.completionDate,
locale = locale,
)
LocationControlSet.TAG -> AndroidViewBinding(TaskEditLocationBinding::inflate)
FilesControlSet.TAG -> AndroidViewBinding(TaskEditFilesBinding::inflate)
TimerControlSet.TAG -> AndroidViewBinding(TaskEditTimerBinding::inflate)
TagsControlSet.TAG -> AndroidViewBinding(TaskEditTagsBinding::inflate)
RepeatControlSet.TAG -> AndroidViewBinding(TaskEditRepeatBinding::inflate)
SubtaskControlSet.TAG -> AndroidViewBinding(TaskEditSubtasksBinding::inflate)
else -> throw IllegalArgumentException("Unknown row: $tag")
}
}
CalendarControlSet.TAG -> AndroidFragment<CalendarControlSet>()
StartDateControlSet.TAG -> AndroidFragment<StartDateControlSet>()
ReminderControlSet.TAG -> AndroidFragment<ReminderControlSet>()
LocationControlSet.TAG -> AndroidFragment<LocationControlSet>()
FilesControlSet.TAG -> AndroidFragment<FilesControlSet>()
TimerControlSet.TAG -> AndroidFragment<TimerControlSet>()
TagsControlSet.TAG -> AndroidFragment<TagsControlSet>()
RepeatControlSet.TAG -> AndroidFragment<RepeatControlSet>()
SubtaskControlSet.TAG -> AndroidFragment<SubtaskControlSet>()
else -> throw IllegalArgumentException("Unknown row: $tag")
}
}
}
return view
}
override fun onDestroyView() {

@ -31,6 +31,7 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.expandVertically
import androidx.compose.animation.shrinkVertically
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.app.ShareCompat
import androidx.core.content.IntentCompat
@ -360,6 +361,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
mainViewModel.openDrawer()
}
setupMenu(toolbar)
binding.banner.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
binding.banner.setContent {
val context = LocalContext.current
val state = listViewModel.state.collectAsStateWithLifecycle().value

@ -22,14 +22,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.viewinterop.AndroidViewBinding
import androidx.fragment.compose.AndroidFragment
import com.todoroo.astrid.activity.TaskEditFragment.Companion.gesturesDisabled
import org.tasks.R
import org.tasks.compose.BeastModeBanner
import org.tasks.data.entity.UserActivity
import org.tasks.databinding.TaskEditCommentBarBinding
import org.tasks.extensions.Context.findActivity
import org.tasks.files.FileHelper
import org.tasks.fragments.CommentBarFragment
import org.tasks.themes.TasksTheme
import org.tasks.ui.TaskEditViewModel
import org.tasks.utility.copyToClipboard
@ -94,7 +94,7 @@ fun TaskEditScreen(
},
bottomBar = {
if (viewState.showComments && !viewState.isReadOnly) {
AndroidViewBinding(TaskEditCommentBarBinding::inflate)
AndroidFragment<CommentBarFragment>()
}
},
) { paddingValues ->

@ -7,6 +7,7 @@ import android.widget.ListAdapter
import androidx.appcompat.app.AlertDialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class AlertDialogBuilder internal constructor(private val context: Context) {
@ -70,6 +71,7 @@ class AlertDialogBuilder internal constructor(private val context: Context) {
fun setContent(content: @Composable () -> Unit): AlertDialogBuilder {
builder.setView(ComposeView(context)
.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
content()
}

@ -3,6 +3,7 @@ package org.tasks.dialogs
import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@ -45,6 +46,7 @@ class PriorityPicker : DialogFragment() {
return requireActivity().let { fragmentActivity ->
val inflater = fragmentActivity.layoutInflater
val binding = DialogPriorityPickerBinding.inflate(inflater, null, false)
binding.priorityRow.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
binding.priorityRow.setContent { Priority(selected = priorityPickerViewModel.priority.collectAsStateWithLifecycle().value,
onClick = { priorityPickerViewModel.setPriority( it ) }) }
val builder = AlertDialog.Builder(fragmentActivity)

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
@ -17,6 +18,7 @@ abstract class TaskEditControlFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
val composeView = ComposeView(requireActivity())
composeView.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
viewModel = ViewModelProvider(requireParentFragment())[TaskEditViewModel::class.java]
bind(composeView)
createView(savedInstanceState)

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_calendar"
android:name="org.tasks.ui.CalendarControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_comment_bar"
android:name="org.tasks.fragments.CommentBarFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_files"
android:name="com.todoroo.astrid.files.FilesControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_location"
android:name="org.tasks.ui.LocationControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_reminders"
android:name="com.todoroo.astrid.ui.ReminderControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_repeat"
android:name="com.todoroo.astrid.repeats.RepeatControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_start_date"
android:name="com.todoroo.astrid.ui.StartDateControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_subtasks"
android:name="org.tasks.ui.SubtaskControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_tags"
android:name="com.todoroo.astrid.tags.TagsControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_edit_timer"
android:name="com.todoroo.astrid.timers.TimerControlSet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -303,12 +303,11 @@
+| | | +--- 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)
+| | +--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-geometry:1.7.6 (c)
+| | \--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*)
+| +--- project :data (*)
+| +--- org.jetbrains.compose.components:components-resources:1.7.1
@ -456,16 +455,14 @@
+| | | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | | | | | | | +--- androidx.compose.ui:ui:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6
+| | | | | | | | \--- androidx.compose.ui:ui-graphics-android:1.7.6
+| | | | | | | | +--- androidx.annotation:annotation:1.7.0 -> 1.8.1 (*)
@ -490,8 +487,7 @@
+| | | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (*)
+| | | | | | | | +--- androidx.core:core:1.12.0 -> 1.13.1 (*)
+| | | | | | | | +--- androidx.graphics:graphics-path:1.0.1
@ -503,8 +499,7 @@
+| | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-text:1.7.6
+| | | | | | | | \--- androidx.compose.ui:ui-text-android:1.7.6
+| | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.1 (*)
@ -530,8 +525,7 @@
+| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (*)
+| | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (*)
+| | | | | | | +--- androidx.core:core:1.12.0 -> 1.13.1 (*)
@ -571,7 +565,6 @@
+| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | \--- androidx.compose.foundation:foundation:1.7.6 (c)
+| | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (*)
+| | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (*)
@ -953,6 +946,7 @@
+| | | | +--- androidx.core:core:1.0.0 -> 1.13.1 (*)
+| | | | \--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | | +--- androidx.fragment:fragment-compose:1.8.5 (c)
+| | | \--- androidx.fragment:fragment-ktx:1.8.5 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.7 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.7 (*)
@ -1159,16 +1153,24 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.55 (*)
++--- androidx.datastore:datastore-preferences:1.1.2 (*)
++--- androidx.fragment:fragment-ktx:1.8.5
+| +--- androidx.activity:activity-ktx:1.8.1 -> 1.10.0 (*)
+| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.4 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.13.1 (*)
+| +--- androidx.fragment:fragment:1.8.5 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.7 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.7 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
++--- androidx.fragment:fragment-compose:1.8.5
+| +--- androidx.compose.runtime:runtime:1.5.4 -> 1.7.6 (*)
+| +--- androidx.compose.ui:ui:1.5.4 -> 1.7.6 (*)
+| +--- androidx.core:core-ktx:1.12.0 -> 1.13.1 (*)
+| +--- androidx.fragment:fragment-ktx:1.8.5
+| | +--- androidx.activity:activity-ktx:1.8.1 -> 1.10.0 (*)
+| | +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.4 (*)
+| | +--- androidx.core:core-ktx:1.2.0 -> 1.13.1 (*)
+| | +--- androidx.fragment:fragment:1.8.5 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.7 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.7 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | +--- androidx.fragment:fragment:1.8.5 (c)
+| | \--- androidx.fragment:fragment-compose:1.8.5 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| \--- androidx.fragment:fragment:1.8.5 (c)
+| +--- androidx.fragment:fragment:1.8.5 (c)
+| \--- androidx.fragment:fragment-ktx:1.8.5 (c)
++--- androidx.lifecycle:lifecycle-runtime:2.8.7 (*)
++--- androidx.lifecycle:lifecycle-runtime-compose:2.8.7 (*)
++--- androidx.lifecycle:lifecycle-viewmodel:2.8.7 (*)
@ -1296,37 +1298,36 @@
+| +--- androidx.compose.material:material:1.7.5 (c)
+| +--- androidx.compose.material:material-icons-extended:1.7.5 (c)
+| +--- androidx.compose.material3:material3:1.3.1 (c)
+| +--- androidx.compose.runtime:runtime:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.runtime:runtime-livedata:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-tooling-preview-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-viewbinding:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.runtime:runtime:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.runtime:runtime-saveable:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.material:material-android:1.7.5 (c)
+| +--- androidx.compose.material:material-icons-extended-android:1.7.5 (c)
+| +--- androidx.compose.material3:material3-android:1.3.1 (c)
+| +--- androidx.compose.runtime:runtime-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-util:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.animation:animation:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.foundation:foundation-layout:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-text:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-util:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.animation:animation-core:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.material:material-icons-core:1.7.5 (c)
+| +--- androidx.compose.material:material-ripple:1.7.5 (c)
+| +--- androidx.compose.ui:ui-graphics:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-geometry:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-unit:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-util-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-text-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.material:material-icons-core-android:1.7.5 (c)
+| +--- androidx.compose.material:material-ripple-android:1.7.5 (c)
+| +--- androidx.compose.runtime:runtime-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-graphics-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.runtime:runtime-saveable-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.foundation:foundation-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-text-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-util-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-geometry-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.ui:ui-unit-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.runtime:runtime-saveable-android:1.7.5 -> 1.7.6 (c)
+| +--- androidx.compose.foundation:foundation-android:1.7.5 -> 1.7.6 (c)
+| +--- 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)
@ -1360,19 +1361,6 @@
++--- androidx.activity:activity-compose:1.10.0 (*)
++--- androidx.compose.material:material-icons-extended -> 1.7.5 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7 (*)
++--- androidx.compose.ui:ui-viewbinding -> 1.7.6
+| +--- androidx.compose.ui:ui:1.7.6 (*)
+| +--- androidx.compose.ui:ui-util:1.7.6 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.8.0 (*)
+| +--- androidx.fragment:fragment-ktx:1.3.2 -> 1.8.5 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| +--- androidx.compose.ui:ui:1.7.6 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| +--- androidx.compose.ui:ui-geometry:1.7.6 (c)
+| \--- androidx.compose.ui:ui-unit:1.7.6 (c)
++--- androidx.compose.ui:ui-tooling-preview -> 1.7.6
+| \--- androidx.compose.ui:ui-tooling-preview-android:1.7.6 (*)
++--- io.coil-kt:coil-compose:2.7.0

@ -191,7 +191,6 @@
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.7 (c)
@ -202,6 +201,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.7 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.8.7 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.7
+| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.7
@ -324,6 +324,7 @@
+| | | | | | +--- androidx.core:core:1.3.0 -> 1.13.1 (*)
+| | | | | | \--- androidx.collection:collection:1.1.0 -> 1.4.4 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | | | | +--- androidx.fragment:fragment-compose:1.8.5 (c)
+| | | | | \--- androidx.fragment:fragment-ktx:1.8.5 (c)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*)
+| | | +--- com.google.firebase:firebase-components:18.0.0
@ -688,37 +689,36 @@
+| | | +--- androidx.compose.material:material:1.7.5 (c)
+| | | +--- androidx.compose.material:material-icons-extended:1.7.5 (c)
+| | | +--- androidx.compose.material3:material3:1.3.1 (c)
+| | | +--- androidx.compose.runtime:runtime:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.runtime:runtime-livedata:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-tooling-preview:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-tooling-preview-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-viewbinding:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.runtime:runtime:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.runtime:runtime-saveable:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.material:material-android:1.7.5 (c)
+| | | +--- androidx.compose.material:material-icons-extended-android:1.7.5 (c)
+| | | +--- androidx.compose.material3:material3-android:1.3.1 (c)
+| | | +--- androidx.compose.runtime:runtime-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-util:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.animation:animation:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.foundation:foundation-layout:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-text:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-util:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.animation:animation-core:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.material:material-icons-core:1.7.5 (c)
+| | | +--- androidx.compose.material:material-ripple:1.7.5 (c)
+| | | +--- androidx.compose.ui:ui-graphics:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-geometry:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-unit:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-util-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-text-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.material:material-icons-core-android:1.7.5 (c)
+| | | +--- androidx.compose.material:material-ripple-android:1.7.5 (c)
+| | | +--- androidx.compose.runtime:runtime-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-graphics-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.runtime:runtime-saveable-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.foundation:foundation-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-text-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-util-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-geometry-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.ui:ui-unit-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.runtime:runtime-saveable-android:1.7.5 -> 1.7.6 (c)
+| | | +--- androidx.compose.foundation:foundation-android:1.7.5 -> 1.7.6 (c)
+| | | +--- 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)
@ -864,12 +864,11 @@
+| | | +--- 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)
+| | +--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-geometry:1.7.6 (c)
+| | \--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 (*)
+| +--- project :data (*)
+| +--- org.jetbrains.compose.components:components-resources:1.7.1
@ -961,16 +960,14 @@
+| | | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | | | | | | | +--- androidx.compose.ui:ui:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6
+| | | | | | | | \--- androidx.compose.ui:ui-graphics-android:1.7.6
+| | | | | | | | +--- androidx.annotation:annotation:1.7.0 -> 1.9.0 (*)
@ -995,8 +992,7 @@
+| | | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (*)
+| | | | | | | | +--- androidx.core:core:1.12.0 -> 1.13.1 (*)
+| | | | | | | | +--- androidx.graphics:graphics-path:1.0.1
@ -1008,8 +1004,7 @@
+| | | | | | | | +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-text:1.7.6
+| | | | | | | | \--- androidx.compose.ui:ui-text-android:1.7.6
+| | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.9.0 (*)
@ -1029,8 +1024,7 @@
+| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | | \--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (*)
+| | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (*)
+| | | | | | | +--- androidx.core:core:1.12.0 -> 1.13.1 (*)
@ -1070,7 +1064,6 @@
+| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| | | | | | | +--- androidx.compose.ui:ui-viewbinding:1.7.6 (c)
+| | | | | | | \--- androidx.compose.foundation:foundation:1.7.6 (c)
+| | | | | | +--- androidx.compose.ui:ui-graphics:1.7.6 (*)
+| | | | | | +--- androidx.compose.ui:ui-unit:1.7.6 (*)
@ -1509,16 +1502,24 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (c)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.55 (*)
++--- androidx.datastore:datastore-preferences:1.1.2 (*)
++--- androidx.fragment:fragment-ktx:1.8.5
+| +--- androidx.activity:activity-ktx:1.8.1 -> 1.10.0 (*)
+| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.4 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.13.1 (*)
+| +--- androidx.fragment:fragment:1.8.5 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.7 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.7 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
++--- androidx.fragment:fragment-compose:1.8.5
+| +--- androidx.compose.runtime:runtime:1.5.4 -> 1.7.6 (*)
+| +--- androidx.compose.ui:ui:1.5.4 -> 1.7.6 (*)
+| +--- androidx.core:core-ktx:1.12.0 -> 1.13.1 (*)
+| +--- androidx.fragment:fragment-ktx:1.8.5
+| | +--- androidx.activity:activity-ktx:1.8.1 -> 1.10.0 (*)
+| | +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.4 (*)
+| | +--- androidx.core:core-ktx:1.2.0 -> 1.13.1 (*)
+| | +--- androidx.fragment:fragment:1.8.5 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.7 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.7 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| | +--- androidx.fragment:fragment:1.8.5 (c)
+| | \--- androidx.fragment:fragment-compose:1.8.5 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| \--- androidx.fragment:fragment:1.8.5 (c)
+| +--- androidx.fragment:fragment:1.8.5 (c)
+| \--- androidx.fragment:fragment-ktx:1.8.5 (c)
++--- androidx.lifecycle:lifecycle-runtime:2.8.7 (*)
++--- androidx.lifecycle:lifecycle-runtime-compose:2.8.7 (*)
++--- androidx.lifecycle:lifecycle-viewmodel:2.8.7 (*)
@ -1669,19 +1670,6 @@
++--- androidx.activity:activity-compose:1.10.0 (*)
++--- androidx.compose.material:material-icons-extended -> 1.7.5 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7 (*)
++--- androidx.compose.ui:ui-viewbinding -> 1.7.6
+| +--- androidx.compose.ui:ui:1.7.6 (*)
+| +--- androidx.compose.ui:ui-util:1.7.6 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.8.0 (*)
+| +--- androidx.fragment:fragment-ktx:1.3.2 -> 1.8.5 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.1.0 (*)
+| +--- androidx.compose.ui:ui:1.7.6 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.7.6 (c)
+| +--- androidx.compose.ui:ui-util:1.7.6 (c)
+| +--- androidx.compose.ui:ui-text:1.7.6 (c)
+| +--- androidx.compose.ui:ui-graphics:1.7.6 (c)
+| +--- androidx.compose.ui:ui-geometry:1.7.6 (c)
+| \--- androidx.compose.ui:ui-unit:1.7.6 (c)
++--- androidx.compose.ui:ui-tooling-preview -> 1.7.6
+| \--- androidx.compose.ui:ui-tooling-preview-android:1.7.6 (*)
++--- io.coil-kt:coil-compose:2.7.0

@ -21,7 +21,6 @@ etebase = "2.3.2"
firebase = "33.8.0"
firebase-crashlytics-gradle = "3.0.2"
flipper = "0.273.0"
fragment-ktx = "1.8.5"
google-oauth2 = "1.30.1"
google-api-drive = "v3-rev20241206-2.0.0"
google-api-tasks = "v1-rev20250105-2.0.0"
@ -77,7 +76,7 @@ androidx-compose-material3 = { group = "androidx.compose.material3", name = "mat
androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }
androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version = "1.0.1" }
androidx-datastore = { module = "androidx.datastore:datastore-preferences", version = "1.1.2" }
androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "fragment-ktx" }
androidx-fragment-compose = { module = "androidx.fragment:fragment-compose", version = "1.8.5"}
androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hilt" }
androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "hilt" }
androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junit" }

Loading…
Cancel
Save