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.Fragment;
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;
public class DataImportActivity extends BaseActionBarActivity implements FileSelectorDialogFragment.Callback,
DataExportImportTypeSelectorDialogFragment.Callback {
private ImportSettingsTask mImportSettingsTask;
private OpenImportTypeTask mOpenImportTypeTask;
@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 String path = file.getAbsolutePath();
if (mOpenImportTypeTask == null || mOpenImportTypeTask.getStatus() != AsyncTask.Status.RUNNING) {
mOpenImportTypeTask = new OpenImportTypeTask(this, path);
mOpenImportTypeTask.execute();
}
}
@Override
public void onPositiveButtonClicked(final String path, final int flags) {
if (path == null || flags == 0) {
finish();
return;
}
if (mImportSettingsTask == null || mImportSettingsTask.getStatus() != AsyncTask.Status.RUNNING) {
mImportSettingsTask = new ImportSettingsTask(this, path, flags);
mImportSettingsTask.execute();
}
}
public void showImportTypeDialog(final String path, final Integer flags) {
final DialogFragment df = new DataExportImportTypeSelectorDialogFragment();
final Bundle args = new Bundle();
args.putString(EXTRA_PATH, path);
args.putString(EXTRA_TITLE, getString(R.string.export_settings_type_dialog_title));
if (flags != null) {
args.putInt(EXTRA_FLAGS, flags);
} else {
args.putInt(EXTRA_FLAGS, 0);
}
df.setArguments(args);
df.show(getSupportFragmentManager(), "select_import_type");
}
@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_FILE);
args.putString(EXTRA_PATH, storagePath);
f.setArguments(args);
f.show(getSupportFragmentManager(), "select_file");
}
}
static class ImportSettingsTask extends AsyncTask<Object, Object, Boolean> {
private static final String FRAGMENT_TAG = "import_settings_dialog";
private final DataImportActivity mActivity;
private final String mPath;
private final int mFlags;
ImportSettingsTask(final DataImportActivity 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 File file = new File(mPath);
if (!file.isFile()) return false;
try {
DataImportExportUtils.importData(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 Fragment f = fm.findFragmentByTag(FRAGMENT_TAG);
if (f instanceof DialogFragment) {
((DialogFragment) 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);
}
}
static class OpenImportTypeTask extends AsyncTask<Object, Object, Integer> {
private static final String FRAGMENT_TAG = "read_settings_data_dialog";
private final DataImportActivity mActivity;
private final String mPath;
OpenImportTypeTask(final DataImportActivity activity, final String path) {
mActivity = activity;
mPath = path;
}
@Override
protected Integer doInBackground(final Object... params) {
if (mPath == null) return 0;
final File file = new File(mPath);
if (!file.isFile()) return 0;
try {
return DataImportExportUtils.getImportedSettingsFlags(file);
} catch (final IOException e) {
return 0;
}
}
@Override
protected void onPostExecute(final Integer flags) {
final FragmentManager fm = mActivity.getSupportFragmentManager();
final Fragment f = fm.findFragmentByTag(FRAGMENT_TAG);
if (f instanceof DialogFragment) {
((DialogFragment) f).dismiss();
}
final DialogFragment df = new DataExportImportTypeSelectorDialogFragment();
final Bundle args = new Bundle();
args.putString(EXTRA_PATH, mPath);
args.putString(EXTRA_TITLE, mActivity.getString(R.string.import_settings_type_dialog_title));
if (flags != null) {
args.putInt(EXTRA_FLAGS, flags);
} else {
args.putInt(EXTRA_FLAGS, 0);
}
df.setArguments(args);
df.show(mActivity.getSupportFragmentManager(), "select_import_type");
}
@Override
protected void onPreExecute() {
ProgressDialogFragment.show(mActivity, FRAGMENT_TAG).setCancelable(false);
}
}
}