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.room:room-ktx:${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("io.noties.markwon:core:${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.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.locale.Locale
import org.tasks.time.DateTime
import java.text.ParseException
import java.util.*
@ -123,7 +122,7 @@ class RepeatRuleToStringTest : InjectingTestCase() {
private fun toString(language: String?, rrule: String): String? {
return try {
val locale = Locale(java.util.Locale.getDefault(), language)
RepeatRuleToString(locale.createConfigurationContext(context), locale, firebase)
RepeatRuleToString(context, locale, firebase)
.toString(rrule)
} catch (e: ParseException) {
throw RuntimeException(e)

@ -151,7 +151,8 @@
android:theme="@style/Tasks"
tools:ignore="GoogleAppIndexingWarning,UnusedAttribute"
android:preserveLegacyExternalStorage="true"
android:hasFragileUserData="true">
android:hasFragileUserData="true"
android:localeConfig="@xml/locales_config">
<activity
android:name="net.openid.appauth.RedirectUriReceiverActivity"
@ -320,6 +321,15 @@
android:name=".widget.ScrollableWidgetUpdateService"
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 = -->
<provider

@ -11,16 +11,20 @@ import static org.tasks.time.DateTimeUtils.currentTimeMillis;
import android.content.Context;
import android.text.format.DateFormat;
import androidx.annotation.Nullable;
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.R;
import org.tasks.locale.Locale;
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 {
/** Represents a single hour */
@ -71,7 +75,7 @@ public class DateUtilities {
*/
public static String getDateString(Context context, DateTime date) {
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) {

@ -12,12 +12,7 @@ import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.speech.RecognizerIntent
import android.view.Gravity
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.view.*
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
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.astrid.adapter.TaskAdapter
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_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.dao.TaskDao
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.repeats.RepeatTaskHelper
import com.todoroo.astrid.service.TaskCompleter
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.service.*
import com.todoroo.astrid.timers.TimerPlugin
import com.todoroo.astrid.utility.Flags
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.delay
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.ShortcutManager
import org.tasks.Tasks.Companion.IS_GOOGLE_PLAY
import org.tasks.activities.FilterSettingsActivity
import org.tasks.activities.GoogleTaskListSettingsActivity
import org.tasks.activities.ListPicker
import org.tasks.activities.*
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.billing.PurchaseActivity
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.toast
import org.tasks.extensions.Fragment.safeStartActivityForResult
import org.tasks.extensions.formatNumber
import org.tasks.extensions.setOnQueryTextListener
import org.tasks.filters.PlaceFilter
import org.tasks.intents.TaskIntents
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationManager
import org.tasks.preferences.Device
import org.tasks.preferences.Preferences
import org.tasks.sync.SyncAdapters
import org.tasks.tags.TagPickerActivity
import org.tasks.tasklist.DragAndDropRecyclerAdapter
import org.tasks.tasklist.PagedListRecyclerAdapter
import org.tasks.tasklist.TaskListRecyclerAdapter
import org.tasks.tasklist.TaskViewHolder
import org.tasks.tasklist.ViewHolderFactory
import org.tasks.tasklist.*
import org.tasks.themes.ColorProvider
import org.tasks.themes.ThemeColor
import org.tasks.ui.TaskEditEvent
import org.tasks.ui.TaskEditEventBus
import org.tasks.ui.TaskListEvent
import org.tasks.ui.TaskListEventBus
import org.tasks.ui.TaskListViewModel
import org.tasks.ui.*
import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject
import kotlin.math.max
@ -428,9 +399,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
R.id.menu_voice_add -> {
safeStartActivityForResult(
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
locale.languageOverride?.let {
putExtra(RecognizerIntent.EXTRA_LANGUAGE, it)
}
putExtra(
RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM
@ -980,7 +948,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
R.string.repeat_snackbar,
task.title,
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()

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

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

@ -20,7 +20,6 @@ import kotlinx.coroutines.channels.Channel
import org.tasks.activities.DragAndDropDiffer
import org.tasks.billing.Inventory
import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale
import org.tasks.themes.ColorProvider
import java.util.*
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.data.Task
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.data.*
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
@ -26,7 +26,6 @@ import org.tasks.filters.SnoozedFilter
import org.tasks.filters.SortableFilter
import org.tasks.preferences.Preferences
import org.tasks.themes.CustomIcons
import java.util.*
import javax.inject.Inject
/**
@ -35,7 +34,7 @@ import javax.inject.Inject
* @author Tim Su <tim></tim>@todoroo.com>
*/
class BuiltInFilterExposer @Inject constructor(
@param:ApplicationContext private val context: Context,
@param:ActivityContext private val context: Context,
private val preferences: Preferences,
private val taskDao: TaskDao) {

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

@ -6,18 +6,23 @@ import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.AsyncDifferConfig;
import androidx.recyclerview.widget.AsyncListDiffer;
import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
import com.google.common.collect.ImmutableList;
import org.tasks.R;
import java.util.List;
import java.util.Locale;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.tasks.R;
import org.tasks.locale.Locale;
public class CustomFilterAdapter extends RecyclerView.Adapter<CriterionViewHolder> implements
ListUpdateCallback {
@ -27,7 +32,7 @@ public class CustomFilterAdapter extends RecyclerView.Adapter<CriterionViewHolde
private final AsyncListDiffer<CriterionInstance> differ;
public CustomFilterAdapter(
List<CriterionInstance> objects, Locale locale, Function1<String, Unit> onClick) {
List<CriterionInstance> objects, Locale locale, Function1<String, Unit> onClick) {
this.locale = locale;
this.onClick = onClick;
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.files.FileHelper
import org.tasks.files.ImageHelper
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import java.util.*
import javax.inject.Inject
@ -91,7 +90,7 @@ class CommentsController @Inject constructor(
// 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
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_TIME
import org.tasks.dialogs.StartDatePicker.Companion.WEEK_BEFORE_DUE
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils.millisOfDay
import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.ui.TaskEditControlFragment
import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject
@AndroidEntryPoint
@ -140,7 +140,7 @@ class StartDateControlSet : TaskEditControlFragment() {
in 1..Long.MAX_VALUE -> DateUtilities.getRelativeDateTime(
activity,
selectedDay + selectedTime,
locale.locale,
locale,
FormatStyle.FULL,
preferences.alwaysDisplayFullDate,
false

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

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

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

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

@ -20,12 +20,12 @@ import org.tasks.databinding.DialogDateTimePickerBinding
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationManager
import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils.millisOfDay
import org.tasks.time.DateTimeUtils.startOfDay
import java.time.format.FormatStyle
import java.util.*
import java.util.Calendar.*
import javax.inject.Inject
@ -145,7 +145,7 @@ class DateTimePicker : BaseDateTimePicker() {
binding.shortcuts.currentDateSelection.text = if (customDate == MULTIPLE_DAYS) {
requireContext().getString(R.string.date_picker_multiple)
} 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.ProgressDialog;
import javax.inject.Inject;
import org.tasks.locale.Locale;
public class DialogBuilder {
private final Activity activity;
private final Locale locale;
@Inject
public DialogBuilder(Activity activity, Locale locale) {
public DialogBuilder(Activity activity) {
this.activity = activity;
this.locale = locale;
}
public AlertDialogBuilder newDialog() {
return new AlertDialogBuilder(activity, locale);
return new AlertDialogBuilder(activity);
}
public AlertDialogBuilder newDialog(int title) {

@ -16,10 +16,10 @@ import org.tasks.R
import org.tasks.databinding.DialogStartDatePickerBinding
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
import org.tasks.locale.Locale
import org.tasks.notifications.NotificationManager
import org.tasks.time.DateTime
import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject
@AndroidEntryPoint
@ -112,7 +112,7 @@ class StartDatePicker : BaseDateTimePicker() {
binding.shortcuts.dateGroup.check(R.id.current_date_selection)
binding.shortcuts.currentDateSelection.visibility = View.VISIBLE
binding.shortcuts.currentDateSelection.text =
DateUtilities.getRelativeDay(context, selectedDay, locale.locale, FormatStyle.MEDIUM)
DateUtilities.getRelativeDay(context, selectedDay, locale, FormatStyle.MEDIUM)
}
}
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.NO_ORDER
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.R
import org.tasks.activities.GoogleTaskListSettingsActivity
@ -15,16 +15,10 @@ import org.tasks.activities.NavigationDrawerCustomization
import org.tasks.activities.TagSettingsActivity
import org.tasks.billing.Inventory
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_LOCAL
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.location.LocationPickerActivity
import org.tasks.preferences.HelpAndFeedback
@ -34,7 +28,7 @@ import org.tasks.ui.NavigationDrawerFragment
import javax.inject.Inject
class FilterProvider @Inject constructor(
@param:ApplicationContext private val context: Context,
@param:ActivityContext private val context: Context,
private val inventory: Inventory,
private val builtInFilterExposer: BuiltInFilterExposer,
private val filterDao: FilterDao,

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

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

@ -2,7 +2,6 @@ package org.tasks.injection
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import org.tasks.locale.Locale
import org.tasks.themes.Theme
import org.tasks.themes.ThemeColor
import javax.inject.Inject
@ -16,8 +15,4 @@ abstract class ThemedInjectingAppCompatActivity protected constructor() : AppCom
tasksTheme.applyThemeAndStatusBarColor(this)
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.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.DialogFragment
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.dialogs.DialogBuilder
import java.util.*
import org.xmlpull.v1.XmlPullParser
import javax.inject.Inject
@AndroidEntryPoint
class LocalePickerDialog : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var locale: Locale
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val locales = ArrayList<Locale>()
locales.add(locale.withLanguage(null)) // device locale
for (override in resources.getStringArray(R.array.localization)) {
locales.add(locale.withLanguage(override))
val locales = ArrayList<java.util.Locale>()
val selected =
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
.newDialog()
.setSingleChoiceItems(display, display.indexOf(locale.displayName)) { dialog, which ->
val locale = locales[which]
.setSingleChoiceItems(display, display.indexOf(selected.getDisplayName(selected))) { dialog, which ->
val locale = locales[which].toLanguageTag()
val data = Intent().putExtra(EXTRA_LOCALE, locale)
targetFragment!!.onActivityResult(targetRequestCode, Activity.RESULT_OK, data)
dialog.dismiss()
targetFragment!!.onActivityResult(targetRequestCode, Activity.RESULT_OK, data)
}
.setNegativeButton(R.string.cancel, null)
.show()

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

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

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

@ -8,6 +8,8 @@ import android.content.res.Configuration
import android.os.Bundle
import android.os.Handler
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import com.todoroo.astrid.api.Filter
@ -15,7 +17,6 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.activities.FilterSelectionActivity
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
@ -26,7 +27,6 @@ import org.tasks.dialogs.ColorWheelPicker
import org.tasks.dialogs.ThemePickerDialog
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.Locale
import org.tasks.locale.LocalePickerDialog
import org.tasks.preferences.DefaultFilterProvider
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.getLauncherColor
import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE
import java.util.*
import javax.inject.Inject
private const val REQUEST_THEME_PICKER = 10001
private const val REQUEST_COLOR_PICKER = 10002
private const val REQUEST_ACCENT_PICKER = 10003
@ -57,7 +59,6 @@ class LookAndFeel : InjectingPreferenceFragment() {
@Inject lateinit var themeAccent: ThemeAccent
@Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var locale: Locale
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var inventory: Inventory
@ -97,7 +98,9 @@ class LookAndFeel : InjectingPreferenceFragment() {
}
val languagePreference = findPreference(R.string.p_language)
updateLocale()
val locale =
Locale.forLanguageTag(AppCompatDelegate.getApplicationLocales().toLanguageTags())
languagePreference.summary = locale.getDisplayName(locale)
languagePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val dialog = LocalePickerDialog.newLocalePickerDialog()
dialog.setTargetFragment(this, REQUEST_LOCALE)
@ -213,18 +216,10 @@ class LookAndFeel : InjectingPreferenceFragment() {
}
REQUEST_LOCALE -> {
if (resultCode == RESULT_OK) {
val newValue: Locale =
data!!.getSerializableExtra(LocalePickerDialog.EXTRA_LOCALE) as Locale
val override: String? = newValue.languageOverride
if (isNullOrEmpty(override)) {
preferences.remove(R.string.p_language)
} else {
preferences.setString(R.string.p_language, override)
}
updateLocale()
if (locale != newValue) {
showRestartDialog()
}
val languageTag = data!!.getStringExtra(LocalePickerDialog.EXTRA_LOCALE)
AppCompatDelegate.setApplicationLocales(
LocaleListCompat.forLanguageTags(languageTag)
)
}
}
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) {
val packageManager: PackageManager? = context?.packageManager
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.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.Locale
import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences
import org.tasks.widget.WidgetPreferences
@ -51,7 +50,6 @@ class ScrollableWidget : InjectingPreferenceFragment() {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var preferences: Preferences
@Inject lateinit var locale: Locale
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
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.toast
import org.tasks.jobs.WorkManager
import org.tasks.locale.Locale
import org.tasks.preferences.IconPreference
import org.tasks.preferences.fragments.MainSettingsFragment.Companion.REQUEST_TASKS_ORG
import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject
@AndroidEntryPoint
@ -255,7 +255,7 @@ class TasksAccount : BaseAccountPreference() {
DateUtilities.getRelativeDay(
requireContext(),
date,
locale.locale,
locale,
FormatStyle.FULL,
false,
true

@ -6,7 +6,7 @@ import com.todoroo.andlib.utility.DateUtilities
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R
import org.tasks.data.Alarm
import org.tasks.locale.Locale
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.math.absoluteValue
@ -46,10 +46,10 @@ class AlarmToString @Inject constructor(
Alarm.TYPE_SNOOZE ->
resources.getString(
R.string.snoozed_until,
DateUtilities.getLongDateStringWithTime(alarm.time, locale.locale)
DateUtilities.getLongDateStringWithTime(alarm.time, locale)
)
else ->
DateUtilities.getLongDateStringWithTime(alarm.time, locale.locale)
DateUtilities.getLongDateStringWithTime(alarm.time, locale)
}
return if (alarm.repeat > 0) {
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.dialogs.DialogBuilder;
import org.tasks.dialogs.MyDatePickerDialog;
import org.tasks.locale.Locale;
import org.tasks.extensions.LocaleKt;
import org.tasks.preferences.ResourceResolver;
import org.tasks.time.DateTime;
import org.tasks.ui.OnItemSelected;
@ -68,6 +68,7 @@ import java.time.format.FormatStyle;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
@ -142,7 +143,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
rrule.setFrequency(WEEKLY.name());
}
DateFormatSymbols dfs = new DateFormatSymbols(locale.getLocale());
DateFormatSymbols dfs = new DateFormatSymbols(locale);
String[] shortWeekdays = dfs.getShortWeekdays();
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);
int dayOfWeekInMonth = dayOfMonthCalendar.get(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.setSelection(FREQUENCIES.indexOf(rrule.getFrequency()));
intervalEditText.setText(locale.formatNumber(rrule.getInterval()));
intervalEditText.setText(LocaleKt.formatNumber(locale, rrule.getInterval()));
repeatUntilAdapter =
new ArrayAdapter<String>(context, 0, repeatUntilOptions) {
@ -284,7 +285,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
};
// set up days of week
Calendar dayOfWeekCalendar = Calendar.getInstance(locale.getLocale());
Calendar dayOfWeekCalendar = Calendar.getInstance(locale);
dayOfWeekCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeekCalendar.getFirstDayOfWeek());
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) {
rrule.setInterval(interval);
if (updateEditText) {
intervalEditText.setText(locale.formatNumber(interval));
intervalEditText.setText(LocaleKt.formatNumber(locale, interval));
}
updateIntervalTextView();
}
@ -427,7 +428,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
private void setCount(int count, boolean updateEditText) {
rrule.setCount(count);
if (updateEditText) {
intervalEditText.setText(locale.formatNumber(count));
intervalEditText.setText(LocaleKt.formatNumber(locale, count));
}
updateCountText();
}
@ -486,7 +487,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
}
private void onRepeatValueChanged(CharSequence text) {
Integer value = locale.parseInteger(text.toString());
Integer value = LocaleKt.parseInteger(locale, text.toString());
if (value == null) {
return;
}
@ -498,7 +499,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
}
private void onRepeatTimesValueChanged(CharSequence text) {
Integer value = locale.parseInteger(text.toString());
Integer value = LocaleKt.parseInteger(locale, text.toString());
if (value == null) {
return;
}
@ -526,12 +527,12 @@ public class CustomRecurrenceDialog extends DialogFragment {
getString(
R.string.repeat_until,
DateUtilities.getRelativeDateTime(
context, repeatUntil, locale.getLocale(), FormatStyle.MEDIUM, true)));
context, repeatUntil, locale, FormatStyle.MEDIUM, true)));
repeatTimes.setVisibility(View.GONE);
repeatTimesText.setVisibility(View.GONE);
} else if (count > 0) {
repeatUntilOptions.add(getString(R.string.repeat_occurs));
repeatTimes.setText(locale.formatNumber(count));
repeatTimes.setText(LocaleKt.formatNumber(locale, count));
repeatTimes.setVisibility(View.VISIBLE);
updateCountText();
repeatTimesText.setVisibility(View.VISIBLE);

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

@ -1,8 +1,16 @@
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.time.LocalDate;
@ -10,20 +18,11 @@ import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Objects;
import java.util.TimeZone;
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 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) {
Calendar calendar = getCalendar();
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(format, Locale.getInstance().getLocale());
new SimpleDateFormat(format, Locale.getDefault());
simpleDateFormat.setCalendar(calendar);
return simpleDateFormat.format(calendar.getTime());
}

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

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

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

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

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

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

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

@ -29,61 +29,6 @@
<item>@string/theme_system_default</item>
</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">
<item>@string/no_due_date</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.databinding:databinding-common: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.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.lifecycle:lifecycle-common:2.4.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- 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.arch.core:core-common:2.1.0 (*)
+| \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- androidx.lifecycle:lifecycle-common-java8:2.5.0-rc01 (c)
++--- androidx.databinding:databinding-adapters:7.2.1
+| +--- androidx.databinding:databinding-runtime: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.kotlinx:kotlinx-coroutines-bom:1.6.1 (*)
+| | \--- 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:2.4.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*)
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.2.0 -> 2.5.0-rc01
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1
+| | +--- androidx.arch.core:core-common: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-runtime:2.1.0 (*)
+| | \--- androidx.lifecycle:lifecycle-common:2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.0 -> 2.4.1 (*)
+| | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.tracing:tracing:1.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.1
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.startup:startup-runtime:1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | \--- androidx.tracing:tracing:1.0.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-runtime:2.2.0 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel: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.5.0-rc01
+| | +--- 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 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 -> 1.6.21 (*)
++--- com.github.tasks:dav4jvm:deb2c9aef8
@ -76,149 +78,155 @@
+| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14: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.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-experimental:1.1.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.concurrent:concurrent-futures:1.0.0
+| | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*)
+| | \--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | \--- 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
+| +--- androidx.databinding:databinding-common: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-ktx:7.2.0 -> 7.2.1 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 (*)
+| +--- androidx.appcompat:appcompat:1.4.1
+| | +--- androidx.annotation:annotation:1.3.0
+| | +--- 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.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05
+| | +--- androidx.activity:activity:1.6.0-alpha05
+| | | +--- 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.tracing:tracing:1.0.0 (*)
+| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 (*)
+| | | +--- 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.core:core:1.9.0-alpha05 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.0-rc01
+| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | | | +--- androidx.core:core:1.0.0 -> 1.8.0-rc02 (*)
+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.4.1 (*)
+| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.4.1 (*)
+| | | +--- androidx.activity:activity:1.2.4 -> 1.4.0 (*)
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.4.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*)
+| | | +--- 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.appcompat:appcompat-resources:1.4.1
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.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.annotation:annotation:1.3.0
+| | +--- androidx.appcompat:appcompat-resources:1.6.0-alpha05
+| | | +--- 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.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.vectordrawable:vectordrawable-animated:1.1.0
+| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*)
+| | | +--- androidx.interpolator:interpolator:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.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.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.2.0 -> 1.8.0-rc02 (*)
+| | | \--- androidx.customview:customview:1.1.0 (*)
+| | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| | +--- androidx.emoji2:emoji2:1.0.0
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- androidx.core:core:1.2.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.customview:customview:1.1.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.emoji2:emoji2:1.2.0-alpha04
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-process:2.4.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*)
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- 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.emoji2:emoji2-views-helper:1.0.0
+| | | +--- androidx.emoji2:emoji2:1.0.0 (*)
+| | +--- androidx.emoji2:emoji2-views-helper:1.2.0-alpha04
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | \--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*)
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | \--- androidx.resourceinspection:resourceinspection-annotation:1.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.emoji2:emoji2:1.2.0-alpha04 (*)
+| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core-ktx:1.2.0 -> 1.9.0-alpha05 (*)
+| | | +--- 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.annotation:annotation:1.0.0 -> 1.3.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-runtime:2.1.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-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-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: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.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.4.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.7.0-alpha02
+| | +--- 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.coordinatorlayout:coordinatorlayout:1.1.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.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.2
+| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.4.1 (*)
+| | | +--- androidx.core:core:1.3.2 -> 1.8.0-rc02 (*)
+| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.6.0-alpha05 (*)
+| | | +--- androidx.core:core:1.3.2 -> 1.9.0-alpha05 (*)
+| | | \--- 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.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.legacy:legacy-support-core-utils:1.0.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.annotation:annotation:1.0.0 -> 1.3.0
+| | | +--- androidx.loader:loader:1.0.0 (*)
@ -228,22 +236,22 @@
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.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.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.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.transition:transition:1.2.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.vectordrawable:vectordrawable:1.1.0 (*)
+| | \--- androidx.viewpager2:viewpager2:1.0.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.fragment:fragment:1.1.0 -> 1.4.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 (*)
+| \--- org.conscrypt:conscrypt-android:2.5.2
++--- com.github.tasks.opentasks:opentasks-provider:a1faa1b
@ -258,12 +266,12 @@
+| +--- com.google.dagger:hilt-core:2.42
+| | +--- com.google.dagger:dagger:2.42 (*)
+| | \--- 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.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.3.1 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*)
+| +--- androidx.lifecycle:lifecycle-common: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 (*)
+| +--- javax.inject:javax.inject:1
+| \--- 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
+| | +--- androidx.lifecycle:lifecycle-livedata:2.1.0 -> 2.4.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-common:2.4.2
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -289,42 +297,43 @@
+| | | \--- androidx.annotation:annotation-experimental:1.1.0
+| | +--- androidx.sqlite:sqlite: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 (*)
+| \--- com.google.dagger:hilt-android:2.35 -> 2.42 (*)
++--- androidx.fragment:fragment-ktx:1.4.0
+| +--- androidx.fragment:fragment:1.4.0 (*)
+| +--- androidx.activity:activity-ktx:1.2.3 -> 1.4.0
+| | +--- androidx.activity:activity:1.4.0 (*)
+| | +--- androidx.core:core-ktx:1.1.0 -> 1.8.0-rc02 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01
+| +--- androidx.activity:activity-ktx:1.2.3 -> 1.6.0-alpha05
+| | +--- androidx.activity:activity:1.6.0-alpha05 (*)
+| | +--- androidx.core:core-ktx:1.1.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-rc01 (*)
+| | +--- androidx.savedstate:savedstate-ktx: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.5.31 -> 1.6.21 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- 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
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 -> 1.6.21 (*)
+| | \--- androidx.collection:collection:1.1.0 (*)
+| +--- 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 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 (*)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.room:room-ktx:2.4.2
+| +--- androidx.room:room-common:2.4.2 (*)
+| +--- androidx.room:room-runtime:2.4.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*)
+| \--- 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-common:2.1.2
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | \--- androidx.arch.core:core-common: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.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*)
++--- io.noties.markwon:core:4.6.2
@ -355,11 +364,11 @@
++--- androidx.constraintlayout:constraintlayout:2.1.2 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.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.preference:preference:1.1.1
+| +--- androidx.appcompat:appcompat:1.1.0 -> 1.4.1 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*)
+| +--- androidx.appcompat:appcompat:1.1.0 -> 1.6.0-alpha05 (*)
+| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.fragment:fragment:1.2.4 -> 1.4.0 (*)
+| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.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:okhttp:3.12.1 -> 4.9.3 (*)
++--- 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
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- androidx.browser:browser:1.3.0
+| +--- androidx.collection:collection:1.1.0 (*)
+| +--- androidx.concurrent:concurrent-futures: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
+| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
++--- org.osmdroid:osmdroid-android:6.1.11
++--- androidx.compose.ui:ui:1.2.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.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.compose.runtime:runtime:1.2.0-rc01
+| | +--- 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-unit: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-common:1.6.21
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (*)
+| +--- androidx.compose.ui:ui-unit: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.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 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.4.1
+| | +--- androidx.lifecycle:lifecycle-common:2.4.1 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.5.0-rc01
+| | +--- 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.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.profileinstaller:profileinstaller:1.2.0-rc01
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | \--- androidx.startup:startup-runtime:1.1.1 (*)
@ -498,7 +507,7 @@
+| | | +--- androidx.compose.ui:ui: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.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
+| | +--- androidx.compose.runtime:runtime:1.1.1 -> 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-text: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-viewmodel: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.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
++--- androidx.compose.runtime:runtime-livedata:1.2.0-rc01
@ -541,8 +550,8 @@
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
++--- com.google.android.material:compose-theme-adapter:1.1.11
+| +--- androidx.appcompat:appcompat:1.4.1 (*)
+| +--- androidx.core:core-ktx:1.8.0-rc02 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05 (*)
+| +--- 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.material:material:1.2.0-beta03 -> 1.2.0-rc01 (*)
+| +--- com.google.android.material:material:1.7.0-alpha02 (*)
@ -550,7 +559,7 @@
++--- androidx.activity:activity-compose:1.4.0
+| +--- androidx.compose.runtime:runtime: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 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.compose.material:material-icons-extended:1.2.0-rc01

@ -6,16 +6,16 @@
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.databinding:databinding-common: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.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.lifecycle:lifecycle-common:2.4.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- 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.arch.core:core-common:2.1.0 (*)
+| \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- androidx.lifecycle:lifecycle-common-java8:2.5.0-rc01 (c)
++--- androidx.databinding:databinding-adapters:7.2.1
+| +--- androidx.databinding:databinding-runtime: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.kotlinx:kotlinx-coroutines-bom:1.6.1 (*)
+| | \--- 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:2.4.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*)
+| | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.2.0 -> 2.5.0-rc01
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1
+| | +--- androidx.arch.core:core-common: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-runtime:2.1.0 (*)
+| | \--- androidx.lifecycle:lifecycle-common:2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.0 -> 2.4.1 (*)
+| | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.tracing:tracing:1.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | \--- androidx.lifecycle:lifecycle-common:2.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.2.0 -> 2.4.1
+| | +--- androidx.lifecycle:lifecycle-runtime:2.4.1 -> 2.5.0-rc01 (*)
+| | +--- androidx.startup:startup-runtime:1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | \--- androidx.tracing:tracing:1.0.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-runtime:2.2.0 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel: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.5.0-rc01
+| | +--- 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 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 -> 1.6.21 (*)
++--- 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-basement:18.0.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-experimental:1.1.0
+| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.concurrent:concurrent-futures:1.0.0
+| | | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*)
+| | | \--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.5.0-rc01 (*)
+| | | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.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.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.core:core:1.8.0-rc02 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | | \--- androidx.core:core:1.9.0-alpha05 (c)
+| | +--- 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.core:core:1.0.0 -> 1.9.0-alpha05 (*)
+| | | \--- 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.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.collection:collection: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.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-viewmodel:2.0.0 -> 2.4.1 (*)
+| | +--- androidx.activity:activity:1.2.4 -> 1.4.0
+| | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.5.0-rc01 (*)
+| | +--- androidx.activity:activity:1.2.4 -> 1.6.0-alpha05
+| | | +--- 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.tracing:tracing:1.0.0 (*)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*)
+| | | +--- androidx.core:core:1.9.0-alpha05 (*)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.5.0-rc01 (*)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | | +--- 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.annotation:annotation-experimental:1.0.0 -> 1.1.0
+| | \--- 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.legacy:legacy-support-core-utils:1.0.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.annotation:annotation:1.0.0 -> 1.3.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-measurement-impl:20.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-measurement-base:20.1.0 (*)
+| | | \--- 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-base:18.0.1
+| | +--- 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 (*)
+| | +--- com.google.android.gms:play-services-basement:18.0.0 (*)
+| | \--- 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
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 -> 1.6.21 (*)
+| +--- 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 (*)
++--- 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.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.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.appcompat:appcompat-resources:1.6.0-alpha05
+| | | +--- 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.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.vectordrawable:vectordrawable-animated:1.1.0
+| | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*)
+| | | +--- androidx.interpolator:interpolator:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.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.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.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| | +--- androidx.emoji2:emoji2:1.0.0
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | +--- androidx.emoji2:emoji2:1.2.0-alpha04
+| | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | | +--- androidx.lifecycle:lifecycle-process:2.4.0 (*)
+| | | +--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*)
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | +--- 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.emoji2:emoji2-views-helper:1.0.0
+| | | +--- androidx.emoji2:emoji2:1.0.0 (*)
+| | +--- androidx.emoji2:emoji2-views-helper:1.2.0-alpha04
+| | | +--- androidx.collection:collection:1.1.0 (*)
+| | | \--- androidx.core:core:1.3.0 -> 1.8.0-rc02 (*)
+| | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| | \--- androidx.resourceinspection:resourceinspection-annotation:1.0.0
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | | +--- androidx.core:core:1.3.0 -> 1.9.0-alpha05 (*)
+| | | \--- androidx.emoji2:emoji2:1.2.0-alpha04 (*)
+| | +--- androidx.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| | +--- 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.loader:loader:1.0.0 (*)
+| +--- 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 (*)
@ -312,74 +320,74 @@
+| +--- commons-io:commons-io:2.6
+| +--- org.slf4j:slf4j-jdk14: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
+| +--- androidx.databinding:databinding-common: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-ktx:7.2.0 -> 7.2.1 (*)
+| +--- 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.annotation:annotation:1.0.0 -> 1.3.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-runtime:2.1.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-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-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: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.kotlinx:kotlinx-coroutines-core:1.5.0 -> 1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.4.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.30 -> 1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0 -> 1.6.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.0-rc01 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.7.0-alpha02
+| | +--- 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.coordinatorlayout:coordinatorlayout:1.1.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.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.2
+| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.4.1 (*)
+| | | +--- androidx.core:core:1.3.2 -> 1.8.0-rc02 (*)
+| | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.6.0-alpha05 (*)
+| | | +--- androidx.core:core:1.3.2 -> 1.9.0-alpha05 (*)
+| | | \--- 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.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.legacy:legacy-support-core-utils:1.0.0 (*)
+| | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.1.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.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.collection:collection:1.0.0 -> 1.1.0 (*)
+| | +--- androidx.transition:transition:1.2.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.vectordrawable:vectordrawable:1.1.0 (*)
+| | \--- androidx.viewpager2:viewpager2:1.0.0
+| | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| | +--- androidx.fragment:fragment:1.1.0 -> 1.4.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 (*)
+| \--- org.conscrypt:conscrypt-android:2.5.2
++--- com.github.tasks.opentasks:opentasks-provider:a1faa1b
@ -394,12 +402,12 @@
+| +--- com.google.dagger:hilt-core:2.42
+| | +--- com.google.dagger:dagger:2.42 (*)
+| | \--- 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.fragment:fragment:1.3.6 -> 1.4.0 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.3.1 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 (*)
+| +--- androidx.lifecycle:lifecycle-common: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 (*)
+| +--- javax.inject:javax.inject:1
+| \--- 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
+| | +--- androidx.lifecycle:lifecycle-livedata:2.1.0 -> 2.4.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-common:2.4.2
+| | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
@ -425,42 +433,43 @@
+| | | \--- androidx.annotation:annotation-experimental:1.1.0
+| | +--- androidx.sqlite:sqlite: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 (*)
+| \--- com.google.dagger:hilt-android:2.35 -> 2.42 (*)
++--- androidx.fragment:fragment-ktx:1.4.0
+| +--- androidx.fragment:fragment:1.4.0 (*)
+| +--- androidx.activity:activity-ktx:1.2.3 -> 1.4.0
+| | +--- androidx.activity:activity:1.4.0 (*)
+| | +--- androidx.core:core-ktx:1.1.0 -> 1.8.0-rc02 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 -> 2.4.1 (*)
+| | +--- androidx.savedstate:savedstate-ktx:1.1.0 -> 1.2.0-rc01
+| +--- androidx.activity:activity-ktx:1.2.3 -> 1.6.0-alpha05
+| | +--- androidx.activity:activity:1.6.0-alpha05 (*)
+| | +--- androidx.core:core-ktx:1.1.0 -> 1.9.0-alpha05 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-rc01 (*)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-rc01 (*)
+| | +--- androidx.savedstate:savedstate-ktx: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.5.31 -> 1.6.21 (*)
+| +--- androidx.core:core-ktx:1.2.0 -> 1.8.0-rc02 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
+| | \--- 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
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 -> 1.6.21 (*)
+| | \--- androidx.collection:collection:1.1.0 (*)
+| +--- 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 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 (*)
++--- androidx.lifecycle:lifecycle-runtime-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.5.0-rc01 (*)
++--- androidx.room:room-ktx:2.4.2
+| +--- androidx.room:room-common:2.4.2 (*)
+| +--- androidx.room:room-runtime:2.4.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.10 -> 1.6.21 (*)
+| \--- 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-common:2.1.2
+| | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
+| | \--- androidx.arch.core:core-common: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.recyclerview:recyclerview:1.0.0 -> 1.1.0 (*)
++--- io.noties.markwon:core:4.6.2
@ -491,11 +500,11 @@
++--- androidx.constraintlayout:constraintlayout:2.1.2 (*)
++--- androidx.swiperefreshlayout:swiperefreshlayout:1.1.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.preference:preference:1.1.1
+| +--- androidx.appcompat:appcompat:1.1.0 -> 1.4.1 (*)
+| +--- androidx.core:core:1.1.0 -> 1.8.0-rc02 (*)
+| +--- androidx.appcompat:appcompat:1.1.0 -> 1.6.0-alpha05 (*)
+| +--- androidx.core:core:1.1.0 -> 1.9.0-alpha05 (*)
+| +--- androidx.fragment:fragment:1.2.4 -> 1.4.0 (*)
+| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.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:okhttp:3.12.1 -> 4.9.3 (*)
++--- 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
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| \--- androidx.browser:browser:1.3.0
+| +--- androidx.collection:collection:1.1.0 (*)
+| +--- androidx.concurrent:concurrent-futures: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
+| \--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
++--- org.osmdroid:osmdroid-android:6.1.11
++--- androidx.compose.ui:ui:1.2.0-rc01
+| +--- androidx.annotation:annotation:1.1.0 -> 1.3.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.compose.runtime:runtime:1.2.0-rc01
+| | +--- 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-unit: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-common:1.6.21
+| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (*)
+| +--- androidx.compose.ui:ui-unit: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.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 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.4.1
+| | +--- androidx.lifecycle:lifecycle-common:2.4.1 (*)
+| | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0
+| +--- androidx.lifecycle:lifecycle-runtime:2.3.0 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.4.1 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.3.0 -> 2.5.0-rc01
+| | +--- 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.5.0-rc01 (*)
+| +--- androidx.lifecycle:lifecycle-viewmodel:2.3.0 -> 2.5.0-rc01 (*)
+| +--- androidx.profileinstaller:profileinstaller:1.2.0-rc01
+| | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0
+| | \--- androidx.startup:startup-runtime:1.1.1 (*)
@ -634,7 +643,7 @@
+| | | +--- androidx.compose.ui:ui: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.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
+| | +--- androidx.compose.runtime:runtime:1.1.1 -> 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-text: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-viewmodel: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.5.0-rc01 (*)
+| +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
++--- androidx.compose.runtime:runtime-livedata:1.2.0-rc01
@ -677,8 +686,8 @@
+| +--- androidx.lifecycle:lifecycle-livedata:2.2.0 -> 2.4.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
++--- com.google.android.material:compose-theme-adapter:1.1.11
+| +--- androidx.appcompat:appcompat:1.4.1 (*)
+| +--- androidx.core:core-ktx:1.8.0-rc02 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.0-alpha05 (*)
+| +--- 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.material:material:1.2.0-beta03 -> 1.2.0-rc01 (*)
+| +--- com.google.android.material:material:1.7.0-alpha02 (*)
@ -686,7 +695,7 @@
++--- androidx.activity:activity-compose:1.4.0
+| +--- androidx.compose.runtime:runtime: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 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
++--- androidx.compose.material:material-icons-extended:1.2.0-rc01

Loading…
Cancel
Save