Only allow picture attachments from gallery

* Read from URI input stream to handle non-file URIs
* Pictures from camera stored in attachment directory
pull/189/head
Alex Baker 10 years ago
parent 053ef047bd
commit 22947b936c

@ -8,10 +8,9 @@ import android.os.Environment;
import android.provider.MediaStore;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.io.InputStream;
public class FileHelper {
public static File getExternalFilesDir(Context context, String type) {
@ -40,11 +39,13 @@ public class FileHelper {
}
}
public static void copyFile(String from, String to) throws IOException {
FileChannel source = new FileInputStream(from).getChannel();
FileChannel destination = new FileOutputStream(to).getChannel();
destination.transferFrom(source, 0, source.size());
destination.close();
source.close();
public static 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();
}
}

@ -7,6 +7,7 @@
<resources>
<string name="today">Σήμερα</string>
<string name="tomorrow">Αύριο</string>
<string name="yesterday">Χθές</string>
<string name="sync_SPr_group_status">Κατάσταση</string>
<string name="sync_SPr_group_options">Ρυθμίσεις</string>
</resources>

@ -7,27 +7,30 @@ package com.todoroo.astrid.actfm;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.webkit.MimeTypeMap;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import com.todoroo.andlib.utility.DateUtilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tasks.R;
import org.tasks.files.FileHelper;
import org.tasks.preferences.Preferences;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicReference;
import static org.tasks.files.FileHelper.getPathFromUri;
import static com.todoroo.astrid.files.FileUtilities.getNewAttachmentPath;
import static org.tasks.files.FileHelper.copyFile;
public class ActFmCameraModule {
@ -42,7 +45,7 @@ public class ActFmCameraModule {
public void clearImage();
}
public static void showPictureLauncher(final Fragment fragment, final ClearImageCallback clearImageOption) {
public static void showPictureLauncher(final Fragment fragment, final Preferences preferences, final ClearImageCallback clearImageOption) {
ArrayList<String> options = new ArrayList<>();
final Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
@ -65,7 +68,7 @@ public class ActFmCameraModule {
@Override
public void onClick(DialogInterface d, int which) {
if(which == 0 && cameraAvailable) {
lastTempFile = getTempFile(fragment.getActivity());
lastTempFile = getFilename(fragment.getActivity(), preferences, ".jpeg");
if (lastTempFile == null) {
Toast.makeText(fragment.getActivity(), R.string.external_storage_unavailable, Toast.LENGTH_LONG).show();
d.dismiss();
@ -76,8 +79,7 @@ public class ActFmCameraModule {
} else if ((which == 1 && cameraAvailable) || (which == 0 && !cameraAvailable)) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
fragment.startActivityForResult(Intent.createChooser(intent,
fragment.getString(R.string.actfm_TVA_tag_picture)), REQUEST_CODE_PICTURE);
fragment.startActivityForResult(new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI), REQUEST_CODE_PICTURE);
} else {
if (clearImageOption != null) {
clearImageOption.clearImage();
@ -92,12 +94,19 @@ public class ActFmCameraModule {
.show().setOwnerActivity(fragment.getActivity());
}
private static File getTempFile(Activity activity) {
private static File getFilename(Activity activity, Preferences preferences, String extension) {
AtomicReference<String> nameRef = new AtomicReference<>();
if (!extension.startsWith(".")) {
extension = "." + extension;
}
try {
File path = FileHelper.getExternalFilesDir(activity, "pictures");
if (path != null) {
return File.createTempFile(Long.toString(DateUtilities.now()), ".jpg", path);
String path = getNewAttachmentPath(preferences, activity, 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);
}
@ -108,7 +117,7 @@ public class ActFmCameraModule {
public void handleCameraResult(Uri uri);
}
public static boolean activityResult(Activity activity, int requestCode, int resultCode, Intent data,
public static boolean activityResult(Activity activity, Preferences preferences, int requestCode, int resultCode, Intent data,
CameraResultCallback cameraResult) {
if(requestCode == ActFmCameraModule.REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {
if (lastTempFile != null) {
@ -120,11 +129,19 @@ public class ActFmCameraModule {
return true;
} else if(requestCode == ActFmCameraModule.REQUEST_CODE_PICTURE && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String path = getPathFromUri(activity, uri);
if (new File(path).exists()) {
activity.setResult(Activity.RESULT_OK);
cameraResult.handleCameraResult(uri);
ContentResolver contentResolver = activity.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String extension = mime.getExtensionFromMimeType(contentResolver.getType(uri));
File tempFile = getFilename(activity, preferences, extension);
log.debug("Writing {} to {}", uri, tempFile);
try {
InputStream inputStream = activity.getContentResolver().openInputStream(uri);
copyFile(inputStream, tempFile.getPath());
} catch (IOException e) {
throw new RuntimeException(e);
}
activity.setResult(Activity.RESULT_OK);
cameraResult.handleCameraResult(Uri.fromFile(tempFile));
return true;
}
return false;

@ -225,7 +225,7 @@ public class TagSettingsActivity extends InjectingActionBarActivity {
log.error("Not expecting this");
}
};
if (!ActFmCameraModule.activityResult(this, requestCode, resultCode, data, callback)) {
if (!ActFmCameraModule.activityResult(this, preferences, requestCode, resultCode, data, callback)) {
if(requestCode == REQUEST_ACTFM_LOGIN && resultCode == Activity.RESULT_OK) {
saveSettings();
} else {

@ -86,6 +86,7 @@ import com.todoroo.astrid.voice.VoiceRecognizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingFragment;
import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.ActivityPreferences;
@ -95,11 +96,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;
import static org.tasks.files.FileHelper.copyFile;
import static org.tasks.files.FileHelper.getPathFromUri;
/**
@ -177,6 +176,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
@Inject ActivityPreferences preferences;
@Inject DateChangedAlerts dateChangedAlerts;
@Inject TagDataDao tagDataDao;
@Inject @ForApplication Context context;
// --- UI components
@ -820,7 +820,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
@Override
public void onClick(DialogInterface d, int which) {
if(which == 0) {
ActFmCameraModule.showPictureLauncher(TaskEditFragment.this, null);
ActFmCameraModule.showPictureLauncher(TaskEditFragment.this, preferences, null);
} else if (which == 1) {
Intent attachFile = new Intent(getActivity(), FileExplore.class);
startActivityForResult(attachFile, REQUEST_CODE_ATTACH_FILE);
@ -871,13 +871,12 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
createNewFileAttachment(path, name, type);
}
private void attachImage(String input) {
AtomicReference<String> nameRef = new AtomicReference<>();
private void attachImage(Uri uri) {
try {
String path = FileUtilities.getNewImageAttachmentPath(preferences, getActivity(), nameRef);
copyFile(input, path);
String path = getPathFromUri(getActivity(), uri);
File file = new File(path);
String extension = path.substring(path.lastIndexOf('.') + 1);
createNewFileAttachment(path, nameRef.get(), TaskAttachment.FILE_TYPE_IMAGE + extension);
createNewFileAttachment(path, file.getName(), TaskAttachment.FILE_TYPE_IMAGE + extension);
} catch (Exception e) {
log.error(e.getMessage(), e);
Toast.makeText(getActivity(), R.string.file_err_copy, Toast.LENGTH_LONG).show();
@ -981,10 +980,10 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
return;
}
ActFmCameraModule.activityResult(getActivity(), requestCode, resultCode, data, new CameraResultCallback() {
ActFmCameraModule.activityResult(getActivity(), preferences, requestCode, resultCode, data, new CameraResultCallback() {
@Override
public void handleCameraResult(Uri uri) {
attachImage(getPathFromUri(getActivity(), uri));
attachImage(uri);
}
});

@ -8,53 +8,26 @@ package com.todoroo.astrid.files;
import android.content.Context;
import android.text.TextUtils;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.data.TaskAttachment;
import org.tasks.R;
import org.joda.time.DateTime;
import org.tasks.files.FileHelper;
import org.tasks.preferences.Preferences;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicReference;
import static org.tasks.date.DateTimeUtils.newDate;
public class FileUtilities {
/**
* @return Date string for use with file attachment names
*/
public static String getDateStringForFilename(Context context, Date date) {
return DateUtilities.getDateStringHideYear(date) + ", " + getTimeStringForFilename(context, date); //$NON-NLS-1$
}
private static String getTimeStringForFilename(Context context, Date date) {
String value;
if (DateUtilities.is24HourFormat(context)) {
value = "HH.mm";
}
else {
value = "hh.mma";
}
return new SimpleDateFormat(value).format(date);
}
public static String getNewImageAttachmentPath(Preferences preferences, Context context, AtomicReference<String> nameReference) {
return getNewAttachmentPath(preferences, context, R.string.file_prefix_image, ".png", nameReference); //$NON-NLS-1$
}
public static String getNewAudioAttachmentPath(Preferences preferences, Context context, AtomicReference<String> nameReference) {
return getNewAttachmentPath(preferences, context, R.string.file_prefix_voice, ".m4a", nameReference); //$NON-NLS-1$
return getNewAttachmentPath(preferences, context, ".m4a", nameReference); //$NON-NLS-1$
}
private static String getNewAttachmentPath(Preferences preferences, Context context, int prefixId, String extension, AtomicReference<String> nameReference) {
public static String getNewAttachmentPath(Preferences preferences, Context context, String extension, AtomicReference<String> nameReference) {
String dir = getAttachmentsDirectory(preferences, context).getAbsolutePath();
String name = getNonCollidingFileName(dir, context.getString(prefixId) + " " + getDateStringForFilename(context, newDate()), extension);
String name = getNonCollidingFileName(dir, new DateTime().toString("yyyyMMddHHmm"), extension);
if (nameReference != null) {
nameReference.set(name);

@ -229,9 +229,9 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
@Override
public void onClick(View v) {
if (pendingCommentPicture != null) {
ActFmCameraModule.showPictureLauncher(fragment, clearImage);
ActFmCameraModule.showPictureLauncher(fragment, preferences, clearImage);
} else {
ActFmCameraModule.showPictureLauncher(fragment, null);
ActFmCameraModule.showPictureLauncher(fragment, preferences, null);
}
respondToPicture = true;
}
@ -492,7 +492,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
}
};
return (ActFmCameraModule.activityResult((Activity)getContext(),
return (ActFmCameraModule.activityResult((Activity)getContext(), preferences,
requestCode, resultCode, data, callback));
} else {
return false;

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Afegiu un comentari...</string>
<string name="actfm_TVA_menu_refresh">Actualitza</string>
<string name="actfm_TVA_tag_label">Llista</string>
<string name="actfm_TVA_tag_picture">Imatge de la llista</string>
<string name="actfm_TVA_tag_name_hint">Escriviu el nom de la llista</string>
<string name="actfm_GAA_title">Trieu el compte de Google que vulgueu utilitzar:</string>
<string name="alarm_ACS_label">Alarmes</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Přidej comment...</string>
<string name="actfm_TVA_menu_refresh">Obnovit</string>
<string name="actfm_TVA_tag_label">Název listu:</string>
<string name="actfm_TVA_tag_picture">Obrázek listu</string>
<string name="actfm_TVA_tag_name_hint">Název seznamu</string>
<string name="actfm_GAA_title">Vyberte, který účet Google chcete použít:</string>
<string name="alarm_ACS_label">Alarmy</string>
@ -293,7 +292,6 @@
<string name="search_market_ms_title">Chybí prohlížeč MS Office</string>
<string name="file_type_unhandled">Pro tento typ souborů nebyla nalezena žádná aplikace.</string>
<string name="file_type_unhandled_title">Chybí aplikace</string>
<string name="file_prefix_voice">Hlas</string>
<string name="file_browser_up">O úroveň výš</string>
<string name="file_browser_err_permissions">Chyba oprávnění! Ujistěte se prosím, že jste Tasks nezabránil v přístupu k SD kartě.</string>
<string name="file_add_picture">Připojit obrázek</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Tilføj en kommentar</string>
<string name="actfm_TVA_menu_refresh">Opdater</string>
<string name="actfm_TVA_tag_label">Listenavn</string>
<string name="actfm_TVA_tag_picture">Liste billede</string>
<string name="actfm_GAA_title">Vælg den Google-konto du vil anvende:</string>
<string name="alarm_ACS_label">Alarmer</string>
<string name="alarm_ACS_button">Tilføj en alarm</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Kommentar hinzufügen …</string>
<string name="actfm_TVA_menu_refresh">Aktualisieren</string>
<string name="actfm_TVA_tag_label">Liste</string>
<string name="actfm_TVA_tag_picture">Listenbild</string>
<string name="actfm_TVA_tag_name_hint">Vergebe einen Listennamen</string>
<string name="actfm_GAA_title">Wählen Sie den zu verwendenden Google-Account aus:</string>
<string name="alarm_ACS_label">Alarme</string>
@ -354,8 +353,6 @@
<string name="search_market_ms_title">Es wurde kein Office-Reader gefunden</string>
<string name="file_type_unhandled">Tut mir leid! Dieser Dateityp kann nicht geöffnet werden.</string>
<string name="file_type_unhandled_title">Es wurde keine Anwendung gefunden</string>
<string name="file_prefix_image">Bild</string>
<string name="file_prefix_voice">Stimme</string>
<string name="file_browser_up">Nach oben</string>
<string name="file_browser_title">Wählen Sie eine Datei</string>
<string name="dir_browser_title">Wähle ein Verzeichnis</string>

@ -272,8 +272,6 @@
<string name="search_market_ms_title">Δεν βρέθηκε αναγνώστης αρχείων MS Office.</string>
<string name="file_type_unhandled">Συγγνώμη! Δεν βρέθηκε εφαρμογή που να χειρίζεται τέτοιο τύπο αρχείου</string>
<string name="file_type_unhandled_title">Δεν βρέθηκε εφαρμογή</string>
<string name="file_prefix_image">Εικόνα</string>
<string name="file_prefix_voice">Φωνή</string>
<string name="file_browser_up">Πάνω</string>
<string name="file_browser_title">Επιλογή αρχείου</string>
<string name="dir_browser_title">Επιλογή φακέλου</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Añadir un comentario...</string>
<string name="actfm_TVA_menu_refresh">Actualizar</string>
<string name="actfm_TVA_tag_label">Lista</string>
<string name="actfm_TVA_tag_picture">Imagen de Lista</string>
<string name="actfm_TVA_tag_name_hint">Indique nombre de lista</string>
<string name="actfm_GAA_title">Seleccione la cuenta de Google que desea usar:</string>
<string name="alarm_ACS_label">Alarmas</string>
@ -361,8 +360,6 @@ Tasks podría no avisarle cuanto venza una tarea.\n</string>
<string name="search_market_ms_title">No se encontró lector para archivos de MS Office</string>
<string name="file_type_unhandled">Lo sentimos! No se encontró ninguna aplicación para abrir este tipo de archivo.</string>
<string name="file_type_unhandled_title">No se encontró ninguna aplicación</string>
<string name="file_prefix_image">Imagen</string>
<string name="file_prefix_voice">Voz</string>
<string name="file_browser_up">Arriba</string>
<string name="file_browser_title">Elija un archivo</string>
<string name="dir_browser_title">Elija un directorio</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Ajouter un commentaire</string>
<string name="actfm_TVA_menu_refresh">Mettre à jour</string>
<string name="actfm_TVA_tag_label">Nom de la liste :</string>
<string name="actfm_TVA_tag_picture">Liste des Images</string>
<string name="actfm_TVA_tag_name_hint">Entrez un nom de liste</string>
<string name="actfm_GAA_title">Sélectionnez le compte Google que vous voulez utiliser :</string>
<string name="alarm_ACS_label">Alarmes</string>
@ -357,7 +356,6 @@
<string name="search_market_ms_title">Aucun lecteur MS Office n\'a été trouvé</string>
<string name="file_type_unhandled">Désolé ! Aucune application n\'a été trouvé pour gérer ce type de fichier.</string>
<string name="file_type_unhandled_title">Aucune application trouvée</string>
<string name="file_prefix_voice">Voix</string>
<string name="file_browser_up">Remonter</string>
<string name="file_browser_title">Choisissez un fichier</string>
<string name="dir_browser_title">Choisissez un dossier</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Aggiungi un commento...</string>
<string name="actfm_TVA_menu_refresh">Aggiorna</string>
<string name="actfm_TVA_tag_label">Lista</string>
<string name="actfm_TVA_tag_picture">Elenco Immagini</string>
<string name="actfm_TVA_tag_name_hint">Inserisci il nome della lista</string>
<string name="actfm_GAA_title">Seleziona l\'account Google che vuoi utilizzare:</string>
<string name="alarm_ACS_label">Promemoria</string>
@ -325,8 +324,6 @@ Se visualizzi questo errore più volte, ti consigliamo di cancellare tutti i dat
<string name="search_market_ms_title">Non è stato trovato nessun lettore di documenti MS Office</string>
<string name="file_type_unhandled">Spiacente! Non è stata trovata nessuna applicazione per gestire questo tipo di file</string>
<string name="file_type_unhandled_title">Spiacente! Non è stata trovata nessuna applicazione</string>
<string name="file_prefix_image">Immagine</string>
<string name="file_prefix_voice">Voce</string>
<string name="file_browser_up">Su</string>
<string name="file_browser_title">Scegli un file</string>
<string name="dir_browser_title">Scegli una cartella</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">הוסף הערה</string>
<string name="actfm_TVA_menu_refresh">רַעְנֵן</string>
<string name="actfm_TVA_tag_label">רשימה</string>
<string name="actfm_TVA_tag_picture">תמונת רשימה</string>
<string name="actfm_TVA_tag_name_hint">הכנס שם רשימה</string>
<string name="actfm_GAA_title">בחר חשבון גוגל</string>
<string name="alarm_ACS_label">התראות</string>
@ -362,8 +361,6 @@
<string name="search_market_ms_title">לא נמצא קורא לקבצי אופיס</string>
<string name="file_type_unhandled">\"מצטערת! לא מצאתי ישום שיכול לטפל בקבצים מסוג זה\"</string>
<string name="file_type_unhandled_title">יישום לא נמצא</string>
<string name="file_prefix_image">תמונה</string>
<string name="file_prefix_voice">קול</string>
<string name="file_browser_up">מעלה</string>
<string name="file_browser_title">בחר קובץ</string>
<string name="dir_browser_title">יש לבחור תיקייה</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">コメントする</string>
<string name="actfm_TVA_menu_refresh">更新</string>
<string name="actfm_TVA_tag_label">リスト</string>
<string name="actfm_TVA_tag_picture">リスト写真</string>
<string name="actfm_TVA_tag_name_hint">リスト名を記入してください</string>
<string name="actfm_GAA_title">使用したいGoogleアカウントを選択してください:</string>
<string name="alarm_ACS_label">アラーム</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">댓글 쓰기...</string>
<string name="actfm_TVA_menu_refresh">새로고침</string>
<string name="actfm_TVA_tag_label">목록</string>
<string name="actfm_TVA_tag_picture">목록 사진</string>
<string name="actfm_TVA_tag_name_hint">목록 이름을 입력하세요</string>
<string name="actfm_GAA_title">사용하려는 구글 계정을 선택해 주십시오:</string>
<string name="alarm_ACS_label">알람</string>
@ -368,8 +367,6 @@
<string name="search_market_ms_title">MS 오피스 리더 없음</string>
<string name="file_type_unhandled">죄송하지만 이 파일 형식을 다룰 수 있는 프로그램이 없습니다.</string>
<string name="file_type_unhandled_title">프로그램이 없음</string>
<string name="file_prefix_image">이미지</string>
<string name="file_prefix_voice">음성</string>
<string name="file_browser_up">위로</string>
<string name="file_browser_title">파일 선택하기</string>
<string name="dir_browser_title">디렉토리 선택하기</string>

@ -174,7 +174,6 @@
<string name="CFC_gtasks_list_text">I liste: ?</string>
<string name="locale_notification">Du har $NUM som matcher: $FILTER</string>
<string name="EPr_powerpack_header">Avanserte innstillinger</string>
<string name="file_prefix_voice">Tale</string>
<string name="file_browser_up">Opp</string>
<string name="file_browser_title">Velg en fil</string>
<string name="TEA_reminder_label">Minn meg på...</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Voeg een opmerking toe</string>
<string name="actfm_TVA_menu_refresh">Vernieuwen</string>
<string name="actfm_TVA_tag_label">Lijst</string>
<string name="actfm_TVA_tag_picture">Lijstafbeelding</string>
<string name="actfm_TVA_tag_name_hint">Geef de lijst een naam</string>
<string name="actfm_GAA_title">Selecteer de Google account die je wil gebruiken:</string>
<string name="alarm_ACS_label">Herinneringen</string>
@ -361,8 +360,6 @@
<string name="search_market_ms_title">Geen MS Office-lezer gevonden</string>
<string name="file_type_unhandled">Sorry! Er is geen applicatie gevonden die dit bestandtype ondersteunt.</string>
<string name="file_type_unhandled_title">Geen applicatie gevonden</string>
<string name="file_prefix_image">Afbeelding</string>
<string name="file_prefix_voice">Spraak</string>
<string name="file_browser_up">Omhoog</string>
<string name="file_browser_title">Bestand kiezen</string>
<string name="dir_browser_title">Kies een directory</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Dodaj komentarz...</string>
<string name="actfm_TVA_menu_refresh">Odśwież</string>
<string name="actfm_TVA_tag_label">Lista</string>
<string name="actfm_TVA_tag_picture">Obrazek listy</string>
<string name="actfm_TVA_tag_name_hint">Podaj nazwę listy</string>
<string name="actfm_GAA_title">Wybierz konto Google, którego chcesz użyć:</string>
<string name="alarm_ACS_label">Alarmy</string>
@ -352,8 +351,6 @@ i odzyskanie zadań z kopi zapasowej (Settings-&gt;Sync and backup-&gt;Backup-&g
<string name="search_market_ms_title">Nie znaleziono czytnika MS Office</string>
<string name="file_type_unhandled">Przepraszamy! Nie znaleziono aplikacji do obsługi tego typu pliku.</string>
<string name="file_type_unhandled_title">Nie znaleziono aplikacji</string>
<string name="file_prefix_image">Grafika</string>
<string name="file_prefix_voice">Głos</string>
<string name="file_browser_up">Do góry</string>
<string name="file_browser_title">Wybierz plik</string>
<string name="dir_browser_title">Wybierz katalog</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Comentar...</string>
<string name="actfm_TVA_menu_refresh">Atualizar</string>
<string name="actfm_TVA_tag_label">Lista</string>
<string name="actfm_TVA_tag_picture">Imagem da lista</string>
<string name="actfm_TVA_tag_name_hint">Entre com o nome da lista</string>
<string name="actfm_GAA_title">Selecione a conta do Google que deseja usar:</string>
<string name="alarm_ACS_label">Alarmes</string>
@ -339,8 +338,6 @@
<string name="search_market_ms_title">Nenhum leitor MS Office encontrado</string>
<string name="file_type_unhandled">Desculpa! Nenhuma aplicação para manipular este tipo de arquivo foi encontrada.</string>
<string name="file_type_unhandled_title">Aplicação não encontrada</string>
<string name="file_prefix_image">Imagem</string>
<string name="file_prefix_voice">Voz</string>
<string name="file_browser_up">Subir</string>
<string name="file_browser_title">Escolha um arquivo</string>
<string name="dir_browser_title">Escolha um diretório</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Adicionar um comentário...</string>
<string name="actfm_TVA_menu_refresh">Recarregar</string>
<string name="actfm_TVA_tag_label">Lista</string>
<string name="actfm_TVA_tag_picture">Imagem</string>
<string name="actfm_TVA_tag_name_hint">Escreva o nome da lista</string>
<string name="actfm_GAA_title">Escolha a conta Google a utilizar:</string>
<string name="alarm_ACS_label">Alarmes</string>
@ -367,8 +366,6 @@ das tarefas através de um backup em Definições-&gt;Sincronização e backup-&
<string name="search_market_ms_title">Leitor de documentos MS Office não encontrado</string>
<string name="file_type_unhandled">Não foi encontrada qualquer aplicação para gerir ficheiros deste tipo.</string>
<string name="file_type_unhandled_title">Aplicação não encontrada</string>
<string name="file_prefix_image">Imagem</string>
<string name="file_prefix_voice">Voz</string>
<string name="file_browser_up">Subir</string>
<string name="file_browser_title">Escolha um ficheiro</string>
<string name="dir_browser_title">Escolha um diretório</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Добавить комментарий...</string>
<string name="actfm_TVA_menu_refresh">Обновить</string>
<string name="actfm_TVA_tag_label">Список</string>
<string name="actfm_TVA_tag_picture">Укажите фото:</string>
<string name="actfm_TVA_tag_name_hint">Введите имя списка</string>
<string name="actfm_GAA_title">Выберите аккаунт Google, который вы хотите использовать:</string>
<string name="alarm_ACS_label">Напоминания</string>
@ -365,8 +364,6 @@
<string name="search_market_ms_title">Не найдена программа для просмотра файлов MS Office.</string>
<string name="file_type_unhandled">Извините! Не найдена программа для просмотра файлов этого типа.</string>
<string name="file_type_unhandled_title">Не найдена программа для просмотра файлов этого типа.</string>
<string name="file_prefix_image">Изображение</string>
<string name="file_prefix_voice">Голос</string>
<string name="file_browser_up">Вверх</string>
<string name="file_browser_title">Выбрать файл</string>
<string name="dir_browser_title">Выберите целевой каталог</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Dodaj komentar...</string>
<string name="actfm_TVA_menu_refresh">Osveži</string>
<string name="actfm_TVA_tag_label">Seznam</string>
<string name="actfm_TVA_tag_picture">Seznami slik</string>
<string name="actfm_TVA_tag_name_hint">Vnesi ime seznama</string>
<string name="actfm_GAA_title">Izberite želeni Google račun:</string>
<string name="alarm_ACS_label">Glasna opozorila</string>
@ -363,8 +362,6 @@
<string name="search_market_ms_title">Ne najdem bralnika MS Office</string>
<string name="file_type_unhandled">Žal nobena aplikacija ne ustreza takim datotekam.</string>
<string name="file_type_unhandled_title">Ni ustrezne aplikacije</string>
<string name="file_prefix_image">Slika</string>
<string name="file_prefix_voice">Glas</string>
<string name="file_browser_up">Gor</string>
<string name="file_browser_title">Izberite datoteko</string>
<string name="dir_browser_title">Izberite mapo</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Lägg till en kommentar...</string>
<string name="actfm_TVA_menu_refresh">Uppdatera</string>
<string name="actfm_TVA_tag_label">Lista</string>
<string name="actfm_TVA_tag_picture">Listbild</string>
<string name="actfm_TVA_tag_name_hint">Ange listnamn</string>
<string name="actfm_GAA_title">Välj vilket Googlekonto du vill använda:</string>
<string name="alarm_ACS_label">Alarm</string>
@ -351,8 +350,6 @@ och återställer dina aktuella uppgifter från en backup
<string name="search_market_ms_title">Ingen MS Office-läsare hittades</string>
<string name="file_type_unhandled">Tyvärr hittades ingen applikation för att hantera den här filtypen</string>
<string name="file_type_unhandled_title">Ingen passande applikation hittades</string>
<string name="file_prefix_image">Bild</string>
<string name="file_prefix_voice">Röst</string>
<string name="file_browser_up">Upp</string>
<string name="file_browser_title">Välj en fil</string>
<string name="dir_browser_title">Välj sökväg</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Yorum Gir</string>
<string name="actfm_TVA_menu_refresh">Yenile</string>
<string name="actfm_TVA_tag_label">Liste İsmi:</string>
<string name="actfm_TVA_tag_picture">Liste Resmi</string>
<string name="actfm_TVA_tag_name_hint">Liste adı girin</string>
<string name="actfm_GAA_title">Kullanmak istediğiniz Google hesabını seçin:</string>
<string name="alarm_ACS_label">Alarmlar</string>
@ -323,8 +322,6 @@
<string name="search_market_ms_title">MS Office okuyucu bulunamadı</string>
<string name="file_type_unhandled">Üzgünüm! Bu dosya türünü destekleyen bir uygulama bulunamadı.</string>
<string name="file_type_unhandled_title">Uygulama bulunamadı</string>
<string name="file_prefix_image">Görüntü</string>
<string name="file_prefix_voice">Ses</string>
<string name="file_browser_up">Yukarı</string>
<string name="file_browser_title">Bir dosya seçin</string>
<string name="dir_browser_title">Bir dizin seçin</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">Додати коментар</string>
<string name="actfm_TVA_menu_refresh">Оновити</string>
<string name="actfm_TVA_tag_label">Список</string>
<string name="actfm_TVA_tag_picture">Зображення Списку</string>
<string name="actfm_TVA_tag_name_hint">Введіть назву списку</string>
<string name="actfm_GAA_title">Виберіть обліковий запис Google для використання:</string>
<string name="alarm_ACS_label">Сигнали</string>
@ -368,8 +367,6 @@
<string name="search_market_ms_title">Не знайдено програма для перегляду файлів MS Office.</string>
<string name="file_type_unhandled">Вибачте! Не знайдено програму для перегляду файлів цього типу.</string>
<string name="file_type_unhandled_title">Програму не знайдено</string>
<string name="file_prefix_image">Зображення</string>
<string name="file_prefix_voice">Голос</string>
<string name="file_browser_up">Нагору</string>
<string name="file_browser_title">Вибрати файл</string>
<string name="dir_browser_title">Вибрати каталог</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">添加注释...</string>
<string name="actfm_TVA_menu_refresh">刷新</string>
<string name="actfm_TVA_tag_label">列表名称:</string>
<string name="actfm_TVA_tag_picture">列表图片</string>
<string name="actfm_TVA_tag_name_hint">添加列表名称</string>
<string name="actfm_GAA_title">选择你要使用的Google账户</string>
<string name="alarm_ACS_label">闹钟</string>
@ -305,8 +304,6 @@
<string name="search_market_ms_title">找不到微软 Office</string>
<string name="file_type_unhandled">对不起!找不到应用程序处理这种文件类型。</string>
<string name="file_type_unhandled_title">找不到应用程序</string>
<string name="file_prefix_image">图片</string>
<string name="file_prefix_voice">语音</string>
<string name="file_browser_up">向上</string>
<string name="file_browser_title">选择一个文件</string>
<string name="dir_browser_title">选择一个目录</string>

@ -11,7 +11,6 @@
<string name="TVA_add_comment">添加評論</string>
<string name="actfm_TVA_menu_refresh">重新整理</string>
<string name="actfm_TVA_tag_label">列表名稱:</string>
<string name="actfm_TVA_tag_picture">清單圖片</string>
<string name="actfm_TVA_tag_name_hint">添加列表名稱</string>
<string name="actfm_GAA_title">選擇您要使用的Google帳戶</string>
<string name="alarm_ACS_label">警示</string>
@ -343,8 +342,6 @@
<string name="search_market_ms_title">找不到微軟 Office</string>
<string name="file_type_unhandled">對不起!找不到應用程序處理這種文件類型。</string>
<string name="file_type_unhandled_title">找不到應用程序</string>
<string name="file_prefix_image">圖片</string>
<string name="file_prefix_voice">語音</string>
<string name="file_browser_up">向上</string>
<string name="file_browser_title">選擇一個文件</string>
<string name="dir_browser_title">選擇一個目錄</string>

@ -23,9 +23,6 @@
<!-- Tag Settings: tag name label -->
<string name="actfm_TVA_tag_label">List</string>
<!-- Tag Settings: tag picture -->
<string name="actfm_TVA_tag_picture">List Picture</string>
<!-- slide 25d: Tag Settings: list name hint -->
<string name="actfm_TVA_tag_name_hint">Enter list name</string>

@ -25,8 +25,6 @@
<string name="file_type_unhandled">Sorry! No application was found to handle this file type.</string>
<string name="file_type_unhandled_title">No application found</string>
<string name="file_prefix_image">Image</string>
<string name="file_prefix_voice">Voice</string>
<string name="file_browser_up">Up</string>
<string name="file_browser_title">Choose a file</string>
<string name="dir_browser_title">Choose a directory</string>

Loading…
Cancel
Save