Compare commits

...

14 Commits

Author SHA1 Message Date
Alex Baker a66b3a0847
Merge branch 'main' into TagPickerCompose 4 weeks ago
Alex Baker 782f4d6d7c Fix swipe to snooze time 4 weeks ago
elmuffo a1da71d3e1
Swipe to snooze (#2839) 4 weeks ago
Alex Baker c793a300cc Add preference summary 4 weeks ago
Ilya Bizyaev bf84bf9e82 [Feature] Add an option to allow adding tasks without unlock
I often find myself picking up the phone just to write down a task, so
I've added a notification drawer quick setting to speed things up.
However, when I use this button from the lock screen, I have to unlock
my device first, which is annoying. I would like to be able to add (not
view) tasks without the need to unlock my phone.

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

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

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

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

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

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

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

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

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
2 months ago

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

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

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

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

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

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

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

@ -136,58 +136,72 @@
<string name="repeat_option_custom">Personalizado…</string>
<plurals name="task_count">
<item quantity="one">%d tarefa</item>
<item quantity="many">%d tarefas</item>
<item quantity="other">%d tarefas</item>
</plurals>
<plurals name="repeat_times">
<item quantity="one">vez</item>
<item quantity="many">vezes</item>
<item quantity="other">vezes</item>
</plurals>
<plurals name="repeat_minutes">
<item quantity="one">minuto</item>
<item quantity="many">minutos</item>
<item quantity="other">minutos</item>
</plurals>
<plurals name="repeat_n_minutes">
<item quantity="one">%d minuto</item>
<item quantity="many">%d minutos</item>
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="repeat_hours">
<item quantity="one">hora</item>
<item quantity="many">horas</item>
<item quantity="other">horas</item>
</plurals>
<plurals name="repeat_n_hours">
<item quantity="one">%d hora</item>
<item quantity="many">%d horas</item>
<item quantity="other">%d horas</item>
</plurals>
<plurals name="repeat_days">
<item quantity="one">dia</item>
<item quantity="many">dias</item>
<item quantity="other">dias</item>
</plurals>
<plurals name="repeat_n_days">
<item quantity="one">%d dia</item>
<item quantity="many">%d dias</item>
<item quantity="other">%d dias</item>
</plurals>
<plurals name="repeat_weeks">
<item quantity="one">semana</item>
<item quantity="many">semanas</item>
<item quantity="other">semanas</item>
</plurals>
<plurals name="repeat_n_weeks">
<item quantity="one">%d semana</item>
<item quantity="many">%d semanas</item>
<item quantity="other">%d semanas</item>
</plurals>
<plurals name="repeat_months">
<item quantity="one">mês</item>
<item quantity="many">meses</item>
<item quantity="other">meses</item>
</plurals>
<plurals name="repeat_n_months">
<item quantity="one">%d mês</item>
<item quantity="many">%d meses</item>
<item quantity="other">%d meses</item>
</plurals>
<plurals name="repeat_years">
<item quantity="one">ano</item>
<item quantity="many">anos</item>
<item quantity="other">anos</item>
</plurals>
<plurals name="repeat_n_years">
<item quantity="one">%d ano</item>
<item quantity="many">%d anos</item>
<item quantity="other">%d anos</item>
</plurals>
<string name="repeat_type_due">data de vencimento</string>
@ -210,6 +224,7 @@
<string name="voice_command_added_task">Tarefa adicionada</string>
<plurals name="Ntasks">
<item quantity="one">1 tarefa</item>
<item quantity="many">%d tarefas</item>
<item quantity="other">%d tarefas</item>
</plurals>
<string name="today">Hoje</string>
@ -473,6 +488,7 @@
<string name="today_lowercase">hoje</string>
<plurals name="subtask_count">
<item quantity="one">%d sub-tarefa</item>
<item quantity="many">%d sub-tarefas</item>
<item quantity="other">%d sub-tarefas</item>
</plurals>
<string name="CFC_list_name">Na lista…</string>
@ -636,6 +652,7 @@
<string name="repeat_type_completion_capitalized">Data de conclusão</string>
<plurals name="list_count">
<item quantity="one">%d lista</item>
<item quantity="many">%d listas</item>
<item quantity="other">%d listas</item>
</plurals>
<string name="filter_any_start_date">Qualquer data de início</string>
@ -656,18 +673,22 @@
<string name="top">Superior</string>
<plurals name="reminder_minutes">
<item quantity="one">Minuto</item>
<item quantity="many">Minutos</item>
<item quantity="other">Minutos</item>
</plurals>
<plurals name="reminder_hours">
<item quantity="one">Hora</item>
<item quantity="many">Horas</item>
<item quantity="other">Horas</item>
</plurals>
<plurals name="reminder_days">
<item quantity="one">Dia</item>
<item quantity="many">Dias</item>
<item quantity="other">Dias</item>
</plurals>
<plurals name="reminder_week">
<item quantity="one">Semana</item>
<item quantity="many">Semanas</item>
<item quantity="other">Semanas</item>
</plurals>
<string name="when_started">Quando começar</string>
@ -697,7 +718,7 @@
<string name="sign_in_to_tasks_disclosure">Seu endereço de e-mail e ID de conta serão transmitidos e armazenados pelo Tasks.org. Estas informações serão usadas para autenticação e para fornecer-lhe anúncios importantes relacionados ao serviço. Estas informações não serão compartilhadas com ninguém.</string>
<string name="enable_reminders">Ativar lembretes</string>
<string name="microsoft_selection_description">Sincronizar com a sua conta Microsoft pessoal</string>
<string name="enable_reminders_description">Os lembretes estão desativados nas configurações do Android</string>
<string name="enable_reminders_description">Os lembretes estão desabilitados nas Configurações do Android</string>
<string name="TEA_creation_date">Data de criação</string>
<string name="sign_in">Entrar</string>
<string name="repeats_custom_recurrence">Recorrência personalizada</string>
@ -712,7 +733,7 @@
<string name="sort_list">Por lista</string>
<string name="sort_sorting">Listagem</string>
<string name="repeat_monthly_on_the_nth_weekday">Mensalmente na %1$s %2$s</string>
<string name="sort_completed">Por data de conclusão</string>
<string name="sort_completed">Por hora de conclusão</string>
<string name="sort_completion_group">Conclusão %s</string>
<string name="repeats_every">Repete a cada</string>
<string name="repeats_weekly_on">Repete em</string>

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

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

@ -328,9 +328,9 @@
<string name="repeats_from">Şundan sonra yinele</string>
<string name="repeats_single">%s yineler</string>
<string name="repeats_single_on">%2$s gününde %1$s yineler</string>
<string name="repeats_single_until">%2$s gününe dek %1$s yineler</string>
<string name="repeats_single_until">%1$s yineler, %2$s biter</string>
<string name="repeats_single_number_of_times">%1$s yineler, %2$d %3$s gerçekleşir</string>
<string name="repeats_single_on_until">%3$s gününe dek %2$s gününde %1$s yineler</string>
<string name="repeats_single_on_until">%2$s gününde %1$s yineler, %3$s biter</string>
<string name="repeats_single_on_number_of_times">%2$s gününde %1$s yineler, %3$d %4$s gerçekleşir</string>
<string name="repeats_minutely">Dakikalık</string>
<string name="repeats_hourly">Saatlik</string>
@ -340,9 +340,9 @@
<string name="repeats_yearly">Yıllık</string>
<string name="repeats_plural">Her %s yineler</string>
<string name="repeats_plural_on">%2$s gününde her %1$s yineler</string>
<string name="repeats_plural_until">%2$s gününe dek her %1$s yineler</string>
<string name="repeats_plural_until">Her %1$s yineler, %2$s biter</string>
<string name="repeats_plural_number_of_times">Her %1$s yineler, %2$d %3$s gerçekleşir</string>
<string name="repeats_plural_on_until">%3$s gününe dek %2$s gününde her %1$s yineler</string>
<string name="repeats_plural_on_until">%2$s gününde her %1$s yineler, %3$s biter</string>
<string name="repeats_plural_on_number_of_times">%2$s gününde her %1$s yineler, %3$d %4$s gerçekleşir</string>
<string name="dont_add_to_calendar">Takvime ekleme</string>
<string name="default_calendar">Öntanımlı takvim</string>
@ -725,4 +725,5 @@
<string name="sort_grouping">Kümeleme</string>
<string name="change_priority">Önceliği değiştir</string>
<string name="clear_completed_tasks_count">%s silinecek</string>
<string name="theme_dynamic">Dinamik</string>
</resources>

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

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

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

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

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

@ -1,4 +1,4 @@
++--- androidx.databinding:viewbinding:8.3.1
++--- androidx.databinding:viewbinding:8.3.2
+| \--- androidx.annotation:annotation:1.0.0 -> 1.7.1
+| \--- androidx.annotation:annotation-jvm:1.7.1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22
@ -6,16 +6,16 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.22 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.22 (c)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 (c)
++--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-runtime:8.3.1
++--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-runtime:8.3.2
+| +--- androidx.collection:collection:1.0.0 -> 1.4.0
+| | \--- androidx.collection:collection-jvm:1.4.0
+| | +--- androidx.annotation:annotation:1.7.0 -> 1.7.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- androidx.collection:collection-ktx:1.4.0 (c)
+| | \--- androidx.collection:collection-ktx:1.3.0 -> 1.4.0 (c)
+| +--- androidx.databinding:databinding-common:8.3.1
+| +--- androidx.databinding:viewbinding:8.3.1 (*)
+| +--- androidx.databinding:databinding-common:8.3.2
+| +--- androidx.databinding:viewbinding:8.3.2 (*)
+| \--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- androidx.arch.core:core-common:2.2.0
@ -80,11 +80,11 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
++--- androidx.databinding:databinding-adapters:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
+| \--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-ktx:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
++--- androidx.databinding:databinding-adapters:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| \--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-ktx:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.7.3 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.7.0
@ -263,10 +263,10 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| \--- androidx.core:core:1.12.0 (c)
++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.2
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 1.9.22 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.1
+| | +--- androidx.activity:activity:1.6.0 -> 1.8.2
@ -1018,7 +1018,7 @@
++--- androidx.compose.ui:ui-viewbinding -> 1.6.4
+| +--- androidx.compose.ui:ui:1.6.4 (*)
+| +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.1 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.2 (*)
+| +--- androidx.fragment:fragment-ktx:1.3.2 -> 1.6.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- androidx.compose.ui:ui:1.6.4 (c)

@ -1,4 +1,4 @@
++--- androidx.databinding:viewbinding:8.3.1
++--- androidx.databinding:viewbinding:8.3.2
+| \--- androidx.annotation:annotation:1.0.0 -> 1.7.1
+| \--- androidx.annotation:annotation-jvm:1.7.1
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.9.22
@ -6,16 +6,16 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.22 (c)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.22 (c)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 (c)
++--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-runtime:8.3.1
++--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-runtime:8.3.2
+| +--- androidx.collection:collection:1.0.0 -> 1.4.0
+| | \--- androidx.collection:collection-jvm:1.4.0
+| | +--- androidx.annotation:annotation:1.7.0 -> 1.7.1 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| | +--- androidx.collection:collection-ktx:1.4.0 (c)
+| | \--- androidx.collection:collection-ktx:1.3.0 -> 1.4.0 (c)
+| +--- androidx.databinding:databinding-common:8.3.1
+| +--- androidx.databinding:viewbinding:8.3.1 (*)
+| +--- androidx.databinding:databinding-common:8.3.2
+| +--- androidx.databinding:viewbinding:8.3.2 (*)
+| \--- androidx.lifecycle:lifecycle-runtime:2.6.1 -> 2.7.0
+| +--- androidx.annotation:annotation:1.1.0 -> 1.7.1 (*)
+| +--- androidx.arch.core:core-common:2.2.0
@ -81,11 +81,11 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 (c)
++--- androidx.databinding:databinding-adapters:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
+| \--- androidx.databinding:databinding-common:8.3.1
++--- androidx.databinding:databinding-ktx:8.3.1
+| +--- androidx.databinding:databinding-runtime:8.3.1 (*)
++--- androidx.databinding:databinding-adapters:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| \--- androidx.databinding:databinding-common:8.3.2
++--- androidx.databinding:databinding-ktx:8.3.2
+| +--- androidx.databinding:databinding-runtime:8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20 -> 1.9.22 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1 -> 1.7.3 (*)
+| +--- androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 -> 2.7.0
@ -605,10 +605,10 @@
+| | \--- org.slf4j:slf4j-api:2.0.3
+| \--- androidx.core:core-ktx:1.9.0 -> 1.12.0 (*)
++--- com.github.bitfireAT:cert4android:7814052
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.1
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.1 (*)
+| +--- androidx.databinding:databinding-common:7.2.0 -> 8.3.2
+| +--- androidx.databinding:databinding-runtime:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-adapters:7.2.0 -> 8.3.2 (*)
+| +--- androidx.databinding:databinding-ktx:7.2.0 -> 8.3.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21 -> 1.9.22 (*)
+| +--- androidx.appcompat:appcompat:1.4.1 -> 1.6.1 (*)
+| +--- androidx.cardview:cardview:1.0.0
@ -1243,7 +1243,7 @@
++--- androidx.compose.ui:ui-viewbinding -> 1.6.4
+| +--- androidx.compose.ui:ui:1.6.4 (*)
+| +--- androidx.compose.ui:ui-util:1.6.4 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.1 (*)
+| +--- androidx.databinding:viewbinding:4.1.2 -> 8.3.2 (*)
+| +--- androidx.fragment:fragment-ktx:1.3.2 -> 1.6.2 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.22 (*)
+| +--- androidx.compose.ui:ui:1.6.4 (c)

@ -15,15 +15,15 @@ dashclock-api = "2.0.0"
dav4jvm = "2.2.1"
desugar_jdk_libs = "2.0.4"
etebase = "2.3.2"
firebase = "32.0.0"
firebase-crashlytics-gradle = "2.9.5"
flipper = "0.191.0"
fragment-ktx = "1.5.7"
google-oauth2 = "0.27.0"
google-api-drive = "v3-rev20230423-2.0.0"
google-api-tasks = "v1-rev20230401-2.0.0"
google-services = "4.3.15"
gradle = "8.2.1"
firebase = "32.7.4"
firebase-crashlytics-gradle = "2.9.9"
flipper = "0.250.0"
fragment-ktx = "1.6.2"
google-oauth2 = "1.20.0"
google-api-drive = "v3-rev20240123-2.0.0"
google-api-tasks = "v1-rev20240225-2.0.0"
google-services = "4.4.1"
gradle = "8.3.2"
gson = "2.10.1"
hilt = "1.2.0"
ical4android = "12fe73a"

Loading…
Cancel
Save