package org.getlantern.firetweet.activity.support;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import org.getlantern.firetweet.R;
import org.getlantern.firetweet.fragment.ProgressDialogFragment;
import org.getlantern.firetweet.fragment.support.DataExportImportTypeSelectorDialogFragment;
import org.getlantern.firetweet.fragment.support.FileSelectorDialogFragment;
import org.getlantern.firetweet.util.DataImportExportUtils;
import org.getlantern.firetweet.util.ThemeUtils;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DataExportActivity extends BaseActionBarActivity implements FileSelectorDialogFragment.Callback,
DataExportImportTypeSelectorDialogFragment.Callback {
private ExportSettingsTask mTask;
@Override
public Resources getResources() {
return getDefaultResources();
}
@Override
public int getThemeResourceId() {
return ThemeUtils.getNoDisplayThemeResource(this);
}
@Override
public void onCancelled(final DialogFragment df) {
if (!isFinishing()) {
finish();
}
}
@Override
public void onDismissed(final DialogFragment df) {
if (df instanceof DataExportImportTypeSelectorDialogFragment) {
finish();
}
}
@Override
public void onFilePicked(final File file) {
if (file == null) {
finish();
return;
}
final DialogFragment df = new DataExportImportTypeSelectorDialogFragment();
final Bundle args = new Bundle();
args.putString(EXTRA_PATH, file.getAbsolutePath());
args.putString(EXTRA_TITLE, getString(R.string.export_settings_type_dialog_title));
df.setArguments(args);
df.show(getSupportFragmentManager(), "select_export_type");
}
@Override
public void onPositiveButtonClicked(final String path, final int flags) {
if (path == null || flags == 0) {
finish();
return;
}
if (mTask == null || mTask.getStatus() != AsyncTask.Status.RUNNING) {
mTask = new ExportSettingsTask(this, path, flags);
mTask.execute();
}
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
final File extStorage = Environment.getExternalStorageDirectory();
final String storagePath = extStorage != null ? extStorage.getAbsolutePath() : "/";
final FileSelectorDialogFragment f = new FileSelectorDialogFragment();
final Bundle args = new Bundle();
args.putString(EXTRA_ACTION, INTENT_ACTION_PICK_DIRECTORY);
args.putString(EXTRA_PATH, storagePath);
f.setArguments(args);
f.show(getSupportFragmentManager(), "select_file");
}
}
static class ExportSettingsTask extends AsyncTask<Object, Object, Boolean> {
private static final String FRAGMENT_TAG = "import_settings_dialog";
private final DataExportActivity mActivity;
private final String mPath;
private final int mFlags;
ExportSettingsTask(final DataExportActivity activity, final String path, final int flags) {
mActivity = activity;
mPath = path;
mFlags = flags;
}
@Override
protected Boolean doInBackground(final Object... params) {
if (mPath == null) return false;
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US);
final String fileName = String.format("Firetweet_Settings_%s.zip", sdf.format(new Date()));
final File file = new File(mPath, fileName);
file.delete();
try {
DataImportExportUtils.exportData(mActivity, file, mFlags);
return true;
} catch (final IOException e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(final Boolean result) {
final FragmentManager fm = mActivity.getSupportFragmentManager();
final DialogFragment f = (DialogFragment) fm.findFragmentByTag(FRAGMENT_TAG);
if (f != null) {
f.dismiss();
}
if (result != null && result) {
mActivity.setResult(RESULT_OK);
} else {
mActivity.setResult(RESULT_CANCELED);
}
mActivity.finish();
}
@Override
protected void onPreExecute() {
ProgressDialogFragment.show(mActivity, FRAGMENT_TAG).setCancelable(false);
}
}
}