Compare commits

...

31 Commits

Author SHA1 Message Date
renovate[bot] ad5f3ca577
Update dependency com.google.apis:google-api-services-tasks to v1-rev20240423-2.0.0 3 weeks ago
Don Zouras 0eac5f61eb Translated using Weblate (Esperanto)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
3 weeks ago
Milo Ivir c686ce883d Translated using Weblate (Croatian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
3 weeks ago
大王叫我来巡山 ab25398cd0 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
3 weeks ago
renovate[bot] 3b1c133d22 Update kotlin 3 weeks ago
renovate[bot] 3bfd0ab4f8 Update dependency com.google.firebase:firebase-bom to v32.8.1 3 weeks ago
Liz de Sartiges ffc0113d7f Initial support for z flip 5 cover screen
see : https://developer.samsung.com/galaxy-z/flex_window.html
3 weeks ago
Don Zouras 9de9718ad5 Translated using Weblate (Esperanto)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
3 weeks ago
Oğuz Ersen a7d2c9c406 Translated using Weblate (Turkish)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
3 weeks ago
gallegonovato b3006b9ac2 Translated using Weblate (Spanish)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
3 weeks ago
Don Zouras de3ef1f9c9 Translated using Weblate (Esperanto)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
3 weeks ago
Alex Baker ce9e722a3f Delete more unused tag picker code 4 weeks ago
Alex Baker 4b892a0eb1 Rename to TagPickerActivity
Delete some more unused code
4 weeks ago
Hady e6e275834a
Tag picker compose (#2849)
TagPickerActivity refactoring to Compose

1. state of the SearchBar moved to the viewModel
2. viewModel used as parameter to @Composables instead of number of separate ones
3. Import of TagPickerActivity is replaced by TagPickerActivityCompose through the project
4 weeks ago
Alex Baker 782f4d6d7c Fix swipe to snooze time 4 weeks ago
elmuffo a1da71d3e1
Swipe to snooze (#2839) 4 weeks ago
Alex Baker c793a300cc Add preference summary 4 weeks ago
Ilya Bizyaev bf84bf9e82 [Feature] Add an option to allow adding tasks without unlock
I often find myself picking up the phone just to write down a task, so
I've added a notification drawer quick setting to speed things up.
However, when I use this button from the lock screen, I have to unlock
my device first, which is annoying. I would like to be able to add (not
view) tasks without the need to unlock my phone.

This PR adds such an optional feature for devices running Android 8.1+.
Note that I am not an Android developer, so the implementation is
probably not perfect. However, from my testing on an emulator, this
code seems to do just what I want.
4 weeks ago
SC 363b29babb
Translated using Weblate (Portuguese)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt/
4 weeks ago
min7-i c1ff953f5c Translated using Weblate (German)
Currently translated at 99.3% (651 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 month ago
Alex Baker 63482e5db9 AGP 8.3.2 1 month ago
Emin Tufan Çetin 2f7dc0c7f1
Translated using Weblate (Turkish)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
1 month ago
Lionel HANNEQUIN d672507fae
Translated using Weblate (French)
Currently translated at 99.8% (654 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
1 month ago
Jonatan Nyberg ce2a3c8a3f
Translated using Weblate (Swedish)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 month ago
sorifukobexomajepasiricupuva33 9cd114d68b
Translated using Weblate (German)
Currently translated at 99.2% (650 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
2 months ago
Patrick V. Leguizamon 0e663f0e08
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
2 months ago
Mayhm 1d1efd008d
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
2 months ago
Alex Baker 26ab3d5866 Exclude past snooze times from Snooze Filter
This should exclude tasks that were completed before their snooze time
lapsed
2 months ago
Mayhm 9a4fcbbd39
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
2 months ago
Alex Baker 72bfda9224 Fix subtasks row for new tasks 2 months ago
Alex Baker 1067de4183 Emit SectionedDataSource from TaskListViewModel 2 months ago

@ -310,6 +310,9 @@
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/scrollable_widget_provider_info"/>
<meta-data
android:name="com.samsung.android.appwidget.provider"
android:resource="@xml/samsung_scrollable_flex_window_widget_meta_info"/>
</receiver>
<!-- ======================================================== Services = -->

@ -160,6 +160,10 @@ public class AndroidUtilities {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
}
public static boolean atLeastOreoMR1() {
return Build.VERSION.SDK_INT >= VERSION_CODES.O_MR1;
}
public static boolean atLeastP() {
return VERSION.SDK_INT >= Build.VERSION_CODES.P;
}

@ -43,6 +43,7 @@ import androidx.lifecycle.lifecycleScope
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreoMR1
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task
@ -150,6 +151,9 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
discardButtonClick()
}
}
if (atLeastOreoMR1()) {
activity?.setShowWhenLocked(preferences.showEditScreenWithoutUnlock)
}
binding = FragmentTaskEditBinding.inflate(inflater)
val view: View = binding.root
@ -305,6 +309,13 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
return view
}
override fun onDestroyView() {
super.onDestroyView()
if (atLeastOreoMR1()) {
activity?.setShowWhenLocked(false)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
taskEditEventBus
.onEach(this::process)

@ -118,6 +118,7 @@ import org.tasks.preferences.Preferences
import org.tasks.sync.SyncAdapters
import org.tasks.tags.TagPickerActivity
import org.tasks.tasklist.DragAndDropRecyclerAdapter
import org.tasks.tasklist.SectionedDataSource
import org.tasks.tasklist.TaskViewHolder
import org.tasks.tasklist.ViewHolderFactory
import org.tasks.themes.ColorProvider
@ -188,7 +189,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
activity?.recreate()
}
if (data.getBooleanExtra(SortSettingsActivity.EXTRA_CHANGED_GROUP, false)) {
taskAdapter.clearCollapsed()
listViewModel.clearCollapsed()
}
listViewModel.invalidate()
}
@ -237,7 +238,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
super.onSaveInstanceState(outState)
val selectedTaskIds: List<Long> = taskAdapter.getSelected()
outState.putLongArray(EXTRA_SELECTED_TASK_IDS, selectedTaskIds.toLongArray())
outState.putLongArray(EXTRA_COLLAPSED, taskAdapter.getCollapsed().toLongArray())
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -250,7 +250,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(requireActivity(), onBackPressed)
}
@ -274,7 +274,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
// set up list adapters
taskAdapter = taskAdapterProvider.createTaskAdapter(filter)
taskAdapter.setCollapsed(savedInstanceState?.getLongArray(EXTRA_COLLAPSED))
listViewModel.setFilter(filter)
(recyclerView.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false
recyclerView.layoutManager = LinearLayoutManager(context)
@ -362,11 +361,19 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
return binding.root
}
private fun submitList(tasks: List<TaskContainer>) {
private fun submitList(tasks: SectionedDataSource) {
if (recyclerAdapter !is DragAndDropRecyclerAdapter) {
setAdapter(
DragAndDropRecyclerAdapter(
taskAdapter, binding.bodyStandard.recyclerView, viewHolderFactory, this, tasks, preferences))
adapter = taskAdapter,
recyclerView = binding.bodyStandard.recyclerView,
viewHolderFactory = viewHolderFactory,
taskList = this,
tasks = tasks,
preferences = preferences,
toggleCollapsed = { listViewModel.toggleCollapsed(it) },
)
)
} else {
recyclerAdapter?.submitList(tasks)
}
@ -669,7 +676,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
onBackPressed.isEnabled = true
onBackPressed.isEnabled = true
search.setOnQueryTextListener(this)
listViewModel.setSearchQuery("")
if (preferences.isTopAppBar) {
@ -679,7 +686,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
onBackPressed.isEnabled = false
onBackPressed.isEnabled = false
search.setOnQueryTextListener(null)
listViewModel.setFilter(filter)
listViewModel.setSearchQuery(null)
@ -894,8 +901,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
makeSnackbar(R.string.copy_multiple_tasks_confirmation, duplicates.size.toString())?.show()
}
fun clearCollapsed() = taskAdapter.clearCollapsed()
override fun onCompletedTask(task: TaskContainer, newState: Boolean) {
if (task.isReadOnly) {
return
@ -1010,7 +1015,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
const val ACTION_RELOAD = "action_reload"
const val ACTION_DELETED = "action_deleted"
private const val EXTRA_SELECTED_TASK_IDS = "extra_selected_task_ids"
private const val EXTRA_COLLAPSED = "extra_collapsed"
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"

@ -34,11 +34,11 @@ class NavigationDrawerAdapter @Inject constructor(
private val colorProvider: ColorProvider,
private val subheaderClickHandler: SubheaderClickHandler,
) : RecyclerView.Adapter<RecyclerView.ViewHolder>(),
DragAndDropDiffer<FilterListItem, MutableList<FilterListItem>> {
DragAndDropDiffer<FilterListItem, ArrayList<FilterListItem>> {
private lateinit var onClick: (FilterListItem?) -> Unit
override val channel = Channel<List<FilterListItem>>(Channel.UNLIMITED)
override val updates: Queue<Pair<MutableList<FilterListItem>, DiffUtil.DiffResult?>> = LinkedList()
override val channel = Channel<ArrayList<FilterListItem>>(Channel.UNLIMITED)
override val updates: Queue<Pair<ArrayList<FilterListItem>, DiffUtil.DiffResult?>> = LinkedList()
override val scope: CoroutineScope =
CoroutineScope(Executors.newSingleThreadExecutor().asCoroutineDispatcher() + Job())
override var items = initializeDiffer(ArrayList())
@ -84,9 +84,7 @@ class NavigationDrawerAdapter @Inject constructor(
private fun getItem(position: Int) = items[position]
override fun transform(list: List<FilterListItem>) = list.toMutableList()
override fun diff(last: MutableList<FilterListItem>, next: MutableList<FilterListItem>) =
override fun diff(last: ArrayList<FilterListItem>, next: ArrayList<FilterListItem>) =
DiffUtil.calculateDiff(DiffCallback(last, next))
private class DiffCallback(val old: List<FilterListItem>, val new: List<FilterListItem>) : DiffUtil.Callback() {

@ -22,7 +22,6 @@ import org.tasks.data.GoogleTaskDao
import org.tasks.data.TaskContainer
import org.tasks.date.DateTimeUtils.toAppleEpoch
import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.tasklist.SectionedDataSource.Companion.HEADER_COMPLETED
import org.tasks.time.DateTimeUtils.millisOfDay
open class TaskAdapter(
@ -34,7 +33,6 @@ open class TaskAdapter(
private val taskMover: TaskMover,
) {
private val selected = HashSet<Long>()
private val collapsed = mutableSetOf(HEADER_COMPLETED)
private lateinit var dataSource: TaskAdapterDataSource
val count: Int
@ -56,15 +54,6 @@ open class TaskAdapter(
fun clearSelections() = selected.clear()
fun getCollapsed() = HashSet(collapsed)
fun setCollapsed(groups: LongArray?) {
clearCollapsed()
groups?.toList()?.let(collapsed::addAll)
}
fun clearCollapsed() = collapsed.retainAll(listOf(HEADER_COMPLETED))
open fun getIndent(task: TaskContainer): Int = task.indent
open fun canMove(source: TaskContainer, from: Int, target: TaskContainer, to: Int): Boolean {
@ -125,14 +114,6 @@ open class TaskAdapter(
}
}
fun toggleCollapsed(group: Long) {
if (collapsed.contains(group)) {
collapsed.remove(group)
} else {
collapsed.add(group)
}
}
open fun supportsAstridSorting(): Boolean = false
open suspend fun moved(from: Int, to: Int, indent: Int) {

@ -13,25 +13,24 @@ import kotlinx.coroutines.flow.consumeAsFlow
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.scan
import java.util.Queue
interface DragAndDropDiffer<T, R> : ListUpdateCallback {
val channel: Channel<List<T>>
interface DragAndDropDiffer<T, R : List<T>> : ListUpdateCallback {
val channel: Channel<R>
val updates: Queue<Pair<R, DiffUtil.DiffResult?>>
var items: R
var dragging: Boolean
val scope: CoroutineScope
fun submitList(list: List<T>) {
fun submitList(list: R) {
channel.trySend(list)
}
fun calculateDiff(last: Pair<R, DiffUtil.DiffResult?>, next: R): Pair<R, DiffUtil.DiffResult?> {
AndroidUtilities.assertNotMainThread()
return Pair(next, diff(last.first!!, next))
return Pair(next, diff(last.first, next))
}
fun applyDiff(update: Pair<R, DiffUtil.DiffResult?>) {
@ -53,11 +52,9 @@ interface DragAndDropDiffer<T, R> : ListUpdateCallback {
}
@ExperimentalCoroutinesApi
fun initializeDiffer(list: List<T>): R {
val initial = transform(list)
fun initializeDiffer(initial: R): R {
channel
.consumeAsFlow()
.map { transform(it) }
.scan(Pair(initial, null)) { last: Pair<R, DiffUtil.DiffResult?>, next: R ->
calculateDiff(last, next)
}
@ -68,8 +65,6 @@ interface DragAndDropDiffer<T, R> : ListUpdateCallback {
return initial
}
fun transform(list: List<T>): R
fun diff(last: R, next: R): DiffUtil.DiffResult
fun dispose() {

@ -100,7 +100,7 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
private fun updateFilters() = lifecycleScope.launch {
filterProvider
.drawerCustomizationItems()
.let { adapter.submitList(it) }
.let { adapter.submitList(ArrayList(it)) }
}
private fun onClick(item: FilterListItem?) {

@ -44,6 +44,7 @@ import org.tasks.compose.SubtaskChip
import org.tasks.compose.TaskEditIcon
import org.tasks.compose.TaskEditRow
import org.tasks.data.TaskContainer
import org.tasks.tasklist.SectionedDataSource
import org.tasks.ui.TaskListViewModel
@Composable
@ -90,7 +91,11 @@ fun SubtaskRow(
} else {
Spacer(modifier = Modifier.height(height = 8.dp))
if (existingSubtasks is TaskListViewModel.TasksResults.Results) {
existingSubtasks.tasks.forEach { task ->
existingSubtasks
.tasks
.filterIsInstance<TaskListViewModel.UiItem.Task>()
.map { it.task }
.forEach { task ->
ExistingSubtaskRow(
task = task,
desaturate = desaturate,
@ -237,7 +242,7 @@ fun NoSubtasks() {
filter = null,
hasParent = false,
desaturate = true,
existingSubtasks = TaskListViewModel.TasksResults.Results(emptyList()),
existingSubtasks = TaskListViewModel.TasksResults.Results(SectionedDataSource()),
newSubtasks = emptyList(),
openSubtask = {},
completeExistingSubtask = { _, _ -> },
@ -260,20 +265,22 @@ fun SubtasksPreview() {
hasParent = false,
desaturate = true,
existingSubtasks = TaskListViewModel.TasksResults.Results(
listOf(
TaskContainer(
task = Task(
title = "Existing subtask 1",
priority = Task.Priority.HIGH,
SectionedDataSource(
tasks = listOf(
TaskContainer(
task = Task(
title = "Existing subtask 1",
priority = Task.Priority.HIGH,
),
indent = 0
),
indent = 0
),
TaskContainer(
task = Task(
title = "Existing subtask 2 with a really long title",
priority = Task.Priority.LOW,
),
indent = 1
TaskContainer(
task = Task(
title = "Existing subtask 2 with a really long title",
priority = Task.Priority.LOW,
),
indent = 1
)
)
)
),

@ -119,6 +119,7 @@ class Alarm : Parcelable {
@JvmField val TABLE = Table(TABLE_NAME)
@JvmField val TASK = TABLE.column("task")
@JvmField val TYPE = TABLE.column("type")
@JvmField val TIME = TABLE.column("time")
const val TYPE_DATE_TIME = 0
const val TYPE_REL_START = 1

@ -1,6 +1,7 @@
package org.tasks.filters
import com.todoroo.andlib.sql.Criterion.Companion.and
import com.todoroo.andlib.sql.Functions.now
import com.todoroo.andlib.sql.Join.Companion.inner
import com.todoroo.andlib.sql.QueryTemplate
import com.todoroo.astrid.api.Filter
@ -24,7 +25,8 @@ data class SnoozedFilter(
.where(
and(
activeAndVisible(),
Alarm.TYPE.eq(Alarm.TYPE_SNOOZE)
Alarm.TYPE.eq(Alarm.TYPE_SNOOZE),
Alarm.TIME.gt(now()),
)
)
.toString()

@ -3,10 +3,13 @@ package org.tasks.notifications
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.alarms.AlarmService
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.tasks.injection.ApplicationScope
import org.tasks.preferences.Preferences
import timber.log.Timber
import javax.inject.Inject
@ -14,12 +17,26 @@ import javax.inject.Inject
class NotificationClearedReceiver : BroadcastReceiver() {
@Inject lateinit var notificationManager: NotificationManager
@Inject @ApplicationScope lateinit var scope: CoroutineScope
@Inject lateinit var preferences: Preferences
@Inject lateinit var alarmService: AlarmService
override fun onReceive(context: Context, intent: Intent) {
val notificationId = intent.getLongExtra(NotificationManager.EXTRA_NOTIFICATION_ID, -1L)
Timber.d("cleared $notificationId")
if (notificationId <= 0L) return
scope.launch {
notificationManager.cancel(notificationId)
if (preferences.useSwipeToSnooze()) {
var snoozeTime = preferences.swipeToSnoozeIntervalMS()
// snoozing for 0ms will cause the alarm service to miss this notification
// so sleep for 1s instead
if (snoozeTime == 0L) snoozeTime = 1000L
alarmService.snooze(
time = now() + snoozeTime,
taskIds = listOf(notificationId)
)
} else {
notificationManager.cancel(notificationId)
}
}
}
}

@ -176,6 +176,9 @@ class Preferences @JvmOverloads constructor(
return if (firstDayOfWeek < 1 || firstDayOfWeek > 7) 0 else firstDayOfWeek
}
val showEditScreenWithoutUnlock: Boolean
get() = getBoolean(R.string.p_show_edit_screen_without_unlock, false)
@SuppressLint("ApplySharedPref")
fun clear() {
prefs.edit().clear().commit()
@ -465,7 +468,15 @@ class Preferences @JvmOverloads constructor(
fun bundleNotifications(): Boolean = getBoolean(R.string.p_bundle_notifications, true)
fun usePersistentReminders(): Boolean =
AndroidUtilities.preUpsideDownCake() && getBoolean(R.string.p_rmd_persistent, true)
AndroidUtilities.preUpsideDownCake() && getBoolean(R.string.p_rmd_persistent, true)
fun useSwipeToSnooze(): Boolean =
getBoolean(R.string.p_rmd_swipe_to_snooze_enabled, false)
fun swipeToSnoozeIntervalMS(): Long =
TimeUnit.MINUTES.toMillis(
getIntegerFromString(R.string.p_rmd_swipe_to_snooze_time_minutes, 0).toLong()
)
var isSyncOngoing: Boolean
get() = syncFlags.any { getBoolean(it, false) }

@ -2,6 +2,7 @@ package org.tasks.preferences.fragments
import android.os.Bundle
import androidx.appcompat.content.res.AppCompatResources
import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreoMR1
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.injection.InjectingPreferenceFragment
@ -21,5 +22,7 @@ class TaskEditPreferences : InjectingPreferenceFragment() {
tint = context.getColor(R.color.icon_tint_with_alpha)
iconVisible = true
}
findPreference(R.string.p_show_edit_screen_without_unlock).isVisible = atLeastOreoMR1()
}
}

@ -1,172 +0,0 @@
package org.tasks.tags;
import static org.tasks.preferences.ResourceResolver.getData;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.widget.CompoundButton;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.core.content.res.ResourcesCompat;
import org.tasks.R;
public class CheckBoxTriStates extends AppCompatCheckBox {
private int alpha;
private State state;
private OnCheckedChangeListener clientListener;
private final OnCheckedChangeListener privateListener =
new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (state) {
case PARTIALLY_CHECKED:
case UNCHECKED:
setState(State.CHECKED, true);
break;
case CHECKED:
setState(State.UNCHECKED, true);
break;
}
}
};
public CheckBoxTriStates(Context context) {
super(context);
init();
}
public CheckBoxTriStates(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CheckBoxTriStates(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public void setState(State state, boolean notify) {
if (this.state != state) {
this.state = state;
if (notify && this.clientListener != null) {
this.clientListener.onCheckedChanged(this, this.isChecked());
}
}
updateBtn();
}
@Override
public void setOnCheckedChangeListener(@Nullable OnCheckedChangeListener listener) {
if (this.privateListener != listener) {
this.clientListener = listener;
}
super.setOnCheckedChangeListener(privateListener);
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.state = state.ordinal();
return ss;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
this.state = State.values()[ss.state];
updateBtn();
requestLayout();
}
private void init() {
alpha = (int) (255 * ResourcesCompat.getFloat(getResources(), R.dimen.alpha_secondary));
setState(State.UNCHECKED, false);
setOnCheckedChangeListener(this.privateListener);
}
private void updateBtn() {
int btnDrawable;
int alpha = 255;
switch (state) {
case PARTIALLY_CHECKED:
btnDrawable = R.drawable.ic_indeterminate_check_box_24px;
break;
case CHECKED:
btnDrawable = R.drawable.ic_outline_check_box_24px;
break;
default:
btnDrawable = R.drawable.ic_outline_check_box_outline_blank_24px;
alpha = this.alpha;
break;
}
Drawable original = getContext().getDrawable(btnDrawable);
Drawable drawable;
int color = state == State.UNCHECKED
? getContext().getColor(R.color.icon_tint)
: getData(getContext(), androidx.appcompat.R.attr.colorAccent);
drawable = original.mutate();
drawable.setTint(color);
drawable.setAlpha(alpha);
setButtonDrawable(drawable);
}
public enum State {
PARTIALLY_CHECKED,
CHECKED,
UNCHECKED
}
static class SavedState extends BaseSavedState {
public static final Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<>() {
@Override
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
@Override
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
int state;
SavedState(Parcelable superState) {
super(superState);
}
private SavedState(Parcel in) {
super(in);
state = in.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeValue(state);
}
@Override
public String toString() {
return "CheckboxTriState.SavedState{"
+ Integer.toHexString(System.identityHashCode(this))
+ " state="
+ state
+ "}";
}
}
}

@ -1,19 +0,0 @@
package org.tasks.tags;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import java.util.Objects;
import org.tasks.data.TagData;
class TagDiffCallback extends DiffUtil.ItemCallback<TagData> {
@Override
public boolean areItemsTheSame(@NonNull TagData oldItem, @NonNull TagData newItem) {
return Objects.equals(oldItem.getId(), newItem.getId());
}
@Override
public boolean areContentsTheSame(@NonNull TagData oldItem, @NonNull TagData newItem) {
return oldItem.equals(newItem);
}
}

@ -3,22 +3,49 @@ package org.tasks.tags
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.EditText
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.TriStateCheckbox
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewModelScope
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.Strings
import org.tasks.billing.Inventory
import org.tasks.data.TagData
import org.tasks.databinding.ActivityTagPickerBinding
import org.tasks.extensions.addBackPressedCallback
import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons
import org.tasks.themes.Theme
import javax.inject.Inject
@ -28,81 +55,221 @@ class TagPickerActivity : ThemedInjectingAppCompatActivity() {
@Inject lateinit var inventory: Inventory
@Inject lateinit var colorProvider: ColorProvider
private val viewModel: TagPickerViewModel by viewModels()
private var taskIds: ArrayList<Long>? = null
private lateinit var editText: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val intent = intent
taskIds = intent.getSerializableExtra(EXTRA_TASKS) as ArrayList<Long>?
if (savedInstanceState == null) {
intent.getParcelableArrayListExtra<TagData>(EXTRA_SELECTED)?.let {
val selected = intent.getParcelableArrayListExtra<TagData>(EXTRA_SELECTED)
if ( selected != null ) {
viewModel.setSelected(
it,
intent.getParcelableArrayListExtra(EXTRA_PARTIALLY_SELECTED)
selected, intent.getParcelableArrayListExtra<TagData>(EXTRA_PARTIALLY_SELECTED)
)
}
}
val binding = ActivityTagPickerBinding.inflate(layoutInflater)
editText = binding.searchInput.apply {
addTextChangedListener(
onTextChanged = { text, _, _, _ -> onSearch(text) }
)
}
setContentView(binding.root)
val toolbar = binding.toolbar
toolbar.setNavigationIcon(R.drawable.ic_outline_arrow_back_24px)
toolbar.setNavigationOnClickListener { onBackPressed() }
val themeColor = theme.themeColor
themeColor.applyToNavigationBar(this)
val recyclerAdapter = TagRecyclerAdapter(this, viewModel, inventory, colorProvider) { tagData, vh ->
onToggle(tagData, vh)
}
val recyclerView = binding.recyclerView
recyclerView.adapter = recyclerAdapter
(recyclerView.itemAnimator as DefaultItemAnimator?)!!.supportsChangeAnimations = false
recyclerView.layoutManager = LinearLayoutManager(this)
viewModel.observe(this) { recyclerAdapter.submitList(it) }
editText.setText(viewModel.text)
addBackPressedCallback {
if (isNullOrEmpty(viewModel.text)) {
val data = Intent()
data.putExtra(EXTRA_TASKS, taskIds)
data.putParcelableArrayListExtra(
EXTRA_PARTIALLY_SELECTED,
viewModel.getPartiallySelected()
addBackPressedCallback { handleBackPressed() }
viewModel.search("")
setContent {
MdcTheme {
TagPicker(
viewModel,
onBackClicked = { handleBackPressed() },
getTagIcon = { tagData -> getIcon(tagData) },
getTagColor = { tagData -> getColor(tagData) }
)
data.putParcelableArrayListExtra(EXTRA_SELECTED, viewModel.getSelected())
setResult(Activity.RESULT_OK, data)
finish()
} else {
clear()
}
} /* setContent */
}
}
} /* onCreate */
private fun onToggle(tagData: TagData, vh: TagPickerViewHolder) = lifecycleScope.launch {
val newTag = tagData.id == null
val newState = viewModel.toggle(tagData, vh.isChecked || newTag)
vh.updateCheckbox(newState)
if (newTag) {
clear()
private fun handleBackPressed() {
if (Strings.isNullOrEmpty(viewModel.searchText.value)) {
val data = Intent()
data.putExtra(EXTRA_TASKS, taskIds)
data.putParcelableArrayListExtra(EXTRA_PARTIALLY_SELECTED, viewModel.getPartiallySelected())
data.putParcelableArrayListExtra(EXTRA_SELECTED, viewModel.getSelected())
setResult(Activity.RESULT_OK, data)
finish()
} else {
viewModel.search("")
}
}
} /* handleBackPressed */
private fun onSearch(text: CharSequence?) {
viewModel.search(text?.toString() ?: "")
private fun getColor(tagData: TagData): Color {
if (tagData.getColor() != 0) {
val themeColor = colorProvider.getThemeColor(tagData.getColor()!!, true)
if (inventory.purchasedThemes() || themeColor.isFree) {
return Color(themeColor.primaryColor)
}
}
return Color(getColor(R.color.icon_tint_with_alpha))
}
private fun clear() {
editText.setText("")
private fun getIcon(tagData: TagData): Int
{
val iconIndex = tagData.getIcon()
var iconResource = R.drawable.ic_outline_label_24px
if ( (iconIndex != null) && (iconIndex < 1000 || inventory.hasPro) ) {
iconResource = CustomIcons.getIconResId(iconIndex) ?: R.drawable.ic_outline_label_24px
}
return iconResource
}
/* Copy of the TagPickerActivity's companion object */
companion object {
const val EXTRA_SELECTED = "extra_tags"
const val EXTRA_PARTIALLY_SELECTED = "extra_partial"
const val EXTRA_TASKS = "extra_tasks"
}
}
}
@Composable
internal fun TagPicker(
viewModel: TagPickerViewModel,
onBackClicked: () -> Unit,
getTagIcon: (TagData) -> Int,
getTagColor: (TagData) -> Color
) {
Box ( modifier = Modifier.fillMaxSize() )
{
Column (modifier = Modifier.padding(horizontal = 12.dp)) {
Box( modifier = Modifier.fillMaxWidth() ) {
SearchBar(viewModel, onBackClicked)
}
Box (
modifier = Modifier.weight(1f)
) {
PickerBox(viewModel, viewModel.tagsList.observeAsState(initial = emptyList()), getTagIcon, getTagColor)
}
}
}
}
@Composable
internal fun SearchBar(
viewModel: TagPickerViewModel,
onBack: () -> Unit
) {
val searchPattern = remember { viewModel.searchText }
val invitation = LocalContext.current.getString(R.string.enter_tag_name)
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(
ImageVector.vectorResource(id = R.drawable.ic_outline_arrow_back_24px),
"Done",
modifier = Modifier
.padding(6.dp)
.clickable { onBack() }
)
TextField(
value = searchPattern.value,
onValueChange = { viewModel.search(it) },
placeholder = { Text(invitation) },
colors = TextFieldDefaults.textFieldColors(
textColor = MaterialTheme.colors.onBackground,
backgroundColor = Color.Transparent,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent
),
modifier = Modifier.padding(start = 6.dp)
)
}
} /* SearchBar */
@Composable
internal fun PickerBox (
viewModel: TagPickerViewModel,
tags: State<List<TagData>>,
getTagIcon: (TagData) -> Int = { R.drawable.ic_outline_label_24px },
getTagColor: (TagData) -> Color = { Color.Gray }
) {
val onClick: (TagData) -> Unit = {
viewModel.viewModelScope.launch {
viewModel.toggle(it, viewModel.getState(it) != ToggleableState.On) }
}
val newItem: (String) -> Unit = {
viewModel.viewModelScope.launch { viewModel.createNew(it); viewModel.search("") }
}
LazyColumn {
if (viewModel.tagToCreate.value != "") {
item(key = -1) {
val text = LocalContext.current.getString(R.string.new_tag) + " \"${viewModel.tagToCreate.value}\""
TagRow(
icon = ImageVector.vectorResource(R.drawable.ic_outline_add_24px),
iconColor = Color(LocalContext.current.getColor(R.color.icon_tint_with_alpha)),
text = text,
onClick = { newItem(viewModel.searchText.value) }
)
}
}
items( tags.value, key = { tag -> tag.id!! } )
{
val checked = remember { mutableStateOf ( viewModel.getState(it) ) }
val clickChecked: () -> Unit = { onClick(it); checked.value = viewModel.getState(it) }
TagRow(
icon = ImageVector.vectorResource(getTagIcon(it)),
iconColor = getTagColor(it),
text = it.name!!,
onClick = clickChecked
) {
TriStateCheckbox(
modifier = Modifier.padding(6.dp),
state = checked.value,
onClick = clickChecked
)
}
}
}
} /* PickerBox */
@Composable
internal fun TagRow (
icon: ImageVector,
iconColor: Color,
text: String,
onClick: () -> Unit,
checkBox: @Composable RowScope.() -> Unit = {}
) {
Row(modifier = Modifier.fillMaxWidth().clickable{ onClick() },
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
imageVector = icon,
contentDescription = "",
modifier = Modifier.padding(6.dp),
tint = iconColor
)
Text(
text,
modifier = Modifier.weight(1f).padding(horizontal = 24.dp)
)
checkBox()
}
} /* TagRow */
/*
internal fun genTestTags(): List<TagData>
{
var idcc: Long = 1
return "alpha beta gamma delta kappa theta alfa1 beta1 gamma1 delta1 kappa1 theta1"
.split(" ")
.map { name -> TagData(name).also{ it.id = idcc++ } }
}
@Composable
@Preview(showBackground = true, backgroundColor = 0xffffff)
internal fun PickerBoxPreview() {
val list = remember { mutableStateOf( genTestTags() ) }
PickerBox(list, getTagColor = { Color.Green })
}
*/

@ -1,70 +0,0 @@
package org.tasks.tags
import android.content.Context
import android.view.View
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import org.tasks.R
import org.tasks.data.TagData
import org.tasks.databinding.RowTagPickerBinding
import org.tasks.themes.DrawableUtil
class TagPickerViewHolder internal constructor(
private val context: Context,
binding: RowTagPickerBinding,
private val callback: (TagData, TagPickerViewHolder) -> Unit
) : RecyclerView.ViewHolder(binding.root) {
val isChecked: Boolean
get() = checkBox.isChecked
private val text: TextView = binding.text
private val checkBox: CheckBoxTriStates = binding.checkbox.apply {
setOnCheckedChangeListener { _, _ -> onCheckedChanged() }
}
private var tagData: TagData? = null
private fun onClickRow() {
if (tagData!!.id == null) {
callback(tagData!!, this)
} else {
checkBox.toggle()
}
}
private fun onCheckedChanged() {
callback(tagData!!, this)
}
fun bind(
tagData: TagData, color: Int, icon: Int?, state: CheckBoxTriStates.State) {
var icon = icon
this.tagData = tagData
if (tagData.id == null) {
text.text = context.getString(R.string.create_new_tag, tagData.name)
icon = R.drawable.ic_outline_add_24px
checkBox.visibility = View.GONE
} else {
text.text = tagData.name
if (state == CheckBoxTriStates.State.CHECKED) {
checkBox.isChecked = true
} else {
updateCheckbox(state)
}
if (icon == null) {
icon = R.drawable.ic_outline_label_24px
}
}
DrawableUtil.setLeftDrawable(context, text, icon)
DrawableUtil.setTint(DrawableUtil.getLeftDrawable(text), color)
}
fun updateCheckbox(state: CheckBoxTriStates.State) {
checkBox.setState(state, false)
checkBox.visibility = View.VISIBLE
}
init {
binding.tagRow.setOnClickListener { onClickRow() }
}
}

@ -1,12 +1,16 @@
package org.tasks.tags
import androidx.lifecycle.*
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.state.ToggleableState
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.TagData
import org.tasks.data.TagDataDao
import org.tasks.tags.CheckBoxTriStates.State
import javax.inject.Inject
@HiltViewModel
@ -17,12 +21,22 @@ class TagPickerViewModel @Inject constructor(
private val tags = MutableLiveData<List<TagData>>()
private val selected: MutableSet<TagData> = HashSet()
private val partiallySelected: MutableSet<TagData> = HashSet()
var text: String? = null
private set
val searchText: State<String>
get() = _searchText
private val _searchText = mutableStateOf("")
val tagToCreate: State<String>
get() = _tagToCreate
private val _tagToCreate = mutableStateOf("")
fun observe(owner: LifecycleOwner, observer: (List<TagData>) -> Unit) =
tags.observe(owner, observer)
/* The property to access selected tags list from the @Composable activity */
val tagsList: MutableLiveData<List<TagData>>
get() = tags
fun setSelected(selected: List<TagData>, partiallySelected: List<TagData>?) {
this.selected.addAll(selected)
if (partiallySelected != null) {
@ -35,16 +49,16 @@ class TagPickerViewModel @Inject constructor(
fun getPartiallySelected() = ArrayList(partiallySelected)
fun search(newText: String) {
if (!newText.equals(text, ignoreCase = true)) {
if (newText == "" || !newText.equals(_searchText.value, ignoreCase = true)) {
viewModelScope.launch {
val results = tagDataDao.searchTags(newText)
onUpdate(results.toMutableList())
onUpdate(newText, results.toMutableList())
}
}
text = newText
_searchText.value = newText
}
private fun onUpdate(results: MutableList<TagData>) {
private fun onUpdate(newText: String, results: MutableList<TagData>) {
val sorted = results
.sortedWith { l, r ->
val lSelected = selected.contains(l) || partiallySelected.contains(r)
@ -58,20 +72,21 @@ class TagPickerViewModel @Inject constructor(
}
}
.toMutableList()
if (!isNullOrEmpty(text) && !results.any { text.equals(it.name, ignoreCase = true) }) {
sorted.add(0, TagData(text))
}
if ( newText != "" && !results.any {newText.equals(it.name, ignoreCase = true) } )
_tagToCreate.value = newText
else
_tagToCreate.value = ""
tags.value = sorted
}
fun getState(tagData: TagData): State {
fun getState(tagData: TagData): ToggleableState {
if (partiallySelected.contains(tagData)) {
return State.PARTIALLY_CHECKED
return ToggleableState.Indeterminate
}
return if (selected.contains(tagData)) State.CHECKED else State.UNCHECKED
return if (selected.contains(tagData)) ToggleableState.On else ToggleableState.Off
}
suspend fun toggle(tagData: TagData, checked: Boolean): State {
suspend fun toggle(tagData: TagData, checked: Boolean): ToggleableState {
var tagData = tagData
if (tagData.id == null) {
tagData = TagData(tagData.name)
@ -80,10 +95,17 @@ class TagPickerViewModel @Inject constructor(
partiallySelected.remove(tagData)
return if (checked) {
selected.add(tagData)
State.CHECKED
ToggleableState.On
} else {
selected.remove(tagData)
State.UNCHECKED
ToggleableState.Off
}
}
suspend fun createNew(name: String) {
val tagData = TagData(name)
tagDataDao.createNew(tagData)
selected.add(tagData)
search("")
}
}

@ -1,55 +0,0 @@
package org.tasks.tags
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.RecyclerView
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.data.TagData
import org.tasks.databinding.RowTagPickerBinding
import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons.getIconResId
internal class TagRecyclerAdapter(
private val context: Context,
private val viewModel: TagPickerViewModel,
private val inventory: Inventory,
private val colorProvider: ColorProvider,
private val callback: (TagData, TagPickerViewHolder) -> Unit
) : RecyclerView.Adapter<TagPickerViewHolder>() {
private val differ: AsyncListDiffer<TagData> = AsyncListDiffer(this, TagDiffCallback())
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
TagPickerViewHolder(
context,
RowTagPickerBinding.inflate(LayoutInflater.from(context), parent, false),
callback
)
override fun onBindViewHolder(holder: TagPickerViewHolder, position: Int) {
val tagData = differ.currentList[position]
holder.bind(tagData, getColor(tagData), getIcon(tagData), viewModel.getState(tagData))
}
override fun getItemCount(): Int = differ.currentList.size
private fun getColor(tagData: TagData): Int {
if (tagData.getColor() != 0) {
val themeColor = colorProvider.getThemeColor(tagData.getColor()!!, true)
if (inventory.purchasedThemes() || themeColor.isFree) {
return themeColor.primaryColor
}
}
return context.getColor(R.color.icon_tint_with_alpha)
}
private fun getIcon(tagData: TagData): Int? =
tagData.getIcon()?.takeIf { it < 1000 || inventory.hasPro }?.let { getIconResId(it) }
fun submitList(tagData: List<TagData>?) {
differ.submitList(tagData)
}
}

@ -30,7 +30,7 @@ internal class DiffCallback(
return if (isHeader) {
old.groupMode == new.groupMode && old.getHeaderValue(oldPosition) == new.getHeaderValue(newPosition)
} else {
old.getItem(oldPosition)!!.id == new.getItem(newPosition)!!.id
old.getItem(oldPosition).id == new.getItem(newPosition).id
}
}
@ -38,8 +38,8 @@ internal class DiffCallback(
if (new.isHeader(newPosition)) {
return old.getSection(oldPosition).collapsed == new.getSection(newPosition).collapsed
}
val oldItem = old.getItem(oldPosition)!!
val newItem = new.getItem(newPosition)!!
val oldItem = old.getItem(oldPosition)
val newItem = new.getItem(newPosition)
return !refreshDates && oldItem == newItem && oldItem.indent == adapter.getIndent(newItem)
}
}

@ -14,7 +14,6 @@ import androidx.recyclerview.widget.ItemTouchHelper.UP
import androidx.recyclerview.widget.RecyclerView
import com.todoroo.astrid.activity.TaskListFragment
import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.api.AstridOrderingFilter
import com.todoroo.astrid.utility.Flags
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
@ -24,6 +23,7 @@ import kotlinx.coroutines.runBlocking
import org.tasks.activities.DragAndDropDiffer
import org.tasks.data.TaskContainer
import org.tasks.preferences.Preferences
import org.tasks.ui.TaskListViewModel.UiItem
import java.util.LinkedList
import java.util.Queue
import java.util.concurrent.Executors
@ -31,21 +31,18 @@ import kotlin.math.max
import kotlin.math.min
class DragAndDropRecyclerAdapter(
private val adapter: TaskAdapter,
private val recyclerView: RecyclerView,
viewHolderFactory: ViewHolderFactory,
private val taskList: TaskListFragment,
tasks: List<TaskContainer>,
preferences: Preferences) : TaskListRecyclerAdapter(adapter, viewHolderFactory, taskList, preferences), DragAndDropDiffer<TaskContainer, SectionedDataSource> {
private val disableHeaders = taskList.getFilter().let {
!it.supportsSorting()
|| (it.supportsManualSort() && preferences.isManualSort)
|| (it is AstridOrderingFilter && preferences.isAstridSort)
}
private val adapter: TaskAdapter,
private val recyclerView: RecyclerView,
viewHolderFactory: ViewHolderFactory,
private val taskList: TaskListFragment,
tasks: SectionedDataSource,
preferences: Preferences,
private val toggleCollapsed: (Long) -> Unit,
) : TaskListRecyclerAdapter(adapter, viewHolderFactory, taskList, preferences), DragAndDropDiffer<UiItem, SectionedDataSource> {
private val itemTouchHelper = ItemTouchHelper(ItemTouchHelperCallback()).apply {
attachToRecyclerView(recyclerView)
}
override val channel = Channel<List<TaskContainer>>(Channel.UNLIMITED)
override val channel = Channel<SectionedDataSource>(Channel.UNLIMITED)
override val updates: Queue<Pair<SectionedDataSource, DiffUtil.DiffResult?>> = LinkedList()
override var dragging = false
override val scope: CoroutineScope =
@ -70,7 +67,7 @@ class DragAndDropRecyclerAdapter(
override fun getItemViewType(position: Int) = if (items.isHeader(position)) 1 else 0
override fun submitList(list: List<TaskContainer>) {
override fun submitList(list: SectionedDataSource) {
super.submitList(list)
}
@ -81,8 +78,7 @@ class DragAndDropRecyclerAdapter(
}
private fun toggleGroup(group: Long) {
adapter.toggleCollapsed(group)
taskList.loadTaskListContent()
toggleCollapsed(group)
}
override fun dragAndDropEnabled() = taskList.getFilter().supportsSubtasks()
@ -93,18 +89,8 @@ class DragAndDropRecyclerAdapter(
override fun getItem(position: Int) = items.getItem(position)
override fun transform(list: List<TaskContainer>): SectionedDataSource =
SectionedDataSource(
tasks = list,
disableHeaders = disableHeaders,
groupMode = preferences.groupMode,
subtaskMode = preferences.subtaskMode,
collapsed = adapter.getCollapsed(),
completedAtBottom = preferences.completedTasksAtBottom,
)
override fun diff(last: SectionedDataSource, next: SectionedDataSource) =
DiffUtil.calculateDiff(DiffCallback(last, next, adapter), next.size < LONG_LIST_SIZE)
DiffUtil.calculateDiff(DiffCallback(last, next, adapter), next.size < LONG_LIST_SIZE)
override fun drainQueue() {
val recyclerViewState = recyclerView.layoutManager!!.onSaveInstanceState()

@ -6,6 +6,7 @@ import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.core.SortHelper
import org.tasks.data.TaskContainer
import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.ui.TaskListViewModel.UiItem
class SectionedDataSource(
tasks: List<TaskContainer> = emptyList(),
@ -14,7 +15,7 @@ class SectionedDataSource(
val subtaskMode: Int = SortHelper.SORT_MANUAL,
private val collapsed: Set<Long> = emptySet(),
private val completedAtBottom: Boolean = true,
) {
): List<UiItem> {
private val tasks = tasks.toMutableList()
private val sections = if (disableHeaders || groupMode == SortHelper.GROUP_NONE) {
@ -23,7 +24,7 @@ class SectionedDataSource(
getSections()
}
fun getItem(position: Int): TaskContainer? = tasks.getOrNull(sectionedPositionToPosition(position))
fun getItem(position: Int): TaskContainer = tasks[sectionedPositionToPosition(position)]
fun getHeaderValue(position: Int): Long = getSection(position).value
@ -48,9 +49,52 @@ class SectionedDataSource(
val taskCount: Int
get() = tasks.size
val size: Int
override val size: Int
get() = tasks.size + sections.size()
override fun get(index: Int) =
sections[index]
?.let { UiItem.Header(it.value) }
?: UiItem.Task(getItem(index))
override fun isEmpty() = size == 0
override fun iterator(): Iterator<UiItem> {
return object : Iterator<UiItem> {
private var index = 0
override fun hasNext() = index < size
override fun next(): UiItem = get(index++)
}
}
override fun listIterator(): ListIterator<UiItem> {
TODO("Not yet implemented")
}
override fun listIterator(index: Int): ListIterator<UiItem> {
TODO("Not yet implemented")
}
override fun subList(fromIndex: Int, toIndex: Int): List<UiItem> {
TODO("Not yet implemented")
}
override fun lastIndexOf(element: UiItem): Int {
TODO("Not yet implemented")
}
override fun indexOf(element: UiItem): Int {
TODO("Not yet implemented")
}
override fun containsAll(elements: Collection<UiItem>): Boolean {
TODO("Not yet implemented")
}
override fun contains(element: UiItem): Boolean {
TODO("Not yet implemented")
}
fun getSection(position: Int): AdapterSection = sections[position]
fun add(position: Int, task: TaskContainer) = tasks.add(sectionedPositionToPosition(position), task)

@ -8,15 +8,14 @@ import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.adapter.TaskAdapterDataSource
import com.todoroo.astrid.api.AstridOrderingFilter
import com.todoroo.astrid.core.SortHelper
import org.tasks.data.TaskContainer
import org.tasks.preferences.Preferences
abstract class TaskListRecyclerAdapter internal constructor(
private val adapter: TaskAdapter,
internal val viewHolderFactory: ViewHolderFactory,
private val taskList: TaskListFragment,
internal val preferences: Preferences)
: RecyclerView.Adapter<RecyclerView.ViewHolder>(), ListUpdateCallback, TaskAdapterDataSource {
internal val preferences: Preferences
): RecyclerView.Adapter<RecyclerView.ViewHolder>(), ListUpdateCallback, TaskAdapterDataSource {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder
= viewHolderFactory.newViewHolder(parent, taskList)
@ -51,7 +50,7 @@ abstract class TaskListRecyclerAdapter internal constructor(
abstract fun dragAndDropEnabled(): Boolean
abstract fun submitList(list: List<TaskContainer>)
abstract fun submitList(list: SectionedDataSource)
override fun onInserted(position: Int, count: Int) {
notifyItemRangeInserted(position, count)

@ -26,6 +26,7 @@ import org.tasks.compose.edit.SubtaskRow
import org.tasks.data.GoogleTaskDao
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.preferences.Preferences
import org.tasks.tasklist.SectionedDataSource
import org.tasks.themes.ColorProvider
import javax.inject.Inject
@ -60,7 +61,11 @@ class SubtaskControlSet : TaskEditControlFragment() {
filter = viewModel.selectedList.collectAsStateLifecycleAware().value,
hasParent = viewModel.hasParent,
desaturate = preferences.desaturateDarkMode,
existingSubtasks = listViewModel.state.collectAsStateLifecycleAware().value.tasks,
existingSubtasks = if (viewModel.isNew) {
TaskListViewModel.TasksResults.Results(SectionedDataSource())
} else {
listViewModel.state.collectAsStateLifecycleAware().value.tasks
},
newSubtasks = viewModel.newSubtasks.collectAsStateLifecycleAware().value,
openSubtask = this@SubtaskControlSet::openSubtask,
completeExistingSubtask = this@SubtaskControlSet::complete,

@ -7,6 +7,7 @@ import android.content.Intent
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.AstridOrderingFilter
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterImpl
import com.todoroo.astrid.api.SearchFilter
@ -19,7 +20,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
@ -36,8 +36,10 @@ import org.tasks.data.TaskContainer
import org.tasks.data.TaskDao
import org.tasks.data.TaskListQuery.getQuery
import org.tasks.db.QueryUtils
import org.tasks.filters.MyTasksFilter
import org.tasks.preferences.Preferences
import org.tasks.preferences.QueryPreferences
import org.tasks.tasklist.SectionedDataSource
import javax.inject.Inject
@HiltViewModel
@ -53,18 +55,24 @@ class TaskListViewModel @Inject constructor(
private val firebase: Firebase,
) : ViewModel() {
sealed class UiItem {
data class Header(val value: Long): UiItem()
data class Task(val task: TaskContainer): UiItem()
}
sealed interface TasksResults {
data object Loading : TasksResults
data class Results(val tasks: List<TaskContainer>) : TasksResults
data class Results(val tasks: SectionedDataSource) : TasksResults
}
data class State(
val filter: Filter? = null,
val filter: Filter = MyTasksFilter(""),
val now: Long = DateUtilities.now(),
val searchQuery: String? = null,
val tasks: TasksResults = TasksResults.Loading,
val begForSubscription: Boolean = false,
val syncOngoing: Boolean = false,
val collapsed: Set<Long> = setOf(SectionedDataSource.HEADER_COMPLETED),
)
private val _state = MutableStateFlow(State())
@ -104,7 +112,7 @@ class TaskListViewModel @Inject constructor(
}
suspend fun getTasksToClear(): List<Long> {
val filter = _state.value.filter ?: return emptyList()
val filter = _state.value.filter
val deleteFilter = FilterImpl(
sql = QueryUtils.removeOrder(QueryUtils.showHiddenAndCompleted(filter.sql!!)),
)
@ -130,13 +138,12 @@ class TaskListViewModel @Inject constructor(
localBroadcastManager.registerRefreshReceiver(refreshReceiver)
_state
.filter { it.filter != null }
.map { it.copy(tasks = TasksResults.Loading) }
.distinctUntilChanged()
.throttleLatest(333)
.map {
val filter = when {
it.searchQuery == null -> it.filter!!
it.searchQuery == null -> it.filter
it.searchQuery.isBlank() -> BuiltInFilterExposer.getMyTasksFilter(context.resources)
else -> context.createSearchQuery(it.searchQuery)
}
@ -144,7 +151,20 @@ class TaskListViewModel @Inject constructor(
}
.onEach { tasks ->
_state.update {
it.copy(tasks = TasksResults.Results(tasks))
it.copy(
tasks = TasksResults.Results(
SectionedDataSource(
tasks = tasks,
disableHeaders = !it.filter.supportsSorting()
|| (it.filter.supportsManualSort() && preferences.isManualSort)
|| (it.filter is AstridOrderingFilter && preferences.isAstridSort),
groupMode = preferences.groupMode,
subtaskMode = preferences.subtaskMode,
collapsed = it.collapsed,
completedAtBottom = preferences.completedTasksAtBottom,
)
)
)
}
}
.flowOn(Dispatchers.Default)
@ -163,6 +183,24 @@ class TaskListViewModel @Inject constructor(
localBroadcastManager.unregisterReceiver(refreshReceiver)
}
fun clearCollapsed() {
_state.update {
it.copy(collapsed = setOf(SectionedDataSource.HEADER_COMPLETED))
}
}
fun toggleCollapsed(group: Long) {
_state.update {
it.copy(
collapsed = if (it.collapsed.contains(group)) {
it.collapsed.minus(group)
} else {
it.collapsed.plus(group)
}
)
}
}
companion object {
fun Context.createSearchQuery(query: String): Filter =
SearchFilter(getString(R.string.FLA_search_filter, query), query)

@ -92,7 +92,7 @@ internal class TasksWidgetViewFactory(
override fun getViewTypeCount(): Int = 2
override fun getItemId(position: Int) = getTask(position)?.id ?: 0
override fun getItemId(position: Int) = getTask(position).id
override fun hasStableIds(): Boolean = true
@ -145,7 +145,7 @@ internal class TasksWidgetViewFactory(
private fun buildUpdate(position: Int): RemoteViews? {
return try {
val taskContainer = getTask(position) ?: return null
val taskContainer = getTask(position)
val task = taskContainer.task
val textColorTitle = when {
task.isHidden -> onSurfaceVariant
@ -258,7 +258,7 @@ internal class TasksWidgetViewFactory(
}
}
private fun getTask(position: Int): TaskContainer? = tasks.getItem(position)
private fun getTask(position: Int): TaskContainer = tasks.getItem(position)
private suspend fun getQuery(filter: Filter): List<String> {
subtasksHelper.applySubtasksToWidgetFilter(filter, widgetPreferences)

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:descendantFocusability="beforeDescendants"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="@dimen/elevation_toolbar"
android:theme="@style/ToolbarTheme"
android:background="@color/content_background"
app:popupTheme="@style/popup_overlay"
app:titleTextColor="@color/text_primary"
tools:ignore="UnusedAttribute">
<EditText
android:id="@+id/search_input"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:hint="@string/enter_tag_name"
android:imeOptions="flagNoExtractUi"
android:inputType="textCapSentences|textAutoCorrect"
android:lines="1"
android:maxLines="1"
android:scrollbars="vertical"
android:textColor="@color/text_primary"
android:textColorHint="@color/text_secondary" />
</androidx.appcompat.widget.Toolbar>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tag_row"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<org.tasks.tags.CheckBoxTriStates
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:clickable="true"
android:focusable="true"
android:layout_centerVertical="true"
android:padding="12dp" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/checkbox"
android:drawablePadding="@dimen/keyline_second"
android:textColor="@color/text_primary"
android:layout_centerVertical="true"
android:paddingStart="@dimen/keyline_first"
android:paddingEnd="@dimen/keyline_first"
android:textSize="@dimen/task_edit_text_size" />
</RelativeLayout>

@ -30,12 +30,12 @@
<string name="SSD_sort_auto">Intelligente Sortierung</string>
<string name="SSD_sort_alpha">Nach Titel</string>
<string name="SSD_sort_due">Nach Fälligkeitsdatum</string>
<string name="SSD_sort_importance">Nach Wichtigkeit</string>
<string name="SSD_sort_importance">Nach Priorität</string>
<string name="SSD_sort_modified">Nach letzter Änderung</string>
<string name="FLA_search_filter">Suche nach \'%s\'</string>
<string name="FLA_new_filter">Neuen Filter erstellen</string>
<string name="TEA_title_hint">Aufgabenname</string>
<string name="TEA_importance_label">Wichtigkeit</string>
<string name="TEA_importance_label">Priorität</string>
<string name="TEA_note_label">Beschreibung</string>
<string name="TEA_estimatedDuration_label">Wie lange wird es dauern?</string>
<string name="TEA_elapsedDuration_label">Schon benötigte Zeit</string>
@ -48,7 +48,7 @@
<string name="week_before_due">Woche vor Fälligkeit</string>
<string name="TEA_control_repeat">Wiederholen</string>
<string name="TEA_control_gcal">Kalender</string>
<string name="TEA_control_importance">Wichtigkeit</string>
<string name="TEA_control_importance">Priorität</string>
<string name="TEA_control_location">Ort</string>
<string name="TEA_control_notes">Beschreibung</string>
<string name="TEA_control_files">Dateien</string>
@ -74,7 +74,7 @@
<string name="EPr_manage_delete_all_gcal">Alle Kalendereinträge für Aufgaben löschen</string>
<string name="EPr_manage_delete_all_gcal_message">Möchten Sie wirklich alle Kalendereinträge für Aufgaben löschen\?</string>
<string name="task_defaults">Vorgaben für Aufgaben</string>
<string name="EPr_default_importance_title">Wichtigkeitsstandard</string>
<string name="EPr_default_importance_title">Standardpriorität</string>
<string name="EPr_default_reminders_title">Standard-Erinnerungen</string>
<string name="EPr_default_location_reminder_title">Standard-Standort-Erinnerungen</string>
<string name="EPr_default_reminders_mode_title">Alarm/Vibrationssignal</string>
@ -94,8 +94,8 @@
<string name="CFC_dueBefore_name">Fällig …</string>
<string name="no_due_date">Ohne Fälligkeit</string>
<string name="next_month">Nächster Monat</string>
<string name="CFC_importance_text">Mindestwichtigkeit?</string>
<string name="CFC_importance_name">Wichtigkeit </string>
<string name="CFC_importance_text">Mindestpriorität?</string>
<string name="CFC_importance_name">Priorität</string>
<string name="CFC_tag_text">Schlagwort: \?</string>
<string name="CFC_tag_name">Schlagwort …</string>
<string name="CFC_tag_contains_name">Schlagwort enthält …</string>
@ -249,7 +249,7 @@
<string name="when_overdue">Wenn überfällig</string>
<string name="when_due">Wenn fällig</string>
<string name="tags">Schlagwörter</string>
<string name="change_priority">Wichtigkeit ändern</string>
<string name="change_priority">Priorität ändern</string>
<string name="filters">Filter</string>
<string name="date_shortcut_hour">Für eine Stunde</string>
<string name="date_shortcut_morning">Vormittag</string>
@ -485,10 +485,10 @@
<string name="custom_filter_not">NICHT</string>
<string name="custom_filter_or">ODER</string>
<string name="custom_filter_criteria">Filterkriterien</string>
<string name="filter_no_priority">Keine Wichtigkeit</string>
<string name="filter_low_priority">Niedrige Wichtigkeit</string>
<string name="filter_medium_priority">Mittlere Wichtigkeit</string>
<string name="filter_high_priority">Hohe Wichtigkeit</string>
<string name="filter_no_priority">Keine Priorität</string>
<string name="filter_low_priority">Niedrige Priorität</string>
<string name="filter_medium_priority">Mittlere Priorität</string>
<string name="filter_high_priority">Hohe Priorität</string>
<string name="filter_today_only">Nur heute</string>
<string name="sort_created">Nach Erstellungszeit</string>
<string name="filter_after_today">Ab morgen</string>
@ -724,4 +724,6 @@
<string name="repeats_every">Wiederholt sich</string>
<string name="repeat_monthly_on_day_number">Monatlich an Tag %1d</string>
<string name="repeat_monthly_on_the_nth_weekday">Monatlich an dem %1$s %2$s</string>
<string name="clear_completed_tasks_count">%s werden gelöscht</string>
<string name="theme_dynamic">Dynamisch</string>
</resources>

@ -147,7 +147,7 @@
<string name="CFC_tag_name">Etikedo…</string>
<string name="CFC_tag_text">Etikedo: \?</string>
<string name="CFC_importance_name">Prioritato…</string>
<string name="next_month">Sekvanta Monato</string>
<string name="next_month">Venontmonate</string>
<string name="CFC_startBefore_name">Ek…</string>
<string name="CFC_startBefore_text">Ek: \?</string>
<string name="CFC_dueBefore_name">Ĝis…</string>
@ -163,9 +163,9 @@
<string name="EPr_default_reminders_title">Defaŭltaj memorigiloj</string>
<string name="default_start_date">Defaŭlta komencdato</string>
<string name="EPr_manage_delete_gcal_status">Forigis %d kalendarajn eventojn!</string>
<string name="EPr_delete_task_data">Forigi datumon de Tasks</string>
<string name="EPr_delete_task_data">Forigi taskan datumon</string>
<string name="EPr_fullTask_title">Vidigi tutan taskan titolon</string>
<string name="EPr_edit_screen_options">Redakti ekranajn opciojn</string>
<string name="EPr_edit_screen_options">Redakti ekranajn agordojn</string>
<string name="TEA_control_reminders">Memorigiloj</string>
<string name="TEA_control_importance">Prioritato</string>
<string name="TEA_control_repeat">Ripeti</string>
@ -182,21 +182,21 @@
<string name="SSD_sort_alpha">Laŭ titolo</string>
<string name="SSD_sort_auto">Saĝe</string>
<string name="TLA_menu_sort">Ordigi</string>
<string name="keep_editing">Daŭrige redakti</string>
<string name="keep_editing">Plu redakti</string>
<string name="discard_confirmation">Ĉu vi certas ke vi volas nuligi viajn ŝanĝojn\?</string>
<string name="import_summary_message">Dosiero %1$s enhavis %2$s.
\n
\n%3$s importitaj,
\n%4$s jam ekzistas
\n%5$s havis eraroj
\n%5$s havis erarojn
\n</string>
<string name="export_toast">Savkopiis %1$s al %2$s.</string>
<string name="backup_BAc_import">Importi savkopion</string>
<string name="backup_BAc_export">Savkopii nun</string>
<string name="backup_BAc_export">Savkopii tuj</string>
<string name="backup_BPr_header">Savkopioj</string>
<string name="email">Retpoŝto</string>
<string name="filter_overdue">Posttempa</string>
<string name="TEA_control_timer">Tempokontroloj</string>
<string name="TEA_control_timer">Tempokontroliloj</string>
<string name="TEA_control_location">Loko</string>
<string name="TEA_elapsedDuration_label">Tempo jam pasinta</string>
<string name="TEA_estimatedDuration_label">Kiom da tempo ĝi daŭros\?</string>
@ -204,7 +204,7 @@
<string name="manage_drawer">Administri tirkeston</string>
<string name="read_permission_label">Permesoj de Tasks</string>
<string name="import_summary_title">Restaŭri resumon</string>
<string name="import_progress_read">Legado de tasko %d…</string>
<string name="import_progress_read">Legas taskon, %d…</string>
<string name="password">Pasvorto</string>
<string name="user">Uzanto</string>
<string name="add_account">Aldoni konton</string>
@ -260,7 +260,7 @@
<string name="geofence_radius">Virtuala periferio</string>
<string name="pick_a_date_and_time">Elekti daton kaj horon</string>
<string name="add_location">Aldoni lokon</string>
<string name="add_reminder">Aldoni memorigilo</string>
<string name="add_reminder">Aldoni memorigilon</string>
<string name="source_code">Fontkodo</string>
<string name="row_spacing">Intervica spaco</string>
<string name="header_spacing">Interspaco</string>
@ -279,10 +279,10 @@
<string name="next_friday">Sekva ven</string>
<string name="next_wednesday">Sekva mer</string>
<string name="next_tuesday">Sekva mar</string>
<string name="next_monday">Sekva lun</string>
<string name="next_monday">Venonta lun</string>
<string name="next_sunday">Sekva dim</string>
<string name="next_thursday">Sekva ĵaŭ</string>
<string name="voice_command_added_task">Aldonita tasko</string>
<string name="voice_command_added_task">Tasko Aldonite</string>
<string name="EPr_voiceInputEnabled_title">Voĉa enigo</string>
<string name="voice_create_prompt">Diri por krei taskon</string>
<string name="TEA_timer_comment_stopped">ĉesigis ĉi tiun taskon:</string>
@ -367,7 +367,7 @@
<string name="snoozed_until">Paŭzigite ĝis %s</string>
<string name="repeats_plural">Ripetiĝas ĉiu %s</string>
<string name="repeats_plural_on">Ripetiĝas ĉiu %1$s je %2$s</string>
<string name="repeats_plural_until">Ripetiĝas ĉiu %1$s ĝis %2$s</string>
<string name="repeats_plural_until">Ripetiĝas ĉiu %1$s, finiĝos %2$s</string>
<string name="randomly_every">Hazarde ĉiu %s</string>
<string name="alarm_after_due">%s post limdato</string>
<string name="widget_due_date_after_title">Post titolo</string>
@ -494,7 +494,7 @@
<string name="persistent_notifications">Daŭraj sciigoj</string>
<string name="invite_declined">Malakceptis inviton</string>
<string name="notification_disable_battery_optimizations_description">Optimumigoj de baterio povus prokrastigi sciigojn</string>
<string name="sort_completed">Per fintempo</string>
<string name="sort_completed">Laŭ fintempo</string>
<string name="customize_edit_screen">Adapti redaktan ekranon</string>
<string name="change_priority">Ŝanĝi prioritaton</string>
<string name="filter_settings">Agordoj de filtrilo</string>
@ -577,7 +577,7 @@
<string name="decsync_selection_description">Perdosiersistema sinkronigo</string>
<string name="repeats_single_on">Ripetiĝas %1$s je %2$s</string>
<string name="google_drive_backup">Savkopio de Google Drive</string>
<string name="repeats_single_until">Ripetiĝas %1$s ĝis %2$s</string>
<string name="repeats_single_until">Ripetiĝas %1$s, finiĝos %2$s</string>
<string name="got_it">Komprenite!</string>
<string name="backups_ignore_warnings_summary">Ignori avertojn pri savkopioj se vi ne bezonas savkopiojn aŭ jam havas propran savkopian solvon</string>
<string name="use_locale_default">Uzi defaŭltan lokaĵaron</string>
@ -594,7 +594,7 @@
<string name="url">URL</string>
<string name="list">Listo</string>
<string name="repeats_single_number_of_times">Ripetiĝas %1$s, okazas %2$d%3$s</string>
<string name="repeats_single_on_until">Ripetiĝas %1$s de %2$s ĝis %3$s</string>
<string name="repeats_single_on_until">Ripetiĝas %1$s je %2$s, finiĝos %3$s</string>
<string name="upgrade_to_pro">Altgradigi al profesia</string>
<string name="requires_pro_subscription">Bezonas profesian abonon</string>
<string name="cannot_access_account">Ne povas atingi konton</string>
@ -694,7 +694,7 @@
<string name="bundle_notifications">Paki sciigojn</string>
<string name="repeats_single_on_number_of_times">Ripetiĝas %1$s je %2$s, okazas %3$d%4$s</string>
<string name="repeats_plural_number_of_times">Ripetiĝas ĉiu %1$s, okazas %2$d%3$s</string>
<string name="repeats_plural_on_until">Ripetiĝas ĉiu %1$s ĉe %2$s ĝis %3$s</string>
<string name="repeats_plural_on_until">Ripetiĝas ĉiu %1$s ĉe %2$s, finiĝos %3$s</string>
<string name="repeats_plural_on_number_of_times">Ripetiĝas ĉiu %1$s ĉe %2$s, okazas %3$d%4$s</string>
<string name="etesync_account_description">Bezonas konton de EteSync.com aŭ memgastigan servilon</string>
<string name="wearable_notifications">Sciigoj per portebla aparataro</string>
@ -725,4 +725,15 @@
<string name="app_bar_collapse">Maletendi apbreton</string>
<string name="chips">Elementoj</string>
<string name="chip_appearance">Aspekto de elemento</string>
<string name="theme_dynamic">Dinamika</string>
<string name="show_edit_screen_without_unlock">Vidigi redaktilon sen malŝlosi</string>
<string name="show_edit_screen_without_unlock_summary">Permesi uzon de Rapidaj Agordoj sen malŝlosi aparaton</string>
<string name="swipe_to_snooze_time_description">Forigita sciigo paŭziĝos kaj rekreiĝos je %s</string>
<string name="swipe_to_snooze_description">Daŭro por paŭzigi</string>
<string name="swipe_to_snooze_time_immediately">tuj</string>
<string name="swipe_to_snooze_time_15_minutes">post 15 minutoj</string>
<string name="swipe_to_snooze_time_1_hour">post 1 horo</string>
<string name="swipe_to_snooze_time_24_hours">post 24 horoj</string>
<string name="swipe_to_snooze_title">Ŝovumi por paŭzigi</string>
<string name="swipe_to_snooze_time_30_minutes">post 30 minutoj</string>
</resources>

@ -748,4 +748,14 @@
<string name="change_priority">Prioridad de cambio</string>
<string name="clear_completed_tasks_count">%s será(n) eliminada(s)</string>
<string name="theme_dynamic">Dinámico</string>
<string name="swipe_to_snooze_title">Desliza el dedo para repetir</string>
<string name="swipe_to_snooze_time_1_hour">después de 1 hora</string>
<string name="swipe_to_snooze_time_24_hours">después de 24 horas</string>
<string name="show_edit_screen_without_unlock">Mostrar pantalla de edición sin desbloquear</string>
<string name="show_edit_screen_without_unlock_summary">Permite utilizar la ventana de ajustes rápidos sin desbloquear el dispositivo</string>
<string name="swipe_to_snooze_description">Tiempo de repetición</string>
<string name="swipe_to_snooze_time_description">Una notificación borrada será pospuesta y recreada %s</string>
<string name="swipe_to_snooze_time_immediately">inmediatamente</string>
<string name="swipe_to_snooze_time_15_minutes">después de 15 minutos</string>
<string name="swipe_to_snooze_time_30_minutes">después de 30 minutos</string>
</resources>

@ -517,7 +517,7 @@
<string name="got_it">J\'ai compris !</string>
<string name="support_development_subscribe">Déverrouillez des fonctionnalités supplémentaires et soutenez les logiciels à code source ouvert</string>
<string name="enjoying_tasks">Appréciez-vous Tasks \?</string>
<string name="whats_new">Quoi de neuf \?</string>
<string name="whats_new">Quoi de neuf?</string>
<string name="action_new_task">Nouvelle tâche</string>
<string name="yesterday_lowercase">hier</string>
<string name="tomorrow_lowercase">demain</string>
@ -746,4 +746,5 @@
<string name="repeats_weekly_on">Répéter le</string>
<string name="repeats_never">Jamais</string>
<string name="change_priority">Modifier la priorité</string>
<string name="theme_dynamic">Dynamique</string>
</resources>

@ -748,4 +748,14 @@
<string name="change_priority">Promijeni prioritet</string>
<string name="clear_completed_tasks_count">%s će se izbrisati</string>
<string name="theme_dynamic">Dinamično</string>
<string name="swipe_to_snooze_title">Povuci za odgađanje</string>
<string name="swipe_to_snooze_time_1_hour">nakon jednog sata</string>
<string name="swipe_to_snooze_time_24_hours">nakon 24 sata</string>
<string name="show_edit_screen_without_unlock">Prikaži ekran za uređivanje bez otključavanja</string>
<string name="show_edit_screen_without_unlock_summary">Omogućuje korištenje ploče „Brze postavke” bez otključavanja uređaja</string>
<string name="swipe_to_snooze_description">Vrijeme odgađanja</string>
<string name="swipe_to_snooze_time_description">Izbrisana obavijest će se odgoditi i ponovo stvoriti %s</string>
<string name="swipe_to_snooze_time_immediately">odmah</string>
<string name="swipe_to_snooze_time_15_minutes">nakon 15 minuta</string>
<string name="swipe_to_snooze_time_30_minutes">nakon 30 minuta</string>
</resources>

@ -136,58 +136,72 @@
<string name="repeat_option_custom">Personalizado…</string>
<plurals name="task_count">
<item quantity="one">%d tarefa</item>
<item quantity="many">%d tarefas</item>
<item quantity="other">%d tarefas</item>
</plurals>
<plurals name="repeat_times">
<item quantity="one">vez</item>
<item quantity="many">vezes</item>
<item quantity="other">vezes</item>
</plurals>
<plurals name="repeat_minutes">
<item quantity="one">minuto</item>
<item quantity="many">minutos</item>
<item quantity="other">minutos</item>
</plurals>
<plurals name="repeat_n_minutes">
<item quantity="one">%d minuto</item>
<item quantity="many">%d minutos</item>
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="repeat_hours">
<item quantity="one">hora</item>
<item quantity="many">horas</item>
<item quantity="other">horas</item>
</plurals>
<plurals name="repeat_n_hours">
<item quantity="one">%d hora</item>
<item quantity="many">%d horas</item>
<item quantity="other">%d horas</item>
</plurals>
<plurals name="repeat_days">
<item quantity="one">dia</item>
<item quantity="many">dias</item>
<item quantity="other">dias</item>
</plurals>
<plurals name="repeat_n_days">
<item quantity="one">%d dia</item>
<item quantity="many">%d dias</item>
<item quantity="other">%d dias</item>
</plurals>
<plurals name="repeat_weeks">
<item quantity="one">semana</item>
<item quantity="many">semanas</item>
<item quantity="other">semanas</item>
</plurals>
<plurals name="repeat_n_weeks">
<item quantity="one">%d semana</item>
<item quantity="many">%d semanas</item>
<item quantity="other">%d semanas</item>
</plurals>
<plurals name="repeat_months">
<item quantity="one">mês</item>
<item quantity="many">meses</item>
<item quantity="other">meses</item>
</plurals>
<plurals name="repeat_n_months">
<item quantity="one">%d mês</item>
<item quantity="many">%d meses</item>
<item quantity="other">%d meses</item>
</plurals>
<plurals name="repeat_years">
<item quantity="one">ano</item>
<item quantity="many">anos</item>
<item quantity="other">anos</item>
</plurals>
<plurals name="repeat_n_years">
<item quantity="one">%d ano</item>
<item quantity="many">%d anos</item>
<item quantity="other">%d anos</item>
</plurals>
<string name="repeat_type_due">data de vencimento</string>
@ -210,6 +224,7 @@
<string name="voice_command_added_task">Tarefa adicionada</string>
<plurals name="Ntasks">
<item quantity="one">1 tarefa</item>
<item quantity="many">%d tarefas</item>
<item quantity="other">%d tarefas</item>
</plurals>
<string name="today">Hoje</string>
@ -320,23 +335,23 @@
<string name="bundle_notifications">Agrupar notificações</string>
<string name="badges">Emblemas</string>
<string name="list">Lista</string>
<string name="repeats_from">Repetir a partir de</string>
<string name="repeats_single">Repetir %s</string>
<string name="repeats_single_on">Repetir %1$s em %2$s</string>
<string name="repeats_from">Repete a partir de</string>
<string name="repeats_single">Repete %s</string>
<string name="repeats_single_on">Repete %1$s em %2$s</string>
<string name="repeats_single_until">Repete %1$s, até %2$s</string>
<string name="repeats_single_number_of_times">Repetir %1$s, ocorre %2$d %3$s</string>
<string name="repeats_single_number_of_times">Repete %1$s, ocorre %2$d %3$s</string>
<string name="repeats_single_on_until">Repete %1$s em %2$s, até %3$s</string>
<string name="repeats_single_on_number_of_times">Repetir %1$s em %2$s, ocorre %3$d %4$s</string>
<string name="repeats_single_on_number_of_times">Repete %1$s em %2$s, ocorre %3$d %4$s</string>
<string name="repeats_minutely">a cada minuto</string>
<string name="repeats_hourly">a cada hora</string>
<string name="repeats_daily">diariamente</string>
<string name="repeats_weekly">semanalmente</string>
<string name="repeats_monthly">mensalmente</string>
<string name="repeats_yearly">anualmente</string>
<string name="repeats_plural">Repetir todo %s</string>
<string name="repeats_plural_on">Repetir todo %1$s em %2$s</string>
<string name="repeats_plural_until">"Repete a cada %1$s, até %2$s"</string>
<string name="repeats_plural_number_of_times">Repetir todo %1$s, ocorre %2$d %3$s</string>
<string name="repeats_plural">Repete todo %s</string>
<string name="repeats_plural_on">Repete todo %1$s em %2$s</string>
<string name="repeats_plural_until">Repete a cada %1$s, até %2$s</string>
<string name="repeats_plural_number_of_times">Repete todo %1$s, ocorre %2$d %3$s</string>
<string name="repeats_plural_on_until">Repete a cada %1$s em %2$s , até %3$s</string>
<string name="repeats_plural_on_number_of_times">Repete todo %1$s em %2$s, ocorre %3$d %4$s</string>
<string name="dont_add_to_calendar">Não inserir no calendário</string>
@ -473,6 +488,7 @@
<string name="today_lowercase">hoje</string>
<plurals name="subtask_count">
<item quantity="one">%d sub-tarefa</item>
<item quantity="many">%d sub-tarefas</item>
<item quantity="other">%d sub-tarefas</item>
</plurals>
<string name="CFC_list_name">Na lista…</string>
@ -487,7 +503,7 @@
<string name="permission_read_tasks">Acesso completo ao base de dados do Tasks</string>
<string name="reset_sort_order">Resetar ordenação</string>
<string name="lists">Listas</string>
<string name="open_last_viewed_list">Abra última lista utilizada</string>
<string name="open_last_viewed_list">Abrir última lista utilizada</string>
<string name="on_launch">Ao iniciar</string>
<string name="sort_modified_group">Modificado %s</string>
<string name="sort_created_group">Criado %s</string>
@ -548,7 +564,7 @@
<string name="automatic_backups">Backup automático</string>
<string name="local_lists">Listas locais</string>
<string name="sort_due_group">Vencimento %s</string>
<string name="sort_start_group">Começar %s</string>
<string name="sort_start_group">Começa %s</string>
<string name="tasks_needs_your_support">Tasks precisa da sua ajuda!</string>
<string name="decsync_selection_description">Sincronização baseada em arquivo</string>
<string name="tasks_org_description">Sincronize suas tarefas com Tasks.org</string>
@ -636,6 +652,7 @@
<string name="repeat_type_completion_capitalized">Data de conclusão</string>
<plurals name="list_count">
<item quantity="one">%d lista</item>
<item quantity="many">%d listas</item>
<item quantity="other">%d listas</item>
</plurals>
<string name="filter_any_start_date">Qualquer data de início</string>
@ -656,18 +673,22 @@
<string name="top">Superior</string>
<plurals name="reminder_minutes">
<item quantity="one">Minuto</item>
<item quantity="many">Minutos</item>
<item quantity="other">Minutos</item>
</plurals>
<plurals name="reminder_hours">
<item quantity="one">Hora</item>
<item quantity="many">Horas</item>
<item quantity="other">Horas</item>
</plurals>
<plurals name="reminder_days">
<item quantity="one">Dia</item>
<item quantity="many">Dias</item>
<item quantity="other">Dias</item>
</plurals>
<plurals name="reminder_week">
<item quantity="one">Semana</item>
<item quantity="many">Semanas</item>
<item quantity="other">Semanas</item>
</plurals>
<string name="when_started">Quando começar</string>
@ -697,7 +718,7 @@
<string name="sign_in_to_tasks_disclosure">Seu endereço de e-mail e ID de conta serão transmitidos e armazenados pelo Tasks.org. Estas informações serão usadas para autenticação e para fornecer-lhe anúncios importantes relacionados ao serviço. Estas informações não serão compartilhadas com ninguém.</string>
<string name="enable_reminders">Ativar lembretes</string>
<string name="microsoft_selection_description">Sincronizar com a sua conta Microsoft pessoal</string>
<string name="enable_reminders_description">Os lembretes estão desativados nas configurações do Android</string>
<string name="enable_reminders_description">Os lembretes estão desabilitados nas Configurações do Android</string>
<string name="TEA_creation_date">Data de criação</string>
<string name="sign_in">Entrar</string>
<string name="repeats_custom_recurrence">Recorrência personalizada</string>
@ -712,8 +733,8 @@
<string name="sort_list">Por lista</string>
<string name="sort_sorting">Listagem</string>
<string name="repeat_monthly_on_the_nth_weekday">Mensalmente na %1$s %2$s</string>
<string name="sort_completed">Por data de conclusão</string>
<string name="sort_completion_group">Término em %s</string>
<string name="sort_completed">Por hora de conclusão</string>
<string name="sort_completion_group">Conclusão %s</string>
<string name="repeats_every">Repete a cada</string>
<string name="repeats_weekly_on">Repete em</string>
<string name="repeats_never">Nunca</string>

@ -280,7 +280,7 @@
<string name="theme_wallpaper">Fundo</string>
<string name="theme_day_night">Dia/noite</string>
<string name="language">Idioma</string>
<string name="restart_required">O Tasks precisa ser reiniciado para que a mudança entre em vigor</string>
<string name="restart_required">Reinicie o Tasks para que esta alteração tenha efeito</string>
<string name="restart_now">Reiniciar agora</string>
<string name="restart_later">Mais tarde</string>
<string name="settings_localization">Tradução</string>
@ -302,9 +302,9 @@
<string name="repeats_from">Repetir de</string>
<string name="repeats_single">Repetir %s</string>
<string name="repeats_single_on">Repetir %1$s em %2$s</string>
<string name="repeats_single_until">Repetir %1$s até %2$s</string>
<string name="repeats_single_until">Repetir %1$s, termina em %2$s</string>
<string name="repeats_single_number_of_times">Repetir %1$s, ocorre %2$d %3$s</string>
<string name="repeats_single_on_until">Repetir %1$s em %2$s até %3$s</string>
<string name="repeats_single_on_until">Repetir %1$s em %2$s, termina em %3$s</string>
<string name="repeats_single_on_number_of_times">Repetir %1$s em %2$s, ocorre %3$d %4$s</string>
<string name="repeats_minutely">a cada minuto</string>
<string name="repeats_hourly">de hora em hora</string>
@ -314,13 +314,13 @@
<string name="repeats_yearly">anualmente</string>
<string name="repeats_plural">Repetir a cada %s</string>
<string name="repeats_plural_on">Repetir a cada %1$s em %2$s</string>
<string name="repeats_plural_until">Repetir a cada %1$s até %2$s</string>
<string name="repeats_plural_until">Repetir a cada %1$s, termina em %2$s</string>
<string name="repeats_plural_number_of_times">Repetir a cada %1$s, ocorre %2$d %3$s</string>
<string name="repeats_plural_on_until">Repetir a cada %1$s em %2$s até %3$s</string>
<string name="repeats_plural_on_until">Repetir a cada %1$s em %2$s, termina em %3$s</string>
<string name="repeats_plural_on_number_of_times">Repetir a cada %1$s em %2$s, ocorre %3$d %4$s</string>
<string name="dont_add_to_calendar">Não adicionar ao calendário</string>
<string name="default_calendar">Calendário predefinido</string>
<string name="bundle_notifications_summary">Combinar várias notificações numa só notificação</string>
<string name="bundle_notifications_summary">Combinar várias notificações numa só</string>
<string name="repeat_monthly_every_day_of_nth_week">cada %1$s %2$s</string>
<string name="repeat_monthly_first_week">primeiro</string>
<string name="repeat_monthly_second_week">segundo</string>
@ -525,11 +525,11 @@
<string name="above_average">Acima da média</string>
<string name="save_percent">Guardar %d%%</string>
<string name="migrate_count">Mover %s para Tasks.org</string>
<string name="authorization_cancelled">Autorização</string>
<string name="authorization_cancelled">Autorização cancelada</string>
<string name="follow_reddit">Entrar em r/tasks</string>
<string name="current_subscription">Subscrição atual: %s</string>
<string name="price_per_month">%s$/mês</string>
<string name="price_per_year">%s$/ano</string>
<string name="price_per_month">$%s/mês</string>
<string name="price_per_year">$%s/ano</string>
<string name="custom_filter_is_subtask">É uma subtarefa</string>
<string name="backup_location_warning">AVISO: os ficheiros localizados em \"%s\" serão eliminados se o Tasks for desinstalado! Escolha outra localização para impedir que o Android elimine os seus ficheiros.</string>
<string name="backups_ignore_warnings">Ignorar avisos</string>
@ -687,9 +687,9 @@
<string name="caldav_server_unknown">Desconhecido</string>
<string name="caldav_server_other">Outro</string>
<string name="caldav_server_type">Tipo de servidor</string>
<string name="customize_edit_screen_summary">Rearrange ou remova campos</string>
<string name="customize_edit_screen_summary">Reorganizar ou remover campos</string>
<string name="hint_customize_edit_title">Demasiada informação\?</string>
<string name="hint_customize_edit_body">Pode costumizar este ecrã rearranjando ou removendo campos</string>
<string name="hint_customize_edit_body">Pode personalizar este ecrã reorganizando ou removendo campos</string>
<string name="filter_snoozed">Adiado</string>
<string name="dismiss">Dispensar</string>
<string name="enable_reminders">Ativar lembretes</string>

@ -400,7 +400,7 @@
<string name="SSD_sort_my_order">Min ordning</string>
<string name="error_adding_account">Fel: %s</string>
<string name="lists">Listor</string>
<string name="sort_modified_group">Modifierad %s</string>
<string name="sort_modified_group">Ändrad %s</string>
<string name="sort_created_group">Skapad %s</string>
<string name="filter_no_priority">Ingen prioritet</string>
<string name="filter_low_priority">Låg prioritet</string>
@ -563,7 +563,7 @@
<string name="desaturate_colors_summary_on">Färgerna kommer att avmattas i mörka teman</string>
<string name="hide_unused_places">Dölj oanvända platser</string>
<string name="hide_unused_tags">Dölj oanvända taggar</string>
<string name="navigation_drawer">Navigationslåda</string>
<string name="navigation_drawer">Navigeringslåda</string>
<string name="desaturate_colors_summary_off">Färger avmattas inte i mörka teman</string>
<string name="desaturate_colors">Avmatta färger</string>
<string name="chip_appearance">Utseende av flis</string>
@ -720,4 +720,5 @@
<string name="ok">OK</string>
<string name="cancel">Avbryt</string>
<string name="clear_completed_tasks_count">%s kommer att tas bort</string>
<string name="theme_dynamic">Dynamisk</string>
</resources>

@ -328,9 +328,9 @@
<string name="repeats_from">Şundan sonra yinele</string>
<string name="repeats_single">%s yineler</string>
<string name="repeats_single_on">%2$s gününde %1$s yineler</string>
<string name="repeats_single_until">%2$s gününe dek %1$s yineler</string>
<string name="repeats_single_until">%1$s yineler, %2$s biter</string>
<string name="repeats_single_number_of_times">%1$s yineler, %2$d %3$s gerçekleşir</string>
<string name="repeats_single_on_until">%3$s gününe dek %2$s gününde %1$s yineler</string>
<string name="repeats_single_on_until">%2$s gününde %1$s yineler, %3$s biter</string>
<string name="repeats_single_on_number_of_times">%2$s gününde %1$s yineler, %3$d %4$s gerçekleşir</string>
<string name="repeats_minutely">Dakikalık</string>
<string name="repeats_hourly">Saatlik</string>
@ -340,9 +340,9 @@
<string name="repeats_yearly">Yıllık</string>
<string name="repeats_plural">Her %s yineler</string>
<string name="repeats_plural_on">%2$s gününde her %1$s yineler</string>
<string name="repeats_plural_until">%2$s gününe dek her %1$s yineler</string>
<string name="repeats_plural_until">Her %1$s yineler, %2$s biter</string>
<string name="repeats_plural_number_of_times">Her %1$s yineler, %2$d %3$s gerçekleşir</string>
<string name="repeats_plural_on_until">%3$s gününe dek %2$s gününde her %1$s yineler</string>
<string name="repeats_plural_on_until">%2$s gününde her %1$s yineler, %3$s biter</string>
<string name="repeats_plural_on_number_of_times">%2$s gününde her %1$s yineler, %3$d %4$s gerçekleşir</string>
<string name="dont_add_to_calendar">Takvime ekleme</string>
<string name="default_calendar">Öntanımlı takvim</string>
@ -725,4 +725,15 @@
<string name="sort_grouping">Kümeleme</string>
<string name="change_priority">Önceliği değiştir</string>
<string name="clear_completed_tasks_count">%s silinecek</string>
<string name="theme_dynamic">Dinamik</string>
<string name="swipe_to_snooze_time_immediately">hemen</string>
<string name="swipe_to_snooze_time_30_minutes">30 dakika sonra</string>
<string name="swipe_to_snooze_time_1_hour">1 saat sonra</string>
<string name="swipe_to_snooze_title">Ertelemek için kaydır</string>
<string name="swipe_to_snooze_description">Erteleme zamanı</string>
<string name="swipe_to_snooze_time_description">Temizlenen bir bildirim ertelenecek ve %s yeniden oluşturulacak</string>
<string name="swipe_to_snooze_time_15_minutes">15 dakika sonra</string>
<string name="swipe_to_snooze_time_24_hours">24 saat sonra</string>
<string name="show_edit_screen_without_unlock">Kilidi açmadan düzenleme ekranını göster</string>
<string name="show_edit_screen_without_unlock_summary">Aygıtın kilidini açmadan Hızlı Ayarlar kutucuğunun kullanılmasını sağlar</string>
</resources>

@ -710,4 +710,14 @@
<string name="change_priority">更改优先级</string>
<string name="clear_completed_tasks_count">%s 将被删除</string>
<string name="theme_dynamic">动态</string>
<string name="swipe_to_snooze_time_description">清除的通知将被推迟并于 %s 被再次创建</string>
<string name="swipe_to_snooze_time_immediately">立即</string>
<string name="swipe_to_snooze_time_30_minutes">30 分钟后</string>
<string name="swipe_to_snooze_time_1_hour">1 小时后</string>
<string name="swipe_to_snooze_time_24_hours">24 小时后</string>
<string name="swipe_to_snooze_title">滑动延后</string>
<string name="swipe_to_snooze_description">延后时长</string>
<string name="swipe_to_snooze_time_15_minutes">15 分钟后</string>
<string name="show_edit_screen_without_unlock_summary">允许不解锁设备的情况下使用“快速设置”磁贴</string>
<string name="show_edit_screen_without_unlock">不解锁显示编辑屏</string>
</resources>

@ -16,6 +16,14 @@
<item>@string/none</item>
</string-array>
<string-array name="swipe_to_snooze_times">
<item>@string/swipe_to_snooze_time_immediately</item>
<item>@string/swipe_to_snooze_time_15_minutes</item>
<item>@string/swipe_to_snooze_time_30_minutes</item>
<item>@string/swipe_to_snooze_time_1_hour</item>
<item>@string/swipe_to_snooze_time_24_hours</item>
</string-array>
<string-array name="reminder_ring_modes">
<item>@string/ring_once</item>
<item>@string/ring_five_times</item>

@ -75,6 +75,17 @@
<!-- whether "clear all notifications" clears astrid notifications -->
<string name="p_rmd_persistent">notif_annoy</string>
<string name="p_rmd_swipe_to_snooze_enabled">notif_swipe_to_snooze_enabled</string>
<string name="p_rmd_swipe_to_snooze_time_minutes">notif_swipe_to_snooze_time_minutes</string>
<string-array name="swipe_to_snooze_time_values">
<item>0</item>
<item>15</item>
<item>30</item>
<item>60</item>
<item>1440</item>
</string-array>
<!-- whether to vibrate phone when reminder fires -->
<string name="p_rmd_vibrate">notif_vibrate</string>
@ -98,6 +109,7 @@
<!-- show comments in task edit -->
<string name="p_show_task_edit_comments">p_show_task_edit_comments</string>
<string name="p_show_edit_screen_without_unlock">show_edit_screen_without_unlock</string>
<string-array name="EPr_reminder_random_hours">
<!-- values (in hours) associated with random reminders above. -->

@ -150,6 +150,14 @@ File %1$s contained %2$s.\n\n
<string name="rmd_EPr_rmd_time_desc">Notifications for tasks without due times will appear at %s</string>
<string name="persistent_notifications">Persistent notifications</string>
<string name="persistent_notifications_description">Persistent notifications cannot be cleared</string>
<string name="swipe_to_snooze_title">Swipe to snooze</string>
<string name="swipe_to_snooze_description">Snooze time</string>
<string name="swipe_to_snooze_time_description">A cleared notification will be snoozed and recreated %s</string>
<string name="swipe_to_snooze_time_immediately">immediately</string>
<string name="swipe_to_snooze_time_15_minutes">after 15 minutes</string>
<string name="swipe_to_snooze_time_30_minutes">after 30 minutes</string>
<string name="swipe_to_snooze_time_1_hour">after 1 hour</string>
<string name="swipe_to_snooze_time_24_hours">after 24 hours</string>
<string name="rmd_EPr_defaultRemind_title">Random reminders</string>
<string name="default_random_reminder_disabled">Disabled</string>
<string name="default_random_reminder_hourly">Hourly</string>
@ -369,6 +377,8 @@ File %1$s contained %2$s.\n\n
<string name="url_invalid_scheme">Must begin with http(s)://</string>
<string name="no_title">(No title)</string>
<string name="back_button_saves_task">Back button saves task</string>
<string name="show_edit_screen_without_unlock">Show edit screen without unlock</string>
<string name="show_edit_screen_without_unlock_summary">Enables use of Quick Settings tile without unlocking device</string>
<string name="default_list">Default list</string>
<string name="default_tags">Default tags</string>
<string name="default_recurrence">Default recurrence</string>

@ -71,6 +71,23 @@
android:summary="@string/more_notification_settings_summary"
app:icon="@drawable/ic_open_in_new_24px" />
<PreferenceCategory android:title="@string/swipe_to_snooze_title">
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/p_rmd_swipe_to_snooze_enabled"
android:title="@string/enabled" />
<ListPreference
android:defaultValue="15"
android:entries="@array/swipe_to_snooze_times"
android:entryValues="@array/swipe_to_snooze_time_values"
android:key="@string/p_rmd_swipe_to_snooze_time_minutes"
android:summary="@string/swipe_to_snooze_time_description"
android:title="@string/swipe_to_snooze_description"
android:dependency="@string/p_rmd_swipe_to_snooze_enabled" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/default_reminder">
<SwitchPreferenceCompat

@ -35,4 +35,11 @@
android:title="@string/EPr_show_task_edit_comments"
app:singleLineTitle="false" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/p_show_edit_screen_without_unlock"
android:title="@string/show_edit_screen_without_unlock"
android:summary="@string/show_edit_screen_without_unlock_summary"
app:singleLineTitle="false" />
</PreferenceScreen>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<samsung-appwidget-provider
display="sub_screen">
</samsung-appwidget-provider>

@ -1,5 +1,5 @@
plugins {
id("com.google.devtools.ksp") version "1.9.22-1.0.18" apply false
id("com.google.devtools.ksp") version "1.9.23-1.0.20" apply false
}
buildscript {

@ -1,21 +1,21 @@
++--- androidx.databinding:viewbinding:8.3.1
++--- androidx.databinding:viewbinding:8.3.2
+| \--- androidx.annotation:annotation:1.0.0 -> 1.7.1
+| \--- androidx.annotation:annotation-jvm:1.7.1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23
+| +--- org.jetbrains:annotations:13.0 -> 23.0.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.22 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.22 (c)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 (c)
++--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-runtime:8.3.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.23 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.23 (c)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23 (c)
++--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-runtime:8.3.2
+| +--- androidx.collection:collection:1.0.0 -> 1.4.0
+| | \--- androidx.collection:collection-jvm:1.4.0
+| | +--- androidx.annotation:annotation:1.7.0 -> 1.7.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.collection:collection-ktx:1.4.0 (c)
+| | \--- androidx.collection:collection-ktx:1.3.0 -> 1.4.0 (c)
+| +--- androidx.databinding:databinding-common:8.3.1
+| +--- androidx.databinding:viewbinding:8.3.1 (*)
+| +--- androidx.databinding:databinding-common:8.3.2
+| +--- androidx.databinding:viewbinding:8.3.2 (*)
+| \--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- androidx.arch.core:core-common:2.2.0
@ -25,7 +25,7 @@
+| | \--- androidx.arch.core:core-common:2.2.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3
@ -34,14 +34,14 @@
+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (c)
+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (c)
+| | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 (c)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 -> 1.9.22
+| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.22
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.22
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 -> 1.9.23
+| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.23
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.23
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.22 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -66,7 +66,7 @@
+| | | \--- androidx.tracing:tracing:1.0.0
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -80,17 +80,17 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
++--- androidx.databinding:databinding-adapters:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
+| \--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-ktx:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 1.9.22 (*)
++--- androidx.databinding:databinding-adapters:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| \--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-ktx:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 1.9.23 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.7.3 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.7.0
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -112,7 +112,7 @@
+| | | +--- androidx.arch.core:core-common:2.2.0 (*)
+| | | +--- androidx.arch.core:core-runtime:2.2.0 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -128,7 +128,7 @@
+| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.7.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -142,7 +142,7 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
@ -161,7 +161,7 @@
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | +--- androidx.startup:startup-runtime:1.1.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -177,7 +177,7 @@
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.6.1 -> 2.7.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -193,7 +193,7 @@
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -207,18 +207,18 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
++--- org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.22
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.22
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
++--- org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.23
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.23
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
++--- com.github.bitfireAT:dav4jvm:2.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20 -> 1.9.23 (*)
+| +--- org.apache.commons:commons-lang3:3.8.1 -> 3.12.0
+| \--- com.squareup.okhttp3:okhttp:4.10.0 -> 4.12.0
+| +--- com.squareup.okio:okio:3.6.0 -> 3.8.0
+| | \--- com.squareup.okio:okio-jvm:3.8.0
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.23 (*)
++--- com.github.tasks:ical4android:12fe73a
+| +--- org.mnode.ical4j:ical4j:3.2.7
+| | +--- javax.cache:cache-api:1.1.1
@ -240,7 +240,7 @@
+| | \--- commons-validator:commons-validator:1.7 (*)
+| +--- org.apache.commons:commons-collections4:4.2 -> 4.4
+| +--- org.apache.commons:commons-lang3:3.8.1 -> 3.12.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21 -> 1.9.23 (*)
+| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14:2.0.3
+| | \--- org.slf4j:slf4j-api:2.0.3
@ -249,7 +249,7 @@
+| +--- androidx.core:core:1.12.0
+| | +--- androidx.annotation:annotation:1.6.0 -> 1.7.1 (*)
+| | +--- androidx.annotation:annotation-experimental:1.3.0 -> 1.4.0
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | +--- 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
@ -258,16 +258,16 @@
+| | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | \--- androidx.core:core-ktx:1.12.0 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| \--- androidx.core:core:1.12.0 (c)
++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 1.9.22 (*)
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.2
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 1.9.23 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.1
+| | +--- androidx.activity:activity:1.6.0 -> 1.8.2
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -284,9 +284,9 @@
+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*)
+| | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 -> 2.7.0 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.23 (*)
+| | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
@ -304,7 +304,7 @@
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
+| | | +--- androidx.tracing:tracing:1.0.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.activity:activity-compose:1.8.2 (c)
+| | | \--- androidx.activity:activity-ktx:1.8.2 (c)
+| | +--- androidx.annotation:annotation:1.3.0 -> 1.7.1 (*)
@ -366,14 +366,14 @@
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | | | +--- androidx.core:core:1.0.0 -> 1.12.0 (*)
+| | | | \--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.23 (*)
+| | | \--- androidx.fragment:fragment-ktx:1.6.2 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.5.1 -> 2.7.0 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.1 -> 2.7.0 (*)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | +--- androidx.savedstate:savedstate:1.2.0 -> 1.2.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | \--- androidx.appcompat:appcompat-resources:1.6.1 (c)
+| +--- androidx.cardview:cardview:1.0.0
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
@ -390,7 +390,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.4.1 -> 2.7.0
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
@ -407,7 +407,7 @@
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.7.0
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -424,10 +424,10 @@
+| | \--- androidx.lifecycle:lifecycle-livedata-core:2.7.0 (c)
+| +--- com.google.android.material:material:1.6.0 -> 1.11.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22 -> 1.9.22 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.22 (c)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22 -> 1.9.23 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.23 (c)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (c)
+| | +--- androidx.activity:activity:1.8.0 -> 1.8.2 (*)
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | +--- androidx.appcompat:appcompat:1.6.1 (*)
@ -466,7 +466,7 @@
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.customview:customview-poolingcontainer:1.0.0
+| | | | +--- androidx.core:core-ktx:1.5.0 -> 1.12.0 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 1.9.23 (*)
+| | | \--- androidx.viewpager2:viewpager2:1.1.0-beta02 (c)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*)
+| | +--- androidx.transition:transition:1.2.0 -> 1.4.1
@ -503,7 +503,7 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate:1.2.0 -> 1.2.1 (*)
+| +--- javax.inject:javax.inject:1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.20 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.20 -> 1.9.23 (*)
++--- androidx.hilt:hilt-work:1.2.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- androidx.hilt:hilt-common:1.2.0
@ -519,24 +519,24 @@
+| | | +--- androidx.arch.core:core-runtime:2.2.0 (*)
+| | | +--- androidx.room:room-common:2.6.1
+| | | | +--- androidx.annotation:annotation:1.3.0 -> 1.7.1 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.23 (*)
+| | | | +--- androidx.room:room-ktx:2.6.1 (c)
+| | | | \--- androidx.room:room-runtime:2.6.1 (c)
+| | | +--- androidx.sqlite:sqlite:2.4.0
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | \--- androidx.sqlite:sqlite-framework:2.4.0 (c)
+| | | +--- androidx.sqlite:sqlite-framework:2.4.0
+| | | | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | | | +--- androidx.sqlite:sqlite:2.4.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | \--- androidx.sqlite:sqlite:2.4.0 (c)
+| | | +--- androidx.room:room-common:2.6.1 (c)
+| | | \--- androidx.room:room-ktx:2.6.1 (c)
+| | +--- androidx.sqlite:sqlite-framework:2.3.0 -> 2.4.0 (*)
+| | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.23 (*)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*)
++--- androidx.fragment:fragment-ktx:1.6.2
+| +--- androidx.activity:activity-ktx:1.5.1 -> 1.8.2
@ -546,9 +546,9 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.7.0 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.2.1
+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.23 (*)
+| | | \--- androidx.savedstate:savedstate:1.2.1 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.activity:activity:1.8.2 (c)
+| | \--- androidx.activity:activity-compose:1.8.2 (c)
+| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.0
@ -559,14 +559,14 @@
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.23 (*)
+| \--- androidx.fragment:fragment:1.6.2 (c)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.7.0 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (*)
++--- androidx.room:room-ktx:2.6.1
+| +--- androidx.room:room-common:2.6.1 (*)
+| +--- androidx.room:room-runtime:2.6.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| +--- androidx.room:room-common:2.6.1 (c)
+| \--- androidx.room:room-runtime:2.6.1 (c)
@ -588,10 +588,10 @@
+| \--- com.atlassian.commonmark:commonmark:0.13.0
++--- io.noties.markwon:ext-tasklist:4.6.2
+| \--- io.noties.markwon:core:4.6.2 (*)
++--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.22 (*)
++--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.23 (*)
++--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7
+| \--- org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.7
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.23 (*)
++--- com.squareup.okhttp3:okhttp:4.12.0 (*)
++--- com.github.franmontiel:PersistentCookieJar:1.0.1
+| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*)
@ -604,8 +604,8 @@
+| | +--- androidx.compose.runtime:runtime:1.0.1 -> 1.6.4
+| | | \--- androidx.compose.runtime:runtime-android:1.6.4
+| | | +--- androidx.collection:collection:1.4.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | +--- 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.4 (c)
@ -614,8 +614,8 @@
+| | | \--- androidx.compose.runtime:runtime-saveable-android:1.6.4
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.compose.runtime:runtime:1.6.4 (c)
+| | | \--- androidx.compose.runtime:runtime-livedata:1.6.4 (c)
+| | +--- androidx.compose.ui:ui:1.0.1 -> 1.6.4
@ -634,8 +634,8 @@
+| | | | +--- androidx.compose.runtime:runtime:1.2.1 -> 1.6.4 (*)
+| | | | +--- androidx.compose.ui:ui-util:1.6.4
+| | | | | \--- androidx.compose.ui:ui-util-android:1.6.4
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
@ -643,8 +643,8 @@
+| | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-unit:1.6.4 (c)
+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.4 (c)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-text:1.6.4 (c)
@ -664,8 +664,8 @@
+| | | | | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (*)
+| | | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
@ -674,7 +674,7 @@
+| | | | | +--- androidx.compose.ui:ui-util:1.6.4 (c)
+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-text:1.6.4 (c)
@ -693,8 +693,8 @@
+| | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | +--- androidx.core:core:1.7.0 -> 1.12.0 (*)
+| | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
@ -712,8 +712,8 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
+| | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | +--- 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.4 (c)
@ -725,7 +725,7 @@
+| | | +--- androidx.compose.ui:ui-viewbinding:1.6.4 (c)
+| | | \--- androidx.compose.foundation:foundation:1.4.0 -> 1.6.4 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.activity:activity:1.8.2 (c)
+| | \--- androidx.activity:activity-ktx:1.8.2 (c)
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -739,8 +739,8 @@
+| | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | +--- androidx.compose.ui:ui-unit:1.6.4 (*)
+| | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | \--- androidx.compose.animation:animation:1.6.4 (c)
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.4
@ -759,13 +759,13 @@
+| | | | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | +--- androidx.core:core:1.7.0 -> 1.12.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | \--- androidx.compose.foundation:foundation:1.6.4 (c)
+| | | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | | +--- androidx.compose.ui:ui-geometry:1.6.4 (*)
+| | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | \--- androidx.compose.animation:animation-core:1.6.4 (c)
+| | +--- androidx.compose.foundation:foundation-layout:1.6.4 (*)
+| | +--- androidx.compose.runtime:runtime:1.6.4 (*)
@ -774,14 +774,14 @@
+| | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | +--- androidx.core:core:1.12.0 (*)
+| | +--- androidx.emoji2:emoji2:1.3.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | \--- androidx.compose.foundation:foundation-layout:1.6.4 (c)
+| +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.4 (*)
+| +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.4
+| | \--- androidx.compose.material:material-icons-core-android:1.6.4
+| | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.compose.material:material:1.6.4 (c)
+| | +--- androidx.compose.material:material-icons-extended:1.6.4 (c)
+| | \--- androidx.compose.material:material-ripple:1.6.4 (c)
@ -791,7 +791,7 @@
+| | +--- androidx.compose.foundation:foundation:1.6.4 (*)
+| | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.compose.material:material:1.6.4 (c)
+| | +--- androidx.compose.material:material-icons-core:1.6.4 (c)
+| | \--- androidx.compose.material:material-icons-extended:1.6.4 (c)
@ -818,7 +818,7 @@
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
++--- androidx.constraintlayout:constraintlayout:2.1.4 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -836,7 +836,7 @@
+| | +--- androidx.customview:customview:1.1.0 (*)
+| | +--- androidx.core:core:1.1.0 -> 1.12.0 (*)
+| | +--- androidx.window:window:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.7.3 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
@ -844,7 +844,7 @@
+| | \--- androidx.transition:transition:1.4.1 (*)
+| \--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++--- com.jakewharton.timber:timber:5.0.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.21 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.21 -> 1.9.23 (*)
+| \--- org.jetbrains:annotations:20.1.0 -> 23.0.0
++--- com.google.android.apps.dashclock:dashclock-api:2.0.0
++--- com.github.twofortyfouram:android-plugin-api-for-locale:1.0.2
@ -880,7 +880,7 @@
+| \--- com.google.guava:guava:32.0.0-android (*)
++--- androidx.work:work-runtime-ktx:2.8.1
+| +--- androidx.work:work-runtime:2.8.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -963,7 +963,7 @@
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate:1.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.material:material-icons-core:1.6.4 (c)
+| +--- androidx.compose.material:material-icons-extended:1.6.4 (c)
+| \--- androidx.compose.material:material-ripple:1.6.4 (c)
@ -972,13 +972,13 @@
+| +--- androidx.compose.ui:ui:1.2.1 -> 1.6.4 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.runtime:runtime:1.6.4 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.4 (c)
++--- com.google.android.material:compose-theme-adapter:1.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20 -> 1.9.23 (*)
+| +--- com.google.android.material:compose-theme-adapter-core:1.0.1
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 1.9.23 (*)
+| | +--- androidx.core:core-ktx:1.9.0 -> 1.12.0 (*)
+| | +--- androidx.appcompat:appcompat:1.5.1 -> 1.6.1 (*)
+| | +--- com.google.android.material:material:1.7.0 -> 1.11.0 (*)
@ -990,7 +990,7 @@
+| \--- androidx.compose.material:material-icons-extended-android:1.6.4
+| +--- androidx.compose.material:material-icons-core:1.6.4 (*)
+| +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.material:material:1.6.4 (c)
+| +--- androidx.compose.material:material-icons-core:1.6.4 (c)
+| \--- androidx.compose.material:material-ripple:1.6.4 (c)
@ -1001,7 +1001,7 @@
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -1018,9 +1018,9 @@
++--- androidx.compose.ui:ui-viewbinding -> 1.6.4
+| +--- androidx.compose.ui:ui:1.6.4 (*)
+| +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.1 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.2 (*)
+| +--- androidx.fragment:fragment-ktx:1.3.2 -> 1.6.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.ui:ui:1.6.4 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.6.4 (c)
+| +--- androidx.compose.ui:ui-util:1.6.4 (c)
@ -1032,7 +1032,7 @@
+| \--- androidx.compose.ui:ui-tooling-preview-android:1.6.4
+| +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.ui:ui:1.6.4 (c)
+| +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
@ -1046,7 +1046,7 @@
+| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0
+| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.6.4 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)
+| | +--- io.coil-kt:coil-base:2.6.0
+| | | +--- androidx.annotation:annotation:1.7.1 (*)
+| | | +--- androidx.appcompat:appcompat-resources:1.6.1 (*)
@ -1057,45 +1057,45 @@
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
+| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | \--- com.squareup.okio:okio:3.8.0 (*)
+| | +--- androidx.compose.foundation:foundation:1.6.1 -> 1.6.4 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
+| +--- io.coil-kt:coil:2.6.0
+| | +--- io.coil-kt:coil-base:2.6.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- io.coil-kt:coil-video:2.6.0
+| +--- androidx.core:core-ktx:1.12.0 (*)
+| +--- io.coil-kt:coil-base:2.6.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- io.coil-kt:coil-svg:2.6.0
+| +--- androidx.core:core-ktx:1.12.0 (*)
+| +--- com.caverock:androidsvg-aar:1.4
+| +--- io.coil-kt:coil-base:2.6.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- io.coil-kt:coil-gif:2.6.0
+| +--- androidx.core:core-ktx:1.12.0 (*)
+| +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 (*)
+| +--- io.coil-kt:coil-base:2.6.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- com.google.accompanist:accompanist-flowlayout:0.32.0
+| +--- androidx.compose.foundation:foundation:1.5.0 -> 1.6.4 (*)
+| +--- androidx.compose.ui:ui-util:1.5.0 -> 1.6.4 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)
++--- com.google.accompanist:accompanist-permissions:0.32.0
+| +--- androidx.activity:activity-compose:1.7.2 -> 1.8.2 (*)
+| +--- androidx.compose.foundation:foundation:1.5.0 -> 1.6.4 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+| +--- io.github.aakira:napier:1.4.1
+| | \--- io.github.aakira:napier-android:1.4.1
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.32 -> 1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.32 -> 1.9.23 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)
+\--- com.google.accompanist:accompanist-systemuicontroller:0.32.0
+ +--- androidx.core:core-ktx:1.8.0 -> 1.12.0 (*)
+ +--- androidx.compose.ui:ui:1.5.0 -> 1.6.4 (*)
+ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)

@ -1,21 +1,21 @@
++--- androidx.databinding:viewbinding:8.3.1
++--- androidx.databinding:viewbinding:8.3.2
+| \--- androidx.annotation:annotation:1.0.0 -> 1.7.1
+| \--- androidx.annotation:annotation-jvm:1.7.1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23
+| +--- org.jetbrains:annotations:13.0 -> 23.0.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.22 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.22 (c)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 (c)
++--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-runtime:8.3.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.23 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.23 (c)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23 (c)
++--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-runtime:8.3.2
+| +--- androidx.collection:collection:1.0.0 -> 1.4.0
+| | \--- androidx.collection:collection-jvm:1.4.0
+| | +--- androidx.annotation:annotation:1.7.0 -> 1.7.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.collection:collection-ktx:1.4.0 (c)
+| | \--- androidx.collection:collection-ktx:1.3.0 -> 1.4.0 (c)
+| +--- androidx.databinding:databinding-common:8.3.1
+| +--- androidx.databinding:viewbinding:8.3.1 (*)
+| +--- androidx.databinding:databinding-common:8.3.2
+| +--- androidx.databinding:viewbinding:8.3.2 (*)
+| \--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- androidx.arch.core:core-common:2.2.0
@ -25,7 +25,7 @@
+| | \--- androidx.arch.core:core-common:2.2.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3
@ -35,14 +35,14 @@
+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 (c)
+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 (c)
+| | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 (c)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 -> 1.9.22
+| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.22
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.22
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 -> 1.9.23
+| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.23
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.23
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.22 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -67,7 +67,7 @@
+| | | \--- androidx.tracing:tracing:1.0.0
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -81,17 +81,17 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
++--- androidx.databinding:databinding-adapters:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
+| \--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-ktx:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 1.9.22 (*)
++--- androidx.databinding:databinding-adapters:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| \--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-ktx:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 1.9.23 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.7.3 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.7.0
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -113,7 +113,7 @@
+| | | +--- androidx.arch.core:core-common:2.2.0 (*)
+| | | +--- androidx.arch.core:core-runtime:2.2.0 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -129,7 +129,7 @@
+| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.7.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -143,7 +143,7 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
@ -162,7 +162,7 @@
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | +--- androidx.startup:startup-runtime:1.1.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -178,7 +178,7 @@
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.6.1 -> 2.7.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -194,7 +194,7 @@
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -208,31 +208,31 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
++--- com.google.firebase:firebase-bom:32.7.4
+| +--- com.google.firebase:firebase-analytics:21.5.1 (c)
++--- com.google.firebase:firebase-bom:32.8.1
+| +--- com.google.firebase:firebase-analytics:21.6.2 (c)
+| +--- com.google.firebase:firebase-config-ktx:21.6.3 (c)
+| +--- com.google.firebase:firebase-crashlytics:18.6.2 (c)
+| +--- com.google.firebase:firebase-common:20.4.2 (c)
+| +--- com.google.firebase:firebase-common-ktx:20.4.2 (c)
+| +--- com.google.firebase:firebase-crashlytics:18.6.4 (c)
+| +--- com.google.firebase:firebase-common:20.4.3 (c)
+| +--- com.google.firebase:firebase-common-ktx:20.4.3 (c)
+| +--- com.google.firebase:firebase-config:21.6.3 (c)
+| +--- com.google.firebase:firebase-installations:17.2.0 (c)
+| \--- com.google.firebase:firebase-encoders:17.0.0 (c)
++--- com.google.firebase:firebase-crashlytics -> 18.6.2
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.22 (*)
++--- com.google.firebase:firebase-crashlytics -> 18.6.4
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.23 (*)
+| +--- com.google.firebase:firebase-config-interop:16.0.0 -> 16.0.1
+| | +--- com.google.firebase:firebase-encoders-json:18.0.1
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.23 (*)
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | \--- com.google.firebase:firebase-encoders:17.0.0
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | \--- com.google.firebase:firebase-encoders:17.0.0 (*)
+| +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2
+| | \--- com.google.android.gms:play-services-basement:18.1.0
+| +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0
+| | \--- com.google.android.gms:play-services-basement:18.3.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | +--- androidx.core:core:1.2.0 -> 1.12.0
+| | | +--- androidx.annotation:annotation:1.6.0 -> 1.7.1 (*)
+| | | +--- androidx.annotation:annotation-experimental:1.3.0 -> 1.4.0
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | | +--- 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
@ -241,9 +241,9 @@
+| | | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | | \--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | \--- androidx.core:core-ktx:1.12.0 (c)
+| | \--- androidx.fragment:fragment:1.0.0 -> 1.6.2
+| | \--- androidx.fragment:fragment:1.1.0 -> 1.6.2
+| | +--- androidx.activity:activity:1.7.2 -> 1.8.2
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
@ -255,7 +255,7 @@
+| | | | +--- androidx.core:core-ktx:1.2.0 -> 1.12.0
+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | | | +--- androidx.core:core:1.12.0 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | | \--- androidx.core:core:1.12.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.7.0 (*)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.7.0 (*)
@ -263,9 +263,9 @@
+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*)
+| | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 -> 2.7.0 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.23 (*)
+| | | | | \--- androidx.savedstate:savedstate-ktx:1.2.1 (c)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
@ -283,7 +283,7 @@
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
+| | | +--- androidx.tracing:tracing:1.0.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.activity:activity-compose:1.8.2 (c)
+| | | \--- androidx.activity:activity-ktx:1.8.2 (c)
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -308,7 +308,7 @@
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.12.0 (*)
+| | | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.23 (*)
+| | \--- androidx.fragment:fragment-ktx:1.6.2 (c)
+| +--- com.google.android.datatransport:transport-api:3.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -331,71 +331,73 @@
+| +--- com.google.firebase:firebase-encoders-json:18.0.0 -> 18.0.1 (*)
+| +--- com.google.firebase:firebase-encoders:17.0.0 (*)
+| +--- com.google.firebase:firebase-installations-interop:17.1.0 -> 17.1.1
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0 (*)
+| | \--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| +--- com.google.firebase:firebase-measurement-connector:18.0.2 -> 19.0.0
+| | +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.1.0 (*)
+| | +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.3.0 (*)
+| | \--- com.google.firebase:firebase-annotations:16.0.0 -> 16.2.0 (*)
+| +--- androidx.annotation:annotation:1.5.0 -> 1.7.1 (*)
+| +--- com.google.firebase:firebase-common:20.4.2
+| +--- com.google.firebase:firebase-common:20.4.2 -> 20.4.3
+| | +--- 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 (*)
+| | | +--- com.google.android.gms:play-services-tasks:16.0.1 -> 18.0.2 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.22 (*)
+| | | +--- com.google.android.gms:play-services-tasks:16.0.1 -> 18.1.0 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 -> 1.9.23 (*)
+| | +--- com.google.firebase:firebase-components:17.1.5
+| | | +--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| | | \--- androidx.annotation:annotation:1.5.0 -> 1.7.1 (*)
+| | +--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| | +--- androidx.annotation:annotation:1.5.0 -> 1.7.1 (*)
+| | +--- androidx.concurrent:concurrent-futures:1.1.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.0.2 (*)
+| +--- com.google.firebase:firebase-common-ktx:20.4.2
+| | +--- com.google.firebase:firebase-common:20.4.2 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.22 (*)
+| | +--- com.google.firebase:firebase-components:17.1.3 -> 17.1.5 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | +--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.1.0 (*)
+| +--- com.google.firebase:firebase-common-ktx:20.4.2 -> 20.4.3
+| | +--- com.google.firebase:firebase-common:20.4.3 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.23 (*)
+| | +--- com.google.firebase:firebase-components:17.1.5 (*)
+| | \--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| +--- com.google.firebase:firebase-components:17.1.5 (*)
+| +--- com.google.firebase:firebase-installations:17.2.0
+| | +--- com.google.firebase:firebase-installations-interop:17.1.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0 (*)
+| | +--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| | +--- com.google.firebase:firebase-common:20.4.2 (*)
+| | +--- com.google.firebase:firebase-common-ktx:20.4.2 (*)
+| | +--- com.google.firebase:firebase-common:20.4.2 -> 20.4.3 (*)
+| | +--- com.google.firebase:firebase-common-ktx:20.4.2 -> 20.4.3 (*)
+| | \--- com.google.firebase:firebase-components:17.1.3 -> 17.1.5 (*)
+| \--- com.google.firebase:firebase-sessions:1.2.1
+| +--- com.google.firebase:firebase-common-ktx:20.4.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.22 (*)
+| \--- com.google.firebase:firebase-sessions:1.2.4
+| +--- com.google.firebase:firebase-common:20.4.2 -> 20.4.3 (*)
+| +--- com.google.firebase:firebase-common-ktx:20.4.2 -> 20.4.3 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.23 (*)
+| +--- com.google.firebase:firebase-installations:17.2.0 (*)
+| +--- com.google.firebase:firebase-datatransport:18.1.8
+| | +--- com.google.android.datatransport:transport-api:3.0.0 (*)
+| | +--- com.google.android.datatransport:transport-runtime:3.1.9 (*)
+| | +--- com.google.android.datatransport:transport-backend-cct:3.1.9 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- com.google.firebase:firebase-components:17.1.5 (*)
+| +--- com.google.firebase:firebase-installations-interop:17.1.1 (*)
+| +--- androidx.datastore:datastore-preferences:1.0.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.23 (*)
+| | +--- androidx.datastore:datastore:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.7.3 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | | \--- androidx.datastore:datastore-core:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.7.3 (*)
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | \--- androidx.datastore:datastore-preferences-core:1.0.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.10 -> 1.9.23 (*)
+| | \--- androidx.datastore:datastore-core:1.0.0 (*)
+| +--- com.google.android.datatransport:transport-api:3.0.0 (*)
+| +--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| +--- com.google.firebase:firebase-encoders:17.0.0 (*)
+| +--- com.google.firebase:firebase-encoders-json:18.0.1 (*)
+| \--- androidx.annotation:annotation:1.5.0 -> 1.7.1 (*)
++--- com.google.firebase:firebase-analytics -> 21.5.1
+| +--- com.google.android.gms:play-services-measurement:21.5.1
++--- com.google.firebase:firebase-analytics -> 21.6.2
+| +--- com.google.android.gms:play-services-measurement:21.6.2
+| | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | +--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
@ -407,16 +409,16 @@
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | | \--- androidx.print:print:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:21.5.1
+| | | \--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-impl:21.5.1
+| | +--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:21.6.2
+| | | \--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-impl:21.6.2
+| | | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | | +--- androidx.core:core:1.9.0 -> 1.12.0 (*)
+| | | +--- androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05
+| | | | +--- androidx.annotation:annotation:1.6.0 -> 1.7.1 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.12.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 (c)
+| | | +--- androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05
@ -428,56 +430,56 @@
+| | | | | +--- com.google.guava:failureaccess:1.0.1
+| | | | | \--- 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 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.21 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 (c)
+| | | +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:21.5.1 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:21.6.2 (*)
+| | | +--- com.google.android.gms:play-services-stats:17.0.2
+| | | | +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
+| | | | \--- com.google.android.gms:play-services-basement:18.0.0 -> 18.1.0 (*)
+| | | | \--- com.google.android.gms:play-services-basement:18.0.0 -> 18.3.0 (*)
+| | | \--- com.google.guava:guava:31.1-android -> 32.0.0-android (*)
+| | \--- com.google.android.gms:play-services-stats:17.0.2 (*)
+| +--- com.google.android.gms:play-services-measurement-api:21.5.1
+| | +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:21.5.1 (*)
+| | +--- com.google.android.gms:play-services-measurement-sdk-api:21.5.1
+| | | +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | | \--- com.google.android.gms:play-services-measurement-base:21.5.1 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
+| | +--- com.google.firebase:firebase-common:20.4.2 (*)
+| | +--- com.google.firebase:firebase-common-ktx:20.4.2 (*)
+| +--- com.google.android.gms:play-services-measurement-api:21.6.2
+| | +--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:21.6.2 (*)
+| | +--- com.google.android.gms:play-services-measurement-sdk-api:21.6.2
+| | | +--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| | | \--- com.google.android.gms:play-services-measurement-base:21.6.2 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.1.0 (*)
+| | +--- com.google.firebase:firebase-common:20.4.2 -> 20.4.3 (*)
+| | +--- com.google.firebase:firebase-common-ktx:20.4.2 -> 20.4.3 (*)
+| | +--- com.google.firebase:firebase-components:17.1.5 (*)
+| | +--- com.google.firebase:firebase-installations:17.0.1 -> 17.2.0 (*)
+| | +--- com.google.firebase:firebase-installations-interop:17.0.0 -> 17.1.1 (*)
+| | +--- com.google.firebase:firebase-measurement-connector:19.0.0 (*)
+| | +--- com.google.guava:guava:31.1-android -> 32.0.0-android (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| \--- com.google.android.gms:play-services-measurement-sdk:21.5.1
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| \--- com.google.android.gms:play-services-measurement-sdk:21.6.2
+| +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| +--- com.google.android.gms:play-services-measurement-base:21.5.1 (*)
+| \--- com.google.android.gms:play-services-measurement-impl:21.5.1 (*)
+| +--- com.google.android.gms:play-services-basement:18.3.0 (*)
+| +--- com.google.android.gms:play-services-measurement-base:21.6.2 (*)
+| \--- com.google.android.gms:play-services-measurement-impl:21.6.2 (*)
++--- com.google.firebase:firebase-config-ktx -> 21.6.3
+| +--- com.google.firebase:firebase-common:20.4.2 (*)
+| +--- com.google.firebase:firebase-common-ktx:20.4.2 (*)
+| +--- com.google.firebase:firebase-common:20.4.2 -> 20.4.3 (*)
+| +--- com.google.firebase:firebase-common-ktx:20.4.2 -> 20.4.3 (*)
+| +--- com.google.firebase:firebase-config:21.6.3
+| | +--- com.google.firebase:firebase-config-interop:16.0.1 (*)
+| | +--- com.google.firebase:firebase-annotations:16.2.0 (*)
+| | +--- com.google.firebase:firebase-installations-interop:17.1.0 -> 17.1.1 (*)
+| | +--- com.google.firebase:firebase-abt:21.1.1
+| | | +--- com.google.firebase:firebase-measurement-connector:18.0.0 -> 19.0.0 (*)
+| | | \--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | | \--- com.google.android.gms:play-services-basement:18.1.0 -> 18.3.0 (*)
+| | +--- com.google.firebase:firebase-measurement-connector:18.0.0 -> 19.0.0 (*)
+| | +--- com.google.firebase:firebase-common:20.4.2 (*)
+| | +--- com.google.firebase:firebase-common-ktx:20.4.2 (*)
+| | +--- com.google.firebase:firebase-common:20.4.2 -> 20.4.3 (*)
+| | +--- com.google.firebase:firebase-common-ktx:20.4.2 -> 20.4.3 (*)
+| | +--- com.google.firebase:firebase-components:17.1.5 (*)
+| | +--- com.google.firebase:firebase-installations:17.2.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0 (*)
+| +--- com.google.firebase:firebase-installations:17.2.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10 -> 1.9.23 (*)
+| +--- com.google.firebase:firebase-components:17.1.5 (*)
+| +--- com.google.firebase:firebase-installations-interop:17.1.0 -> 17.1.1 (*)
+| \--- com.google.firebase:firebase-abt:21.1.1 (*)
@ -486,16 +488,16 @@
+| | +--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
+| | +--- androidx.core:core:1.2.0 -> 1.12.0 (*)
+| | +--- androidx.fragment:fragment:1.0.0 -> 1.6.2 (*)
+| | +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.0.2 (*)
+| +--- com.google.android.gms:play-services-basement:18.1.0 (*)
+| +--- com.google.android.gms:play-services-tasks:18.0.2 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.0 -> 1.9.22 (*)
+| | +--- com.google.android.gms:play-services-basement:18.1.0 -> 18.3.0 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.0.2 -> 18.1.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.1.0 -> 18.3.0 (*)
+| +--- com.google.android.gms:play-services-tasks:18.0.2 -> 18.1.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.0 -> 1.9.23 (*)
++--- com.google.android.gms:play-services-maps:18.2.0
+| +--- androidx.fragment:fragment:1.0.0 -> 1.6.2 (*)
+| +--- com.google.android.gms:play-services-base:18.0.1 -> 18.1.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.1.0 (*)
+| \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
+| +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.3.0 (*)
+| \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0 (*)
++--- com.android.billingclient:billing-ktx:6.1.0
+| +--- com.android.billingclient:billing:6.1.0
+| | +--- androidx.activity:activity:1.2.3 -> 1.8.2 (*)
@ -503,16 +505,16 @@
+| | +--- com.google.android.datatransport:transport-backend-cct:3.1.8 -> 3.1.9 (*)
+| | +--- com.google.android.datatransport:transport-runtime:3.1.8 -> 3.1.9 (*)
+| | +--- com.google.android.gms:play-services-base:18.0.1 -> 18.1.0 (*)
+| | +--- com.google.android.gms:play-services-basement:18.0.1 -> 18.1.0 (*)
+| | +--- com.google.android.gms:play-services-basement:18.0.1 -> 18.3.0 (*)
+| | +--- com.google.android.gms:play-services-location:19.0.0 -> 21.1.0 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.0 -> 1.9.22 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.23 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.0 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0 -> 1.7.3 (*)
++--- 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 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 -> 1.9.23 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6 -> 1.7.3 (*)
+| +--- androidx.core:core:1.1.0 -> 1.12.0 (*)
+| \--- androidx.fragment:fragment:1.1.0 -> 1.6.2 (*)
@ -560,24 +562,24 @@
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | +--- androidx.savedstate:savedstate:1.2.0 -> 1.2.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.23 (*)
+| | \--- androidx.appcompat:appcompat-resources:1.6.1 (c)
+| +--- androidx.loader:loader:1.0.0 (*)
+| +--- com.google.android.gms:play-services-base:18.0.1 -> 18.1.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.1.0 (*)
+| \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.0.2 (*)
++--- org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.22
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.22
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.3.0 (*)
+| \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.1.0 (*)
++--- org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.23
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.23
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.23 (*)
++--- com.github.bitfireAT:dav4jvm:2.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20 -> 1.9.23 (*)
+| +--- org.apache.commons:commons-lang3:3.8.1 -> 3.12.0
+| \--- com.squareup.okhttp3:okhttp:4.10.0 -> 4.12.0
+| +--- com.squareup.okio:okio:3.6.0 -> 3.8.0
+| | \--- com.squareup.okio:okio-jvm:3.8.0
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.23 (*)
++--- com.github.tasks:ical4android:12fe73a
+| +--- org.mnode.ical4j:ical4j:3.2.7
+| | +--- javax.cache:cache-api:1.1.1
@ -599,17 +601,17 @@
+| | \--- commons-validator:commons-validator:1.7 (*)
+| +--- org.apache.commons:commons-collections4:4.2 -> 4.4
+| +--- org.apache.commons:commons-lang3:3.8.1 -> 3.12.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21 -> 1.9.23 (*)
+| +--- 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.12.0 (*)
++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 1.9.22 (*)
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.2
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 1.9.23 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.1 (*)
+| +--- androidx.cardview:cardview:1.0.0
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
@ -626,7 +628,7 @@
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.4.1 -> 2.7.0
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
@ -643,7 +645,7 @@
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.7.0
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -660,10 +662,10 @@
+| | \--- androidx.lifecycle:lifecycle-livedata-core:2.7.0 (c)
+| +--- com.google.android.material:material:1.6.0 -> 1.11.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22 -> 1.9.22 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.22 (c)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22 -> 1.9.23 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.23 (c)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (c)
+| | +--- androidx.activity:activity:1.8.0 -> 1.8.2 (*)
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | +--- androidx.appcompat:appcompat:1.6.1 (*)
@ -693,7 +695,7 @@
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.customview:customview-poolingcontainer:1.0.0
+| | | | +--- androidx.core:core-ktx:1.5.0 -> 1.12.0 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 1.9.22 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 1.9.23 (*)
+| | | \--- androidx.viewpager2:viewpager2:1.1.0-beta02 (c)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*)
+| | +--- androidx.transition:transition:1.2.0 -> 1.4.1
@ -730,7 +732,7 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate:1.2.0 -> 1.2.1 (*)
+| +--- javax.inject:javax.inject:1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.20 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.20 -> 1.9.23 (*)
++--- androidx.hilt:hilt-work:1.2.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- androidx.hilt:hilt-common:1.2.0
@ -746,24 +748,24 @@
+| | | +--- androidx.arch.core:core-runtime:2.2.0 (*)
+| | | +--- androidx.room:room-common:2.6.1
+| | | | +--- androidx.annotation:annotation:1.3.0 -> 1.7.1 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.23 (*)
+| | | | +--- androidx.room:room-ktx:2.6.1 (c)
+| | | | \--- androidx.room:room-runtime:2.6.1 (c)
+| | | +--- androidx.sqlite:sqlite:2.4.0
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.7.1 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | \--- androidx.sqlite:sqlite-framework:2.4.0 (c)
+| | | +--- androidx.sqlite:sqlite-framework:2.4.0
+| | | | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | | | +--- androidx.sqlite:sqlite:2.4.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | \--- androidx.sqlite:sqlite:2.4.0 (c)
+| | | +--- androidx.room:room-common:2.6.1 (c)
+| | | \--- androidx.room:room-ktx:2.6.1 (c)
+| | +--- androidx.sqlite:sqlite-framework:2.3.0 -> 2.4.0 (*)
+| | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.23 (*)
+| \--- com.google.dagger:hilt-android:2.49 -> 2.50 (*)
++--- androidx.fragment:fragment-ktx:1.6.2
+| +--- androidx.activity:activity-ktx:1.5.1 -> 1.8.2
@ -773,9 +775,9 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.7.0 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.2.1
+| | | +--- androidx.savedstate:savedstate:1.2.1 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.23 (*)
+| | | \--- androidx.savedstate:savedstate:1.2.1 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.activity:activity:1.8.2 (c)
+| | \--- androidx.activity:activity-compose:1.8.2 (c)
+| +--- androidx.collection:collection-ktx:1.1.0 -> 1.4.0
@ -786,14 +788,14 @@
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 -> 1.9.23 (*)
+| \--- androidx.fragment:fragment:1.6.2 (c)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.7.0 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (*)
++--- androidx.room:room-ktx:2.6.1
+| +--- androidx.room:room-common:2.6.1 (*)
+| +--- androidx.room:room-runtime:2.6.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1 -> 1.7.3 (*)
+| +--- androidx.room:room-common:2.6.1 (c)
+| \--- androidx.room:room-runtime:2.6.1 (c)
@ -815,10 +817,10 @@
+| \--- com.atlassian.commonmark:commonmark:0.13.0
++--- io.noties.markwon:ext-tasklist:4.6.2
+| \--- io.noties.markwon:core:4.6.2 (*)
++--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.22 (*)
++--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.23 (*)
++--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7
+| \--- org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.7
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.23 (*)
++--- com.squareup.okhttp3:okhttp:4.12.0 (*)
++--- com.github.franmontiel:PersistentCookieJar:1.0.1
+| \--- com.squareup.okhttp3:okhttp:3.1.2 -> 4.12.0 (*)
@ -831,8 +833,8 @@
+| | +--- androidx.compose.runtime:runtime:1.0.1 -> 1.6.4
+| | | \--- androidx.compose.runtime:runtime-android:1.6.4
+| | | +--- androidx.collection:collection:1.4.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | +--- 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.4 (c)
@ -841,8 +843,8 @@
+| | | \--- androidx.compose.runtime:runtime-saveable-android:1.6.4
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| | | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | +--- androidx.compose.runtime:runtime:1.6.4 (c)
+| | | \--- androidx.compose.runtime:runtime-livedata:1.6.4 (c)
+| | +--- androidx.compose.ui:ui:1.0.1 -> 1.6.4
@ -861,8 +863,8 @@
+| | | | +--- androidx.compose.runtime:runtime:1.2.1 -> 1.6.4 (*)
+| | | | +--- androidx.compose.ui:ui-util:1.6.4
+| | | | | \--- androidx.compose.ui:ui-util-android:1.6.4
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
@ -870,8 +872,8 @@
+| | | | | +--- androidx.compose.ui:ui-tooling-preview:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-unit:1.6.4 (c)
+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.4 (c)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-text:1.6.4 (c)
@ -891,8 +893,8 @@
+| | | | | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (*)
+| | | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| | | | | +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
@ -901,7 +903,7 @@
+| | | | | +--- androidx.compose.ui:ui-util:1.6.4 (c)
+| | | | | \--- androidx.compose.ui:ui-viewbinding:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-text:1.6.4 (c)
@ -920,8 +922,8 @@
+| | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | +--- androidx.core:core:1.7.0 -> 1.12.0 (*)
+| | | | +--- androidx.emoji2:emoji2:1.2.0 -> 1.3.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | | | +--- androidx.compose.ui:ui:1.6.4 (c)
+| | | | +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
@ -939,8 +941,8 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.0 -> 1.3.1 (*)
+| | | +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | +--- 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.4 (c)
@ -952,7 +954,7 @@
+| | | +--- androidx.compose.ui:ui-viewbinding:1.6.4 (c)
+| | | \--- androidx.compose.foundation:foundation:1.4.0 -> 1.6.4 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.activity:activity:1.8.2 (c)
+| | \--- androidx.activity:activity-ktx:1.8.2 (c)
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -966,8 +968,8 @@
+| | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | +--- androidx.compose.ui:ui-unit:1.6.4 (*)
+| | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.7.3 (*)
+| | \--- androidx.compose.animation:animation:1.6.4 (c)
+| +--- androidx.compose.foundation:foundation:1.6.0 -> 1.6.4
@ -986,13 +988,13 @@
+| | | | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | | +--- androidx.core:core:1.7.0 -> 1.12.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | | \--- androidx.compose.foundation:foundation:1.6.4 (c)
+| | | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | | +--- androidx.compose.ui:ui-geometry:1.6.4 (*)
+| | | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | | \--- androidx.compose.animation:animation-core:1.6.4 (c)
+| | +--- androidx.compose.foundation:foundation-layout:1.6.4 (*)
+| | +--- androidx.compose.runtime:runtime:1.6.4 (*)
@ -1001,14 +1003,14 @@
+| | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | +--- androidx.core:core:1.12.0 (*)
+| | +--- androidx.emoji2:emoji2:1.3.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | \--- androidx.compose.foundation:foundation-layout:1.6.4 (c)
+| +--- androidx.compose.foundation:foundation-layout:1.6.0 -> 1.6.4 (*)
+| +--- androidx.compose.material:material-icons-core:1.6.0 -> 1.6.4
+| | \--- androidx.compose.material:material-icons-core-android:1.6.4
+| | +--- androidx.compose.ui:ui:1.6.4 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.compose.material:material:1.6.4 (c)
+| | +--- androidx.compose.material:material-icons-extended:1.6.4 (c)
+| | \--- androidx.compose.material:material-ripple:1.6.4 (c)
@ -1018,7 +1020,7 @@
+| | +--- androidx.compose.foundation:foundation:1.6.4 (*)
+| | +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| | +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| | +--- androidx.compose.material:material:1.6.4 (c)
+| | +--- androidx.compose.material:material-icons-core:1.6.4 (c)
+| | \--- androidx.compose.material:material-icons-extended:1.6.4 (c)
@ -1045,7 +1047,7 @@
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.2.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
++--- androidx.constraintlayout:constraintlayout:2.1.4 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -1063,7 +1065,7 @@
+| | +--- androidx.customview:customview:1.1.0 (*)
+| | +--- androidx.core:core:1.1.0 -> 1.12.0 (*)
+| | +--- androidx.window:window:1.0.0
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 1.9.23 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.7.3 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| | | +--- androidx.collection:collection:1.1.0 -> 1.4.0 (*)
@ -1071,7 +1073,7 @@
+| | \--- androidx.transition:transition:1.4.1 (*)
+| \--- androidx.collection:collection:1.0.0 -> 1.4.0 (*)
++--- com.jakewharton.timber:timber:5.0.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.21 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.21 -> 1.9.23 (*)
+| \--- org.jetbrains:annotations:20.1.0 -> 23.0.0
++--- com.google.android.apps.dashclock:dashclock-api:2.0.0
++--- com.github.twofortyfouram:android-plugin-api-for-locale:1.0.2
@ -1105,7 +1107,7 @@
+| \--- com.google.guava:guava:32.0.0-android (*)
++--- androidx.work:work-runtime-ktx:2.8.1
+| +--- androidx.work:work-runtime:2.8.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.21 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
@ -1188,7 +1190,7 @@
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.7.0 (*)
+| +--- androidx.savedstate:savedstate:1.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.material:material-icons-core:1.6.4 (c)
+| +--- androidx.compose.material:material-icons-extended:1.6.4 (c)
+| \--- androidx.compose.material:material-ripple:1.6.4 (c)
@ -1197,13 +1199,13 @@
+| +--- androidx.compose.ui:ui:1.2.1 -> 1.6.4 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.6.1 -> 2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.runtime:runtime:1.6.4 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.4 (c)
++--- com.google.android.material:compose-theme-adapter:1.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20 -> 1.9.23 (*)
+| +--- com.google.android.material:compose-theme-adapter-core:1.0.1
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 1.9.23 (*)
+| | +--- androidx.core:core-ktx:1.9.0 -> 1.12.0 (*)
+| | +--- androidx.appcompat:appcompat:1.5.1 -> 1.6.1 (*)
+| | +--- com.google.android.material:material:1.7.0 -> 1.11.0 (*)
@ -1215,7 +1217,7 @@
+| \--- androidx.compose.material:material-icons-extended-android:1.6.4
+| +--- androidx.compose.material:material-icons-core:1.6.4 (*)
+| +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.material:material:1.6.4 (c)
+| +--- androidx.compose.material:material-icons-core:1.6.4 (c)
+| \--- androidx.compose.material:material-ripple:1.6.4 (c)
@ -1226,7 +1228,7 @@
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.7.0 (c)
@ -1243,9 +1245,9 @@
++--- androidx.compose.ui:ui-viewbinding -> 1.6.4
+| +--- androidx.compose.ui:ui:1.6.4 (*)
+| +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.1 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.2 (*)
+| +--- androidx.fragment:fragment-ktx:1.3.2 -> 1.6.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.ui:ui:1.6.4 (c)
+| +--- androidx.compose.ui:ui-tooling-preview:1.6.4 (c)
+| +--- androidx.compose.ui:ui-util:1.6.4 (c)
@ -1257,7 +1259,7 @@
+| \--- androidx.compose.ui:ui-tooling-preview-android:1.6.4
+| +--- androidx.annotation:annotation:1.2.0 -> 1.7.1 (*)
+| +--- androidx.compose.runtime:runtime:1.6.4 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 -> 1.9.23 (*)
+| +--- androidx.compose.ui:ui:1.6.4 (c)
+| +--- androidx.compose.ui:ui-geometry:1.6.4 (c)
+| +--- androidx.compose.ui:ui-graphics:1.6.4 (c)
@ -1271,7 +1273,7 @@
+| | +--- com.google.accompanist:accompanist-drawablepainter:0.32.0
+| | | +--- androidx.compose.ui:ui:1.5.0 -> 1.6.4 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)
+| | +--- io.coil-kt:coil-base:2.6.0
+| | | +--- androidx.annotation:annotation:1.7.1 (*)
+| | | +--- androidx.appcompat:appcompat-resources:1.6.1 (*)
@ -1282,45 +1284,45 @@
+| | | +--- androidx.profileinstaller:profileinstaller:1.3.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
+| | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | \--- com.squareup.okio:okio:3.8.0 (*)
+| | +--- androidx.compose.foundation:foundation:1.6.1 -> 1.6.4 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
+| +--- io.coil-kt:coil:2.6.0
+| | +--- io.coil-kt:coil-base:2.6.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- io.coil-kt:coil-video:2.6.0
+| +--- androidx.core:core-ktx:1.12.0 (*)
+| +--- io.coil-kt:coil-base:2.6.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- io.coil-kt:coil-svg:2.6.0
+| +--- androidx.core:core-ktx:1.12.0 (*)
+| +--- com.caverock:androidsvg-aar:1.4
+| +--- io.coil-kt:coil-base:2.6.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- io.coil-kt:coil-gif:2.6.0
+| +--- androidx.core:core-ktx:1.12.0 (*)
+| +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 (*)
+| +--- io.coil-kt:coil-base:2.6.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -> 1.9.23 (*)
++--- com.google.accompanist:accompanist-flowlayout:0.32.0
+| +--- androidx.compose.foundation:foundation:1.5.0 -> 1.6.4 (*)
+| +--- androidx.compose.ui:ui-util:1.5.0 -> 1.6.4 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)
++--- com.google.accompanist:accompanist-permissions:0.32.0
+| +--- androidx.activity:activity-compose:1.7.2 -> 1.8.2 (*)
+| +--- androidx.compose.foundation:foundation:1.5.0 -> 1.6.4 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+| +--- io.github.aakira:napier:1.4.1
+| | \--- io.github.aakira:napier-android:1.4.1
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.32 -> 1.9.22 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32 -> 1.9.22 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.32 -> 1.9.23 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32 -> 1.9.23 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)
+\--- com.google.accompanist:accompanist-systemuicontroller:0.32.0
+ +--- androidx.core:core-ktx:1.8.0 -> 1.12.0 (*)
+ +--- androidx.compose.ui:ui:1.5.0 -> 1.6.4 (*)
+ +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.22 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -> 1.9.23 (*)

@ -7,7 +7,7 @@ cert4android = "7814052"
coil = "2.6.0"
colorpicker = "0.0.15"
compose = "2024.03.00"
compose-compiler = "1.5.10"
compose-compiler = "1.5.12"
compose-theme-adapter = "1.2.1"
constraintlayout = "2.1.4"
dagger-hilt = "2.50"
@ -15,15 +15,15 @@ dashclock-api = "2.0.0"
dav4jvm = "2.2.1"
desugar_jdk_libs = "2.0.4"
etebase = "2.3.2"
firebase = "32.7.4"
firebase = "32.8.1"
firebase-crashlytics-gradle = "2.9.9"
flipper = "0.250.0"
fragment-ktx = "1.6.2"
google-oauth2 = "1.20.0"
google-api-drive = "v3-rev20240123-2.0.0"
google-api-tasks = "v1-rev20240225-2.0.0"
google-api-tasks = "v1-rev20240423-2.0.0"
google-services = "4.4.1"
gradle = "8.3.1"
gradle = "8.3.2"
gson = "2.10.1"
hilt = "1.2.0"
ical4android = "12fe73a"
@ -31,7 +31,7 @@ jchronic = "0.2.6"
jems = "1.33"
junit-junit = "4.13.2"
junit = "1.1.5"
kotlin = "1.9.22"
kotlin = "1.9.23"
kotlinx-coroutines-test = "1.8.0"
leakcanary = "2.13"
lib-recur = "0.11.4"

Loading…
Cancel
Save