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