Add searchable filter picker

pull/2905/head
Alex Baker 4 months ago
parent f739cac8b4
commit 97c3852f2f

@ -211,7 +211,7 @@
<activity <activity
android:exported="true" android:exported="true"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:name=".widget.WidgetFilterSelectionActivity" android:name=".compose.FilterSelectionActivity"
android:taskAffinity="" android:taskAffinity=""
android:theme="@style/TranslucentDialog"/> android:theme="@style/TranslucentDialog"/>

@ -61,6 +61,8 @@ import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.calendars.CalendarPicker import org.tasks.calendars.CalendarPicker
import org.tasks.compose.BeastModeBanner 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.collectAsStateLifecycleAware
import org.tasks.compose.edit.CommentsRow import org.tasks.compose.edit.CommentsRow
import org.tasks.compose.edit.DescriptionRow import org.tasks.compose.edit.DescriptionRow
@ -86,8 +88,6 @@ import org.tasks.databinding.TaskEditTimerBinding
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.DateTimePicker import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DialogBuilder 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.dialogs.Linkify
import org.tasks.extensions.hideKeyboard import org.tasks.extensions.hideKeyboard
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
@ -140,6 +140,9 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
activity?.recreate() activity?.recreate()
} }
private val listPickerLauncher = registerForListPickerResult { filter ->
editViewModel.selectedList.update { filter }
}
val task: Task? val task: Task?
get() = BundleCompat.getParcelable(requireArguments(), EXTRA_TASK, Task::class.java) 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 return view
} }
@ -493,11 +493,11 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
list = list, list = list,
colorProvider = { chipProvider.getColor(it) }, colorProvider = { chipProvider.getColor(it) },
onClick = { onClick = {
newFilterPicker(list, true) listPickerLauncher.launch(
.show( context = context,
childFragmentManager, selectedFilter = list,
FRAG_TAG_GOOGLE_TASK_LIST_SELECTION listsOnly = true
) )
} }
) )
} }
@ -535,8 +535,6 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
const val EXTRA_TAGS = "extra_tags" const val EXTRA_TAGS = "extra_tags"
const val EXTRA_ALARMS = "extra_alarms" 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" const val FRAG_TAG_CALENDAR_PICKER = "frag_tag_calendar_picker"
private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker" private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker"
const val REQUEST_CODE_PICK_CALENDAR = 70 const val REQUEST_CODE_PICK_CALENDAR = 70

@ -53,7 +53,6 @@ import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.adapter.TaskAdapterProvider import com.todoroo.astrid.adapter.TaskAdapterProvider
import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_OLD_DUE_DATE import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_OLD_DUE_DATE
import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_TASK_ID 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.CustomFilter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.TagFilter import com.todoroo.astrid.api.TagFilter
@ -84,6 +83,8 @@ import org.tasks.activities.TagSettingsActivity
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity 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.SubscriptionNagBanner
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
@ -100,8 +101,6 @@ import org.tasks.data.withTransaction
import org.tasks.databinding.FragmentTaskListBinding import org.tasks.databinding.FragmentTaskListBinding
import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
import org.tasks.dialogs.DialogBuilder 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.PriorityPicker.Companion.newPriorityPicker
import org.tasks.dialogs.SortSettingsActivity import org.tasks.dialogs.SortSettingsActivity
import org.tasks.extensions.Context.openUri 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.hideKeyboard
import org.tasks.extensions.setOnQueryTextListener import org.tasks.extensions.setOnQueryTextListener
import org.tasks.filters.AstridOrderingFilter import org.tasks.filters.AstridOrderingFilter
import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.FilterImpl import org.tasks.filters.FilterImpl
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
@ -178,6 +178,13 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
private var mode: ActionMode? = null private var mode: ActionMode? = null
lateinit var themeColor: ThemeColor lateinit var themeColor: ThemeColor
private lateinit var binding: FragmentTaskListBinding private lateinit var binding: FragmentTaskListBinding
private val listPickerLauncher = registerForListPickerResult {
val selected = taskAdapter.getSelected()
lifecycleScope.launch {
taskMover.move(selected, it)
}
finishActionMode()
}
private val sortRequest = private val sortRequest =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
@ -334,13 +341,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
mainViewModel.setDrawerOpen(true) mainViewModel.setDrawerOpen(true)
} }
setupMenu(toolbar) setupMenu(toolbar)
childFragmentManager.setFilterPickerResultListener(this) {
val selected = taskAdapter.getSelected()
lifecycleScope.launch {
taskMover.move(selected, it)
}
finishActionMode()
}
binding.banner.setContent { binding.banner.setContent {
val context = LocalContext.current val context = LocalContext.current
val showBanner = listViewModel.state.collectAsStateLifecycleAware().value.begForSubscription val showBanner = listViewModel.state.collectAsStateLifecycleAware().value.begForSubscription
@ -756,8 +756,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
R.id.move_tasks -> { R.id.move_tasks -> {
lifecycleScope.launch { lifecycleScope.launch {
val singleFilter = taskMover.getSingleFilter(selected) val singleFilter = taskMover.getSingleFilter(selected)
newFilterPicker(singleFilter, true) listPickerLauncher.launch(
.show(childFragmentManager, FRAG_TAG_REMOTE_LIST_PICKER) context = requireActivity(),
selectedFilter = singleFilter,
listsOnly = true,
)
} }
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 EXTRA_SELECTED_TASK_IDS = "extra_selected_task_ids"
private const val VOICE_RECOGNITION_REQUEST_CODE = 1234 private const val VOICE_RECOGNITION_REQUEST_CODE = 1234
private const val EXTRA_FILTER = "extra_filter" 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_DATE_TIME_PICKER = "frag_tag_date_time_picker"
private const val FRAG_TAG_PRIORITY_PICKER = "frag_tag_priority_picker" private const val FRAG_TAG_PRIORITY_PICKER = "frag_tag_priority_picker"
private const val REQUEST_TAG_TASKS = 10106 private const val REQUEST_TAG_TASKS = 10106

@ -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<Intent> {
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<Intent> {
return registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
it.data?.let { intent ->
IntentCompat
.getParcelableExtra(intent, EXTRA_FILTER, Filter::class.java)
?.let(callback)
}
}
}
fun ActivityResultLauncher<Intent>.launch(
context: Context,
selectedFilter: Filter? = null,
listsOnly: Boolean = false,
) {
launch(
Intent(context, FilterSelectionActivity::class.java)
.putExtra(EXTRA_FILTER, selectedFilter)
.putExtra(EXTRA_LISTS_ONLY, listsOnly)
)
}
}
}

@ -6,6 +6,9 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll 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.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -66,7 +69,7 @@ fun CalendarPickerList(
.padding(vertical = 12.dp) .padding(vertical = 12.dp)
) { ) {
CheckableIconRow( CheckableIconRow(
icon = painterResource(id = R.drawable.ic_outline_block_24), icon = Icons.Outlined.Block,
tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface,
text = stringResource(id = R.string.dont_add_to_calendar), text = stringResource(id = R.string.dont_add_to_calendar),
selected = selectedCalendar == null, selected = selectedCalendar == null,
@ -74,7 +77,7 @@ fun CalendarPickerList(
) )
calendars.forEach { calendars.forEach {
CheckableIconRow( CheckableIconRow(
icon = painterResource(id = R.drawable.ic_outline_event_24px), icon = Icons.Outlined.Event,
tint = Color(it.color), tint = Color(it.color),
text = it.name, text = it.name,
selected = selectedCalendar == it, selected = selectedCalendar == it,

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

@ -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<Filter>(EXTRA_FILTER)?.let(callback)
}
}
}
}

@ -16,8 +16,8 @@ import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.compose.FilterSelectionActivity
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.dialogs.FilterPicker.Companion.EXTRA_LISTS_ONLY
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.FilterListItem import org.tasks.filters.FilterListItem
import org.tasks.filters.FilterProvider import org.tasks.filters.FilterProvider
@ -38,10 +38,13 @@ class FilterPickerViewModel @Inject constructor(
private val preferences: Preferences, private val preferences: Preferences,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
) : ViewModel() { ) : ViewModel() {
private val listsOnly = savedStateHandle[EXTRA_LISTS_ONLY] ?: false private val listsOnly = savedStateHandle[FilterSelectionActivity.EXTRA_LISTS_ONLY] ?: false
data class ViewState( data class ViewState(
val filters: List<FilterListItem> = emptyList(), val filters: List<FilterListItem> = emptyList(),
val allFilters: List<Filter> = emptyList(),
val searchResults: List<Filter> = emptyList(),
val query: String = "",
) )
private val _viewState = MutableStateFlow(ViewState()) private val _viewState = MutableStateFlow(ViewState())
@ -55,12 +58,20 @@ class FilterPickerViewModel @Inject constructor(
} }
private fun refresh() = viewModelScope.launch { private fun refresh() = viewModelScope.launch {
val items = if (listsOnly) { _viewState.update { state ->
filterProvider.listPickerItems().filterNot { it is Filter && it.isReadOnly } state.copy(
} else { filters = if (listsOnly) {
filterProvider.filterPickerItems() 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 { fun onClick(subheader: NavigationDrawerSubheader) = viewModelScope.launch {
@ -103,6 +114,17 @@ class FilterPickerViewModel @Inject constructor(
localBroadcastManager.unregisterReceiver(refreshReceiver) 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 { init {
localBroadcastManager.registerRefreshListReceiver(refreshReceiver) localBroadcastManager.registerRefreshListReceiver(refreshReceiver)
refresh() refresh()

@ -1,36 +1,30 @@
package org.tasks.filters package org.tasks.filters
import android.content.Context import android.content.Context
import android.content.Intent
import com.todoroo.astrid.activity.MainActivity import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.api.CustomFilter import com.todoroo.astrid.api.CustomFilter
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.activities.GoogleTaskListSettingsActivity import org.tasks.data.GoogleTaskFilters
import org.tasks.activities.TagSettingsActivity import org.tasks.data.LocationFilters
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.data.NO_ORDER
import org.tasks.data.entity.CaldavAccount import org.tasks.data.TagFilters
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.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.GoogleTaskFilters
import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao 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.dao.TagDataDao
import org.tasks.data.TagFilters import org.tasks.data.entity.CaldavAccount
import org.tasks.data.listSettingsClass 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.setupLocalAccount
import org.tasks.data.toGtasksFilter import org.tasks.data.toGtasksFilter
import org.tasks.data.toLocationFilter import org.tasks.data.toLocationFilter
import org.tasks.data.toTagFilter import org.tasks.data.toTagFilter
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType import org.tasks.filters.NavigationDrawerSubheader.SubheaderType
import org.tasks.location.LocationPickerActivity
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import javax.inject.Inject import javax.inject.Inject
@ -45,11 +39,20 @@ class FilterProvider @Inject constructor(
private val locationDao: LocationDao private val locationDao: LocationDao
) { ) {
suspend fun listPickerItems(): List<FilterListItem> = suspend fun listPickerItems(): List<FilterListItem> =
caldavFilters(false) caldavFilters(showCreate = false, forceExpand = false)
suspend fun drawerItems(): List<FilterListItem> = suspend fun drawerItems(): List<FilterListItem> =
getAllFilters(showCreate = true, hideUnused = true) getAllFilters(showCreate = true, hideUnused = true)
suspend fun allLists(): List<Filter> =
caldavFilters(showCreate = false, forceExpand = true)
.filterIsInstance<Filter>()
suspend fun allFilters(): List<Filter> =
getAllFilters(showCreate = false, hideUnused = false, forceExpand = true)
.filterIsInstance<Filter>()
suspend fun filterPickerItems(): List<FilterListItem> = suspend fun filterPickerItems(): List<FilterListItem> =
getAllFilters(showCreate = false) getAllFilters(showCreate = false)
@ -83,11 +86,15 @@ class FilterProvider @Inject constructor(
emptyList() emptyList()
} }
private suspend fun addFilters(showCreate: Boolean, showBuiltIn: Boolean): List<FilterListItem> = private suspend fun addFilters(
showCreate: Boolean,
showBuiltIn: Boolean,
forceExpand: Boolean,
): List<FilterListItem> =
if (!preferences.getBoolean(R.string.p_filters_enabled, true)) { if (!preferences.getBoolean(R.string.p_filters_enabled, true)) {
emptyList() emptyList()
} else { } else {
val collapsed = preferences.getBoolean(R.string.p_collapse_filters, false) val collapsed = !forceExpand && preferences.getBoolean(R.string.p_collapse_filters, false)
listOf( listOf(
NavigationDrawerSubheader( NavigationDrawerSubheader(
context.getString(R.string.filters), context.getString(R.string.filters),
@ -105,11 +112,15 @@ class FilterProvider @Inject constructor(
.plus(filterDao.getFilters().map(::CustomFilter).sort()) .plus(filterDao.getFilters().map(::CustomFilter).sort())
} }
private suspend fun addTags(showCreate: Boolean, hideUnused: Boolean): List<FilterListItem> = private suspend fun addTags(
showCreate: Boolean,
hideUnused: Boolean,
forceExpand: Boolean,
): List<FilterListItem> =
if (!preferences.getBoolean(R.string.p_tags_enabled, true)) { if (!preferences.getBoolean(R.string.p_tags_enabled, true)) {
emptyList() emptyList()
} else { } else {
val collapsed = preferences.getBoolean(R.string.p_collapse_tags, false) val collapsed = !forceExpand && preferences.getBoolean(R.string.p_collapse_tags, false)
listOf( listOf(
NavigationDrawerSubheader( NavigationDrawerSubheader(
context.getString(R.string.tags), context.getString(R.string.tags),
@ -129,11 +140,15 @@ class FilterProvider @Inject constructor(
.sort()) .sort())
} }
private suspend fun addPlaces(showCreate: Boolean, hideUnused: Boolean): List<FilterListItem> = private suspend fun addPlaces(
showCreate: Boolean,
hideUnused: Boolean,
forceExpand: Boolean,
): List<FilterListItem> =
if (!preferences.getBoolean(R.string.p_places_enabled, true)) { if (!preferences.getBoolean(R.string.p_places_enabled, true)) {
emptyList() emptyList()
} else { } else {
val collapsed = preferences.getBoolean(R.string.p_collapse_locations, false) val collapsed = !forceExpand && preferences.getBoolean(R.string.p_collapse_locations, false)
listOf( listOf(
NavigationDrawerSubheader( NavigationDrawerSubheader(
context.getString(R.string.places), context.getString(R.string.places),
@ -157,6 +172,7 @@ class FilterProvider @Inject constructor(
showCreate: Boolean = true, showCreate: Boolean = true,
showBuiltIn: Boolean = true, showBuiltIn: Boolean = true,
hideUnused: Boolean = false, hideUnused: Boolean = false,
forceExpand: Boolean = false,
): List<FilterListItem> = ): List<FilterListItem> =
if (showBuiltIn) { if (showBuiltIn) {
arrayListOf(builtInFilterExposer.myTasksFilter) arrayListOf(builtInFilterExposer.myTasksFilter)
@ -164,18 +180,19 @@ class FilterProvider @Inject constructor(
ArrayList<FilterListItem>() ArrayList<FilterListItem>()
} }
.asSequence() .asSequence()
.plus(addFilters(showCreate, showBuiltIn)) .plus(addFilters(showCreate, showBuiltIn, forceExpand))
.plus(addTags(showCreate, hideUnused)) .plus(addTags(showCreate, hideUnused, forceExpand))
.plus(addPlaces(showCreate, hideUnused)) .plus(addPlaces(showCreate, hideUnused, forceExpand))
.plus(caldavFilters(showCreate)) .plus(caldavFilters(showCreate, forceExpand))
.toList() .toList()
.plusAllIf(BuildConfig.DEBUG) { getDebugFilters() } .plusAllIf(BuildConfig.DEBUG) { getDebugFilters() }
private suspend fun googleTaskFilter( private suspend fun googleTaskFilter(
account: CaldavAccount, account: CaldavAccount,
showCreate: Boolean, showCreate: Boolean,
forceExpand: Boolean,
): List<FilterListItem> { ): List<FilterListItem> {
val collapsed = account.isCollapsed val collapsed = !forceExpand && account.isCollapsed
return listOf( return listOf(
NavigationDrawerSubheader( NavigationDrawerSubheader(
account.username, account.username,
@ -195,17 +212,21 @@ class FilterProvider @Inject constructor(
) )
} }
private suspend fun caldavFilters(showCreate: Boolean = true): List<FilterListItem> = private suspend fun caldavFilters(
showCreate: Boolean,
forceExpand: Boolean,
): List<FilterListItem> =
caldavDao.getAccounts() caldavDao.getAccounts()
.ifEmpty { listOf(caldavDao.setupLocalAccount(context)) } .ifEmpty { listOf(caldavDao.setupLocalAccount(context)) }
.filter { it.accountType != TYPE_LOCAL || preferences.getBoolean(R.string.p_lists_enabled, true) } .filter { it.accountType != TYPE_LOCAL || preferences.getBoolean(R.string.p_lists_enabled, true) }
.flatMap { .flatMap {
if (it.isGoogleTasks) { if (it.isGoogleTasks) {
googleTaskFilter(it, showCreate) googleTaskFilter(it, showCreate, forceExpand)
} else { } else {
caldavFilter( caldavFilter(
it, 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( private suspend fun caldavFilter(
account: CaldavAccount, account: CaldavAccount,
showCreate: Boolean, showCreate: Boolean,
forceExpand: Boolean,
): List<FilterListItem> { ): List<FilterListItem> {
val collapsed = account.isCollapsed val collapsed = !forceExpand && account.isCollapsed
return listOf( return listOf(
NavigationDrawerSubheader( NavigationDrawerSubheader(
if (account.accountType == TYPE_LOCAL) { if (account.accountType == TYPE_LOCAL) {

@ -6,8 +6,8 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import javax.inject.Inject import javax.inject.Inject
@ -18,24 +18,23 @@ class DashClock : InjectingPreferenceFragment() {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
override fun getPreferenceXml() = R.xml.preferences_dashclock private val listPickerLauncher = registerForListPickerResult {
defaultFilterProvider.dashclockFilter = it
override fun onCreate(savedInstanceState: Bundle?) { lifecycleScope.launch {
super.onCreate(savedInstanceState) refreshPreferences()
childFragmentManager.setFilterPickerResultListener(this) {
defaultFilterProvider.dashclockFilter = it
lifecycleScope.launch {
refreshPreferences()
}
localBroadcastManager.broadcastRefresh()
} }
localBroadcastManager.broadcastRefresh()
} }
override fun getPreferenceXml() = R.xml.preferences_dashclock
override suspend fun setupPreferences(savedInstanceState: Bundle?) { override suspend fun setupPreferences(savedInstanceState: Bundle?) {
findPreference(R.string.p_dashclock_filter) findPreference(R.string.p_dashclock_filter)
.setOnPreferenceClickListener { .setOnPreferenceClickListener {
newFilterPicker(defaultFilterProvider.dashclockFilter) listPickerLauncher.launch(
.show(childFragmentManager, FRAG_TAG_SELECT_PICKER) context = requireContext(),
selectedFilter = defaultFilterProvider.dashclockFilter,
)
false false
} }
@ -46,8 +45,4 @@ class DashClock : InjectingPreferenceFragment() {
val filter = defaultFilterProvider.getFilterFromPreference(R.string.p_dashclock_filter) val filter = defaultFilterProvider.getFilterFromPreference(R.string.p_dashclock_filter)
findPreference(R.string.p_dashclock_filter).summary = filter.title findPreference(R.string.p_dashclock_filter).summary = filter.title
} }
companion object {
private const val FRAG_TAG_SELECT_PICKER = "frag_tag_select_picker"
}
} }

@ -17,12 +17,12 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity 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
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter import org.tasks.dialogs.ColorPickerAdapter
import org.tasks.dialogs.ColorWheelPicker 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
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.extensions.Context.isNightMode import org.tasks.extensions.Context.isNightMode
@ -51,17 +51,14 @@ class LookAndFeel : InjectingPreferenceFragment() {
@Inject lateinit var inventory: Inventory @Inject lateinit var inventory: Inventory
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
override fun getPreferenceXml() = R.xml.preferences_look_and_feel private val listPickerLauncher = registerForListPickerResult {
defaultFilterProvider.setDefaultOpenFilter(it)
override fun onCreate(savedInstanceState: Bundle?) { findPreference(R.string.p_default_open_filter).summary = it.title
super.onCreate(savedInstanceState) localBroadcastManager.broadcastRefresh()
childFragmentManager.setFilterPickerResultListener(this) {
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?) { override suspend fun setupPreferences(savedInstanceState: Bundle?) {
val themePref = findPreference(R.string.p_theme) val themePref = findPreference(R.string.p_theme)
val themeNames = resources.getStringArray(R.array.base_theme_names) val themeNames = resources.getStringArray(R.array.base_theme_names)
@ -84,8 +81,10 @@ class LookAndFeel : InjectingPreferenceFragment() {
defaultList.summary = filter.title defaultList.summary = filter.title
defaultList.onPreferenceClickListener = Preference.OnPreferenceClickListener { defaultList.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch { lifecycleScope.launch {
newFilterPicker(defaultFilterProvider.getDefaultOpenFilter()) listPickerLauncher.launch(
.show(childFragmentManager, FRAG_TAG_FILTER_PICKER) context = requireContext(),
selectedFilter = defaultFilterProvider.getDefaultOpenFilter(),
)
} }
true true
} }
@ -249,6 +248,5 @@ class LookAndFeel : InjectingPreferenceFragment() {
private const val FRAG_TAG_LOCALE_PICKER = "frag_tag_locale_picker" 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_THEME_PICKER = "frag_tag_theme_picker"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker" private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
} }
} }

@ -20,8 +20,8 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.extensions.Context.getResourceUri import org.tasks.extensions.Context.getResourceUri
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
@ -43,17 +43,14 @@ class Notifications : InjectingPreferenceFragment() {
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var voiceOutputAssistant: VoiceOutputAssistant @Inject lateinit var voiceOutputAssistant: VoiceOutputAssistant
override fun getPreferenceXml() = R.xml.preferences_notifications private val listPickerLauncher = registerForListPickerResult {
defaultFilterProvider.setBadgeFilter(it)
override fun onCreate(savedInstanceState: Bundle?) { findPreference(R.string.p_badge_list).summary = it.title
super.onCreate(savedInstanceState) localBroadcastManager.broadcastRefresh()
childFragmentManager.setFilterPickerResultListener(this) {
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?) { override suspend fun setupPreferences(savedInstanceState: Bundle?) {
rescheduleNotificationsOnChange( rescheduleNotificationsOnChange(
false, false,
@ -90,8 +87,10 @@ class Notifications : InjectingPreferenceFragment() {
badgePreference.summary = filter.title badgePreference.summary = filter.title
badgePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { badgePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch { lifecycleScope.launch {
newFilterPicker(defaultFilterProvider.getBadgeFilter()) listPickerLauncher.launch(
.show(childFragmentManager, FRAG_TAG_FILTER_PICKER) context = requireContext(),
selectedFilter = defaultFilterProvider.getBadgeFilter(),
)
} }
true true
} }
@ -354,6 +353,5 @@ class Notifications : InjectingPreferenceFragment() {
private const val REQUEST_CODE_ALERT_RINGTONE = 10005 private const val REQUEST_CODE_ALERT_RINGTONE = 10005
private const val REQUEST_CODE_TTS_CHECK = 10006 private const val REQUEST_CODE_TTS_CHECK = 10006
private const val REQUEST_CODE_COMPLETION_SOUND = 10007 private const val REQUEST_CODE_COMPLETION_SOUND = 10007
private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
} }
} }

@ -6,23 +6,23 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference 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 dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
import org.tasks.calendars.CalendarPicker import org.tasks.calendars.CalendarPicker
import org.tasks.calendars.CalendarPicker.Companion.newCalendarPicker import org.tasks.calendars.CalendarPicker.Companion.newCalendarPicker
import org.tasks.calendars.CalendarProvider 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.dao.LocationDao
import org.tasks.data.entity.Place
import org.tasks.data.entity.TagData
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.displayName import org.tasks.data.displayName
import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker import org.tasks.data.entity.CaldavAccount
import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener 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.injection.InjectingPreferenceFragment
import org.tasks.location.LocationPickerActivity import org.tasks.location.LocationPickerActivity
import org.tasks.location.LocationPickerActivity.Companion.EXTRA_PLACE 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 org.tasks.tags.TagPickerActivity.Companion.EXTRA_SELECTED
import javax.inject.Inject 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 FRAG_TAG_CALENDAR_PICKER = "frag_tag_calendar_picker"
private const val REQUEST_CALENDAR_SELECTION = 10011 private const val REQUEST_CALENDAR_SELECTION = 10011
@ -51,13 +50,9 @@ class TaskDefaults : InjectingPreferenceFragment() {
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDao
private lateinit var defaultCalendarPref: Preference private lateinit var defaultCalendarPref: Preference
private val listPickerLauncher = registerForListPickerResult {
override fun onCreate(savedInstanceState: Bundle?) { defaultFilterProvider.defaultList = it
super.onCreate(savedInstanceState) updateRemoteListSummary()
childFragmentManager.setFilterPickerResultListener(this) {
defaultFilterProvider.defaultList = it
updateRemoteListSummary()
}
} }
override fun getPreferenceXml() = R.xml.preferences_task_defaults override fun getPreferenceXml() = R.xml.preferences_task_defaults
@ -74,8 +69,11 @@ class TaskDefaults : InjectingPreferenceFragment() {
findPreference(R.string.p_default_list) findPreference(R.string.p_default_list)
.setOnPreferenceClickListener { .setOnPreferenceClickListener {
lifecycleScope.launch { lifecycleScope.launch {
newFilterPicker(defaultFilterProvider.getDefaultList(), true) listPickerLauncher.launch(
.show(childFragmentManager, FRAG_TAG_DEFAULT_LIST_SELECTION) context = requireContext(),
selectedFilter = defaultFilterProvider.getDefaultList(),
listsOnly = true,
)
} }
false false
} }

@ -6,8 +6,8 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.bundle.ListNotificationBundle import org.tasks.locale.bundle.ListNotificationBundle
@ -20,7 +20,6 @@ class TaskerListNotification : InjectingPreferenceFragment() {
companion object { companion object {
const val EXTRA_FILTER = "extra_filter" const val EXTRA_FILTER = "extra_filter"
private const val REQUEST_SUBSCRIPTION = 10125 private const val REQUEST_SUBSCRIPTION = 10125
private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
fun newTaskerListNotification(filter: String?): TaskerListNotification { fun newTaskerListNotification(filter: String?): TaskerListNotification {
val fragment = TaskerListNotification() val fragment = TaskerListNotification()
@ -36,17 +35,13 @@ class TaskerListNotification : InjectingPreferenceFragment() {
lateinit var filter: Filter lateinit var filter: Filter
var cancelled: Boolean = false var cancelled: Boolean = false
private val listPickerLauncher = registerForListPickerResult {
filter = it
refreshPreferences()
}
override fun getPreferenceXml() = R.xml.preferences_tasker 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?) { override suspend fun setupPreferences(savedInstanceState: Bundle?) {
filter = if (savedInstanceState == null) { filter = if (savedInstanceState == null) {
defaultFilterProvider.getFilterFromPreferenceBlocking(arguments?.getString(EXTRA_FILTER)) defaultFilterProvider.getFilterFromPreferenceBlocking(arguments?.getString(EXTRA_FILTER))
@ -57,8 +52,10 @@ class TaskerListNotification : InjectingPreferenceFragment() {
refreshPreferences() refreshPreferences()
findPreference(R.string.filter).setOnPreferenceClickListener { findPreference(R.string.filter).setOnPreferenceClickListener {
newFilterPicker(filter) listPickerLauncher.launch(
.show(childFragmentManager, FRAG_TAG_FILTER_PICKER) context = requireContext(),
selectedFilter = filter,
)
false false
} }

@ -21,12 +21,12 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R 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
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter.Palette import org.tasks.dialogs.ColorPickerAdapter.Palette
import org.tasks.dialogs.ColorWheelPicker 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.SortSettingsActivity
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.filters.AstridOrderingFilter import org.tasks.filters.AstridOrderingFilter
@ -48,7 +48,6 @@ class WidgetSettings : InjectingPreferenceFragment() {
const val EXTRA_WIDGET_ID = "extra_widget_id" const val EXTRA_WIDGET_ID = "extra_widget_id"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker" 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 { fun newWidgetSettings(appWidgetId: Int): WidgetSettings {
val widget = WidgetSettings() val widget = WidgetSettings()
@ -65,17 +64,13 @@ class WidgetSettings : InjectingPreferenceFragment() {
private lateinit var widgetPreferences: WidgetPreferences private lateinit var widgetPreferences: WidgetPreferences
private var appWidgetId = 0 private var appWidgetId = 0
private val listPickerLauncher = registerForListPickerResult {
widgetPreferences.setFilter(defaultFilterProvider.getFilterPreferenceValue(it))
updateFilter()
}
override fun getPreferenceXml() = R.xml.preferences_widget 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() { override fun onResume() {
super.onResume() super.onResume()
@ -145,8 +140,7 @@ class WidgetSettings : InjectingPreferenceFragment() {
findPreference(R.string.p_widget_filter) findPreference(R.string.p_widget_filter)
.setOnPreferenceClickListener { .setOnPreferenceClickListener {
lifecycleScope.launch { lifecycleScope.launch {
newFilterPicker(getFilter()) listPickerLauncher.launch(requireContext(), selectedFilter = getFilter())
.show(childFragmentManager, FRAG_TAG_FILTER_PICKER)
} }
false false
} }

@ -3,7 +3,9 @@ package org.tasks.widget
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.TextView import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.content.IntentCompat
import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
@ -11,13 +13,13 @@ import com.google.android.material.textfield.TextInputEditText
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty 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.data.UUIDHelper
import org.tasks.databinding.ActivityWidgetShortcutLayoutBinding import org.tasks.databinding.ActivityWidgetShortcutLayoutBinding
import org.tasks.dialogs.ColorPalettePicker import org.tasks.dialogs.ColorPalettePicker
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter.Palette 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.filters.Filter
import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.intents.TaskIntents import org.tasks.intents.TaskIntents
@ -38,6 +40,13 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
private var selectedFilter: Filter? = null private var selectedFilter: Filter? = null
private var selectedTheme = 0 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?) { public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -66,14 +75,6 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
selectedTheme = savedInstanceState.getInt(EXTRA_THEME) selectedTheme = savedInstanceState.getInt(EXTRA_THEME)
} }
updateFilterAndTheme() updateFilterAndTheme()
supportFragmentManager.setFilterPickerResultListener(this) {
if (selectedFilter != null && selectedFilter!!.title == getShortcutName()) {
shortcutName.text = null
}
selectedFilter = it
updateFilterAndTheme()
}
} }
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
@ -90,8 +91,7 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
} }
private fun showListPicker() { private fun showListPicker() {
newFilterPicker(selectedFilter) listPickerResult.launch(context = this, selectedFilter = selectedFilter)
.show(supportFragmentManager, FRAG_TAG_FILTER_PICKER)
} }
private fun showThemePicker() { private fun showThemePicker() {
@ -145,6 +145,5 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
private const val EXTRA_FILTER = "extra_filter" private const val EXTRA_FILTER = "extra_filter"
private const val EXTRA_THEME = "extra_theme" private const val EXTRA_THEME = "extra_theme"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker" private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
private const val FRAG_TAG_FILTER_PICKER = "frag_tag_filter_picker"
} }
} }

@ -14,7 +14,7 @@ import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.FilterPicker import org.tasks.compose.FilterSelectionActivity
import org.tasks.extensions.setBackgroundColor import org.tasks.extensions.setBackgroundColor
import org.tasks.extensions.setColorFilter import org.tasks.extensions.setColorFilter
import org.tasks.extensions.setRipple import org.tasks.extensions.setRipple
@ -213,9 +213,9 @@ class TasksWidget : AppWidgetProvider() {
} }
private fun getChooseListIntent(context: Context, filter: Filter, widgetId: Int): PendingIntent { 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.flags = FLAGS
intent.putExtra(FilterPicker.EXTRA_FILTER, filter) intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, filter)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId) intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId)
intent.action = "choose_list" intent.action = "choose_list"
return PendingIntent.getActivity( return PendingIntent.getActivity(

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

@ -28,17 +28,14 @@
+| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.1 +| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*) +| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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:1.7.3 -> 1.8.0
+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0
+| | | +--- org.jetbrains:annotations:23.0.0 +| | | +--- org.jetbrains:annotations:23.0.0
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (c) +| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0 (c)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 (c) +| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0 (c)
+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (c) +| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (c)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 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 (*)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -63,10 +60,10 @@
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | \--- com.google.guava:listenablefuture:1.0 -> 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.22 -> 2.0.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-android:1.7.3 -> 1.8.0
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c) +| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -85,14 +82,17 @@
+| \--- androidx.databinding:databinding-common:8.4.1 +| \--- androidx.databinding:databinding-common:8.4.1
++--- androidx.databinding:databinding-ktx:8.4.1 ++--- androidx.databinding:databinding-ktx:8.4.1
+| +--- androidx.databinding:databinding-runtime:8.4.1 (*) +| +--- androidx.databinding:databinding-runtime:8.4.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 2.0.0 (*) +| +--- 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: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:2.6.1 -> 2.8.1
+| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1 +| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*) +| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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-android:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c) +| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata: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-viewmodel-savedstate:2.8.1 (c)
+| | | \--- androidx.lifecycle:lifecycle-common-java8: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.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-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core: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-core-ktx:2.8.1 (c)
@ -196,8 +196,8 @@
+| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.1 +| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*) +| +--- androidx.annotation:annotation:1.8.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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-android:1.7.3 -> 1.8.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-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -245,8 +245,8 @@
+| | +--- org.jetbrains.kotlinx:atomicfu:0.17.0 +| | +--- org.jetbrains.kotlinx:atomicfu:0.17.0
+| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0 +| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.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-android:1.7.3 -> 1.8.0 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | \--- androidx.room:room-common:2.7.0-alpha03 (c) +| | \--- androidx.room:room-common:2.7.0-alpha03 (c)
+| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3 +| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3
+| | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm: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-stdlib:1.9.22 -> 2.0.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*) +| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- project :kmp ++--- 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 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
+| +--- project :data (*) +| +--- project :data (*)
+| +--- org.jetbrains.compose.runtime:runtime:1.6.10 +| +--- org.jetbrains.compose.components:components-resources:1.6.10
+| | \--- androidx.compose.runtime:runtime:1.6.7 +| | \--- org.jetbrains.compose.components:components-resources-android:1.6.10
+| | \--- androidx.compose.runtime:runtime-android:1.6.7 +| | +--- 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 (*) +| | +--- androidx.collection:collection:1.4.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*) +| | +--- androidx.compose.animation:animation-core:1.6.0 -> 1.6.7 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*) +| | +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*) +| | +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.7 (*)
+| | +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c) +| | +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.7
+| | \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c) +| | | \--- 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 (*) +| +--- co.touchlab:kermit:2.0.3 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*) +| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- com.github.bitfireAT:dav4jvm:2.2.1 ++--- com.github.bitfireAT:dav4jvm:2.2.1
@ -316,23 +633,7 @@
+| +--- commons-io:commons-io:2.6 +| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14:2.0.3 +| +--- org.slf4j:slf4j-jdk14:2.0.3
+| | \--- org.slf4j:slf4j-api:2.0.3 +| | \--- org.slf4j:slf4j-api:2.0.3
+| \--- androidx.core:core-ktx:1.9.0 -> 1.13.0 +| \--- 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)
++--- com.github.bitfireAT:cert4android:7814052 ++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.4.1 +| +--- androidx.databinding:databinding-common:7.2.0 -> 8.4.1
+| +--- androidx.databinding:databinding-runtime: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 (*) +| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.4.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 2.0.0 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 2.0.0 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.7.0 +| +--- androidx.appcompat:appcompat:1.4.1 -> 1.7.0
+| | +--- androidx.activity:activity:1.7.0 -> 1.9.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.annotation:annotation:1.3.0 -> 1.8.0 (*) +| | +--- androidx.annotation:annotation:1.3.0 -> 1.8.0 (*)
+| | +--- androidx.appcompat:appcompat-resources:1.7.0 +| | +--- androidx.appcompat:appcompat-resources:1.7.0
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*) +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
@ -404,13 +668,7 @@
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.13.0 (*) +| | | +--- androidx.core:core:1.3.0 -> 1.13.0 (*)
+| | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) +| | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | +--- androidx.emoji2:emoji2:1.3.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-views-helper:1.2.0 -> 1.3.0 +| | +--- androidx.emoji2:emoji2-views-helper:1.2.0 -> 1.3.0
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) +| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.13.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:2.8.1 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx: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.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-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -477,23 +735,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx: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-viewmodel-savedstate:2.8.1 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8: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-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)
+| +--- com.google.android.material:material:1.6.0 -> 1.12.0 +| +--- com.google.android.material:material:1.6.0 -> 1.12.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22 +| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (c) +| | | +--- 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.collection:collection:1.0.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*) +| | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.customview:customview-poolingcontainer:1.0.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.viewpager2:viewpager2:1.1.0-beta02 (c) +| | | \--- androidx.viewpager2:viewpager2:1.1.0-beta02 (c)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*) +| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*)
+| | +--- androidx.transition:transition:1.5.0 +| | +--- androidx.transition:transition:1.5.0
@ -594,21 +834,8 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*) +| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*)
++--- androidx.fragment:fragment-ktx:1.7.1 ++--- androidx.fragment:fragment-ktx:1.7.1
+| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0 +| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0 (*)
+| | +--- androidx.activity:activity:1.9.0 (*) +| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.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.core:core-ktx:1.2.0 -> 1.13.0 (*) +| +--- androidx.core:core-ktx:1.2.0 -> 1.13.0 (*)
+| +--- androidx.fragment:fragment:1.7.1 (*) +| +--- androidx.fragment:fragment:1.7.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.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.github.franmontiel:PersistentCookieJar:1.0.1
+| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*) +| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*)
++--- com.google.android.material:material:1.12.0 (*) ++--- com.google.android.material:material:1.12.0 (*)
++--- androidx.compose.material3:material3 -> 1.2.1 ++--- 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.constraintlayout:constraintlayout:2.1.4 (*) ++--- androidx.constraintlayout:constraintlayout:2.1.4 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0 ++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
@ -883,7 +898,7 @@
+| | +--- androidx.core:core:1.1.0 -> 1.13.0 (*) +| | +--- androidx.core:core:1.1.0 -> 1.13.0 (*)
+| | +--- androidx.window:window:1.0.0 +| | +--- androidx.window:window:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.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.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) +| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | \--- androidx.core:core:1.3.2 -> 1.13.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-ktx:2.8.1
+| +--- androidx.work:work-runtime:2.8.1 (*) +| +--- androidx.work:work-runtime:2.8.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*) +| +--- 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 ++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1 +| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
@ -964,6 +979,7 @@
+| +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c) +| +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
+| +--- androidx.compose.ui:ui: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: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.ui:ui-viewbinding:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime:1.6.7 (c) +| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable: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.material:material-icons-extended-android:1.6.7 (c)
+| +--- androidx.compose.material3:material3-android:1.2.1 (c) +| +--- androidx.compose.material3:material3-android:1.2.1 (c)
+| +--- androidx.compose.ui:ui-android:1.6.7 (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-android:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable-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) +| +--- 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-runtime:2.6.1 -> 2.8.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
+| +--- androidx.savedstate:savedstate:1.2.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-core:1.6.7 (c)
+| +--- androidx.compose.material:material-icons-extended: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.7 (c)
@ -1026,14 +1040,7 @@
+| +--- androidx.compose.runtime:runtime:1.6.7 (c) +| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c) +| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++--- androidx.activity:activity-compose:1.9.0 (*) ++--- androidx.activity:activity-compose:1.9.0 (*)
++--- androidx.compose.material:material-icons-extended -> 1.6.7 ++--- 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.lifecycle:lifecycle-viewmodel-compose:2.8.1 ++--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1
+| \--- androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1 +| \--- androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*) +| +--- androidx.annotation:annotation:1.8.0 (*)
@ -1070,23 +1077,13 @@
+| +--- androidx.compose.ui:ui-geometry:1.6.7 (c) +| +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
+| \--- androidx.compose.ui:ui-unit: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 -> 1.6.7
+| \--- androidx.compose.ui:ui-tooling-preview-android: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)
++--- io.coil-kt:coil-compose:2.6.0 ++--- io.coil-kt:coil-compose:2.6.0
+| +--- io.coil-kt:coil-compose-base:2.6.0 +| +--- io.coil-kt:coil-compose-base:2.6.0
+| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.0 (*) +| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.0 (*)
+| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0 +| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0
+| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.6.7 (*) +| | | +--- 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 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 2.0.0 (*)
+| | +--- io.coil-kt:coil-base:2.6.0 +| | +--- io.coil-kt:coil-base:2.6.0
+| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.0 (*) +| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.0 (*)
@ -1097,7 +1094,7 @@
+| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*) +| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*) +| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.8.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 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*) +| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | \--- com.squareup.okio:okio:3.8.0 (*) +| | | \--- com.squareup.okio:okio:3.8.0 (*)
@ -1124,15 +1121,15 @@
++--- com.google.accompanist:accompanist-flowlayout:0.34.0 ++--- com.google.accompanist:accompanist-flowlayout:0.34.0
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*) +| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
+| +--- androidx.compose.ui:ui-util: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 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
++--- com.google.accompanist:accompanist-permissions:0.34.0 ++--- com.google.accompanist:accompanist-permissions:0.34.0
+| +--- androidx.activity:activity-compose:1.7.2 -> 1.9.0 (*) +| +--- androidx.activity:activity-compose:1.7.2 -> 1.9.0 (*)
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*) +| +--- 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 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+\--- com.google.accompanist:accompanist-systemuicontroller:0.34.0 +\--- com.google.accompanist:accompanist-systemuicontroller:0.34.0
+ +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*) + +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*)
+ +--- androidx.compose.ui:ui:1.6.0 -> 1.6.7 (*) + +--- 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 (*) + \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)

@ -28,18 +28,15 @@
+| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.1 +| | \--- androidx.lifecycle:lifecycle-common-jvm:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*) +| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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:1.7.3 -> 1.8.0
+| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +| | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0
+| | | +--- org.jetbrains:annotations:23.0.0 +| | | +--- org.jetbrains:annotations:23.0.0
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (c) +| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0 (c)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 (c) +| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0 (c)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (c) +| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (c)
+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 (c) +| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.0 (c)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 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 (*)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -64,10 +61,10 @@
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| | | \--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | \--- com.google.guava:listenablefuture:1.0 -> 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.22 -> 2.0.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-android:1.7.3 -> 1.8.0
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 2.0.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.0.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c) +| +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -86,14 +83,17 @@
+| \--- androidx.databinding:databinding-common:8.4.1 +| \--- androidx.databinding:databinding-common:8.4.1
++--- androidx.databinding:databinding-ktx:8.4.1 ++--- androidx.databinding:databinding-ktx:8.4.1
+| +--- androidx.databinding:databinding-runtime:8.4.1 (*) +| +--- androidx.databinding:databinding-runtime:8.4.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 2.0.0 (*) +| +--- 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: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:2.6.1 -> 2.8.1
+| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1 +| | \--- androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1
+| | +--- androidx.annotation:annotation:1.8.0 (*) +| | +--- androidx.annotation:annotation:1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.8.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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-android:1.7.3 -> 1.8.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c) +| | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c) +| | +--- androidx.lifecycle:lifecycle-common-java8:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata: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-viewmodel-savedstate:2.8.1 (c)
+| | | \--- androidx.lifecycle:lifecycle-common-java8: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.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-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core: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-core-ktx:2.8.1 (c)
@ -197,8 +197,8 @@
+| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.1 +| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*) +| +--- androidx.annotation:annotation:1.8.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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-android:1.7.3 -> 1.8.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-common:2.8.1 (c)
+| +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -224,9 +224,9 @@
++--- com.google.firebase:firebase-crashlytics -> 19.0.0 ++--- com.google.firebase:firebase-crashlytics -> 19.0.0
+| +--- com.google.firebase:firebase-sessions:2.0.0 +| +--- com.google.firebase:firebase-sessions:2.0.0
+| | +--- com.google.firebase:firebase-common:21.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-play-services:1.6.4 -> 1.8.0
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*) +| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*) +| | | | +--- 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-tasks:16.0.1 -> 18.2.0
+| | | | | \--- com.google.android.gms:play-services-basement:18.4.0 +| | | | | \--- com.google.android.gms:play-services-basement:18.4.0
+| | | | | +--- androidx.collection:collection:1.0.0 -> 1.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 (*) +| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 2.0.0 (*)
+| | | | | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c) +| | | | | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c)
+| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.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-android:1.7.3 -> 1.8.0 (*)
+| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c) +| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.8.1 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -311,7 +311,7 @@
+| | | | | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) +| | | | | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*) +| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
+| | | | | \--- androidx.fragment:fragment-ktx:1.7.1 (c) +| | | | | \--- 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-components:18.0.0
+| | | | +--- com.google.firebase:firebase-annotations:16.2.0 +| | | | +--- com.google.firebase:firebase-annotations:16.2.0
+| | | | | \--- javax.inject:javax.inject:1 +| | | | | \--- javax.inject:javax.inject:1
@ -369,11 +369,11 @@
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.0.0 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.0.0 (*)
+| | | +--- androidx.datastore:datastore:1.0.0 +| | | +--- androidx.datastore:datastore:1.0.0
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.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.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | | \--- androidx.datastore:datastore-core:1.0.0 +| | | | \--- androidx.datastore:datastore-core:1.0.0
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.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.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| | | \--- androidx.datastore:datastore-preferences-core:1.0.0 +| | | \--- androidx.datastore:datastore-preferences-core:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 2.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.annotation:annotation:1.6.0 -> 1.8.0 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*) +| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 2.0.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 (c)
+| | | +--- androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +| | | +--- androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05
+| | | | +--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*) +| | | | +--- 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:9999.0-empty-to-avoid-conflict-with-guava
+| | | | +--- com.google.guava:listenablefuture:1.0 -> 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.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) +| | | | \--- 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-basement:18.3.0 -> 18.4.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:22.0.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-basement:18.4.0 (*)
+| +--- com.google.android.gms:play-services-tasks:18.2.0 (*) +| +--- com.google.android.gms:play-services-tasks:18.2.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.0 -> 2.0.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-android:1.7.3 -> 1.8.0 (*)
+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*) +| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
++--- com.google.android.gms:play-services-maps:18.2.0 ++--- com.google.android.gms:play-services-maps:18.2.0
+| +--- androidx.fragment:fragment:1.0.0 -> 1.7.1 (*) +| +--- androidx.fragment:fragment:1.0.0 -> 1.7.1 (*)
+| +--- com.google.android.gms:play-services-base:18.0.1 -> 18.5.0 (*) +| +--- 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 (*) +| | +--- 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-jdk8:1.8.22 -> 2.0.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.0 -> 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:1.10.3
++--- com.google.android.play:core-ktx:1.8.1 ++--- com.google.android.play:core-ktx:1.8.1
+| +--- com.google.android.play:core:1.8.0 -> 1.10.3 +| +--- 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.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.core:core:1.1.0 -> 1.13.0 (*)
+| \--- androidx.fragment:fragment:1.1.0 -> 1.7.1 (*) +| \--- androidx.fragment:fragment:1.1.0 -> 1.7.1 (*)
++--- com.google.android.gms:play-services-oss-licenses:17.1.0 ++--- 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:0.17.0
+| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0 +| | | \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.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-android:1.7.3 -> 1.8.0 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.8.0 (*)
+| | \--- androidx.room:room-common:2.7.0-alpha03 (c) +| | \--- androidx.room:room-common:2.7.0-alpha03 (c)
+| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3 +| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3
+| | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm: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-stdlib:1.9.22 -> 2.0.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*) +| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- project :kmp ++--- 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 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 (*)
+| +--- project :data (*) +| +--- project :data (*)
+| +--- org.jetbrains.compose.runtime:runtime:1.6.10 +| +--- org.jetbrains.compose.components:components-resources:1.6.10
+| | \--- androidx.compose.runtime:runtime:1.6.7 +| | \--- org.jetbrains.compose.components:components-resources-android:1.6.10
+| | \--- androidx.compose.runtime:runtime-android:1.6.7 +| | +--- 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 (*) +| | +--- androidx.collection:collection:1.4.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*) +| | +--- androidx.compose.animation:animation-core:1.6.0 -> 1.6.7 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*) +| | +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*) +| | +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.7 (*)
+| | +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c) +| | +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.7
+| | \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c) +| | | \--- 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 (*) +| +--- co.touchlab:kermit:2.0.3 (*)
+| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*) +| \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.0 (*)
++--- com.github.bitfireAT:dav4jvm:2.2.1 ++--- com.github.bitfireAT:dav4jvm:2.2.1
@ -703,7 +961,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.8.1 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx: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.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-common:2.8.1 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata: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:2.8.1 (c)
@ -717,23 +975,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx: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-viewmodel-savedstate:2.8.1 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8: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-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)
+| +--- com.google.android.material:material:1.6.0 -> 1.12.0 +| +--- com.google.android.material:material:1.6.0 -> 1.12.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22 +| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (c) +| | | +--- 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.collection:collection:1.0.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*) +| | | +--- androidx.core:core:1.7.0 -> 1.13.0 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.customview:customview-poolingcontainer:1.0.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.viewpager2:viewpager2:1.1.0-beta02 (c) +| | | \--- androidx.viewpager2:viewpager2:1.1.0-beta02 (c)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*) +| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*)
+| | +--- androidx.transition:transition:1.5.0 +| | +--- androidx.transition:transition:1.5.0
@ -825,21 +1065,8 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*) +| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*)
++--- androidx.fragment:fragment-ktx:1.7.1 ++--- androidx.fragment:fragment-ktx:1.7.1
+| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0 +| +--- androidx.activity:activity-ktx:1.8.1 -> 1.9.0 (*)
+| | +--- androidx.activity:activity:1.9.0 (*) +| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.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.core:core-ktx:1.2.0 -> 1.13.0 (*) +| +--- androidx.core:core-ktx:1.2.0 -> 1.13.0 (*)
+| +--- androidx.fragment:fragment:1.7.1 (*) +| +--- androidx.fragment:fragment:1.7.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.8.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.github.franmontiel:PersistentCookieJar:1.0.1
+| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*) +| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*)
++--- com.google.android.material:material:1.12.0 (*) ++--- com.google.android.material:material:1.12.0 (*)
++--- androidx.compose.material3:material3 -> 1.2.1 ++--- 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.constraintlayout:constraintlayout:2.1.4 (*) ++--- androidx.constraintlayout:constraintlayout:2.1.4 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0 ++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
@ -1114,7 +1129,7 @@
+| | +--- androidx.core:core:1.1.0 -> 1.13.0 (*) +| | +--- androidx.core:core:1.1.0 -> 1.13.0 (*)
+| | +--- androidx.window:window:1.0.0 +| | +--- androidx.window:window:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.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.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) +| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | | \--- androidx.core:core:1.3.2 -> 1.13.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-ktx:2.8.1
+| +--- androidx.work:work-runtime:2.8.1 (*) +| +--- androidx.work:work-runtime:2.8.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 2.0.0 (*) +| +--- 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 ++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*) +| +--- androidx.annotation:annotation:1.1.0 -> 1.8.0 (*)
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1 +| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
@ -1193,6 +1208,7 @@
+| +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c) +| +--- androidx.compose.runtime:runtime-livedata:1.6.7 (c)
+| +--- androidx.compose.ui:ui: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: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.ui:ui-viewbinding:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime:1.6.7 (c) +| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable: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.material:material-icons-extended-android:1.6.7 (c)
+| +--- androidx.compose.material3:material3-android:1.2.1 (c) +| +--- androidx.compose.material3:material3-android:1.2.1 (c)
+| +--- androidx.compose.ui:ui-android:1.6.7 (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-android:1.6.7 (c)
+| +--- androidx.compose.runtime:runtime-saveable-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) +| +--- 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-runtime:2.6.1 -> 2.8.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.8.1 (*)
+| +--- androidx.savedstate:savedstate:1.2.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-core:1.6.7 (c)
+| +--- androidx.compose.material:material-icons-extended: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.7 (c)
@ -1255,14 +1269,7 @@
+| +--- androidx.compose.runtime:runtime:1.6.7 (c) +| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c) +| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++--- androidx.activity:activity-compose:1.9.0 (*) ++--- androidx.activity:activity-compose:1.9.0 (*)
++--- androidx.compose.material:material-icons-extended -> 1.6.7 ++--- 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.lifecycle:lifecycle-viewmodel-compose:2.8.1 ++--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1
+| \--- androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1 +| \--- androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1
+| +--- androidx.annotation:annotation:1.8.0 (*) +| +--- androidx.annotation:annotation:1.8.0 (*)
@ -1299,23 +1306,13 @@
+| +--- androidx.compose.ui:ui-geometry:1.6.7 (c) +| +--- androidx.compose.ui:ui-geometry:1.6.7 (c)
+| \--- androidx.compose.ui:ui-unit: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 -> 1.6.7
+| \--- androidx.compose.ui:ui-tooling-preview-android: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)
++--- io.coil-kt:coil-compose:2.6.0 ++--- io.coil-kt:coil-compose:2.6.0
+| +--- io.coil-kt:coil-compose-base:2.6.0 +| +--- io.coil-kt:coil-compose-base:2.6.0
+| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.0 (*) +| | +--- androidx.core:core-ktx:1.12.0 -> 1.13.0 (*)
+| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0 +| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0
+| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.6.7 (*) +| | | +--- 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 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 2.0.0 (*)
+| | +--- io.coil-kt:coil-base:2.6.0 +| | +--- io.coil-kt:coil-base:2.6.0
+| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.0 (*) +| | | +--- androidx.annotation:annotation:1.7.1 -> 1.8.0 (*)
@ -1326,7 +1323,7 @@
+| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*) +| | | | \--- androidx.annotation:annotation:1.2.0 -> 1.8.0 (*)
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*) +| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.8.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 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*) +| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | \--- com.squareup.okio:okio:3.8.0 (*) +| | | \--- com.squareup.okio:okio:3.8.0 (*)
@ -1353,15 +1350,15 @@
++--- com.google.accompanist:accompanist-flowlayout:0.34.0 ++--- com.google.accompanist:accompanist-flowlayout:0.34.0
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*) +| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*)
+| +--- androidx.compose.ui:ui-util: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 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
++--- com.google.accompanist:accompanist-permissions:0.34.0 ++--- com.google.accompanist:accompanist-permissions:0.34.0
+| +--- androidx.activity:activity-compose:1.7.2 -> 1.9.0 (*) +| +--- androidx.activity:activity-compose:1.7.2 -> 1.9.0 (*)
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.7 (*) +| +--- 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 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)
+\--- com.google.accompanist:accompanist-systemuicontroller:0.34.0 +\--- com.google.accompanist:accompanist-systemuicontroller:0.34.0
+ +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*) + +--- androidx.core:core-ktx:1.8.0 -> 1.13.0 (*)
+ +--- androidx.compose.ui:ui:1.6.0 -> 1.6.7 (*) + +--- 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 (*) + \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 2.0.0 (*)

@ -158,6 +158,7 @@ retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.re
shortcut-badger = { module = "me.leolin:ShortcutBadger", version.ref = "shortcut-badger" } shortcut-badger = { module = "me.leolin:ShortcutBadger", version.ref = "shortcut-badger" }
timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" }
xpp3 = { module = "org.ogce:xpp3", version.ref = "xpp3" } 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] [plugins]
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }

@ -21,8 +21,15 @@ kotlin {
} }
jvm() jvm()
sourceSets { sourceSets {
androidMain.dependencies {
implementation(libs.androidx.ui.tooling.preview.android)
}
commonMain.dependencies { commonMain.dependencies {
implementation(projects.data) implementation(projects.data)
implementation(compose.components.resources)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.materialIconsExtended)
implementation(compose.runtime) implementation(compose.runtime)
implementation(libs.kermit) implementation(libs.kermit)
} }
@ -44,6 +51,10 @@ android {
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
buildFeatures {
compose = true
}
dependencies { dependencies {
debugImplementation(compose.uiTooling) debugImplementation(compose.uiTooling)
} }

@ -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 = {},
)
}
}

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="search">Search</string>
</resources>

@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.ContentAlpha
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Check
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -17,12 +16,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color 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 import androidx.compose.ui.unit.dp
@Composable @Composable
fun CheckableIconRow( fun CheckableIconRow(
icon: Painter, icon: ImageVector,
tint: Color, tint: Color,
text: String, text: String,
selected: Boolean, selected: Boolean,
@ -45,7 +44,7 @@ fun CheckableIconRow(
@Composable @Composable
fun CheckableIconRow( fun CheckableIconRow(
icon: Painter, icon: ImageVector,
tint: Color, tint: Color,
selected: Boolean, selected: Boolean,
onClick: () -> Unit, onClick: () -> Unit,
@ -58,9 +57,9 @@ fun CheckableIconRow(
.clickable { onClick() } .clickable { onClick() }
) { ) {
Icon( Icon(
painter = icon, imageVector = icon,
contentDescription = null, 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), modifier = Modifier.padding(start = 16.dp, end = 32.dp, top = 12.dp, bottom = 12.dp),
) )
Box(modifier = Modifier.weight(1f)) { Box(modifier = Modifier.weight(1f)) {
@ -70,7 +69,7 @@ fun CheckableIconRow(
Icon( Icon(
imageVector = Icons.Outlined.Check, imageVector = Icons.Outlined.Check,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium), tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp),
) )
} else { } else {

@ -7,7 +7,6 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.KeyboardArrowUp import androidx.compose.material.icons.outlined.KeyboardArrowUp
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -49,7 +48,7 @@ fun CollapsibleRow(
Icon( Icon(
imageVector = Icons.Outlined.KeyboardArrowUp, imageVector = Icons.Outlined.KeyboardArrowUp,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium), tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.rotate(rotationAngle) modifier = Modifier.rotate(rotationAngle)
) )
} }

@ -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<FilterListItem>,
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,
)
}
}
}
}
}
}
}
},
)
}
Loading…
Cancel
Save