From 6f73765fd2d17bb07b61d93db65feea23a047da5 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 21 Jun 2022 00:15:06 -0500 Subject: [PATCH] Per-app language configuration --- app/build.gradle.kts | 2 +- .../tasks/repeats/RepeatRuleToStringTest.kt | 3 +- app/src/main/AndroidManifest.xml | 12 +- .../todoroo/andlib/utility/DateUtilities.java | 14 +- .../astrid/activity/TaskListFragment.kt | 52 +-- .../todoroo/astrid/adapter/FilterAdapter.kt | 1 - .../astrid/adapter/FilterViewHolder.kt | 9 +- .../astrid/adapter/NavigationDrawerAdapter.kt | 1 - .../astrid/core/BuiltInFilterExposer.kt | 5 +- .../astrid/core/CriterionViewHolder.kt | 13 +- .../astrid/core/CustomFilterAdapter.java | 11 +- .../astrid/notes/CommentsController.kt | 3 +- .../todoroo/astrid/ui/StartDateControlSet.kt | 4 +- app/src/main/java/org/tasks/Tasks.kt | 2 - .../activities/FilterSettingsActivity.kt | 8 +- .../tasks/activities/PlaceSettingsActivity.kt | 3 +- .../org/tasks/dialogs/AlertDialogBuilder.java | 24 +- .../java/org/tasks/dialogs/DateTimePicker.kt | 4 +- .../java/org/tasks/dialogs/DialogBuilder.java | 8 +- .../java/org/tasks/dialogs/StartDatePicker.kt | 4 +- .../main/java/org/tasks/extensions/Locale.kt | 17 + .../java/org/tasks/filters/FilterProvider.kt | 12 +- .../org/tasks/injection/ApplicationModule.kt | 8 +- .../injection/InjectingAppCompatActivity.kt | 5 - .../ThemedInjectingAppCompatActivity.kt | 5 - .../main/java/org/tasks/locale/Locale.java | 208 ------------ .../org/tasks/locale/LocalePickerDialog.kt | 33 +- .../preferences/DefaultFilterProvider.kt | 15 +- .../java/org/tasks/preferences/Device.java | 20 +- .../preferences/fragments/DateAndTime.kt | 4 +- .../preferences/fragments/LookAndFeel.kt | 33 +- .../preferences/fragments/ScrollableWidget.kt | 2 - .../preferences/fragments/TasksAccount.kt | 4 +- .../java/org/tasks/reminders/AlarmToString.kt | 6 +- .../tasks/repeats/CustomRecurrenceDialog.java | 23 +- .../org/tasks/repeats/RepeatRuleToString.kt | 13 +- .../main/java/org/tasks/time/DateTime.java | 25 +- .../main/java/org/tasks/ui/ChipProvider.kt | 5 +- .../java/org/tasks/ui/DeadlineControlSet.kt | 4 +- .../java/org/tasks/ui/SubtaskControlSet.kt | 2 - .../java/org/tasks/widget/ChipProvider.kt | 13 +- .../tasks/widget/ScrollableViewsFactory.kt | 35 +- .../widget/ScrollableWidgetUpdateService.java | 5 +- .../main/java/org/tasks/widget/TasksWidget.kt | 3 - app/src/main/res/values/arrays.xml | 55 --- app/src/main/res/xml/locales_config.xml | 55 +++ deps_fdroid.txt | 313 +++++++++--------- deps_googleplay.txt | 295 +++++++++-------- 48 files changed, 573 insertions(+), 828 deletions(-) create mode 100644 app/src/main/java/org/tasks/extensions/Locale.kt delete mode 100644 app/src/main/java/org/tasks/locale/Locale.java create mode 100644 app/src/main/res/xml/locales_config.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f9b8b2039..2429feef4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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}") diff --git a/app/src/androidTest/java/org/tasks/repeats/RepeatRuleToStringTest.kt b/app/src/androidTest/java/org/tasks/repeats/RepeatRuleToStringTest.kt index 391df7281..c7db063e6 100644 --- a/app/src/androidTest/java/org/tasks/repeats/RepeatRuleToStringTest.kt +++ b/app/src/androidTest/java/org/tasks/repeats/RepeatRuleToStringTest.kt @@ -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) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0651489c9..56e5bb397 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -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"> + + + + { 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() diff --git a/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt index caa086e03..080694f20 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt @@ -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 diff --git a/app/src/main/java/com/todoroo/astrid/adapter/FilterViewHolder.kt b/app/src/main/java/com/todoroo/astrid/adapter/FilterViewHolder.kt index b5239a7c2..d228447a2 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/FilterViewHolder.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/FilterViewHolder.kt @@ -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, diff --git a/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt index ef4c1ff19..762554d7b 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt @@ -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 diff --git a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.kt b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.kt index ab170fa5d..a97393f8b 100644 --- a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.kt +++ b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.kt @@ -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 @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) { diff --git a/app/src/main/java/com/todoroo/astrid/core/CriterionViewHolder.kt b/app/src/main/java/com/todoroo/astrid/core/CriterionViewHolder.kt index d5ba38c83..f88b3adeb 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CriterionViewHolder.kt +++ b/app/src/main/java/com/todoroo/astrid/core/CriterionViewHolder.kt @@ -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 diff --git a/app/src/main/java/com/todoroo/astrid/core/CustomFilterAdapter.java b/app/src/main/java/com/todoroo/astrid/core/CustomFilterAdapter.java index 1ba6a4ff7..1acad3666 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CustomFilterAdapter.java +++ b/app/src/main/java/com/todoroo/astrid/core/CustomFilterAdapter.java @@ -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 implements ListUpdateCallback { @@ -27,7 +32,7 @@ public class CustomFilterAdapter extends RecyclerView.Adapter differ; public CustomFilterAdapter( - List objects, Locale locale, Function1 onClick) { + List objects, Locale locale, Function1 onClick) { this.locale = locale; this.onClick = onClick; differ = new AsyncListDiffer<>(this, new AsyncDifferConfig.Builder<>(new CriterionDiffCallback()).build()); diff --git a/app/src/main/java/com/todoroo/astrid/notes/CommentsController.kt b/app/src/main/java/com/todoroo/astrid/notes/CommentsController.kt index bfb28e35f..d96fa3927 100644 --- a/app/src/main/java/com/todoroo/astrid/notes/CommentsController.kt +++ b/app/src/main/java/com/todoroo/astrid/notes/CommentsController.kt @@ -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(R.id.date) - date.text = DateUtilities.getLongDateStringWithTime(item.created!!, locale.locale) + date.text = DateUtilities.getLongDateStringWithTime(item.created!!, locale) // picture val commentPictureView = view.findViewById(R.id.comment_picture) diff --git a/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt b/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt index 6a1dad249..a0e3539f8 100644 --- a/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt @@ -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 diff --git a/app/src/main/java/org/tasks/Tasks.kt b/app/src/main/java/org/tasks/Tasks.kt index 3ce8bd45d..243e45740 100644 --- a/app/src/main/java/org/tasks/Tasks.kt +++ b/app/src/main/java/org/tasks/Tasks.kt @@ -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() } diff --git a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt index 010978df0..082566398 100644 --- a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt @@ -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 diff --git a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt index e3473e12d..45a62c95c 100644 --- a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt @@ -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 diff --git a/app/src/main/java/org/tasks/dialogs/AlertDialogBuilder.java b/app/src/main/java/org/tasks/dialogs/AlertDialogBuilder.java index fffb0d2f8..13743c240 100644 --- a/app/src/main/java/org/tasks/dialogs/AlertDialogBuilder.java +++ b/app/src/main/java/org/tasks/dialogs/AlertDialogBuilder.java @@ -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; } } diff --git a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt index e4337853e..c1b2f199f 100644 --- a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt @@ -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) } } } diff --git a/app/src/main/java/org/tasks/dialogs/DialogBuilder.java b/app/src/main/java/org/tasks/dialogs/DialogBuilder.java index 527daa891..27af965e5 100644 --- a/app/src/main/java/org/tasks/dialogs/DialogBuilder.java +++ b/app/src/main/java/org/tasks/dialogs/DialogBuilder.java @@ -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) { diff --git a/app/src/main/java/org/tasks/dialogs/StartDatePicker.kt b/app/src/main/java/org/tasks/dialogs/StartDatePicker.kt index 6d90682fb..f68bd1ed2 100644 --- a/app/src/main/java/org/tasks/dialogs/StartDatePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/StartDatePicker.kt @@ -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())) { diff --git a/app/src/main/java/org/tasks/extensions/Locale.kt b/app/src/main/java/org/tasks/extensions/Locale.kt new file mode 100644 index 000000000..f16a0b746 --- /dev/null +++ b/app/src/main/java/org/tasks/extensions/Locale.kt @@ -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 + } +} diff --git a/app/src/main/java/org/tasks/filters/FilterProvider.kt b/app/src/main/java/org/tasks/filters/FilterProvider.kt index 850224162..5379cc630 100644 --- a/app/src/main/java/org/tasks/filters/FilterProvider.kt +++ b/app/src/main/java/org/tasks/filters/FilterProvider.kt @@ -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, diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.kt b/app/src/main/java/org/tasks/injection/ApplicationModule.kt index 0a7cec470..649d2b66e 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.kt +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.kt @@ -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 diff --git a/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt b/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt index b07e76bfc..a66662b63 100644 --- a/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt +++ b/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt @@ -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) - } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt b/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt index 3ec1a27f3..76d036b90 100644 --- a/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt +++ b/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt @@ -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) - } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/locale/Locale.java b/app/src/main/java/org/tasks/locale/Locale.java deleted file mode 100644 index 61e3e1c86..000000000 --- a/app/src/main/java/org/tasks/locale/Locale.java +++ /dev/null @@ -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); - } - } - } -} diff --git a/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt b/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt index 8b46fe87c..a12a7ee77 100644 --- a/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt +++ b/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt @@ -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() - locales.add(locale.withLanguage(null)) // device locale - for (override in resources.getStringArray(R.array.localization)) { - locales.add(locale.withLanguage(override)) + + val locales = ArrayList() + 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() + 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() diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index a8fd9b21b..aade4d7c2 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -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, diff --git a/app/src/main/java/org/tasks/preferences/Device.java b/app/src/main/java/org/tasks/preferences/Device.java index 4e60d8143..4b7b2a1c3 100644 --- a/app/src/main/java/org/tasks/preferences/Device.java +++ b/app/src/main/java/org/tasks/preferences/Device.java @@ -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: " diff --git a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt index 6abf80d82..e76b3526b 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt @@ -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) diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 2f0b26134..936251dbe 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -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) { diff --git a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt index 2031c1480..37b7293a3 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt @@ -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 diff --git a/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt b/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt index 08612e861..8d2a8c2a0 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt @@ -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 diff --git a/app/src/main/java/org/tasks/reminders/AlarmToString.kt b/app/src/main/java/org/tasks/reminders/AlarmToString.kt index 2bc36618f..e4fdf3fdb 100644 --- a/app/src/main/java/org/tasks/reminders/AlarmToString.kt +++ b/app/src/main/java/org/tasks/reminders/AlarmToString.kt @@ -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) diff --git a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java index 11cac1dac..f02d1a748 100644 --- a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java @@ -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(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); diff --git a/app/src/main/java/org/tasks/repeats/RepeatRuleToString.kt b/app/src/main/java/org/tasks/repeats/RepeatRuleToString.kt index d3bf406cd..fc46bcaee 100644 --- a/app/src/main/java/org/tasks/repeats/RepeatRuleToString.kt +++ b/app/src/main/java/org/tasks/repeats/RepeatRuleToString.kt @@ -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 = 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) { diff --git a/app/src/main/java/org/tasks/time/DateTime.java b/app/src/main/java/org/tasks/time/DateTime.java index 874a9edfe..4496e4507 100644 --- a/app/src/main/java/org/tasks/time/DateTime.java +++ b/app/src/main/java/org/tasks/time/DateTime.java @@ -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()); } diff --git a/app/src/main/java/org/tasks/ui/ChipProvider.kt b/app/src/main/java/org/tasks/ui/ChipProvider.kt index 37b642131..042b097ef 100644 --- a/app/src/main/java/org/tasks/ui/ChipProvider.kt +++ b/app/src/main/java/org/tasks/ui/ChipProvider.kt @@ -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 diff --git a/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt b/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt index 0ce681a06..f6210d748 100644 --- a/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt +++ b/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt @@ -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 diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt index 5d8c80089..a47843f28 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt @@ -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 diff --git a/app/src/main/java/org/tasks/widget/ChipProvider.kt b/app/src/main/java/org/tasks/widget/ChipProvider.kt index e9f628eb3..a4aa41462 100644 --- a/app/src/main/java/org/tasks/widget/ChipProvider.kt +++ b/app/src/main/java/org/tasks/widget/ChipProvider.kt @@ -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 diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt index 4ee6652a2..f65c27613 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt +++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt @@ -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 } diff --git a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java index 900113c1a..4a6d9c87b 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java +++ b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java @@ -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, diff --git a/app/src/main/java/org/tasks/widget/TasksWidget.kt b/app/src/main/java/org/tasks/widget/TasksWidget.kt index 2438e2e02..52115b443 100644 --- a/app/src/main/java/org/tasks/widget/TasksWidget.kt +++ b/app/src/main/java/org/tasks/widget/TasksWidget.kt @@ -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( diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index ef579c4b4..e5174dca0 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -29,61 +29,6 @@ @string/theme_system_default - - af-rZA - ar - bg-bg - bn-rBD - ca - cs - cv - da - de - el - en - eo - es - et - eu - fa - fi - fr - gl - hr - hu - hy - ia - id - it - iw - ja - kn - ko - krl - lt - ml - nb - nl - pl - pt - pt-br - ro - ru - si - sk - sl-si - sr - sv - ta - th - tl - tr - uk - ur - zh-cn - zh-tw - - @string/no_due_date @string/today diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml new file mode 100644 index 000000000..802636116 --- /dev/null +++ b/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps_fdroid.txt b/deps_fdroid.txt index 14b5fee93..ac3300bd1 100644 --- a/deps_fdroid.txt +++ b/deps_fdroid.txt @@ -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 diff --git a/deps_googleplay.txt b/deps_googleplay.txt index 8af0c2943..f2acf389e 100644 --- a/deps_googleplay.txt +++ b/deps_googleplay.txt @@ -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