diff --git a/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java b/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java
index 958b3359b..d9a00778f 100644
--- a/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java
+++ b/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java
@@ -11,6 +11,7 @@ import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.test.DatabaseTestCase;
+import org.tasks.R;
import org.tasks.preferences.Preferences;
import java.io.File;
@@ -32,12 +33,6 @@ public class BackupServiceTests extends DatabaseTestCase {
@Inject TaskDao taskDao;
@Inject Preferences preferences;
- BackupIntentService.BackupDirectorySetting setting = new BackupIntentService.BackupDirectorySetting() {
- public File getBackupDirectory() {
- return temporaryDirectory;
- }
- };
-
@Override
protected void setUp() {
super.setUp();
@@ -53,6 +48,8 @@ public class BackupServiceTests extends DatabaseTestCase {
if (!(temporaryDirectory.mkdir()))
throw new RuntimeException("Could not create temp directory: " + temporaryDirectory.getAbsolutePath());
+ preferences.setString(R.string.p_backup_dir, temporaryDirectory.getAbsolutePath());
+
// make a temporary task
Task task = new Task();
task.setTitle("helicopter");
@@ -77,7 +74,6 @@ public class BackupServiceTests extends DatabaseTestCase {
// create a backup
BackupIntentService service = new BackupIntentService();
- service.setBackupDirectorySetting(setting);
service.testBackup(xmlExporter, preferences, getContext());
AndroidUtilities.sleepDeep(BACKUP_WAIT_TIME);
@@ -116,7 +112,6 @@ public class BackupServiceTests extends DatabaseTestCase {
// backup
BackupIntentService service = new BackupIntentService();
- service.setBackupDirectorySetting(setting);
service.testBackup(xmlExporter, preferences, getContext());
AndroidUtilities.sleepDeep(BACKUP_WAIT_TIME);
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index d254a131b..e0a8eb91c 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -170,6 +170,11 @@
android:label="@string/miscellaneous"
android:theme="@style/Tasks" />
+
+
= UpgradeService.V3_0_0 &&
!context.getDatabasePath(database.getName()).exists()) {
// we didn't have a database! restore latest file
- File directory = BackupConstants.defaultExportDirectory();
+ File directory = preferences.getBackupDirectory();
if(!directory.exists()) {
return;
}
diff --git a/src/main/java/org/tasks/activities/ExportTaskActivity.java b/src/main/java/org/tasks/activities/ExportTaskActivity.java
index 0eef8256b..3f0b35e08 100644
--- a/src/main/java/org/tasks/activities/ExportTaskActivity.java
+++ b/src/main/java/org/tasks/activities/ExportTaskActivity.java
@@ -15,6 +15,6 @@ public class ExportTaskActivity extends InjectingActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- xmlExporter.exportTasks(ExportTaskActivity.this, TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, null);
+ xmlExporter.exportTasks(ExportTaskActivity.this, TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL);
}
}
diff --git a/src/main/java/org/tasks/activities/ImportTaskActivity.java b/src/main/java/org/tasks/activities/ImportTaskActivity.java
index e51f2bb45..5f4ade48e 100644
--- a/src/main/java/org/tasks/activities/ImportTaskActivity.java
+++ b/src/main/java/org/tasks/activities/ImportTaskActivity.java
@@ -4,19 +4,20 @@ import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
-import com.todoroo.astrid.backup.BackupConstants;
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.injection.InjectingActivity;
+import org.tasks.preferences.Preferences;
import javax.inject.Inject;
public class ImportTaskActivity extends InjectingActivity {
@Inject TasksXmlImporter xmlImporter;
+ @Inject Preferences preferences;
private boolean initiatedImport;
@@ -24,7 +25,7 @@ public class ImportTaskActivity extends InjectingActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog filePicker =
- new FilePickerBuilder(this, R.string.import_file_prompt, BackupConstants.defaultExportDirectory())
+ new FilePickerBuilder(this, R.string.import_file_prompt, preferences.getBackupDirectory())
.setOnFilePickedListener(new FilePickerBuilder.OnFilePickedListener() {
@Override
public void onFilePicked(String filePath) {
diff --git a/src/main/java/org/tasks/injection/ActivityModule.java b/src/main/java/org/tasks/injection/ActivityModule.java
index 5e9f89c4d..933344257 100644
--- a/src/main/java/org/tasks/injection/ActivityModule.java
+++ b/src/main/java/org/tasks/injection/ActivityModule.java
@@ -33,6 +33,7 @@ import org.tasks.activities.ExportTaskActivity;
import org.tasks.activities.ImportTaskActivity;
import org.tasks.activities.PurgeDeletedActivity;
import org.tasks.preferences.AppearancePreferences;
+import org.tasks.preferences.BackupPreferences;
import org.tasks.preferences.BasicPreferences;
import org.tasks.preferences.HelpAndFeedbackActivity;
import org.tasks.preferences.MiscellaneousPreferences;
@@ -80,7 +81,8 @@ import dagger.Provides;
ClearGtaskDataActivity.class,
ReminderPreferences.class,
HelpAndFeedbackActivity.class,
- AppearancePreferences.class
+ AppearancePreferences.class,
+ BackupPreferences.class
})
public class ActivityModule {
diff --git a/src/main/java/org/tasks/preferences/BackupPreferences.java b/src/main/java/org/tasks/preferences/BackupPreferences.java
new file mode 100644
index 000000000..a0d5791fc
--- /dev/null
+++ b/src/main/java/org/tasks/preferences/BackupPreferences.java
@@ -0,0 +1,61 @@
+package org.tasks.preferences;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.preference.Preference;
+
+import com.todoroo.astrid.files.FileExplore;
+
+import org.tasks.R;
+import org.tasks.injection.InjectingPreferenceActivity;
+
+import java.io.File;
+
+import javax.inject.Inject;
+
+public class BackupPreferences extends InjectingPreferenceActivity {
+
+ private static final int REQUEST_CODE_BACKUP_DIR = 2;
+
+ @Inject Preferences preferences;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.preferences_backup);
+
+ initializeBackupDirectory();
+ }
+
+ @Override
+ 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);
+ preferences.setString(R.string.p_backup_dir, dir);
+ updateBackupDirectory();
+ }
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
+ private void initializeBackupDirectory() {
+ findPreference(getString(R.string.p_backup_dir)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference p) {
+ Intent filesDir = new Intent(BackupPreferences.this, FileExplore.class);
+ filesDir.putExtra(FileExplore.EXTRA_DIRECTORIES_SELECTABLE, true);
+ startActivityForResult(filesDir, REQUEST_CODE_BACKUP_DIR);
+ return true;
+ }
+ });
+ updateBackupDirectory();
+ }
+
+ private void updateBackupDirectory() {
+ File dir = preferences.getBackupDirectory();
+ findPreference(getString(R.string.p_backup_dir)).setSummary(dir.getAbsolutePath());
+ }
+}
diff --git a/src/main/java/org/tasks/preferences/BasicPreferences.java b/src/main/java/org/tasks/preferences/BasicPreferences.java
index 5891d0da4..d9461e424 100644
--- a/src/main/java/org/tasks/preferences/BasicPreferences.java
+++ b/src/main/java/org/tasks/preferences/BasicPreferences.java
@@ -15,26 +15,17 @@ public class BasicPreferences extends InjectingPreferenceActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- String action = getIntent().getAction();
- if (action == null) {
- addPreferencesFromResource(R.xml.preferences);
- if (!getResources().getBoolean(R.bool.sync_enabled)) {
- getPreferenceScreen().removePreference(findPreference(getString(R.string.synchronization)));
- }
- findPreference(getString(R.string.EPr_appearance_header)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- startActivityForResult(new Intent(BasicPreferences.this, AppearancePreferences.class), RC_PREFS);
- return true;
- }
- });
- } else if (action.equals(getString(R.string.EPr_appearance_header))) {
- toolbar.setTitle(getString(R.string.EPr_appearance_header));
- addPreferencesFromResource(R.xml.preferences_appearance);
- } else if (action.equals(getString(R.string.backup_BPr_header))) {
- toolbar.setTitle(getString(R.string.backup_BPr_header));
- addPreferencesFromResource(R.xml.preferences_backup);
+ addPreferencesFromResource(R.xml.preferences);
+ if (!getResources().getBoolean(R.bool.sync_enabled)) {
+ getPreferenceScreen().removePreference(findPreference(getString(R.string.synchronization)));
}
+ findPreference(getString(R.string.EPr_appearance_header)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startActivityForResult(new Intent(BasicPreferences.this, AppearancePreferences.class), RC_PREFS);
+ return true;
+ }
+ });
}
@Override
diff --git a/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java b/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java
index e6913f1a1..d05fd9be9 100644
--- a/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java
+++ b/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java
@@ -5,7 +5,6 @@ import android.os.Bundle;
import android.preference.Preference;
import android.speech.tts.TextToSpeech;
-import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.files.FileExplore;
import com.todoroo.astrid.gcal.CalendarAlarmScheduler;
import com.todoroo.astrid.voice.VoiceOutputAssistant;
@@ -55,7 +54,7 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
if (requestCode == REQUEST_CODE_FILES_DIR && resultCode == RESULT_OK) {
if (data != null) {
String dir = data.getStringExtra(FileExplore.RESULT_DIR_SELECTED);
- preferences.setString(TaskAttachment.FILES_DIRECTORY_PREF, dir);
+ preferences.setString(R.string.p_attachment_dir, dir);
updateAttachmentDirectory();
}
return;
@@ -87,7 +86,7 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
}
private void initializeAttachmentDirectoryPreference() {
- findPreference(getString(R.string.p_files_dir)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ findPreference(getString(R.string.p_attachment_dir)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference p) {
Intent filesDir = new Intent(MiscellaneousPreferences.this, FileExplore.class);
@@ -101,7 +100,7 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
private void updateAttachmentDirectory() {
File dir = preferences.getAttachmentsDirectory();
- findPreference(getString(R.string.p_files_dir)).setSummary(dir.getAbsolutePath());
+ findPreference(getString(R.string.p_attachment_dir)).setSummary(dir.getAbsolutePath());
}
private void initializeCalendarReminderPreference() {
diff --git a/src/main/java/org/tasks/preferences/Preferences.java b/src/main/java/org/tasks/preferences/Preferences.java
index 794bab53b..27bb37348 100644
--- a/src/main/java/org/tasks/preferences/Preferences.java
+++ b/src/main/java/org/tasks/preferences/Preferences.java
@@ -292,7 +292,7 @@ public class Preferences {
public File getAttachmentsDirectory() {
File directory = null;
- String customDir = getStringValue(TaskAttachment.FILES_DIRECTORY_PREF);
+ String customDir = getStringValue(R.string.p_attachment_dir);
if (!TextUtils.isEmpty(customDir)) {
directory = new File(customDir);
}
@@ -343,4 +343,31 @@ public class Preferences {
}
return tempName + extension;
}
+
+ public File getBackupDirectory() {
+ File directory = null;
+ String customDir = getStringValue(R.string.p_backup_dir);
+ if (!TextUtils.isEmpty(customDir)) {
+ directory = new File(customDir);
+ }
+
+ if (directory == null || !directory.exists()) {
+ directory = defaultExportDirectory();
+ }
+
+ return directory;
+ }
+
+ /**
+ * @return export directory for tasks, or null if no SD card
+ */
+ private static File defaultExportDirectory() {
+ String storageState = Environment.getExternalStorageState();
+ if (storageState.equals(Environment.MEDIA_MOUNTED)) {
+ String path = Environment.getExternalStorageDirectory().getAbsolutePath();
+ path = path + "/astrid";
+ return new File(path);
+ }
+ return null;
+ }
}
diff --git a/src/main/java/org/tasks/scheduling/BackupIntentService.java b/src/main/java/org/tasks/scheduling/BackupIntentService.java
index 9313bd328..f907c070b 100644
--- a/src/main/java/org/tasks/scheduling/BackupIntentService.java
+++ b/src/main/java/org/tasks/scheduling/BackupIntentService.java
@@ -2,7 +2,6 @@ package org.tasks.scheduling;
import android.content.Context;
-import com.todoroo.astrid.backup.BackupConstants;
import com.todoroo.astrid.backup.TasksXmlExporter;
import org.slf4j.Logger;
@@ -60,8 +59,7 @@ public class BackupIntentService extends MidnightIntentService {
}
try {
- xmlExporter.exportTasks(context, TasksXmlExporter.ExportType.EXPORT_TYPE_SERVICE,
- backupDirectorySetting.getBackupDirectory());
+ xmlExporter.exportTasks(context, TasksXmlExporter.ExportType.EXPORT_TYPE_SERVICE);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
@@ -77,7 +75,7 @@ public class BackupIntentService extends MidnightIntentService {
return false;
}
};
- File astridDir = backupDirectorySetting.getBackupDirectory();
+ File astridDir = preferences.getBackupDirectory();
if(astridDir == null) {
return;
}
@@ -100,25 +98,4 @@ public class BackupIntentService extends MidnightIntentService {
}
}
}
-
- /**
- * Interface for setting where backups go
- * @author Tim Su
- *
- */
- public interface BackupDirectorySetting {
- public File getBackupDirectory();
- }
-
- private BackupDirectorySetting backupDirectorySetting = new BackupDirectorySetting() {
- @Override
- public File getBackupDirectory() {
- return BackupConstants.defaultExportDirectory();
- }
- };
-
- void setBackupDirectorySetting(
- BackupDirectorySetting backupDirectorySetting) {
- this.backupDirectorySetting = backupDirectorySetting;
- }
}
diff --git a/src/main/res/values/keys.xml b/src/main/res/values/keys.xml
index f08900910..9e26b02a1 100644
--- a/src/main/res/values/keys.xml
+++ b/src/main/res/values/keys.xml
@@ -9,7 +9,8 @@
- p_download_dir
+ custom_files_dir
+ p_backup_dir
notif_enabled
enable_qhours
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 29110fd11..b5041e7fb 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -75,6 +75,7 @@
Vibrate
Quiet hours
Attachment directory
+ Backup directory
Debug logging
Miscellaneous
Synchronization
diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml
index 285816e52..2f9201062 100644
--- a/src/main/res/xml/preferences.xml
+++ b/src/main/res/xml/preferences.xml
@@ -27,8 +27,7 @@
diff --git a/src/main/res/xml/preferences_backup.xml b/src/main/res/xml/preferences_backup.xml
index e3646e30b..30647d232 100644
--- a/src/main/res/xml/preferences_backup.xml
+++ b/src/main/res/xml/preferences_backup.xml
@@ -6,6 +6,10 @@
+
+
diff --git a/src/main/res/xml/preferences_misc.xml b/src/main/res/xml/preferences_misc.xml
index 4bea2617d..3466c3d5c 100644
--- a/src/main/res/xml/preferences_misc.xml
+++ b/src/main/res/xml/preferences_misc.xml
@@ -3,7 +3,7 @@
android:title="@string/miscellaneous">