package com.gettingmobile.goodnews.settings;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.preference.ListPreference;
import android.preference.Preference;
import com.gettingmobile.android.app.DialogFactory;
import com.gettingmobile.android.app.actions.ActionContext;
import com.gettingmobile.goodnews.Application;
import com.gettingmobile.goodnews.R;
import com.gettingmobile.goodnews.storage.StorageProvider;
import com.gettingmobile.goodnews.storage.StorageProviderFactory;
import java.io.IOException;
import java.text.MessageFormat;
class DatabaseStorageProviderChangeListener implements Preference.OnPreferenceChangeListener {
private final ActionContext<Application> context;
public DatabaseStorageProviderChangeListener(ActionContext<Application> context) {
this.context = context;
}
@Override
public boolean onPreferenceChange(final Preference preference, Object o) {
final StorageProvider src = context.getApp().getSettings().getDatabaseStorageProvider();
final StorageProvider dest = StorageProviderFactory.createStorageProvider(
context.getApp(), StorageProvider.Storage.valueOf(o.toString()));
if (src.getType() == dest.getType())
return false; // nothing changed
DialogFactory.buildContinueDialog(
context.getActivity(), R.string.pref_database_move,
R.string.pref_database_move_confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
perform((ListPreference) preference, src, dest);
}
}
).show();
return false;
}
protected void perform(final ListPreference preference, final StorageProvider src, final StorageProvider dest) {
context.showWaitDialog();
new AsyncTask<Object, Object, Exception>() {
@Override
protected Exception doInBackground(Object... objects) {
try {
context.getApp().getDbHelper().moveOpenDatabase(src, dest);
return null;
} catch (IOException ex) {
return ex;
}
}
@Override
protected void onPostExecute(Exception o) {
context.dismissWaitDialog();
if (o == null) {
context.getApp().getSettings().setDatabaseStorageProvider(dest);
preference.setValue(dest.getType().name());
} else {
DialogFactory.showErrorDialog(context.getActivity(), R.string.pref_database_move,
MessageFormat.format(context.getApp().getString(R.string.pref_database_move_failed),
o.getLocalizedMessage()));
}
super.onPostExecute(o);
}
@Override
protected void onCancelled() {
context.dismissWaitDialog();
super.onCancelled();
}
}.execute();
}
}