public void exportTasks( final Context context, final ExportType exportType, DialogBuilder dialogBuilder) { this.context = context; this.exportCount = 0; this.backupDirectory = preferences.getBackupDirectory(); this.latestSetVersionName = null; 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); } new Thread( new Runnable() { @Override public void run() { try { String output = setupFile(backupDirectory, exportType); int tasks = taskService.countTasks(); if (tasks > 0) { doTasksExport(output); } preferences.setLong(PREF_BACKUP_LAST_DATE, DateUtilities.now()); if (exportType == ExportType.EXPORT_TYPE_MANUAL) { onFinishExport(output); } } catch (IOException e) { Timber.e(e, e.getMessage()); } finally { post( new Runnable() { @Override public void run() { if (progressDialog.isShowing() && context instanceof Activity) { DialogUtilities.dismissDialog((Activity) context, progressDialog); ((Activity) context).finish(); } } }); } } }) .start(); }