Per-app language configuration

pull/1917/head
Alex Baker 2 years ago
parent 47d6aeddea
commit 6f73765fd2

@ -182,7 +182,7 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.lifecycle}") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.lifecycle}")
implementation("androidx.room:room-ktx:${Versions.room}") implementation("androidx.room:room-ktx:${Versions.room}")
kapt("androidx.room:room-compiler:${Versions.room}") kapt("androidx.room:room-compiler:${Versions.room}")
implementation("androidx.appcompat:appcompat:1.4.0") implementation("androidx.appcompat:appcompat:1.6.0-alpha05")
implementation("androidx.paging:paging-runtime:2.1.2") implementation("androidx.paging:paging-runtime:2.1.2")
implementation("io.noties.markwon:core:${Versions.markwon}") implementation("io.noties.markwon:core:${Versions.markwon}")
implementation("io.noties.markwon:editor:${Versions.markwon}") implementation("io.noties.markwon:editor:${Versions.markwon}")

@ -9,7 +9,6 @@ import org.tasks.TestUtilities.withTZ
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.locale.Locale
import org.tasks.time.DateTime import org.tasks.time.DateTime
import java.text.ParseException import java.text.ParseException
import java.util.* import java.util.*
@ -123,7 +122,7 @@ class RepeatRuleToStringTest : InjectingTestCase() {
private fun toString(language: String?, rrule: String): String? { private fun toString(language: String?, rrule: String): String? {
return try { return try {
val locale = Locale(java.util.Locale.getDefault(), language) val locale = Locale(java.util.Locale.getDefault(), language)
RepeatRuleToString(locale.createConfigurationContext(context), locale, firebase) RepeatRuleToString(context, locale, firebase)
.toString(rrule) .toString(rrule)
} catch (e: ParseException) { } catch (e: ParseException) {
throw RuntimeException(e) throw RuntimeException(e)

@ -151,7 +151,8 @@
android:theme="@style/Tasks" android:theme="@style/Tasks"
tools:ignore="GoogleAppIndexingWarning,UnusedAttribute" tools:ignore="GoogleAppIndexingWarning,UnusedAttribute"
android:preserveLegacyExternalStorage="true" android:preserveLegacyExternalStorage="true"
android:hasFragileUserData="true"> android:hasFragileUserData="true"
android:localeConfig="@xml/locales_config">
<activity <activity
android:name="net.openid.appauth.RedirectUriReceiverActivity" android:name="net.openid.appauth.RedirectUriReceiverActivity"
@ -320,6 +321,15 @@
android:name=".widget.ScrollableWidgetUpdateService" android:name=".widget.ScrollableWidgetUpdateService"
android:permission="android.permission.BIND_REMOTEVIEWS"/> android:permission="android.permission.BIND_REMOTEVIEWS"/>
<service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
<meta-data
android:name="autoStoreLocales"
android:value="true" />
</service>
<!-- ======================================================= Providers = --> <!-- ======================================================= Providers = -->
<provider <provider

@ -11,16 +11,20 @@ import static org.tasks.time.DateTimeUtils.currentTimeMillis;
import android.content.Context; import android.content.Context;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.format.TextStyle;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R; import org.tasks.R;
import org.tasks.locale.Locale;
import org.tasks.time.DateTime; import org.tasks.time.DateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.format.TextStyle;
import java.util.Locale;
public class DateUtilities { public class DateUtilities {
/** Represents a single hour */ /** Represents a single hour */
@ -71,7 +75,7 @@ public class DateUtilities {
*/ */
public static String getDateString(Context context, DateTime date) { public static String getDateString(Context context, DateTime date) {
return getRelativeDay( return getRelativeDay(
context, date.getMillis(), Locale.getInstance().getLocale(), FormatStyle.MEDIUM); context, date.getMillis(), Locale.getDefault(), FormatStyle.MEDIUM);
} }
static String getWeekday(DateTime date, java.util.Locale locale) { static String getWeekday(DateTime date, java.util.Locale locale) {

@ -12,12 +12,7 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable import android.os.Parcelable
import android.speech.RecognizerIntent import android.speech.RecognizerIntent
import android.view.Gravity import android.view.*
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
@ -51,43 +46,26 @@ import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.adapter.TaskAdapter import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.adapter.TaskAdapterProvider import com.todoroo.astrid.adapter.TaskAdapterProvider
import com.todoroo.astrid.api.*
import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_OLD_DUE_DATE import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_OLD_DUE_DATE
import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_TASK_ID import com.todoroo.astrid.api.AstridApiConstants.EXTRAS_TASK_ID
import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.IdListFilter
import com.todoroo.astrid.api.SearchFilter
import com.todoroo.astrid.api.TagFilter
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.repeats.RepeatTaskHelper import com.todoroo.astrid.repeats.RepeatTaskHelper
import com.todoroo.astrid.service.TaskCompleter import com.todoroo.astrid.service.*
import com.todoroo.astrid.service.TaskCreator
import com.todoroo.astrid.service.TaskDeleter
import com.todoroo.astrid.service.TaskDuplicator
import com.todoroo.astrid.service.TaskMover
import com.todoroo.astrid.timers.TimerPlugin import com.todoroo.astrid.timers.TimerPlugin
import com.todoroo.astrid.utility.Flags import com.todoroo.astrid.utility.Flags
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job import kotlinx.coroutines.*
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.ShortcutManager import org.tasks.ShortcutManager
import org.tasks.Tasks.Companion.IS_GOOGLE_PLAY import org.tasks.Tasks.Companion.IS_GOOGLE_PLAY
import org.tasks.activities.FilterSettingsActivity import org.tasks.activities.*
import org.tasks.activities.GoogleTaskListSettingsActivity
import org.tasks.activities.ListPicker
import org.tasks.activities.ListPicker.Companion.newListPicker import org.tasks.activities.ListPicker.Companion.newListPicker
import org.tasks.activities.PlaceSettingsActivity
import org.tasks.activities.TagSettingsActivity
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
@ -103,28 +81,21 @@ import org.tasks.dialogs.SortDialog
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.extensions.Fragment.safeStartActivityForResult import org.tasks.extensions.Fragment.safeStartActivityForResult
import org.tasks.extensions.formatNumber
import org.tasks.extensions.setOnQueryTextListener import org.tasks.extensions.setOnQueryTextListener
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.intents.TaskIntents import org.tasks.intents.TaskIntents
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import org.tasks.preferences.Device import org.tasks.preferences.Device
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.sync.SyncAdapters import org.tasks.sync.SyncAdapters
import org.tasks.tags.TagPickerActivity import org.tasks.tags.TagPickerActivity
import org.tasks.tasklist.DragAndDropRecyclerAdapter import org.tasks.tasklist.*
import org.tasks.tasklist.PagedListRecyclerAdapter
import org.tasks.tasklist.TaskListRecyclerAdapter
import org.tasks.tasklist.TaskViewHolder
import org.tasks.tasklist.ViewHolderFactory
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import org.tasks.ui.TaskEditEvent import org.tasks.ui.*
import org.tasks.ui.TaskEditEventBus
import org.tasks.ui.TaskListEvent
import org.tasks.ui.TaskListEventBus
import org.tasks.ui.TaskListViewModel
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.max import kotlin.math.max
@ -428,9 +399,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
R.id.menu_voice_add -> { R.id.menu_voice_add -> {
safeStartActivityForResult( safeStartActivityForResult(
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply { Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
locale.languageOverride?.let {
putExtra(RecognizerIntent.EXTRA_LANGUAGE, it)
}
putExtra( putExtra(
RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM RecognizerIntent.LANGUAGE_MODEL_FREE_FORM
@ -980,7 +948,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
R.string.repeat_snackbar, R.string.repeat_snackbar,
task.title, task.title,
DateUtilities.getRelativeDateTime( DateUtilities.getRelativeDateTime(
context, task.dueDate, locale.locale, FormatStyle.LONG, true context, task.dueDate, locale, FormatStyle.LONG, true
) )
) )
makeSnackbar(text)?.setAction(R.string.DLG_undo, undoCompletion)?.show() makeSnackbar(text)?.setAction(R.string.DLG_undo, undoCompletion)?.show()

@ -18,7 +18,6 @@ import com.todoroo.astrid.api.FilterListItem
import com.todoroo.astrid.api.FilterListItem.Type.* import com.todoroo.astrid.api.FilterListItem.Type.*
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject

@ -7,19 +7,16 @@ import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.*
import com.todoroo.astrid.api.CustomFilter
import com.todoroo.astrid.api.FilterListItem
import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.TagFilter
import org.tasks.R import org.tasks.R
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.databinding.FilterAdapterRowBinding import org.tasks.databinding.FilterAdapterRowBinding
import org.tasks.extensions.formatNumber
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons.getIconResId import org.tasks.themes.CustomIcons.getIconResId
import org.tasks.themes.DrawableUtil import org.tasks.themes.DrawableUtil
import java.util.*
class FilterViewHolder internal constructor( class FilterViewHolder internal constructor(
itemView: View, itemView: View,

@ -20,7 +20,6 @@ import kotlinx.coroutines.channels.Channel
import org.tasks.activities.DragAndDropDiffer import org.tasks.activities.DragAndDropDiffer
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import java.util.* import java.util.*
import java.util.concurrent.Executors import java.util.concurrent.Executors

@ -16,7 +16,7 @@ import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.PermaSql import com.todoroo.astrid.api.PermaSql
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.timers.TimerPlugin import com.todoroo.astrid.timers.TimerPlugin
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ActivityContext
import org.tasks.R import org.tasks.R
import org.tasks.data.* import org.tasks.data.*
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
@ -26,7 +26,6 @@ import org.tasks.filters.SnoozedFilter
import org.tasks.filters.SortableFilter import org.tasks.filters.SortableFilter
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import java.util.*
import javax.inject.Inject import javax.inject.Inject
/** /**
@ -35,7 +34,7 @@ import javax.inject.Inject
* @author Tim Su <tim></tim>@todoroo.com> * @author Tim Su <tim></tim>@todoroo.com>
*/ */
class BuiltInFilterExposer @Inject constructor( class BuiltInFilterExposer @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ActivityContext private val context: Context,
private val preferences: Preferences, private val preferences: Preferences,
private val taskDao: TaskDao) { private val taskDao: TaskDao) {

@ -7,15 +7,16 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.tasks.R import org.tasks.R
import org.tasks.databinding.CustomFilterRowBinding import org.tasks.databinding.CustomFilterRowBinding
import org.tasks.locale.Locale import org.tasks.extensions.formatNumber
import org.tasks.preferences.ResourceResolver import org.tasks.preferences.ResourceResolver
import java.util.*
class CriterionViewHolder( class CriterionViewHolder(
private val context: Context, private val context: Context,
itemView: View, itemView: View,
private val locale: Locale, private val locale: Locale,
private val onClick: (String) -> Unit) private val onClick: (String) -> Unit
: RecyclerView.ViewHolder(itemView) { ) : RecyclerView.ViewHolder(itemView) {
private val divider: View private val divider: View
private val icon: ImageView private val icon: ImageView

@ -6,18 +6,23 @@ import android.content.Context;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.recyclerview.widget.AsyncDifferConfig; import androidx.recyclerview.widget.AsyncDifferConfig;
import androidx.recyclerview.widget.AsyncListDiffer; import androidx.recyclerview.widget.AsyncListDiffer;
import androidx.recyclerview.widget.ListUpdateCallback; import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.tasks.R;
import java.util.List; import java.util.List;
import java.util.Locale;
import kotlin.Unit; import kotlin.Unit;
import kotlin.jvm.functions.Function1; import kotlin.jvm.functions.Function1;
import org.tasks.R;
import org.tasks.locale.Locale;
public class CustomFilterAdapter extends RecyclerView.Adapter<CriterionViewHolder> implements public class CustomFilterAdapter extends RecyclerView.Adapter<CriterionViewHolder> implements
ListUpdateCallback { ListUpdateCallback {
@ -27,7 +32,7 @@ public class CustomFilterAdapter extends RecyclerView.Adapter<CriterionViewHolde
private final AsyncListDiffer<CriterionInstance> differ; private final AsyncListDiffer<CriterionInstance> differ;
public CustomFilterAdapter( public CustomFilterAdapter(
List<CriterionInstance> objects, Locale locale, Function1<String, Unit> onClick) { List<CriterionInstance> objects, Locale locale, Function1<String, Unit> onClick) {
this.locale = locale; this.locale = locale;
this.onClick = onClick; this.onClick = onClick;
differ = new AsyncListDiffer<>(this, new AsyncDifferConfig.Builder<>(new CriterionDiffCallback()).build()); differ = new AsyncListDiffer<>(this, new AsyncDifferConfig.Builder<>(new CriterionDiffCallback()).build());

@ -28,7 +28,6 @@ import org.tasks.data.UserActivityDao
import org.tasks.dialogs.Linkify import org.tasks.dialogs.Linkify
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.files.ImageHelper import org.tasks.files.ImageHelper
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -91,7 +90,7 @@ class CommentsController @Inject constructor(
// date // date
val date = view.findViewById<TextView>(R.id.date) val date = view.findViewById<TextView>(R.id.date)
date.text = DateUtilities.getLongDateStringWithTime(item.created!!, locale.locale) date.text = DateUtilities.getLongDateStringWithTime(item.created!!, locale)
// picture // picture
val commentPictureView = view.findViewById<ImageView>(R.id.comment_picture) val commentPictureView = view.findViewById<ImageView>(R.id.comment_picture)

@ -22,12 +22,12 @@ import org.tasks.dialogs.StartDatePicker.Companion.EXTRA_TIME
import org.tasks.dialogs.StartDatePicker.Companion.NO_DAY import org.tasks.dialogs.StartDatePicker.Companion.NO_DAY
import org.tasks.dialogs.StartDatePicker.Companion.NO_TIME import org.tasks.dialogs.StartDatePicker.Companion.NO_TIME
import org.tasks.dialogs.StartDatePicker.Companion.WEEK_BEFORE_DUE import org.tasks.dialogs.StartDatePicker.Companion.WEEK_BEFORE_DUE
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils.millisOfDay import org.tasks.time.DateTimeUtils.millisOfDay
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -140,7 +140,7 @@ class StartDateControlSet : TaskEditControlFragment() {
in 1..Long.MAX_VALUE -> DateUtilities.getRelativeDateTime( in 1..Long.MAX_VALUE -> DateUtilities.getRelativeDateTime(
activity, activity,
selectedDay + selectedTime, selectedDay + selectedTime,
locale.locale, locale,
FormatStyle.FULL, FormatStyle.FULL,
preferences.alwaysDisplayFullDate, preferences.alwaysDisplayFullDate,
false false

@ -20,7 +20,6 @@ import org.tasks.caldav.CaldavSynchronizer
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.injection.InjectingJobIntentService import org.tasks.injection.InjectingJobIntentService
import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManager
import org.tasks.locale.Locale
import org.tasks.location.GeofenceApi import org.tasks.location.GeofenceApi
import org.tasks.opentasks.OpenTaskContentObserver import org.tasks.opentasks.OpenTaskContentObserver
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -57,7 +56,6 @@ class Tasks : Application(), Configuration.Provider {
preferences.setBoolean(R.string.p_sync_ongoing_opentasks, false) preferences.setBoolean(R.string.p_sync_ongoing_opentasks, false)
ThemeBase.getThemeBase(preferences, inventory, null).setDefaultNightMode() ThemeBase.getThemeBase(preferences, inventory, null).setDefaultNightMode()
localBroadcastManager.registerRefreshReceiver(RefreshBroadcastReceiver()) localBroadcastManager.registerRefreshReceiver(RefreshBroadcastReceiver())
Locale.getInstance(this).createConfigurationContext(applicationContext)
backgroundWork() backgroundWork()
} }

@ -24,12 +24,7 @@ import com.todoroo.andlib.sql.UnaryCriterion
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.activity.MainActivity import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.activity.TaskListFragment import com.todoroo.astrid.activity.TaskListFragment
import com.todoroo.astrid.api.BooleanCriterion import com.todoroo.astrid.api.*
import com.todoroo.astrid.api.CustomFilter
import com.todoroo.astrid.api.CustomFilterCriterion
import com.todoroo.astrid.api.MultipleSelectCriterion
import com.todoroo.astrid.api.PermaSql
import com.todoroo.astrid.api.TextInputCriterion
import com.todoroo.astrid.core.CriterionInstance import com.todoroo.astrid.core.CriterionInstance
import com.todoroo.astrid.core.CustomFilterAdapter import com.todoroo.astrid.core.CustomFilterAdapter
import com.todoroo.astrid.core.CustomFilterItemTouchHelper import com.todoroo.astrid.core.CustomFilterItemTouchHelper
@ -46,7 +41,6 @@ import org.tasks.databinding.FilterSettingsActivityBinding
import org.tasks.db.QueryUtils import org.tasks.db.QueryUtils
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.filters.FilterCriteriaProvider import org.tasks.filters.FilterCriteriaProvider
import org.tasks.locale.Locale
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.max import kotlin.math.max

@ -15,10 +15,11 @@ import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.LocationDao import org.tasks.data.LocationDao
import org.tasks.data.Place import org.tasks.data.Place
import org.tasks.databinding.ActivityLocationSettingsBinding import org.tasks.databinding.ActivityLocationSettingsBinding
import org.tasks.extensions.formatNumber
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.location.MapFragment import org.tasks.location.MapFragment
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import java.util.*
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.roundToInt import kotlin.math.roundToInt

@ -5,20 +5,20 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnClickListener;
import android.view.View; import android.view.View;
import android.widget.ListAdapter; import android.widget.ListAdapter;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.List; import java.util.List;
import org.tasks.locale.Locale;
public class AlertDialogBuilder { public class AlertDialogBuilder {
private final AlertDialog.Builder builder; private final AlertDialog.Builder builder;
private final Context context; private final Context context;
private final Locale locale;
AlertDialogBuilder(Context context, Locale locale) { AlertDialogBuilder(Context context) {
this.context = context; this.context = context;
this.locale = locale;
builder = new MaterialAlertDialogBuilder(context); builder = new MaterialAlertDialogBuilder(context);
} }
@ -60,7 +60,7 @@ public class AlertDialogBuilder {
public AlertDialogBuilder setItems( public AlertDialogBuilder setItems(
String[] strings, DialogInterface.OnClickListener onClickListener) { String[] strings, DialogInterface.OnClickListener onClickListener) {
builder.setItems(addDirectionality(strings.clone()), onClickListener); builder.setItems(strings.clone(), onClickListener);
return this; return this;
} }
@ -87,21 +87,10 @@ public class AlertDialogBuilder {
public AlertDialogBuilder setSingleChoiceItems( public AlertDialogBuilder setSingleChoiceItems(
String[] strings, int selectedIndex, OnClickListener onClickListener) { String[] strings, int selectedIndex, OnClickListener onClickListener) {
builder.setSingleChoiceItems(addDirectionality(strings), selectedIndex, onClickListener); builder.setSingleChoiceItems(strings, selectedIndex, onClickListener);
return this; return this;
} }
private String[] addDirectionality(String[] strings) {
for (int i = 0; i < strings.length; i++) {
strings[i] = withDirectionality(strings[i]);
}
return strings;
}
private String withDirectionality(String string) {
return locale.getDirectionalityMark() + string;
}
public AlertDialogBuilder setSingleChoiceItems( public AlertDialogBuilder setSingleChoiceItems(
ListAdapter adapter, int selectedIndex, DialogInterface.OnClickListener onClickListener) { ListAdapter adapter, int selectedIndex, DialogInterface.OnClickListener onClickListener) {
builder.setSingleChoiceItems(adapter, selectedIndex, onClickListener); builder.setSingleChoiceItems(adapter, selectedIndex, onClickListener);
@ -137,7 +126,6 @@ public class AlertDialogBuilder {
public AlertDialog show() { public AlertDialog show() {
AlertDialog dialog = create(); AlertDialog dialog = create();
dialog.show(); dialog.show();
locale.applyDirectionality(dialog);
return dialog; return dialog;
} }
} }

@ -20,12 +20,12 @@ import org.tasks.databinding.DialogDateTimePickerBinding
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import org.tasks.time.DateTime import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils.millisOfDay import org.tasks.time.DateTimeUtils.millisOfDay
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import java.util.Calendar.* import java.util.Calendar.*
import javax.inject.Inject import javax.inject.Inject
@ -145,7 +145,7 @@ class DateTimePicker : BaseDateTimePicker() {
binding.shortcuts.currentDateSelection.text = if (customDate == MULTIPLE_DAYS) { binding.shortcuts.currentDateSelection.text = if (customDate == MULTIPLE_DAYS) {
requireContext().getString(R.string.date_picker_multiple) requireContext().getString(R.string.date_picker_multiple)
} else { } else {
DateUtilities.getRelativeDay(context, selectedDay, locale.locale, FormatStyle.MEDIUM) DateUtilities.getRelativeDay(context, selectedDay, locale, FormatStyle.MEDIUM)
} }
} }
} }

@ -2,22 +2,20 @@ package org.tasks.dialogs;
import android.app.Activity; import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.locale.Locale;
public class DialogBuilder { public class DialogBuilder {
private final Activity activity; private final Activity activity;
private final Locale locale;
@Inject @Inject
public DialogBuilder(Activity activity, Locale locale) { public DialogBuilder(Activity activity) {
this.activity = activity; this.activity = activity;
this.locale = locale;
} }
public AlertDialogBuilder newDialog() { public AlertDialogBuilder newDialog() {
return new AlertDialogBuilder(activity, locale); return new AlertDialogBuilder(activity);
} }
public AlertDialogBuilder newDialog(int title) { public AlertDialogBuilder newDialog(int title) {

@ -16,10 +16,10 @@ import org.tasks.R
import org.tasks.databinding.DialogStartDatePickerBinding import org.tasks.databinding.DialogStartDatePickerBinding
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import org.tasks.time.DateTime import org.tasks.time.DateTime
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -112,7 +112,7 @@ class StartDatePicker : BaseDateTimePicker() {
binding.shortcuts.dateGroup.check(R.id.current_date_selection) binding.shortcuts.dateGroup.check(R.id.current_date_selection)
binding.shortcuts.currentDateSelection.visibility = View.VISIBLE binding.shortcuts.currentDateSelection.visibility = View.VISIBLE
binding.shortcuts.currentDateSelection.text = binding.shortcuts.currentDateSelection.text =
DateUtilities.getRelativeDay(context, selectedDay, locale.locale, FormatStyle.MEDIUM) DateUtilities.getRelativeDay(context, selectedDay, locale, FormatStyle.MEDIUM)
} }
} }
if (Task.hasDueTime(selectedTime.toLong())) { if (Task.hasDueTime(selectedTime.toLong())) {

@ -0,0 +1,17 @@
package org.tasks.extensions
import java.text.NumberFormat
import java.text.ParseException
import java.util.*
fun Locale.formatNumber(number: Int): String {
return NumberFormat.getNumberInstance(this).format(number.toLong())
}
fun Locale.parseInteger(number: String?): Int? {
return try {
NumberFormat.getNumberInstance(this).parse(number).toInt()
} catch (e: ParseException) {
null
}
}

@ -7,7 +7,7 @@ import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterListItem import com.todoroo.astrid.api.FilterListItem
import com.todoroo.astrid.api.FilterListItem.NO_ORDER import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ActivityContext
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.activities.GoogleTaskListSettingsActivity import org.tasks.activities.GoogleTaskListSettingsActivity
@ -15,16 +15,10 @@ import org.tasks.activities.NavigationDrawerCustomization
import org.tasks.activities.TagSettingsActivity import org.tasks.activities.TagSettingsActivity
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.data.CaldavAccount import org.tasks.data.*
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.data.CaldavAccount.Companion.TYPE_LOCAL
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.CaldavDao
import org.tasks.data.FilterDao
import org.tasks.data.GoogleTaskAccount
import org.tasks.data.GoogleTaskListDao
import org.tasks.data.LocationDao
import org.tasks.data.TagDataDao
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType import org.tasks.filters.NavigationDrawerSubheader.SubheaderType
import org.tasks.location.LocationPickerActivity import org.tasks.location.LocationPickerActivity
import org.tasks.preferences.HelpAndFeedback import org.tasks.preferences.HelpAndFeedback
@ -34,7 +28,7 @@ import org.tasks.ui.NavigationDrawerFragment
import javax.inject.Inject import javax.inject.Inject
class FilterProvider @Inject constructor( class FilterProvider @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ActivityContext private val context: Context,
private val inventory: Inventory, private val inventory: Inventory,
private val builtInFilterExposer: BuiltInFilterExposer, private val builtInFilterExposer: BuiltInFilterExposer,
private val filterDao: FilterDao, private val filterDao: FilterDao,

@ -17,8 +17,8 @@ import org.tasks.billing.BillingClientImpl
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.data.* import org.tasks.data.*
import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManager
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationDao import org.tasks.notifications.NotificationDao
import java.util.*
import javax.inject.Singleton import javax.inject.Singleton
@Module @Module
@ -26,11 +26,7 @@ import javax.inject.Singleton
class ApplicationModule { class ApplicationModule {
@Provides @Provides
fun getLocale(@ApplicationContext context: Context): Locale = Locale.getInstance(context) fun getLocale(): Locale = Locale.getDefault()
@Provides
@Singleton
fun getJavaLocale(locale: Locale): java.util.Locale = locale.locale
@Provides @Provides
@Singleton @Singleton

@ -2,15 +2,10 @@ package org.tasks.injection
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import org.tasks.locale.Locale
abstract class InjectingAppCompatActivity protected constructor() : AppCompatActivity() { abstract class InjectingAppCompatActivity protected constructor() : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
title = "" title = ""
} }
init {
Locale.getInstance(this).applyOverrideConfiguration(this)
}
} }

@ -2,7 +2,6 @@ package org.tasks.injection
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import org.tasks.locale.Locale
import org.tasks.themes.Theme import org.tasks.themes.Theme
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import javax.inject.Inject import javax.inject.Inject
@ -16,8 +15,4 @@ abstract class ThemedInjectingAppCompatActivity protected constructor() : AppCom
tasksTheme.applyThemeAndStatusBarColor(this) tasksTheme.applyThemeAndStatusBarColor(this)
title = null title = null
} }
init {
Locale.getInstance(this).applyOverrideConfiguration(this)
}
} }

@ -1,208 +0,0 @@
package org.tasks.locale;
import static org.tasks.Strings.isNullOrEmpty;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.text.TextUtils;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.view.ViewParent;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceManager;
import java.io.Serializable;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Objects;
import org.tasks.R;
public class Locale implements Serializable {
private static final Locale DEFAULT = new Locale(java.util.Locale.getDefault(), null);
private static final int[] sDialogButtons =
new int[] {android.R.id.button1, android.R.id.button2, android.R.id.button3};
private static final char LEFT_TO_RIGHT_MARK = '\u200e';
private static final char RIGHT_TO_LEFT_MARK = '\u200f';
private static Locale INSTANCE;
private final java.util.Locale deviceLocale;
private final java.util.Locale appLocale;
private final int appDirectionality;
private final char appDirectionalityMark;
private final String languageOverride;
private final boolean hasUserOverrides;
public Locale(java.util.Locale deviceLocale, String languageOverride) {
this.deviceLocale = deviceLocale;
this.languageOverride = languageOverride;
java.util.Locale override = localeFromString(languageOverride);
if (override != null) {
appLocale = override;
} else {
appLocale = deviceLocale;
}
appDirectionality = TextUtils.getLayoutDirectionFromLocale(appLocale);
appDirectionalityMark =
appDirectionality == View.LAYOUT_DIRECTION_RTL ? RIGHT_TO_LEFT_MARK : LEFT_TO_RIGHT_MARK;
int deviceDirectionality = TextUtils.getLayoutDirectionFromLocale(deviceLocale);
hasUserOverrides =
!(deviceLocale.equals(appLocale) && appDirectionality == deviceDirectionality);
}
public static Locale getInstance(Context context) {
if (INSTANCE == null) {
synchronized (DEFAULT) {
if (INSTANCE == null) {
Context applicationContext = context.getApplicationContext();
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(applicationContext);
String language =
prefs.getString(applicationContext.getString(R.string.p_language), null);
INSTANCE = new Locale(DEFAULT.getLocale(), language);
java.util.Locale.setDefault(INSTANCE.getLocale());
}
}
}
return getInstance();
}
public static Locale getInstance() {
return INSTANCE == null ? DEFAULT : INSTANCE;
}
private static java.util.Locale localeFromString(String locale) {
if (isNullOrEmpty(locale)) {
return null;
}
String[] split = locale.split("-");
if (split.length == 1) {
return new java.util.Locale(split[0]);
} else if (split.length == 2) {
return new java.util.Locale(split[0], split[1]);
}
throw new RuntimeException();
}
public java.util.Locale getLocale() {
return appLocale;
}
public java.util.Locale getDeviceLocale() {
return deviceLocale;
}
public char getDirectionalityMark() {
return appDirectionalityMark;
}
public int getDirectionality() {
return appDirectionality;
}
public @Nullable String getLanguageOverride() {
return languageOverride;
}
public Context createConfigurationContext(Context context) {
return hasUserOverrides
? context.createConfigurationContext(getLocaleConfiguration())
: context;
}
private Configuration getLocaleConfiguration() {
Configuration configuration = new Configuration();
configuration.locale = getLocale();
final int layoutDirection = 1 + appDirectionality;
configuration.screenLayout =
(configuration.screenLayout & ~Configuration.SCREENLAYOUT_LAYOUTDIR_MASK)
| (layoutDirection << Configuration.SCREENLAYOUT_LAYOUTDIR_SHIFT);
return configuration;
}
public void applyOverrideConfiguration(ContextThemeWrapper wrapper) {
if (hasUserOverrides) {
wrapper.applyOverrideConfiguration(getLocaleConfiguration());
}
}
public Locale withLanguage(String language) {
return new Locale(deviceLocale, language);
}
public String getDisplayName() {
java.util.Locale locale = getLocale();
return locale.getDisplayName(locale);
}
public String formatNumber(int number) {
return NumberFormat.getNumberInstance(appLocale).format(number);
}
public String formatNumber(double number) {
return NumberFormat.getNumberInstance(appLocale).format(number);
}
public Integer parseInteger(String number) {
try {
return NumberFormat.getNumberInstance(appLocale).parse(number).intValue();
} catch (ParseException e) {
return null;
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Locale)) {
return false;
}
Locale locale = (Locale) o;
return appDirectionality == locale.appDirectionality
&& appDirectionalityMark == locale.appDirectionalityMark
&& hasUserOverrides == locale.hasUserOverrides
&& Objects.equals(deviceLocale, locale.deviceLocale)
&& Objects.equals(appLocale, locale.appLocale)
&& Objects.equals(languageOverride, locale.languageOverride);
}
@Override
public int hashCode() {
return Objects
.hash(deviceLocale, appLocale, appDirectionality, appDirectionalityMark, languageOverride,
hasUserOverrides);
}
@Override
public String toString() {
return "Locale{"
+ "deviceLocale="
+ deviceLocale
+ ", appLocale="
+ appLocale
+ ", appDirectionality="
+ appDirectionality
+ ", languageOverride='"
+ languageOverride
+ '\''
+ ", hasUserOverrides="
+ hasUserOverrides
+ '}';
}
public void applyDirectionality(Dialog dialog) {
if (hasUserOverrides) {
dialog.findViewById(android.R.id.content).setLayoutDirection(appDirectionality);
for (int id : sDialogButtons) {
ViewParent parent = dialog.findViewById(id).getParent();
((View) parent).setLayoutDirection(appDirectionality);
}
}
}
}

@ -4,32 +4,45 @@ import android.app.Activity
import android.app.Dialog import android.app.Dialog
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import java.util.* import org.xmlpull.v1.XmlPullParser
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class LocalePickerDialog : DialogFragment() { class LocalePickerDialog : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var locale: Locale
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val locales = ArrayList<Locale>()
locales.add(locale.withLanguage(null)) // device locale val locales = ArrayList<java.util.Locale>()
for (override in resources.getStringArray(R.array.localization)) { val selected =
locales.add(locale.withLanguage(override)) AppCompatDelegate.getApplicationLocales().let { java.util.Locale.forLanguageTag(it.toLanguageTags()) }
val default = java.util.Locale.getDefault()
locales.add(default) // device locale
val tags = ArrayList<String>()
val xrp = resources.getXml(R.xml.locales_config)
var event = xrp.eventType
while (event != XmlPullParser.END_DOCUMENT) {
if (event == XmlPullParser.START_TAG && xrp.name == "locale") {
tags.add(xrp.getAttributeValue(0))
}
event = xrp.next()
}
for (override in tags) {
locales.add(java.util.Locale.forLanguageTag(override))
} }
val display = locales.map(Locale::getDisplayName) val display = locales.map { it.getDisplayName(it) }
return dialogBuilder return dialogBuilder
.newDialog() .newDialog()
.setSingleChoiceItems(display, display.indexOf(locale.displayName)) { dialog, which -> .setSingleChoiceItems(display, display.indexOf(selected.getDisplayName(selected))) { dialog, which ->
val locale = locales[which] val locale = locales[which].toLanguageTag()
val data = Intent().putExtra(EXTRA_LOCALE, locale) val data = Intent().putExtra(EXTRA_LOCALE, locale)
targetFragment!!.onActivityResult(targetRequestCode, Activity.RESULT_OK, data)
dialog.dismiss() dialog.dismiss()
targetFragment!!.onActivityResult(targetRequestCode, Activity.RESULT_OK, data)
} }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.show() .show()

@ -1,11 +1,8 @@
package org.tasks.preferences package org.tasks.preferences
import android.content.Context import android.content.Context
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.*
import com.todoroo.astrid.api.CustomFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.TagFilter
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.core.BuiltInFilterExposer.Companion.getMyTasksFilter import com.todoroo.astrid.core.BuiltInFilterExposer.Companion.getMyTasksFilter
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
@ -13,19 +10,13 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.CaldavDao import org.tasks.data.*
import org.tasks.data.CaldavTask
import org.tasks.data.FilterDao
import org.tasks.data.GoogleTask
import org.tasks.data.GoogleTaskDao
import org.tasks.data.GoogleTaskListDao
import org.tasks.data.LocationDao
import org.tasks.data.TagDataDao
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class DefaultFilterProvider @Inject constructor( class DefaultFilterProvider @Inject constructor(
// TODO: don't inject context, it breaks built-in filters when overriding language
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val preferences: Preferences, private val preferences: Preferences,
private val filterDao: FilterDao, private val filterDao: FilterDao,

@ -8,23 +8,25 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.os.Build; import android.os.Build;
import android.speech.RecognizerIntent; import android.speech.RecognizerIntent;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import dagger.hilt.android.qualifiers.ApplicationContext;
import org.tasks.BuildConfig;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.BuildConfig;
import org.tasks.locale.Locale; import dagger.hilt.android.qualifiers.ApplicationContext;
import timber.log.Timber; import timber.log.Timber;
public class Device { public class Device {
private final Context context; private final Context context;
private final Locale locale;
@Inject @Inject
public Device(@ApplicationContext Context context, Locale locale) { public Device(@ApplicationContext Context context) {
this.context = context; this.context = context;
this.locale = locale;
} }
public boolean hasCamera() { public boolean hasCamera() {
@ -44,8 +46,6 @@ public class Device {
public String getDebugInfo() { public String getDebugInfo() {
try { try {
java.util.Locale appLocale = locale.getLocale();
java.util.Locale deviceLocale = locale.getDeviceLocale();
return Joiner.on("\n") return Joiner.on("\n")
.join( .join(
asList( asList(
@ -59,9 +59,7 @@ public class Device {
+ BuildConfig.VERSION_CODE + BuildConfig.VERSION_CODE
+ ")", + ")",
"Android: " + Build.VERSION.RELEASE + " (" + Build.DISPLAY + ")", "Android: " + Build.VERSION.RELEASE + " (" + Build.DISPLAY + ")",
"Locale: " "Locale: " + java.util.Locale.getDefault(),
+ deviceLocale
+ (!deviceLocale.equals(appLocale) ? " (" + appLocale + ")" : ""),
"Model: " + Build.MANUFACTURER + " " + Build.MODEL, "Model: " + Build.MANUFACTURER + " " + Build.MODEL,
"Product: " + Build.PRODUCT + " (" + Build.DEVICE + ")", "Product: " + Build.PRODUCT + " (" + Build.DEVICE + ")",
"Kernel: " "Kernel: "

@ -10,12 +10,12 @@ import org.tasks.R
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.time.DateTime import org.tasks.time.DateTime
import org.tasks.ui.TimePreference import org.tasks.ui.TimePreference
import java.time.DayOfWeek import java.time.DayOfWeek
import java.time.format.TextStyle import java.time.format.TextStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
private const val REQUEST_MORNING = 10007 private const val REQUEST_MORNING = 10007
@ -134,7 +134,7 @@ class DateAndTime : InjectingPreferenceFragment(), Preference.OnPreferenceChange
findPreference(R.string.p_start_of_week) as ListPreference findPreference(R.string.p_start_of_week) as ListPreference
private fun getWeekdayDisplayName(dayOfWeek: DayOfWeek): String = private fun getWeekdayDisplayName(dayOfWeek: DayOfWeek): String =
dayOfWeek.getDisplayName(TextStyle.FULL, locale.locale) dayOfWeek.getDisplayName(TextStyle.FULL, locale)
private fun getMorningPreference(): TimePreference = private fun getMorningPreference(): TimePreference =
getTimePreference(R.string.p_date_shortcut_morning) getTimePreference(R.string.p_date_shortcut_morning)

@ -8,6 +8,8 @@ import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference import androidx.preference.Preference
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
@ -15,7 +17,6 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.activities.FilterSelectionActivity import org.tasks.activities.FilterSelectionActivity
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
@ -26,7 +27,6 @@ import org.tasks.dialogs.ColorWheelPicker
import org.tasks.dialogs.ThemePickerDialog import org.tasks.dialogs.ThemePickerDialog
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.Locale
import org.tasks.locale.LocalePickerDialog import org.tasks.locale.LocalePickerDialog
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -37,8 +37,10 @@ import org.tasks.themes.ThemeBase.EXTRA_THEME_OVERRIDE
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import org.tasks.themes.ThemeColor.getLauncherColor import org.tasks.themes.ThemeColor.getLauncherColor
import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE
import java.util.*
import javax.inject.Inject import javax.inject.Inject
private const val REQUEST_THEME_PICKER = 10001 private const val REQUEST_THEME_PICKER = 10001
private const val REQUEST_COLOR_PICKER = 10002 private const val REQUEST_COLOR_PICKER = 10002
private const val REQUEST_ACCENT_PICKER = 10003 private const val REQUEST_ACCENT_PICKER = 10003
@ -57,7 +59,6 @@ class LookAndFeel : InjectingPreferenceFragment() {
@Inject lateinit var themeAccent: ThemeAccent @Inject lateinit var themeAccent: ThemeAccent
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var locale: Locale
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var inventory: Inventory @Inject lateinit var inventory: Inventory
@ -97,7 +98,9 @@ class LookAndFeel : InjectingPreferenceFragment() {
} }
val languagePreference = findPreference(R.string.p_language) val languagePreference = findPreference(R.string.p_language)
updateLocale() val locale =
Locale.forLanguageTag(AppCompatDelegate.getApplicationLocales().toLanguageTags())
languagePreference.summary = locale.getDisplayName(locale)
languagePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { languagePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val dialog = LocalePickerDialog.newLocalePickerDialog() val dialog = LocalePickerDialog.newLocalePickerDialog()
dialog.setTargetFragment(this, REQUEST_LOCALE) dialog.setTargetFragment(this, REQUEST_LOCALE)
@ -213,18 +216,10 @@ class LookAndFeel : InjectingPreferenceFragment() {
} }
REQUEST_LOCALE -> { REQUEST_LOCALE -> {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
val newValue: Locale = val languageTag = data!!.getStringExtra(LocalePickerDialog.EXTRA_LOCALE)
data!!.getSerializableExtra(LocalePickerDialog.EXTRA_LOCALE) as Locale AppCompatDelegate.setApplicationLocales(
val override: String? = newValue.languageOverride LocaleListCompat.forLanguageTags(languageTag)
if (isNullOrEmpty(override)) { )
preferences.remove(R.string.p_language)
} else {
preferences.setString(R.string.p_language, override)
}
updateLocale()
if (locale != newValue) {
showRestartDialog()
}
} }
} }
else -> { else -> {
@ -233,12 +228,6 @@ class LookAndFeel : InjectingPreferenceFragment() {
} }
} }
private fun updateLocale() {
val languagePreference = findPreference(R.string.p_language)
val preference = preferences.getStringValue(R.string.p_language)
languagePreference.summary = locale.withLanguage(preference).displayName
}
private fun setLauncherIcon(index: Int) { private fun setLauncherIcon(index: Int) {
val packageManager: PackageManager? = context?.packageManager val packageManager: PackageManager? = context?.packageManager
for (i in ThemeColor.LAUNCHERS.indices) { for (i in ThemeColor.LAUNCHERS.indices) {

@ -20,7 +20,6 @@ import org.tasks.dialogs.ColorWheelPicker
import org.tasks.dialogs.SortDialog.newSortDialog import org.tasks.dialogs.SortDialog.newSortDialog
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.Locale
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.widget.WidgetPreferences import org.tasks.widget.WidgetPreferences
@ -51,7 +50,6 @@ class ScrollableWidget : InjectingPreferenceFragment() {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var locale: Locale
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
private lateinit var widgetPreferences: WidgetPreferences private lateinit var widgetPreferences: WidgetPreferences

@ -29,10 +29,10 @@ import org.tasks.data.CaldavDao
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManager
import org.tasks.locale.Locale
import org.tasks.preferences.IconPreference import org.tasks.preferences.IconPreference
import org.tasks.preferences.fragments.MainSettingsFragment.Companion.REQUEST_TASKS_ORG import org.tasks.preferences.fragments.MainSettingsFragment.Companion.REQUEST_TASKS_ORG
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -255,7 +255,7 @@ class TasksAccount : BaseAccountPreference() {
DateUtilities.getRelativeDay( DateUtilities.getRelativeDay(
requireContext(), requireContext(),
date, date,
locale.locale, locale,
FormatStyle.FULL, FormatStyle.FULL,
false, false,
true true

@ -6,7 +6,7 @@ import com.todoroo.andlib.utility.DateUtilities
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R import org.tasks.R
import org.tasks.data.Alarm import org.tasks.data.Alarm
import org.tasks.locale.Locale import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.absoluteValue import kotlin.math.absoluteValue
@ -46,10 +46,10 @@ class AlarmToString @Inject constructor(
Alarm.TYPE_SNOOZE -> Alarm.TYPE_SNOOZE ->
resources.getString( resources.getString(
R.string.snoozed_until, R.string.snoozed_until,
DateUtilities.getLongDateStringWithTime(alarm.time, locale.locale) DateUtilities.getLongDateStringWithTime(alarm.time, locale)
) )
else -> else ->
DateUtilities.getLongDateStringWithTime(alarm.time, locale.locale) DateUtilities.getLongDateStringWithTime(alarm.time, locale)
} }
return if (alarm.repeat > 0) { return if (alarm.repeat > 0) {
reminder + "\n" + resources.getRepeatString(alarm.repeat, alarm.interval) reminder + "\n" + resources.getRepeatString(alarm.repeat, alarm.interval)

@ -57,7 +57,7 @@ import org.tasks.databinding.ControlSetRepeatBinding;
import org.tasks.databinding.WeekButtonsBinding; import org.tasks.databinding.WeekButtonsBinding;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.tasks.dialogs.MyDatePickerDialog; import org.tasks.dialogs.MyDatePickerDialog;
import org.tasks.locale.Locale; import org.tasks.extensions.LocaleKt;
import org.tasks.preferences.ResourceResolver; import org.tasks.preferences.ResourceResolver;
import org.tasks.time.DateTime; import org.tasks.time.DateTime;
import org.tasks.ui.OnItemSelected; import org.tasks.ui.OnItemSelected;
@ -68,6 +68,7 @@ import java.time.format.FormatStyle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Locale;
import javax.inject.Inject; import javax.inject.Inject;
@ -142,7 +143,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
rrule.setFrequency(WEEKLY.name()); rrule.setFrequency(WEEKLY.name());
} }
DateFormatSymbols dfs = new DateFormatSymbols(locale.getLocale()); DateFormatSymbols dfs = new DateFormatSymbols(locale);
String[] shortWeekdays = dfs.getShortWeekdays(); String[] shortWeekdays = dfs.getShortWeekdays();
weekGroup1 = weekBinding.weekGroup; weekGroup1 = weekBinding.weekGroup;
@ -185,7 +186,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
} }
}); });
Calendar dayOfMonthCalendar = Calendar.getInstance(locale.getLocale()); Calendar dayOfMonthCalendar = Calendar.getInstance(locale);
dayOfMonthCalendar.setTimeInMillis(dueDate); dayOfMonthCalendar.setTimeInMillis(dueDate);
int dayOfWeekInMonth = dayOfMonthCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); int dayOfWeekInMonth = dayOfMonthCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
int maxDayOfWeekInMonth = dayOfMonthCalendar.getActualMaximum(Calendar.DAY_OF_WEEK_IN_MONTH); int maxDayOfWeekInMonth = dayOfMonthCalendar.getActualMaximum(Calendar.DAY_OF_WEEK_IN_MONTH);
@ -242,7 +243,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
frequency.setAdapter(frequencyAdapter); frequency.setAdapter(frequencyAdapter);
frequency.setSelection(FREQUENCIES.indexOf(rrule.getFrequency())); frequency.setSelection(FREQUENCIES.indexOf(rrule.getFrequency()));
intervalEditText.setText(locale.formatNumber(rrule.getInterval())); intervalEditText.setText(LocaleKt.formatNumber(locale, rrule.getInterval()));
repeatUntilAdapter = repeatUntilAdapter =
new ArrayAdapter<String>(context, 0, repeatUntilOptions) { new ArrayAdapter<String>(context, 0, repeatUntilOptions) {
@ -284,7 +285,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
}; };
// set up days of week // set up days of week
Calendar dayOfWeekCalendar = Calendar.getInstance(locale.getLocale()); Calendar dayOfWeekCalendar = Calendar.getInstance(locale);
dayOfWeekCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeekCalendar.getFirstDayOfWeek()); dayOfWeekCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeekCalendar.getFirstDayOfWeek());
WeekDay todayWeekday = new WeekDay(new DateTime(dueDate).getWeekDay(), 0); WeekDay todayWeekday = new WeekDay(new DateTime(dueDate).getWeekDay(), 0);
@ -413,7 +414,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
private void setInterval(int interval, boolean updateEditText) { private void setInterval(int interval, boolean updateEditText) {
rrule.setInterval(interval); rrule.setInterval(interval);
if (updateEditText) { if (updateEditText) {
intervalEditText.setText(locale.formatNumber(interval)); intervalEditText.setText(LocaleKt.formatNumber(locale, interval));
} }
updateIntervalTextView(); updateIntervalTextView();
} }
@ -427,7 +428,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
private void setCount(int count, boolean updateEditText) { private void setCount(int count, boolean updateEditText) {
rrule.setCount(count); rrule.setCount(count);
if (updateEditText) { if (updateEditText) {
intervalEditText.setText(locale.formatNumber(count)); intervalEditText.setText(LocaleKt.formatNumber(locale, count));
} }
updateCountText(); updateCountText();
} }
@ -486,7 +487,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
} }
private void onRepeatValueChanged(CharSequence text) { private void onRepeatValueChanged(CharSequence text) {
Integer value = locale.parseInteger(text.toString()); Integer value = LocaleKt.parseInteger(locale, text.toString());
if (value == null) { if (value == null) {
return; return;
} }
@ -498,7 +499,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
} }
private void onRepeatTimesValueChanged(CharSequence text) { private void onRepeatTimesValueChanged(CharSequence text) {
Integer value = locale.parseInteger(text.toString()); Integer value = LocaleKt.parseInteger(locale, text.toString());
if (value == null) { if (value == null) {
return; return;
} }
@ -526,12 +527,12 @@ public class CustomRecurrenceDialog extends DialogFragment {
getString( getString(
R.string.repeat_until, R.string.repeat_until,
DateUtilities.getRelativeDateTime( DateUtilities.getRelativeDateTime(
context, repeatUntil, locale.getLocale(), FormatStyle.MEDIUM, true))); context, repeatUntil, locale, FormatStyle.MEDIUM, true)));
repeatTimes.setVisibility(View.GONE); repeatTimes.setVisibility(View.GONE);
repeatTimesText.setVisibility(View.GONE); repeatTimesText.setVisibility(View.GONE);
} else if (count > 0) { } else if (count > 0) {
repeatUntilOptions.add(getString(R.string.repeat_occurs)); repeatUntilOptions.add(getString(R.string.repeat_occurs));
repeatTimes.setText(locale.formatNumber(count)); repeatTimes.setText(LocaleKt.formatNumber(locale, count));
repeatTimes.setVisibility(View.VISIBLE); repeatTimes.setVisibility(View.VISIBLE);
updateCountText(); updateCountText();
repeatTimesText.setVisibility(View.VISIBLE); repeatTimesText.setVisibility(View.VISIBLE);

@ -10,7 +10,6 @@ import net.fortuna.ical4j.model.WeekDay.Day
import net.fortuna.ical4j.model.WeekDay.Day.* import net.fortuna.ical4j.model.WeekDay.Day.*
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.locale.Locale
import org.tasks.repeats.RecurrenceUtils.newRecur import org.tasks.repeats.RecurrenceUtils.newRecur
import org.tasks.time.DateTime import org.tasks.time.DateTime
import java.text.DateFormatSymbols import java.text.DateFormatSymbols
@ -50,7 +49,7 @@ class RepeatRuleToString @Inject constructor(
R.string.repeats_single_on_until, R.string.repeats_single_on_until,
frequencyString, frequencyString,
dayString, dayString,
DateUtilities.getLongDateString(repeatUntil, locale.locale) DateUtilities.getLongDateString(repeatUntil, locale)
) )
} }
} else if (count > 0) { } else if (count > 0) {
@ -62,7 +61,7 @@ class RepeatRuleToString @Inject constructor(
context.getString( context.getString(
R.string.repeats_single_until, R.string.repeats_single_until,
frequencyString, frequencyString,
DateUtilities.getLongDateString(repeatUntil, locale.locale)) DateUtilities.getLongDateString(repeatUntil, locale))
} }
} else { } else {
val plural = getFrequencyPlural(frequency) val plural = getFrequencyPlural(frequency)
@ -83,7 +82,7 @@ class RepeatRuleToString @Inject constructor(
R.string.repeats_plural_on_until, R.string.repeats_plural_on_until,
frequencyPlural, frequencyPlural,
dayString, dayString,
DateUtilities.getLongDateString(repeatUntil, locale.locale) DateUtilities.getLongDateString(repeatUntil, locale)
) )
} }
} else if (count > 0) { } else if (count > 0) {
@ -95,7 +94,7 @@ class RepeatRuleToString @Inject constructor(
context.getString( context.getString(
R.string.repeats_plural_until, R.string.repeats_plural_until,
frequencyPlural, frequencyPlural,
DateUtilities.getLongDateString(repeatUntil, locale.locale)) DateUtilities.getLongDateString(repeatUntil, locale))
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
@ -104,7 +103,7 @@ class RepeatRuleToString @Inject constructor(
} }
private fun getDayString(rrule: Recur): String { private fun getDayString(rrule: Recur): String {
val dfs = DateFormatSymbols(locale.locale) val dfs = DateFormatSymbols(locale)
return if (rrule.frequency == WEEKLY) { return if (rrule.frequency == WEEKLY) {
val shortWeekdays = dfs.shortWeekdays val shortWeekdays = dfs.shortWeekdays
val days: MutableList<String?> = ArrayList() val days: MutableList<String?> = ArrayList()
@ -116,7 +115,7 @@ class RepeatRuleToString @Inject constructor(
val longWeekdays = dfs.weekdays val longWeekdays = dfs.weekdays
val weekdayNum = rrule.dayList[0] val weekdayNum = rrule.dayList[0]
val weekday: String val weekday: String
val dayOfWeekCalendar = Calendar.getInstance(locale.locale) val dayOfWeekCalendar = Calendar.getInstance(locale)
dayOfWeekCalendar[Calendar.DAY_OF_WEEK] = weekdayToCalendarDay(weekdayNum.day) dayOfWeekCalendar[Calendar.DAY_OF_WEEK] = weekdayToCalendarDay(weekdayNum.day)
weekday = longWeekdays[dayOfWeekCalendar[Calendar.DAY_OF_WEEK]] weekday = longWeekdays[dayOfWeekCalendar[Calendar.DAY_OF_WEEK]]
if (weekdayNum.offset == -1) { if (weekdayNum.offset == -1) {

@ -1,8 +1,16 @@
package org.tasks.time; package org.tasks.time;
import net.fortuna.ical4j.model.WeekDay; import static com.todoroo.astrid.core.SortHelper.APPLE_EPOCH;
import static org.tasks.time.DateTimeUtils.currentTimeMillis;
import static java.util.Calendar.FRIDAY;
import static java.util.Calendar.MONDAY;
import static java.util.Calendar.SATURDAY;
import static java.util.Calendar.SUNDAY;
import static java.util.Calendar.THURSDAY;
import static java.util.Calendar.TUESDAY;
import static java.util.Calendar.WEDNESDAY;
import org.tasks.locale.Locale; import net.fortuna.ical4j.model.WeekDay;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
@ -10,20 +18,11 @@ import java.time.LocalDateTime;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static com.todoroo.astrid.core.SortHelper.APPLE_EPOCH;
import static java.util.Calendar.FRIDAY;
import static java.util.Calendar.MONDAY;
import static java.util.Calendar.SATURDAY;
import static java.util.Calendar.SUNDAY;
import static java.util.Calendar.THURSDAY;
import static java.util.Calendar.TUESDAY;
import static java.util.Calendar.WEDNESDAY;
import static org.tasks.time.DateTimeUtils.currentTimeMillis;
public class DateTime { public class DateTime {
public static final int MAX_MILLIS_PER_DAY = (int) TimeUnit.DAYS.toMillis(1) - 1; public static final int MAX_MILLIS_PER_DAY = (int) TimeUnit.DAYS.toMillis(1) - 1;
@ -432,7 +431,7 @@ public class DateTime {
public String toString(String format) { public String toString(String format) {
Calendar calendar = getCalendar(); Calendar calendar = getCalendar();
SimpleDateFormat simpleDateFormat = SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(format, Locale.getInstance().getLocale()); new SimpleDateFormat(format, Locale.getDefault());
simpleDateFormat.setCalendar(calendar); simpleDateFormat.setCalendar(calendar);
return simpleDateFormat.format(calendar.getTime()); return simpleDateFormat.format(calendar.getTime());
} }

@ -30,8 +30,8 @@ import org.tasks.billing.Inventory
import org.tasks.data.TagData import org.tasks.data.TagData
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.extensions.formatNumber
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
@ -39,6 +39,7 @@ import org.tasks.themes.CustomIcons.getIconResId
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
class ChipProvider @Inject constructor( class ChipProvider @Inject constructor(
@ -72,7 +73,7 @@ class ChipProvider @Inject constructor(
DateUtilities.getRelativeDateTime( DateUtilities.getRelativeDateTime(
activity, activity,
task.startDate, task.startDate,
locale.locale, locale,
if (compact) FormatStyle.SHORT else FormatStyle.MEDIUM, if (compact) FormatStyle.SHORT else FormatStyle.MEDIUM,
false, false,
false false

@ -13,9 +13,9 @@ import org.tasks.databinding.ControlSetDeadlineBinding
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.dialogs.DateTimePicker import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -81,7 +81,7 @@ class DeadlineControlSet : TaskEditControlFragment() {
dueDate.text = DateUtilities.getRelativeDateTime( dueDate.text = DateUtilities.getRelativeDateTime(
activity, activity,
date, date,
locale.locale, locale,
FormatStyle.FULL, FormatStyle.FULL,
preferences.alwaysDisplayFullDate, preferences.alwaysDisplayFullDate,
false false

@ -44,7 +44,6 @@ import org.tasks.data.TaskContainer
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.databinding.ControlSetSubtasksBinding import org.tasks.databinding.ControlSetSubtasksBinding
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.locale.Locale
import org.tasks.tasklist.SubtaskViewHolder import org.tasks.tasklist.SubtaskViewHolder
import org.tasks.tasklist.SubtasksRecyclerAdapter import org.tasks.tasklist.SubtasksRecyclerAdapter
import javax.inject.Inject import javax.inject.Inject
@ -61,7 +60,6 @@ class SubtaskControlSet : TaskEditControlFragment(), SubtaskViewHolder.Callbacks
@Inject lateinit var taskCreator: TaskCreator @Inject lateinit var taskCreator: TaskCreator
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@Inject lateinit var locale: Locale
@Inject lateinit var checkBoxProvider: CheckBoxProvider @Inject lateinit var checkBoxProvider: CheckBoxProvider
@Inject lateinit var chipProvider: ChipProvider @Inject lateinit var chipProvider: ChipProvider
@Inject lateinit var eventBus: MainActivityEventBus @Inject lateinit var eventBus: MainActivityEventBus

@ -14,21 +14,18 @@ import org.tasks.R
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.ui.ChipListCache import org.tasks.ui.ChipListCache
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject import javax.inject.Inject
class ChipProvider @Inject constructor( class ChipProvider @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val chipListCache: ChipListCache, private val chipListCache: ChipListCache,
private val locale: Locale, private val locale: Locale,
private val preferences: Preferences,
) { ) {
var isDark = false var isDark = false
fun getSubtaskChip(task: TaskContainer): RemoteViews { fun getSubtaskChip(task: TaskContainer): RemoteViews {
@ -62,7 +59,7 @@ class ChipProvider @Inject constructor(
DateUtilities.getRelativeDateTime( DateUtilities.getRelativeDateTime(
context, context,
task.startDate, task.startDate,
locale.locale, locale,
FormatStyle.MEDIUM, FormatStyle.MEDIUM,
showFullDate, showFullDate,
false false

@ -23,7 +23,6 @@ import org.tasks.data.TaskContainer
import org.tasks.data.TaskDao import org.tasks.data.TaskDao
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.locale.Locale
import org.tasks.markdown.Markdown import org.tasks.markdown.Markdown
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -33,20 +32,21 @@ import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.ui.CheckBoxProvider import org.tasks.ui.CheckBoxProvider
import timber.log.Timber import timber.log.Timber
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.*
import kotlin.math.max import kotlin.math.max
internal class ScrollableViewsFactory( internal class ScrollableViewsFactory(
private val subtasksHelper: SubtasksHelper, private val subtasksHelper: SubtasksHelper,
preferences: Preferences, preferences: Preferences,
private val context: Context, private val context: Context,
private val widgetId: Int, private val widgetId: Int,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val defaultFilterProvider: DefaultFilterProvider, private val defaultFilterProvider: DefaultFilterProvider,
private val checkBoxProvider: CheckBoxProvider, private val checkBoxProvider: CheckBoxProvider,
private val locale: Locale, private val locale: Locale,
private val chipProvider: ChipProvider, private val chipProvider: ChipProvider,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val markdown: Markdown private val markdown: Markdown
) : RemoteViewsFactory { ) : RemoteViewsFactory {
private val indentPadding: Int private val indentPadding: Int
private var showDueDates = false private var showDueDates = false
@ -70,7 +70,6 @@ internal class ScrollableViewsFactory(
private var showPlaces = false private var showPlaces = false
private var showLists = false private var showLists = false
private var showTags = false private var showTags = false
private var isRtl = false
private var collapsed = mutableSetOf(HEADER_COMPLETED) private var collapsed = mutableSetOf(HEADER_COMPLETED)
private var sortMode = -1 private var sortMode = -1
private var tasks = SectionedDataSource( private var tasks = SectionedDataSource(
@ -148,7 +147,7 @@ internal class ScrollableViewsFactory(
val header: String? = if (filter?.supportsSorting() == true) { val header: String? = if (filter?.supportsSorting() == true) {
section.headerString( section.headerString(
context, context,
locale.locale, locale,
sortMode, sortMode,
showFullDate, showFullDate,
FormatStyle.MEDIUM, FormatStyle.MEDIUM,
@ -284,9 +283,8 @@ internal class ScrollableViewsFactory(
.getTagChips(filter, taskContainer) .getTagChips(filter, taskContainer)
.forEach { row.addView(R.id.chips, it) } .forEach { row.addView(R.id.chips, it) }
} }
row.setInt(R.id.widget_row, "setLayoutDirection", locale.directionality)
val startPad = taskContainer.getIndent() * indentPadding val startPad = taskContainer.getIndent() * indentPadding
row.setViewPadding(R.id.widget_row, if (isRtl) 0 else startPad, 0, if (isRtl) startPad else 0, 0) row.setViewPadding(R.id.widget_row, startPad, 0, 0, 0)
return row return row
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e) Timber.e(e)
@ -309,7 +307,7 @@ internal class ScrollableViewsFactory(
row.setViewVisibility(if (endDueDate) R.id.widget_due_bottom else R.id.widget_due_end, View.GONE) row.setViewVisibility(if (endDueDate) R.id.widget_due_bottom else R.id.widget_due_end, View.GONE)
val hasDueDate = task.hasDueDate() val hasDueDate = task.hasDueDate()
val endPad = if (hasDueDate && endDueDate) 0 else hPad val endPad = if (hasDueDate && endDueDate) 0 else hPad
row.setViewPadding(R.id.widget_text, if (isRtl) endPad else 0, 0, if (isRtl) 0 else endPad, 0) row.setViewPadding(R.id.widget_text, 0, 0, endPad, 0)
if (hasDueDate) { if (hasDueDate) {
if (endDueDate) { if (endDueDate) {
row.setViewPadding(R.id.widget_due_end, hPad, vPad, hPad, vPad) row.setViewPadding(R.id.widget_due_end, hPad, vPad, hPad, vPad)
@ -324,7 +322,7 @@ internal class ScrollableViewsFactory(
} }
} else { } else {
DateUtilities.getRelativeDateTime( DateUtilities.getRelativeDateTime(
context, task.dueDate, locale.locale, FormatStyle.MEDIUM, showFullDate, false) context, task.dueDate, locale, FormatStyle.MEDIUM, showFullDate, false)
} }
row.setTextViewText(dueDateRes, text) row.setTextViewText(dueDateRes, text)
row.setTextColor( row.setTextColor(
@ -381,7 +379,6 @@ internal class ScrollableViewsFactory(
sortMode = it sortMode = it
} }
collapsed = widgetPreferences.collapsed collapsed = widgetPreferences.collapsed
isRtl = locale.directionality == View.LAYOUT_DIRECTION_RTL
compact = widgetPreferences.compact compact = widgetPreferences.compact
} }

@ -10,13 +10,14 @@ import com.todoroo.astrid.subtasks.SubtasksHelper;
import org.tasks.LocalBroadcastManager; import org.tasks.LocalBroadcastManager;
import org.tasks.data.TaskDao; import org.tasks.data.TaskDao;
import org.tasks.locale.Locale;
import org.tasks.markdown.MarkdownProvider; import org.tasks.markdown.MarkdownProvider;
import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.themes.ColorProvider; import org.tasks.themes.ColorProvider;
import org.tasks.ui.CheckBoxProvider; import org.tasks.ui.CheckBoxProvider;
import java.util.Locale;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint; import dagger.hilt.android.AndroidEntryPoint;
@ -52,7 +53,7 @@ public class ScrollableWidgetUpdateService extends RemoteViewsService {
} }
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
Context context = locale.createConfigurationContext(getApplicationContext()); Context context = getApplicationContext();
return new ScrollableViewsFactory( return new ScrollableViewsFactory(
subtasksHelper, subtasksHelper,
preferences, preferences,

@ -19,7 +19,6 @@ import kotlinx.coroutines.runBlocking
import org.tasks.R import org.tasks.R
import org.tasks.activities.FilterSelectionActivity import org.tasks.activities.FilterSelectionActivity
import org.tasks.intents.TaskIntents import org.tasks.intents.TaskIntents
import org.tasks.locale.Locale
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
@ -31,7 +30,6 @@ import javax.inject.Inject
class TasksWidget : AppWidgetProvider() { class TasksWidget : AppWidgetProvider() {
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var locale: Locale
@Inject @ApplicationContext lateinit var context: Context @Inject @ApplicationContext lateinit var context: Context
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
@ -64,7 +62,6 @@ class TasksWidget : AppWidgetProvider() {
val filterId = widgetPreferences.filterId val filterId = widgetPreferences.filterId
val color = ThemeColor(context, widgetPreferences.color) val color = ThemeColor(context, widgetPreferences.color)
val remoteViews = RemoteViews(context.packageName, R.layout.scrollable_widget) val remoteViews = RemoteViews(context.packageName, R.layout.scrollable_widget)
remoteViews.setInt(R.id.widget, "setLayoutDirection", locale.directionality)
if (widgetPreferences.showHeader()) { if (widgetPreferences.showHeader()) {
remoteViews.setViewVisibility(R.id.widget_header, View.VISIBLE) remoteViews.setViewVisibility(R.id.widget_header, View.VISIBLE)
remoteViews.setViewVisibility( remoteViews.setViewVisibility(

@ -29,61 +29,6 @@
<item>@string/theme_system_default</item> <item>@string/theme_system_default</item>
</string-array> </string-array>
<string-array name="localization">
<item>af-rZA</item>
<item>ar</item>
<item>bg-bg</item>
<item>bn-rBD</item>
<item>ca</item>
<item>cs</item>
<item>cv</item>
<item>da</item>
<item>de</item>
<item>el</item>
<item>en</item>
<item>eo</item>
<item>es</item>
<item>et</item>
<item>eu</item>
<item>fa</item>
<item>fi</item>
<item>fr</item>
<item>gl</item>
<item>hr</item>
<item>hu</item>
<item>hy</item>
<item>ia</item>
<item>id</item>
<item>it</item>
<item>iw</item>
<item>ja</item>
<item>kn</item>
<item>ko</item>
<item>krl</item>
<item>lt</item>
<item>ml</item>
<item>nb</item>
<item>nl</item>
<item>pl</item>
<item>pt</item>
<item>pt-br</item>
<item>ro</item>
<item>ru</item>
<item>si</item>
<item>sk</item>
<item>sl-si</item>
<item>sr</item>
<item>sv</item>
<item>ta</item>
<item>th</item>
<item>tl</item>
<item>tr</item>
<item>uk</item>
<item>ur</item>
<item>zh-cn</item>
<item>zh-tw</item>
</string-array>
<string-array name="EPr_default_urgency"> <string-array name="EPr_default_urgency">
<item>@string/no_due_date</item> <item>@string/no_due_date</item>
<item>@string/today</item> <item>@string/today</item>

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="af-rZA" />
<locale android:name="ar" />
<locale android:name="bg-bg" />
<locale android:name="bn-rBD" />
<locale android:name="ca" />
<locale android:name="cs" />
<locale android:name="cv" />
<locale android:name="da" />
<locale android:name="de" />
<locale android:name="el" />
<locale android:name="en" />
<locale android:name="eo" />
<locale android:name="es" />
<locale android:name="et" />
<locale android:name="eu" />
<locale android:name="fa" />
<locale android:name="fi" />
<locale android:name="fr" />
<locale android:name="gl" />
<locale android:name="hr" />
<locale android:name="hu" />
<locale android:name="hy" />
<locale android:name="ia" />
<locale android:name="id" />
<locale android:name="it" />
<locale android:name="iw" />
<locale android:name="ja" />
<locale android:name="kn" />
<locale android:name="ko" />
<locale android:name="krl" />
<locale android:name="lt" />
<locale android:name="ml" />
<locale android:name="nb" />
<locale android:name="nl" />
<locale android:name="pl" />
<locale android:name="pt" />
<locale android:name="pt-br" />
<locale android:name="ro" />
<locale android:name="ru" />
<locale android:name="si" />
<locale android:name="sk" />
<locale android:name="sl-si" />
<locale android:name="sr" />
<locale android:name="sv" />
<locale android:name="ta" />
<locale android:name="th" />
<locale android:name="tl" />
<locale android:name="tr" />
<locale android:name="uk" />
<locale android:name="ur" />
<locale android:name="zh-cn" />
<locale android:name="zh-tw" />
</locale-config>

@ -6,16 +6,16 @@
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.databinding:databinding-common:7.2.1 +| +--- androidx.databinding:databinding-common:7.2.1
+| +--- androidx.databinding:viewbinding:7.2.1 (*) +| +--- androidx.databinding:viewbinding:7.2.1 (*)
+| \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.4.1 +| \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.5.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.arch.core:core-common:2.1.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.arch.core:core-runtime:2.1.0 +| +--- androidx.arch.core:core-runtime:2.1.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.arch.core:core-common:2.1.0 +| | \--- androidx.arch.core:core-common:2.1.0 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01
+| +--- androidx.lifecycle:lifecycle-common:2.4.1 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| \--- androidx.lifecycle:lifecycle-common-java8:2.5.0-rc01 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.4.1 (c)
+| +--- androidx.arch.core:core-common:2.1.0 (*)
+| \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
++--- androidx.databinding:databinding-adapters:7.2.1 ++--- androidx.databinding:databinding-adapters:7.2.1
+| +--- androidx.databinding:databinding-runtime:7.2.1 (*) +| +--- androidx.databinding:databinding-runtime:7.2.1 (*)
+| \--- androidx.databinding:databinding-common:7.2.1 +| \--- androidx.databinding:databinding-common:7.2.1
@ -36,29 +36,31 @@
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0 -> 1.6.21 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0 -> 1.6.21
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0 -> 1.6.21 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0 -> 1.6.21 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.2.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.2.0 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.1 (*) +| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1
+| | +--- androidx.arch.core:core-common:2.1.0 (*) +| | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | +--- androidx.arch.core:core-runtime:2.1.0 (*) +| | +--- androidx.arch.core:core-runtime:2.1.0 (*)
+| | \--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 +| | \--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 -> 2.5.0-rc01
+| | +--- androidx.arch.core:core-common:2.1.0 (*) +| | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | +--- androidx.arch.core:core-runtime:2.1.0 (*) +| | +--- androidx.arch.core:core-runtime:2.1.0 (*)
+| | \--- androidx.lifecycle:lifecycle-common:2.4.1 (*) +| | \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.0 +| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.1
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.4.1 -> 2.5.0-rc01 (*)
+| | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 +| | +--- androidx.startup:startup-runtime:1.1.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.tracing:tracing:1.0.0 +| | | \--- androidx.tracing:tracing:1.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-service:2.2.0 +| +--- androidx.lifecycle:lifecycle-service:2.2.0
+| | \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.4.1 (*) +| | \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.5.0-rc01
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.0-rc01 (c)
+| +--- androidx.databinding:databinding-runtime:7.2.1 (*) +| +--- androidx.databinding:databinding-runtime:7.2.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 -> 1.6.21 (*)
++--- com.github.tasks:dav4jvm:deb2c9aef8 ++--- com.github.tasks:dav4jvm:deb2c9aef8
@ -76,149 +78,155 @@
+| +--- commons-io:commons-io:2.6 +| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14:1.7.30 +| +--- org.slf4j:slf4j-jdk14:1.7.30
+| | \--- org.slf4j:slf4j-api:1.7.30 +| | \--- org.slf4j:slf4j-api:1.7.30
+| \--- androidx.core:core-ktx:1.3.2 -> 1.8.0-rc02 +| \--- androidx.core:core-ktx:1.3.2 -> 1.9.0-alpha05
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.core:core:1.8.0-rc02 +| +--- androidx.core:core:1.9.0-alpha05
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | +--- androidx.annotation:annotation-experimental:1.1.0 +| | +--- androidx.annotation:annotation-experimental:1.1.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.concurrent:concurrent-futures:1.0.0 +| | +--- androidx.concurrent:concurrent-futures:1.0.0
+| | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.5.0-rc01 (*)
+| | \--- androidx.versionedparcelable:versionedparcelable:1.1.1 +| | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| | \--- androidx.core:core-ktx:1.9.0-alpha05 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| \--- androidx.core:core:1.9.0-alpha05 (c)
++--- com.github.bitfireAT:cert4android:7814052 ++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 7.2.1 +| +--- androidx.databinding:databinding-common:7.2.0 -> 7.2.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 7.2.1 (*) +| +--- androidx.databinding:databinding-runtime:7.2.0 -> 7.2.1 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 7.2.1 (*) +| +--- androidx.databinding:databinding-adapters:7.2.0 -> 7.2.1 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 7.2.1 (*) +| +--- androidx.databinding:databinding-ktx:7.2.0 -> 7.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 +| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05
+| | +--- androidx.annotation:annotation:1.3.0 +| | +--- androidx.activity:activity:1.6.0-alpha05
+| | +--- androidx.core:core:1.7.0 -> 1.8.0-rc02 (*)
+| | +--- androidx.cursoradapter:cursoradapter:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.activity:activity:1.2.4 -> 1.4.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.7.0 -> 1.8.0-rc02 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.4.0 -> 2.4.1 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.4.1 (*)
+| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.tracing:tracing:1.0.0 (*) +| | | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 +| | | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | | +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.0-rc01
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.viewpager:viewpager:1.0.0
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*)
+| | | | \--- androidx.customview:customview:1.0.0 -> 1.1.0
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*)
+| | | | \--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.loader:loader:1.0.0
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | | +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05 (*)
+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*) +| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.5.0-rc01 (*)
+| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.4.1 (*) +| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | | +--- androidx.activity:activity:1.2.4 -> 1.4.0 (*) +| | | | +--- androidx.savedstate:savedstate:1.2.0-rc01
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.4.1 (*) +| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*) +| | | | | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*) +| | | | | +--- androidx.lifecycle:lifecycle-common:2.4.0 -> 2.5.0-rc01 (*)
+| | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*)
+| | | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0 +| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| | +--- androidx.appcompat:appcompat-resources:1.4.1 +| | | +--- androidx.savedstate:savedstate:1.2.0-rc01 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.tracing:tracing:1.0.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | \--- androidx.activity:activity-ktx:1.6.0-alpha05 (c)
+| | +--- androidx.annotation:annotation:1.3.0
+| | +--- androidx.appcompat:appcompat-resources:1.6.0-alpha05
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.1 -> 1.8.0-rc02 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.core:core:1.6.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 +| | | +--- androidx.vectordrawable:vectordrawable:1.1.0
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | | | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | | | \--- androidx.collection:collection:1.1.0 (*) +| | | | \--- androidx.collection:collection:1.1.0 (*)
+| | | \--- androidx.vectordrawable:vectordrawable-animated:1.1.0 +| | | \--- androidx.vectordrawable:vectordrawable-animated:1.1.0
+| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) +| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*)
+| | | +--- androidx.interpolator:interpolator:1.0.0 +| | | +--- androidx.interpolator:interpolator:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | \--- androidx.collection:collection:1.1.0 (*) +| | | \--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | +--- androidx.cursoradapter:cursoradapter:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1 +| | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.2.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.2.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.customview:customview:1.1.0 (*) +| | | \--- androidx.customview:customview:1.1.0
+| | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.emoji2:emoji2:1.0.0 +| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.collection:collection:1.1.0 (*) +| | | \--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.emoji2:emoji2:1.2.0-alpha04
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-process:2.4.0 (*) +| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.lifecycle:lifecycle-process:2.4.1 (*)
+| | | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*) +| | | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | +--- androidx.emoji2:emoji2-views-helper:1.0.0 +| | +--- androidx.emoji2:emoji2-views-helper:1.2.0-alpha04
+| | | +--- androidx.emoji2:emoji2:1.0.0 (*)
+| | | +--- androidx.collection:collection:1.1.0 (*) +| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | \--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.emoji2:emoji2:1.2.0-alpha04 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*) +| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*) +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.resourceinspection:resourceinspection-annotation:1.0.0 +| | | +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.viewpager:viewpager:1.0.0
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | | \--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.loader:loader:1.0.0
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*)
+| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.5.0-rc01 (*)
+| | | +--- androidx.activity:activity:1.2.4 -> 1.6.0-alpha05 (*)
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.5.0-rc01 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.5.0-rc01 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 -> 2.5.0-rc01 (*)
+| | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| | | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| +--- androidx.cardview:cardview:1.0.0 +| +--- androidx.cardview:cardview:1.0.0
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-extensions:2.2.0 +| +--- androidx.lifecycle:lifecycle-extensions:2.2.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.arch.core:core-common:2.1.0 (*) +| | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | +--- androidx.arch.core:core-runtime:2.1.0 (*) +| | +--- androidx.arch.core:core-runtime:2.1.0 (*)
+| | +--- androidx.fragment:fragment:1.2.0 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.2.0 -> 1.4.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.2.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.2.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.0 (*) +| | +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-service:2.2.0 (*) +| | +--- androidx.lifecycle:lifecycle-service:2.2.0 (*)
+| | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.4.1 (*) +| | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.4.1 +| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.4.1
+| | +--- androidx.lifecycle:lifecycle-livedata:2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.4.1 +| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.4.1
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 (*) +| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 -> 2.5.0-rc01 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.6.1 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 +| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.7.0-alpha02 +| +--- com.google.android.material:material:1.6.0 -> 1.7.0-alpha02
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | +--- androidx.appcompat:appcompat:1.4.0 -> 1.4.1 (*) +| | +--- androidx.appcompat:appcompat:1.4.0 -> 1.6.0-alpha05 (*)
+| | +--- androidx.cardview:cardview:1.0.0 (*) +| | +--- androidx.cardview:cardview:1.0.0 (*)
+| | +--- androidx.coordinatorlayout:coordinatorlayout:1.1.0 +| | +--- androidx.coordinatorlayout:coordinatorlayout:1.1.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.2 +| | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.2
+| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.4.1 (*) +| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.6.0-alpha05 (*)
+| | | +--- androidx.core:core:1.3.2 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.2 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.constraintlayout:constraintlayout-core:1.0.2 +| | | \--- androidx.constraintlayout:constraintlayout-core:1.0.2
+| | +--- androidx.core:core:1.6.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.6.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.drawerlayout:drawerlayout:1.1.1 (*) +| | +--- androidx.drawerlayout:drawerlayout:1.1.1 (*)
+| | +--- androidx.dynamicanimation:dynamicanimation:1.0.0 +| | +--- androidx.dynamicanimation:dynamicanimation:1.0.0
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 +| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.documentfile:documentfile:1.0.0 +| | | +--- androidx.documentfile:documentfile:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.loader:loader:1.0.0 (*) +| | | +--- androidx.loader:loader:1.0.0 (*)
@ -228,22 +236,22 @@
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0 +| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0
+| | +--- androidx.fragment:fragment:1.2.5 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.2.5 -> 1.4.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 +| | +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.transition:transition:1.2.0 +| | +--- androidx.transition:transition:1.2.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.1 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.1 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) +| | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*)
+| | \--- androidx.viewpager2:viewpager2:1.0.0 +| | \--- androidx.viewpager2:viewpager2:1.0.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.fragment:fragment:1.1.0 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.1.0 -> 1.4.0 (*)
+| | +--- androidx.recyclerview:recyclerview:1.1.0 (*) +| | +--- androidx.recyclerview:recyclerview:1.1.0 (*)
+| | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | \--- androidx.collection:collection:1.1.0 (*) +| | \--- androidx.collection:collection:1.1.0 (*)
+| \--- org.conscrypt:conscrypt-android:2.5.2 +| \--- org.conscrypt:conscrypt-android:2.5.2
++--- com.github.tasks.opentasks:opentasks-provider:a1faa1b ++--- com.github.tasks.opentasks:opentasks-provider:a1faa1b
@ -258,12 +266,12 @@
+| +--- com.google.dagger:hilt-core:2.42 +| +--- com.google.dagger:hilt-core:2.42
+| | +--- com.google.dagger:dagger:2.42 (*) +| | +--- com.google.dagger:dagger:2.42 (*)
+| | \--- javax.inject:javax.inject:1 +| | \--- javax.inject:javax.inject:1
+| +--- androidx.activity:activity:1.3.1 -> 1.4.0 (*) +| +--- androidx.activity:activity:1.3.1 -> 1.6.0-alpha05 (*)
+| +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*) +| +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-common:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| +--- javax.inject:javax.inject:1 +| +--- javax.inject:javax.inject:1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*)
@ -276,7 +284,7 @@
+| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | +--- androidx.lifecycle:lifecycle-livedata:2.1.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.1.0 -> 2.4.1 (*)
+| | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*) +| | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | +--- androidx.core:core:1.6.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.6.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.room:room-runtime:2.2.5 -> 2.4.2 +| | +--- androidx.room:room-runtime:2.2.5 -> 2.4.2
+| | | +--- androidx.room:room-common:2.4.2 +| | | +--- androidx.room:room-common:2.4.2
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -289,42 +297,43 @@
+| | | \--- androidx.annotation:annotation-experimental:1.1.0 +| | | \--- androidx.annotation:annotation-experimental:1.1.0
+| | +--- androidx.sqlite:sqlite:2.1.0 -> 2.2.0 (*) +| | +--- androidx.sqlite:sqlite:2.1.0 -> 2.2.0 (*)
+| | +--- androidx.sqlite:sqlite-framework:2.1.0 -> 2.2.0 (*) +| | +--- androidx.sqlite:sqlite-framework:2.1.0 -> 2.2.0 (*)
+| | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | \--- androidx.lifecycle:lifecycle-service:2.1.0 -> 2.2.0 (*) +| | \--- androidx.lifecycle:lifecycle-service:2.1.0 -> 2.2.0 (*)
+| \--- com.google.dagger:hilt-android:2.35 -> 2.42 (*) +| \--- com.google.dagger:hilt-android:2.35 -> 2.42 (*)
++--- androidx.fragment:fragment-ktx:1.4.0 ++--- androidx.fragment:fragment-ktx:1.4.0
+| +--- androidx.fragment:fragment:1.4.0 (*) +| +--- androidx.fragment:fragment:1.4.0 (*)
+| +--- androidx.activity:activity-ktx:1.2.3 -> 1.4.0 +| +--- androidx.activity:activity-ktx:1.2.3 -> 1.6.0-alpha05
+| | +--- androidx.activity:activity:1.4.0 (*) +| | +--- androidx.activity:activity:1.6.0-alpha05 (*)
+| | +--- androidx.core:core-ktx:1.1.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core-ktx:1.1.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.3.1 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-rc01 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01 +| | +--- androidx.savedstate:savedstate-ktx:1.2.0-rc01
+| | | +--- androidx.savedstate:savedstate:1.2.0-rc01 (*) +| | | +--- androidx.savedstate:savedstate:1.2.0-rc01 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 (*) +| | \--- androidx.activity:activity:1.6.0-alpha05 (c)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.collection:collection-ktx:1.1.0 +| +--- androidx.collection:collection-ktx:1.1.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 -> 1.6.21 (*)
+| | \--- androidx.collection:collection:1.1.0 (*) +| | \--- androidx.collection:collection:1.1.0 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.3.1 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01 (*) +| +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 (*) ++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 (*) ++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.room:room-ktx:2.4.2 ++--- androidx.room:room-ktx:2.4.2
+| +--- androidx.room:room-common:2.4.2 (*) +| +--- androidx.room:room-common:2.4.2 (*)
+| +--- androidx.room:room-runtime:2.4.2 (*) +| +--- androidx.room:room-runtime:2.4.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*)
+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.6.1 (*) +| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.6.1 (*)
++--- androidx.appcompat:appcompat:1.4.0 -> 1.4.1 (*) ++--- androidx.appcompat:appcompat:1.6.0-alpha05 (*)
++--- androidx.paging:paging-runtime:2.1.2 ++--- androidx.paging:paging-runtime:2.1.2
+| +--- androidx.paging:paging-common:2.1.2 +| +--- androidx.paging:paging-common:2.1.2
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*) +| | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*)
+| +--- androidx.arch.core:core-runtime:2.0.0 -> 2.1.0 (*) +| +--- androidx.arch.core:core-runtime:2.0.0 -> 2.1.0 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*)
+| \--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*) +| \--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*)
++--- io.noties.markwon:core:4.6.2 ++--- io.noties.markwon:core:4.6.2
@ -355,11 +364,11 @@
++--- androidx.constraintlayout:constraintlayout:2.1.2 (*) ++--- androidx.constraintlayout:constraintlayout:2.1.2 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0 ++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| \--- androidx.interpolator:interpolator:1.0.0 (*) +| \--- androidx.interpolator:interpolator:1.0.0 (*)
++--- androidx.preference:preference:1.1.1 ++--- androidx.preference:preference:1.1.1
+| +--- androidx.appcompat:appcompat:1.1.0 -> 1.4.1 (*) +| +--- androidx.appcompat:appcompat:1.1.0 -> 1.6.0-alpha05 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.fragment:fragment:1.2.4 -> 1.4.0 (*) +| +--- androidx.fragment:fragment:1.2.4 -> 1.4.0 (*)
+| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*) +| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*)
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -407,21 +416,21 @@
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1 +| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
+| \--- com.squareup.okhttp3:okhttp:3.12.1 -> 4.9.3 (*) +| \--- com.squareup.okhttp3:okhttp:3.12.1 -> 4.9.3 (*)
++--- com.github.QuadFlask:colorpicker:0.0.15 ++--- com.github.QuadFlask:colorpicker:0.0.15
+| \--- androidx.appcompat:appcompat:1.1.0 -> 1.4.1 (*) +| \--- androidx.appcompat:appcompat:1.1.0 -> 1.6.0-alpha05 (*)
++--- net.openid:appauth:0.8.1 ++--- net.openid:appauth:0.8.1
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- androidx.browser:browser:1.3.0 +| \--- androidx.browser:browser:1.3.0
+| +--- androidx.collection:collection:1.1.0 (*) +| +--- androidx.collection:collection:1.1.0 (*)
+| +--- androidx.concurrent:concurrent-futures:1.0.0 (*) +| +--- androidx.concurrent:concurrent-futures:1.0.0 (*)
+| +--- androidx.interpolator:interpolator:1.0.0 (*) +| +--- androidx.interpolator:interpolator:1.0.0 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
++--- org.osmdroid:osmdroid-android:6.1.11 ++--- org.osmdroid:osmdroid-android:6.1.11
++--- androidx.compose.ui:ui:1.2.0-rc01 ++--- androidx.compose.ui:ui:1.2.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.autofill:autofill:1.0.0 +| +--- androidx.autofill:autofill:1.0.0
+| | \--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | \--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| +--- androidx.compose.runtime:runtime:1.2.0-rc01 +| +--- androidx.compose.runtime:runtime:1.2.0-rc01
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -456,21 +465,21 @@
+| | +--- androidx.compose.ui:ui-graphics:1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui-graphics:1.2.0-rc01 (*)
+| | +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*)
+| | +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*)
+| | +--- androidx.core:core:1.5.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.5.0 -> 1.9.0-alpha05 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 +| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (*)
+| +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*)
+| +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*)
+| +--- androidx.core:core:1.5.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.5.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.customview:customview-poolingcontainer:1.0.0-rc01 +| +--- androidx.customview:customview-poolingcontainer:1.0.0-rc01
+| | +--- androidx.core:core-ktx:1.5.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core-ktx:1.5.0 -> 1.9.0-alpha05 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-common:2.4.1 (*) +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.profileinstaller:profileinstaller:1.2.0-rc01 +| +--- androidx.profileinstaller:profileinstaller:1.2.0-rc01
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | \--- androidx.startup:startup-runtime:1.1.1 (*) +| | \--- androidx.startup:startup-runtime:1.1.1 (*)
@ -498,7 +507,7 @@
+| | | +--- androidx.compose.ui:ui:1.2.0-rc01 (*) +| | | +--- androidx.compose.ui:ui:1.2.0-rc01 (*)
+| | | +--- androidx.compose.ui:ui-unit:1.1.1 -> 1.2.0-rc01 (*) +| | | +--- androidx.compose.ui:ui-unit:1.1.1 -> 1.2.0-rc01 (*)
+| | | +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*) +| | | +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*)
+| | | +--- androidx.core:core:1.7.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.7.0 -> 1.9.0-alpha05 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
+| | +--- androidx.compose.runtime:runtime:1.1.1 -> 1.2.0-rc01 (*) +| | +--- androidx.compose.runtime:runtime:1.1.1 -> 1.2.0-rc01 (*)
+| | +--- androidx.compose.ui:ui:1.0.0 -> 1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui:1.0.0 -> 1.2.0-rc01 (*)
@ -531,8 +540,8 @@
+| +--- androidx.compose.ui:ui:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui:1.2.0-rc01 (*)
+| +--- androidx.compose.ui:ui-text:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-text:1.2.0-rc01 (*)
+| +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 +| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
++--- androidx.compose.runtime:runtime-livedata:1.2.0-rc01 ++--- androidx.compose.runtime:runtime-livedata:1.2.0-rc01
@ -541,8 +550,8 @@
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
++--- com.google.android.material:compose-theme-adapter:1.1.11 ++--- com.google.android.material:compose-theme-adapter:1.1.11
+| +--- androidx.appcompat:appcompat:1.4.1 (*) +| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05 (*)
+| +--- androidx.core:core-ktx:1.8.0-rc02 (*) +| +--- androidx.core:core-ktx:1.8.0-rc02 -> 1.9.0-alpha05 (*)
+| +--- androidx.compose.runtime:runtime:1.2.0-beta03 -> 1.2.0-rc01 (*) +| +--- androidx.compose.runtime:runtime:1.2.0-beta03 -> 1.2.0-rc01 (*)
+| +--- androidx.compose.material:material:1.2.0-beta03 -> 1.2.0-rc01 (*) +| +--- androidx.compose.material:material:1.2.0-beta03 -> 1.2.0-rc01 (*)
+| +--- com.google.android.material:material:1.7.0-alpha02 (*) +| +--- com.google.android.material:material:1.7.0-alpha02 (*)
@ -550,7 +559,7 @@
++--- androidx.activity:activity-compose:1.4.0 ++--- androidx.activity:activity-compose:1.4.0
+| +--- androidx.compose.runtime:runtime:1.0.1 -> 1.2.0-rc01 (*) +| +--- androidx.compose.runtime:runtime:1.0.1 -> 1.2.0-rc01 (*)
+| +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.2.0-rc01 (*) +| +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.2.0-rc01 (*)
+| +--- androidx.activity:activity-ktx:1.4.0 (*) +| +--- androidx.activity:activity-ktx:1.4.0 -> 1.6.0-alpha05 (*)
+| +--- androidx.compose.ui:ui:1.0.1 -> 1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui:1.0.1 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.compose.material:material-icons-extended:1.2.0-rc01 ++--- androidx.compose.material:material-icons-extended:1.2.0-rc01

@ -6,16 +6,16 @@
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.databinding:databinding-common:7.2.1 +| +--- androidx.databinding:databinding-common:7.2.1
+| +--- androidx.databinding:viewbinding:7.2.1 (*) +| +--- androidx.databinding:viewbinding:7.2.1 (*)
+| \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.4.1 +| \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.5.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.arch.core:core-common:2.1.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.arch.core:core-runtime:2.1.0 +| +--- androidx.arch.core:core-runtime:2.1.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.arch.core:core-common:2.1.0 +| | \--- androidx.arch.core:core-common:2.1.0 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01
+| +--- androidx.lifecycle:lifecycle-common:2.4.1 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| \--- androidx.lifecycle:lifecycle-common-java8:2.5.0-rc01 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.4.1 (c)
+| +--- androidx.arch.core:core-common:2.1.0 (*)
+| \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
++--- androidx.databinding:databinding-adapters:7.2.1 ++--- androidx.databinding:databinding-adapters:7.2.1
+| +--- androidx.databinding:databinding-runtime:7.2.1 (*) +| +--- androidx.databinding:databinding-runtime:7.2.1 (*)
+| \--- androidx.databinding:databinding-common:7.2.1 +| \--- androidx.databinding:databinding-common:7.2.1
@ -36,29 +36,31 @@
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0 -> 1.6.21 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0 -> 1.6.21
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1 (*) +| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0 -> 1.6.21 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0 -> 1.6.21 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.2.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.2.0 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.1 (*) +| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1
+| | +--- androidx.arch.core:core-common:2.1.0 (*) +| | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | +--- androidx.arch.core:core-runtime:2.1.0 (*) +| | +--- androidx.arch.core:core-runtime:2.1.0 (*)
+| | \--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 +| | \--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 -> 2.5.0-rc01
+| | +--- androidx.arch.core:core-common:2.1.0 (*) +| | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | +--- androidx.arch.core:core-runtime:2.1.0 (*) +| | +--- androidx.arch.core:core-runtime:2.1.0 (*)
+| | \--- androidx.lifecycle:lifecycle-common:2.4.1 (*) +| | \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.0 +| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.1
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.4.1 -> 2.5.0-rc01 (*)
+| | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 +| | +--- androidx.startup:startup-runtime:1.1.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.tracing:tracing:1.0.0 +| | | \--- androidx.tracing:tracing:1.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-service:2.2.0 +| +--- androidx.lifecycle:lifecycle-service:2.2.0
+| | \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.4.1 (*) +| | \--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.5.0-rc01
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.0-rc01 (c)
+| +--- androidx.databinding:databinding-runtime:7.2.1 (*) +| +--- androidx.databinding:databinding-runtime:7.2.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 -> 1.6.21 (*)
++--- com.google.firebase:firebase-crashlytics:18.2.11 ++--- com.google.firebase:firebase-crashlytics:18.2.11
@ -84,57 +86,63 @@
+| +--- com.google.android.gms:play-services-tasks:18.0.1 +| +--- com.google.android.gms:play-services-tasks:18.0.1
+| | \--- com.google.android.gms:play-services-basement:18.0.0 +| | \--- com.google.android.gms:play-services-basement:18.0.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.core:core:1.2.0 -> 1.8.0-rc02 +| | +--- androidx.core:core:1.2.0 -> 1.9.0-alpha05
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.annotation:annotation-experimental:1.1.0 +| | | +--- androidx.annotation:annotation-experimental:1.1.0
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.concurrent:concurrent-futures:1.0.0 +| | | +--- androidx.concurrent:concurrent-futures:1.0.0
+| | | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*) +| | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.5.0-rc01 (*)
+| | | \--- androidx.versionedparcelable:versionedparcelable:1.1.1 +| | | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.core:core-ktx:1.9.0-alpha05 (c)
+| | \--- androidx.fragment:fragment:1.0.0 -> 1.4.0 +| | \--- androidx.fragment:fragment:1.0.0 -> 1.4.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 +| | +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | \--- androidx.core:core:1.9.0-alpha05 (c)
+| | +--- androidx.collection:collection:1.1.0 (*) +| | +--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.viewpager:viewpager:1.0.0 +| | +--- androidx.viewpager:viewpager:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.customview:customview:1.0.0 -> 1.1.0 +| | | \--- androidx.customview:customview:1.0.0 -> 1.1.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.collection:collection:1.1.0 (*) +| | | \--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.loader:loader:1.0.0 +| | +--- androidx.loader:loader:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*) +| | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*)
+| | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.4.1 (*) +| | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.activity:activity:1.2.4 -> 1.4.0 +| | +--- androidx.activity:activity:1.2.4 -> 1.6.0-alpha05
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.7.0 -> 1.8.0-rc02 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.4.0 -> 2.4.1 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.4.1 (*)
+| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.tracing:tracing:1.0.0 (*) +| | | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.4.1 (*) +| | | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*) +| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*) +| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.0-rc01
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05 (*)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.5.0-rc01 (*)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | | | +--- androidx.savedstate:savedstate:1.2.0-rc01
+| | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | | | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | | | | +--- androidx.lifecycle:lifecycle-common:2.4.0 -> 2.5.0-rc01 (*)
+| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| | | +--- androidx.savedstate:savedstate:1.2.0-rc01 (*)
+| | | +--- androidx.tracing:tracing:1.0.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | \--- androidx.activity:activity-ktx:1.6.0-alpha05 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0 +| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
@ -164,7 +172,7 @@
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.legacy:legacy-support-core-utils:1.0.0 +| | +--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.documentfile:documentfile:1.0.0 +| | | +--- androidx.documentfile:documentfile:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.loader:loader:1.0.0 (*) +| | | +--- androidx.loader:loader:1.0.0 (*)
@ -177,7 +185,7 @@
+| | | \--- com.google.android.gms:play-services-basement:18.0.0 (*) +| | | \--- com.google.android.gms:play-services-basement:18.0.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-impl:20.1.0 +| | +--- com.google.android.gms:play-services-measurement-impl:20.1.0
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.0.0 (*) +| | | +--- com.google.android.gms:play-services-basement:18.0.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:20.1.0 (*) +| | | +--- com.google.android.gms:play-services-measurement-base:20.1.0 (*)
+| | | \--- com.google.android.gms:play-services-stats:17.0.2 +| | | \--- com.google.android.gms:play-services-stats:17.0.2
@ -229,7 +237,7 @@
++--- com.google.android.gms:play-services-location:19.0.1 ++--- com.google.android.gms:play-services-location:19.0.1
+| +--- com.google.android.gms:play-services-base:18.0.1 +| +--- com.google.android.gms:play-services-base:18.0.1
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.core:core:1.2.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.2.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.fragment:fragment:1.0.0 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.0.0 -> 1.4.0 (*)
+| | +--- com.google.android.gms:play-services-basement:18.0.0 (*) +| | +--- com.google.android.gms:play-services-basement:18.0.0 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.0.1 (*) +| | \--- com.google.android.gms:play-services-tasks:18.0.1 (*)
@ -250,49 +258,49 @@
+| +--- com.google.android.play:core:1.8.0 -> 1.10.3 +| +--- com.google.android.play:core:1.8.0 -> 1.10.3
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 -> 1.6.21 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 -> 1.6.21 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6 -> 1.6.1 (*) +| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6 -> 1.6.1 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| \--- androidx.fragment:fragment:1.1.0 -> 1.4.0 (*) +| \--- androidx.fragment:fragment:1.1.0 -> 1.4.0 (*)
++--- com.google.android.gms:play-services-oss-licenses:17.0.0 ++--- com.google.android.gms:play-services-oss-licenses:17.0.0
+| +--- androidx.appcompat:appcompat:1.0.0 -> 1.4.1 +| +--- androidx.appcompat:appcompat:1.0.0 -> 1.6.0-alpha05
+| | +--- androidx.activity:activity:1.6.0-alpha05 (*)
+| | +--- androidx.annotation:annotation:1.3.0 +| | +--- androidx.annotation:annotation:1.3.0
+| | +--- androidx.core:core:1.7.0 -> 1.8.0-rc02 (*) +| | +--- androidx.appcompat:appcompat-resources:1.6.0-alpha05
+| | +--- androidx.cursoradapter:cursoradapter:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.activity:activity:1.2.4 -> 1.4.0 (*)
+| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| | +--- androidx.appcompat:appcompat-resources:1.4.1
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.1 -> 1.8.0-rc02 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.core:core:1.6.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 +| | | +--- androidx.vectordrawable:vectordrawable:1.1.0
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | | | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | | | \--- androidx.collection:collection:1.1.0 (*) +| | | | \--- androidx.collection:collection:1.1.0 (*)
+| | | \--- androidx.vectordrawable:vectordrawable-animated:1.1.0 +| | | \--- androidx.vectordrawable:vectordrawable-animated:1.1.0
+| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) +| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*)
+| | | +--- androidx.interpolator:interpolator:1.0.0 +| | | +--- androidx.interpolator:interpolator:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | \--- androidx.collection:collection:1.1.0 (*) +| | | \--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | +--- androidx.cursoradapter:cursoradapter:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1 +| | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.2.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.2.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.customview:customview:1.1.0 (*) +| | | \--- androidx.customview:customview:1.1.0 (*)
+| | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| | +--- androidx.emoji2:emoji2:1.2.0-alpha04
+| | +--- androidx.emoji2:emoji2:1.0.0
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-process:2.4.0 (*) +| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.lifecycle:lifecycle-process:2.4.1 (*)
+| | | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*) +| | | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | +--- androidx.emoji2:emoji2-views-helper:1.0.0 +| | +--- androidx.emoji2:emoji2-views-helper:1.2.0-alpha04
+| | | +--- androidx.emoji2:emoji2:1.0.0 (*)
+| | | +--- androidx.collection:collection:1.1.0 (*) +| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | \--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.emoji2:emoji2:1.2.0-alpha04 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*) +| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.5.0-rc01 (*)
+| | \--- androidx.resourceinspection:resourceinspection-annotation:1.0.0 +| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.5.0-rc01 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| +--- androidx.loader:loader:1.0.0 (*) +| +--- androidx.loader:loader:1.0.0 (*)
+| +--- com.google.android.gms:play-services-base:17.0.0 -> 18.0.1 (*) +| +--- com.google.android.gms:play-services-base:17.0.0 -> 18.0.1 (*)
+| +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.0.0 (*) +| +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.0.0 (*)
@ -312,74 +320,74 @@
+| +--- commons-io:commons-io:2.6 +| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14:1.7.30 +| +--- org.slf4j:slf4j-jdk14:1.7.30
+| | \--- org.slf4j:slf4j-api:1.7.30 +| | \--- org.slf4j:slf4j-api:1.7.30
+| \--- androidx.core:core-ktx:1.3.2 -> 1.8.0-rc02 (*) +| \--- androidx.core:core-ktx:1.3.2 -> 1.9.0-alpha05 (*)
++--- com.github.bitfireAT:cert4android:7814052 ++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 7.2.1 +| +--- androidx.databinding:databinding-common:7.2.0 -> 7.2.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 7.2.1 (*) +| +--- androidx.databinding:databinding-runtime:7.2.0 -> 7.2.1 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 7.2.1 (*) +| +--- androidx.databinding:databinding-adapters:7.2.0 -> 7.2.1 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 7.2.1 (*) +| +--- androidx.databinding:databinding-ktx:7.2.0 -> 7.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 (*) +| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05 (*)
+| +--- androidx.cardview:cardview:1.0.0 +| +--- androidx.cardview:cardview:1.0.0
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-extensions:2.2.0 +| +--- androidx.lifecycle:lifecycle-extensions:2.2.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.arch.core:core-common:2.1.0 (*) +| | +--- androidx.arch.core:core-common:2.1.0 (*)
+| | +--- androidx.arch.core:core-runtime:2.1.0 (*) +| | +--- androidx.arch.core:core-runtime:2.1.0 (*)
+| | +--- androidx.fragment:fragment:1.2.0 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.2.0 -> 1.4.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.2.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-common:2.2.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.0 (*) +| | +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-service:2.2.0 (*) +| | +--- androidx.lifecycle:lifecycle-service:2.2.0 (*)
+| | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.4.1 (*) +| | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.4.1 +| +--- androidx.lifecycle:lifecycle-livedata-ktx:2.4.1
+| | +--- androidx.lifecycle:lifecycle-livedata:2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.4.1 +| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.4.1
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 (*) +| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.4.1 -> 2.5.0-rc01 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.6.1 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 +| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.7.0-alpha02 +| +--- com.google.android.material:material:1.6.0 -> 1.7.0-alpha02
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | +--- androidx.appcompat:appcompat:1.4.0 -> 1.4.1 (*) +| | +--- androidx.appcompat:appcompat:1.4.0 -> 1.6.0-alpha05 (*)
+| | +--- androidx.cardview:cardview:1.0.0 (*) +| | +--- androidx.cardview:cardview:1.0.0 (*)
+| | +--- androidx.coordinatorlayout:coordinatorlayout:1.1.0 +| | +--- androidx.coordinatorlayout:coordinatorlayout:1.1.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.2 +| | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.2
+| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.4.1 (*) +| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.6.0-alpha05 (*)
+| | | +--- androidx.core:core:1.3.2 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.3.2 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.constraintlayout:constraintlayout-core:1.0.2 +| | | \--- androidx.constraintlayout:constraintlayout-core:1.0.2
+| | +--- androidx.core:core:1.6.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.6.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.drawerlayout:drawerlayout:1.1.1 (*) +| | +--- androidx.drawerlayout:drawerlayout:1.1.1 (*)
+| | +--- androidx.dynamicanimation:dynamicanimation:1.0.0 +| | +--- androidx.dynamicanimation:dynamicanimation:1.0.0
+| | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 (*) +| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
+| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0 +| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.0
+| | +--- androidx.fragment:fragment:1.2.5 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.2.5 -> 1.4.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 +| | +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.transition:transition:1.2.0 +| | +--- androidx.transition:transition:1.2.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.0.1 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.0.1 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) +| | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*)
+| | \--- androidx.viewpager2:viewpager2:1.0.0 +| | \--- androidx.viewpager2:viewpager2:1.0.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.fragment:fragment:1.1.0 -> 1.4.0 (*) +| | +--- androidx.fragment:fragment:1.1.0 -> 1.4.0 (*)
+| | +--- androidx.recyclerview:recyclerview:1.1.0 (*) +| | +--- androidx.recyclerview:recyclerview:1.1.0 (*)
+| | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | \--- androidx.collection:collection:1.1.0 (*) +| | \--- androidx.collection:collection:1.1.0 (*)
+| \--- org.conscrypt:conscrypt-android:2.5.2 +| \--- org.conscrypt:conscrypt-android:2.5.2
++--- com.github.tasks.opentasks:opentasks-provider:a1faa1b ++--- com.github.tasks.opentasks:opentasks-provider:a1faa1b
@ -394,12 +402,12 @@
+| +--- com.google.dagger:hilt-core:2.42 +| +--- com.google.dagger:hilt-core:2.42
+| | +--- com.google.dagger:dagger:2.42 (*) +| | +--- com.google.dagger:dagger:2.42 (*)
+| | \--- javax.inject:javax.inject:1 +| | \--- javax.inject:javax.inject:1
+| +--- androidx.activity:activity:1.3.1 -> 1.4.0 (*) +| +--- androidx.activity:activity:1.3.1 -> 1.6.0-alpha05 (*)
+| +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*) +| +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-common:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| +--- javax.inject:javax.inject:1 +| +--- javax.inject:javax.inject:1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*)
@ -412,7 +420,7 @@
+| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | +--- androidx.lifecycle:lifecycle-livedata:2.1.0 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.1.0 -> 2.4.1 (*)
+| | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*) +| | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | +--- androidx.core:core:1.6.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.6.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.room:room-runtime:2.2.5 -> 2.4.2 +| | +--- androidx.room:room-runtime:2.2.5 -> 2.4.2
+| | | +--- androidx.room:room-common:2.4.2 +| | | +--- androidx.room:room-common:2.4.2
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -425,42 +433,43 @@
+| | | \--- androidx.annotation:annotation-experimental:1.1.0 +| | | \--- androidx.annotation:annotation-experimental:1.1.0
+| | +--- androidx.sqlite:sqlite:2.1.0 -> 2.2.0 (*) +| | +--- androidx.sqlite:sqlite:2.1.0 -> 2.2.0 (*)
+| | +--- androidx.sqlite:sqlite-framework:2.1.0 -> 2.2.0 (*) +| | +--- androidx.sqlite:sqlite-framework:2.1.0 -> 2.2.0 (*)
+| | +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| | \--- androidx.lifecycle:lifecycle-service:2.1.0 -> 2.2.0 (*) +| | \--- androidx.lifecycle:lifecycle-service:2.1.0 -> 2.2.0 (*)
+| \--- com.google.dagger:hilt-android:2.35 -> 2.42 (*) +| \--- com.google.dagger:hilt-android:2.35 -> 2.42 (*)
++--- androidx.fragment:fragment-ktx:1.4.0 ++--- androidx.fragment:fragment-ktx:1.4.0
+| +--- androidx.fragment:fragment:1.4.0 (*) +| +--- androidx.fragment:fragment:1.4.0 (*)
+| +--- androidx.activity:activity-ktx:1.2.3 -> 1.4.0 +| +--- androidx.activity:activity-ktx:1.2.3 -> 1.6.0-alpha05
+| | +--- androidx.activity:activity:1.4.0 (*) +| | +--- androidx.activity:activity:1.6.0-alpha05 (*)
+| | +--- androidx.core:core-ktx:1.1.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core-ktx:1.1.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.3.1 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.4.1 (*) +| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-rc01 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01 +| | +--- androidx.savedstate:savedstate-ktx:1.2.0-rc01
+| | | +--- androidx.savedstate:savedstate:1.2.0-rc01 (*) +| | | +--- androidx.savedstate:savedstate:1.2.0-rc01 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*) +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.20 -> 1.6.21 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 (*) +| | \--- androidx.activity:activity:1.6.0-alpha05 (c)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.collection:collection-ktx:1.1.0 +| +--- androidx.collection:collection-ktx:1.1.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 -> 1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 -> 1.6.21 (*)
+| | \--- androidx.collection:collection:1.1.0 (*) +| | \--- androidx.collection:collection:1.1.0 (*)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.3.1 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01 (*) +| +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 (*) ++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 (*) ++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.room:room-ktx:2.4.2 ++--- androidx.room:room-ktx:2.4.2
+| +--- androidx.room:room-common:2.4.2 (*) +| +--- androidx.room:room-common:2.4.2 (*)
+| +--- androidx.room:room-runtime:2.4.2 (*) +| +--- androidx.room:room-runtime:2.4.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*)
+| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.6.1 (*) +| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2 -> 1.6.1 (*)
++--- androidx.appcompat:appcompat:1.4.0 -> 1.4.1 (*) ++--- androidx.appcompat:appcompat:1.6.0-alpha05 (*)
++--- androidx.paging:paging-runtime:2.1.2 ++--- androidx.paging:paging-runtime:2.1.2
+| +--- androidx.paging:paging-common:2.1.2 +| +--- androidx.paging:paging-common:2.1.2
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*) +| | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*)
+| +--- androidx.arch.core:core-runtime:2.0.0 -> 2.1.0 (*) +| +--- androidx.arch.core:core-runtime:2.0.0 -> 2.1.0 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*)
+| \--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*) +| \--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*)
++--- io.noties.markwon:core:4.6.2 ++--- io.noties.markwon:core:4.6.2
@ -491,11 +500,11 @@
++--- androidx.constraintlayout:constraintlayout:2.1.2 (*) ++--- androidx.constraintlayout:constraintlayout:2.1.2 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0 ++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| \--- androidx.interpolator:interpolator:1.0.0 (*) +| \--- androidx.interpolator:interpolator:1.0.0 (*)
++--- androidx.preference:preference:1.1.1 ++--- androidx.preference:preference:1.1.1
+| +--- androidx.appcompat:appcompat:1.1.0 -> 1.4.1 (*) +| +--- androidx.appcompat:appcompat:1.1.0 -> 1.6.0-alpha05 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.fragment:fragment:1.2.4 -> 1.4.0 (*) +| +--- androidx.fragment:fragment:1.2.4 -> 1.4.0 (*)
+| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*) +| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*)
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -543,21 +552,21 @@
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1 +| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
+| \--- com.squareup.okhttp3:okhttp:3.12.1 -> 4.9.3 (*) +| \--- com.squareup.okhttp3:okhttp:3.12.1 -> 4.9.3 (*)
++--- com.github.QuadFlask:colorpicker:0.0.15 ++--- com.github.QuadFlask:colorpicker:0.0.15
+| \--- androidx.appcompat:appcompat:1.1.0 -> 1.4.1 (*) +| \--- androidx.appcompat:appcompat:1.1.0 -> 1.6.0-alpha05 (*)
++--- net.openid:appauth:0.8.1 ++--- net.openid:appauth:0.8.1
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- androidx.browser:browser:1.3.0 +| \--- androidx.browser:browser:1.3.0
+| +--- androidx.collection:collection:1.1.0 (*) +| +--- androidx.collection:collection:1.1.0 (*)
+| +--- androidx.concurrent:concurrent-futures:1.0.0 (*) +| +--- androidx.concurrent:concurrent-futures:1.0.0 (*)
+| +--- androidx.interpolator:interpolator:1.0.0 (*) +| +--- androidx.interpolator:interpolator:1.0.0 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava +| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
++--- org.osmdroid:osmdroid-android:6.1.11 ++--- org.osmdroid:osmdroid-android:6.1.11
++--- androidx.compose.ui:ui:1.2.0-rc01 ++--- androidx.compose.ui:ui:1.2.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.autofill:autofill:1.0.0 +| +--- androidx.autofill:autofill:1.0.0
+| | \--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*) +| | \--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| +--- androidx.compose.runtime:runtime:1.2.0-rc01 +| +--- androidx.compose.runtime:runtime:1.2.0-rc01
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -592,21 +601,21 @@
+| | +--- androidx.compose.ui:ui-graphics:1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui-graphics:1.2.0-rc01 (*)
+| | +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*)
+| | +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*)
+| | +--- androidx.core:core:1.5.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core:1.5.0 -> 1.9.0-alpha05 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 +| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (*)
+| +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-unit:1.2.0-rc01 (*)
+| +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-util:1.2.0-rc01 (*)
+| +--- androidx.core:core:1.5.0 -> 1.8.0-rc02 (*) +| +--- androidx.core:core:1.5.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.customview:customview-poolingcontainer:1.0.0-rc01 +| +--- androidx.customview:customview-poolingcontainer:1.0.0-rc01
+| | +--- androidx.core:core-ktx:1.5.0 -> 1.8.0-rc02 (*) +| | +--- androidx.core:core-ktx:1.5.0 -> 1.9.0-alpha05 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.4.1 +| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-common:2.4.1 (*) +| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 +| | \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.profileinstaller:profileinstaller:1.2.0-rc01 +| +--- androidx.profileinstaller:profileinstaller:1.2.0-rc01
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 +| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | \--- androidx.startup:startup-runtime:1.1.1 (*) +| | \--- androidx.startup:startup-runtime:1.1.1 (*)
@ -634,7 +643,7 @@
+| | | +--- androidx.compose.ui:ui:1.2.0-rc01 (*) +| | | +--- androidx.compose.ui:ui:1.2.0-rc01 (*)
+| | | +--- androidx.compose.ui:ui-unit:1.1.1 -> 1.2.0-rc01 (*) +| | | +--- androidx.compose.ui:ui-unit:1.1.1 -> 1.2.0-rc01 (*)
+| | | +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*) +| | | +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*)
+| | | +--- androidx.core:core:1.7.0 -> 1.8.0-rc02 (*) +| | | +--- androidx.core:core:1.7.0 -> 1.9.0-alpha05 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
+| | +--- androidx.compose.runtime:runtime:1.1.1 -> 1.2.0-rc01 (*) +| | +--- androidx.compose.runtime:runtime:1.1.1 -> 1.2.0-rc01 (*)
+| | +--- androidx.compose.ui:ui:1.0.0 -> 1.2.0-rc01 (*) +| | +--- androidx.compose.ui:ui:1.0.0 -> 1.2.0-rc01 (*)
@ -667,8 +676,8 @@
+| +--- androidx.compose.ui:ui:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui:1.2.0-rc01 (*)
+| +--- androidx.compose.ui:ui-text:1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-text:1.2.0-rc01 (*)
+| +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui-util:1.0.0 -> 1.2.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*) +| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 +| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
++--- androidx.compose.runtime:runtime-livedata:1.2.0-rc01 ++--- androidx.compose.runtime:runtime-livedata:1.2.0-rc01
@ -677,8 +686,8 @@
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*) +| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
++--- com.google.android.material:compose-theme-adapter:1.1.11 ++--- com.google.android.material:compose-theme-adapter:1.1.11
+| +--- androidx.appcompat:appcompat:1.4.1 (*) +| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05 (*)
+| +--- androidx.core:core-ktx:1.8.0-rc02 (*) +| +--- androidx.core:core-ktx:1.8.0-rc02 -> 1.9.0-alpha05 (*)
+| +--- androidx.compose.runtime:runtime:1.2.0-beta03 -> 1.2.0-rc01 (*) +| +--- androidx.compose.runtime:runtime:1.2.0-beta03 -> 1.2.0-rc01 (*)
+| +--- androidx.compose.material:material:1.2.0-beta03 -> 1.2.0-rc01 (*) +| +--- androidx.compose.material:material:1.2.0-beta03 -> 1.2.0-rc01 (*)
+| +--- com.google.android.material:material:1.7.0-alpha02 (*) +| +--- com.google.android.material:material:1.7.0-alpha02 (*)
@ -686,7 +695,7 @@
++--- androidx.activity:activity-compose:1.4.0 ++--- androidx.activity:activity-compose:1.4.0
+| +--- androidx.compose.runtime:runtime:1.0.1 -> 1.2.0-rc01 (*) +| +--- androidx.compose.runtime:runtime:1.0.1 -> 1.2.0-rc01 (*)
+| +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.2.0-rc01 (*) +| +--- androidx.compose.runtime:runtime-saveable:1.0.1 -> 1.2.0-rc01 (*)
+| +--- androidx.activity:activity-ktx:1.4.0 (*) +| +--- androidx.activity:activity-ktx:1.4.0 -> 1.6.0-alpha05 (*)
+| +--- androidx.compose.ui:ui:1.0.1 -> 1.2.0-rc01 (*) +| +--- androidx.compose.ui:ui:1.0.1 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.compose.material:material-icons-extended:1.2.0-rc01 ++--- androidx.compose.material:material-icons-extended:1.2.0-rc01

Loading…
Cancel
Save