From 8cc0f775276d6b01604ce9d3f5a974a68badaf3b Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 14 Dec 2015 15:16:40 -0600 Subject: [PATCH] New 'Add Attachment' dialog --- src/main/AndroidManifest.xml | 4 + .../astrid/actfm/ActFmCameraModule.java | 48 +---- .../astrid/activity/TaskEditFragment.java | 15 +- .../todoroo/astrid/adapter/TaskAdapter.java | 3 +- .../todoroo/astrid/files/FilesControlSet.java | 88 +------- .../activities/AddAttachmentActivity.java | 191 ++++++++++++++++++ .../tasks/dialogs/AddAttachmentDialog.java | 88 ++++++++ .../org/tasks/injection/ActivityModule.java | 4 +- .../tasks/injection/DialogFragmentModule.java | 5 +- src/main/res/values-ar/strings.xml | 4 - src/main/res/values-bg-rBG/strings.xml | 4 - src/main/res/values-ca/strings.xml | 2 - src/main/res/values-cs/strings.xml | 4 - src/main/res/values-da/strings.xml | 2 - src/main/res/values-de/strings.xml | 4 - src/main/res/values-el/strings.xml | 3 - src/main/res/values-es/strings.xml | 4 - src/main/res/values-fa/strings.xml | 4 - src/main/res/values-fr/strings.xml | 4 - src/main/res/values-it/strings.xml | 4 - src/main/res/values-iw/strings.xml | 4 - src/main/res/values-ja/strings.xml | 4 - src/main/res/values-ko/strings.xml | 4 - src/main/res/values-nl/strings.xml | 4 - src/main/res/values-pl/strings.xml | 4 - src/main/res/values-pt-rBR/strings.xml | 4 - src/main/res/values-pt/strings.xml | 4 - src/main/res/values-ru/strings.xml | 4 - src/main/res/values-sk/strings.xml | 4 - src/main/res/values-sl-rSI/strings.xml | 4 - src/main/res/values-sv/strings.xml | 4 - src/main/res/values-th/strings.xml | 2 - src/main/res/values-tr/strings.xml | 4 - src/main/res/values-uk/strings.xml | 4 - src/main/res/values-zh-rCN/strings.xml | 4 - src/main/res/values-zh-rTW/strings.xml | 4 - src/main/res/values/strings-actfm.xml | 6 - src/main/res/values/strings-premium.xml | 2 - src/main/res/values/strings.xml | 3 + 39 files changed, 306 insertions(+), 252 deletions(-) create mode 100644 src/main/java/org/tasks/activities/AddAttachmentActivity.java create mode 100644 src/main/java/org/tasks/dialogs/AddAttachmentDialog.java diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 8ea74eba2..05c230403 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -116,6 +116,10 @@ android:exported="true" android:theme="@style/TranslucentDialog" /> + + files = new ArrayList<>(); private final LayoutInflater inflater; - private ActivityPreferences preferences; private final TaskAttachmentDao taskAttachmentDao; private final Fragment fragment; - private final DeviceInfo deviceInfo; - private final ActFmCameraModule actFmCameraModule; private final DialogBuilder dialogBuilder; private LinearLayout attachmentContainer; private TextView addAttachment; public FilesControlSet(ActivityPreferences preferences, TaskAttachmentDao taskAttachmentDao, - Fragment fragment, DeviceInfo deviceInfo, ActFmCameraModule actFmCameraModule) { + Fragment fragment) { super(fragment.getActivity(), R.layout.control_set_files); - this.preferences = preferences; this.taskAttachmentDao = taskAttachmentDao; this.fragment = fragment; - this.deviceInfo = deviceInfo; - this.actFmCameraModule = actFmCameraModule; this.dialogBuilder = new DialogBuilder(activity, preferences); inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); } @@ -171,7 +162,7 @@ public class FilesControlSet extends TaskEditControlSetBase { addAttachment.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { - startAttachFile(); + fragment.startActivityForResult(new Intent(activity, AddAttachmentActivity.class), TaskEditFragment.REQUEST_ADD_ATTACHMENT); } }); } @@ -248,79 +239,6 @@ public class FilesControlSet extends TaskEditControlSetBase { } } - private void startAttachFile() { - final List runnables = new ArrayList<>(); - List options = new ArrayList<>(); - - if (deviceInfo.hasCamera() || deviceInfo.hasGallery()) { - runnables.add(new Runnable() { - @Override - public void run() { - actFmCameraModule.showPictureLauncher(null); - } - }); - options.add(activity.getString(R.string.file_add_picture)); - } - runnables.add(new Runnable() { - @Override - public void run() { - Intent attachFile = new Intent(activity, FileExplore.class); - fragment.startActivityForResult(attachFile, TaskEditFragment.REQUEST_CODE_ATTACH_FILE); - } - }); - options.add(activity.getString(R.string.file_add_sdcard)); - - ArrayAdapter adapter = new ArrayAdapter<>( - activity, - android.R.layout.simple_spinner_dropdown_item, - options.toArray(new String[options.size()])); - - DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface d, int which) { - runnables.get(which).run(); - } - }; - - // show a menu of available options - dialogBuilder.newDialog() - .setAdapter(adapter, listener) - .show() - .setOwnerActivity(activity); - } - - public void attachFile(String file) { - File src = new File(file); - if (!src.exists()) { - Toast.makeText(activity, R.string.file_err_copy, Toast.LENGTH_LONG).show(); - return; - } - - File dst = new File(preferences.getAttachmentsDirectory() + File.separator + src.getName()); - try { - AndroidUtilities.copyFile(src, dst); - } catch (Exception e) { - log.error(e.getMessage(), e); - Toast.makeText(activity, R.string.file_err_copy, Toast.LENGTH_LONG).show(); - return; - } - - String path = dst.getAbsolutePath(); - String name = dst.getName(); - String extension = AndroidUtilities.getFileExtension(name); - - String type = TaskAttachment.FILE_TYPE_OTHER; - if (!TextUtils.isEmpty(extension)) { - MimeTypeMap map = MimeTypeMap.getSingleton(); - String guessedType = map.getMimeTypeFromExtension(extension); - if (!TextUtils.isEmpty(guessedType)) { - type = guessedType; - } - } - - createNewFileAttachment(path, name, type); - } - public void createNewFileAttachment(String path, String fileName, String fileType) { TaskAttachment attachment = TaskAttachment.createNewAttachment(model.getUuid(), path, fileName, fileType); taskAttachmentDao.createNew(attachment); diff --git a/src/main/java/org/tasks/activities/AddAttachmentActivity.java b/src/main/java/org/tasks/activities/AddAttachmentActivity.java new file mode 100644 index 000000000..ff2d961ea --- /dev/null +++ b/src/main/java/org/tasks/activities/AddAttachmentActivity.java @@ -0,0 +1,191 @@ +package org.tasks.activities; + +import android.content.ContentResolver; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.support.v4.app.FragmentManager; +import android.text.TextUtils; +import android.webkit.MimeTypeMap; +import android.widget.Toast; + +import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.data.TaskAttachment; +import com.todoroo.astrid.files.FileExplore; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.tasks.R; +import org.tasks.dialogs.AddAttachmentDialog; +import org.tasks.injection.InjectingAppCompatActivity; +import org.tasks.preferences.Preferences; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.atomic.AtomicReference; + +import javax.inject.Inject; + +public class AddAttachmentActivity extends InjectingAppCompatActivity implements DialogInterface.OnCancelListener, AddAttachmentDialog.AddAttachmentCallback { + + private static final Logger log = LoggerFactory.getLogger(AddAttachmentActivity.class); + private static final String FRAG_TAG_ATTACHMENT_DIALOG = "frag_tag_attachment_dialog"; + private static final int REQUEST_CAMERA = 12120; + private static final int REQUEST_GALLERY = 12121; + private static final int REQUEST_STORAGE = 12122; + + public static final String EXTRA_PATH = "extra_path"; + + @Deprecated private static File lastTempFile = null; + + @Inject Preferences preferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + FragmentManager supportFragmentManager = getSupportFragmentManager(); + AddAttachmentDialog dialog = (AddAttachmentDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_ATTACHMENT_DIALOG); + if (dialog == null) { + dialog = new AddAttachmentDialog(); + dialog.show(supportFragmentManager, FRAG_TAG_ATTACHMENT_DIALOG); + } + dialog.setOnCancelListener(this); + dialog.setAddAttachmentCallback(this); + } + + @Override + public void onCancel(DialogInterface dialog) { + finish(); + } + + @Override + public void takePicture() { + lastTempFile = getFilename(".jpeg"); + if (lastTempFile == null) { + Toast.makeText(this, R.string.external_storage_unavailable, Toast.LENGTH_LONG).show(); + } else { + startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE) {{ + addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(lastTempFile)); + }}, REQUEST_CAMERA); + } + } + + @Override + public void pickFromGallery() { + Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) {{ + setType("image/*"); + }}; + if (intent.resolveActivity(getPackageManager()) != null) { + startActivityForResult(intent, REQUEST_GALLERY); + } + } + + @Override + public void pickFromStorage() { + startActivityForResult(new Intent(this, FileExplore.class), REQUEST_STORAGE); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, final Intent data) { + if (requestCode == REQUEST_CAMERA) { + if (resultCode == RESULT_OK) { + if (lastTempFile != null) { + log.info("Saved {}", lastTempFile.getAbsolutePath()); + setResult(RESULT_OK, new Intent() {{ + putExtra(EXTRA_PATH, lastTempFile.getAbsolutePath()); + }}); + lastTempFile = null; + } + } + finish(); + } else if (requestCode == REQUEST_GALLERY) { + if (resultCode == RESULT_OK) { + Uri uri = data.getData(); + ContentResolver contentResolver = getContentResolver(); + MimeTypeMap mime = MimeTypeMap.getSingleton(); + String extension = mime.getExtensionFromMimeType(contentResolver.getType(uri)); + final File tempFile = getFilename(extension); + log.info("Writing {} to {}", uri, tempFile); + try { + InputStream inputStream = contentResolver.openInputStream(uri); + copyFile(inputStream, tempFile.getPath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + setResult(RESULT_OK, new Intent() {{ + putExtra(EXTRA_PATH, tempFile.getAbsolutePath()); + }}); + } + finish(); + } else if (requestCode == REQUEST_STORAGE) { + if (resultCode == RESULT_OK) { + String path = data.getStringExtra(FileExplore.RESULT_FILE_SELECTED); + final String destination = copyToAttachmentDirectory(path); + if (destination != null) { + log.info("Copied {} to {}", path, destination); + setResult(RESULT_OK, new Intent() {{ + putExtra(EXTRA_PATH, destination); + }}); + } + } + finish(); + } else { + super.onActivityResult(requestCode, resultCode, data); + } + } + + private File getFilename(String extension) { + AtomicReference nameRef = new AtomicReference<>(); + if (!extension.startsWith(".")) { + extension = "." + extension; + } + try { + String path = preferences.getNewAttachmentPath(extension, nameRef); + File file = new File(path); + file.getParentFile().mkdirs(); + if (!file.createNewFile()) { + throw new RuntimeException("Failed to create " + file.getPath()); + } + return file; + } catch (IOException e) { + log.error(e.getMessage(), e); + } + return null; + } + + private void copyFile(InputStream inputStream, String to) throws IOException { + FileOutputStream fos = new FileOutputStream(to); + byte[] buf = new byte[1024]; + int len; + while ((len = inputStream.read(buf)) != -1) { + fos.write(buf, 0, len); + } + fos.close(); + } + + private String copyToAttachmentDirectory(String file) { + File src = new File(file); + if (!src.exists()) { + Toast.makeText(this, R.string.file_err_copy, Toast.LENGTH_LONG).show(); + return null; + } + + File dst = new File(preferences.getAttachmentsDirectory() + File.separator + src.getName()); + try { + AndroidUtilities.copyFile(src, dst); + } catch (Exception e) { + log.error(e.getMessage(), e); + Toast.makeText(this, R.string.file_err_copy, Toast.LENGTH_LONG).show(); + return null; + } + + return dst.getAbsolutePath(); + } +} diff --git a/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java b/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java new file mode 100644 index 000000000..13751e809 --- /dev/null +++ b/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java @@ -0,0 +1,88 @@ +package org.tasks.dialogs; + +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; + +import org.tasks.R; +import org.tasks.injection.InjectingDialogFragment; +import org.tasks.preferences.DeviceInfo; + +import java.util.List; + +import javax.inject.Inject; + +import static com.google.api.client.util.Lists.newArrayList; + +public class AddAttachmentDialog extends InjectingDialogFragment { + + public interface AddAttachmentCallback { + void takePicture(); + + void pickFromGallery(); + + void pickFromStorage(); + } + + @Inject DialogBuilder dialogBuilder; + @Inject DeviceInfo deviceInfo; + + private AddAttachmentCallback callback; + private DialogInterface.OnCancelListener onCancelListener; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + List entries = newArrayList(); + final List actions = newArrayList(); + if (deviceInfo.hasCamera()) { + entries.add(getString(R.string.take_a_picture)); + actions.add(new Runnable() { + @Override + public void run() { + callback.takePicture(); + } + }); + } + if (deviceInfo.hasGallery()) { + entries.add(getString(R.string.pick_from_gallery)); + actions.add(new Runnable() { + @Override + public void run() { + callback.pickFromGallery(); + } + }); + } + entries.add(getString(R.string.pick_from_storage)); + actions.add(new Runnable() { + @Override + public void run() { + callback.pickFromStorage(); + } + }); + return dialogBuilder.newDialog() + .setItems(entries.toArray(new String[entries.size()]), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + actions.get(which).run(); + } + }) + .show(); + } + + @Override + public void onCancel(DialogInterface dialog) { + super.onCancel(dialog); + + if (onCancelListener != null) { + onCancelListener.onCancel(dialog); + } + } + + public void setAddAttachmentCallback(AddAttachmentCallback callback) { + this.callback = callback; + } + + public void setOnCancelListener(DialogInterface.OnCancelListener onCancelListener) { + this.onCancelListener = onCancelListener; + } +} diff --git a/src/main/java/org/tasks/injection/ActivityModule.java b/src/main/java/org/tasks/injection/ActivityModule.java index 48b33708c..23d05a507 100644 --- a/src/main/java/org/tasks/injection/ActivityModule.java +++ b/src/main/java/org/tasks/injection/ActivityModule.java @@ -22,6 +22,7 @@ import com.todoroo.astrid.reminders.ReminderPreferences; import com.todoroo.astrid.service.UpgradeService; import com.todoroo.astrid.widget.WidgetConfigActivity; +import org.tasks.activities.AddAttachmentActivity; import org.tasks.activities.CalendarSelectionActivity; import org.tasks.activities.ClearAllDataActivity; import org.tasks.activities.ClearGtaskDataActivity; @@ -96,7 +97,8 @@ import dagger.Provides; FileExplore.class, DonationActivity.class, UpgradeService.UpgradeActivity.class, - CalendarSelectionActivity.class + CalendarSelectionActivity.class, + AddAttachmentActivity.class }) public class ActivityModule { diff --git a/src/main/java/org/tasks/injection/DialogFragmentModule.java b/src/main/java/org/tasks/injection/DialogFragmentModule.java index 52b30a1e4..83ad99253 100644 --- a/src/main/java/org/tasks/injection/DialogFragmentModule.java +++ b/src/main/java/org/tasks/injection/DialogFragmentModule.java @@ -4,8 +4,10 @@ import android.app.Activity; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; +import org.tasks.activities.AddAttachmentActivity; import org.tasks.activities.CalendarSelectionDialog; import org.tasks.dialogs.AccountSelectionDialog; +import org.tasks.dialogs.AddAttachmentDialog; import org.tasks.dialogs.LocationPickerDialog; import org.tasks.reminders.MissedCallDialog; import org.tasks.reminders.NotificationDialog; @@ -21,7 +23,8 @@ import dagger.Provides; SnoozeDialog.class, MissedCallDialog.class, CalendarSelectionDialog.class, - AccountSelectionDialog.class + AccountSelectionDialog.class, + AddAttachmentDialog.class }, library = true) public class DialogFragmentModule { diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index 353b0c2ba..1b4ae875d 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -5,8 +5,6 @@ - التقط صورة - اختار من المعرض مسح الصورة إضافة تعليق ... النسخ الإحتياطي @@ -139,8 +137,6 @@ توقف عن التسجيل أختر ملف أختار المسار - ارفق صورة - ارفق ملف من الذاكرة الخارجية استخدم هذا المسار إعادة إلى الافتراضي diff --git a/src/main/res/values-bg-rBG/strings.xml b/src/main/res/values-bg-rBG/strings.xml index 946706c2a..8dbe59060 100644 --- a/src/main/res/values-bg-rBG/strings.xml +++ b/src/main/res/values-bg-rBG/strings.xml @@ -5,8 +5,6 @@ - Направете снимка - Изберете от Галерия Изчисти Картинка Добави коментар... Име @@ -241,8 +239,6 @@ Избери файл Избери директория Грешка в Разрешения! Моля, проверете дали не сте блокирани Tasks от достъп до SD картата. - Прикачи снимка - Прикачи файл от SD карта Грешка при копиране на файла за прикачване Използвай тази директория Възстанови по подразбиране diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index b336a0932..710962033 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -5,8 +5,6 @@ - Fes una fotografia - Tria una imatge de la galeria Neteja la selecció d\'imatge Afegiu un comentari... Còpies de seguretat diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index e5a179c30..5390ae5aa 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -5,8 +5,6 @@ - Vyfoť obrázek - Vybrat obrázek z galerie Odebrat obrázek Přidej comment... Zálohy @@ -211,8 +209,6 @@ Vybrat soubor Vytvořit složku Chyba oprávnění! Ujistěte se prosím, že jste Tasks nezabránil v přístupu k SD kartě. - Připojit obrázek - Připojit soubor z SD karty Chyba při kopírování souboru jako přílohy Použít tento adresář Obnovit výchozí nastavení diff --git a/src/main/res/values-da/strings.xml b/src/main/res/values-da/strings.xml index 949ad8c05..cf3558185 100644 --- a/src/main/res/values-da/strings.xml +++ b/src/main/res/values-da/strings.xml @@ -5,8 +5,6 @@ - Tag et billede - Vælg fra galleri Ryd markering Tilføj en kommentar Backup diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 93f1d3e6b..ad7277b79 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -5,8 +5,6 @@ - Bild aufnehmen - Aus Galerie wählen Bild entfernen Kommentar hinzufügen … Schlagwort eingeben @@ -222,8 +220,6 @@ Wählen Sie eine Datei Wähle ein Verzeichnis Konnte nicht auf die SD-Karte zugreifen. Bitte stellen Sie sicher, das sie den Zugriff auf sie SD Karte nicht eingeschränkt haben. - Ein Bild anhängen - Eine Datei von der SD-Karte anhängen Fehler beim Kopieren der anzuhängenden Datei Dieses Verzeichnis verwenden Auf Standardeinstellungen zurücksetzen diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 560dbae94..295eafef9 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -5,7 +5,6 @@ - Τράβα φωτογραφία Καθαρή εικόνα Προσθήκη σχόλιου... Αντίγραφα ασφαλείας @@ -213,8 +212,6 @@ Επιλογή αρχείου Επιλογή φακέλου Σφάλμα αδειών! Παρακαλώ σιγουρευτείτε ότι δεν έχετε μπλοκάρει την εφαρμογή από την πρόσβαση στην SD κάρτα σας. - Επισύναψη εικόνας - Επισύναψη αρχείου απο την SD κάρτα σας Σφάλμα αντιγραφής αρχείου προς επισύναψη Χρήση αυτού του φακέλου Επαναφορά προεπιλογών diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 42d957717..8eead7d8a 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -5,8 +5,6 @@ - Tomar una foto - Elegir de la galería Borrar imagen Añadir un comentario... Nombre @@ -223,8 +221,6 @@ Elija un archivo Elija un directorio ¡Permiso denegado! Por favor asegúrese permitir a Tasks el acceso a la tarjeta SD. - Adjuntar una imagen - Adjuntar un archivo desde su tarjeta SD Error al copiar el archivo a adjuntar Usar este directorio Restaurar a valores por defecto diff --git a/src/main/res/values-fa/strings.xml b/src/main/res/values-fa/strings.xml index af874f3e4..0a849fe7d 100644 --- a/src/main/res/values-fa/strings.xml +++ b/src/main/res/values-fa/strings.xml @@ -5,8 +5,6 @@ - گرفتن عکس - انتخاب از گالری پاک کردن عکس اضافه کردن نظر نام @@ -168,8 +166,6 @@ انتخاب یک فایل یک پوشه انتخاب کنید خطای دسترسی! لطفا مطمن شوید تسکس را از دسترسی به حافظه خارجی منع نکرده اید. - الصاق یک تصویر - الصاق یک فایل از حافظه خارجی خطای کپی فایل برای ضمیمه استفاده از این پوشه بازگرداندن به پیش فرض diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 2e5ed4bc6..14c49009a 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -5,8 +5,6 @@ - Prendre une photo - Choisir depuis la galerie Supprimer l\'image Ajouter un commentaire Nom @@ -226,8 +224,6 @@ Choisissez un fichier Choisissez un dossier Erreur de permissions ! Assurez-vous qu\'Tasks à le droit d\'accéder à la carte SD. - Joindre une photo - Joindre un fichier à partir de votre carte SD Erreur lors de la copie du fichier à joindre Utiliser ce dossier Rétablir les valeurs par défaut diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 94584d0b4..cd6408d93 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -5,8 +5,6 @@ - Scatta una foto - Scegli dalla Galleria Deseleziona Immagine Aggiungi un commento... Nome @@ -236,8 +234,6 @@ Se visualizzi questo errore più volte, ti consigliamo di cancellare tutti i dat Scegli un file Scegli una cartella Errore di autorizzazioni! Assicurati di non aver bloccato l\'accesso alla scheda SD da parte di Tasks - Allega una foto - Allega un file dalla tua scheda SD Errore di copia dei file da allegare Utilizza questa directory Ripristino impostazioni iniziali diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index 1ec8a248d..e1957a32e 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -5,8 +5,6 @@ - צַלֵּם תמונה - בחר מגלריה הסר תמונה הוסף הערה גיבויים @@ -214,8 +212,6 @@ בחר קובץ יש לבחור תיקייה הרשאות לא מספיקות! אנא בדוק שלא חסמת את אסטריד מלגשת לכרטיס הזיכרון - צרף תמונה - צרף קובץ מכרטיס הזיכרון שגיאה בהעתקת הקובץ המצורף השתמש בתיקיה זו אפס לברירת מחדל diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index dc276d349..26034f0df 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -5,8 +5,6 @@ - 写真を撮る - ギャラリーから選択 写真を削除 コメントする 名前 @@ -240,8 +238,6 @@ ファイルを選択 ディレクトリを選択 パーミッションエラー! SD カードのアクセスで Tasks をブロックしていないことを確認してください. - 画像を添付 - SD カードからファイルを添付 ファイル添付のコピー中にエラー このディレクトリを使用 デフォルトにリセット diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index 6c47380d9..1b41bed1d 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -5,8 +5,6 @@ - 사진 찍기 - 갤러리에서 가져오기 사진 제거하기 댓글 쓰기... 이름 @@ -243,8 +241,6 @@ Tasks의 백업에서 당신의 일정을 복구하시기 바랍니다. 파일 선택하기 디렉토리 선택하기 권한 에러! Tasks가 SD 카드에 접근하는 것을 막지 않았는지 확인하세요. - 그림 첨부하기 - SD 카드에서 파일 첨부하기 첨부용 파일 복사 에러 이 디렉토리 사용 기본값으로 초기화 diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 80ace281d..d04338a1d 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -5,8 +5,6 @@ - Maak een Foto - Kies uit de Galerij Verwijder Foto Voeg een opmerking toe Naam @@ -237,8 +235,6 @@ Bestand kiezen Kies een directory Bestandsrechtenfout! Let erop dat Tasks toegang heeft tot de SD-kaart. - Afbeelding toevoegen - Bestand toevoegen vanaf SD-kaart Fout bij kopiëren toe te voegen bestand Gebruik deze directory. Stel opnieuw in naar standaardinstellingen diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index e83adec1b..575dec492 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -5,8 +5,6 @@ - Zrób zdjęcie - Wybierz z galerii Usuń obrazek Dodaj komentarz... Kopie zapasowe @@ -217,8 +215,6 @@ i odzyskanie zadań z kopi zapasowej (Settings->Sync and backup->Backup-&g Wybierz plik Wybierz katalog Błąd dostępu! Proszę upewnić się, że Tasks nie ma zablokowanego dostępu do karty SD. - Dodaj obrazek - Dodaj plik z karty SD Błąd kopiowania pliku do załącznika Użycie tego katalogu Przywróć ustawienia domyślne diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index e1b8d2362..3d6b56fa8 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -5,8 +5,6 @@ - Tirar uma foto - Selecionar da galeria Limpar imagem Comentar... Importar tarefas @@ -213,8 +211,6 @@ Escolha um arquivo Escolha um diretório Erro de permissões! Certifique-se de que você não bloqueou o Tasks de acessar o cartão SD. - Anexe uma imagem - Anexe um arquivo do seu cartão SD Erro ao copiar o arquivo para o anexo Usar este diretório Restaurar padrões diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index 5570bda40..f69f0d1ab 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -5,8 +5,6 @@ - Tirar uma foto - Escolher da galeria Limpar imagem Adicionar um comentário... Nome @@ -234,8 +232,6 @@ das tarefas através de um backup em Definições->Sincronização e backup-& Escolha um ficheiro Escolha um diretório Erro de permissões! Certifique-se que o Tasks tem permissões para aceder ao cartão SD: - Anexar imagem - Anexar um ficheiro do cartão SD Erro ao copiar o ficheiro como anexo Usar este diretório Restaurar definições originais diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index c320ad380..9ecbcccd6 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -5,8 +5,6 @@ - Сделать снимок - Взять из галереи Убрать изображение Добавить комментарий... Тег: @@ -239,8 +237,6 @@ Выбрать файл Выбрать папку Ошибка доступа! Пожалуйста убедитесь, что Tasks имеет доступ к SD карте. - Прикрепите изображение - Прикрепите файл с карты памяти SD. Ошибка копирования прикрепляемого файла. Использовать эту папку Сбросить настройки diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index c2da9bbb4..1bfbc759f 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -5,8 +5,6 @@ - Odfotiť - Vybrať z galérie Vymazať obrázok Komentovať... Názov @@ -226,8 +224,6 @@ Vybrať súbor Vytvoriť zložku Chyba oprávnenia! Prosím, uisti sa, či Tasks namá zablokovaný prístup k SD karte. - Priložiť obrázok - Priložiť súbor z SD karty Chyba pri kopírovaní súboru do prílohy Použiť tento adresár Obnoviť predvolené diff --git a/src/main/res/values-sl-rSI/strings.xml b/src/main/res/values-sl-rSI/strings.xml index 6fcaad11d..58d0dfcb0 100644 --- a/src/main/res/values-sl-rSI/strings.xml +++ b/src/main/res/values-sl-rSI/strings.xml @@ -5,8 +5,6 @@ - Naredi fotografijo - Izberi iz Galerije Zbriši fotografijo Dodaj komentar... Varnostne kopije @@ -217,8 +215,6 @@ Izberite datoteko Izberite mapo Napaka pri dovoljenjih! Prosimo, preverite, da niste preprečili aplikaciji Opravki dostopa do SD kartice. - Pripni sliko - Pripni datoteko z SD kartice Napaka pri kopiranju datoteke za priponko Uporabi to mapo Ponastavi na privzeto diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index e49abe2e1..8589021be 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -5,8 +5,6 @@ - Ta en bild - Välj från galleri Rensa bild Lägg till en kommentar... Säkerhetskopior @@ -211,8 +209,6 @@ och återställer dina aktuella uppgifter från en backup Välj en fil Välj sökväg Behörighets fel! Vänligen kontrollera att du inte blockat Tasks från att komma åt SD-kortet. - Bifoga en bild - Bifoga en fil från SD-kortet Bifoga fil misslyckades: fel vid kopiering Använd denna mapp Återställ till standard diff --git a/src/main/res/values-th/strings.xml b/src/main/res/values-th/strings.xml index f2191ea1f..a43d9ffe1 100644 --- a/src/main/res/values-th/strings.xml +++ b/src/main/res/values-th/strings.xml @@ -5,8 +5,6 @@ - ถ่ายภาพ - เลือกจากคลังภาพ ล้างภาพ สำรองข้อมูล กำลังอ่านแผนงาน %d... diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index df6951819..2814a6679 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -5,8 +5,6 @@ - Resim Çek - Galeriden Seç Resmi sil Yorum Gir Yedekler @@ -192,8 +190,6 @@ Bir dosya seçin Bir dizin seçin İzin hatası! Tasks\'in SD kartınıza erişiminin engellenmediğinden emin olun lütfen. - Bir resim ekle - SD kartınızdan bir dosya ekleyin Dosyanın ek olarak kopyalanmasında hata Bu dizini kullan Öntanımlı değere dön diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 27c9ca50f..8cc32f49f 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -5,8 +5,6 @@ - Зробити знімок - Завантажити з Галереї Очистити Додати коментар Резервні копії @@ -221,8 +219,6 @@ Вибрати файл Вибрати каталог Помилка доступу! Будь ласка переконайтеся, що ви не заблокували Tasks для доступу до SD карти. - Прикріпити зображення - Додати файл з SD карти Помилка копіювання доданого файлу. Використовувати цю папку Скинути налаштування за замовчуванням diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 3142bc00c..45f827615 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -5,8 +5,6 @@ - 拍照 - 从相册中选取 取消选择 添加注释... 备份 @@ -171,8 +169,6 @@ 选择一个文件 选择一个目录 权限出错!请确保您没有阻止清单小助理访问 SD 卡。 - 附上一幅图片 - 附上一份来自您 SD 卡的文件 复制文件添加附件时出错 使用此目录 重设为默认值 diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index 849f5bbc4..76a077774 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -5,8 +5,6 @@ - 拍下照片 - 從圖庫選擇 清除圖片 添加評論 備份 @@ -202,8 +200,6 @@ 選擇一個文件 選擇一個目錄 權限出錯!請確保您沒有阻止Tasks訪問SD 卡。 - 附上一幅圖片 - 附上一份來自您 SD 卡的文件 複製文件添加附件時出錯 使用此目錄 重設為默認值 diff --git a/src/main/res/values/strings-actfm.xml b/src/main/res/values/strings-actfm.xml index 4497a6053..8fd2b0c70 100644 --- a/src/main/res/values/strings-actfm.xml +++ b/src/main/res/values/strings-actfm.xml @@ -3,12 +3,6 @@ - - Take a Picture - - - Pick from Gallery - Clear Picture diff --git a/src/main/res/values/strings-premium.xml b/src/main/res/values/strings-premium.xml index 9a57131af..97f26f97f 100644 --- a/src/main/res/values/strings-premium.xml +++ b/src/main/res/values/strings-premium.xml @@ -13,8 +13,6 @@ Choose a file Choose a directory Permissions error! Please make sure you have not blocked Tasks from accessing the SD card. - Attach a picture - Attach a file from your SD card Error copying file for attachment Use this directory diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 0356f4be8..9da98d3fd 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -129,6 +129,9 @@ Number of vibrations Length of each vibration (milliseconds) Pause between vibrations (milliseconds) + Take a picture + Pick from gallery + Pick from storage