Confirm before discard, home saves, back discards

Closes #106
pull/384/head
Alex Baker 9 years ago
parent 798f85484c
commit ca3dd8697a

@ -52,6 +52,9 @@ import org.tasks.preferences.ActivityPreferences;
import org.tasks.ui.MenuColorizer;
import org.tasks.ui.TaskEditControlFragment;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import butterknife.Bind;
@ -77,7 +80,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
TaskEditFragment taskEditFragment = new TaskEditFragment();
taskEditFragment.isNewTask = isNewTask;
taskEditFragment.model = task;
taskEditFragment.applyModel = true;
return taskEditFragment;
}
@ -94,7 +96,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
* Task in progress (during orientation change)
*/
private static final String EXTRA_TASK = "extra_task"; //$NON-NLS-1$
private static final String EXTRA_APPLY_MODEL = "extra_apply_model";
private static final String EXTRA_IS_NEW_TASK = "extra_is_new_task";
/**
@ -151,7 +152,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
/** task model */
Task model = null;
private boolean applyModel = false;
private boolean showEditComments;
private TaskEditFragmentCallbackHandler callback;
@ -169,7 +169,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
// if we were editing a task already, restore it
if (savedInstanceState != null) {
model = savedInstanceState.getParcelable(EXTRA_TASK);
applyModel = savedInstanceState.getBoolean(EXTRA_APPLY_MODEL);
isNewTask = savedInstanceState.getBoolean(EXTRA_IS_NEW_TASK);
}
@ -199,8 +198,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
notificationManager.cancel(model.getId());
applyModel = false;
if (!showEditComments) {
commentsBar.setVisibility(View.GONE);
}
@ -321,30 +318,21 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
* ======================================================================
*/
private String getTitle() {
return getEditTitleControlSet().getTitle();
}
/** Save task model from values in UI components */
public void save() {
String title = getTitle();
if (title == null) {
return;
}
if (title.length() > 0) {
model.setDeletionDate(0L);
}
if (title.length() == 0) {
return;
}
private List<TaskEditControlFragment> getFragments() {
List<TaskEditControlFragment> fragments = new ArrayList<>();
for (int fragmentId : rowIds) {
TaskEditControlFragment fragment = (TaskEditControlFragment) getFragmentManager().findFragmentById(fragmentId);
if (fragment == null) {
break;
}
fragments.add(fragment);
}
return fragments;
}
/** Save task model from values in UI components */
public void save() {
for (TaskEditControlFragment fragment : getFragments()) {
fragment.apply(model);
}
taskService.save(model);
@ -363,6 +351,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
}
removeExtrasFromIntent(getActivity().getIntent());
callback.taskEditFinished();
}
private EditTitleControlSet getEditTitleControlSet() {
@ -382,21 +371,11 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
return (T) getFragmentManager().findFragmentByTag(getString(tag));
}
public void onBackPressed() {
if(getTitle().length() == 0) {
discardButtonClick();
} else {
save();
}
callback.taskEditFinished();
}
/**
* Helper to remove task edit specific info from activity intent
*/
public static void removeExtrasFromIntent(Intent intent) {
if (intent != null) {
intent.removeExtra(TaskListActivity.OPEN_TASK);
intent.removeExtra(TOKEN_PICTURE_IN_PROGRESS);
}
}
@ -407,13 +386,34 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
* ======================================================================
*/
protected void discardButtonClick() {
public void discardButtonClick() {
boolean hasChanges = false;
for (TaskEditControlFragment fragment : getFragments()) {
hasChanges |= fragment.hasChanges(model);
}
if (hasChanges) {
dialogBuilder.newMessageDialog(R.string.discard_confirmation)
.setPositiveButton(R.string.keep_editing, null)
.setNegativeButton(R.string.discard, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
discard();
}
})
.show();
} else {
discard();
}
}
public void discard() {
if (isNewTask) {
TimerPlugin.stopTimer(notificationManager, taskService, getActivity(), model);
taskDeleter.delete(model);
}
removeExtrasFromIntent(getActivity().getIntent());
callback.taskEditFinished();
}
protected void deleteButtonClick() {
@ -440,13 +440,8 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
hideKeyboard();
switch (item.getItemId()) {
case R.id.menu_save:
case R.id.menu_save:
save();
callback.taskEditFinished();
return true;
case R.id.menu_discard:
discardButtonClick();
callback.taskEditFinished();
return true;
case R.id.menu_record_note:
startRecordingAudio();
@ -455,12 +450,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
deleteButtonClick();
return true;
case android.R.id.home:
if (getTitle().trim().length() == 0) {
discardButtonClick();
} else {
save();
}
callback.taskEditFinished();
save();
return true;
}
@ -504,7 +494,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
super.onSaveInstanceState(outState);
outState.putParcelable(EXTRA_TASK, model);
outState.putBoolean(EXTRA_APPLY_MODEL, applyModel);
outState.putBoolean(EXTRA_IS_NEW_TASK, isNewTask);
}

@ -146,7 +146,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
hideKeyboard();
navigationDrawer.openDrawer();
} else {
taskEditFragment.onBackPressed();
taskEditFragment.save();
}
}
});
@ -247,7 +247,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
private void loadTaskEditFragment(boolean onCreate, TaskEditFragment taskEditFragment, List<TaskEditControlFragment> taskEditControlFragments) {
if (isSinglePaneLayout()) {
updateToolbar(R.drawable.ic_arrow_back_24dp, false);
updateToolbar(R.drawable.ic_save_24dp, false);
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
@ -367,7 +367,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
TaskEditFragment.removeExtrasFromIntent(getIntent());
TaskEditFragment tef = getTaskEditFragment();
if (tef != null) {
getTaskEditFragment().onBackPressed();
getTaskEditFragment().save();
}
// If showing both fragments, directly update the tasklist-fragment
@ -446,7 +446,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
TaskEditFragment taskEditFragment = getTaskEditFragment();
if (taskEditFragment != null) {
taskEditFragment.onBackPressed();
taskEditFragment.save();
}
Task task = loadItem(taskId);
@ -519,7 +519,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
}
if (getTaskEditFragment() != null) {
getTaskEditFragment().onBackPressed();
getTaskEditFragment().discardButtonClick();
return;
}
@ -744,11 +744,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
model = taskService.createWithValues(values, null);
}
if (model.getTitle().length() == 0) {
// set deletion date until task gets a title
model.setDeletionDate(DateUtilities.now());
}
return model;
}

@ -600,7 +600,7 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
TaskEditFragment tef = activity.getTaskEditFragment();
if (tef != null) {
if (task.getId() == tef.model.getId()) {
tef.discardButtonClick();
tef.discard();
}
}
TimerPlugin.stopTimer(notificationManager, taskService, context, task);

@ -288,16 +288,25 @@ public class RepeatControlSet extends TaskEditControlFragment {
repeatUntilValue = task.getRepeatUntil();
}
@Override
public boolean hasChanges(Task original) {
return !getRecurrenceValue().equals(original.getRecurrence()) || repeatUntilValue != original.getRepeatUntil();
}
@Override
public void apply(Task task) {
task.setRecurrence(getRecurrenceValue());
task.setRepeatUntil(repeatUntilValue);
}
private String getRecurrenceValue() {
String result = getRecurrence();
if (type.getSelectedItemPosition() == TYPE_COMPLETION_DATE && !TextUtils.isEmpty(result)) {
result += ";FROM=COMPLETION"; //$NON-NLS-1$
}
task.setRecurrence(result);
task.setRepeatUntil(repeatUntilValue);
return result;
}
private void applyRecurrence() {

@ -47,7 +47,6 @@ import org.tasks.ui.TaskEditControlFragment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@ -322,6 +321,11 @@ public final class TagsControlSet extends TaskEditControlFragment {
return TAG;
}
@Override
public boolean hasChanges(Task original) {
return !getExistingTags(original.getUUID()).equals(getSelectedTags(false));
}
protected void refreshDisplayView() {
String tagString = buildTagString();
if (!TextUtils.isEmpty(tagString)) {
@ -333,22 +337,8 @@ public final class TagsControlSet extends TaskEditControlFragment {
}
}
/**
* Save the given array of tags into the database
*/
private boolean synchronizeTags(long taskId, String taskUuid) {
Query query = Query.select(Metadata.PROPERTIES).where(
Criterion.and(
TaskToTagMetadata.TASK_UUID.eq(taskUuid),
Metadata.DELETION_DATE.eq(0))
);
Set<TagData> existingTags = newHashSet(transform(metadataDao.toList(query), new Function<Metadata, TagData>() {
@Override
public TagData apply(Metadata metadata) {
return tagDataDao.getByUuid(metadata.getValue(TaskToTagMetadata.TAG_UUID));
}
}));
Set<TagData> selectedTags = newHashSet(transform(getTagList(), new Function<String, TagData>() {
private Set<TagData> getSelectedTags(final boolean createMissingTags) {
return newHashSet(transform(getTagList(), new Function<String, TagData>() {
@Override
public TagData apply(String tagName) {
TagData tagData = tagDataDao.getTagByName(tagName, TagData.PROPERTIES);
@ -356,11 +346,35 @@ public final class TagsControlSet extends TaskEditControlFragment {
// create missing tags
tagData = new TagData();
tagData.setName(tagName);
tagDataDao.persist(tagData);
if (createMissingTags) {
tagDataDao.persist(tagData);
}
}
return tagData;
}
}));
}
private Set<TagData> getExistingTags(String taskUuid) {
Query query = Query.select(Metadata.PROPERTIES).where(
Criterion.and(
TaskToTagMetadata.TASK_UUID.eq(taskUuid),
Metadata.DELETION_DATE.eq(0))
);
return newHashSet(transform(metadataDao.toList(query), new Function<Metadata, TagData>() {
@Override
public TagData apply(Metadata metadata) {
return tagDataDao.getByUuid(metadata.getValue(TaskToTagMetadata.TAG_UUID));
}
}));
}
/**
* Save the given array of tags into the database
*/
private boolean synchronizeTags(long taskId, String taskUuid) {
Set<TagData> existingTags = getExistingTags(taskUuid);
Set<TagData> selectedTags = getSelectedTags(true);
Sets.SetView<TagData> added = difference(selectedTags, existingTags);
Sets.SetView<TagData> removed = difference(existingTags, selectedTags);
deleteLinks(taskId, taskUuid, removed);

@ -185,6 +185,12 @@ public class TimerControlSet extends TaskEditControlFragment {
estimatedSeconds = task.getEstimatedSeconds();
}
@Override
public boolean hasChanges(Task original) {
return elapsed.getTimeDurationInSeconds() != original.getElapsedSeconds() ||
estimated.getTimeDurationInSeconds() != original.getEstimatedSeconds();
}
@Override
public void apply(Task task) {
task.setElapsedSeconds(elapsed.getTimeDurationInSeconds());

@ -17,6 +17,7 @@ import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.google.api.client.util.Strings;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
@ -152,6 +153,11 @@ public class EditTitleControlSet extends TaskEditControlFragment {
return TAG;
}
@Override
public boolean hasChanges(Task original) {
return !getTitle().equals(original.getTitle());
}
@Override
public void initialize(boolean isNewTask, Task task) {
this.isNewTask = isNewTask;
@ -164,15 +170,18 @@ public class EditTitleControlSet extends TaskEditControlFragment {
@Override
public void apply(Task task) {
task.setTitle(getTitle());
String title = getTitle();
task.setTitle(Strings.isNullOrEmpty(title)
? getString(R.string.no_title)
: title);
boolean newState = completeBox.isChecked();
if (newState != task.isCompleted()) {
taskService.setComplete(task, newState);
}
}
public String getTitle() {
return editText.getText().toString();
private String getTitle() {
return editText.getText().toString().trim();
}
public void hideKeyboard() {

@ -182,9 +182,17 @@ public class HideUntilControlSet extends TaskEditControlFragment implements OnIt
@Override
public void apply(Task task) {
task.setHideUntil(getHideUntil(task));
}
@Override
public boolean hasChanges(Task original) {
return original.getHideUntil() != getHideUntil(original);
}
private long getHideUntil(Task task) {
HideUntilValue selectedItem = (HideUntilValue) spinner.getSelectedItem();
long hideUntil = task.createHideUntil(selectedItem.setting, selectedItem.date);
task.setHideUntil(hideUntil);
return task.createHideUntil(selectedItem.setting, selectedItem.date);
}
@Override

@ -54,6 +54,7 @@ import butterknife.OnClick;
import butterknife.OnItemSelected;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Sets.newHashSet;
import static com.todoroo.andlib.utility.DateUtilities.getLongDateStringWithTime;
import static org.tasks.date.DateTimeUtils.newDateTime;
@ -119,14 +120,7 @@ public class ReminderControlSet extends TaskEditControlFragment {
}
setup(Longs.asList(savedInstanceState.getLongArray(EXTRA_ALARMS)), geofences);
} else {
final List<Long> alarms = new ArrayList<>();
alarmService.getAlarms(taskId, new Callback<Metadata>() {
@Override
public void apply(Metadata entry) {
alarms.add(entry.getValue(AlarmFields.TIME));
}
});
setup(alarms, geofenceService.getGeofences(taskId));
setup(currentAlarms(), geofenceService.getGeofences(taskId));
}
addSpinner.setAdapter(remindAdapter);
@ -134,6 +128,17 @@ public class ReminderControlSet extends TaskEditControlFragment {
return view;
}
private List<Long> currentAlarms() {
final List<Long> alarms = new ArrayList<>();
alarmService.getAlarms(taskId, new Callback<Metadata>() {
@Override
public void apply(Metadata entry) {
alarms.add(entry.getValue(AlarmFields.TIME));
}
});
return alarms;
}
@OnItemSelected(R.id.alarms_add_spinner)
void addAlarm(int position) {
String selected = spinnerOptions.get(position);
@ -208,9 +213,17 @@ public class ReminderControlSet extends TaskEditControlFragment {
updateSpinner();
}
@Override
public boolean hasChanges(Task original) {
return getFlags() != original.getReminderFlags() ||
getRandomReminderPeriod() != original.getReminderPeriod() ||
!newHashSet(currentAlarms()).equals(getAlarms()) ||
!newHashSet(geofenceService.getGeofences(taskId)).equals(getGeofences());
}
@Override
public void apply(Task task) {
task.setReminderFlags(getValue());
task.setReminderFlags(getFlags());
task.setReminderPeriod(getRandomReminderPeriod());
@ -227,7 +240,7 @@ public class ReminderControlSet extends TaskEditControlFragment {
super.onSaveInstanceState(outState);
outState.putLong(EXTRA_TASK_ID, taskId);
outState.putInt(EXTRA_FLAGS, getValue());
outState.putInt(EXTRA_FLAGS, getFlags());
outState.putLong(EXTRA_RANDOM_REMINDER, getRandomReminderPeriod());
outState.putLongArray(EXTRA_ALARMS, Longs.toArray(getAlarms()));
outState.putParcelableArrayList(EXTRA_GEOFENCES, newArrayList(getGeofences()));
@ -290,7 +303,7 @@ public class ReminderControlSet extends TaskEditControlFragment {
alertItem.setTag(geofence);
}
private int getValue() {
private int getFlags() {
int value = 0;
if(whenDue) {
value |= Task.NOTIFY_AT_DEADLINE;

@ -101,6 +101,11 @@ public class CalendarControlSet extends TaskEditControlFragment {
eventUri = task.getCalendarURI();
}
@Override
public boolean hasChanges(Task original) {
return !isNullOrEmpty(calendarId);
}
@Override
public void apply(Task task) {
if (!task.hasDueDate()) {
@ -128,11 +133,7 @@ public class CalendarControlSet extends TaskEditControlFragment {
} catch (Exception e) {
Timber.e(e, "unable-to-update-calendar: %s", task.getCalendarURI());
}
return;
}
if (!isNullOrEmpty(calendarId)) {
} else if (!isNullOrEmpty(calendarId)) {
ContentResolver cr = context.getContentResolver();
try{
ContentValues values = new ContentValues();

@ -255,6 +255,11 @@ public class DeadlineControlSet extends TaskEditControlFragment {
return TAG;
}
@Override
public boolean hasChanges(Task original) {
return original.getDueDate() != getDueDate();
}
@Override
public void initialize(boolean isNewTask, Task task) {
if (task.hasDueDate()) {

@ -73,4 +73,9 @@ public class DescriptionControlSet extends TaskEditControlFragment {
public void apply(Task task) {
task.setNotes(description);
}
@Override
public boolean hasChanges(Task original) {
return !description.equals(original.getNotes());
}
}

@ -100,6 +100,11 @@ public class PriorityControlSet extends TaskEditControlFragment {
task.setImportance(getPriority());
}
@Override
public boolean hasChanges(Task original) {
return original.getImportance() != getPriority();
}
private void tintRadioButton(AppCompatRadioButton radioButton, int priority) {
int color = checkBoxes.getPriorityColors().get(priority);
radioButton.setSupportButtonTintList(new ColorStateList(new int[][]{

@ -38,4 +38,8 @@ public abstract class TaskEditControlFragment extends InjectingFragment {
public abstract void initialize(boolean isNewTask, Task task);
public abstract void apply(Task task);
public boolean hasChanges(Task original) {
return false;
}
}

@ -13,12 +13,9 @@
android:title="@string/premium_record_audio"
android:icon="@drawable/ic_mic_24dp"
tasks:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_discard"
android:title="@string/TEA_menu_discard_changes"
tasks:showAsAction="never"/>
<item
android:id="@+id/menu_delete"
android:icon="@drawable/ic_delete_24dp"
android:title="@string/delete_task"
tasks:showAsAction="never"/>
tasks:showAsAction="ifRoom"/>
</menu>

@ -63,7 +63,6 @@
<string name="TEA_elapsedDuration_label">Време, което вече е отделено</string>
<string name="TEA_menu_save">Запази промените</string>
<string name="save">Запази</string>
<string name="TEA_menu_discard_changes">Откажи промените</string>
<string name="TEA_timer_est">Приблизително %s</string>
<string name="TEA_timer_elap">Изминали %s</string>
<string name="TEA_no_time">Без време</string>

@ -51,7 +51,6 @@
<string name="TEA_estimatedDuration_label">Quant temps us portarà?</string>
<string name="TEA_elapsedDuration_label">Temps que ja s\'ha invertit en la Tasca</string>
<string name="TEA_menu_save">Desa els canvis</string>
<string name="TEA_menu_discard_changes">Descartar canvis</string>
<string name="TEA_tab_activity">Activitat</string>
<string name="TEA_no_time">cap hora</string>
<string name="due_date">Al finalitzar la data límit</string>

@ -54,7 +54,6 @@
<string name="TEA_estimatedDuration_label">Kolik času asi zabere?</string>
<string name="TEA_elapsedDuration_label">Jak dlouho už na úkolu pracujete</string>
<string name="TEA_menu_save">Uložit změny</string>
<string name="TEA_menu_discard_changes">Zrušit změny</string>
<string name="TEA_tab_activity">Činnost</string>
<string name="TEA_timer_est">Zal. %s</string>
<string name="TEA_timer_elap">Uplynutí %s</string>

@ -58,7 +58,6 @@
<string name="TEA_elapsedDuration_label">Zeit, die schon für die Aufgabe gebraucht wurde</string>
<string name="TEA_menu_save">Änderungen speichern</string>
<string name="save">Speichern</string>
<string name="TEA_menu_discard_changes">Änderungen verwerfen</string>
<string name="TEA_tab_activity">Aktivität</string>
<string name="TEA_timer_est">Geschätzt %s</string>
<string name="TEA_timer_elap">%s verstrichen</string>

@ -53,7 +53,6 @@
<string name="TEA_estimatedDuration_label">Πόσο θα διαρκέσει?</string>
<string name="TEA_elapsedDuration_label">Χρόνος που ήδη πέρασε</string>
<string name="TEA_menu_save">Αποθήκευση αλλαγών</string>
<string name="TEA_menu_discard_changes">Αναίρεση αλλαγών</string>
<string name="TEA_tab_activity">Δραστηριότητα</string>
<string name="TEA_timer_est">Εκτιμώμενο %s</string>
<string name="TEA_timer_elap">Πέρασε %s</string>

@ -59,7 +59,6 @@
<string name="TEA_elapsedDuration_label">Tiempo ya empleado en la tarea</string>
<string name="TEA_menu_save">Guardar cambios</string>
<string name="save">Guardar</string>
<string name="TEA_menu_discard_changes">Descartar cambios</string>
<string name="TEA_tab_activity">Actividad</string>
<string name="TEA_timer_elap">Transcurrido %s</string>
<string name="TEA_no_time">Sin horario</string>

@ -41,7 +41,6 @@
<string name="TEA_elapsedDuration_label">زمان سپری شده</string>
<string name="TEA_menu_save">ذخیره تغییرات</string>
<string name="save">ذخیره</string>
<string name="TEA_menu_discard_changes">رد تغییرات</string>
<string name="TEA_tab_activity">فعالیت</string>
<string name="TEA_no_time">بدون زمان</string>
<string name="due_date">تاریخ موعود</string>

@ -22,7 +22,6 @@
<string name="TEA_estimatedDuration_label">Kuinka pitkään se kestää?</string>
<string name="TEA_elapsedDuration_label">Aika on jo käytetty</string>
<string name="TEA_menu_save">Tallenna muutokset</string>
<string name="TEA_menu_discard_changes">Hylkää muutokset</string>
<string name="TEA_tab_activity">Toiminta</string>
<string name="DB_corrupted_body">Uh oh! It looks like you may have a corrupted database.
If you see this error regularly, we suggest you clear all

@ -58,7 +58,6 @@
<string name="TEA_elapsedDuration_label">Temps déjà passé sur la tâche</string>
<string name="TEA_menu_save">Sauvegarder les modifications</string>
<string name="save">Sauvegarder</string>
<string name="TEA_menu_discard_changes">Annuler les modifications</string>
<string name="TEA_tab_activity">Activité</string>
<string name="TEA_timer_est">Restant %s</string>
<string name="TEA_timer_elap">Passé %s</string>

@ -31,7 +31,6 @@
<string name="TEA_estimatedDuration_label">Meddig fog tartani?</string>
<string name="TEA_elapsedDuration_label">Már eltöltött idő</string>
<string name="TEA_menu_save">Módosítások mentése</string>
<string name="TEA_menu_discard_changes">Módosítások elvetése</string>
<string name="TEA_tab_activity">Tevékenység</string>
<string name="TEA_control_importance">Prioritás</string>
<string name="TEA_control_notes">Leírás</string>

@ -60,7 +60,6 @@
<string name="TEA_elapsedDuration_label">Tempo già speso per l\'attività</string>
<string name="TEA_menu_save">Salva le modifiche</string>
<string name="save">Salva</string>
<string name="TEA_menu_discard_changes">Annulla modifiche</string>
<string name="TEA_tab_activity">Attività</string>
<string name="TEA_timer_est">Stima %s</string>
<string name="TEA_timer_elap">Trascorso %s</string>

@ -60,7 +60,6 @@
<string name="TEA_elapsedDuration_label">既にタスクに費やした時間</string>
<string name="TEA_menu_save">変更の保存</string>
<string name="save">保存</string>
<string name="TEA_menu_discard_changes">変更を保存しない</string>
<string name="TEA_tab_activity">活動</string>
<string name="TEA_timer_est">予定 %s</string>
<string name="TEA_timer_elap">経過時間 %s</string>

@ -62,7 +62,6 @@
<string name="TEA_elapsedDuration_label">일정에 이미 소모한 시간</string>
<string name="TEA_menu_save">변경사항 저장</string>
<string name="save">저장</string>
<string name="TEA_menu_discard_changes">변경 사항 취소</string>
<string name="TEA_tab_activity">활동 내역</string>
<string name="TEA_timer_est">동부표준시 %s</string>
<string name="TEA_timer_elap">경과 시간: %s</string>

@ -46,7 +46,6 @@
<string name="TEA_estimatedDuration_label">Hvor lang tid vil det ta?</string>
<string name="TEA_elapsedDuration_label">Tid brukt på oppgaven til nå</string>
<string name="TEA_menu_save">Lagre endringer</string>
<string name="TEA_menu_discard_changes">Forkast endringer</string>
<string name="TEA_control_importance">Viktighet</string>
<string name="TEA_control_notes">Notater</string>
<string name="TEA_control_files">Filer</string>

@ -60,7 +60,6 @@
<string name="TEA_elapsedDuration_label">Bestede tijd tot nu toe</string>
<string name="TEA_menu_save">Wijzigingen opslaan</string>
<string name="save">Opslaan</string>
<string name="TEA_menu_discard_changes">Negeer veranderingen</string>
<string name="TEA_tab_activity">Activiteit</string>
<string name="TEA_timer_est">Gesch. %s</string>
<string name="TEA_timer_elap">Verstreken %s</string>

@ -54,7 +54,6 @@
<string name="TEA_estimatedDuration_label">Jak długo to zajmie?</string>
<string name="TEA_elapsedDuration_label">Czas dotychczas spędzony nad tym zadaniem</string>
<string name="TEA_menu_save">Zapisz zmiany</string>
<string name="TEA_menu_discard_changes">Odrzuć zmiany</string>
<string name="TEA_tab_activity">Aktywność</string>
<string name="TEA_timer_elap">Minęło %s</string>
<string name="TEA_no_time">Bez godziny</string>

@ -53,7 +53,6 @@
<string name="TEA_estimatedDuration_label">Quanto tempo isto vai levar?</string>
<string name="TEA_elapsedDuration_label">Tempo já gasto na tarefa</string>
<string name="TEA_menu_save">Salvar alterações</string>
<string name="TEA_menu_discard_changes">Descartas mudanças</string>
<string name="TEA_tab_activity">Atividades</string>
<string name="TEA_timer_elap">Decorrido %s</string>
<string name="TEA_no_time">Sem horário</string>

@ -60,7 +60,6 @@
<string name="TEA_elapsedDuration_label">Tempo já gasto</string>
<string name="TEA_menu_save">Gravar alterações</string>
<string name="save">Guardar</string>
<string name="TEA_menu_discard_changes">Rejeitar alterações</string>
<string name="TEA_tab_activity">Atividade</string>
<string name="TEA_timer_elap">Decorrido %s</string>
<string name="TEA_no_time">Sem tempo</string>

@ -60,7 +60,6 @@
<string name="TEA_elapsedDuration_label">Затраченное время</string>
<string name="TEA_menu_save">Сохранить изменения</string>
<string name="save">Сохранить </string>
<string name="TEA_menu_discard_changes">Отменить изменения?</string>
<string name="TEA_tab_activity">Действия</string>
<string name="TEA_timer_est">Ост. %s</string>
<string name="TEA_timer_elap">Прошло %s</string>

@ -57,7 +57,6 @@
<string name="TEA_elapsedDuration_label">Ako dlho už pracujete na úlohe</string>
<string name="TEA_menu_save">Uložiť zmeny</string>
<string name="save">Uložiť</string>
<string name="TEA_menu_discard_changes">Vymazať zmeny</string>
<string name="TEA_tab_activity">Aktivita</string>
<string name="TEA_timer_est">Spolu %s</string>
<string name="TEA_timer_elap">Uplynulo %s</string>

@ -57,7 +57,6 @@
<string name="TEA_estimatedDuration_label">Як довго це триватиме?</string>
<string name="TEA_elapsedDuration_label">Час вже потрачео</string>
<string name="TEA_menu_save">Зберегти зміни</string>
<string name="TEA_menu_discard_changes">Відмінити зміни</string>
<string name="TEA_tab_activity">Активність</string>
<string name="TEA_timer_est">Зал. %s</string>
<string name="TEA_timer_elap">Час, що минув %s</string>

@ -76,6 +76,10 @@ File %1$s contained %2$s.\n\n
<!-- ================================================== Generic Dialogs == -->
<string name="discard_confirmation">Are you sure you want to discard your changes?</string>
<string name="keep_editing">Keep editing</string>
<!-- question for deleting tasks -->
<string name="DLG_delete_this_task_question">Delete this task?</string>
@ -195,9 +199,6 @@ File %1$s contained %2$s.\n\n
<string name="save">Save</string>
<!-- Menu: Don't Save -->
<string name="TEA_menu_discard_changes">Discard changes</string>
<!-- slide 15b: Task edit tab: activity -->
<string name="TEA_tab_activity">Activity</string>
@ -911,8 +912,9 @@ File %1$s contained %2$s.\n\n
<string name="doze_notifications">Interrupt Doze mode for notifications</string>
<string name="doze_notifications_off">Android will significantly delay notifications while device is in Doze mode</string>
<string name="doze_notifications_on">Android will allow limited interruptions while device is in Doze mode</string>
<string name="no_title">(No title)</string>
<string-array name="sync_SPr_interval_entries">
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>disable</item>
<item>every fifteen minutes</item>

Loading…
Cancel
Save