Use lifecycle-runtime-compose

pull/2937/head
Alex Baker 1 year ago
parent 12c7170a0b
commit 01a788bdb6

@ -182,6 +182,7 @@ dependencies {
implementation(libs.androidx.fragment.ktx)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.room)
implementation(libs.androidx.sqlite)
@ -201,7 +202,7 @@ dependencies {
debugImplementation(libs.kotlin.reflect)
implementation(libs.kotlin.jdk8)
implementation(libs.kotlin.immutable)
implementation(libs.kotlinx.immutable)
implementation(libs.kotlinx.serialization)
implementation(libs.okhttp)
implementation(libs.persistent.cookiejar)

@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.core.content.IntentCompat.getParcelableExtra
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
@ -38,7 +39,6 @@ import org.tasks.activities.TagSettingsActivity
import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.drawer.TasksMenu
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao
@ -105,7 +105,7 @@ class MainActivity : AppCompatActivity() {
handleIntent()
binding.composeView.setContent {
val state = viewModel.state.collectAsStateLifecycleAware().value
val state = viewModel.state.collectAsStateWithLifecycle().value
if (state.drawerOpen) {
TasksTheme {
TasksMenu(

@ -39,6 +39,7 @@ import androidx.core.os.BundleCompat
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback
@ -63,7 +64,6 @@ 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
import org.tasks.compose.edit.DueDateRow
@ -435,7 +435,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
@Composable
private fun DueDateRow() {
val dueDate = editViewModel.dueDate.collectAsStateLifecycleAware().value
val dueDate = editViewModel.dueDate.collectAsStateWithLifecycle().value
DueDateRow(
dueDate = if (dueDate == 0L) {
null
@ -470,7 +470,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
@Composable
private fun PriorityRow() {
PriorityRow(
priority = editViewModel.priority.collectAsStateLifecycleAware().value,
priority = editViewModel.priority.collectAsStateWithLifecycle().value,
onChangePriority = { editViewModel.priority.value = it },
desaturate = preferences.desaturateDarkMode,
)
@ -488,7 +488,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
@Composable
private fun ListRow() {
val list = editViewModel.selectedList.collectAsStateLifecycleAware().value
val list = editViewModel.selectedList.collectAsStateWithLifecycle().value
ListRow(
list = list,
colorProvider = { chipProvider.getColor(it) },
@ -517,7 +517,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
CommentsRow(
comments = userActivityDao
.watchComments(editViewModel.task.uuid)
.collectAsStateLifecycleAware(emptyList())
.collectAsStateWithLifecycle(emptyList())
.value,
deleteComment = {
lifecycleScope.launch {

@ -40,6 +40,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.DefaultItemAnimator
@ -61,8 +62,6 @@ 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 com.todoroo.astrid.api.CustomFilter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.TagFilter
import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.repeats.RepeatTaskHelper
@ -94,7 +93,6 @@ import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.compose.NotificationsDisabledBanner
import org.tasks.compose.SubscriptionNagBanner
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.rememberReminderPermissionState
import org.tasks.data.TaskContainer
import org.tasks.data.dao.CaldavDao
@ -124,7 +122,9 @@ import org.tasks.filters.AstridOrderingFilter
import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter
import org.tasks.filters.FilterImpl
import org.tasks.filters.GtasksFilter
import org.tasks.filters.PlaceFilter
import org.tasks.filters.TagFilter
import org.tasks.markdown.MarkdownProvider
import org.tasks.preferences.Device
import org.tasks.preferences.Preferences
@ -357,7 +357,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
setupMenu(toolbar)
binding.banner.setContent {
val context = LocalContext.current
val state = listViewModel.state.collectAsStateLifecycleAware().value
val state = listViewModel.state.collectAsStateWithLifecycle().value
TasksTheme {
val hasRemindersPermission by rememberReminderPermissionState()
val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) {

@ -12,16 +12,16 @@ import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.Strings
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.AttachmentRow
import org.tasks.data.entity.TaskAttachment
import org.tasks.data.dao.TaskAttachmentDao
import org.tasks.data.entity.TaskAttachment
import org.tasks.dialogs.AddAttachmentDialog
import org.tasks.files.FileHelper
import org.tasks.preferences.Preferences
@ -50,7 +50,7 @@ class FilesControlSet : TaskEditControlFragment() {
setContent {
TasksTheme {
AttachmentRow(
attachments = viewModel.selectedAttachments.collectAsStateLifecycleAware().value,
attachments = viewModel.selectedAttachments.collectAsStateWithLifecycle().value,
openAttachment = {
FileHelper.startActionView(
requireActivity(),

@ -11,18 +11,18 @@ import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import net.fortuna.ical4j.model.Recur
import net.fortuna.ical4j.model.WeekDay
import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.RepeatRow
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import org.tasks.repeats.BasicRecurrenceDialog
import org.tasks.repeats.RecurrenceUtils.newRecur
import org.tasks.repeats.RepeatRuleToString
@ -87,10 +87,10 @@ class RepeatControlSet : TaskEditControlFragment() {
setContent {
TasksTheme {
RepeatRow(
recurrence = viewModel.recurrence.collectAsStateLifecycleAware().value?.let {
recurrence = viewModel.recurrence.collectAsStateWithLifecycle().value?.let {
repeatRuleToString.toString(it)
},
repeatAfterCompletion = viewModel.repeatAfterCompletion.collectAsStateLifecycleAware().value,
repeatAfterCompletion = viewModel.repeatAfterCompletion.collectAsStateWithLifecycle().value,
onClick = {
lifecycleScope.launch {
val accountType = viewModel.selectedList.value

@ -5,10 +5,10 @@ import android.content.Intent
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.update
import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.TagsRow
import org.tasks.tags.TagPickerActivity
import org.tasks.themes.TasksTheme
@ -31,7 +31,7 @@ class TagsControlSet : TaskEditControlFragment() {
setContent {
TasksTheme {
TagsRow(
tags = viewModel.selectedTags.collectAsStateLifecycleAware().value,
tags = viewModel.selectedTags.collectAsStateWithLifecycle().value,
colorProvider = { chipProvider.getColor(it) },
onClick = this@TagsControlSet::onRowClick,
onClear = { tag ->

@ -12,13 +12,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.ui.TimeDurationControlSet
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.TimerRow
import org.tasks.data.entity.Task
import org.tasks.date.DateTimeUtils
@ -91,9 +91,9 @@ class TimerControlSet : TaskEditControlFragment() {
setContent {
TasksTheme {
TimerRow(
started = viewModel.timerStarted.collectAsStateLifecycleAware().value,
estimated = viewModel.estimatedSeconds.collectAsStateLifecycleAware().value,
elapsed = viewModel.elapsedSeconds.collectAsStateLifecycleAware().value,
started = viewModel.timerStarted.collectAsStateWithLifecycle().value,
estimated = viewModel.estimatedSeconds.collectAsStateWithLifecycle().value,
elapsed = viewModel.elapsedSeconds.collectAsStateWithLifecycle().value,
timerClicked = this@TimerControlSet::timerClicked,
onClick = this@TimerControlSet::onRowClick,
)

@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionStatus
import com.google.accompanist.permissions.rememberPermissionState
@ -21,7 +22,6 @@ import com.todoroo.andlib.utility.AndroidUtilities
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.activities.DateAndTimePickerActivity
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.AlarmRow
import org.tasks.compose.rememberReminderPermissionState
import org.tasks.data.entity.Alarm
@ -105,7 +105,7 @@ class ReminderControlSet : TaskEditControlFragment() {
}
AlarmRow(
locale = locale,
alarms = viewModel.selectedAlarms.collectAsStateLifecycleAware().value,
alarms = viewModel.selectedAlarms.collectAsStateWithLifecycle().value,
hasNotificationPermissions = hasReminderPermissions &&
(notificationPermissions == null || notificationPermissions.status == PermissionStatus.Granted),
fixNotificationPermissions = {

@ -7,12 +7,12 @@ import android.os.Bundle
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.viewModels
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.andlib.utility.DateUtilities.getTimeString
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.StartDateRow
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.StartDatePicker
@ -49,13 +49,13 @@ class StartDateControlSet : TaskEditControlFragment() {
(parent as ComposeView).apply {
setContent {
TasksTheme {
val selectedDay = vm.selectedDay.collectAsStateLifecycleAware().value
val selectedTime = vm.selectedTime.collectAsStateLifecycleAware().value
val selectedDay = vm.selectedDay.collectAsStateWithLifecycle().value
val selectedTime = vm.selectedTime.collectAsStateWithLifecycle().value
StartDateRow(
startDate = viewModel.startDate.collectAsStateLifecycleAware().value,
startDate = viewModel.startDate.collectAsStateWithLifecycle().value,
selectedDay = selectedDay,
selectedTime = selectedTime,
hasDueDate = viewModel.dueDate.collectAsStateLifecycleAware().value > 0,
hasDueDate = viewModel.dueDate.collectAsStateWithLifecycle().value > 0,
printDate = {
DateUtilities.getRelativeDateTime(
context,

@ -10,13 +10,13 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.painterResource
import androidx.core.view.isVisible
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.compose.ListSettingsComposables.PrincipalList
import org.tasks.compose.ShareInvite.ShareInviteDialog
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.data.PrincipalWithAccess
import org.tasks.data.dao.PrincipalDao
import org.tasks.data.entity.CaldavAccount
@ -54,7 +54,7 @@ class CaldavCalendarSettingsActivity : BaseCaldavCalendarSettingsActivity() {
caldavCalendar?.takeIf { it.id > 0 }?.let {
findViewById<ComposeView>(R.id.people).setContent {
TasksTheme {
val principals = principalDao.getPrincipals(it.id).collectAsStateLifecycleAware(initial = emptyList()).value
val principals = principalDao.getPrincipals(it.id).collectAsStateWithLifecycle(initialValue = emptyList()).value
PrincipalList(
principals = principals,
onRemove = if (canRemovePrincipals) { { onRemove(it) } } else null,

@ -26,6 +26,7 @@ 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.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.LocalBroadcastManager
@ -54,7 +55,7 @@ class FilterSelectionActivity : AppCompatActivity() {
colorScheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
) {
val viewModel: FilterPickerViewModel = viewModel()
val state = viewModel.viewState.collectAsStateLifecycleAware().value
val state = viewModel.viewState.collectAsStateWithLifecycle().value
BasicAlertDialog(
onDismissRequest = { finish() },
modifier = Modifier.padding(vertical = 32.dp)

@ -1,20 +1,9 @@
package org.tasks.compose
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.flowWithLifecycle
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.flow.flow
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
fun <T> Flow<T>.throttleLatest(period: Long) = flow {
conflate().collect {
@ -22,28 +11,3 @@ fun <T> Flow<T>.throttleLatest(period: Long) = flow {
delay(period)
}
}
// https://proandroiddev.com/how-to-collect-flows-lifecycle-aware-in-jetpack-compose-babd53582d0b
@Composable
fun <T> rememberFlow(
flow: Flow<T>,
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current
): Flow<T> {
return remember(key1 = flow, key2 = lifecycleOwner) { flow.flowWithLifecycle(lifecycleOwner.lifecycle, Lifecycle.State.STARTED) }
}
@Composable
fun <T : R, R> Flow<T>.collectAsStateLifecycleAware(
initial: R,
context: CoroutineContext = EmptyCoroutineContext
): State<R> {
val lifecycleAwareFlow = rememberFlow(flow = this)
return lifecycleAwareFlow.collectAsState(initial = initial, context = context)
}
@Suppress("StateFlowValueCalledInComposition")
@Composable
fun <T> StateFlow<T>.collectAsStateLifecycleAware(
context: CoroutineContext = EmptyCoroutineContext
): State<T> = collectAsStateLifecycleAware(value, context)

@ -19,6 +19,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.todoroo.astrid.ui.ReminderControlSetViewModel
@ -28,7 +29,6 @@ import org.tasks.compose.AddReminderDialog
import org.tasks.compose.ClearButton
import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.data.entity.Alarm
import org.tasks.reminders.AlarmToString
import org.tasks.themes.TasksTheme
@ -51,7 +51,7 @@ fun AlarmRow(
TaskEditRow(
iconRes = R.drawable.ic_outline_notifications_24px,
content = {
val viewState = vm.viewState.collectAsStateLifecycleAware().value
val viewState = vm.viewState.collectAsStateWithLifecycle().value
if (hasNotificationPermissions) {
Alarms(
alarms = alarms,

@ -17,13 +17,13 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberMultiplePermissionsState
import org.tasks.R
import org.tasks.calendars.AndroidCalendar
import org.tasks.calendars.CalendarPickerViewModel
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.themes.TasksTheme
@OptIn(ExperimentalPermissionsApi::class)
@ -43,7 +43,7 @@ fun CalendarPicker(
)
if (hasPermissions.allPermissionsGranted) {
CalendarPickerList(
calendars = viewModel.viewState.collectAsStateLifecycleAware().value.calendars,
calendars = viewModel.viewState.collectAsStateWithLifecycle().value.calendars,
selected = selected,
onSelected = onSelected,
)

@ -5,15 +5,15 @@ import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.Priority
import org.tasks.data.entity.Task
import org.tasks.databinding.DialogDateTimePickerBinding
import org.tasks.databinding.DialogPriorityPickerBinding
import javax.inject.Inject
@ -47,7 +47,7 @@ class PriorityPicker : DialogFragment() {
return requireActivity().let { fragmentActivity ->
val inflater = fragmentActivity.layoutInflater
val binding = DialogPriorityPickerBinding.inflate(inflater, null, false)
binding.priorityRow.setContent { Priority(selected = priorityPickerViewModel.priority.collectAsStateLifecycleAware().value,
binding.priorityRow.setContent { Priority(selected = priorityPickerViewModel.priority.collectAsStateWithLifecycle().value,
onClick = { priorityPickerViewModel.setPriority( it ) }, desaturate = savedInstanceState?.getBoolean(
EXTRA_DESATURATE) ?: false) }
val builder = AlertDialog.Builder(fragmentActivity)

@ -23,9 +23,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
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.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDownward
import androidx.compose.material.icons.outlined.ArrowUpward
@ -34,8 +31,11 @@ import androidx.compose.material.icons.outlined.SubdirectoryArrowRight
import androidx.compose.material.icons.outlined.SwapVert
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@ -55,12 +55,12 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.core.view.WindowCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.todoroo.astrid.core.SortHelper
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.compose.SystemBars
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.themes.TasksTheme
@AndroidEntryPoint
@ -84,7 +84,7 @@ class SortSettingsActivity : ComponentActivity() {
statusBarColor = scrimColor,
navigationBarColor = MaterialTheme.colorScheme.surface,
)
val state = viewModel.state.collectAsStateLifecycleAware().value
val state = viewModel.state.collectAsStateWithLifecycle().value
val mainSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val scope = rememberCoroutineScope()
var showGroupPicker by remember { mutableStateOf(false) }

@ -6,8 +6,8 @@ import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.pickers.CustomRecurrence
import org.tasks.themes.TasksTheme
@ -20,7 +20,7 @@ class CustomRecurrenceActivity : FragmentActivity() {
setContent {
TasksTheme {
CustomRecurrence(
state = viewModel.state.collectAsStateLifecycleAware().value,
state = viewModel.state.collectAsStateWithLifecycle().value,
save = {
setResult(RESULT_OK, Intent().putExtra(EXTRA_RRULE, viewModel.getRecur()))
finish()

@ -8,13 +8,13 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Toast.LENGTH_SHORT
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.todoroo.astrid.activity.TaskEditFragment
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.calendars.CalendarPicker
import org.tasks.calendars.CalendarProvider
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.CalendarRow
import org.tasks.extensions.Context.toast
import org.tasks.preferences.PermissionChecker
@ -47,8 +47,8 @@ class CalendarControlSet : TaskEditControlFragment() {
setContent {
TasksTheme {
CalendarRow(
eventUri = viewModel.eventUri.collectAsStateLifecycleAware().value,
selectedCalendar = viewModel.selectedCalendar.collectAsStateLifecycleAware().value?.let {
eventUri = viewModel.eventUri.collectAsStateWithLifecycle().value,
selectedCalendar = viewModel.selectedCalendar.collectAsStateWithLifecycle().value?.let {
calendarProvider.getCalendar(it)?.name
},
onClick = {

@ -8,12 +8,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.core.util.Pair
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberMultiplePermissionsState
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.LocationRow
import org.tasks.data.Location
import org.tasks.data.createGeofence
@ -90,7 +90,7 @@ class LocationControlSet : TaskEditControlFragment() {
rememberMultiplePermissionsState(permissions = backgroundPermissions())
.allPermissionsGranted
LocationRow(
location = viewModel.selectedLocation.collectAsStateLifecycleAware().value,
location = viewModel.selectedLocation.collectAsStateWithLifecycle().value,
hasPermissions = hasPermissions,
onClick = this@LocationControlSet::onRowClick,
openGeofenceOptions = {

@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.todoroo.astrid.activity.MainActivityViewModel
import com.todoroo.astrid.dao.TaskDao
@ -15,7 +16,6 @@ import com.todoroo.astrid.service.TaskCreator
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.SubtaskRow
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.Task
@ -55,15 +55,15 @@ class SubtaskControlSet : TaskEditControlFragment() {
TasksTheme {
SubtaskRow(
originalFilter = viewModel.originalList,
filter = viewModel.selectedList.collectAsStateLifecycleAware().value,
filter = viewModel.selectedList.collectAsStateWithLifecycle().value,
hasParent = viewModel.hasParent,
desaturate = preferences.desaturateDarkMode,
existingSubtasks = if (viewModel.isNew) {
TaskListViewModel.TasksResults.Results(SectionedDataSource())
} else {
listViewModel.state.collectAsStateLifecycleAware().value.tasks
listViewModel.state.collectAsStateWithLifecycle().value.tasks
},
newSubtasks = viewModel.newSubtasks.collectAsStateLifecycleAware().value,
newSubtasks = viewModel.newSubtasks.collectAsStateWithLifecycle().value,
openSubtask = this@SubtaskControlSet::openSubtask,
completeExistingSubtask = this@SubtaskControlSet::complete,
toggleSubtask = this@SubtaskControlSet::toggleSubtask,

@ -68,5 +68,5 @@ android {
}
dependencies {
add("kspAndroid", libs.androidx.room.compiler)
ksp(libs.androidx.room.compiler)
}

@ -43,6 +43,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -70,6 +71,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -101,6 +103,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
@ -120,6 +123,7 @@
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -136,6 +140,7 @@
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -151,6 +156,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -169,6 +175,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -186,6 +193,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
@ -205,6 +213,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
@ -352,6 +361,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -377,6 +387,7 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -580,6 +591,7 @@
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -728,6 +740,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -844,6 +857,26 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
+| \--- androidx.fragment:fragment:1.8.0 (c)
++--- androidx.lifecycle:lifecycle-runtime:2.8.2 (*)
++--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2
+| \--- androidx.lifecycle:lifecycle-runtime-compose-android:2.8.2
+| +--- androidx.annotation:annotation:1.8.0 (*)
+| +--- androidx.compose.runtime:runtime:1.6.5 -> 1.6.8 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.2 (c)
+| \--- androidx.lifecycle:lifecycle-common-java8:2.8.2 (c)
++--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (*)
++--- androidx.room:room-runtime:2.7.0-alpha04 (*)
++--- androidx.sqlite:sqlite-bundled:2.5.0-alpha04
@ -1057,6 +1090,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)

@ -44,6 +44,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -71,6 +72,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -102,6 +104,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
@ -121,6 +124,7 @@
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -137,6 +141,7 @@
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -152,6 +157,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -170,6 +176,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -187,6 +194,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
@ -206,6 +214,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
@ -275,6 +284,7 @@
+| | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -692,6 +702,7 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -889,6 +900,7 @@
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -973,6 +985,7 @@
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
@ -1080,6 +1093,26 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
+| \--- androidx.fragment:fragment:1.8.0 (c)
++--- androidx.lifecycle:lifecycle-runtime:2.8.2 (*)
++--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2
+| \--- androidx.lifecycle:lifecycle-runtime-compose-android:2.8.2
+| +--- androidx.annotation:annotation:1.8.0 (*)
+| +--- androidx.compose.runtime:runtime:1.6.5 -> 1.6.8 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.2 (c)
+| \--- androidx.lifecycle:lifecycle-common-java8:2.8.2 (c)
++--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (*)
++--- androidx.room:room-runtime:2.7.0-alpha04 (*)
++--- androidx.sqlite:sqlite-bundled:2.5.0-alpha04
@ -1291,6 +1324,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-compose:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.8.2 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.8.2 (c)

@ -32,7 +32,7 @@ jems = "1.33"
junit-junit = "4.13.2"
junit = "1.1.5"
kotlin = "2.0.0"
kotlinx-coroutines-test = "1.8.1"
kotlinx-coroutines = "1.8.1"
leakcanary = "2.14"
lib-recur = "0.11.4"
lifecycle = "2.8.2"
@ -77,6 +77,7 @@ androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref =
androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "hilt" }
androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junit" }
androidx-lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime", version.ref = "lifecycle" }
androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "lifecycle" }
androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel", version.ref = "lifecycle" }
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
androidx-preference = { module = "androidx.preference:preference", version.ref = "preference" }
@ -123,10 +124,10 @@ jchronic = { module = "com.rubiconproject.oss:jchronic", version.ref = "jchronic
junit = { module = "junit:junit", version.ref = "junit-junit" }
kermit = { module = "co.touchlab:kermit", version = "2.0.4" }
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
kotlin-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.3.7" }
kotlin-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines-test" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
kotlinx-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.3.7" }
kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.7.0" }
leakcanary = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" }
locale = { module = "com.github.twofortyfouram:android-plugin-api-for-locale", version.ref = "locale" }

Loading…
Cancel
Save