From c525734d79d05c163a96838a60ea2ffab9d744ca Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 17 Mar 2015 13:50:55 -0500 Subject: [PATCH] Add import/export activities --- .../tasks/scheduling/BackupServiceTests.java | 5 +- src/main/AndroidManifest.xml | 11 +- .../astrid/activity/EditPreferences.java | 25 +-- .../astrid/backup/BackupPreferences.java | 148 ------------------ .../astrid/backup/FilePickerBuilder.java | 24 +-- .../astrid/backup/TasksXmlExporter.java | 6 +- .../tasks/activities/ExportTaskActivity.java | 20 +++ .../tasks/activities/ImportTaskActivity.java | 51 ++++++ .../org/tasks/injection/ActivityModule.java | 8 +- .../preferences/AppearancePreferences.java | 15 -- .../tasks/scheduling/BackupIntentService.java | 4 +- src/main/res/values/keys.xml | 3 - src/main/res/values/strings-backup.xml | 12 -- src/main/res/xml/preferences_appearance.xml | 115 +++++++------- src/main/res/xml/preferences_backup.xml | 41 +++-- 15 files changed, 187 insertions(+), 301 deletions(-) delete mode 100644 src/main/java/com/todoroo/astrid/backup/BackupPreferences.java create mode 100644 src/main/java/org/tasks/activities/ExportTaskActivity.java create mode 100644 src/main/java/org/tasks/activities/ImportTaskActivity.java delete mode 100644 src/main/java/org/tasks/preferences/AppearancePreferences.java diff --git a/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java b/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java index 158c85afa..958b3359b 100644 --- a/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java +++ b/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java @@ -6,7 +6,6 @@ package org.tasks.scheduling; import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.astrid.backup.BackupPreferences; import com.todoroo.astrid.backup.TasksXmlExporter; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; @@ -74,7 +73,7 @@ public class BackupServiceTests extends DatabaseTestCase { public void disabled_testBackup() { assertEquals(0, temporaryDirectory.list().length); - preferences.setLong(BackupPreferences.PREF_BACKUP_LAST_DATE, 0); + preferences.setLong(TasksXmlExporter.PREF_BACKUP_LAST_DATE, 0); // create a backup BackupIntentService service = new BackupIntentService(); @@ -89,7 +88,7 @@ public class BackupServiceTests extends DatabaseTestCase { assertTrue(files[0].getName().matches(BackupIntentService.BACKUP_FILE_NAME_REGEX)); // assert summary updated - assertTrue(preferences.getLong(BackupPreferences.PREF_BACKUP_LAST_DATE, 0) > 0); + assertTrue(preferences.getLong(TasksXmlExporter.PREF_BACKUP_LAST_DATE, 0) > 0); } public void testDeletion() throws IOException { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index e65366d29..64e2c4553 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -171,10 +171,6 @@ android:name="com.todoroo.astrid.activity.EditPreferences" android:theme="@android:style/Theme" /> - - @@ -395,8 +391,11 @@ + android:name="org.tasks.activities.ExportTaskActivity" + android:theme="@style/ReminderDialog" /> + preferences = new ArrayList() {{ - add(getPreference(AppearancePreferences.class, R.string.EPr_appearance_header)); - add(getPreference(ReminderPreferences.class, R.string.notifications)); - add(getPreference(DefaultsPreferences.class, R.string.task_defaults)); - add(getPreference(GtasksPreferences.class, R.string.gtasks_GPr_header)); - add(getPreference(BackupPreferences.class, R.string.backup_BPr_header)); - add(getPreference(OldTaskPreferences.class, R.string.EPr_manage_header)); - add(getPreference(MiscellaneousPreferences.class, R.string.miscellaneous)); - }}; - PreferenceScreen screen= getPreferenceScreen(); - for (Preference preference : preferences) { - screen.addPreference(preference); - } + addPreferencesFromResource(R.xml.preferences_appearance); + screen.addPreference(getPreference(ReminderPreferences.class, R.string.notifications)); + screen.addPreference(getPreference(DefaultsPreferences.class, R.string.task_defaults)); + screen.addPreference(getPreference(GtasksPreferences.class, R.string.gtasks_GPr_header)); + addPreferencesFromResource(R.xml.preferences_backup); + screen.addPreference(getPreference(OldTaskPreferences.class, R.string.EPr_manage_header)); + screen.addPreference(getPreference(MiscellaneousPreferences.class, R.string.miscellaneous)); } private Preference getPreference(final Class klass, final int label) { diff --git a/src/main/java/com/todoroo/astrid/backup/BackupPreferences.java b/src/main/java/com/todoroo/astrid/backup/BackupPreferences.java deleted file mode 100644 index c27ed26f9..000000000 --- a/src/main/java/com/todoroo/astrid/backup/BackupPreferences.java +++ /dev/null @@ -1,148 +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.res.Resources; -import android.graphics.Color; -import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceClickListener; -import android.view.View; -import android.view.ViewGroup.OnHierarchyChangeListener; - -import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.andlib.utility.DialogUtilities; -import com.todoroo.astrid.utility.Flags; -import com.todoroo.astrid.utility.TodorooPreferenceActivity; - -import org.tasks.R; -import org.tasks.preferences.Preferences; - -import javax.inject.Inject; - -import static org.tasks.date.DateTimeUtils.newDate; - -/** - * Displays synchronization preferences and an action panel so users can - * initiate actions from the menu. - * - * @author timsu - * - */ -public class BackupPreferences extends TodorooPreferenceActivity { - - public static final String PREF_BACKUP_LAST_DATE = "backupDate"; //$NON-NLS-1$ - - public static final String PREF_BACKUP_LAST_ERROR = "backupError"; //$NON-NLS-1$ - - private int statusColor = Color.BLACK; - - @Inject Preferences preferences; - @Inject TasksXmlImporter xmlImporter; - @Inject TasksXmlExporter xmlExporter; - - @Override - public int getPreferenceResource() { - return R.xml.preferences_backup; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - getListView().setOnHierarchyChangeListener(new OnHierarchyChangeListener() { - - @Override - public void onChildViewRemoved(View parent, View child) { - // - } - - @Override - public void onChildViewAdded(View parent, View child) { - View view = findViewById(R.id.status); - if(view != null) { - view.setBackgroundColor(statusColor); - } - } - }); - - findPreference(getString(R.string.backup_BAc_import)).setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - importTasks(); - return true; - } - }); - - findPreference(getString(R.string.backup_BAc_export)).setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - xmlExporter.exportTasks(BackupPreferences.this, TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, null); - return true; - } - }); - } - - @Override - public void updatePreferences(Preference preference, Object value) { - final Resources r = getResources(); - - if (r.getString(R.string.backup_BPr_status_key).equals(preference.getKey())) { - String status; - String subtitle = ""; //$NON-NLS-1$ - - // last backup was error - final long last = preferences.getLong(PREF_BACKUP_LAST_DATE, 0); - final String error = preferences.getStringValue(PREF_BACKUP_LAST_ERROR); - if(error != null) { - status = r.getString(R.string.backup_status_failed); - subtitle = r.getString(R.string.backup_status_failed_subtitle); - statusColor = Color.rgb(100, 0, 0); - preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference p) { - DialogUtilities.okDialog(BackupPreferences.this, error, null); - return true; - } - }); - } else if(last > 0) { - status = r.getString(R.string.backup_status_success, - DateUtilities.getDateStringWithTime(BackupPreferences.this, - newDate(last))); - statusColor = Color.rgb(0, 100, 0); - preference.setOnPreferenceClickListener(null); - } else { - status = r.getString(R.string.backup_status_never); - statusColor = Color.rgb(0, 0, 100); - preference.setOnPreferenceClickListener(null); - } - preference.setTitle(status); - preference.setSummary(subtitle); - - View view = findViewById(R.id.status); - if(view != null) { - view.setBackgroundColor(statusColor); - } - } - } - - private void importTasks() { - FilePickerBuilder.OnFilePickedListener listener = new FilePickerBuilder.OnFilePickedListener() { - @Override - public void onFilePicked(String filePath) { - xmlImporter.importTasks(BackupPreferences.this, filePath, new Runnable() { - @Override - public void run() { - Flags.set(Flags.REFRESH); - } - }); - } - }; - new FilePickerBuilder(this, - getString(R.string.import_file_prompt), - BackupConstants.defaultExportDirectory(), - listener).show(); - } -} diff --git a/src/main/java/com/todoroo/astrid/backup/FilePickerBuilder.java b/src/main/java/com/todoroo/astrid/backup/FilePickerBuilder.java index 44fdc6320..1ee399f6e 100644 --- a/src/main/java/com/todoroo/astrid/backup/FilePickerBuilder.java +++ b/src/main/java/com/todoroo/astrid/backup/FilePickerBuilder.java @@ -26,12 +26,12 @@ public class FilePickerBuilder extends AlertDialog.Builder implements DialogInte void onFilePicked(String filePath); } - private final OnFilePickedListener callback; + private OnFilePickedListener onFilePickedListener; + private File path; private String[] files; - private String path; private FilenameFilter filter; - public FilePickerBuilder(Context ctx, String title, File path, OnFilePickedListener callback) { + public FilePickerBuilder(Context ctx, int titleRes, File path) { super(ctx); filter = new FilenameFilter() { @Override @@ -40,15 +40,17 @@ public class FilePickerBuilder extends AlertDialog.Builder implements DialogInte return file.isFile(); } }; - this.callback = callback; - setTitle(title); + setTitle(ctx.getString(titleRes)); setPath(path); } - private void setPath(File path) { - if (path != null && path.exists()) { - this.path = path.getAbsolutePath(); + public void setOnFilePickedListener(OnFilePickedListener onFilePickedListener) { + this.onFilePickedListener = onFilePickedListener; + } + private void setPath(final File path) { + if (path != null && path.exists()) { + this.path = path; File[] filesAsFile = path.listFiles(filter); AndroidUtilities.sortFilesByDateDesc(filesAsFile); @@ -65,9 +67,9 @@ public class FilePickerBuilder extends AlertDialog.Builder implements DialogInte } @Override - public void onClick(DialogInterface dialogInterface, int i) { - if (callback != null) { - callback.onFilePicked(path + "/" + files[i]); + public void onClick(DialogInterface dialog, int which) { + if (onFilePickedListener != null) { + onFilePickedListener.onFilePicked(path.getAbsolutePath() + "/" + files[which]); } } } diff --git a/src/main/java/com/todoroo/astrid/backup/TasksXmlExporter.java b/src/main/java/com/todoroo/astrid/backup/TasksXmlExporter.java index 0713c361b..d28297250 100644 --- a/src/main/java/com/todoroo/astrid/backup/TasksXmlExporter.java +++ b/src/main/java/com/todoroo/astrid/backup/TasksXmlExporter.java @@ -48,6 +48,8 @@ public class TasksXmlExporter { private static final Logger log = LoggerFactory.getLogger(TasksXmlExporter.class); + public static final String PREF_BACKUP_LAST_DATE = "backupDate"; //$NON-NLS-1$ + // --- public interface public static enum ExportType { @@ -132,8 +134,7 @@ public class TasksXmlExporter { doTasksExport(output); } - preferences.setLong(BackupPreferences.PREF_BACKUP_LAST_DATE, DateUtilities.now()); - preferences.setString(BackupPreferences.PREF_BACKUP_LAST_ERROR, null); + preferences.setLong(PREF_BACKUP_LAST_DATE, DateUtilities.now()); if (exportType == ExportType.EXPORT_TYPE_MANUAL) { onFinishExport(output); @@ -146,6 +147,7 @@ public class TasksXmlExporter { public void run() { if(progressDialog.isShowing() && context instanceof Activity) { DialogUtilities.dismissDialog((Activity) context, progressDialog); + ((Activity) context).finish(); } } }); diff --git a/src/main/java/org/tasks/activities/ExportTaskActivity.java b/src/main/java/org/tasks/activities/ExportTaskActivity.java new file mode 100644 index 000000000..0eef8256b --- /dev/null +++ b/src/main/java/org/tasks/activities/ExportTaskActivity.java @@ -0,0 +1,20 @@ +package org.tasks.activities; + +import android.os.Bundle; + +import com.todoroo.astrid.backup.TasksXmlExporter; + +import org.tasks.injection.InjectingActivity; + +import javax.inject.Inject; + +public class ExportTaskActivity extends InjectingActivity { + + @Inject TasksXmlExporter xmlExporter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + xmlExporter.exportTasks(ExportTaskActivity.this, TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, null); + } +} diff --git a/src/main/java/org/tasks/activities/ImportTaskActivity.java b/src/main/java/org/tasks/activities/ImportTaskActivity.java new file mode 100644 index 000000000..d1b544fce --- /dev/null +++ b/src/main/java/org/tasks/activities/ImportTaskActivity.java @@ -0,0 +1,51 @@ +package org.tasks.activities; + +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 javax.inject.Inject; + +public class ImportTaskActivity extends InjectingActivity { + + @Inject TasksXmlImporter xmlImporter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + FilePickerBuilder filePickerBuilder = new FilePickerBuilder(this, + R.string.import_file_prompt, BackupConstants.defaultExportDirectory()); + filePickerBuilder.setOnFilePickedListener(new FilePickerBuilder.OnFilePickedListener() { + @Override + public void onFilePicked(String filePath) { + xmlImporter.importTasks(ImportTaskActivity.this, filePath, new Runnable() { + @Override + public void run() { + Flags.set(Flags.REFRESH); + finish(); + } + }); + } + }); + filePickerBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + finish(); + } + }); + filePickerBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + finish(); + } + }); + filePickerBuilder.show(); + } +} diff --git a/src/main/java/org/tasks/injection/ActivityModule.java b/src/main/java/org/tasks/injection/ActivityModule.java index dc1590e71..700fd9fd9 100644 --- a/src/main/java/org/tasks/injection/ActivityModule.java +++ b/src/main/java/org/tasks/injection/ActivityModule.java @@ -10,7 +10,6 @@ import com.todoroo.astrid.activity.FilterShortcutActivity; import com.todoroo.astrid.activity.ShareLinkActivity; import com.todoroo.astrid.activity.TaskEditActivity; import com.todoroo.astrid.activity.TaskListActivity; -import com.todoroo.astrid.backup.BackupPreferences; import com.todoroo.astrid.calls.MissedCallActivity; import com.todoroo.astrid.core.CustomFilterActivity; import com.todoroo.astrid.core.DefaultsPreferences; @@ -26,6 +25,8 @@ import com.todoroo.astrid.tags.DeleteTagActivity; import com.todoroo.astrid.tags.RenameTagActivity; import com.todoroo.astrid.widget.WidgetConfigActivity; +import org.tasks.activities.ExportTaskActivity; +import org.tasks.activities.ImportTaskActivity; import org.tasks.preferences.MiscellaneousPreferences; import org.tasks.reminders.SnoozeActivity; import org.tasks.voice.VoiceCommandActivity; @@ -55,14 +56,15 @@ import dagger.Provides; EditPreferences.class, GtasksPreferences.class, OldTaskPreferences.class, - BackupPreferences.class, FilterShortcutActivity.class, BeastModePreferences.class, DefaultsPreferences.class, ReminderPreferences.class, AACRecordingActivity.class, SnoozeActivity.class, - MiscellaneousPreferences.class + MiscellaneousPreferences.class, + ImportTaskActivity.class, + ExportTaskActivity.class }) public class ActivityModule { diff --git a/src/main/java/org/tasks/preferences/AppearancePreferences.java b/src/main/java/org/tasks/preferences/AppearancePreferences.java deleted file mode 100644 index ac356db3d..000000000 --- a/src/main/java/org/tasks/preferences/AppearancePreferences.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.tasks.preferences; - -import android.os.Bundle; -import android.preference.PreferenceActivity; - -import org.tasks.R; - -public class AppearancePreferences extends PreferenceActivity { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(R.xml.preferences_appearance); - } -} diff --git a/src/main/java/org/tasks/scheduling/BackupIntentService.java b/src/main/java/org/tasks/scheduling/BackupIntentService.java index 9fb4e68e5..9313bd328 100644 --- a/src/main/java/org/tasks/scheduling/BackupIntentService.java +++ b/src/main/java/org/tasks/scheduling/BackupIntentService.java @@ -3,7 +3,6 @@ package org.tasks.scheduling; import android.content.Context; import com.todoroo.astrid.backup.BackupConstants; -import com.todoroo.astrid.backup.BackupPreferences; import com.todoroo.astrid.backup.TasksXmlExporter; import org.slf4j.Logger; @@ -38,7 +37,7 @@ public class BackupIntentService extends MidnightIntentService { @Override String getLastRunPreference() { - return BackupPreferences.PREF_BACKUP_LAST_DATE; + return TasksXmlExporter.PREF_BACKUP_LAST_DATE; } /** @@ -65,7 +64,6 @@ public class BackupIntentService extends MidnightIntentService { backupDirectorySetting.getBackupDirectory()); } catch (Exception e) { log.error(e.getMessage(), e); - preferences.setString(BackupPreferences.PREF_BACKUP_LAST_ERROR, e.toString()); } } diff --git a/src/main/res/values/keys.xml b/src/main/res/values/keys.xml index 2454da093..afed4c5d7 100644 --- a/src/main/res/values/keys.xml +++ b/src/main/res/values/keys.xml @@ -216,9 +216,6 @@ - - backup_status - default_calendar_id diff --git a/src/main/res/values/strings-backup.xml b/src/main/res/values/strings-backup.xml index 80f3134d0..c92309e31 100644 --- a/src/main/res/values/strings-backup.xml +++ b/src/main/res/values/strings-backup.xml @@ -8,18 +8,6 @@ Backups - - Status - - - Latest backup:\n%s - - Last backup failed - - (tap to show error) - - Never backed up! - Import tasks diff --git a/src/main/res/xml/preferences_appearance.xml b/src/main/res/xml/preferences_appearance.xml index 63be5635c..cf2353942 100644 --- a/src/main/res/xml/preferences_appearance.xml +++ b/src/main/res/xml/preferences_appearance.xml @@ -2,69 +2,72 @@ - + - - - - + android:key="@string/p_use_dark_theme" + android:title="@string/EPr_use_dark_theme" /> - + + - - - - + - + - + + + + - - + + + + + + - - - - - - + + + + + + + diff --git a/src/main/res/xml/preferences_backup.xml b/src/main/res/xml/preferences_backup.xml index 48cc77fea..025b18470 100644 --- a/src/main/res/xml/preferences_backup.xml +++ b/src/main/res/xml/preferences_backup.xml @@ -1,29 +1,28 @@ - - - - - - - - - + - + - + + + + + + + +