diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a4403af77..465c3143b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -211,7 +211,7 @@
diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt
index 4327dae65..9c2ddeedc 100755
--- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt
+++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt
@@ -61,6 +61,8 @@ import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
import org.tasks.calendars.CalendarPicker
import org.tasks.compose.BeastModeBanner
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.CommentsRow
import org.tasks.compose.edit.DescriptionRow
@@ -86,8 +88,6 @@ import org.tasks.databinding.TaskEditTimerBinding
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DialogBuilder
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.dialogs.Linkify
import org.tasks.extensions.hideKeyboard
import org.tasks.files.FileHelper
@@ -140,6 +140,9 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
activity?.recreate()
}
+ private val listPickerLauncher = registerForListPickerResult { filter ->
+ editViewModel.selectedList.update { filter }
+ }
val task: Task?
get() = BundleCompat.getParcelable(requireArguments(), EXTRA_TASK, Task::class.java)
@@ -307,9 +310,6 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
}
}
}
- childFragmentManager.setFilterPickerResultListener(this) { filter ->
- editViewModel.selectedList.update { filter }
- }
return view
}
@@ -493,11 +493,11 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
list = list,
colorProvider = { chipProvider.getColor(it) },
onClick = {
- newFilterPicker(list, true)
- .show(
- childFragmentManager,
- FRAG_TAG_GOOGLE_TASK_LIST_SELECTION
- )
+ listPickerLauncher.launch(
+ context = context,
+ selectedFilter = list,
+ listsOnly = true
+ )
}
)
}
@@ -535,8 +535,6 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
const val EXTRA_TAGS = "extra_tags"
const val EXTRA_ALARMS = "extra_alarms"
- private const val FRAG_TAG_GOOGLE_TASK_LIST_SELECTION =
- "frag_tag_google_task_list_selection"
const val FRAG_TAG_CALENDAR_PICKER = "frag_tag_calendar_picker"
private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker"
const val REQUEST_CODE_PICK_CALENDAR = 70
diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt
index 3e9238b26..5dae8441c 100644
--- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt
+++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt
@@ -53,7 +53,6 @@ import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.adapter.TaskAdapterProvider
import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_OLD_DUE_DATE
import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_TASK_ID
-import org.tasks.filters.CaldavFilter
import com.todoroo.astrid.api.CustomFilter
import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.TagFilter
@@ -84,6 +83,8 @@ import org.tasks.activities.TagSettingsActivity
import org.tasks.analytics.Firebase
import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.compose.SubscriptionNagBanner
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.data.TaskContainer
@@ -100,8 +101,6 @@ import org.tasks.data.withTransaction
import org.tasks.databinding.FragmentTaskListBinding
import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
import org.tasks.dialogs.DialogBuilder
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker
import org.tasks.dialogs.SortSettingsActivity
import org.tasks.extensions.Context.openUri
@@ -110,6 +109,7 @@ import org.tasks.extensions.Fragment.safeStartActivityForResult
import org.tasks.extensions.hideKeyboard
import org.tasks.extensions.setOnQueryTextListener
import org.tasks.filters.AstridOrderingFilter
+import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter
import org.tasks.filters.FilterImpl
import org.tasks.filters.PlaceFilter
@@ -178,6 +178,13 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
private var mode: ActionMode? = null
lateinit var themeColor: ThemeColor
private lateinit var binding: FragmentTaskListBinding
+ private val listPickerLauncher = registerForListPickerResult {
+ val selected = taskAdapter.getSelected()
+ lifecycleScope.launch {
+ taskMover.move(selected, it)
+ }
+ finishActionMode()
+ }
private val sortRequest =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
@@ -334,13 +341,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
mainViewModel.setDrawerOpen(true)
}
setupMenu(toolbar)
- childFragmentManager.setFilterPickerResultListener(this) {
- val selected = taskAdapter.getSelected()
- lifecycleScope.launch {
- taskMover.move(selected, it)
- }
- finishActionMode()
- }
binding.banner.setContent {
val context = LocalContext.current
val showBanner = listViewModel.state.collectAsStateLifecycleAware().value.begForSubscription
@@ -756,8 +756,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
R.id.move_tasks -> {
lifecycleScope.launch {
val singleFilter = taskMover.getSingleFilter(selected)
- newFilterPicker(singleFilter, true)
- .show(childFragmentManager, FRAG_TAG_REMOTE_LIST_PICKER)
+ listPickerLauncher.launch(
+ context = requireActivity(),
+ selectedFilter = singleFilter,
+ listsOnly = true,
+ )
}
true
}
@@ -1019,7 +1022,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
private const val EXTRA_SELECTED_TASK_IDS = "extra_selected_task_ids"
private const val VOICE_RECOGNITION_REQUEST_CODE = 1234
private const val EXTRA_FILTER = "extra_filter"
- private const val FRAG_TAG_REMOTE_LIST_PICKER = "frag_tag_remote_list_picker"
private const val FRAG_TAG_DATE_TIME_PICKER = "frag_tag_date_time_picker"
private const val FRAG_TAG_PRIORITY_PICKER = "frag_tag_priority_picker"
private const val REQUEST_TAG_TASKS = 10106
diff --git a/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt b/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt
new file mode 100644
index 000000000..3dcc715f5
--- /dev/null
+++ b/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt
@@ -0,0 +1,140 @@
+package org.tasks.compose
+
+import android.appwidget.AppWidgetManager
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.BasicAlertDialog
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.unit.dp
+import androidx.core.content.IntentCompat
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.viewmodel.compose.viewModel
+import dagger.hilt.android.AndroidEntryPoint
+import org.tasks.LocalBroadcastManager
+import org.tasks.compose.pickers.SearchableFilterPicker
+import org.tasks.dialogs.FilterPickerViewModel
+import org.tasks.filters.Filter
+import org.tasks.filters.NavigationDrawerSubheader
+import org.tasks.preferences.DefaultFilterProvider
+import org.tasks.preferences.Preferences
+import org.tasks.widget.WidgetPreferences
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class FilterSelectionActivity : AppCompatActivity() {
+ @Inject lateinit var preferences: Preferences
+ @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
+ @Inject lateinit var localBroadcastManager: LocalBroadcastManager
+
+ @OptIn(ExperimentalMaterial3Api::class)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)
+ val selected = IntentCompat.getParcelableExtra(intent, EXTRA_FILTER, Filter::class.java)
+ setContent {
+ MaterialTheme(
+ colorScheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
+ ) {
+ val viewModel: FilterPickerViewModel = viewModel()
+ val state = viewModel.viewState.collectAsStateLifecycleAware().value
+ BasicAlertDialog(
+ onDismissRequest = { finish() },
+ modifier = Modifier.padding(vertical = 32.dp)
+ ) {
+ val searching by remember(state.query) {
+ derivedStateOf {
+ state.query.isNotBlank()
+ }
+ }
+ SearchableFilterPicker(
+ filters = if (searching) state.searchResults else state.filters,
+ query = state.query,
+ onQueryChange = { viewModel.onQueryChange(it) },
+ active = true,
+ dismiss = { finish() },
+ getIcon = { ImageVector.vectorResource(id = viewModel.getIcon(it)) },
+ getColor = { viewModel.getColor(it) },
+ selected = selected,
+ onClick = { filter ->
+ when (filter) {
+ is NavigationDrawerSubheader -> {
+ viewModel.onClick(filter)
+ }
+
+ is Filter -> {
+ val data = Bundle()
+ data.putParcelable(EXTRA_FILTER, filter)
+ if (widgetId != -1) {
+ WidgetPreferences(this, preferences, widgetId)
+ .setFilter(
+ defaultFilterProvider.getFilterPreferenceValue(
+ filter
+ )
+ )
+ localBroadcastManager.reconfigureWidget(widgetId)
+ }
+ setResult(RESULT_OK, Intent().putExtras(data))
+ finish()
+ }
+ }
+ }
+ )
+ }
+ }
+ }
+ }
+
+ companion object {
+ const val EXTRA_FILTER = "extra_filter"
+ const val EXTRA_LISTS_ONLY = "extra_lists_only"
+
+ fun Fragment.registerForListPickerResult(callback: (Filter) -> Unit): ActivityResultLauncher {
+ return registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
+ it.data?.let { intent ->
+ IntentCompat
+ .getParcelableExtra(intent, EXTRA_FILTER, Filter::class.java)
+ ?.let(callback)
+ }
+ }
+ }
+
+ fun ComponentActivity.registerForListPickerResult(callback: (Filter) -> Unit): ActivityResultLauncher {
+ return registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
+ it.data?.let { intent ->
+ IntentCompat
+ .getParcelableExtra(intent, EXTRA_FILTER, Filter::class.java)
+ ?.let(callback)
+ }
+ }
+ }
+
+ fun ActivityResultLauncher.launch(
+ context: Context,
+ selectedFilter: Filter? = null,
+ listsOnly: Boolean = false,
+ ) {
+ launch(
+ Intent(context, FilterSelectionActivity::class.java)
+ .putExtra(EXTRA_FILTER, selectedFilter)
+ .putExtra(EXTRA_LISTS_ONLY, listsOnly)
+ )
+ }
+ }
+}
diff --git a/app/src/main/java/org/tasks/compose/pickers/CalendarPicker.kt b/app/src/main/java/org/tasks/compose/pickers/CalendarPicker.kt
index a0bffcc2f..43431ce15 100644
--- a/app/src/main/java/org/tasks/compose/pickers/CalendarPicker.kt
+++ b/app/src/main/java/org/tasks/compose/pickers/CalendarPicker.kt
@@ -6,6 +6,9 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Block
+import androidx.compose.material.icons.outlined.Event
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -66,7 +69,7 @@ fun CalendarPickerList(
.padding(vertical = 12.dp)
) {
CheckableIconRow(
- icon = painterResource(id = R.drawable.ic_outline_block_24),
+ icon = Icons.Outlined.Block,
tint = MaterialTheme.colorScheme.onSurface,
text = stringResource(id = R.string.dont_add_to_calendar),
selected = selectedCalendar == null,
@@ -74,7 +77,7 @@ fun CalendarPickerList(
)
calendars.forEach {
CheckableIconRow(
- icon = painterResource(id = R.drawable.ic_outline_event_24px),
+ icon = Icons.Outlined.Event,
tint = Color(it.color),
text = it.name,
selected = selectedCalendar == it,
diff --git a/app/src/main/java/org/tasks/compose/pickers/FilterPicker.kt b/app/src/main/java/org/tasks/compose/pickers/FilterPicker.kt
deleted file mode 100644
index cdf4a9066..000000000
--- a/app/src/main/java/org/tasks/compose/pickers/FilterPicker.kt
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.tasks.compose.pickers
-
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.verticalScroll
-import androidx.compose.material.ContentAlpha
-import androidx.compose.material3.Icon
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment.Companion.CenterVertically
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.alpha
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.lifecycle.viewmodel.compose.viewModel
-import org.tasks.filters.CaldavFilter
-import org.tasks.R
-import org.tasks.compose.collectAsStateLifecycleAware
-import org.tasks.dialogs.FilterPickerViewModel
-import org.tasks.filters.Filter
-import org.tasks.filters.NavigationDrawerSubheader
-
-@Composable
-fun FilterPicker(
- viewModel: FilterPickerViewModel = viewModel(),
- selected: Filter?,
- onSelected: (Filter) -> Unit,
-) {
- Column(
- modifier = Modifier
- .verticalScroll(rememberScrollState())
- .padding(vertical = 12.dp)
- ) {
- val filters = viewModel.viewState.collectAsStateLifecycleAware().value.filters
- filters.forEach { filter ->
- when (filter) {
- is NavigationDrawerSubheader -> {
- CollapsibleRow(
- text = filter.title!!,
- collapsed = filter.isCollapsed,
- onClick = { viewModel.onClick(filter) },
- )
- }
- is Filter -> {
- CheckableIconRow(
- icon = painterResource(id = viewModel.getIcon(filter)),
- tint = Color(viewModel.getColor(filter)),
- selected = filter == selected,
- onClick = { onSelected(filter) },
- ) {
- Row(verticalAlignment = CenterVertically) {
- Text(
- text = filter.title!!,
- style = MaterialTheme.typography.bodyMedium.copy(
- fontWeight = FontWeight.Medium
- ),
- modifier = Modifier.weight(1f),
- color = MaterialTheme.colorScheme.onSurface,
- )
- if (filter is CaldavFilter && filter.principals > 0) {
- Icon(
- painter = painterResource(
- id = when (filter.principals) {
- 1 -> R.drawable.ic_outline_perm_identity_24px
- in 2..Int.MAX_VALUE -> R.drawable.ic_outline_people_outline_24
- else -> 0
- }
- ),
- modifier = Modifier.alpha(ContentAlpha.medium),
- contentDescription = null,
- )
- }
- }
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/dialogs/FilterPicker.kt b/app/src/main/java/org/tasks/dialogs/FilterPicker.kt
deleted file mode 100644
index 914e65eb1..000000000
--- a/app/src/main/java/org/tasks/dialogs/FilterPicker.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.tasks.dialogs
-
-import android.app.Dialog
-import android.content.DialogInterface
-import android.os.Bundle
-import androidx.fragment.app.DialogFragment
-import androidx.fragment.app.FragmentManager
-import androidx.fragment.app.setFragmentResult
-import androidx.lifecycle.LifecycleOwner
-import dagger.hilt.android.AndroidEntryPoint
-import org.tasks.R
-import org.tasks.compose.pickers.FilterPicker
-import org.tasks.filters.Filter
-import javax.inject.Inject
-
-@AndroidEntryPoint
-class FilterPicker : DialogFragment() {
- @Inject lateinit var dialogBuilder: DialogBuilder
-
- override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- return dialogBuilder
- .newDialog()
- .setNegativeButton(R.string.cancel) { dialog, _ -> dialog.cancel() }
- .setContent {
- FilterPicker(
- selected = arguments?.getParcelable(EXTRA_FILTER),
- onSelected = { filter ->
- val data = Bundle()
- data.putParcelable(EXTRA_FILTER, filter)
- filter.valuesForNewTasks?.let { data.putString(EXTRA_FILTER_VALUES, it) }
- setFragmentResult(SELECT_FILTER, data)
- dismiss()
- }
- )
- }
- .show()
- }
-
- override fun onCancel(dialog: DialogInterface) {
- super.onCancel(dialog)
- setFragmentResult(SELECT_FILTER, Bundle())
- }
-
- companion object {
- const val SELECT_FILTER = "select_filter"
- const val EXTRA_FILTER = "extra_filter"
- const val EXTRA_FILTER_VALUES = "extra_filter_values"
- const val EXTRA_LISTS_ONLY = "extra_lists_only"
-
- fun newFilterPicker(
- selected: Filter?,
- listsOnly: Boolean = false,
- ): FilterPicker {
- val dialog = FilterPicker()
- val arguments = Bundle()
- arguments.putParcelable(EXTRA_FILTER, selected)
- arguments.putBoolean(EXTRA_LISTS_ONLY, listsOnly)
- dialog.arguments = arguments
- return dialog
- }
-
- fun FragmentManager.setFilterPickerResultListener(
- lifecycleOwner: LifecycleOwner,
- callback: (Filter) -> Unit
- ) {
- setFragmentResultListener(SELECT_FILTER, lifecycleOwner) { _, data ->
- data.getParcelable(EXTRA_FILTER)?.let(callback)
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/dialogs/FilterPickerViewModel.kt b/app/src/main/java/org/tasks/dialogs/FilterPickerViewModel.kt
index 9211a4604..a8b14e5a0 100644
--- a/app/src/main/java/org/tasks/dialogs/FilterPickerViewModel.kt
+++ b/app/src/main/java/org/tasks/dialogs/FilterPickerViewModel.kt
@@ -16,8 +16,8 @@ import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.billing.Inventory
+import org.tasks.compose.FilterSelectionActivity
import org.tasks.data.dao.CaldavDao
-import org.tasks.dialogs.FilterPicker.Companion.EXTRA_LISTS_ONLY
import org.tasks.filters.Filter
import org.tasks.filters.FilterListItem
import org.tasks.filters.FilterProvider
@@ -38,10 +38,13 @@ class FilterPickerViewModel @Inject constructor(
private val preferences: Preferences,
private val caldavDao: CaldavDao,
) : ViewModel() {
- private val listsOnly = savedStateHandle[EXTRA_LISTS_ONLY] ?: false
+ private val listsOnly = savedStateHandle[FilterSelectionActivity.EXTRA_LISTS_ONLY] ?: false
data class ViewState(
val filters: List = emptyList(),
+ val allFilters: List = emptyList(),
+ val searchResults: List = emptyList(),
+ val query: String = "",
)
private val _viewState = MutableStateFlow(ViewState())
@@ -55,12 +58,20 @@ class FilterPickerViewModel @Inject constructor(
}
private fun refresh() = viewModelScope.launch {
- val items = if (listsOnly) {
- filterProvider.listPickerItems().filterNot { it is Filter && it.isReadOnly }
- } else {
- filterProvider.filterPickerItems()
+ _viewState.update { state ->
+ state.copy(
+ filters = if (listsOnly) {
+ filterProvider.listPickerItems().filterNot { it is Filter && it.isReadOnly }
+ } else {
+ filterProvider.filterPickerItems()
+ },
+ allFilters = if (listsOnly) {
+ filterProvider.allLists().filterNot { it.isReadOnly }
+ } else {
+ filterProvider.allFilters()
+ },
+ )
}
- _viewState.update { it.copy(filters = items) }
}
fun onClick(subheader: NavigationDrawerSubheader) = viewModelScope.launch {
@@ -103,6 +114,17 @@ class FilterPickerViewModel @Inject constructor(
localBroadcastManager.unregisterReceiver(refreshReceiver)
}
+ fun onQueryChange(query: String) {
+ _viewState.update { state ->
+ state.copy(
+ query = query,
+ searchResults = state.allFilters
+ .filter { it.title!!.contains(query, ignoreCase = true) }
+ .sortedBy { it.title },
+ )
+ }
+ }
+
init {
localBroadcastManager.registerRefreshListReceiver(refreshReceiver)
refresh()
diff --git a/app/src/main/java/org/tasks/filters/FilterProvider.kt b/app/src/main/java/org/tasks/filters/FilterProvider.kt
index 3c2a1726b..e3ffa44ac 100644
--- a/app/src/main/java/org/tasks/filters/FilterProvider.kt
+++ b/app/src/main/java/org/tasks/filters/FilterProvider.kt
@@ -1,36 +1,30 @@
package org.tasks.filters
import android.content.Context
-import android.content.Intent
import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.api.CustomFilter
import com.todoroo.astrid.core.BuiltInFilterExposer
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.BuildConfig
import org.tasks.R
-import org.tasks.activities.GoogleTaskListSettingsActivity
-import org.tasks.activities.TagSettingsActivity
-import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
-import org.tasks.data.entity.CaldavAccount
-import org.tasks.data.entity.CaldavAccount.Companion.TYPE_ETESYNC
-import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL
-import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS
+import org.tasks.data.GoogleTaskFilters
+import org.tasks.data.LocationFilters
+import org.tasks.data.NO_ORDER
+import org.tasks.data.TagFilters
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao
-import org.tasks.data.GoogleTaskFilters
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao
-import org.tasks.data.LocationFilters
-import org.tasks.data.NO_ORDER
import org.tasks.data.dao.TagDataDao
-import org.tasks.data.TagFilters
-import org.tasks.data.listSettingsClass
+import org.tasks.data.entity.CaldavAccount
+import org.tasks.data.entity.CaldavAccount.Companion.TYPE_ETESYNC
+import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL
+import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.setupLocalAccount
import org.tasks.data.toGtasksFilter
import org.tasks.data.toLocationFilter
import org.tasks.data.toTagFilter
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType
-import org.tasks.location.LocationPickerActivity
import org.tasks.preferences.Preferences
import javax.inject.Inject
@@ -45,11 +39,20 @@ class FilterProvider @Inject constructor(
private val locationDao: LocationDao
) {
suspend fun listPickerItems(): List =
- caldavFilters(false)
+ caldavFilters(showCreate = false, forceExpand = false)
suspend fun drawerItems(): List =
getAllFilters(showCreate = true, hideUnused = true)
+
+ suspend fun allLists(): List =
+ caldavFilters(showCreate = false, forceExpand = true)
+ .filterIsInstance()
+
+ suspend fun allFilters(): List =
+ getAllFilters(showCreate = false, hideUnused = false, forceExpand = true)
+ .filterIsInstance()
+
suspend fun filterPickerItems(): List =
getAllFilters(showCreate = false)
@@ -83,11 +86,15 @@ class FilterProvider @Inject constructor(
emptyList()
}
- private suspend fun addFilters(showCreate: Boolean, showBuiltIn: Boolean): List =
+ private suspend fun addFilters(
+ showCreate: Boolean,
+ showBuiltIn: Boolean,
+ forceExpand: Boolean,
+ ): List =
if (!preferences.getBoolean(R.string.p_filters_enabled, true)) {
emptyList()
} else {
- val collapsed = preferences.getBoolean(R.string.p_collapse_filters, false)
+ val collapsed = !forceExpand && preferences.getBoolean(R.string.p_collapse_filters, false)
listOf(
NavigationDrawerSubheader(
context.getString(R.string.filters),
@@ -105,11 +112,15 @@ class FilterProvider @Inject constructor(
.plus(filterDao.getFilters().map(::CustomFilter).sort())
}
- private suspend fun addTags(showCreate: Boolean, hideUnused: Boolean): List =
+ private suspend fun addTags(
+ showCreate: Boolean,
+ hideUnused: Boolean,
+ forceExpand: Boolean,
+ ): List =
if (!preferences.getBoolean(R.string.p_tags_enabled, true)) {
emptyList()
} else {
- val collapsed = preferences.getBoolean(R.string.p_collapse_tags, false)
+ val collapsed = !forceExpand && preferences.getBoolean(R.string.p_collapse_tags, false)
listOf(
NavigationDrawerSubheader(
context.getString(R.string.tags),
@@ -129,11 +140,15 @@ class FilterProvider @Inject constructor(
.sort())
}
- private suspend fun addPlaces(showCreate: Boolean, hideUnused: Boolean): List =
+ private suspend fun addPlaces(
+ showCreate: Boolean,
+ hideUnused: Boolean,
+ forceExpand: Boolean,
+ ): List =
if (!preferences.getBoolean(R.string.p_places_enabled, true)) {
emptyList()
} else {
- val collapsed = preferences.getBoolean(R.string.p_collapse_locations, false)
+ val collapsed = !forceExpand && preferences.getBoolean(R.string.p_collapse_locations, false)
listOf(
NavigationDrawerSubheader(
context.getString(R.string.places),
@@ -157,6 +172,7 @@ class FilterProvider @Inject constructor(
showCreate: Boolean = true,
showBuiltIn: Boolean = true,
hideUnused: Boolean = false,
+ forceExpand: Boolean = false,
): List =
if (showBuiltIn) {
arrayListOf(builtInFilterExposer.myTasksFilter)
@@ -164,18 +180,19 @@ class FilterProvider @Inject constructor(
ArrayList()
}
.asSequence()
- .plus(addFilters(showCreate, showBuiltIn))
- .plus(addTags(showCreate, hideUnused))
- .plus(addPlaces(showCreate, hideUnused))
- .plus(caldavFilters(showCreate))
+ .plus(addFilters(showCreate, showBuiltIn, forceExpand))
+ .plus(addTags(showCreate, hideUnused, forceExpand))
+ .plus(addPlaces(showCreate, hideUnused, forceExpand))
+ .plus(caldavFilters(showCreate, forceExpand))
.toList()
.plusAllIf(BuildConfig.DEBUG) { getDebugFilters() }
private suspend fun googleTaskFilter(
account: CaldavAccount,
showCreate: Boolean,
+ forceExpand: Boolean,
): List {
- val collapsed = account.isCollapsed
+ val collapsed = !forceExpand && account.isCollapsed
return listOf(
NavigationDrawerSubheader(
account.username,
@@ -195,17 +212,21 @@ class FilterProvider @Inject constructor(
)
}
- private suspend fun caldavFilters(showCreate: Boolean = true): List =
+ private suspend fun caldavFilters(
+ showCreate: Boolean,
+ forceExpand: Boolean,
+ ): List =
caldavDao.getAccounts()
.ifEmpty { listOf(caldavDao.setupLocalAccount(context)) }
.filter { it.accountType != TYPE_LOCAL || preferences.getBoolean(R.string.p_lists_enabled, true) }
.flatMap {
if (it.isGoogleTasks) {
- googleTaskFilter(it, showCreate)
+ googleTaskFilter(it, showCreate, forceExpand)
} else {
caldavFilter(
it,
- showCreate && it.accountType != TYPE_OPENTASKS && it.accountType != TYPE_ETESYNC
+ showCreate && it.accountType != TYPE_OPENTASKS && it.accountType != TYPE_ETESYNC,
+ forceExpand,
)
}
}
@@ -213,8 +234,9 @@ class FilterProvider @Inject constructor(
private suspend fun caldavFilter(
account: CaldavAccount,
showCreate: Boolean,
+ forceExpand: Boolean,
): List {
- val collapsed = account.isCollapsed
+ val collapsed = !forceExpand && account.isCollapsed
return listOf(
NavigationDrawerSubheader(
if (account.accountType == TYPE_LOCAL) {
diff --git a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt
index f265e1842..b759e0e88 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt
@@ -6,8 +6,8 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.preferences.DefaultFilterProvider
import javax.inject.Inject
@@ -18,24 +18,23 @@ class DashClock : InjectingPreferenceFragment() {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
- override fun getPreferenceXml() = R.xml.preferences_dashclock
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- childFragmentManager.setFilterPickerResultListener(this) {
- defaultFilterProvider.dashclockFilter = it
- lifecycleScope.launch {
- refreshPreferences()
- }
- localBroadcastManager.broadcastRefresh()
+ private val listPickerLauncher = registerForListPickerResult {
+ defaultFilterProvider.dashclockFilter = it
+ lifecycleScope.launch {
+ refreshPreferences()
}
+ localBroadcastManager.broadcastRefresh()
}
+ override fun getPreferenceXml() = R.xml.preferences_dashclock
+
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
findPreference(R.string.p_dashclock_filter)
.setOnPreferenceClickListener {
- newFilterPicker(defaultFilterProvider.dashclockFilter)
- .show(childFragmentManager, FRAG_TAG_SELECT_PICKER)
+ listPickerLauncher.launch(
+ context = requireContext(),
+ selectedFilter = defaultFilterProvider.dashclockFilter,
+ )
false
}
@@ -46,8 +45,4 @@ class DashClock : InjectingPreferenceFragment() {
val filter = defaultFilterProvider.getFilterFromPreference(R.string.p_dashclock_filter)
findPreference(R.string.p_dashclock_filter).summary = filter.title
}
-
- companion object {
- private const val FRAG_TAG_SELECT_PICKER = "frag_tag_select_picker"
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt
index ae46ce1c9..e3d8974e9 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt
@@ -17,12 +17,12 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.dialogs.ColorPalettePicker
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter
import org.tasks.dialogs.ColorWheelPicker
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.dialogs.ThemePickerDialog
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.extensions.Context.isNightMode
@@ -51,17 +51,14 @@ class LookAndFeel : InjectingPreferenceFragment() {
@Inject lateinit var inventory: Inventory
@Inject lateinit var locale: Locale
- override fun getPreferenceXml() = R.xml.preferences_look_and_feel
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- childFragmentManager.setFilterPickerResultListener(this) {
- defaultFilterProvider.setDefaultOpenFilter(it)
- findPreference(R.string.p_default_open_filter).summary = it.title
- localBroadcastManager.broadcastRefresh()
- }
+ private val listPickerLauncher = registerForListPickerResult {
+ defaultFilterProvider.setDefaultOpenFilter(it)
+ findPreference(R.string.p_default_open_filter).summary = it.title
+ localBroadcastManager.broadcastRefresh()
}
+ override fun getPreferenceXml() = R.xml.preferences_look_and_feel
+
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
val themePref = findPreference(R.string.p_theme)
val themeNames = resources.getStringArray(R.array.base_theme_names)
@@ -84,8 +81,10 @@ class LookAndFeel : InjectingPreferenceFragment() {
defaultList.summary = filter.title
defaultList.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch {
- newFilterPicker(defaultFilterProvider.getDefaultOpenFilter())
- .show(childFragmentManager, FRAG_TAG_FILTER_PICKER)
+ listPickerLauncher.launch(
+ context = requireContext(),
+ selectedFilter = defaultFilterProvider.getDefaultOpenFilter(),
+ )
}
true
}
@@ -249,6 +248,5 @@ class LookAndFeel : InjectingPreferenceFragment() {
private const val FRAG_TAG_LOCALE_PICKER = "frag_tag_locale_picker"
private const val FRAG_TAG_THEME_PICKER = "frag_tag_theme_picker"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
- private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt
index 5eb594ede..29dbf906d 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt
@@ -20,8 +20,8 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.extensions.Context.getResourceUri
import org.tasks.injection.InjectingPreferenceFragment
@@ -43,17 +43,14 @@ class Notifications : InjectingPreferenceFragment() {
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var voiceOutputAssistant: VoiceOutputAssistant
- override fun getPreferenceXml() = R.xml.preferences_notifications
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- childFragmentManager.setFilterPickerResultListener(this) {
- defaultFilterProvider.setBadgeFilter(it)
- findPreference(R.string.p_badge_list).summary = it.title
- localBroadcastManager.broadcastRefresh()
- }
+ private val listPickerLauncher = registerForListPickerResult {
+ defaultFilterProvider.setBadgeFilter(it)
+ findPreference(R.string.p_badge_list).summary = it.title
+ localBroadcastManager.broadcastRefresh()
}
+ override fun getPreferenceXml() = R.xml.preferences_notifications
+
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
rescheduleNotificationsOnChange(
false,
@@ -90,8 +87,10 @@ class Notifications : InjectingPreferenceFragment() {
badgePreference.summary = filter.title
badgePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch {
- newFilterPicker(defaultFilterProvider.getBadgeFilter())
- .show(childFragmentManager, FRAG_TAG_FILTER_PICKER)
+ listPickerLauncher.launch(
+ context = requireContext(),
+ selectedFilter = defaultFilterProvider.getBadgeFilter(),
+ )
}
true
}
@@ -354,6 +353,5 @@ class Notifications : InjectingPreferenceFragment() {
private const val REQUEST_CODE_ALERT_RINGTONE = 10005
private const val REQUEST_CODE_TTS_CHECK = 10006
private const val REQUEST_CODE_COMPLETION_SOUND = 10007
- private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt
index 32d75e87f..502d83b55 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt
@@ -6,23 +6,23 @@ import android.os.Bundle
import android.view.View
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
-import org.tasks.data.entity.Task.Companion.NOTIFY_AFTER_DEADLINE
-import org.tasks.data.entity.Task.Companion.NOTIFY_AT_DEADLINE
-import org.tasks.data.entity.Task.Companion.NOTIFY_AT_START
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.calendars.CalendarPicker
import org.tasks.calendars.CalendarPicker.Companion.newCalendarPicker
import org.tasks.calendars.CalendarProvider
-import org.tasks.data.entity.CaldavAccount
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.data.dao.LocationDao
-import org.tasks.data.entity.Place
-import org.tasks.data.entity.TagData
import org.tasks.data.dao.TagDataDao
import org.tasks.data.displayName
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
+import org.tasks.data.entity.CaldavAccount
+import org.tasks.data.entity.Place
+import org.tasks.data.entity.TagData
+import org.tasks.data.entity.Task.Companion.NOTIFY_AFTER_DEADLINE
+import org.tasks.data.entity.Task.Companion.NOTIFY_AT_DEADLINE
+import org.tasks.data.entity.Task.Companion.NOTIFY_AT_START
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.location.LocationPickerActivity
import org.tasks.location.LocationPickerActivity.Companion.EXTRA_PLACE
@@ -36,7 +36,6 @@ import org.tasks.tags.TagPickerActivity
import org.tasks.tags.TagPickerActivity.Companion.EXTRA_SELECTED
import javax.inject.Inject
-private const val FRAG_TAG_DEFAULT_LIST_SELECTION = "frag_tag_default_list_selection"
private const val FRAG_TAG_CALENDAR_PICKER = "frag_tag_calendar_picker"
private const val REQUEST_CALENDAR_SELECTION = 10011
@@ -51,13 +50,9 @@ class TaskDefaults : InjectingPreferenceFragment() {
@Inject lateinit var tagDataDao: TagDataDao
private lateinit var defaultCalendarPref: Preference
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- childFragmentManager.setFilterPickerResultListener(this) {
- defaultFilterProvider.defaultList = it
- updateRemoteListSummary()
- }
+ private val listPickerLauncher = registerForListPickerResult {
+ defaultFilterProvider.defaultList = it
+ updateRemoteListSummary()
}
override fun getPreferenceXml() = R.xml.preferences_task_defaults
@@ -74,8 +69,11 @@ class TaskDefaults : InjectingPreferenceFragment() {
findPreference(R.string.p_default_list)
.setOnPreferenceClickListener {
lifecycleScope.launch {
- newFilterPicker(defaultFilterProvider.getDefaultList(), true)
- .show(childFragmentManager, FRAG_TAG_DEFAULT_LIST_SELECTION)
+ listPickerLauncher.launch(
+ context = requireContext(),
+ selectedFilter = defaultFilterProvider.getDefaultList(),
+ listsOnly = true,
+ )
}
false
}
diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt
index ab4788459..5ce54aa07 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt
@@ -6,8 +6,8 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.filters.Filter
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.bundle.ListNotificationBundle
@@ -20,7 +20,6 @@ class TaskerListNotification : InjectingPreferenceFragment() {
companion object {
const val EXTRA_FILTER = "extra_filter"
private const val REQUEST_SUBSCRIPTION = 10125
- private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
fun newTaskerListNotification(filter: String?): TaskerListNotification {
val fragment = TaskerListNotification()
@@ -36,17 +35,13 @@ class TaskerListNotification : InjectingPreferenceFragment() {
lateinit var filter: Filter
var cancelled: Boolean = false
+ private val listPickerLauncher = registerForListPickerResult {
+ filter = it
+ refreshPreferences()
+ }
override fun getPreferenceXml() = R.xml.preferences_tasker
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- childFragmentManager.setFilterPickerResultListener(this) {
- filter = it
- refreshPreferences()
- }
- }
-
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
filter = if (savedInstanceState == null) {
defaultFilterProvider.getFilterFromPreferenceBlocking(arguments?.getString(EXTRA_FILTER))
@@ -57,8 +52,10 @@ class TaskerListNotification : InjectingPreferenceFragment() {
refreshPreferences()
findPreference(R.string.filter).setOnPreferenceClickListener {
- newFilterPicker(filter)
- .show(childFragmentManager, FRAG_TAG_FILTER_PICKER)
+ listPickerLauncher.launch(
+ context = requireContext(),
+ selectedFilter = filter,
+ )
false
}
diff --git a/app/src/main/java/org/tasks/preferences/fragments/WidgetSettings.kt b/app/src/main/java/org/tasks/preferences/fragments/WidgetSettings.kt
index 25ef0b3b3..6af713a7e 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/WidgetSettings.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/WidgetSettings.kt
@@ -21,12 +21,12 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.dialogs.ColorPalettePicker
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter.Palette
import org.tasks.dialogs.ColorWheelPicker
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.dialogs.SortSettingsActivity
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.filters.AstridOrderingFilter
@@ -48,7 +48,6 @@ class WidgetSettings : InjectingPreferenceFragment() {
const val EXTRA_WIDGET_ID = "extra_widget_id"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
- private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
fun newWidgetSettings(appWidgetId: Int): WidgetSettings {
val widget = WidgetSettings()
@@ -65,17 +64,13 @@ class WidgetSettings : InjectingPreferenceFragment() {
private lateinit var widgetPreferences: WidgetPreferences
private var appWidgetId = 0
+ private val listPickerLauncher = registerForListPickerResult {
+ widgetPreferences.setFilter(defaultFilterProvider.getFilterPreferenceValue(it))
+ updateFilter()
+ }
override fun getPreferenceXml() = R.xml.preferences_widget
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- childFragmentManager.setFilterPickerResultListener(this) {
- widgetPreferences.setFilter(defaultFilterProvider.getFilterPreferenceValue(it))
- updateFilter()
- }
- }
-
override fun onResume() {
super.onResume()
@@ -145,8 +140,7 @@ class WidgetSettings : InjectingPreferenceFragment() {
findPreference(R.string.p_widget_filter)
.setOnPreferenceClickListener {
lifecycleScope.launch {
- newFilterPicker(getFilter())
- .show(childFragmentManager, FRAG_TAG_FILTER_PICKER)
+ listPickerLauncher.launch(requireContext(), selectedFilter = getFilter())
}
false
}
diff --git a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt
index bb8a940a1..620193a86 100644
--- a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt
+++ b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt
@@ -3,7 +3,9 @@ package org.tasks.widget
import android.os.Bundle
import android.view.View
import android.widget.TextView
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.Toolbar
+import androidx.core.content.IntentCompat
import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat
@@ -11,13 +13,13 @@ import com.google.android.material.textfield.TextInputEditText
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
+import org.tasks.compose.FilterSelectionActivity.Companion.launch
+import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.data.UUIDHelper
import org.tasks.databinding.ActivityWidgetShortcutLayoutBinding
import org.tasks.dialogs.ColorPalettePicker
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter.Palette
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.filters.Filter
import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.intents.TaskIntents
@@ -38,6 +40,13 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
private var selectedFilter: Filter? = null
private var selectedTheme = 0
+ private val listPickerResult = registerForListPickerResult {
+ if (selectedFilter != null && selectedFilter!!.title == getShortcutName()) {
+ shortcutName.text = null
+ }
+ selectedFilter = it
+ updateFilterAndTheme()
+ }
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -66,14 +75,6 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
selectedTheme = savedInstanceState.getInt(EXTRA_THEME)
}
updateFilterAndTheme()
-
- supportFragmentManager.setFilterPickerResultListener(this) {
- if (selectedFilter != null && selectedFilter!!.title == getShortcutName()) {
- shortcutName.text = null
- }
- selectedFilter = it
- updateFilterAndTheme()
- }
}
override fun onSaveInstanceState(outState: Bundle) {
@@ -90,8 +91,7 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
}
private fun showListPicker() {
- newFilterPicker(selectedFilter)
- .show(supportFragmentManager, FRAG_TAG_FILTER_PICKER)
+ listPickerResult.launch(context = this, selectedFilter = selectedFilter)
}
private fun showThemePicker() {
@@ -145,6 +145,5 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
private const val EXTRA_FILTER = "extra_filter"
private const val EXTRA_THEME = "extra_theme"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
- private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/widget/TasksWidget.kt b/app/src/main/java/org/tasks/widget/TasksWidget.kt
index 4e99f16d8..a43850ae3 100644
--- a/app/src/main/java/org/tasks/widget/TasksWidget.kt
+++ b/app/src/main/java/org/tasks/widget/TasksWidget.kt
@@ -14,7 +14,7 @@ import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.runBlocking
import org.tasks.R
-import org.tasks.dialogs.FilterPicker
+import org.tasks.compose.FilterSelectionActivity
import org.tasks.extensions.setBackgroundColor
import org.tasks.extensions.setColorFilter
import org.tasks.extensions.setRipple
@@ -213,9 +213,9 @@ class TasksWidget : AppWidgetProvider() {
}
private fun getChooseListIntent(context: Context, filter: Filter, widgetId: Int): PendingIntent {
- val intent = Intent(context, WidgetFilterSelectionActivity::class.java)
+ val intent = Intent(context, FilterSelectionActivity::class.java)
intent.flags = FLAGS
- intent.putExtra(FilterPicker.EXTRA_FILTER, filter)
+ intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, filter)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId)
intent.action = "choose_list"
return PendingIntent.getActivity(
diff --git a/app/src/main/java/org/tasks/widget/WidgetFilterSelectionActivity.kt b/app/src/main/java/org/tasks/widget/WidgetFilterSelectionActivity.kt
deleted file mode 100644
index 4eafcf3d3..000000000
--- a/app/src/main/java/org/tasks/widget/WidgetFilterSelectionActivity.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.tasks.widget
-
-import android.appwidget.AppWidgetManager
-import android.content.Intent
-import android.os.Bundle
-import androidx.appcompat.app.AppCompatActivity
-import dagger.hilt.android.AndroidEntryPoint
-import org.tasks.LocalBroadcastManager
-import org.tasks.dialogs.FilterPicker.Companion.EXTRA_FILTER
-import org.tasks.dialogs.FilterPicker.Companion.SELECT_FILTER
-import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
-import org.tasks.filters.Filter
-import org.tasks.preferences.DefaultFilterProvider
-import org.tasks.preferences.Preferences
-import timber.log.Timber
-import javax.inject.Inject
-
-@AndroidEntryPoint
-class WidgetFilterSelectionActivity : AppCompatActivity() {
- @Inject lateinit var preferences: Preferences
- @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
- @Inject lateinit var localBroadcastManager: LocalBroadcastManager
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- val widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)
- if (widgetId == -1) {
- Timber.e("Missing ${AppWidgetManager.EXTRA_APPWIDGET_ID}")
- finish()
- }
- supportFragmentManager
- .setFragmentResultListener(SELECT_FILTER, this) { _, result ->
- val filter: Filter? = result.getParcelable(EXTRA_FILTER)
- if (filter == null) {
- finish()
- return@setFragmentResultListener
- }
- WidgetPreferences(this, preferences, widgetId)
- .setFilter(defaultFilterProvider.getFilterPreferenceValue(filter))
- localBroadcastManager.reconfigureWidget(widgetId)
- setResult(RESULT_OK, Intent().putExtras(result))
- finish()
- }
- newFilterPicker(intent.getParcelableExtra(EXTRA_FILTER))
- .show(supportFragmentManager, FRAG_TAG_FILTER_PICKER)
- }
-
- companion object {
- private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
- }
-}
\ No newline at end of file
diff --git a/deps_fdroid.txt b/deps_fdroid.txt
index 16963661f..5c4f000b4 100644
--- a/deps_fdroid.txt
+++ b/deps_fdroid.txt
@@ -28,17 +28,14 @@
+| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
-+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0
++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0
+| | | +--- org.jetbrains:annotations:23.0.0
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (c)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 (c)
-+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (c)
-+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
-+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.0
-+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0 (c)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0 (c)
++| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (c)
++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -63,10 +60,10 @@
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*)
-+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0 (*)
++| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -85,14 +82,17 @@
+| \--- androidx.databinding:databinding-common:8.4.1
++--- androidx.databinding:databinding-ktx:8.4.1
+| +--- androidx.databinding:databinding-runtime:8.4.1 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 2.0.0
++| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
++| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.0
++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.8.0 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.1
+| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
@@ -144,7 +144,7 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
+| | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
@@ -196,8 +196,8 @@
+| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -245,8 +245,8 @@
+| | +--- org.jetbrains.kotlinx:atomicfu:0.17.0
+| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | \--- androidx.room:room-common:2.7.0-alpha03 (c)
+| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3
+| | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.3
@@ -270,17 +270,334 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- project :kmp
++| +--- androidx.compose.ui:ui-tooling-preview-android:1.6.7
++| | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
++| | +--- androidx.compose.runtime:runtime:1.6.7
++| | | \--- androidx.compose.runtime:runtime-android:1.6.7
++| | | +--- androidx.collection:collection:1.4.0 (*)
++| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.8.0 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
++| | | \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++| | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
+| +--- project :data (*)
-+| +--- org.jetbrains.compose.runtime:runtime:1.6.10
-+| | \--- androidx.compose.runtime:runtime:1.6.7
-+| | \--- androidx.compose.runtime:runtime-android:1.6.7
++| +--- org.jetbrains.compose.components:components-resources:1.6.10
++| | \--- org.jetbrains.compose.components:components-resources-android:1.6.10
++| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 -> 2.0.0 (*)
++| | +--- org.jetbrains.compose.runtime:runtime:1.6.10
++| | | \--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | +--- org.jetbrains.compose.foundation:foundation:1.6.10
++| | | \--- androidx.compose.foundation:foundation:1.6.7
++| | | \--- androidx.compose.foundation:foundation-android:1.6.7
++| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | +--- androidx.collection:collection:1.4.0 (*)
++| | | +--- androidx.compose.animation:animation:1.6.7
++| | | | \--- androidx.compose.animation:animation-android:1.6.7
++| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | +--- androidx.compose.animation:animation-core:1.6.7
++| | | | | \--- androidx.compose.animation:animation-core-android:1.6.7
++| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui:1.6.7
++| | | | | | \--- androidx.compose.ui:ui-android:1.6.7
++| | | | | | +--- androidx.activity:activity-ktx:1.7.0 -> 1.9.0
++| | | | | | | +--- androidx.activity:activity:1.9.0
++| | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | | | +--- androidx.core:core:1.13.0
++| | | | | | | | | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
++| | | | | | | | | +--- androidx.annotation:annotation-experimental:1.4.0 -> 1.4.1 (*)
++| | | | | | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | | | | +--- androidx.concurrent:concurrent-futures:1.0.0 -> 1.1.0 (*)
++| | | | | | | | | +--- androidx.interpolator:interpolator:1.0.0
++| | | | | | | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.8.0 (*)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.2 -> 2.8.1 (*)
++| | | | | | | | | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
++| | | | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | | | | \--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | | \--- androidx.core:core-ktx:1.13.0 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 -> 2.8.1
++| | | | | | | | | +--- androidx.annotation:annotation:1.0.0 -> 1.8.0 (*)
++| | | | | | | | | +--- androidx.core:core-ktx:1.2.0 -> 1.13.0
++| | | | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | | | | +--- androidx.core:core:1.13.0 (*)
++| | | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | | | \--- androidx.core:core:1.13.0 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (*)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (*)
++| | | | | | | | | +--- androidx.savedstate:savedstate:1.2.1
++| | | | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*)
++| | | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 -> 2.8.1 (*)
++| | | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
++| | | | | | | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c)
++| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
++| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
++| | | | | | | | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
++| | | | | | | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
++| | | | | | | | +--- androidx.savedstate:savedstate:1.2.1 (*)
++| | | | | | | | +--- androidx.tracing:tracing:1.0.0 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- androidx.activity:activity-compose:1.9.0 (c)
++| | | | | | | | \--- androidx.activity:activity-ktx:1.9.0 (c)
++| | | | | | | +--- androidx.core:core-ktx:1.13.0 (*)
++| | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.1 (*)
++| | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.1
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
++| | | | | | | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
++| | | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1
++| | | | | | | | +--- androidx.savedstate:savedstate:1.2.1 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
++| | | | | | | | \--- androidx.savedstate:savedstate:1.2.1 (c)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- androidx.activity:activity:1.9.0 (c)
++| | | | | | | \--- androidx.activity:activity-compose:1.9.0 (c)
++| | | | | | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
++| | | | | | +--- androidx.autofill:autofill:1.0.0
++| | | | | | | \--- androidx.core:core:1.1.0 -> 1.13.0 (*)
++| | | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | +--- androidx.compose.runtime:runtime-saveable:1.6.7
++| | | | | | | \--- androidx.compose.runtime:runtime-saveable-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (c)
++| | | | | | | \--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7
++| | | | | | | \--- androidx.compose.ui:ui-geometry-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.2.1 -> 1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7
++| | | | | | | | \--- androidx.compose.ui:ui-util-android:1.6.7
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7
++| | | | | | | \--- androidx.compose.ui:ui-graphics-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.7.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7
++| | | | | | | | \--- androidx.compose.ui:ui-unit-android:1.6.7
++| | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | | +--- androidx.collection:collection-ktx:1.2.0 -> 1.4.0
++| | | | | | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | | | | | \--- androidx.collection:collection:1.4.0 (c)
++| | | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
++| | | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-text:1.6.7
++| | | | | | | \--- androidx.compose.ui:ui-text-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime-saveable:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
++| | | | | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0
++| | | | | | | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
++| | | | | | | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
++| | | | | | | | +--- androidx.core:core:1.3.0 -> 1.13.0 (*)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.4.1 -> 2.8.1 (*)
++| | | | | | | | +--- 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.0.0 (*)
++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
++| | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
++| | | | | | +--- androidx.customview:customview-poolingcontainer:1.0.0
++| | | | | | | +--- androidx.core:core-ktx:1.5.0 -> 1.13.0 (*)
++| | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 2.0.0 (*)
++| | | | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
++| | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
++| | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | | | | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
++| | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
++| | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.8.0 (*)
++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | \--- androidx.compose.foundation:foundation:1.4.0 -> 1.6.7 (c)
++| | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | | | \--- androidx.compose.animation:animation:1.6.7 (c)
++| | | | +--- androidx.compose.foundation:foundation-layout:1.6.7
++| | | | | \--- androidx.compose.foundation:foundation-layout-android:1.6.7
++| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | +--- androidx.compose.animation:animation-core:1.2.1 -> 1.6.7 (*)
++| | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
++| | | | | \--- androidx.compose.foundation:foundation:1.6.7 (c)
++| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
++| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | \--- androidx.compose.animation:animation-core:1.6.7 (c)
++| | | +--- androidx.compose.foundation:foundation-layout:1.6.7 (*)
++| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui-text:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
++| | | +--- androidx.emoji2:emoji2:1.3.0 (*)
++| | | \--- androidx.compose.foundation:foundation-layout:1.6.7 (c)
++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
++| +--- org.jetbrains.compose.foundation:foundation:1.6.10 (*)
++| +--- org.jetbrains.compose.material3:material3:1.6.10
++| | \--- androidx.compose.material3:material3:1.2.1
++| | \--- androidx.compose.material3:material3-android:1.2.1
++| | +--- androidx.activity:activity-compose:1.5.0 -> 1.9.0
++| | | +--- androidx.activity:activity-ktx:1.9.0 (*)
++| | | +--- androidx.compose.runtime:runtime:1.0.1 -> 1.6.7 (*)
++| | | +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.6.7 (*)
++| | | +--- androidx.compose.ui:ui:1.0.1 -> 1.6.7 (*)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | +--- androidx.activity:activity:1.9.0 (c)
++| | | \--- androidx.activity:activity-ktx:1.9.0 (c)
++| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | +--- androidx.annotation:annotation-experimental:1.4.0 -> 1.4.1 (*)
+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
-+| | \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++| | +--- androidx.compose.animation:animation-core:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.7
++| | | \--- androidx.compose.material:material-icons-core-android:1.6.7
++| | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | +--- androidx.compose.material:material:1.6.7 (c)
++| | | +--- androidx.compose.material:material-icons-extended:1.6.7 (c)
++| | | \--- androidx.compose.material:material-ripple:1.6.7 (c)
++| | +--- androidx.compose.material:material-ripple:1.6.0 -> 1.6.7
++| | | \--- androidx.compose.material:material-ripple-android:1.6.7
++| | | +--- androidx.compose.animation:animation:1.6.7 (*)
++| | | +--- androidx.compose.foundation:foundation:1.6.7 (*)
++| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | +--- androidx.compose.material:material:1.6.7 (c)
++| | | +--- androidx.compose.material:material-icons-core:1.6.7 (c)
++| | | \--- androidx.compose.material:material-icons-extended:1.6.7 (c)
++| | +--- androidx.compose.runtime:runtime:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.ui:ui-graphics:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.ui:ui-text:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.ui:ui-util:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.lifecycle:lifecycle-common-java8:2.6.1 -> 2.8.1
++| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (*)
++| | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
++| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
++| | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
++| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | \--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
++| +--- org.jetbrains.compose.material:material-icons-extended:1.6.10
++| | \--- androidx.compose.material:material-icons-extended:1.6.7
++| | \--- androidx.compose.material:material-icons-extended-android:1.6.7
++| | +--- androidx.compose.material:material-icons-core:1.6.7 (*)
++| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | +--- androidx.compose.material:material:1.6.7 (c)
++| | +--- androidx.compose.material:material-icons-core:1.6.7 (c)
++| | \--- androidx.compose.material:material-ripple:1.6.7 (c)
++| +--- org.jetbrains.compose.runtime:runtime:1.6.10 (*)
+| +--- co.touchlab:kermit:2.0.3 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- com.github.bitfireAT:dav4jvm:2.2.1
@@ -316,23 +633,7 @@
+| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14:2.0.3
+| | \--- org.slf4j:slf4j-api:2.0.3
-+| \--- androidx.core:core-ktx:1.9.0 -> 1.13.0
-+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| +--- androidx.core:core:1.13.0
-+| | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
-+| | +--- androidx.annotation:annotation-experimental:1.4.0 -> 1.4.1 (*)
-+| | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | +--- androidx.concurrent:concurrent-futures:1.0.0 -> 1.1.0 (*)
-+| | +--- androidx.interpolator:interpolator:1.0.0
-+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.8.0 (*)
-+| | +--- androidx.lifecycle:lifecycle-runtime:2.6.2 -> 2.8.1 (*)
-+| | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
-+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | \--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | \--- androidx.core:core-ktx:1.13.0 (c)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| \--- androidx.core:core:1.13.0 (c)
++| \--- androidx.core:core-ktx:1.9.0 -> 1.13.0 (*)
++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.4.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.4.1 (*)
@@ -340,44 +641,7 @@
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.4.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 2.0.0 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.7.0
-+| | +--- androidx.activity:activity:1.7.0 -> 1.9.0
-+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | | +--- androidx.core:core:1.13.0 (*)
-+| | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
-+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 -> 2.8.1
-+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.8.0 (*)
-+| | | | +--- androidx.core:core-ktx:1.2.0 -> 1.13.0 (*)
-+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (*)
-+| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (*)
-+| | | | +--- androidx.savedstate:savedstate:1.2.1
-+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*)
-+| | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 -> 2.8.1 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
-+| | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
-+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
-+| | | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
-+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
-+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
-+| | | +--- androidx.tracing:tracing:1.0.0 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | +--- androidx.activity:activity-compose:1.9.0 (c)
-+| | | \--- androidx.activity:activity-ktx:1.9.0 (c)
++| | +--- androidx.activity:activity:1.7.0 -> 1.9.0 (*)
+| | +--- androidx.annotation:annotation:1.3.0 -> 1.8.0 (*)
+| | +--- androidx.appcompat:appcompat-resources:1.7.0
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
@@ -404,13 +668,7 @@
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.13.0 (*)
+| | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
-+| | +--- androidx.emoji2:emoji2:1.3.0
-+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
-+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
-+| | | +--- androidx.core:core:1.3.0 -> 1.13.0 (*)
-+| | | +--- androidx.lifecycle:lifecycle-process:2.4.1 -> 2.8.1 (*)
-+| | | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
-+| | | \--- androidx.emoji2:emoji2-views-helper:1.3.0 (c)
++| | +--- androidx.emoji2:emoji2:1.3.0 (*)
+| | +--- androidx.emoji2:emoji2-views-helper:1.2.0 -> 1.3.0
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.13.0 (*)
@@ -463,7 +721,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -477,23 +735,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
-+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.8.1
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
-+| | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
++| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.8.1 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.12.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (c)
@@ -536,9 +778,7 @@
+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
-+| | | +--- androidx.customview:customview-poolingcontainer:1.0.0
-+| | | | +--- androidx.core:core-ktx:1.5.0 -> 1.13.0 (*)
-+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 2.0.0 (*)
++| | | +--- androidx.customview:customview-poolingcontainer:1.0.0 (*)
+| | | \--- androidx.viewpager2:viewpager2:1.1.0-beta02 (c)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*)
+| | +--- androidx.transition:transition:1.5.0
@@ -594,21 +834,8 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*)
++--- androidx.fragment:fragment-ktx:1.7.1
-+| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0
-+| | +--- androidx.activity:activity:1.9.0 (*)
-+| | +--- androidx.core:core-ktx:1.13.0 (*)
-+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.1 (*)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.1 (*)
-+| | +--- androidx.savedstate:savedstate-ktx:1.2.1
-+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
-+| | | \--- androidx.savedstate:savedstate:1.2.1 (c)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.activity:activity:1.9.0 (c)
-+| | \--- androidx.activity:activity-compose:1.9.0 (c)
-+| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.0
-+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | \--- androidx.collection:collection:1.4.0 (c)
++| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0 (*)
++| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.0 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.13.0 (*)
+| +--- androidx.fragment:fragment:1.7.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.1 (*)
@@ -652,219 +879,7 @@
++--- com.github.franmontiel:PersistentCookieJar:1.0.1
+| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*)
++--- com.google.android.material:material:1.12.0 (*)
-++--- androidx.compose.material3:material3 -> 1.2.1
-+| \--- androidx.compose.material3:material3-android:1.2.1
-+| +--- androidx.activity:activity-compose:1.5.0 -> 1.9.0
-+| | +--- androidx.activity:activity-ktx:1.9.0 (*)
-+| | +--- androidx.compose.runtime:runtime:1.0.1 -> 1.6.7 (*)
-+| | +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.6.7
-+| | | \--- androidx.compose.runtime:runtime-saveable-android:1.6.7
-+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (c)
-+| | | \--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
-+| | +--- androidx.compose.ui:ui:1.0.1 -> 1.6.7
-+| | | \--- androidx.compose.ui:ui-android:1.6.7
-+| | | +--- androidx.activity:activity-ktx:1.7.0 -> 1.9.0 (*)
-+| | | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
-+| | | +--- androidx.autofill:autofill:1.0.0
-+| | | | \--- androidx.core:core:1.1.0 -> 1.13.0 (*)
-+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | | +--- androidx.collection:collection:1.4.0 (*)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | +--- androidx.compose.runtime:runtime-saveable:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-geometry:1.6.7
-+| | | | \--- androidx.compose.ui:ui-geometry-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.2.1 -> 1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7
-+| | | | | \--- androidx.compose.ui:ui-util-android:1.6.7
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-graphics:1.6.7
-+| | | | \--- androidx.compose.ui:ui-graphics-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.7.0 -> 1.8.0 (*)
-+| | | | +--- androidx.collection:collection:1.4.0 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7
-+| | | | | \--- androidx.compose.ui:ui-unit-android:1.6.7
-+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | | +--- androidx.collection:collection-ktx:1.2.0 -> 1.4.0 (*)
-+| | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
-+| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-text:1.6.7
-+| | | | \--- androidx.compose.ui:ui-text-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | +--- androidx.compose.runtime:runtime-saveable:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
-+| | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
-+| | | +--- androidx.customview:customview-poolingcontainer:1.0.0 (*)
-+| | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
-+| | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
-+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
-+| | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | \--- androidx.compose.foundation:foundation:1.4.0 -> 1.6.7 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.activity:activity:1.9.0 (c)
-+| | \--- androidx.activity:activity-ktx:1.9.0 (c)
-+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| +--- androidx.annotation:annotation-experimental:1.4.0 -> 1.4.1 (*)
-+| +--- androidx.collection:collection:1.4.0 (*)
-+| +--- androidx.compose.animation:animation-core:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.animation:animation-core-android:1.6.7
-+| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | \--- androidx.compose.animation:animation:1.6.7 (c)
-+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.foundation:foundation-android:1.6.7
-+| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | +--- androidx.compose.animation:animation:1.6.7
-+| | | \--- androidx.compose.animation:animation-android:1.6.7
-+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | +--- androidx.compose.animation:animation-core:1.6.7 (*)
-+| | | +--- androidx.compose.foundation:foundation-layout:1.6.7
-+| | | | \--- androidx.compose.foundation:foundation-layout-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | +--- androidx.compose.animation:animation-core:1.2.1 -> 1.6.7 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | \--- androidx.compose.foundation:foundation:1.6.7 (c)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | \--- androidx.compose.animation:animation-core:1.6.7 (c)
-+| | +--- androidx.compose.foundation:foundation-layout:1.6.7 (*)
-+| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-text:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
-+| | +--- androidx.emoji2:emoji2:1.3.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | \--- androidx.compose.foundation:foundation-layout:1.6.7 (c)
-+| +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.material:material-icons-core-android:1.6.7
-+| | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.compose.material:material:1.6.7 (c)
-+| | +--- androidx.compose.material:material-icons-extended:1.6.7 (c)
-+| | \--- androidx.compose.material:material-ripple:1.6.7 (c)
-+| +--- androidx.compose.material:material-ripple:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.material:material-ripple-android:1.6.7
-+| | +--- androidx.compose.animation:animation:1.6.7 (*)
-+| | +--- androidx.compose.foundation:foundation:1.6.7 (*)
-+| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.compose.material:material:1.6.7 (c)
-+| | +--- androidx.compose.material:material-icons-core:1.6.7 (c)
-+| | \--- androidx.compose.material:material-icons-extended:1.6.7 (c)
-+| +--- androidx.compose.runtime:runtime:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.ui:ui-graphics:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.ui:ui-text:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.ui:ui-util:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.lifecycle:lifecycle-common-java8:2.6.1 -> 2.8.1
-+| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (*)
-+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
-+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
-+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
-+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
-+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
+++--- androidx.compose.material3:material3 -> 1.2.1 (*)
++--- androidx.constraintlayout:constraintlayout:2.1.4 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
@@ -883,7 +898,7 @@
+| | +--- androidx.core:core:1.1.0 -> 1.13.0 (*)
+| | +--- androidx.window:window:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.0 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.8.0 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | \--- androidx.core:core:1.3.2 -> 1.13.0 (*)
@@ -931,7 +946,7 @@
++--- androidx.work:work-runtime-ktx:2.8.1
+| +--- androidx.work:work-runtime:2.8.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*)
-+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
@@ -964,6 +979,7 @@
+| +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
+| +--- androidx.compose.ui:ui:1.6.7 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| +--- androidx.compose.ui:ui-tooling-preview-android:1.6.7 (c)
+| +--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
@@ -973,7 +989,6 @@
+| +--- androidx.compose.material:material-icons-extended-android:1.6.7 (c)
+| +--- androidx.compose.material3:material3-android:1.2.1 (c)
+| +--- androidx.compose.ui:ui-android:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-tooling-preview-android:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-android:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable-android:1.6.7 (c)
+| +--- androidx.compose.ui:ui-util-android:1.6.7 (c)
@@ -1013,7 +1028,6 @@
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
+| +--- androidx.savedstate:savedstate:1.2.1 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
+| +--- androidx.compose.material:material-icons-core:1.6.7 (c)
+| +--- androidx.compose.material:material-icons-extended:1.6.7 (c)
+| \--- androidx.compose.material:material-ripple:1.6.7 (c)
@@ -1026,14 +1040,7 @@
+| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++--- androidx.activity:activity-compose:1.9.0 (*)
-++--- androidx.compose.material:material-icons-extended -> 1.6.7
-+| \--- androidx.compose.material:material-icons-extended-android:1.6.7
-+| +--- androidx.compose.material:material-icons-core:1.6.7 (*)
-+| +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| +--- androidx.compose.material:material:1.6.7 (c)
-+| +--- androidx.compose.material:material-icons-core:1.6.7 (c)
-+| \--- androidx.compose.material:material-ripple:1.6.7 (c)
+++--- androidx.compose.material:material-icons-extended -> 1.6.7 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1
+| \--- androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*)
@@ -1070,23 +1077,13 @@
+| +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
+| \--- androidx.compose.ui:ui-unit:1.6.7 (c)
++--- androidx.compose.ui:ui-tooling-preview -> 1.6.7
-+| \--- androidx.compose.ui:ui-tooling-preview-android:1.6.7
-+| +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
-+| +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| +--- androidx.compose.ui:ui:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| \--- androidx.compose.ui:ui-tooling-preview-android:1.6.7 (*)
++--- io.coil-kt:coil-compose:2.6.0
+| +--- io.coil-kt:coil-compose-base:2.6.0
+| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.0 (*)
+| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0
+| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.6.7 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 2.0.0 (*)
+| | +--- io.coil-kt:coil-base:2.6.0
+| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.0 (*)
@@ -1097,7 +1094,7 @@
+| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.8.1 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | \--- com.squareup.okio:okio:3.8.0 (*)
@@ -1124,15 +1121,15 @@
++--- com.google.accompanist:accompanist-flowlayout:0.34.0
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
+| +--- androidx.compose.ui:ui-util:1.6.0 -> 1.6.7 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
++--- com.google.accompanist:accompanist-permissions:0.34.0
+| +--- androidx.activity:activity-compose:1.7.2 -> 1.9.0 (*)
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+\--- com.google.accompanist:accompanist-systemuicontroller:0.34.0
+ +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*)
+ +--- androidx.compose.ui:ui:1.6.0 -> 1.6.7 (*)
-+ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
diff --git a/deps_googleplay.txt b/deps_googleplay.txt
index 9c2080c9e..9b62e1280 100644
--- a/deps_googleplay.txt
+++ b/deps_googleplay.txt
@@ -28,18 +28,15 @@
+| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
-+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0
++| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0
+| | | +--- org.jetbrains:annotations:23.0.0
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (c)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 (c)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (c)
-+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 (c)
-+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
-+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.0
-+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0 (c)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0 (c)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (c)
++| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.0 (c)
++| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -64,10 +61,10 @@
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*)
-+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0 (*)
++| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -86,14 +83,17 @@
+| \--- androidx.databinding:databinding-common:8.4.1
++--- androidx.databinding:databinding-ktx:8.4.1
+| +--- androidx.databinding:databinding-runtime:8.4.1 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 2.0.0
++| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
++| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.0
++| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.8.0 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.1
+| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
@@ -145,7 +145,7 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
+| | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
@@ -197,8 +197,8 @@
+| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -224,9 +224,9 @@
++--- com.google.firebase:firebase-crashlytics -> 19.0.0
+| +--- com.google.firebase:firebase-sessions:2.0.0
+| | +--- com.google.firebase:firebase-common:21.0.0
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4 -> 1.7.3
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4 -> 1.8.0
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.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.0 (*)
@@ -267,7 +267,7 @@
+| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
+| | | | | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c)
+| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
+| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -311,7 +311,7 @@
+| | | | | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
+| | | | | \--- androidx.fragment:fragment-ktx:1.7.1 (c)
-+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 (*)
++| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| | | +--- com.google.firebase:firebase-components:18.0.0
+| | | | +--- com.google.firebase:firebase-annotations:16.2.0
+| | | | | \--- javax.inject:javax.inject:1
@@ -369,11 +369,11 @@
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.0.0 (*)
+| | | +--- androidx.datastore:datastore:1.0.0
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.7.3 (*)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.8.0 (*)
+| | | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | | \--- androidx.datastore:datastore-core:1.0.0
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.7.3 (*)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.8.0 (*)
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | | \--- androidx.datastore:datastore-preferences-core:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.0.0 (*)
@@ -423,7 +423,7 @@
+| | | | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.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.8.0 (*)
@@ -435,7 +435,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.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
++| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 (c)
+| | | +--- com.google.android.gms:play-services-basement:18.3.0 -> 18.4.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:22.0.0 (*)
@@ -497,8 +497,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.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
++--- com.google.android.gms:play-services-maps:18.2.0
+| +--- androidx.fragment:fragment:1.0.0 -> 1.7.1 (*)
+| +--- com.google.android.gms:play-services-base:18.0.1 -> 18.5.0 (*)
@@ -516,12 +516,12 @@
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.2.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 2.0.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.0 -> 2.0.0 (*)
-+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0 -> 1.7.3 (*)
++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0 -> 1.8.0 (*)
++--- com.google.android.play:core:1.10.3
++--- com.google.android.play:core-ktx:1.8.1
+| +--- com.google.android.play:core:1.8.0 -> 1.10.3
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 -> 2.0.0 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6 -> 1.8.0 (*)
+| +--- androidx.core:core:1.1.0 -> 1.13.0 (*)
+| \--- androidx.fragment:fragment:1.1.0 -> 1.7.1 (*)
++--- com.google.android.gms:play-services-oss-licenses:17.1.0
@@ -608,8 +608,8 @@
+| | +--- org.jetbrains.kotlinx:atomicfu:0.17.0
+| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | \--- androidx.room:room-common:2.7.0-alpha03 (c)
+| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3
+| | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.3
@@ -633,17 +633,275 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- project :kmp
++| +--- androidx.compose.ui:ui-tooling-preview-android:1.6.7
++| | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
++| | +--- androidx.compose.runtime:runtime:1.6.7
++| | | \--- androidx.compose.runtime:runtime-android:1.6.7
++| | | +--- androidx.collection:collection:1.4.0 (*)
++| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.8.0 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
++| | | \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++| | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
+| +--- project :data (*)
-+| +--- org.jetbrains.compose.runtime:runtime:1.6.10
-+| | \--- androidx.compose.runtime:runtime:1.6.7
-+| | \--- androidx.compose.runtime:runtime-android:1.6.7
++| +--- org.jetbrains.compose.components:components-resources:1.6.10
++| | \--- org.jetbrains.compose.components:components-resources-android:1.6.10
++| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 -> 2.0.0 (*)
++| | +--- org.jetbrains.compose.runtime:runtime:1.6.10
++| | | \--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | +--- org.jetbrains.compose.foundation:foundation:1.6.10
++| | | \--- androidx.compose.foundation:foundation:1.6.7
++| | | \--- androidx.compose.foundation:foundation-android:1.6.7
++| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | +--- androidx.collection:collection:1.4.0 (*)
++| | | +--- androidx.compose.animation:animation:1.6.7
++| | | | \--- androidx.compose.animation:animation-android:1.6.7
++| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | +--- androidx.compose.animation:animation-core:1.6.7
++| | | | | \--- androidx.compose.animation:animation-core-android:1.6.7
++| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui:1.6.7
++| | | | | | \--- androidx.compose.ui:ui-android:1.6.7
++| | | | | | +--- androidx.activity:activity-ktx:1.7.0 -> 1.9.0
++| | | | | | | +--- androidx.activity:activity:1.9.0 (*)
++| | | | | | | +--- androidx.core:core-ktx:1.13.0 (*)
++| | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.1 (*)
++| | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.1
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
++| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
++| | | | | | | | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
++| | | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1
++| | | | | | | | +--- androidx.savedstate:savedstate:1.2.1 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
++| | | | | | | | \--- androidx.savedstate:savedstate:1.2.1 (c)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- androidx.activity:activity:1.9.0 (c)
++| | | | | | | \--- androidx.activity:activity-compose:1.9.0 (c)
++| | | | | | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
++| | | | | | +--- androidx.autofill:autofill:1.0.0
++| | | | | | | \--- androidx.core:core:1.1.0 -> 1.13.0 (*)
++| | | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | +--- androidx.compose.runtime:runtime-saveable:1.6.7
++| | | | | | | \--- androidx.compose.runtime:runtime-saveable-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (c)
++| | | | | | | \--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7
++| | | | | | | \--- androidx.compose.ui:ui-geometry-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.2.1 -> 1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7
++| | | | | | | | \--- androidx.compose.ui:ui-util-android:1.6.7
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7
++| | | | | | | \--- androidx.compose.ui:ui-graphics-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.7.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7
++| | | | | | | | \--- androidx.compose.ui:ui-unit-android:1.6.7
++| | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | | +--- androidx.collection:collection-ktx:1.2.0 -> 1.4.0
++| | | | | | | | | +--- androidx.collection:collection:1.4.0 (*)
++| | | | | | | | | \--- androidx.collection:collection:1.4.0 (c)
++| | | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
++| | | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-text:1.6.7
++| | | | | | | \--- androidx.compose.ui:ui-text-android:1.6.7
++| | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | | | +--- androidx.compose.runtime:runtime-saveable:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
++| | | | | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
++| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
++| | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
++| | | | | | +--- androidx.customview:customview-poolingcontainer:1.0.0
++| | | | | | | +--- androidx.core:core-ktx:1.5.0 -> 1.13.0 (*)
++| | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 2.0.0 (*)
++| | | | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
++| | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
++| | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | | | | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
++| | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
++| | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.8.0 (*)
++| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
++| | | | | | +--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| | | | | | \--- androidx.compose.foundation:foundation:1.4.0 -> 1.6.7 (c)
++| | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.8.0 (*)
++| | | | | \--- androidx.compose.animation:animation:1.6.7 (c)
++| | | | +--- androidx.compose.foundation:foundation-layout:1.6.7
++| | | | | \--- androidx.compose.foundation:foundation-layout-android:1.6.7
++| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | | | +--- androidx.compose.animation:animation-core:1.2.1 -> 1.6.7 (*)
++| | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
++| | | | | \--- androidx.compose.foundation:foundation:1.6.7 (c)
++| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
++| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | | \--- androidx.compose.animation:animation-core:1.6.7 (c)
++| | | +--- androidx.compose.foundation:foundation-layout:1.6.7 (*)
++| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui-text:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
++| | | +--- androidx.emoji2:emoji2:1.3.0 (*)
++| | | \--- androidx.compose.foundation:foundation-layout:1.6.7 (c)
++| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
++| +--- org.jetbrains.compose.foundation:foundation:1.6.10 (*)
++| +--- org.jetbrains.compose.material3:material3:1.6.10
++| | \--- androidx.compose.material3:material3:1.2.1
++| | \--- androidx.compose.material3:material3-android:1.2.1
++| | +--- androidx.activity:activity-compose:1.5.0 -> 1.9.0
++| | | +--- androidx.activity:activity-ktx:1.9.0 (*)
++| | | +--- androidx.compose.runtime:runtime:1.0.1 -> 1.6.7 (*)
++| | | +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.6.7 (*)
++| | | +--- androidx.compose.ui:ui:1.0.1 -> 1.6.7 (*)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | +--- androidx.activity:activity:1.9.0 (c)
++| | | \--- androidx.activity:activity-ktx:1.9.0 (c)
++| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | +--- androidx.annotation:annotation-experimental:1.4.0 -> 1.4.1 (*)
+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
-+| | \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++| | +--- androidx.compose.animation:animation-core:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.7
++| | | \--- androidx.compose.material:material-icons-core-android:1.6.7
++| | | +--- androidx.compose.ui:ui:1.6.7 (*)
++| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
++| | | +--- androidx.compose.material:material:1.6.7 (c)
++| | | +--- androidx.compose.material:material-icons-extended:1.6.7 (c)
++| | | \--- androidx.compose.material:material-ripple:1.6.7 (c)
++| | +--- androidx.compose.material:material-ripple:1.6.0 -> 1.6.7
++| | | \--- androidx.compose.material:material-ripple-android:1.6.7
++| | | +--- androidx.compose.animation:animation:1.6.7 (*)
++| | | +--- androidx.compose.foundation:foundation:1.6.7 (*)
++| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
++| | | +--- androidx.compose.material:material:1.6.7 (c)
++| | | +--- androidx.compose.material:material-icons-core:1.6.7 (c)
++| | | \--- androidx.compose.material:material-icons-extended:1.6.7 (c)
++| | +--- androidx.compose.runtime:runtime:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.ui:ui-graphics:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.ui:ui-text:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.compose.ui:ui-util:1.6.0 -> 1.6.7 (*)
++| | +--- androidx.lifecycle:lifecycle-common-java8:2.6.1 -> 2.8.1
++| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
++| | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (*)
++| | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
++| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
++| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
++| | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
++| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
++| | \--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
++| +--- org.jetbrains.compose.material:material-icons-extended:1.6.10
++| | \--- androidx.compose.material:material-icons-extended:1.6.7
++| | \--- androidx.compose.material:material-icons-extended-android:1.6.7
++| | +--- androidx.compose.material:material-icons-core:1.6.7 (*)
++| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
++| | +--- androidx.compose.material:material:1.6.7 (c)
++| | +--- androidx.compose.material:material-icons-core:1.6.7 (c)
++| | \--- androidx.compose.material:material-ripple:1.6.7 (c)
++| +--- org.jetbrains.compose.runtime:runtime:1.6.10 (*)
+| +--- co.touchlab:kermit:2.0.3 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- com.github.bitfireAT:dav4jvm:2.2.1
@@ -703,7 +961,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*)
++| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
@@ -717,23 +975,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
-+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.8.1
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
-+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
-+| | \--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
++| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.8.1 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.12.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (c)
@@ -767,9 +1009,7 @@
+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
-+| | | +--- androidx.customview:customview-poolingcontainer:1.0.0
-+| | | | +--- androidx.core:core-ktx:1.5.0 -> 1.13.0 (*)
-+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 2.0.0 (*)
++| | | +--- androidx.customview:customview-poolingcontainer:1.0.0 (*)
+| | | \--- androidx.viewpager2:viewpager2:1.1.0-beta02 (c)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*)
+| | +--- androidx.transition:transition:1.5.0
@@ -825,21 +1065,8 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*)
++--- androidx.fragment:fragment-ktx:1.7.1
-+| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0
-+| | +--- androidx.activity:activity:1.9.0 (*)
-+| | +--- androidx.core:core-ktx:1.13.0 (*)
-+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.8.1 (*)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.8.1 (*)
-+| | +--- androidx.savedstate:savedstate-ktx:1.2.1
-+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
-+| | | \--- androidx.savedstate:savedstate:1.2.1 (c)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.activity:activity:1.9.0 (c)
-+| | \--- androidx.activity:activity-compose:1.9.0 (c)
-+| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.0
-+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | \--- androidx.collection:collection:1.4.0 (c)
++| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0 (*)
++| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.0 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.13.0 (*)
+| +--- androidx.fragment:fragment:1.7.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.1 (*)
@@ -883,219 +1110,7 @@
++--- com.github.franmontiel:PersistentCookieJar:1.0.1
+| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*)
++--- com.google.android.material:material:1.12.0 (*)
-++--- androidx.compose.material3:material3 -> 1.2.1
-+| \--- androidx.compose.material3:material3-android:1.2.1
-+| +--- androidx.activity:activity-compose:1.5.0 -> 1.9.0
-+| | +--- androidx.activity:activity-ktx:1.9.0 (*)
-+| | +--- androidx.compose.runtime:runtime:1.0.1 -> 1.6.7 (*)
-+| | +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.6.7
-+| | | \--- androidx.compose.runtime:runtime-saveable-android:1.6.7
-+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (c)
-+| | | \--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
-+| | +--- androidx.compose.ui:ui:1.0.1 -> 1.6.7
-+| | | \--- androidx.compose.ui:ui-android:1.6.7
-+| | | +--- androidx.activity:activity-ktx:1.7.0 -> 1.9.0 (*)
-+| | | +--- androidx.annotation:annotation:1.6.0 -> 1.8.0 (*)
-+| | | +--- androidx.autofill:autofill:1.0.0
-+| | | | \--- androidx.core:core:1.1.0 -> 1.13.0 (*)
-+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | | +--- androidx.collection:collection:1.4.0 (*)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | +--- androidx.compose.runtime:runtime-saveable:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-geometry:1.6.7
-+| | | | \--- androidx.compose.ui:ui-geometry-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.2.1 -> 1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7
-+| | | | | \--- androidx.compose.ui:ui-util-android:1.6.7
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-graphics:1.6.7
-+| | | | \--- androidx.compose.ui:ui-graphics-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.7.0 -> 1.8.0 (*)
-+| | | | +--- androidx.collection:collection:1.4.0 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7
-+| | | | | \--- androidx.compose.ui:ui-unit-android:1.6.7
-+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | | +--- androidx.collection:collection-ktx:1.2.0 -> 1.4.0 (*)
-+| | | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
-+| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-text:1.6.7
-+| | | | \--- androidx.compose.ui:ui-text-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | +--- androidx.compose.runtime:runtime-saveable:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
-+| | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | | \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
-+| | | +--- androidx.customview:customview-poolingcontainer:1.0.0 (*)
-+| | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
-+| | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
-+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
-+| | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | | +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| | | +--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
-+| | | \--- androidx.compose.foundation:foundation:1.4.0 -> 1.6.7 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.activity:activity:1.9.0 (c)
-+| | \--- androidx.activity:activity-ktx:1.9.0 (c)
-+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| +--- androidx.annotation:annotation-experimental:1.4.0 -> 1.4.1 (*)
-+| +--- androidx.collection:collection:1.4.0 (*)
-+| +--- androidx.compose.animation:animation-core:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.animation:animation-core-android:1.6.7
-+| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-unit:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
-+| | \--- androidx.compose.animation:animation:1.6.7 (c)
-+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.foundation:foundation-android:1.6.7
-+| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | +--- androidx.collection:collection:1.4.0 (*)
-+| | +--- androidx.compose.animation:animation:1.6.7
-+| | | \--- androidx.compose.animation:animation-android:1.6.7
-+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | +--- androidx.compose.animation:animation-core:1.6.7 (*)
-+| | | +--- androidx.compose.foundation:foundation-layout:1.6.7
-+| | | | \--- androidx.compose.foundation:foundation-layout-android:1.6.7
-+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | | | +--- androidx.compose.animation:animation-core:1.2.1 -> 1.6.7 (*)
-+| | | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
-+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | | \--- androidx.compose.foundation:foundation:1.6.7 (c)
-+| | | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-geometry:1.6.7 (*)
-+| | | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | | \--- androidx.compose.animation:animation-core:1.6.7 (c)
-+| | +--- androidx.compose.foundation:foundation-layout:1.6.7 (*)
-+| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-text:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | +--- androidx.core:core:1.12.0 -> 1.13.0 (*)
-+| | +--- androidx.emoji2:emoji2:1.3.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | \--- androidx.compose.foundation:foundation-layout:1.6.7 (c)
-+| +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.material:material-icons-core-android:1.6.7
-+| | +--- androidx.compose.ui:ui:1.6.7 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.compose.material:material:1.6.7 (c)
-+| | +--- androidx.compose.material:material-icons-extended:1.6.7 (c)
-+| | \--- androidx.compose.material:material-ripple:1.6.7 (c)
-+| +--- androidx.compose.material:material-ripple:1.6.0 -> 1.6.7
-+| | \--- androidx.compose.material:material-ripple-android:1.6.7
-+| | +--- androidx.compose.animation:animation:1.6.7 (*)
-+| | +--- androidx.compose.foundation:foundation:1.6.7 (*)
-+| | +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| | +--- androidx.compose.ui:ui-util:1.6.7 (*)
-+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| | +--- androidx.compose.material:material:1.6.7 (c)
-+| | +--- androidx.compose.material:material-icons-core:1.6.7 (c)
-+| | \--- androidx.compose.material:material-icons-extended:1.6.7 (c)
-+| +--- androidx.compose.runtime:runtime:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.ui:ui-graphics:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.ui:ui-text:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.compose.ui:ui-util:1.6.0 -> 1.6.7 (*)
-+| +--- androidx.lifecycle:lifecycle-common-java8:2.6.1 -> 2.8.1
-+| | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
-+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (*)
-+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-process:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-service:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 (c)
-+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 (c)
-+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 (c)
-+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
-+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
-+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
-+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
+++--- androidx.compose.material3:material3 -> 1.2.1 (*)
++--- androidx.constraintlayout:constraintlayout:2.1.4 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
@@ -1114,7 +1129,7 @@
+| | +--- androidx.core:core:1.1.0 -> 1.13.0 (*)
+| | +--- androidx.window:window:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.0 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.8.0 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | \--- androidx.core:core:1.3.2 -> 1.13.0 (*)
@@ -1160,7 +1175,7 @@
++--- androidx.work:work-runtime-ktx:2.8.1
+| +--- androidx.work:work-runtime:2.8.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*)
-+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
@@ -1193,6 +1208,7 @@
+| +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
+| +--- androidx.compose.ui:ui:1.6.7 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.6.7 (c)
++| +--- androidx.compose.ui:ui-tooling-preview-android:1.6.7 (c)
+| +--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
@@ -1202,7 +1218,6 @@
+| +--- androidx.compose.material:material-icons-extended-android:1.6.7 (c)
+| +--- androidx.compose.material3:material3-android:1.2.1 (c)
+| +--- androidx.compose.ui:ui-android:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-tooling-preview-android:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-android:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable-android:1.6.7 (c)
+| +--- androidx.compose.ui:ui-util-android:1.6.7 (c)
@@ -1242,7 +1257,6 @@
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.8.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
+| +--- androidx.savedstate:savedstate:1.2.1 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
+| +--- androidx.compose.material:material-icons-core:1.6.7 (c)
+| +--- androidx.compose.material:material-icons-extended:1.6.7 (c)
+| \--- androidx.compose.material:material-ripple:1.6.7 (c)
@@ -1255,14 +1269,7 @@
+| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++--- androidx.activity:activity-compose:1.9.0 (*)
-++--- androidx.compose.material:material-icons-extended -> 1.6.7
-+| \--- androidx.compose.material:material-icons-extended-android:1.6.7
-+| +--- androidx.compose.material:material-icons-core:1.6.7 (*)
-+| +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| +--- androidx.compose.material:material:1.6.7 (c)
-+| +--- androidx.compose.material:material-icons-core:1.6.7 (c)
-+| \--- androidx.compose.material:material-ripple:1.6.7 (c)
+++--- androidx.compose.material:material-icons-extended -> 1.6.7 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1
+| \--- androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*)
@@ -1299,23 +1306,13 @@
+| +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
+| \--- androidx.compose.ui:ui-unit:1.6.7 (c)
++--- androidx.compose.ui:ui-tooling-preview -> 1.6.7
-+| \--- androidx.compose.ui:ui-tooling-preview-android:1.6.7
-+| +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
-+| +--- androidx.compose.runtime:runtime:1.6.7 (*)
-+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 2.0.0 (*)
-+| +--- androidx.compose.ui:ui:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-graphics:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-text:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-unit:1.6.7 (c)
-+| +--- androidx.compose.ui:ui-util:1.6.7 (c)
-+| \--- androidx.compose.ui:ui-viewbinding:1.6.7 (c)
++| \--- androidx.compose.ui:ui-tooling-preview-android:1.6.7 (*)
++--- io.coil-kt:coil-compose:2.6.0
+| +--- io.coil-kt:coil-compose-base:2.6.0
+| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.0 (*)
+| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0
+| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.6.7 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 2.0.0 (*)
+| | +--- io.coil-kt:coil-base:2.6.0
+| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.0 (*)
@@ -1326,7 +1323,7 @@
+| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.8.1 (*)
-+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
++| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.8.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | \--- com.squareup.okio:okio:3.8.0 (*)
@@ -1353,15 +1350,15 @@
++--- com.google.accompanist:accompanist-flowlayout:0.34.0
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
+| +--- androidx.compose.ui:ui-util:1.6.0 -> 1.6.7 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
++--- com.google.accompanist:accompanist-permissions:0.34.0
+| +--- androidx.activity:activity-compose:1.7.2 -> 1.9.0 (*)
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
-+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+\--- com.google.accompanist:accompanist-systemuicontroller:0.34.0
+ +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*)
+ +--- androidx.compose.ui:ui:1.6.0 -> 1.6.7 (*)
-+ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.8.0 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 6ae12a9a3..c9186938c 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -158,6 +158,7 @@ retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.re
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" }
+androidx-ui-tooling-preview-android = { group = "androidx.compose.ui", name = "ui-tooling-preview-android", version = "1.6.7" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
diff --git a/kmp/build.gradle.kts b/kmp/build.gradle.kts
index a76a722a0..01bd095fa 100644
--- a/kmp/build.gradle.kts
+++ b/kmp/build.gradle.kts
@@ -21,8 +21,15 @@ kotlin {
}
jvm()
sourceSets {
+ androidMain.dependencies {
+ implementation(libs.androidx.ui.tooling.preview.android)
+ }
commonMain.dependencies {
implementation(projects.data)
+ implementation(compose.components.resources)
+ implementation(compose.foundation)
+ implementation(compose.material3)
+ implementation(compose.materialIconsExtended)
implementation(compose.runtime)
implementation(libs.kermit)
}
@@ -44,6 +51,10 @@ android {
targetCompatibility = JavaVersion.VERSION_17
}
+ buildFeatures {
+ compose = true
+ }
+
dependencies {
debugImplementation(compose.uiTooling)
}
diff --git a/kmp/src/androidMain/kotlin/org/tasks/previews/SearchableFilterPickerPreviews.kt b/kmp/src/androidMain/kotlin/org/tasks/previews/SearchableFilterPickerPreviews.kt
new file mode 100644
index 000000000..3f9da4bf7
--- /dev/null
+++ b/kmp/src/androidMain/kotlin/org/tasks/previews/SearchableFilterPickerPreviews.kt
@@ -0,0 +1,51 @@
+package org.tasks.previews
+
+import android.content.res.Configuration
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.AllInbox
+import androidx.compose.material.icons.outlined.QuestionMark
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import org.tasks.compose.pickers.SearchableFilterPicker
+import org.tasks.filters.FilterImpl
+import org.tasks.filters.NavigationDrawerSubheader
+
+// this doesn't actually work yet b/c of multiplatform resources
+// https://github.com/JetBrains/compose-multiplatform/issues/4932
+
+@Preview(widthDp = 320)
+@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
+@Composable
+fun FilterPickerPreview() {
+ MaterialTheme(
+ colorScheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
+ ) {
+ SearchableFilterPicker(
+ filters = listOf(
+ FilterImpl("My Tasks", icon = 4),
+ NavigationDrawerSubheader(
+ "Filters",
+ false,
+ false,
+ NavigationDrawerSubheader.SubheaderType.PREFERENCE,
+ 0L,
+ ),
+ ),
+ query = "",
+ onQueryChange = {},
+ active = true,
+ selected = null,
+ onClick = {},
+ getIcon = { when (it.icon) {
+ 4 -> Icons.Outlined.AllInbox
+ else -> Icons.Outlined.QuestionMark
+ } },
+ getColor = { 0 },
+ dismiss = {},
+ )
+ }
+}
diff --git a/kmp/src/commonMain/composeResources/values/strings.xml b/kmp/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..54995964c
--- /dev/null
+++ b/kmp/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Search
+
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/compose/pickers/CheckableIconRow.kt b/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/CheckableIconRow.kt
similarity index 86%
rename from app/src/main/java/org/tasks/compose/pickers/CheckableIconRow.kt
rename to kmp/src/commonMain/kotlin/org/tasks/compose/pickers/CheckableIconRow.kt
index 964bf4776..db0f54e90 100644
--- a/app/src/main/java/org/tasks/compose/pickers/CheckableIconRow.kt
+++ b/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/CheckableIconRow.kt
@@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
-import androidx.compose.material.ContentAlpha
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check
import androidx.compose.material3.Icon
@@ -17,12 +16,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
@Composable
fun CheckableIconRow(
- icon: Painter,
+ icon: ImageVector,
tint: Color,
text: String,
selected: Boolean,
@@ -45,7 +44,7 @@ fun CheckableIconRow(
@Composable
fun CheckableIconRow(
- icon: Painter,
+ icon: ImageVector,
tint: Color,
selected: Boolean,
onClick: () -> Unit,
@@ -58,9 +57,9 @@ fun CheckableIconRow(
.clickable { onClick() }
) {
Icon(
- painter = icon,
+ imageVector = icon,
contentDescription = null,
- tint = tint.copy(alpha = ContentAlpha.medium),
+ tint = tint,
modifier = Modifier.padding(start = 16.dp, end = 32.dp, top = 12.dp, bottom = 12.dp),
)
Box(modifier = Modifier.weight(1f)) {
@@ -70,7 +69,7 @@ fun CheckableIconRow(
Icon(
imageVector = Icons.Outlined.Check,
contentDescription = null,
- tint = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium),
+ tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp),
)
} else {
diff --git a/app/src/main/java/org/tasks/compose/pickers/CollapsibleRow.kt b/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/CollapsibleRow.kt
similarity index 93%
rename from app/src/main/java/org/tasks/compose/pickers/CollapsibleRow.kt
rename to kmp/src/commonMain/kotlin/org/tasks/compose/pickers/CollapsibleRow.kt
index 641345342..7e539396f 100644
--- a/app/src/main/java/org/tasks/compose/pickers/CollapsibleRow.kt
+++ b/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/CollapsibleRow.kt
@@ -7,7 +7,6 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.ContentAlpha
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.KeyboardArrowUp
import androidx.compose.material3.Icon
@@ -49,7 +48,7 @@ fun CollapsibleRow(
Icon(
imageVector = Icons.Outlined.KeyboardArrowUp,
contentDescription = null,
- tint = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium),
+ tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.rotate(rotationAngle)
)
}
diff --git a/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/SearchableFilterPicker.kt b/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/SearchableFilterPicker.kt
new file mode 100644
index 000000000..7ae34633f
--- /dev/null
+++ b/kmp/src/commonMain/kotlin/org/tasks/compose/pickers/SearchableFilterPicker.kt
@@ -0,0 +1,157 @@
+package org.tasks.compose.pickers
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Clear
+import androidx.compose.material.icons.outlined.PeopleOutline
+import androidx.compose.material.icons.outlined.PermIdentity
+import androidx.compose.material.icons.outlined.Search
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.SearchBar
+import androidx.compose.material3.SearchBarDefaults
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment.Companion.CenterVertically
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.text.font.FontWeight
+import org.jetbrains.compose.resources.stringResource
+import org.tasks.filters.CaldavFilter
+import org.tasks.filters.Filter
+import org.tasks.filters.FilterListItem
+import org.tasks.filters.NavigationDrawerSubheader
+import tasks.kmp.generated.resources.Res
+import tasks.kmp.generated.resources.search
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun SearchableFilterPicker(
+ filters: List,
+ query: String,
+ onQueryChange: (String) -> Unit,
+ active: Boolean,
+ selected: Filter?,
+ onClick: (FilterListItem) -> Unit,
+ getIcon: @Composable (Filter) -> ImageVector,
+ getColor: (Filter) -> Int,
+ dismiss: () -> Unit,
+) {
+ val searching by remember(query) {
+ derivedStateOf {
+ query.isNotBlank()
+ }
+ }
+ val filtered by remember (filters, query) {
+ derivedStateOf {
+ filters.filter {
+ when (it) {
+ is NavigationDrawerSubheader -> true
+ is Filter -> {
+ it.title!!.contains(query, ignoreCase = true)
+ }
+ else -> throw IllegalArgumentException()
+ }
+ }
+ }
+ }
+ SearchBar(
+ colors = SearchBarDefaults.colors(
+ containerColor = MaterialTheme.colorScheme.surface,
+ inputFieldColors = TextFieldDefaults.colors(
+ focusedContainerColor = MaterialTheme.colorScheme.surface,
+ unfocusedContainerColor = MaterialTheme.colorScheme.surface,
+ )
+ ),
+ query = query,
+ onQueryChange = onQueryChange,
+ onSearch = {
+ // TODO: close keyboard?
+ },
+ leadingIcon = {
+ Icon(
+ imageVector = Icons.Outlined.Search,
+ contentDescription = null,
+ )
+ },
+ placeholder = {
+ Text(
+ text = stringResource(Res.string.search),
+ color = MaterialTheme.colorScheme.onSurface,
+ )
+ },
+ trailingIcon = {
+ if (searching) {
+ IconButton(onClick = { onQueryChange("") }) {
+ Icon(
+ imageVector = Icons.Outlined.Clear,
+ contentDescription = "Clear query",
+ )
+ }
+ }
+ },
+ active = active,
+ onActiveChange = {
+ when {
+ it -> {}
+ query.isNotBlank() -> onQueryChange("")
+ else -> dismiss()
+ }
+ },
+ content = {
+ Column(
+ modifier = Modifier.verticalScroll(rememberScrollState())
+ ) {
+ filtered.forEach { filter ->
+ when (filter) {
+ is NavigationDrawerSubheader -> {
+ CollapsibleRow(
+ text = filter.title!!,
+ collapsed = filter.isCollapsed,
+ onClick = { onClick(filter) },
+ )
+ }
+
+ is Filter -> {
+ CheckableIconRow(
+ icon = getIcon(filter),
+ tint = remember(filter) { Color(getColor(filter)) },
+ selected = filter == selected,
+ onClick = { onClick(filter) },
+ ) {
+ Row(verticalAlignment = CenterVertically) {
+ Text(
+ text = filter.title!!,
+ style = MaterialTheme.typography.bodyMedium.copy(
+ fontWeight = FontWeight.Medium
+ ),
+ modifier = Modifier.weight(1f),
+ )
+ if (filter is CaldavFilter && filter.principals > 0) {
+ Icon(
+ imageVector = when (filter.principals) {
+ in 2..Int.MAX_VALUE -> Icons.Outlined.PeopleOutline
+ else -> Icons.Outlined.PermIdentity
+ },
+ contentDescription = null,
+ )
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ )
+}