From 02aae4c5c2fc07f35124a06c4a8a0b6a0a4a7244 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 28 Sep 2017 00:30:25 -0500 Subject: [PATCH] Recurrence picker improvements * Improve recurrence description * Move from due/completion to edit screen --- .../astrid/repeats/RepeatControlSet.java | 172 +++++++++++++----- .../notifications/NotificationManager.java | 4 +- .../tasks/repeats/CustomRecurrenceDialog.java | 43 ++--- .../main/res/layout/control_set_repeat.xml | 15 +- .../res/layout/control_set_repeat_display.xml | 39 +++- app/src/main/res/layout/frequency_item.xml | 2 + app/src/main/res/values-ar/strings.xml | 8 - app/src/main/res/values-bg-rBG/strings.xml | 10 - app/src/main/res/values-ca/strings.xml | 2 - app/src/main/res/values-cs/strings.xml | 10 - app/src/main/res/values-da/strings.xml | 2 - app/src/main/res/values-de/strings.xml | 10 - app/src/main/res/values-el/strings.xml | 10 - app/src/main/res/values-es/strings.xml | 10 - app/src/main/res/values-fa/strings.xml | 10 - app/src/main/res/values-fi/strings.xml | 10 - app/src/main/res/values-fr/strings.xml | 9 - app/src/main/res/values-gl/strings.xml | 10 - app/src/main/res/values-hu/strings.xml | 10 - app/src/main/res/values-it/strings.xml | 10 - app/src/main/res/values-iw/strings.xml | 10 - app/src/main/res/values-ja/strings.xml | 10 - app/src/main/res/values-ko/strings.xml | 10 - app/src/main/res/values-nb/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 10 - app/src/main/res/values-pl/strings.xml | 10 - app/src/main/res/values-pt-rBR/strings.xml | 10 - app/src/main/res/values-pt/strings.xml | 10 - app/src/main/res/values-ru/strings.xml | 10 - app/src/main/res/values-sk/strings.xml | 10 - app/src/main/res/values-sl-rSI/strings.xml | 10 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 10 - app/src/main/res/values-tr/strings.xml | 10 - app/src/main/res/values-uk/strings.xml | 10 - app/src/main/res/values-zh-rCN/strings.xml | 10 - app/src/main/res/values-zh-rTW/strings.xml | 10 - app/src/main/res/values/arrays.xml | 9 - app/src/main/res/values/strings.xml | 68 +++++-- 39 files changed, 233 insertions(+), 392 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java index d81f3f9b6..8e0d757d6 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -7,15 +7,24 @@ package com.todoroo.astrid.repeats; import android.app.Activity; import android.content.Context; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.drawable.DrawableCompat; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.Spinner; import android.widget.TextView; +import com.google.common.base.Joiner; import com.google.common.base.Strings; +import com.google.common.primitives.Booleans; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; import com.google.ical.values.Weekday; @@ -27,15 +36,19 @@ import org.tasks.R; import org.tasks.dialogs.DialogBuilder; import org.tasks.injection.ForActivity; import org.tasks.injection.FragmentComponent; +import org.tasks.locale.Locale; import org.tasks.preferences.Preferences; import org.tasks.repeats.CustomRecurrenceDialog; import org.tasks.themes.Theme; import org.tasks.time.DateTime; +import org.tasks.ui.HiddenTopArrayAdapter; import org.tasks.ui.SingleCheckedArrayAdapter; import org.tasks.ui.TaskEditControlFragment; +import java.text.DateFormatSymbols; import java.text.ParseException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.List; @@ -43,11 +56,12 @@ import javax.inject.Inject; import butterknife.BindView; import butterknife.OnClick; +import butterknife.OnItemSelected; import timber.log.Timber; import static android.support.v4.content.ContextCompat.getColor; +import static com.google.common.collect.Iterables.any; import static com.google.common.collect.Lists.newArrayList; -import static org.tasks.date.DateTimeUtils.newDateTime; import static org.tasks.repeats.CustomRecurrenceDialog.newCustomRecurrenceDialog; /** @@ -63,14 +77,12 @@ public class RepeatControlSet extends TaskEditControlFragment private static final String FRAG_TAG_CUSTOM_RECURRENCE = "frag_tag_custom_recurrence"; @Override - public void onSelected(int frequency, int interval, long repeatUntilValue, - boolean repeatAfterCompletion, boolean[] isChecked) { + public void onSelected(int frequency, int interval, long repeatUntilValue, boolean[] isChecked) { doRepeat = true; this.interval = interval; this.frequency = frequency; this.repeatUntilValue = repeatUntilValue; this.isChecked = isChecked; - this.repeatAfterCompletion = repeatAfterCompletion; refreshDisplayView(); } @@ -101,8 +113,11 @@ public class RepeatControlSet extends TaskEditControlFragment @Inject Preferences preferences; @Inject @ForActivity Context context; @Inject Theme theme; + @Inject Locale locale; @BindView(R.id.display_row_edit) TextView displayView; + @BindView(R.id.repeatType) Spinner typeSpinner; + @BindView(R.id.repeatTypeContainer) LinearLayout repeatTypeContainer; private String recurrence; private int interval; @@ -110,6 +125,8 @@ public class RepeatControlSet extends TaskEditControlFragment private long repeatUntilValue; private boolean[] isChecked; private final Weekday[] weekdays = new Weekday[7]; + private final List repeatTypes = new ArrayList<>(); + private HiddenTopArrayAdapter typeAdapter; private RepeatChangedListener callback; @@ -125,6 +142,29 @@ public class RepeatControlSet extends TaskEditControlFragment repeatAfterCompletion = savedInstanceState.getBoolean(EXTRA_REPEAT_AFTER_COMPLETION); } + repeatTypes.add(""); + repeatTypes.addAll(Arrays.asList(getResources().getStringArray(R.array.repeat_type))); + typeAdapter = new HiddenTopArrayAdapter(context, 0, repeatTypes) { + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + int selectedItemPosition = position; + if (parent instanceof AdapterView) { + selectedItemPosition = ((AdapterView) parent).getSelectedItemPosition(); + } + TextView tv = (TextView) inflater.inflate(android.R.layout.simple_spinner_item, parent, false); + tv.setPadding(0, 0, 0, 0); + tv.setText(repeatTypes.get(selectedItemPosition)); + return tv; + } + }; + Drawable drawable = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.textfield_underline_black)); + drawable.mutate(); + DrawableCompat.setTint(drawable, getColor(context, R.color.text_primary)); + typeSpinner.setBackgroundDrawable(drawable); + typeSpinner.setAdapter(typeAdapter); + typeSpinner.setSelection(repeatAfterCompletion ? TYPE_COMPLETION_DATE : TYPE_DUE_DATE); + Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); for(int i = 0; i < 7; i++) { @@ -177,6 +217,13 @@ public class RepeatControlSet extends TaskEditControlFragment return view; } + @OnItemSelected(R.id.repeatType) + public void onRepeatTypeChanged(Spinner spinner, int position) { + repeatAfterCompletion = position == TYPE_COMPLETION_DATE; + repeatTypes.set(0, repeatAfterCompletion ? repeatTypes.get(2) : repeatTypes.get(1)); + typeAdapter.notifyDataSetChanged(); + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -202,16 +249,11 @@ public class RepeatControlSet extends TaskEditControlFragment if (!doRepeat) { return false; } - if (frequency == FREQUENCY_WEEKS) { - for (boolean checked : isChecked) { - if (checked) { - return true; - } - } - } - return frequency == FREQUENCY_HOURS || + return frequency == FREQUENCY_WEEKS && any(Booleans.asList(isChecked), b -> b) || + frequency == FREQUENCY_HOURS || frequency == FREQUENCY_MINUTES || - !(repeatUntilValue == 0 && interval == 1 && !repeatAfterCompletion); + repeatUntilValue != 0 || + interval != 1; } @OnClick(R.id.display_row_edit) @@ -380,52 +422,94 @@ public class RepeatControlSet extends TaskEditControlFragment if (doRepeat) { displayView.setText(getRepeatString()); displayView.setTextColor(getColor(context, R.color.text_primary)); + repeatTypeContainer.setVisibility(View.VISIBLE); } else { displayView.setText(R.string.repeat_option_does_not_repeat); displayView.setTextColor(getColor(context, R.color.text_tertiary)); + repeatTypeContainer.setVisibility(View.GONE); } } private String getRepeatString() { - if (!isCustomValue()) { - switch (frequency) { - case FREQUENCY_DAYS: - return getString(R.string.repeat_option_every_day); - case FREQUENCY_WEEKS: - return getString(R.string.repeat_option_every_week); - case FREQUENCY_MONTHS: - return getString(R.string.repeat_option_every_month); - case FREQUENCY_YEARS: - return getString(R.string.repeat_option_every_year); + if (interval == 1) { + String frequencyString = getString(getSingleFrequencyResource(frequency)); + if (frequency == FREQUENCY_WEEKS && any(Booleans.asList(isChecked), b -> b)) { + String dayString = getDayString(); + if (repeatUntilValue > 0) { + return getString(R.string.repeats_single_on_until, frequencyString, dayString, DateUtilities.getLongDateString(new DateTime(repeatUntilValue))); + } else { + return getString(R.string.repeats_single_on, frequencyString, dayString); + } + } else if (repeatUntilValue > 0) { + return getString(R.string.repeats_single_until, frequencyString, DateUtilities.getLongDateString(new DateTime(repeatUntilValue))); + } else { + return getString(R.string.repeats_single, frequencyString); + } + } else { + int plural = getFrequencyPlural(frequency); + String frequencyPlural = getResources().getQuantityString(plural, interval, interval); + if (frequency == FREQUENCY_WEEKS && any(Booleans.asList(isChecked), b -> b)) { + String dayString = getDayString(); + if (repeatUntilValue > 0) { + return getString(R.string.repeats_plural_on_until, frequencyPlural, dayString, DateUtilities.getLongDateString(new DateTime(repeatUntilValue))); + } else { + return getString(R.string.repeats_plural_on, frequencyPlural, dayString); + } + } else if (repeatUntilValue > 0) { + return getString(R.string.repeats_plural_until, frequencyPlural, DateUtilities.getLongDateString(new DateTime(repeatUntilValue))); + } else { + return getString(R.string.repeats_plural, frequencyPlural); } } + } - int arrayResource = R.array.repeat_interval; - - String[] dates = getResources().getStringArray( - arrayResource); - String date = String.format("%s %s", interval, dates[frequency]); //$NON-NLS-1$ - if (repeatUntilValue > 0) { - return getString(R.string.repeat_detail_duedate_until, date, getDisplayString()); - } else { - return getString(R.string.repeat_detail_duedate, date); // Every freq int + private String getDayString() { + DateFormatSymbols dfs = new DateFormatSymbols(locale.getLocale()); + String[] shortWeekdays = dfs.getShortWeekdays(); + List days = new ArrayList<>(); + for (int i = 0 ; i < 7 ; i++) { + if (isChecked[i]) { + days.add(shortWeekdays[i + 1]); + } } + return Joiner.on(getString(R.string.list_separator_with_space)).join(days); } - private String getDisplayString() { - return getDisplayString(context, repeatUntilValue); + private int getSingleFrequencyResource(int frequency) { + switch (frequency) { + case FREQUENCY_MINUTES: + return R.string.repeats_minutely; + case FREQUENCY_HOURS: + return R.string.repeats_hourly; + case FREQUENCY_DAYS: + return R.string.repeats_daily; + case FREQUENCY_WEEKS: + return R.string.repeats_weekly; + case FREQUENCY_MONTHS: + return R.string.repeats_monthly; + case FREQUENCY_YEARS: + return R.string.repeats_yearly; + default: + throw new RuntimeException("Invalid frequency: " + frequency); + } } - public static String getDisplayString(Context context, long repeatUntilValue) { - StringBuilder displayString = new StringBuilder(); - DateTime d = newDateTime(repeatUntilValue); - if (d.getMillis() > 0) { - displayString.append(DateUtilities.getDateString(d)); - if (Task.hasDueTime(repeatUntilValue)) { - displayString.append(", "); //$NON-NLS-1$ //$NON-NLS-2$ - displayString.append(DateUtilities.getTimeString(context, repeatUntilValue)); - } + private int getFrequencyPlural(int frequency) { + switch (frequency) { + case FREQUENCY_MINUTES: + return R.plurals.repeat_n_minutes; + case FREQUENCY_HOURS: + return R.plurals.repeat_n_hours; + case FREQUENCY_DAYS: + return R.plurals.repeat_n_days; + case FREQUENCY_WEEKS: + return R.plurals.repeat_n_weeks; + case FREQUENCY_MONTHS: + return R.plurals.repeat_n_months; + case FREQUENCY_YEARS: + return R.plurals.repeat_n_years; + default: + throw new RuntimeException("Invalid frequency: " + frequency); } - return displayString.toString(); } } diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.java b/app/src/main/java/org/tasks/notifications/NotificationManager.java index aa8bd114f..e50848f76 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.java +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.java @@ -259,7 +259,7 @@ public class NotificationManager { } NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NotificationManager.NOTIFICATION_CHANNEL_DEFAULT) .setContentTitle(summaryTitle) - .setContentText(Joiner.on(", ").join(titles)) + .setContentText(Joiner.on(context.getString(R.string.list_separator_with_space)).join(titles)) .setShowWhen(true) .setWhen(when) .setSmallIcon(R.drawable.ic_done_all_white_24dp) @@ -269,7 +269,7 @@ public class NotificationManager { .setContentIntent(PendingIntent.getActivity(context, 0, TaskIntents.getTaskListIntent(context, filter), PendingIntent.FLAG_UPDATE_CURRENT)) .setGroupSummary(true) .setGroup(GROUP_KEY) - .setTicker(Joiner.on(", ").join(ticker)) + .setTicker(Joiner.on(context.getString(R.string.list_separator_with_space)).join(ticker)) .setGroupAlertBehavior(notify ? NotificationCompat.GROUP_ALERT_SUMMARY : NotificationCompat.GROUP_ALERT_CHILDREN); Intent snoozeIntent = new Intent(context, SnoozeActivity.class); diff --git a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java index f31816251..4a2779ea7 100644 --- a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java @@ -19,6 +19,8 @@ import android.widget.TextView; import com.appeaser.sublimepickerlibrary.drawables.CheckableDrawable; import com.appeaser.sublimepickerlibrary.recurrencepicker.WeekButton; +import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.astrid.data.Task; import com.todoroo.astrid.repeats.RepeatControlSet; import org.tasks.R; @@ -31,6 +33,7 @@ import org.tasks.locale.Locale; import org.tasks.preferences.ResourceResolver; import org.tasks.themes.Theme; import org.tasks.themes.ThemeAccent; +import org.tasks.time.DateTime; import java.text.DateFormatSymbols; import java.util.ArrayList; @@ -52,6 +55,7 @@ import static com.todoroo.astrid.repeats.RepeatControlSet.FREQUENCY_MONTHS; import static com.todoroo.astrid.repeats.RepeatControlSet.FREQUENCY_WEEKS; import static com.todoroo.astrid.repeats.RepeatControlSet.FREQUENCY_YEARS; import static com.todoroo.astrid.repeats.RepeatControlSet.TYPE_COMPLETION_DATE; +import static org.tasks.date.DateTimeUtils.newDateTime; public class CustomRecurrenceDialog extends InjectingDialogFragment { @@ -62,8 +66,7 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { } public interface CustomRecurrenceCallback { - void onSelected(int frequency, int interval, long repeatUntilValue, - boolean repeatAfterCompletion, boolean[] isChecked); + void onSelected(int frequency, int interval, long repeatUntilValue, boolean[] isChecked); } private static final int REQUEST_PICK_DATE = 505; @@ -84,7 +87,6 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { @BindView(R.id.week_day_7) WeekButton day7; @BindView(R.id.repeat_until) Spinner repeatUntilSpinner; - @BindView(R.id.repeatType) Spinner typeSpinner; @BindView(R.id.frequency) Spinner frequencySpinner; @BindView(R.id.repeatValue) EditText intervalEditText; @BindView(R.id.intervalText) TextView intervalTextView; @@ -97,8 +99,6 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { private int interval; private long repeatUntilValue; - private boolean repeatAfterCompletion; - @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -115,10 +115,6 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { intervalEditText.setSelectAllOnFocus(true); intervalEditText.selectAll(); - ArrayAdapter typeAdapter = new ArrayAdapter<>(context, R.layout.simple_spinner_item, getResources().getStringArray(R.array.repeat_type)); - typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - typeSpinner.setAdapter(typeAdapter); - repeatUntilAdapter = new ArrayAdapter<>(context, R.layout.simple_spinner_item, repeatUntilOptions); repeatUntilAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); repeatUntilSpinner.setAdapter(repeatUntilAdapter); @@ -137,13 +133,13 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { // set up days of week ThemeAccent accent = theme.getThemeAccent(); - DateFormatSymbols dfs = new DateFormatSymbols(); + DateFormatSymbols dfs = new DateFormatSymbols(locale.getLocale()); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); String[] shortWeekdays = dfs.getShortWeekdays(); for(int i = 0; i < 7; i++) { final int index = i; - WeekButton weekButton = weekButtons[i]; + WeekButton weekButton = weekButtons[index]; int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); String text = shortWeekdays[dayOfWeek]; weekButton.setBackgroundDrawable(new CheckableDrawable(accent.getAccentColor(), false, expandedWidthHeight)); @@ -155,14 +151,11 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { calendar.add(Calendar.DATE, 1); } - typeSpinner.setSelection(repeatAfterCompletion ? TYPE_COMPLETION_DATE : RepeatControlSet.TYPE_DUE_DATE); - return dialogBuilder.newDialog() .setView(dialogView) .setPositiveButton(android.R.string.ok, (dialog12, which) -> ((CustomRecurrenceCallback) getTargetFragment()) - .onSelected(frequency, interval, repeatUntilValue, - repeatAfterCompletion, isChecked)) + .onSelected(frequency, interval, repeatUntilValue, isChecked)) .setNegativeButton(android.R.string.cancel, null) .setOnCancelListener(DialogInterface::dismiss) .show(); @@ -201,11 +194,6 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { } } - @OnItemSelected(R.id.repeatType) - public void onRepeatTypeChanged(Spinner spinner, int position) { - repeatAfterCompletion = position == TYPE_COMPLETION_DATE; - } - @OnItemSelected(R.id.repeat_until) public void onRepeatUntilChanged(Spinner spinner, int position) { if (repeatUntilOptions.size() == 2) { @@ -261,7 +249,7 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { private void updateRepeatUntilOptions() { repeatUntilOptions.clear(); if (repeatUntilValue > 0) { - repeatUntilOptions.add(getString(R.string.repeat_until, RepeatControlSet.getDisplayString(context, repeatUntilValue))); + repeatUntilOptions.add(getString(R.string.repeat_until, getDisplayString(context, repeatUntilValue))); } repeatUntilOptions.add(getString(R.string.repeat_forever)); repeatUntilOptions.add(getString(R.string.repeat_until, "").trim()); @@ -285,4 +273,17 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { protected void inject(DialogFragmentComponent component) { component.inject(this); } + + private static String getDisplayString(Context context, long repeatUntilValue) { + StringBuilder displayString = new StringBuilder(); + DateTime d = newDateTime(repeatUntilValue); + if (d.getMillis() > 0) { + displayString.append(DateUtilities.getDateString(d)); + if (Task.hasDueTime(repeatUntilValue)) { + displayString.append(", "); //$NON-NLS-1$ //$NON-NLS-2$ + displayString.append(DateUtilities.getTimeString(context, repeatUntilValue)); + } + } + return displayString.toString(); + } } diff --git a/app/src/main/res/layout/control_set_repeat.xml b/app/src/main/res/layout/control_set_repeat.xml index 4773078be..6145ec81b 100644 --- a/app/src/main/res/layout/control_set_repeat.xml +++ b/app/src/main/res/layout/control_set_repeat.xml @@ -10,7 +10,7 @@ android:orientation="vertical"> @@ -59,6 +59,7 @@ android:layout_height="wrap_content" android:ems="3" android:focusable="true" + android:imeOptions="flagNoExtractUi" android:focusableInTouchMode="true" android:gravity="center_horizontal" android:inputType="number" @@ -81,18 +82,6 @@ - - + android:baselineAligned="false" + android:orientation="vertical"> + + + android:paddingTop="@dimen/task_edit_drawable_padding_top_bottom" + android:visibility="gone"> + + + android:background="@null" + android:textColor="?attr/colorPrimary" /> diff --git a/app/src/main/res/layout/frequency_item.xml b/app/src/main/res/layout/frequency_item.xml index a17a7e8e8..852f5079d 100644 --- a/app/src/main/res/layout/frequency_item.xml +++ b/app/src/main/res/layout/frequency_item.xml @@ -11,4 +11,6 @@ android:paddingStart="0dp" android:paddingTop="12dp" android:singleLine="true" + android:layout_gravity="start" + android:textAlignment="viewStart" android:textColor="?fab_text" /> diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index ec6e9c76f..30b6360b6 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -113,14 +113,6 @@ مرتين في الاسبوع شهري مرتين في الشهر - أيام - أسابيع - أشهُر - ساعات - دقائق - سنين - من تاريخ الموعد - من تاريخ الاتمام تكرار دائم غير مصنف مؤقت diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 6f0541e34..3774cf53b 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -199,16 +199,6 @@ два пъти седмично месечно на два месеца - Ден(дни) - Седмица(и) - Месец(и) - Час(ове) - Минута(и) - Година(и) - от краен срок - от датата на завършване - Всеки %s - Всеки %1$s\nдо %2$s Повтаряй завинаги Повтаряй до %s %1$s е насрочено за %2$s diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index cdbb6a172..43fc9c01b 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -95,8 +95,6 @@ Inici de Silenci Final de Silenci Notificacions al Atzar - Cada %s - Cada %1$s\nfins %2$s Repeteix indefinidament Repeteix fins %s A cap llista diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b68ae3a95..f63a5b18f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -182,16 +182,6 @@ každých ctrnáct dní měsíčně každý druhý měsíc - Dnů - Týdnů - Měsíců - Hodin - Minuta(-y) - Rok(y) - od data splnění - od data dokončení - Každý %s - Každý %1$s\n až do %2$s Opakovat stále Opakovat až do %s Vytvořit nový štítek diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 7dadd74d9..08bfdb90f 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -83,8 +83,6 @@ Stille timer start Stille timer slut Tilfældige påmindelser - Hver %s - Hver %1$s\nindtil %2$s Gentag uendeligt Gentag indtil %s Slet opgave diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3a081d4a4..fe6efd017 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -192,16 +192,6 @@ vierzehntägig monatlich alle zwei Monate - Tag(e) - Woche(n) - Monat(e) - Stunde(n) - Minute(n) - Jahr(e) - bei Fälligkeit - bei Erledigung - Jede(n) %s - Jede(n) %1$s\nbis %2$s Endlos wiederholen Wiederhole bis %s %1$s verschoben um %2$s diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 32aae8017..76a59bdfc 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -162,16 +162,6 @@ κάθε δυο εβδομάδες μηνιαία διμηνιαία - Μέρα(ες) - Εβδομαδα(ές) - Μήνας(ές) - Ώρα(ές) - Λεπτό(ά) - Χρόνος(ια) - απο την ημερομηνία λήξης - απο την ημερομηνία ολοκλήρωσης - Κάθε %s - Κάθε %1$s\nμέχρι %2$s Επανάληψη επ\'αορίστου Επανάληψη μέχρι %s Μη κατηγοριοποιημένο diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c35905d6d..343dbe253 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -195,16 +195,6 @@ quincenalmente mensualmente bimensualmente - Día(s) - Semana(s) - Mes(es) - Hora(s) - Minuto(s) - Año(s) - desde la fecha de vencimiento - Desde la fecha de finalización - Cada %s - Cada %1$s\nhasta %2$s Repetir por siempre Repetir hasta %s %1$s He reprogramado esta tarea recurrente para %2$s diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 090d83e01..006427663 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -143,16 +143,6 @@ یک هفته در میان هر ماه یک ماه درمیان - روز(ها) - هفته(ها) - ماه(ها) - ساعت(ها) - دقیقه(ها) - سال(ها) - از روز موعود - از تاریخ اتمام - هر %s - هر %1$s\nتا %2$s تکرار بینهایت تکرار تا %s ایجاد تگ جدید diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 266810713..7ed33ca31 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -199,16 +199,6 @@ Jokatoinen viikko Kuukausittain Jokatoinen kuukausi - Päivä(t) - Viikko(t) - Kuukausi - Tunnit - Minuutit - Vuosi - Määräpäivästä - valmistumispäivästä - Joka %s - Joka %1$s\nkunnes %2$s Toista loputtomiin Toista kunnes %s %1$s uudelleenajastettu %2$s diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bd5e778c4..6da6f90b0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -193,15 +193,6 @@ bi-hebdomadaire mensuel bi-mensuel - Jour(s) - Semaine(s) - Mois - Heure(s) - Année(s) - à partir de la date due - à partir de la date d\'achèvement - Tous les %s - Tous les %1$s jusqu\'à %2$s Répéter indéfiniment Répéter jusqu\'à %s %1$s replanifiée à %2$s diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index ae838a312..5460c36d8 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -195,16 +195,6 @@ quincenalmente mensualmente bimensualmente - Día(s) - Semana(s) - Mes(es) - Hora(s) - Minuto(s) - Año(s) - desde la fecha de vencimiento - Desde la fecha de finalización - Cada %s - Cada %1$s\nhasta %2$s Repetir por siempre Repetir hasta %s %1$s He reprogramado esta tarea recurrente para %2$s diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2d63ec5b6..151932672 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -199,16 +199,6 @@ Kéthetente Havonta Kéthavonta - Nap - Hét - Hónap - Óra - Perc - Év - A határidőtől - A befejezés időpontjától - Minden %s - Minden %1$s\neddig: %2$s Ismétlés örökké Ismétlés eddig: %s %1$s újraütemezve ekkorra: %2$s diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 5b2e05f18..76507b874 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -197,16 +197,6 @@ bi-settimanalmente mensilmente bi-mensilmente - Giorno(i) - Settimana(e) - Mese(i) - Ora(e) - Minuto(i) - Anno(i) - dalla data di scadenza - dalla data di completamento - Ogni %s - Ogni %1$s\nfino %2$s Ripeti all\'infinito Ripeti fino %s %1$s ripianificata per %2$s diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 13acc1321..12d82caef 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -196,16 +196,6 @@ דו שבועי חודשי דו חודשי - יום/ימים - שבוע/(ות) - חודש/ים - שעה/ות - דקה/דקות - שנה/שנים - מתאריך היעד - מהיום שהמשימה הושלמה - כל %s - כל %1$s\nעד %2$s חזור לנצח חזרה עד %s %1$s תזמן מחדש משימה חוזרת זו ל־%2$s diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index bb34c8733..34ab3b0ea 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -197,16 +197,6 @@ 一週間おき 毎月 一ヶ月おき - 日毎 - 週毎 - か月毎 - 時間毎 - - - 期限から - 完了日から - %s - %1$s 毎\n%2$s まで 永久に繰り返す %s まで繰り返す %1$s を %2$s にスケジュール変更しました diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index f8fc28048..e519bb689 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -200,16 +200,6 @@ 격주로 매달 격월로 - 일마다 - 주마다 - 월마다 - 시마다 - 분마다 - 년마다 - 마감일로부터 - 완료일로부터 - 매 %s - 매 %1$s 마다\n%2$s 까지 영원히 반복하기 %s 까지 반복 %1$s 이 %2$s 로 변경되었습니다 diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 6de5da786..dba901942 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -73,7 +73,6 @@ Stilletimer start Stilletimer slutt Tilfeldige påminnelser - Hver %s Tidtaker aktiv for %s! Oppgaver med tidtaker Snakk for å skape en oppgave diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3f0e43889..baf596155 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -196,16 +196,6 @@ tweewekelijks maandelijks tweemaandelijks - Dag(en) - week/weken - maand(en) - uur/uren - Minu(u)t(en) - Ja(a)r(en) - vanaf einddatum - vanaf datum voltooid - Elke %s - Elke %1$s\ntot %2$s Altijd herhalen Herhalen tot %s %1$s opnieuw ingepland op %2$s diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 979c20c57..dc34e0f72 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -195,16 +195,6 @@ raz na dwa tygodnie raz w miesiącu raz na dwa miesiące - Dzień/Dni - Tydzień/Tygodni(e) - Miesiąc/Miesiący(e) - Godzinę(y)/Godzin - Minut(a/y) - Rok/lata - od planowanego terminu - od daty ukończenia - Każdy %s - Co %1$s\ndo %2$s Powtarzaj bez końca Powtarzaj do %s %1$s przełożone na %2$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e270ce84a..b9b2d0a29 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -192,16 +192,6 @@ a cada duas semanas mensalmente a cada dois meses - Dia(s) - Semana(s) - Mês(es) - Hora(s) - Minuto(s) - Ano(s) - à partir do dia do prazo final - à partir do dia de realização - a cada %s - Todo %1$s\naté %2$s Repetir para sempre Repetir até %s %1$s remarcada para %2$s diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 148385801..d834890bd 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -179,16 +179,6 @@ bissemanal mensal bimensal - Dia(s) - Semana(s) - Mês(es) - Hora(s) - Minuto(s) - Ano(s) - da data limite - desde a data de conclusão - Cada %s - Cada %1$s\naté %2$s Repetir eternamente Repetir até %s %1$s agendada para %2$s diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 4b6fe1977..ff2b1a29a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -196,16 +196,6 @@ каждые две недели ежемесячно каждые два месяца - День(дней) - Неделя(ль) - Месяц(ев) - Час(ов) - Минута(ы) - Лет (Года) - с намеченного времени - со времени завершения - С интервалом %s - \"Каждые %1$s до %2$s\" Повторять всегда Повторять до %s «%1$s» перенесено на %2$s diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 2baedc442..3ea7e9a10 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -174,16 +174,6 @@ každý druhý týždeň mesačne každý druhý mesiac - Deň - Týždeň - Mesiac - Hodina - Minúta - Rok - od dátumu ukončenia - od dátumu dokončenia - Každý %s - Každý %1$s\ndo %2$s Opakovať donekonečna Opakovať do %s %1$s preplánované na %2$s diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index 943ce6188..17804d2f1 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -166,16 +166,6 @@ vsake dva tedna mesečno vsake dva meseca - Dan/dni - V tednih - Mesec/a /e /ev - V urah - V minutah - Let/o /i /a - od datuma dospelosti - od datuma dokončanja - Vsak %s - Vsak %1$s\n do %2$s Ponavljaj do preklica Ponavljaj do %s Nerazvrščen diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index c1cefc9e2..f0464f995 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -24,7 +24,6 @@ Po datumu: ? %s (završeno) Nasumice posetnik - Svaki %s Ponavljaj zauvek Interval ponavljanja %s Obriši zadatak diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 4f9e3f9e7..a8d76882e 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -196,16 +196,6 @@ varannan vecka varje månad varannan månad - Dag(ar) - Vecka (veckor) - Månad(er) - Timme (timmar) - Minut(er) - År - från förfallodatumet - från avslutningsdatumet - Varje %s - Varje %1$s\ntill %2$s Repetera oändligt Repetera till %s %1$s omplanerat till %2$s diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ee05015dc..d0d6776bc 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -201,16 +201,6 @@ haftada 2 kez ayda bir ayda 2 kez - Gün - Hafta - Ay - Saat - Dakika - Yıl - son tarihten itibaren - tamamlanma tarihinden itibaren - Her %s - Her %1$s\n%2$s \'e kadar Sürekli yinele %s\'e kadar yinele %1$s, %2$s için yeniden zamanlandı diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6a0b6d9a5..576c65abb 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -198,16 +198,6 @@ два рази на тиждень щомісяця два рази на місяць - Днів - Тижнів - Місяців - Годин - Хвилин - Років - з кінцевої дати - з дати виконання - Кожні %s - Кожні %1$s\nдо %2$s Повторювати завжди Повторювати до %s %1$s перенесено на %2$s diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 46fad0041..e76ed78d3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -152,16 +152,6 @@ 每两周 每月 每两个月 - - 星期 - - 小时 - 分钟 - - 自到期日 - 自完成日 - 每隔 %s - 每隔 %1$s\n直到 %2$s 永远重复 重复到 %s 新建标签 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 342e57d89..b45cf9dd4 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -161,16 +161,6 @@ 每2週 每月 每2個月 - - 星期 - - 小時 - 分鐘 - - 自到期日 - 自完成日 - 每隔 %s - 每隔 %1$s\n直到 %2$s 永遠重複 重複到 %s 新增標籤 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 34ef317b4..d856f9494 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -222,15 +222,6 @@ @string/repeat_yearly - - @string/repeat_interval_minute - @string/repeat_interval_hour - @string/repeat_interval_day - @string/repeat_interval_week - @string/repeat_interval_month - @string/repeat_interval_year - - @string/repeat_type_due @string/repeat_type_completion diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1c13e174a..935896464 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -511,11 +511,7 @@ File %1$s contained %2$s.\n\n Monthly Bi-monthly - - - - Every - + Every Does not repeat Every day Every week @@ -534,42 +530,58 @@ File %1$s contained %2$s.\n\n minute minutes + + %d minute + %d minutes + + hour hours + + %d hour + %d hours + + day days + + %d day + %d days + + week weeks + + %d week + %d weeks + + month months + + %d month + %d months + + year years + + %d year + %d years + - Day(s) - Week(s) - Month(s) - Hour(s) - Minute(s) - Year(s) - - from due date - from completion date - - - Every %s - - - Every %1$s\nuntil %2$s + due date + completion date Repeat forever @@ -825,4 +837,20 @@ File %1$s contained %2$s.\n\n Badges Launcher support required List + Repeats from + Repeats %s + Repeats %s on %s + Repeats %s until %s + Repeats %s on %s until %s + minutely + hourly + daily + weekly + monthly + yearly + Repeats every %s + Repeats every %s until %s + Repeats every %s on %s + Repeats every %s on %s until %s + ,\u0020