Replace import/export activities with dialogs

pull/437/head
Alex Baker 8 years ago
parent 7f0b4b850b
commit 659cd0a76b

@ -373,15 +373,6 @@
android:label="@string/EPr_manage_header"
android:theme="@style/Tasks"/>
<!-- backup -->
<activity
android:name="org.tasks.activities.ExportTaskActivity"
android:theme="@style/TranslucentDialog" />
<activity
android:name="org.tasks.activities.ImportTaskActivity"
android:theme="@style/TranslucentDialog" />
<!-- premium -->
<activity
android:name="com.todoroo.astrid.files.AACRecordingActivity"

@ -29,7 +29,6 @@ import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.preferences.Preferences;
import org.xmlpull.v1.XmlSerializer;
@ -98,25 +97,16 @@ public class TasksXmlExporter {
this.preferences = preferences;
}
public void exportTasks(final Context context, final ExportType exportType, DialogBuilder dialogBuilder) {
public void exportTasks(final Context context, final ExportType exportType, final ProgressDialog progressDialog) {
this.context = context;
this.exportCount = 0;
this.backupDirectory = preferences.getBackupDirectory();
this.latestSetVersionName = null;
this.progressDialog = progressDialog;
handler = exportType == ExportType.EXPORT_TYPE_MANUAL ? new Handler() : null;
if(exportType == ExportType.EXPORT_TYPE_MANUAL) {
progressDialog = dialogBuilder.newProgressDialog();
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgress(0);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(false);
progressDialog.show();
if(context instanceof Activity) {
progressDialog.setOwnerActivity((Activity) context);
}
} else {
progressDialog = new ProgressDialog(context);
if(exportType != ExportType.EXPORT_TYPE_MANUAL) {
this.progressDialog = new ProgressDialog(context);
}
new Thread(new Runnable() {
@ -144,7 +134,6 @@ public class TasksXmlExporter {
public void run() {
if(progressDialog.isShowing() && context instanceof Activity) {
DialogUtilities.dismissDialog((Activity) context, progressDialog);
((Activity) context).finish();
}
}
});

@ -7,13 +7,11 @@ package com.todoroo.astrid.backup;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Handler;
import android.text.TextUtils;
import android.view.WindowManager.BadTokenException;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
@ -51,14 +49,13 @@ public class TasksXmlImporter {
private final TaskService taskService;
private final DialogBuilder dialogBuilder;
private Context context;
private Activity activity;
private Handler handler;
private int taskCount;
private int importCount = 0;
private int skipCount = 0;
private int errorCount = 0;
private ProgressDialog progressDialog;
private Runnable runAfterImport;
private String input;
private void setProgressMessage(final String message) {
@ -79,29 +76,12 @@ public class TasksXmlImporter {
this.dialogBuilder = dialogBuilder;
}
/**
* Import tasks.
* @param runAfterImport optional runnable after import
*/
public void importTasks(Context context, String input, Runnable runAfterImport) {
this.context = context;
public void importTasks(Activity activity, String input, ProgressDialog progressDialog) {
this.activity = activity;
this.input = input;
this.runAfterImport = runAfterImport;
this.progressDialog = progressDialog;
handler = new Handler();
progressDialog = dialogBuilder.newProgressDialog();
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
try {
progressDialog.show();
if(context instanceof Activity) {
progressDialog.setOwnerActivity((Activity) context);
}
} catch (BadTokenException e) {
// Running from a unit test or some such thing
Timber.e(e, e.getMessage());
}
new Thread(new Runnable() {
@Override
@ -145,24 +125,24 @@ public class TasksXmlImporter {
}
} finally {
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
activity.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
handler.post(new Runnable() {
@Override
public void run() {
if(progressDialog.isShowing() && context instanceof Activity) {
DialogUtilities.dismissDialog((Activity) context, progressDialog);
if(progressDialog.isShowing()) {
DialogUtilities.dismissDialog(activity, progressDialog);
showSummary();
}
showSummary();
}
});
}
}
private void showSummary() {
Resources r = context.getResources();
Resources r = activity.getResources();
dialogBuilder.newDialog()
.setTitle(R.string.import_summary_title)
.setMessage(context.getString(R.string.import_summary_message,
.setMessage(activity.getString(R.string.import_summary_message,
input,
r.getQuantityString(R.plurals.Ntasks, taskCount, taskCount),
r.getQuantityString(R.plurals.Ntasks, importCount, importCount),
@ -172,9 +152,6 @@ public class TasksXmlImporter {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
if (runAfterImport != null) {
handler.post(runAfterImport);
}
}
})
.show();
@ -219,8 +196,7 @@ public class TasksXmlImporter {
protected void parseTask() {
taskCount++;
setProgressMessage(context.getString(R.string.import_progress_read,
taskCount));
setProgressMessage(activity.getString(R.string.import_progress_read, taskCount));
currentTask.clear();
String title = xpp.getAttributeValue(null, Task.TITLE.name);

@ -1,28 +0,0 @@
package org.tasks.activities;
import android.os.Bundle;
import com.todoroo.astrid.backup.TasksXmlExporter;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import javax.inject.Inject;
public class ExportTaskActivity extends InjectingAppCompatActivity {
@Inject TasksXmlExporter xmlExporter;
@Inject DialogBuilder dialogBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
xmlExporter.exportTasks(ExportTaskActivity.this, TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, dialogBuilder);
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
}

@ -1,56 +0,0 @@
package org.tasks.activities;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.astrid.backup.TasksXmlImporter;
import org.tasks.analytics.Tracker;
import org.tasks.files.FileExplore;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.Preferences;
import javax.inject.Inject;
public class ImportTaskActivity extends InjectingAppCompatActivity {
private static final int REQUEST_PICKER = 1000;
@Inject TasksXmlImporter xmlImporter;
@Inject Preferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startActivityForResult(new Intent(this, FileExplore.class) {{
putExtra(FileExplore.EXTRA_START_PATH, preferences.getBackupDirectory().getAbsolutePath());
}}, REQUEST_PICKER);
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
@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,45 @@
package org.tasks.dialogs;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import com.todoroo.astrid.backup.TasksXmlExporter;
import org.tasks.injection.InjectingNativeDialogFragment;
import org.tasks.injection.NativeDialogFragmentComponent;
import javax.inject.Inject;
public class ExportTasksDialog extends InjectingNativeDialogFragment {
public static ExportTasksDialog newExportTasksDialog() {
return new ExportTasksDialog();
}
@Inject DialogBuilder dialogBuilder;
@Inject TasksXmlExporter tasksXmlExporter;
ProgressDialog progressDialog;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
progressDialog = dialogBuilder.newProgressDialog();
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgress(0);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(false);
progressDialog.show();
setCancelable(false);
tasksXmlExporter.exportTasks(getActivity(), TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, progressDialog);
return progressDialog;
}
@Override
protected void inject(NativeDialogFragmentComponent component) {
component.inject(this);
}
}

@ -0,0 +1,47 @@
package org.tasks.dialogs;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import com.todoroo.astrid.backup.TasksXmlImporter;
import org.tasks.injection.InjectingNativeDialogFragment;
import org.tasks.injection.NativeDialogFragmentComponent;
import javax.inject.Inject;
public class ImportTasksDialog extends InjectingNativeDialogFragment {
public static ImportTasksDialog newImportTasksDialog(String path) {
ImportTasksDialog importTasksDialog = new ImportTasksDialog();
Bundle args = new Bundle();
args.putString(EXTRA_PATH, path);
importTasksDialog.setArguments(args);
return importTasksDialog;
}
public static final String EXTRA_PATH = "extra_path";
@Inject TasksXmlImporter xmlImporter;
@Inject DialogBuilder dialogBuilder;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle arguments = getArguments();
String path = arguments.getString(EXTRA_PATH);
ProgressDialog progressDialog = dialogBuilder.newProgressDialog();
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
setCancelable(false);
xmlImporter.importTasks(getActivity(), path, progressDialog);
return progressDialog;
}
@Override
protected void inject(NativeDialogFragmentComponent component) {
component.inject(this);
}
}

@ -18,9 +18,7 @@ import org.tasks.activities.CameraActivity;
import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.DateAndTimePickerActivity;
import org.tasks.activities.DatePickerActivity;
import org.tasks.activities.ExportTaskActivity;
import org.tasks.activities.FilterSelectionActivity;
import org.tasks.activities.ImportTaskActivity;
import org.tasks.activities.TimePickerActivity;
import org.tasks.files.FileExplore;
import org.tasks.files.MyFilePickerActivity;
@ -78,10 +76,6 @@ public interface BaseActivityComponent {
void inject(DateAndTimePickerActivity dateAndTimePickerActivity);
void inject(ExportTaskActivity exportTaskActivity);
void inject(ImportTaskActivity importTaskActivity);
void inject(AddAttachmentActivity addAttachmentActivity);
void inject(DatePickerActivity datePickerActivity);

@ -1,5 +1,7 @@
package org.tasks.injection;
import org.tasks.dialogs.ExportTasksDialog;
import org.tasks.dialogs.ImportTasksDialog;
import org.tasks.dialogs.NativeDatePickerDialog;
import org.tasks.dialogs.NativeTimePickerDialog;
import org.tasks.dialogs.SeekBarDialog;
@ -13,4 +15,8 @@ public interface BaseNativeDialogFragmentComponent {
void inject(NativeTimePickerDialog nativeTimePickerDialog);
void inject(SeekBarDialog seekBarDialog);
void inject(ExportTasksDialog exportTasksDialog);
void inject(ImportTasksDialog importTasksDialog);
}

@ -4,9 +4,8 @@ import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import org.tasks.files.FileExplore;
import org.tasks.R;
import org.tasks.files.FileExplore;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
@ -14,9 +13,15 @@ import java.io.File;
import javax.inject.Inject;
import static org.tasks.dialogs.ExportTasksDialog.newExportTasksDialog;
import static org.tasks.dialogs.ImportTasksDialog.newImportTasksDialog;
public class BackupPreferences extends InjectingPreferenceActivity {
private static final String FRAG_TAG_IMPORT_TASKS = "frag_tag_import_tasks";
private static final String FRAG_TAG_EXPORT_TASKS = "frag_tag_export_tasks";
private static final int REQUEST_CODE_BACKUP_DIR = 2;
private static final int REQUEST_PICKER = 1000;
@Inject Preferences preferences;
@ -26,6 +31,24 @@ public class BackupPreferences extends InjectingPreferenceActivity {
addPreferencesFromResource(R.xml.preferences_backup);
getPref(R.string.backup_BAc_import).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivityForResult(new Intent(BackupPreferences.this, FileExplore.class) {{
putExtra(FileExplore.EXTRA_START_PATH, preferences.getBackupDirectory().getAbsolutePath());
}}, REQUEST_PICKER);
return false;
}
});
getPref(R.string.backup_BAc_export).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
newExportTasksDialog().show(getFragmentManager(), FRAG_TAG_EXPORT_TASKS);
return false;
}
});
initializeBackupDirectory();
}
@ -37,6 +60,11 @@ public class BackupPreferences extends InjectingPreferenceActivity {
preferences.setString(R.string.p_backup_dir, dir);
updateBackupDirectory();
}
} else if (requestCode == REQUEST_PICKER) {
if (resultCode == RESULT_OK) {
newImportTasksDialog(data.getStringExtra(FileExplore.EXTRA_FILE))
.show(getFragmentManager(), FRAG_TAG_IMPORT_TASKS);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}

@ -12,18 +12,10 @@
<Preference
android:key="@string/backup_BAc_import"
android:title="@string/backup_BAc_import">
<intent
android:targetClass="org.tasks.activities.ImportTaskActivity"
android:targetPackage="org.tasks" />
</Preference>
android:title="@string/backup_BAc_import" />
<Preference
android:key="@string/backup_BAc_export"
android:title="@string/backup_BAc_export">
<intent
android:targetClass="org.tasks.activities.ExportTaskActivity"
android:targetPackage="org.tasks" />
</Preference>
android:title="@string/backup_BAc_export" />
</PreferenceScreen>

@ -12,7 +12,6 @@
<screenName name="org.tasks.files.MyFilePickerActivity">MyFilePickerActivity</screenName>
<screenName name="org.tasks.reminders.MissedCallActivity">MissedCallActivity</screenName>
<screenName name="com.todoroo.astrid.gtasks.auth.GtasksLoginActivity">GtasksLoginActivity</screenName>
<screenName name="org.tasks.activities.ImportTaskActivity">ImportTaskActivity</screenName>
<screenName name="org.tasks.voice.VoiceCommandActivity">VoiceCommandActivity</screenName>
<screenName name="org.tasks.locale.ui.activity.TaskerSettingsActivity">TaskerSettingsActivity</screenName>
<screenName name="com.todoroo.astrid.activity.TaskListActivity">TaskListActivity</screenName>
@ -27,7 +26,6 @@
<screenName name="org.tasks.activities.ColorPickerActivity">ColorPickerActivity</screenName>
<screenName name="org.tasks.activities.DateAndTimePickerActivity">DateAndTimePickerActivity</screenName>
<screenName name="org.tasks.activities.DatePickerActivity">DatePickerActivity</screenName>
<screenName name="org.tasks.activities.ExportTaskActivity">ExportTaskActivity</screenName>
<screenName name="org.tasks.activities.FilterSelectionActivity">FilterSelectionActivity</screenName>
<screenName name="org.tasks.activities.TimePickerActivity">TimePickerActivity</screenName>
<screenName name="org.tasks.files.FileExplore">FileExplore</screenName>

Loading…
Cancel
Save