Use nononsense-filepicker

Closes #338
pull/384/head
Alex Baker 10 years ago
parent cb8e1b8b75
commit 95dbabf3ac

@ -80,6 +80,7 @@ dependencies {
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
compile 'com.squareup.dagger:dagger:1.2.2'
compile 'com.nononsenseapps:filepicker:2.5.0'
compile 'com.android.support:design:23.1.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton.timber:timber:4.1.0'

@ -416,7 +416,17 @@
android:theme="@style/TranslucentDialog" />
<activity
android:name="com.todoroo.astrid.files.FileExplore"
android:name=".files.MyFilePickerActivity"
android:label="@string/app_name"
android:theme="@style/FilePickerTheme">
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".files.FileExplore"
android:theme="@style/TranslucentDialog"/>
<receiver android:name="com.todoroo.astrid.timers.TimerTaskCompleteListener">

@ -1,74 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.backup;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import com.todoroo.andlib.utility.AndroidUtilities;
import org.tasks.R;
import java.io.File;
import java.io.FilenameFilter;
import timber.log.Timber;
public class FilePickerBuilder extends AlertDialog.Builder implements DialogInterface.OnClickListener {
public interface OnFilePickedListener {
void onFilePicked(String filePath);
}
private OnFilePickedListener onFilePickedListener;
private File path;
private String[] files;
private FilenameFilter filter;
public FilePickerBuilder(Context ctx, int titleRes, File path, int theme) {
super(ctx, theme);
filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String s) {
File file = new File(dir, s);
return file.isFile();
}
};
setTitle(ctx.getString(titleRes));
setPath(path);
}
public FilePickerBuilder setOnFilePickedListener(OnFilePickedListener onFilePickedListener) {
this.onFilePickedListener = onFilePickedListener;
return this;
}
private void setPath(final File path) {
if (path != null && path.exists()) {
this.path = path;
File[] filesAsFile = path.listFiles(filter);
AndroidUtilities.sortFilesByDateDesc(filesAsFile);
files = new String[filesAsFile.length];
for(int i = 0; i < files.length; i++) {
files[i] = filesAsFile[i].getName();
}
setItems(files, this);
} else {
Timber.e("Cannot access sdcard.");
setMessage(R.string.DLG_error_sdcard + "sdcard");
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (onFilePickedListener != null) {
onFilePickedListener.onFilePicked(path.getAbsolutePath() + "/" + files[which]);
}
}
}

@ -1,299 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.files;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.preferences.PermissionRequestor;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import javax.inject.Inject;
import timber.log.Timber;
/**
* Based on the Android-File-Explore project by Manish Burman
* https://github.com/mburman/Android-File-Explore
*
*/
public class FileExplore extends InjectingAppCompatActivity {
private static final int DIALOG_LOAD_FILE = 1000;
public static final String RESULT_FILE_SELECTED = "fileSelected"; //$NON-NLS-1$
public static final String RESULT_DIR_SELECTED = "dirSelected"; //$NON-NLS-1$
public static final String EXTRA_DIRECTORIES_SELECTABLE = "directoriesSelectable"; //$NON-NLS-1$
ArrayList<String> str = new ArrayList<>(); // Stores names of traversed directories
private Boolean firstLvl = true; // Check if the first level of the directory structure is the one showing
@Inject DialogBuilder dialogBuilder;
@Inject ActivityPreferences activityPreferences;
@Inject PermissionRequestor permissionRequestor;
private Item[] fileList;
private File path;
private String chosenFile;
private String upString;
private boolean directoryMode;
private ListAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (permissionRequestor.requestFileWritePermission()) {
showDialog();
}
}
private void showDialog() {
activityPreferences.applyDialogTheme();
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
path = new File(Environment.getExternalStorageDirectory().toString());
} else {
path = Environment.getRootDirectory();
}
loadFileList();
directoryMode = getIntent().getBooleanExtra(EXTRA_DIRECTORIES_SELECTABLE, false);
showDialog(DIALOG_LOAD_FILE);
upString = getString(R.string.back);
Timber.d(path.getAbsolutePath());
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PermissionRequestor.REQUEST_FILE_WRITE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showDialog();
} else {
finish();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void loadFileList() {
try {
path.mkdirs();
} catch (SecurityException e) {
Timber.e(e, e.getMessage());
Toast.makeText(this, R.string.file_browser_err_permissions, Toast.LENGTH_LONG).show();
}
// Checks whether path exists
if (path.exists()) {
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
File sel = new File(dir, filename);
// Filters based on whether the file is hidden or not
return (sel.isFile() || sel.isDirectory())
&& !sel.isHidden();
}
};
String[] fList = path.list(filter);
fileList = new Item[fList.length];
for (int i = 0; i < fList.length; i++) {
fileList[i] = new Item(fList[i], R.drawable.ic_insert_drive_file_24dp);
// Convert into file path
File sel = new File(path, fList[i]);
// Set drawables
if (sel.isDirectory()) {
fileList[i].icon = R.drawable.ic_folder_24dp;
}
}
if (!firstLvl) {
Item temp[] = new Item[fileList.length + 1];
System.arraycopy(fileList, 0, temp, 1, fileList.length);
temp[0] = new Item(upString, R.drawable.ic_arrow_back_24dp);
fileList = temp;
}
} else {
Timber.e("path %s does not exist", path); //$NON-NLS-1$
}
adapter = new ArrayAdapter<Item>(this,
android.R.layout.select_dialog_item, android.R.id.text1,
fileList) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// creates view
View view = super.getView(position, convertView, parent);
TextView textView = (TextView) view
.findViewById(android.R.id.text1);
// put the image on the text view
int icon = fileList[position].icon;
Drawable drawable = getResources().getDrawable(icon);
if (activityPreferences.isDarkTheme()) {
Drawable wrapDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(wrapDrawable, getResources().getColor(android.R.color.white));
drawable = wrapDrawable;
}
if (drawable != null) {
drawable.setAlpha(138);
}
textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
// add margin between image and text (support various screen
// densities)
int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f);
textView.setCompoundDrawablePadding(dp5);
return view;
}
};
}
private class Item {
public String file;
public int icon;
public Item(String file, Integer icon) {
this.file = file;
this.icon = icon;
}
@Override
public String toString() {
return file;
}
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog;
AlertDialog.Builder builder = dialogBuilder.newDialog();
if (fileList == null) {
dialog = builder.create();
return dialog;
}
switch (id) {
case DIALOG_LOAD_FILE:
builder.setTitle(getString(directoryMode ? R.string.dir_browser_title : R.string.file_browser_title));
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
chosenFile = fileList[which].file;
File sel = new File(path + File.separator + chosenFile);
if (sel.isDirectory()) {
firstLvl = false;
// Adds chosen directory to list
str.add(chosenFile);
fileList = null;
path = new File(sel.toString());
loadFileList();
removeDialog(DIALOG_LOAD_FILE);
showDialog(DIALOG_LOAD_FILE);
} else if (chosenFile.equals(upString) && !sel.exists()) { // Checks if 'up' was clicked
// present directory removed from list
String s = str.remove(str.size() - 1);
// path modified to exclude present directory
path = new File(path.toString().substring(0,
path.toString().lastIndexOf(s)));
fileList = null;
// if there are no more directories in the list, then
// its the first level
if (str.isEmpty()) {
firstLvl = true;
}
loadFileList();
removeDialog(DIALOG_LOAD_FILE);
showDialog(DIALOG_LOAD_FILE);
} else {
Intent result = new Intent();
if (directoryMode) {
result.putExtra(RESULT_DIR_SELECTED, path.getAbsolutePath());
} else {
result.putExtra(RESULT_FILE_SELECTED, sel.getAbsolutePath());
}
setResult(RESULT_OK, result);
removeDialog(DIALOG_LOAD_FILE);
finish();
}
}
});
break;
}
if (directoryMode) {
builder.setPositiveButton(R.string.file_dir_dialog_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
Intent result = new Intent();
result.putExtra(RESULT_DIR_SELECTED, path.getAbsolutePath());
setResult(RESULT_OK, result);
removeDialog(DIALOG_LOAD_FILE);
finish();
}
});
builder.setNegativeButton(R.string.file_dir_dialog_default, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
Intent result = new Intent();
result.putExtra(RESULT_DIR_SELECTED, ""); //$NON-NLS-1$
setResult(RESULT_OK, result);
removeDialog(DIALOG_LOAD_FILE);
finish();
}
});
}
dialog = builder.show();
dialog.setCancelable(true);
dialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface d) {
finish();
}
});
return dialog;
}
}

@ -11,7 +11,7 @@ import android.webkit.MimeTypeMap;
import android.widget.Toast;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.files.FileExplore;
import org.tasks.files.FileExplore;
import org.tasks.R;
import org.tasks.dialogs.AddAttachmentDialog;
@ -111,7 +111,7 @@ public class AddAttachmentActivity extends InjectingAppCompatActivity implements
finish();
} else if (requestCode == REQUEST_STORAGE) {
if (resultCode == RESULT_OK) {
String path = data.getStringExtra(FileExplore.RESULT_FILE_SELECTED);
String path = data.getStringExtra(FileExplore.EXTRA_FILE);
final String destination = copyToAttachmentDirectory(path);
if (destination != null) {
Timber.i("Copied %s to %s", path, destination);

@ -1,14 +1,12 @@
package org.tasks.activities;
import android.content.DialogInterface;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import com.todoroo.astrid.backup.FilePickerBuilder;
import com.todoroo.astrid.backup.TasksXmlImporter;
import com.todoroo.astrid.utility.Flags;
import org.tasks.R;
import org.tasks.files.FileExplore;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.ActivityPreferences;
@ -16,42 +14,36 @@ import javax.inject.Inject;
public class ImportTaskActivity extends InjectingAppCompatActivity {
@Inject TasksXmlImporter xmlImporter;
@Inject
ActivityPreferences preferences;
private static final int REQUEST_PICKER = 1000;
private boolean initiatedImport;
@Inject TasksXmlImporter xmlImporter;
@Inject ActivityPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog filePicker =
new FilePickerBuilder(this, R.string.import_file_prompt, preferences.getBackupDirectory(), preferences.getDialogTheme())
.setOnFilePickedListener(new FilePickerBuilder.OnFilePickedListener() {
@Override
public void onFilePicked(String filePath) {
initiatedImport = true;
xmlImporter.importTasks(ImportTaskActivity.this, filePath, new Runnable() {
@Override
public void run() {
finish();
}
});
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish();
}
}).show();
filePicker.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (!initiatedImport) {
finish();
}
startActivityForResult(new Intent(this, FileExplore.class) {{
putExtra(FileExplore.EXTRA_START_PATH, preferences.getBackupDirectory().getAbsolutePath());
}}, REQUEST_PICKER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PICKER) {
if (resultCode == Activity.RESULT_OK) {
String filePath = data.getStringExtra(FileExplore.EXTRA_FILE);
xmlImporter.importTasks(ImportTaskActivity.this, filePath, new Runnable() {
@Override
public void run() {
finish();
}
});
} else {
finish();
}
});
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}

@ -0,0 +1,97 @@
package org.tasks.files;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import com.google.common.base.Strings;
import com.nononsenseapps.filepicker.FilePickerActivity;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.PermissionRequestor;
import java.io.File;
import javax.inject.Inject;
public class FileExplore extends InjectingAppCompatActivity {
private static final int REQUEST_PICKER = 1000;
public static final String EXTRA_FILE = "extra_file"; //$NON-NLS-1$
public static final String EXTRA_DIRECTORY = "extra_directory"; //$NON-NLS-1$
public static final String EXTRA_START_PATH = "extra_start_path";
public static final String EXTRA_DIRECTORY_MODE = "extra_directory_mode"; //$NON-NLS-1$
@Inject PermissionRequestor permissionRequestor;
private boolean directoryMode;
private String startPath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
directoryMode = intent.getBooleanExtra(EXTRA_DIRECTORY_MODE, false);
startPath = intent.getStringExtra(EXTRA_START_PATH);
if (permissionRequestor.requestFileWritePermission()) {
launchPicker();
}
}
private void launchPicker() {
File path = null;
if (!Strings.isNullOrEmpty(startPath)) {
path = new File(startPath);
}
if (path == null || !path.exists()) {
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
path = new File(Environment.getExternalStorageDirectory().toString());
} else {
path = Environment.getRootDirectory();
}
}
Intent i = new Intent(this, MyFilePickerActivity.class);
i.putExtra(FilePickerActivity.EXTRA_START_PATH, path.getAbsolutePath());
if (directoryMode) {
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
}
startActivityForResult(i, REQUEST_PICKER);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PermissionRequestor.REQUEST_FILE_WRITE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
launchPicker();
} else {
finish();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PICKER) {
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
final File file = new File(uri.getPath());
setResult(Activity.RESULT_OK, new Intent() {{
putExtra(directoryMode ? EXTRA_DIRECTORY : EXTRA_FILE, file.getAbsolutePath());
}});
}
finish();
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}

@ -0,0 +1,19 @@
package org.tasks.files;
import android.os.Bundle;
import com.nononsenseapps.filepicker.FilePickerActivity;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.preferences.PermissionChecker;
public class MyFilePickerActivity extends FilePickerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
ActivityPreferences activityPreferences = new ActivityPreferences(this, new PermissionChecker(this));
activityPreferences.applyThemeAndStatusBarColor();
super.onCreate(savedInstanceState);
}
}

@ -13,7 +13,7 @@ import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.core.DefaultsPreferences;
import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.files.AACRecordingActivity;
import com.todoroo.astrid.files.FileExplore;
import org.tasks.files.FileExplore;
import com.todoroo.astrid.gcal.CalendarAlarmListCreator;
import com.todoroo.astrid.gcal.CalendarReminderActivity;
import com.todoroo.astrid.gtasks.GtasksPreferences;

@ -4,7 +4,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import com.todoroo.astrid.files.FileExplore;
import org.tasks.files.FileExplore;
import org.tasks.R;
import org.tasks.injection.InjectingPreferenceActivity;
@ -32,7 +32,7 @@ public class BackupPreferences extends InjectingPreferenceActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_BACKUP_DIR && resultCode == RESULT_OK) {
if (data != null) {
String dir = data.getStringExtra(FileExplore.RESULT_DIR_SELECTED);
String dir = data.getStringExtra(FileExplore.EXTRA_DIRECTORY);
preferences.setString(R.string.p_backup_dir, dir);
updateBackupDirectory();
}
@ -46,7 +46,8 @@ public class BackupPreferences extends InjectingPreferenceActivity {
@Override
public boolean onPreferenceClick(Preference p) {
Intent filesDir = new Intent(BackupPreferences.this, FileExplore.class);
filesDir.putExtra(FileExplore.EXTRA_DIRECTORIES_SELECTABLE, true);
filesDir.putExtra(FileExplore.EXTRA_DIRECTORY_MODE, true);
filesDir.putExtra(FileExplore.EXTRA_START_PATH, getBackupDirectory());
startActivityForResult(filesDir, REQUEST_CODE_BACKUP_DIR);
return true;
}
@ -55,8 +56,11 @@ public class BackupPreferences extends InjectingPreferenceActivity {
}
private void updateBackupDirectory() {
findPreference(getString(R.string.p_backup_dir)).setSummary(getBackupDirectory());
}
private String getBackupDirectory() {
File dir = preferences.getBackupDirectory();
String summary = dir == null ? "" : dir.getAbsolutePath();
findPreference(getString(R.string.p_backup_dir)).setSummary(summary);
return dir == null ? "" : dir.getAbsolutePath();
}
}

@ -7,10 +7,10 @@ import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.speech.tts.TextToSpeech;
import com.todoroo.astrid.files.FileExplore;
import com.todoroo.astrid.voice.VoiceOutputAssistant;
import org.tasks.R;
import org.tasks.files.FileExplore;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.scheduling.BackgroundScheduler;
@ -50,7 +50,7 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_FILES_DIR && resultCode == RESULT_OK) {
if (data != null) {
String dir = data.getStringExtra(FileExplore.RESULT_DIR_SELECTED);
String dir = data.getStringExtra(FileExplore.EXTRA_DIRECTORY);
preferences.setString(R.string.p_attachment_dir, dir);
updateAttachmentDirectory();
}
@ -87,7 +87,8 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
@Override
public boolean onPreferenceClick(Preference p) {
Intent filesDir = new Intent(MiscellaneousPreferences.this, FileExplore.class);
filesDir.putExtra(FileExplore.EXTRA_DIRECTORIES_SELECTABLE, true);
filesDir.putExtra(FileExplore.EXTRA_DIRECTORY_MODE, true);
filesDir.putExtra(FileExplore.EXTRA_START_PATH, getAttachmentDirectory());
startActivityForResult(filesDir, REQUEST_CODE_FILES_DIR);
return true;
}
@ -96,9 +97,12 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
}
private void updateAttachmentDirectory() {
findPreference(getString(R.string.p_attachment_dir)).setSummary(getAttachmentDirectory());
}
private String getAttachmentDirectory() {
File dir = preferences.getAttachmentsDirectory();
String summary = dir == null ? "" : dir.getAbsolutePath();
findPreference(getString(R.string.p_attachment_dir)).setSummary(summary);
return dir == null ? "" : dir.getAbsolutePath();
}
private void initializeCalendarReminderPreference() {

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
</vector>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M6,2c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2 1.99,2H18c1.1,0 2,-0.9 2,-2V8l-6,-6H6zm7,7V3.5L18.5,9H13z"/>
</vector>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M7.88,3.39L6.6,1.86 2,5.71l1.29,1.53 4.59,-3.85zM22,5.72l-4.6,-3.86 -1.29,1.53 4.6,3.86L22,5.72zM12,4c-4.97,0 -9,4.03 -9,9s4.02,9 9,9c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zm0,16c-3.87,0 -7,-3.13 -7,-7s3.13,-7 7,-7 7,3.13 7,7 -3.13,7 -7,7zm-3,-9h3.63L9,15.2V17h6v-2h-3.63L15,10.8V9H9v2z"/>
</vector>

@ -116,10 +116,6 @@
<string name="premium_remove_file_confirm">هل أنت متأكد؟ لن تستطيع العودة</string>
<string name="audio_recording_title">تسجيل صوت</string>
<string name="audio_stop_recording">توقف عن التسجيل</string>
<string name="file_browser_title">أختر ملف</string>
<string name="dir_browser_title">أختار المسار</string>
<string name="file_dir_dialog_ok">استخدم هذا المسار</string>
<string name="file_dir_dialog_default">إعادة إلى الافتراضي</string>
<string-array name="TEA_reminder_random">
<item>ساعه</item>
<item>يوم</item>

@ -24,7 +24,6 @@
<string name="import_progress_read">Прочитане на задачи %d...</string>
<string name="DLG_error_sdcard">Нямате достъп до папка: %s</string>
<string name="DLG_error_sdcard_general">SD картата не може да бъде достъпена!</string>
<string name="import_file_prompt">Изберете файл за възстановяване</string>
<string name="read_permission_label">Tasks Разрешение</string>
<string name="write_permission_label">Tasks Разрешение</string>
<string name="discard_confirmation">Сигурни ли сте че искате да отхвърлите промените си?</string>
@ -217,12 +216,7 @@
<string name="audio_stop_recording">Спри Записването</string>
<string name="file_type_unhandled">Съжаляваме! Не е намерено приложение, което да работи с този тип файл.</string>
<string name="back">Назад</string>
<string name="file_browser_title">Избери файл</string>
<string name="dir_browser_title">Избери директория</string>
<string name="file_browser_err_permissions">Грешка в Разрешения! Моля, проверете дали не сте блокирани Tasks от достъп до SD картата.</string>
<string name="file_err_copy">Грешка при копиране на файла за прикачване</string>
<string name="file_dir_dialog_ok">Използвай тази директория</string>
<string name="file_dir_dialog_default">Възстанови по подразбиране</string>
<string name="premium_speech_bubble_2">Поръчай една година и спести 25%!</string>
<string name="ring_once">Звънене веднъж</string>
<string name="ring_five_times">Звънене пет пъти</string>

@ -15,7 +15,6 @@
<string name="import_progress_read">S\'està llegint la tasca %d</string>
<string name="DLG_error_sdcard">No es pot accedir a la carpeta: %s</string>
<string name="DLG_error_sdcard_general">No s\'ha pogut accedir a la targeta SD.</string>
<string name="import_file_prompt">Tria un fitxer per restaurar</string>
<string name="read_permission_label">Permís de l\'Tasks</string>
<string name="write_permission_label">Permís de l\'Tasks</string>
<string name="DLG_delete_this_task_question">Voleu suprimir aquesta tasca?</string>

@ -17,7 +17,6 @@
<string name="import_progress_read">Načítávání úkolu %d...</string>
<string name="DLG_error_sdcard">Chyba v přístupu k adresáři: %s</string>
<string name="DLG_error_sdcard_general">Chyba v přístupu k SD kartě!</string>
<string name="import_file_prompt">Zvolte soubor k obnově</string>
<string name="read_permission_label">Tasks Práva</string>
<string name="write_permission_label">Tasks Práva</string>
<string name="DLG_delete_this_task_question">Smazat tento úkol?</string>
@ -184,12 +183,7 @@
<string name="audio_recording_title">Nahrávám zvuk</string>
<string name="audio_stop_recording">Ukončit záznam</string>
<string name="file_type_unhandled">Pro tento typ souborů nebyla nalezena žádná aplikace.</string>
<string name="file_browser_title">Vybrat soubor</string>
<string name="dir_browser_title">Vytvořit složku</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_err_copy">Chyba při kopírování souboru jako přílohy</string>
<string name="file_dir_dialog_ok">Použít tento adresář</string>
<string name="file_dir_dialog_default">Obnovit výchozí nastavení</string>
<string name="premium_speech_bubble_2">Objednejte na rok a ušetříte 25%!</string>
<string-array name="TEA_reminder_random">
<item>hodina</item>

@ -17,7 +17,6 @@
<string name="import_progress_read">Læser opgave %d...</string>
<string name="DLG_error_sdcard">Kan ikke få adgang til mappen: %s</string>
<string name="DLG_error_sdcard_general">Kan ikke få adgang til dig SD-kort!</string>
<string name="import_file_prompt">Vælg en fil for at gendanne</string>
<string name="read_permission_label">Tasks Tilladelser</string>
<string name="write_permission_label">Tasks Tilladelser</string>
<string name="DLG_delete_this_task_question">Slet denne opgave?</string>

@ -19,7 +19,6 @@
<string name="import_progress_read">Aufgabe %d wird gelesen …</string>
<string name="DLG_error_sdcard">Ordner konnte nicht geöffnet werden: %s</string>
<string name="DLG_error_sdcard_general">Auf die SD-Karte konnte nicht zugegriffen werden!</string>
<string name="import_file_prompt">Wählen Sie eine Datei zum Wiederherstellen</string>
<string name="read_permission_label">Tasks Zugriffsrechte</string>
<string name="write_permission_label">Tasks Zugriffsrechte</string>
<string name="DLG_delete_this_task_question">Diese Aufgabe löschen?</string>
@ -205,12 +204,7 @@
<string name="audio_stop_recording">Aufnahme stoppen</string>
<string name="file_type_unhandled">Tut mir leid! Dieser Dateityp kann nicht geöffnet werden.</string>
<string name="back">Zurück</string>
<string name="file_browser_title">Wählen Sie eine Datei</string>
<string name="dir_browser_title">Wähle ein Verzeichnis</string>
<string name="file_browser_err_permissions">Konnte nicht auf die SD-Karte zugreifen. Bitte stellen Sie sicher, das sie den Zugriff auf sie SD Karte nicht eingeschränkt haben.</string>
<string name="file_err_copy">Fehler beim Kopieren der anzuhängenden Datei</string>
<string name="file_dir_dialog_ok">Dieses Verzeichnis verwenden</string>
<string name="file_dir_dialog_default">Auf Standardeinstellungen zurücksetzen</string>
<string name="premium_speech_bubble_2">Bestelle für ein ganzes Jahr und spare 25%!</string>
<string name="ring_once">Einmal klingeln</string>
<string name="ring_five_times">Fünfmal klingeln</string>

@ -20,7 +20,6 @@
<string name="import_progress_read">Ανάγνωση εργασίας %d...</string>
<string name="DLG_error_sdcard">Δεν υπάρχει πρόσβαση στον φάκελο: %s</string>
<string name="DLG_error_sdcard_general">Δεν υπάρχει πρόσβαση στην SD κάρτα!</string>
<string name="import_file_prompt">Επιλογή αρχείου για επαναφορά</string>
<string name="read_permission_label">Άδεια εργασιών</string>
<string name="write_permission_label">Άδεια Εργασιών</string>
<string name="DLG_delete_this_task_question">Διαγραφή εργασίας;</string>
@ -184,12 +183,7 @@
<string name="audio_recording_title">Εγγραφή Ήχου</string>
<string name="audio_stop_recording">Σταμάτημα εγγραφής</string>
<string name="file_type_unhandled">Συγγνώμη! Δεν βρέθηκε εφαρμογή που να χειρίζεται τέτοιο τύπο αρχείου</string>
<string name="file_browser_title">Επιλογή αρχείου</string>
<string name="dir_browser_title">Επιλογή φακέλου</string>
<string name="file_browser_err_permissions">Σφάλμα αδειών! Παρακαλώ σιγουρευτείτε ότι δεν έχετε μπλοκάρει την εφαρμογή από την πρόσβαση στην SD κάρτα σας.</string>
<string name="file_err_copy">Σφάλμα αντιγραφής αρχείου προς επισύναψη</string>
<string name="file_dir_dialog_ok">Χρήση αυτού του φακέλου</string>
<string name="file_dir_dialog_default">Επαναφορά προεπιλογών</string>
<string name="premium_speech_bubble_2">Παραγγείλετε ένα χρόνο και εξοικονομήστε 25%!</string>
<string-array name="TEA_reminder_random">
<item>μια ώρα</item>

@ -21,7 +21,6 @@
<string name="import_progress_read">Leyendo tarea %d...</string>
<string name="DLG_error_sdcard">No se puede acceder a la carpeta: %s</string>
<string name="DLG_error_sdcard_general">¡No se pudo acceder a su tarjeta de memoria SD!</string>
<string name="import_file_prompt">Selecciona un archivo a restaurar</string>
<string name="read_permission_label">Permisos de Tasks</string>
<string name="write_permission_label">Permisos de Tasks</string>
<string name="DLG_delete_this_task_question">¿Borrar esta tarea?</string>
@ -202,12 +201,7 @@
<string name="audio_stop_recording">Detener grabación</string>
<string name="file_type_unhandled">Lo sentimos! No se encontró ninguna aplicación para abrir este tipo de archivo.</string>
<string name="back">Volver</string>
<string name="file_browser_title">Elija un archivo</string>
<string name="dir_browser_title">Elija un directorio</string>
<string name="file_browser_err_permissions">¡Permiso denegado! Por favor asegúrese permitir a Tasks el acceso a la tarjeta SD.</string>
<string name="file_err_copy">Error al copiar el archivo a adjuntar</string>
<string name="file_dir_dialog_ok">Usar este directorio</string>
<string name="file_dir_dialog_default">Restaurar a valores por defecto</string>
<string name="premium_speech_bubble_2">¡Ordena un año y ahorra un 25%%!</string>
<string name="ring_once">Sonar una vez</string>
<string name="ring_five_times">Sonar cinco veces</string>

@ -141,12 +141,7 @@
<string name="audio_stop_recording">توقف ضبط</string>
<string name="file_type_unhandled">پوزش! هیچ برنامه ای برای بازکردن این فایل پیدا نشد.</string>
<string name="back">عقب</string>
<string name="file_browser_title">انتخاب یک فایل</string>
<string name="dir_browser_title">یک پوشه انتخاب کنید</string>
<string name="file_browser_err_permissions">خطای دسترسی! لطفا مطمن شوید تسکس را از دسترسی به حافظه خارجی منع نکرده اید.</string>
<string name="file_err_copy">خطای کپی فایل برای ضمیمه</string>
<string name="file_dir_dialog_ok">استفاده از این پوشه</string>
<string name="file_dir_dialog_default">بازگرداندن به پیش فرض</string>
<string name="ring_once">یک بار زنگ بزن</string>
<string name="ring_five_times">پنج بار زنگ بزن</string>
<string name="ring_nonstop">بدون توقف زنگ بزن</string>

@ -21,7 +21,6 @@
<string name="import_progress_read">Lecture de la tâche %d…</string>
<string name="DLG_error_sdcard">Impossible d\'accéder au dossier : %s</string>
<string name="DLG_error_sdcard_general">Impossible d\'accéder à la carte SD !</string>
<string name="import_file_prompt">Choisissez un fichier à restaurer</string>
<string name="read_permission_label">Permission d\'Tasks</string>
<string name="write_permission_label">Permission d\'Tasks</string>
<string name="DLG_delete_this_task_question">Supprimer cette tâche ?</string>
@ -202,12 +201,7 @@
<string name="audio_stop_recording">Arrêter l\'enregistrement</string>
<string name="file_type_unhandled">Désolé ! Aucune application n\'a été trouvé pour gérer ce type de fichier.</string>
<string name="back">Retour</string>
<string name="file_browser_title">Choisissez un fichier</string>
<string name="dir_browser_title">Choisissez un dossier</string>
<string name="file_browser_err_permissions">Erreur de permissions ! Assurez-vous qu\'Tasks à le droit d\'accéder à la carte SD.</string>
<string name="file_err_copy">Erreur lors de la copie du fichier à joindre</string>
<string name="file_dir_dialog_ok">Utiliser ce dossier</string>
<string name="file_dir_dialog_default">Rétablir les valeurs par défaut</string>
<string name="premium_speech_bubble_2">Commandez pour un an et économisez 25%%!</string>
<string name="ring_once">Sonner une fois</string>
<string name="ring_five_times">Sonner cinq fois</string>

@ -21,7 +21,6 @@
<string name="import_progress_read">Lettura compito %d...</string>
<string name="DLG_error_sdcard">Impossibile accedere alla cartella: %s</string>
<string name="DLG_error_sdcard_general">Impossibile accedere alla scheda SD!</string>
<string name="import_file_prompt">Seleziona un file da ripristinare</string>
<string name="read_permission_label">Permessi Tasks</string>
<string name="write_permission_label">Permessi Tasks</string>
<string name="discard_confirmation">Sicuro di voler annullare tutte le modifiche?</string>
@ -211,12 +210,7 @@ Se visualizzi questo errore più volte, ti consigliamo di cancellare tutti i dat
<string name="audio_stop_recording">Fine Registrazione</string>
<string name="file_type_unhandled">Spiacente! Non è stata trovata nessuna applicazione per gestire questo tipo di file</string>
<string name="back">Indietro</string>
<string name="file_browser_title">Scegli un file</string>
<string name="dir_browser_title">Scegli una cartella</string>
<string name="file_browser_err_permissions">Errore di autorizzazioni! Assicurati di non aver bloccato l\'accesso alla scheda SD da parte di Tasks</string>
<string name="file_err_copy">Errore di copia dei file da allegare</string>
<string name="file_dir_dialog_ok">Utilizza questa directory</string>
<string name="file_dir_dialog_default">Ripristino impostazioni iniziali</string>
<string name="premium_speech_bubble_2">Sottoscrivi 1 anno e risparmia il 25%%!</string>
<string name="ring_once">Suona una volta</string>
<string name="ring_five_times">Suona cinque volte</string>

@ -17,7 +17,6 @@
<string name="import_progress_read">קוראת משימה %d...</string>
<string name="DLG_error_sdcard">לא ניתן לגשת לתיקיה: %s</string>
<string name="DLG_error_sdcard_general">לא ניתן לגשת לכרטיס ה־SD שלך!</string>
<string name="import_file_prompt">נא לבחור קובץ לשחזור</string>
<string name="read_permission_label">הרשאות אסטריד</string>
<string name="write_permission_label">הרשאות אסטריד</string>
<string name="DLG_delete_this_task_question">למחוק משימה זו?</string>
@ -186,12 +185,7 @@
<string name="audio_recording_title">מקליטה שֵׁמַע</string>
<string name="audio_stop_recording">הפסק הקלטה</string>
<string name="file_type_unhandled">\"מצטערת! לא מצאתי ישום שיכול לטפל בקבצים מסוג זה\"</string>
<string name="file_browser_title">בחר קובץ</string>
<string name="dir_browser_title">יש לבחור תיקייה</string>
<string name="file_browser_err_permissions">הרשאות לא מספיקות! אנא בדוק שלא חסמת את אסטריד מלגשת לכרטיס הזיכרון</string>
<string name="file_err_copy">שגיאה בהעתקת הקובץ המצורף</string>
<string name="file_dir_dialog_ok">השתמש בתיקיה זו</string>
<string name="file_dir_dialog_default">אפס לברירת מחדל</string>
<string name="premium_speech_bubble_2">הזמן לשנה וחסוך !25%%</string>
<string-array name="TEA_reminder_random">
<item>שעה</item>

@ -21,7 +21,6 @@
<string name="import_progress_read">タスク %d を読み込み中</string>
<string name="DLG_error_sdcard">フォルダ %s を開けません</string>
<string name="DLG_error_sdcard_general">SDカードにアクセスできません</string>
<string name="import_file_prompt">復元に使うファイルを選択してください</string>
<string name="read_permission_label">タスクの読み込み</string>
<string name="write_permission_label">タスクの読み込み</string>
<string name="discard_confirmation">変更を破棄してもよろしいですか?</string>
@ -215,12 +214,7 @@
<string name="audio_stop_recording">録音を停止</string>
<string name="file_type_unhandled">申し訳ありません! このファイル形式を扱うアプリケーションがありません.</string>
<string name="back">戻る</string>
<string name="file_browser_title">ファイルを選択</string>
<string name="dir_browser_title">ディレクトリを選択</string>
<string name="file_browser_err_permissions">パーミッションエラー! SD カードのアクセスで Tasks をブロックしていないことを確認してください.</string>
<string name="file_err_copy">ファイル添付のコピー中にエラー</string>
<string name="file_dir_dialog_ok">このディレクトリを使用</string>
<string name="file_dir_dialog_default">デフォルトにリセット</string>
<string name="premium_speech_bubble_2">1 年注文すると 25% 節約できます!</string>
<string name="ring_once">1回通知音を鳴らす</string>
<string name="ring_five_times">5回通知音を鳴らす</string>

@ -24,7 +24,6 @@
<string name="import_progress_read">일정 %d 읽는 중...</string>
<string name="DLG_error_sdcard">폴더에 접근 불가: %s</string>
<string name="DLG_error_sdcard_general">SD 카드에 접근할 수 없습니다!</string>
<string name="import_file_prompt">복원할 파일을 선택하세요</string>
<string name="read_permission_label">Tasks 권한</string>
<string name="write_permission_label">Tasks 권한</string>
<string name="DLG_delete_this_task_question">이 일정을 삭제할까요?</string>
@ -212,12 +211,7 @@ Tasks의 백업에서 당신의 일정을 복구하시기 바랍니다.
<string name="audio_stop_recording">녹음 중단</string>
<string name="file_type_unhandled">죄송하지만 이 파일 형식을 다룰 수 있는 프로그램이 없습니다.</string>
<string name="back">뒤로</string>
<string name="file_browser_title">파일 선택하기</string>
<string name="dir_browser_title">디렉토리 선택하기</string>
<string name="file_browser_err_permissions">권한 에러! Tasks가 SD 카드에 접근하는 것을 막지 않았는지 확인하세요.</string>
<string name="file_err_copy">첨부용 파일 복사 에러</string>
<string name="file_dir_dialog_ok">이 디렉토리 사용</string>
<string name="file_dir_dialog_default">기본값으로 초기화</string>
<string name="premium_speech_bubble_2">1년 사용권 구매시 25%% 할인!</string>
<string name="ring_once">한번 울림</string>
<string name="ring_five_times">다섯번 울림</string>

@ -15,7 +15,6 @@
<string name="import_progress_read">Leser oppgave %d...</string>
<string name="DLG_error_sdcard">Får ikke tilgang til mappen: %s</string>
<string name="DLG_error_sdcard_general">Ditt SD-kort er ikke tilgjengelig!</string>
<string name="import_file_prompt">Velg fil å gjenopprette</string>
<string name="read_permission_label">Tasks Tillatelse</string>
<string name="write_permission_label">Tasks Tillatelse</string>
<string name="DLG_delete_this_task_question">Slett denne oppgaven?</string>
@ -102,7 +101,6 @@
<string name="gcal_TEA_showCalendar_label">Åpne kalenderhendelse</string>
<string name="gcal_completed_title">%s (fullført)</string>
<string name="CFC_gtasks_list_text">I liste: ?</string>
<string name="file_browser_title">Velg en fil</string>
<string name="rmd_NoA_done">Allerede utført!</string>
<string name="rmd_NoA_snooze">Slumre</string>
<string name="rmd_EPr_quiet_hours_start_title">Stilletimer start</string>

@ -21,7 +21,6 @@
<string name="import_progress_read">Taak %d lezen...</string>
<string name="DLG_error_sdcard">Toegang geweigerd tot map: %s</string>
<string name="DLG_error_sdcard_general">Toegang tot SD-kaart geweigerd!</string>
<string name="import_file_prompt">Selecteer een back-up om te herstellen</string>
<string name="read_permission_label">Taak toestemmingen</string>
<string name="write_permission_label">Taak toestemmingen</string>
<string name="DLG_delete_this_task_question">Taak verwijderen?</string>
@ -210,12 +209,7 @@
<string name="audio_stop_recording">Opname stoppen</string>
<string name="file_type_unhandled">Sorry! Er is geen applicatie gevonden die dit bestandtype ondersteunt.</string>
<string name="back">Terug</string>
<string name="file_browser_title">Bestand kiezen</string>
<string name="dir_browser_title">Kies een directory</string>
<string name="file_browser_err_permissions">Bestandsrechtenfout! Let erop dat Tasks toegang heeft tot de SD-kaart.</string>
<string name="file_err_copy">Fout bij kopiëren toe te voegen bestand</string>
<string name="file_dir_dialog_ok">Gebruik deze directory.</string>
<string name="file_dir_dialog_default">Stel opnieuw in naar standaardinstellingen</string>
<string name="premium_speech_bubble_2">Bestel voor een jaar en bespaar 25%%!</string>
<string name="ring_once">Ring eenmalig</string>
<string name="ring_five_times">Ring vijf keer</string>

@ -17,7 +17,6 @@
<string name="import_progress_read">Czytanie zadania %d...</string>
<string name="DLG_error_sdcard">Brak dostępu do folderu: %s</string>
<string name="DLG_error_sdcard_general">Brak dostępu do Twojej karty SD!</string>
<string name="import_file_prompt">Wskaż plik do przywrócenia</string>
<string name="read_permission_label">Uprawnienia Tasks</string>
<string name="write_permission_label">Zezwolenia Tasks</string>
<string name="DLG_delete_this_task_question">Usunąć to zadanie?</string>
@ -186,12 +185,7 @@ i odzyskanie zadań z kopi zapasowej (Settings-&gt;Sync and backup-&gt;Backup-&g
<string name="audio_recording_title">Nagrywanie dźwięku</string>
<string name="audio_stop_recording">Zakończ nagrywanie</string>
<string name="file_type_unhandled">Przepraszamy! Nie znaleziono aplikacji do obsługi tego typu pliku.</string>
<string name="file_browser_title">Wybierz plik</string>
<string name="dir_browser_title">Wybierz katalog</string>
<string name="file_browser_err_permissions">Błąd dostępu! Proszę upewnić się, że Tasks nie ma zablokowanego dostępu do karty SD.</string>
<string name="file_err_copy">Błąd kopiowania pliku do załącznika</string>
<string name="file_dir_dialog_ok">Użycie tego katalogu</string>
<string name="file_dir_dialog_default">Przywróć ustawienia domyślne</string>
<string name="premium_speech_bubble_2">Zamów na rok i oszczędź 25%%!</string>
<string-array name="TEA_reminder_random">
<item>na godzinę</item>

@ -16,7 +16,6 @@
<string name="import_progress_read">Lendo tarefa %d...</string>
<string name="DLG_error_sdcard">Não foi possível acessar a pasta: %s</string>
<string name="DLG_error_sdcard_general">Não foi possível acessar seu cartão SD!</string>
<string name="import_file_prompt">Selecione um arquivo para ser restaurado</string>
<string name="read_permission_label">Permissões do Tasks</string>
<string name="write_permission_label">Permissões do Tasks</string>
<string name="DLG_delete_this_task_question">Excluir esta tarefa?</string>
@ -183,12 +182,7 @@
<string name="audio_recording_title">Gravando Áudio</string>
<string name="audio_stop_recording">Parar Gravação</string>
<string name="file_type_unhandled">Desculpa! Nenhuma aplicação para manipular este tipo de arquivo foi encontrada.</string>
<string name="file_browser_title">Escolha um arquivo</string>
<string name="dir_browser_title">Escolha um diretório</string>
<string name="file_browser_err_permissions">Erro de permissões! Certifique-se de que você não bloqueou o Tasks de acessar o cartão SD.</string>
<string name="file_err_copy">Erro ao copiar o arquivo para o anexo</string>
<string name="file_dir_dialog_ok">Usar este diretório</string>
<string name="file_dir_dialog_default">Restaurar padrões</string>
<string name="premium_speech_bubble_2">Contrate um ano e tenha 25%% de desconto</string>
<string-array name="TEA_reminder_random">
<item>por hora</item>

@ -22,7 +22,6 @@
<string name="import_progress_read">A ler tarefa %d...</string>
<string name="DLG_error_sdcard">Não é possível aceder à pasta: %s</string>
<string name="DLG_error_sdcard_general">Não é possível aceder ao seu cartão SD!</string>
<string name="import_file_prompt">Selecione o ficheiro a restaurar</string>
<string name="read_permission_label">Permissões do Tasks</string>
<string name="write_permission_label">Permissões do Tasks</string>
<string name="DLG_delete_this_task_question">Remover esta tarefa?</string>
@ -204,12 +203,7 @@ das tarefas através de um backup em Definições-&gt;Sincronização e backup-&
<string name="audio_stop_recording">Parar gravação</string>
<string name="file_type_unhandled">Não foi encontrada qualquer aplicação para gerir ficheiros deste tipo.</string>
<string name="back">Recuar</string>
<string name="file_browser_title">Escolha um ficheiro</string>
<string name="dir_browser_title">Escolha um diretório</string>
<string name="file_browser_err_permissions">Erro de permissões! Certifique-se que o Tasks tem permissões para aceder ao cartão SD:</string>
<string name="file_err_copy">Erro ao copiar o ficheiro como anexo</string>
<string name="file_dir_dialog_ok">Usar este diretório</string>
<string name="file_dir_dialog_default">Restaurar definições originais</string>
<string name="premium_speech_bubble_2">Compre por um ano e poupe 25%!</string>
<string name="ring_once">Tocar uma vez</string>
<string name="ring_five_times">Tocar 5 vezes</string>

@ -21,7 +21,6 @@
<string name="import_progress_read">Чтение задачи %d…</string>
<string name="DLG_error_sdcard">Нет доступа к папке:%s</string>
<string name="DLG_error_sdcard_general">Нет доступа к карте памяти!</string>
<string name="import_file_prompt">Выберите файл для восстановления</string>
<string name="read_permission_label">Разрешения Tasks</string>
<string name="write_permission_label">Разрешения Tasks</string>
<string name="discard_confirmation">Вы действительно хотите отказаться от сделанных изменений?</string>
@ -214,12 +213,7 @@
<string name="audio_stop_recording">Остановить запись</string>
<string name="file_type_unhandled">Извините! Не найдена программа для просмотра файлов этого типа.</string>
<string name="back">Назад</string>
<string name="file_browser_title">Выбрать файл</string>
<string name="dir_browser_title">Выбрать папку</string>
<string name="file_browser_err_permissions">Ошибка доступа! Пожалуйста убедитесь, что Tasks имеет доступ к SD карте.</string>
<string name="file_err_copy">Ошибка копирования прикрепляемого файла.</string>
<string name="file_dir_dialog_ok">Использовать эту папку</string>
<string name="file_dir_dialog_default">Сбросить настройки</string>
<string name="premium_speech_bubble_2">Подпишитесь на год и сэкономьте 25%%!</string>
<string name="ring_once">1 раз</string>
<string name="ring_five_times">5 раз</string>

@ -19,7 +19,6 @@
<string name="import_progress_read">Čítanie úloh %d...</string>
<string name="DLG_error_sdcard">Chyba v prístupe k súboru: %s</string>
<string name="DLG_error_sdcard_general">Chyba v prístupe k SD karte!</string>
<string name="import_file_prompt">Vybrať súbor k obnove</string>
<string name="read_permission_label">Tasks povolenia</string>
<string name="write_permission_label">Tasks povolenia</string>
<string name="DLG_delete_this_task_question">Vymazať túto úlohu?</string>
@ -196,12 +195,7 @@
<string name="audio_stop_recording">Zastaviť nahrávanie</string>
<string name="file_type_unhandled">Pre tento typ súboru nebola nájdená žiadna aplikácia</string>
<string name="back">Späť</string>
<string name="file_browser_title">Vybrať súbor</string>
<string name="dir_browser_title">Vytvoriť zložku</string>
<string name="file_browser_err_permissions">Chyba oprávnenia! Prosím, uisti sa, či Tasks namá zablokovaný prístup k SD karte.</string>
<string name="file_err_copy">Chyba pri kopírovaní súboru do prílohy</string>
<string name="file_dir_dialog_ok">Použiť tento adresár</string>
<string name="file_dir_dialog_default">Obnoviť predvolené</string>
<string name="premium_speech_bubble_2">Objednaj na rok a ušetri 25%!</string>
<string name="ring_once">Zvoniť raz</string>
<string name="ring_five_times">Zvoniť päť krát</string>

@ -20,7 +20,6 @@
<string name="import_progress_read">Berem opravek %d...</string>
<string name="DLG_error_sdcard">Datoteka:%s ni dostopna</string>
<string name="DLG_error_sdcard_general">Tvoja SD kartica ni dostopna.</string>
<string name="import_file_prompt">Izberi datoteko za obnovo</string>
<string name="read_permission_label">Dovoljenje Opravkom</string>
<string name="write_permission_label">Dovoljenje Opravkom</string>
<string name="DLG_delete_this_task_question">Zbrišem ta opravek?</string>
@ -188,12 +187,7 @@
<string name="audio_recording_title">Snemam zvok</string>
<string name="audio_stop_recording">Prekini snemanje</string>
<string name="file_type_unhandled">Žal nobena aplikacija ne ustreza takim datotekam.</string>
<string name="file_browser_title">Izberite datoteko</string>
<string name="dir_browser_title">Izberite mapo</string>
<string name="file_browser_err_permissions">Napaka pri dovoljenjih! Prosimo, preverite, da niste preprečili aplikaciji Opravki dostopa do SD kartice.</string>
<string name="file_err_copy">Napaka pri kopiranju datoteke za priponko</string>
<string name="file_dir_dialog_ok">Uporabi to mapo</string>
<string name="file_dir_dialog_default">Ponastavi na privzeto</string>
<string name="premium_speech_bubble_2">Enoletna naročnina prihrani 25%!</string>
<string-array name="TEA_reminder_random">
<item>na uro</item>

@ -17,7 +17,6 @@
<string name="import_progress_read">Läser uppgift %d...</string>
<string name="DLG_error_sdcard">Mappåtkomst nekad: %s</string>
<string name="DLG_error_sdcard_general">SD-kort ej tillgängligt!</string>
<string name="import_file_prompt">Välj en fil att återställa</string>
<string name="read_permission_label">Tasks Tillstånd</string>
<string name="write_permission_label">Tasks Tillstånd</string>
<string name="DLG_delete_this_task_question">Radera denna uppgift?</string>
@ -181,12 +180,7 @@ och återställer dina aktuella uppgifter från en backup
<string name="audio_recording_title">Spelar in ljud</string>
<string name="audio_stop_recording">Avsluta inspelning</string>
<string name="file_type_unhandled">Tyvärr hittades ingen applikation för att hantera den här filtypen</string>
<string name="file_browser_title">Välj en fil</string>
<string name="dir_browser_title">Välj sökväg</string>
<string name="file_browser_err_permissions">Behörighets fel! Vänligen kontrollera att du inte blockat Tasks från att komma åt SD-kortet.</string>
<string name="file_err_copy">Bifoga fil misslyckades: fel vid kopiering</string>
<string name="file_dir_dialog_ok">Använd denna mapp</string>
<string name="file_dir_dialog_default">Återställ till standard</string>
<string name="premium_speech_bubble_2">Beställ för helår och spara 25%!</string>
<string-array name="TEA_reminder_random">
<item>en timme</item>

@ -17,7 +17,6 @@
<string name="import_progress_read">%d görev okunuyor..</string>
<string name="DLG_error_sdcard">%s dizinine erişilemedi.</string>
<string name="DLG_error_sdcard_general">Hafıza kartına erişemiyorum!</string>
<string name="import_file_prompt">Geri Alınacak Bir Dosya Seçin</string>
<string name="read_permission_label">Tasks İzni</string>
<string name="write_permission_label">Tasks İzni</string>
<string name="DLG_delete_this_task_question">Bu görev silinsin mi?</string>
@ -161,12 +160,7 @@
<string name="audio_recording_title">Ses Kaydediliyor</string>
<string name="audio_stop_recording">Kaydı Durdur</string>
<string name="file_type_unhandled">Üzgünüm! Bu dosya türünü destekleyen bir uygulama bulunamadı.</string>
<string name="file_browser_title">Bir dosya seçin</string>
<string name="dir_browser_title">Bir dizin seçin</string>
<string name="file_browser_err_permissions">İzin hatası! Tasks\'in SD kartınıza erişiminin engellenmediğinden emin olun lütfen.</string>
<string name="file_err_copy">Dosyanın ek olarak kopyalanmasında hata</string>
<string name="file_dir_dialog_ok">Bu dizini kullan</string>
<string name="file_dir_dialog_default">Öntanımlı değere dön</string>
<string name="premium_speech_bubble_2">Bir yıllık satın alın ve %%25 kâr yapın!</string>
<string-array name="TEA_reminder_random">
<item>bir saat</item>

@ -20,7 +20,6 @@
<string name="import_progress_read">Читання завдання %d...</string>
<string name="DLG_error_sdcard">Немає доступу до папки: %s</string>
<string name="DLG_error_sdcard_general">Немає доступу до карти SD!</string>
<string name="import_file_prompt">Виберіть файл для відновлення</string>
<string name="read_permission_label">Дозволи Tasks</string>
<string name="write_permission_label">Дозволи Tasks</string>
<string name="DLG_delete_this_task_question">Видалити цю задачу?</string>
@ -199,12 +198,7 @@
<string name="audio_stop_recording">Зупинити запис</string>
<string name="file_type_unhandled">Вибачте! Не знайдено програму для перегляду файлів цього типу.</string>
<string name="back">Назад</string>
<string name="file_browser_title">Вибрати файл</string>
<string name="dir_browser_title">Вибрати каталог</string>
<string name="file_browser_err_permissions">Помилка доступу! Будь ласка переконайтеся, що ви не заблокували Tasks для доступу до SD карти.</string>
<string name="file_err_copy">Помилка копіювання доданого файлу.</string>
<string name="file_dir_dialog_ok">Використовувати цю папку</string>
<string name="file_dir_dialog_default">Скинути налаштування за замовчуванням</string>
<string name="premium_speech_bubble_2">Підпишіться на рік і заощаджуйте 25%%!</string>
<string-array name="TEA_reminder_random">
<item>година</item>

@ -17,7 +17,6 @@
<string name="import_progress_read">读取任务 %d...</string>
<string name="DLG_error_sdcard">无法开启文件夹:%s</string>
<string name="DLG_error_sdcard_general">无法访问您的 SD 卡!</string>
<string name="import_file_prompt">选取要还原的文件</string>
<string name="read_permission_label">清单小助理权限</string>
<string name="write_permission_label">清单小助理权限</string>
<string name="DLG_delete_this_task_question">确认删除?</string>
@ -140,12 +139,7 @@
<string name="audio_recording_title">正在录制音频</string>
<string name="audio_stop_recording">停止录制</string>
<string name="file_type_unhandled">对不起!找不到应用程序处理这种文件类型。</string>
<string name="file_browser_title">选择一个文件</string>
<string name="dir_browser_title">选择一个目录</string>
<string name="file_browser_err_permissions">权限出错!请确保您没有阻止清单小助理访问 SD 卡。</string>
<string name="file_err_copy">复制文件添加附件时出错</string>
<string name="file_dir_dialog_ok">使用此目录</string>
<string name="file_dir_dialog_default">重设为默认值</string>
<string name="premium_speech_bubble_2">购买一年的服务并且得到25%%的折扣</string>
<string-array name="TEA_reminder_random">
<item>一个小时</item>

@ -17,7 +17,6 @@
<string name="import_progress_read">讀取工作 %d...</string>
<string name="DLG_error_sdcard">無法開啟資料夾: %s</string>
<string name="DLG_error_sdcard_general">無法存取您的SD卡!</string>
<string name="import_file_prompt">選取欲還原的檔案</string>
<string name="read_permission_label">Tasks 權限</string>
<string name="write_permission_label">Tasks 權限</string>
<string name="DLG_delete_this_task_question">確認刪除?</string>
@ -171,12 +170,7 @@
<string name="audio_recording_title">正在錄製音頻</string>
<string name="audio_stop_recording">停止錄製</string>
<string name="file_type_unhandled">對不起!找不到應用程序處理這種文件類型。</string>
<string name="file_browser_title">選擇一個文件</string>
<string name="dir_browser_title">選擇一個目錄</string>
<string name="file_browser_err_permissions">權限出錯請確保您沒有阻止Tasks訪問SD 卡。</string>
<string name="file_err_copy">複製文件添加附件時出錯</string>
<string name="file_dir_dialog_ok">使用此目錄</string>
<string name="file_dir_dialog_default">重設為默認值</string>
<string name="premium_speech_bubble_2">購買一年的服務並且得到25%%的折扣</string>
<string-array name="TEA_reminder_random">
<item>一個小時</item>

@ -62,10 +62,6 @@ File %1$s contained %2$s.\n\n
<!-- Backup: Dialog when unable to open SD card in general -->
<string name="DLG_error_sdcard_general">Cannot access your SD card!</string>
<!-- Backup: File Selector dialog for import -->
<string name="import_file_prompt">Select a file to restore</string>
<!-- ================================================== AndroidManifest == -->
<!-- permission title for READ_TASKS -->
@ -595,14 +591,8 @@ File %1$s contained %2$s.\n\n
<string name="file_type_unhandled">Sorry! No application was found to handle this file type.</string>
<string name="back">Back</string>
<string name="file_browser_title">Choose a file</string>
<string name="dir_browser_title">Choose a directory</string>
<string name="file_browser_err_permissions">Permissions error! Please make sure you have not blocked Tasks from accessing the SD card.</string>
<string name="file_err_copy">Error copying file for attachment</string>
<string name="file_dir_dialog_ok">Use this directory</string>
<string name="file_dir_dialog_default">Reset to default</string>
<!-- in app billing -->
<string name="premium_speech_bubble_2">Order one year and save 25%!</string>

@ -110,6 +110,10 @@
<item name="android:textColor">@color/widget_text_color_light</item>
</style>
<style name="FilePickerTheme" parent="NNF_BaseTheme.Light">
<item name="nnf_toolbarTheme">@style/ActionBarThemeOverlay</item>
</style>
<!-- ========================================================= Premium == -->
<style name="TextAppearance.Medium">

@ -39,6 +39,7 @@
<item name="asListDividerColor">#dddddd</item>
<item name="asThemeTextColor">@color/dark_blue_theme_color</item>
<item name="android:spinnerItemStyle">@style/SpinnerNoPadding</item>
<item name="alertDialogTheme">@style/TasksDialogDark</item>
</style>
<style name="TasksDialogDark" parent="@style/Theme.AppCompat.Dialog">

@ -38,6 +38,7 @@
<item name="fab_tint">@android:color/white</item>
<item name="task_edit_divider">@color/task_edit_divider</item>
<item name="android:spinnerItemStyle">@style/SpinnerNoPadding</item>
<item name="alertDialogTheme">@style/TasksDialog</item>
</style>
<style name="TasksDialog" parent="@style/Theme.AppCompat.Light.Dialog">

Loading…
Cancel
Save