use of com.ichi2.async.DeckTask.TaskData in project Anki-Android by Ramblurr.
the class DeckPicker method onActivityResult.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
mDontSaveOnStop = false;
if (resultCode == RESULT_MEDIA_EJECTED) {
showDialog(DIALOG_SD_CARD_NOT_MOUNTED);
return;
} else if (resultCode == RESULT_DB_ERROR) {
handleDbError();
return;
}
if (requestCode == SHOW_STUDYOPTIONS && resultCode == RESULT_OK) {
loadCounts();
} else if (requestCode == ADD_NOTE && resultCode != RESULT_CANCELED) {
loadCounts();
} else if (requestCode == BROWSE_CARDS && (resultCode == Activity.RESULT_OK || resultCode == Activity.RESULT_CANCELED)) {
loadCounts();
} else if (requestCode == ADD_CRAM_DECK) {
// TODO: check, if ok has been clicked
loadCounts();
} else if (requestCode == REPORT_ERROR) {
showStartupScreensAndDialogs(AnkiDroidApp.getSharedPrefs(getBaseContext()), 4);
} else if (requestCode == SHOW_INFO_UPGRADE_DECKS) {
if (intent != null && intent.hasExtra(Info.TYPE_UPGRADE_STAGE)) {
int type = intent.getIntExtra(Info.TYPE_UPGRADE_STAGE, Info.UPGRADE_SCREEN_BASIC1);
if (type == Info.UPGRADE_CONTINUE) {
showStartupScreensAndDialogs(AnkiDroidApp.getSharedPrefs(getBaseContext()), 3);
} else {
showUpgradeScreen(true, type, !intent.hasExtra(Info.TYPE_ANIMATION_RIGHT));
}
} else {
if (resultCode == RESULT_OK) {
if (mOpenCollectionDialog != null && mOpenCollectionDialog.isShowing()) {
mOpenCollectionDialog.dismiss();
}
if (AnkiDroidApp.colIsOpen()) {
AnkiDroidApp.closeCollection(true);
}
AnkiDroidApp.openCollection(AnkiDroidApp.getCollectionPath());
loadCounts();
} else {
finishWithAnimation();
}
}
} else if (requestCode == SHOW_INFO_WELCOME || requestCode == SHOW_INFO_NEW_VERSION) {
if (resultCode == RESULT_OK) {
showStartupScreensAndDialogs(AnkiDroidApp.getSharedPrefs(getBaseContext()), requestCode == SHOW_INFO_WELCOME ? 1 : 2);
} else {
finishWithAnimation();
}
} else if (requestCode == PREFERENCES_UPDATE) {
String oldPath = mPrefDeckPath;
SharedPreferences pref = restorePreferences();
String newLanguage = pref.getString("language", "");
if (AnkiDroidApp.setLanguage(newLanguage)) {
mInvalidateMenu = true;
}
if (mNotMountedDialog != null && mNotMountedDialog.isShowing() && pref.getBoolean("internalMemory", false)) {
showStartupScreensAndDialogs(pref, 0);
} else if (!mPrefDeckPath.equals(oldPath)) {
loadCollection();
}
// if (resultCode == StudyOptions.RESULT_RESTART) {
// setResult(StudyOptions.RESULT_RESTART);
// finishWithAnimation();
// } else {
// SharedPreferences preferences = PrefSettings.getSharedPrefs(getBaseContext());
// BackupManager.initBackup();
// if (!mPrefDeckPath.equals(preferences.getString("deckPath", AnkiDroidApp.getStorageDirectory())) ||
// mPrefDeckOrder != Integer.parseInt(preferences.getString("deckOrder", "0"))) {
// // populateDeckList(preferences.getString("deckPath", AnkiDroidApp.getStorageDirectory()));
// }
// }
} else if (requestCode == REPORT_FEEDBACK && resultCode == RESULT_OK) {
} else if (requestCode == LOG_IN_FOR_SYNC && resultCode == RESULT_OK) {
sync();
} else if (requestCode == LOG_IN_FOR_SHARED_DECK && resultCode == RESULT_OK) {
addSharedDeck();
} else if (requestCode == ADD_SHARED_DECKS) {
if (intent != null) {
mImportPath = intent.getStringExtra("importPath");
}
if (AnkiDroidApp.colIsOpen() && mImportPath != null) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_IMPORT, mImportAddListener, new TaskData(AnkiDroidApp.getCol(), mImportPath, true));
mImportPath = null;
}
} else if (requestCode == REQUEST_REVIEW) {
Log.i(AnkiDroidApp.TAG, "Result code = " + resultCode);
switch(resultCode) {
default:
// do not reload counts, if activity is created anew because it has been before destroyed by android
loadCounts();
break;
case Reviewer.RESULT_NO_MORE_CARDS:
mDontSaveOnStop = true;
Intent i = new Intent();
i.setClass(this, StudyOptionsActivity.class);
i.putExtra("onlyFnsMsg", true);
startActivityForResult(i, SHOW_STUDYOPTIONS);
if (AnkiDroidApp.SDK_VERSION > 4) {
ActivityTransitionAnimation.slide(this, ActivityTransitionAnimation.RIGHT);
}
break;
}
}
// workaround for hidden dialog on return
BroadcastMessages.showDialog();
}
use of com.ichi2.async.DeckTask.TaskData in project Anki-Android by Ramblurr.
the class DeckPicker method onCreateDialog.
@Override
protected Dialog onCreateDialog(int id) {
StyledDialog dialog;
Resources res = getResources();
StyledDialog.Builder builder = new StyledDialog.Builder(this);
switch(id) {
case DIALOG_OK:
builder.setPositiveButton(R.string.ok, null);
dialog = builder.create();
break;
case DIALOG_NO_SDCARD:
builder.setMessage("The SD card could not be read. Please, turn off USB storage.");
builder.setPositiveButton(R.string.ok, null);
dialog = builder.create();
break;
case DIALOG_SELECT_HELP:
builder.setTitle(res.getString(R.string.help_title));
builder.setItems(new String[] { res.getString(R.string.help_tutorial), res.getString(R.string.help_online), res.getString(R.string.help_faq) }, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (arg1 == 0) {
createTutorialDeck();
} else {
if (Utils.isIntentAvailable(DeckPicker.this, "android.intent.action.VIEW")) {
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(getResources().getString(arg1 == 1 ? R.string.link_help : R.string.link_faq)));
startActivity(intent);
} else {
startActivity(new Intent(DeckPicker.this, Info.class));
}
}
}
});
dialog = builder.create();
break;
case DIALOG_CONNECTION_ERROR:
builder.setTitle(res.getString(R.string.connection_error_title));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setMessage(res.getString(R.string.connection_error_message));
builder.setPositiveButton(res.getString(R.string.retry), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
sync();
}
});
builder.setNegativeButton(res.getString(R.string.cancel), null);
dialog = builder.create();
break;
case DIALOG_SYNC_CONFLICT_RESOLUTION:
builder.setTitle(res.getString(R.string.sync_conflict_title));
builder.setIcon(android.R.drawable.ic_input_get);
builder.setMessage(res.getString(R.string.sync_conflict_message));
builder.setPositiveButton(res.getString(R.string.sync_conflict_local), mSyncConflictResolutionListener);
builder.setNeutralButton(res.getString(R.string.sync_conflict_remote), mSyncConflictResolutionListener);
builder.setNegativeButton(res.getString(R.string.sync_conflict_cancel), mSyncConflictResolutionListener);
builder.setCancelable(true);
dialog = builder.create();
break;
case DIALOG_LOAD_FAILED:
builder.setMessage(res.getString(R.string.open_collection_failed_message, BackupManager.BROKEN_DECKS_SUFFIX, res.getString(R.string.repair_deck)));
builder.setTitle(R.string.open_collection_failed_title);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setPositiveButton(res.getString(R.string.error_handling_options), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
builder.setNegativeButton(res.getString(R.string.close), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finishWithAnimation();
}
});
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finishWithAnimation();
}
});
dialog = builder.create();
break;
case DIALOG_DB_ERROR:
builder.setMessage(R.string.answering_error_message);
builder.setTitle(R.string.answering_error_title);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setPositiveButton(res.getString(R.string.error_handling_options), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
builder.setNeutralButton(res.getString(R.string.answering_error_report), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent i = new Intent(DeckPicker.this, Feedback.class);
i.putExtra("request", RESULT_DB_ERROR);
dialog.dismiss();
startActivityForResult(i, REPORT_ERROR);
if (AnkiDroidApp.SDK_VERSION > 4) {
ActivityTransitionAnimation.slide(DeckPicker.this, ActivityTransitionAnimation.RIGHT);
}
}
});
builder.setNegativeButton(res.getString(R.string.close), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (!AnkiDroidApp.colIsOpen()) {
finishWithAnimation();
}
}
});
builder.setCancelable(true);
dialog = builder.create();
break;
case DIALOG_ERROR_HANDLING:
builder.setTitle(res.getString(R.string.error_handling_title));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setSingleChoiceItems(new String[] { "1" }, 0, null);
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if (mLoadFailed) {
// dialog has been called because collection could not be opened
showDialog(DIALOG_LOAD_FAILED);
} else {
// dialog has been called because a db error happened
showDialog(DIALOG_DB_ERROR);
}
}
});
builder.setNegativeButton(res.getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mLoadFailed) {
// dialog has been called because collection could not be opened
showDialog(DIALOG_LOAD_FAILED);
} else {
// dialog has been called because a db error happened
showDialog(DIALOG_DB_ERROR);
}
}
});
dialog = builder.create();
break;
case DIALOG_USER_NOT_LOGGED_IN_ADD_SHARED_DECK:
builder.setTitle(res.getString(R.string.connection_error_title));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setMessage(res.getString(R.string.no_user_password_error_message));
builder.setNegativeButton(res.getString(R.string.cancel), null);
builder.setPositiveButton(res.getString(R.string.log_in), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent myAccount = new Intent(DeckPicker.this, MyAccount.class);
myAccount.putExtra("notLoggedIn", true);
startActivityForResult(myAccount, LOG_IN_FOR_SHARED_DECK);
if (AnkiDroidApp.SDK_VERSION > 4) {
ActivityTransitionAnimation.slide(DeckPicker.this, ActivityTransitionAnimation.FADE);
}
}
});
dialog = builder.create();
break;
case DIALOG_USER_NOT_LOGGED_IN_SYNC:
builder.setTitle(res.getString(R.string.connection_error_title));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setMessage(res.getString(R.string.no_user_password_error_message));
builder.setNegativeButton(res.getString(R.string.cancel), null);
builder.setPositiveButton(res.getString(R.string.log_in), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent myAccount = new Intent(DeckPicker.this, MyAccount.class);
myAccount.putExtra("notLoggedIn", true);
startActivityForResult(myAccount, LOG_IN_FOR_SYNC);
if (AnkiDroidApp.SDK_VERSION > 4) {
ActivityTransitionAnimation.slide(DeckPicker.this, ActivityTransitionAnimation.FADE);
}
}
});
dialog = builder.create();
break;
case DIALOG_NO_CONNECTION:
builder.setTitle(res.getString(R.string.connection_error_title));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setMessage(res.getString(R.string.connection_needed));
builder.setPositiveButton(res.getString(R.string.ok), null);
dialog = builder.create();
break;
case DIALOG_DELETE_DECK:
if (!AnkiDroidApp.colIsOpen() || mDeckList == null) {
return null;
}
// Message is set in onPrepareDialog
builder.setTitle(res.getString(R.string.delete_deck_title));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setPositiveButton(res.getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_DELETE_DECK, new DeckTask.TaskListener() {
@Override
public void onPreExecute() {
mProgressDialog = StyledProgressDialog.show(DeckPicker.this, "", getResources().getString(R.string.delete_deck), true);
}
@Override
public void onPostExecute(TaskData result) {
if (result == null) {
return;
}
Object[] res = result.getObjArray();
updateDecksList((TreeSet<Object[]>) res[0], (Integer) res[1], (Integer) res[2]);
if (mFragmented) {
selectDeck(AnkiDroidApp.getCol().getDecks().selected());
}
if (mProgressDialog.isShowing()) {
try {
mProgressDialog.dismiss();
} catch (Exception e) {
Log.e(AnkiDroidApp.TAG, "onPostExecute - Dialog dismiss Exception = " + e.getMessage());
}
}
}
@Override
public void onProgressUpdate(TaskData... values) {
}
}, new TaskData(AnkiDroidApp.getCol(), mCurrentDid));
}
});
builder.setNegativeButton(res.getString(R.string.cancel), null);
dialog = builder.create();
break;
case DIALOG_SELECT_STATISTICS_TYPE:
dialog = ChartBuilder.getStatisticsDialog(this, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
boolean muh = mFragmented ? AnkiDroidApp.getSharedPrefs(AnkiDroidApp.getInstance().getBaseContext()).getBoolean("statsRange", true) : true;
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_LOAD_STATISTICS, mLoadStatisticsHandler, new DeckTask.TaskData(AnkiDroidApp.getCol(), which, mFragmented ? AnkiDroidApp.getSharedPrefs(AnkiDroidApp.getInstance().getBaseContext()).getBoolean("statsRange", true) : true));
}
}, mFragmented);
break;
case DIALOG_CONTEXT_MENU:
String[] entries = new String[3];
// entries[CONTEXT_MENU_DECK_SUMMARY] =
// "XXXsum";//res.getStringArray(R.array.statistics_type_labels)[0];
// entries[CONTEXT_MENU_CUSTOM_DICTIONARY] =
// res.getString(R.string.contextmenu_deckpicker_set_custom_dictionary);
// entries[CONTEXT_MENU_RESET_LANGUAGE] =
// res.getString(R.string.contextmenu_deckpicker_reset_language_assignments);
entries[CONTEXT_MENU_COLLAPSE_DECK] = res.getString(R.string.contextmenu_deckpicker_collapse_deck);
entries[CONTEXT_MENU_RENAME_DECK] = res.getString(R.string.contextmenu_deckpicker_rename_deck);
entries[CONTEXT_MENU_DELETE_DECK] = res.getString(R.string.contextmenu_deckpicker_delete_deck);
builder.setTitle("Context Menu");
builder.setIcon(R.drawable.ic_menu_manage);
builder.setItems(entries, mContextMenuListener);
dialog = builder.create();
break;
case DIALOG_REPAIR_COLLECTION:
builder.setTitle(res.getString(R.string.backup_repair_deck));
builder.setMessage(res.getString(R.string.repair_deck_dialog, BackupManager.BROKEN_DECKS_SUFFIX));
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setPositiveButton(res.getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_REPAIR_DECK, mRepairDeckHandler, new DeckTask.TaskData(AnkiDroidApp.getCol(), AnkiDroidApp.getCollectionPath()));
}
});
builder.setNegativeButton(res.getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
dialog = builder.create();
break;
case DIALOG_SYNC_SANITY_ERROR:
builder.setPositiveButton(getString(R.string.sync_sanity_local), mSyncSanityFailListener);
builder.setNeutralButton(getString(R.string.sync_sanity_remote), mSyncSanityFailListener);
builder.setNegativeButton(res.getString(R.string.sync_conflict_cancel), mSyncSanityFailListener);
builder.setTitle(res.getString(R.string.sync_log_title));
dialog = builder.create();
break;
case DIALOG_SYNC_UPGRADE_REQUIRED:
builder.setMessage(res.getString(R.string.upgrade_required, res.getString(R.string.link_anki)));
builder.setPositiveButton(res.getString(R.string.retry), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
sync("download", mSyncMediaUsn);
}
});
builder.setNegativeButton(res.getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mLoadFailed) {
// dialog has been called because collection could not be opened
showDialog(DIALOG_LOAD_FAILED);
} else {
// dialog has been called because a db error happened
showDialog(DIALOG_DB_ERROR);
}
}
});
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
if (mLoadFailed) {
// dialog has been called because collection could not be opened
showDialog(DIALOG_LOAD_FAILED);
} else {
// dialog has been called because a db error happened
showDialog(DIALOG_DB_ERROR);
}
}
});
builder.setTitle(res.getString(R.string.sync_log_title));
dialog = builder.create();
break;
case DIALOG_SYNC_LOG:
builder.setTitle(res.getString(R.string.sync_log_title));
builder.setPositiveButton(res.getString(R.string.ok), null);
dialog = builder.create();
break;
case DIALOG_BACKUP_NO_SPACE_LEFT:
builder.setTitle(res.getString(R.string.attention));
builder.setMessage(res.getString(R.string.backup_deck_no_space_left));
builder.setPositiveButton(res.getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
loadCollection();
}
});
// builder.setNegativeButton(res.getString(R.string.dont_show_again), new
// DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface arg0, int arg1) {
// PrefSettings.getSharedPrefs(getBaseContext()).edit().putBoolean("dontShowLowMemory", true).commit();
// }
// });
builder.setCancelable(true);
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
loadCollection();
}
});
dialog = builder.create();
break;
case DIALOG_SD_CARD_NOT_MOUNTED:
if (mNotMountedDialog == null || !mNotMountedDialog.isShowing()) {
mNotMountedDialog = StyledOpenCollectionDialog.show(DeckPicker.this, getResources().getString(R.string.sd_card_not_mounted), new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
finishWithAnimation();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(DeckPicker.this, Preferences.class), PREFERENCES_UPDATE);
}
});
}
dialog = null;
break;
case DIALOG_IMPORT:
builder.setTitle(res.getString(R.string.import_title));
builder.setMessage(res.getString(R.string.import_message, mImportPath));
builder.setPositiveButton(res.getString(R.string.import_message_add), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_IMPORT, mImportAddListener, new TaskData(AnkiDroidApp.getCol(), mImportPath, false));
mImportPath = null;
}
});
builder.setNeutralButton(res.getString(R.string.import_message_replace), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Resources res = getResources();
StyledDialog.Builder builder = new StyledDialog.Builder(DeckPicker.this);
builder.setTitle(res.getString(R.string.import_title));
builder.setMessage(res.getString(R.string.import_message_replace_confirm, mImportPath));
builder.setPositiveButton(res.getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_IMPORT_REPLACE, mImportReplaceListener, new TaskData(AnkiDroidApp.getCol(), mImportPath));
mImportPath = null;
}
});
builder.setNegativeButton(res.getString(R.string.no), null);
builder.show();
}
});
builder.setNegativeButton(res.getString(R.string.cancel), null);
builder.setCancelable(true);
dialog = builder.create();
break;
case DIALOG_IMPORT_SELECT:
builder.setTitle(res.getString(R.string.import_title));
dialog = builder.create();
break;
case DIALOG_IMPORT_HINT:
builder.setTitle(res.getString(R.string.import_title));
builder.setMessage(res.getString(R.string.import_hint, AnkiDroidApp.getCurrentAnkiDroidDirectory()));
builder.setPositiveButton(res.getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialog(DIALOG_IMPORT_SELECT);
}
});
builder.setNegativeButton(res.getString(R.string.cancel), null);
dialog = builder.create();
break;
case DIALOG_IMPORT_LOG:
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(res.getString(R.string.import_title));
builder.setPositiveButton(res.getString(R.string.ok), null);
dialog = builder.create();
break;
case DIALOG_NO_SPACE_LEFT:
builder.setTitle(res.getString(R.string.attention));
builder.setMessage(res.getString(R.string.sd_space_warning, BackupManager.MIN_FREE_SPACE));
builder.setPositiveButton(res.getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finishWithAnimation();
}
});
// builder.setNegativeButton(res.getString(R.string.dont_show_again), new
// DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface arg0, int arg1) {
// PrefSettings.getSharedPrefs(getBaseContext()).edit().putBoolean("dontShowLowMemory", true).commit();
// }
// });
builder.setCancelable(true);
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
finishWithAnimation();
}
});
dialog = builder.create();
break;
case DIALOG_RESTORE_BACKUP:
File[] files = BackupManager.getBackups(new File(AnkiDroidApp.getCollectionPath()));
mBackups = new File[files.length];
for (int i = 0; i < files.length; i++) {
mBackups[i] = files[files.length - 1 - i];
}
if (mBackups.length == 0) {
builder.setTitle(getResources().getString(R.string.backup_restore));
builder.setMessage(res.getString(R.string.backup_restore_no_backups));
builder.setPositiveButton(res.getString(R.string.ok), new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
builder.setCancelable(true).setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
} else {
String[] dates = new String[mBackups.length];
for (int i = 0; i < mBackups.length; i++) {
dates[i] = mBackups[i].getName().replaceAll(".*-(\\d{4}-\\d{2}-\\d{2})-(\\d{2})-(\\d{2}).anki2", "$1 ($2:$3 h)");
}
builder.setTitle(res.getString(R.string.backup_restore_select_title));
builder.setIcon(android.R.drawable.ic_input_get);
builder.setSingleChoiceItems(dates, dates.length, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_RESTORE_DECK, mRestoreDeckHandler, new DeckTask.TaskData(new Object[] { AnkiDroidApp.getCol(), AnkiDroidApp.getCollectionPath(), mBackups[which].getPath() }));
}
});
builder.setCancelable(true).setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
}
dialog = builder.create();
break;
case DIALOG_NEW_COLLECTION:
builder.setTitle(res.getString(R.string.backup_new_collection));
builder.setMessage(res.getString(R.string.backup_del_collection_question));
builder.setPositiveButton(res.getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AnkiDroidApp.closeCollection(false);
String path = AnkiDroidApp.getCollectionPath();
AnkiDatabaseManager.closeDatabase(path);
if (BackupManager.moveDatabaseToBrokenFolder(path, false)) {
loadCollection();
} else {
showDialog(DIALOG_ERROR_HANDLING);
}
}
});
builder.setNegativeButton(res.getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
builder.setCancelable(true);
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
dialog = builder.create();
break;
case DIALOG_FULL_SYNC_FROM_SERVER:
builder.setTitle(res.getString(R.string.backup_full_sync_from_server));
builder.setMessage(res.getString(R.string.backup_full_sync_from_server_question));
builder.setPositiveButton(res.getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
sync("download", mSyncMediaUsn);
}
});
builder.setNegativeButton(res.getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
builder.setCancelable(true);
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
showDialog(DIALOG_ERROR_HANDLING);
}
});
dialog = builder.create();
break;
default:
dialog = null;
}
if (dialog != null) {
dialog.setOwnerActivity(this);
}
return dialog;
}
use of com.ichi2.async.DeckTask.TaskData in project Anki-Android by Ramblurr.
the class DeckPicker method onPrepareDialog.
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
Resources res = getResources();
StyledDialog ad = (StyledDialog) dialog;
switch(id) {
case DIALOG_DELETE_DECK:
if (!AnkiDroidApp.colIsOpen() || mDeckList == null || mDeckList.size() == 0) {
return;
}
boolean isDyn = AnkiDroidApp.getCol().getDecks().isDyn(mCurrentDid);
if (isDyn) {
ad.setMessage(String.format(res.getString(R.string.delete_cram_deck_message), "\'" + AnkiDroidApp.getCol().getDecks().name(mCurrentDid) + "\'"));
} else {
ad.setMessage(String.format(res.getString(R.string.delete_deck_message), "\'" + AnkiDroidApp.getCol().getDecks().name(mCurrentDid) + "\'"));
}
break;
case DIALOG_CONTEXT_MENU:
if (!AnkiDroidApp.colIsOpen() || mDeckList == null || mDeckList.size() == 0) {
return;
}
mCurrentDid = Long.parseLong(mDeckList.get(mContextMenuPosition).get("did"));
try {
ad.changeListItem(CONTEXT_MENU_COLLAPSE_DECK, getResources().getString(AnkiDroidApp.getCol().getDecks().get(mCurrentDid).getBoolean("collapsed") ? R.string.contextmenu_deckpicker_inflate_deck : R.string.contextmenu_deckpicker_collapse_deck));
} catch (NotFoundException e) {
// do nothing
} catch (JSONException e) {
// do nothing
}
ad.setTitle(AnkiDroidApp.getCol().getDecks().name(mCurrentDid));
break;
case DIALOG_IMPORT_LOG:
case DIALOG_SYNC_LOG:
case DIALOG_SYNC_SANITY_ERROR:
// If both have text, separate them by a new line.
if (!TextUtils.isEmpty(mDialogMessage) && !TextUtils.isEmpty(mSyncMessage)) {
ad.setMessage(mDialogMessage + "\n\n" + mSyncMessage);
} else if (!TextUtils.isEmpty(mDialogMessage)) {
ad.setMessage(mDialogMessage);
} else {
ad.setMessage(mSyncMessage);
}
break;
case DIALOG_DB_ERROR:
mLoadFailed = false;
ad.getButton(Dialog.BUTTON3).setEnabled(hasErrorFiles());
break;
case DIALOG_LOAD_FAILED:
mLoadFailed = true;
if (mOpenCollectionDialog != null && mOpenCollectionDialog.isShowing()) {
mOpenCollectionDialog.setMessage(res.getString(R.string.col_load_failed));
}
break;
case DIALOG_ERROR_HANDLING:
ArrayList<String> options = new ArrayList<String>();
ArrayList<Integer> values = new ArrayList<Integer>();
if (AnkiDroidApp.getCol() == null) {
// retry
options.add(res.getString(R.string.backup_retry_opening));
values.add(0);
} else {
// fix integrity
options.add(res.getString(R.string.check_db));
values.add(1);
}
// repair db with sqlite
options.add(res.getString(R.string.backup_error_menu_repair));
values.add(2);
// // restore from backup
options.add(res.getString(R.string.backup_restore));
values.add(3);
// delete old collection and build new one
options.add(res.getString(R.string.backup_full_sync_from_server));
values.add(4);
// delete old collection and build new one
options.add(res.getString(R.string.backup_del_collection));
values.add(5);
String[] titles = new String[options.size()];
mRepairValues = new int[options.size()];
for (int i = 0; i < options.size(); i++) {
titles[i] = options.get(i);
mRepairValues[i] = values.get(i);
}
ad.setItems(titles, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch(mRepairValues[which]) {
case 0:
loadCollection();
return;
case 1:
integrityCheck();
return;
case 2:
showDialog(DIALOG_REPAIR_COLLECTION);
return;
case 3:
showDialog(DIALOG_RESTORE_BACKUP);
return;
case 4:
showDialog(DIALOG_FULL_SYNC_FROM_SERVER);
return;
case 5:
showDialog(DIALOG_NEW_COLLECTION);
return;
}
}
});
break;
case DIALOG_IMPORT_SELECT:
List<File> fileList = Utils.getImportableDecks();
if (fileList.size() == 0) {
Themes.showThemedToast(DeckPicker.this, getResources().getString(R.string.upgrade_import_no_file_found), false);
}
ad.setEnabled(fileList.size() != 0);
String[] tts = new String[fileList.size()];
mImportValues = new String[fileList.size()];
for (int i = 0; i < tts.length; i++) {
tts[i] = fileList.get(i).getName().replace(".apkg", "");
mImportValues[i] = fileList.get(i).getAbsolutePath();
}
ad.setItems(tts, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mImportPath = mImportValues[which];
//If the apkg file is called "collection.apkg", we assume the collection will be replaced
if (mImportPath.split("/")[mImportPath.split("/").length - 1].equals("collection.apkg")) {
mImportMethod = IMPORT_METHOD_REPLACE;
}
switch(mImportMethod) {
case IMPORT_METHOD_ADD:
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_IMPORT, mImportAddListener, new TaskData(AnkiDroidApp.getCol(), mImportPath, false));
mImportPath = null;
break;
case IMPORT_METHOD_REPLACE:
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_IMPORT_REPLACE, mImportReplaceListener, new TaskData(AnkiDroidApp.getCol(), mImportPath));
mImportPath = null;
break;
case IMPORT_METHOD_ASK:
default:
showDialog(DIALOG_IMPORT);
}
mImportMethod = IMPORT_METHOD_ASK;
}
});
break;
}
}
use of com.ichi2.async.DeckTask.TaskData in project Anki-Android by Ramblurr.
the class DeckTask method doInBackgroundExportApkg.
private TaskData doInBackgroundExportApkg(TaskData... params) {
Log.i(AnkiDroidApp.TAG, "doInBackgroundExportApkg");
Object[] data = params[0].getObjArray();
String colPath = (String) data[0];
String apkgPath = (String) data[1];
boolean includeMedia = (Boolean) data[2];
byte[] buf = new byte[1024];
try {
try {
AnkiDb d = AnkiDatabaseManager.getDatabase(colPath);
} catch (SQLiteDatabaseCorruptException e) {
// collection is invalid
return new TaskData(false);
} finally {
AnkiDatabaseManager.closeDatabase(colPath);
}
// export collection
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(apkgPath));
FileInputStream colFin = new FileInputStream(colPath);
ZipEntry ze = new ZipEntry("collection.anki2");
zos.putNextEntry(ze);
int len;
while ((len = colFin.read(buf)) >= 0) {
zos.write(buf, 0, len);
}
zos.closeEntry();
colFin.close();
// export media
JSONObject media = new JSONObject();
if (includeMedia) {
File mediaDir = new File(AnkiDroidApp.getCurrentAnkiDroidMediaDir());
if (mediaDir.exists() && mediaDir.isDirectory()) {
File[] mediaFiles = mediaDir.listFiles();
int c = 0;
for (File f : mediaFiles) {
FileInputStream mediaFin = new FileInputStream(f);
ze = new ZipEntry(Integer.toString(c));
zos.putNextEntry(ze);
while ((len = mediaFin.read(buf)) >= 0) {
zos.write(buf, 0, len);
}
zos.closeEntry();
media.put(Integer.toString(c), f.getName());
}
}
}
ze = new ZipEntry("media");
zos.putNextEntry(ze);
InputStream mediaIn = new ByteArrayInputStream(Utils.jsonToString(media).getBytes("UTF-8"));
while ((len = mediaIn.read(buf)) >= 0) {
zos.write(buf, 0, len);
}
zos.closeEntry();
zos.close();
} catch (FileNotFoundException e) {
return new TaskData(false);
} catch (IOException e) {
return new TaskData(false);
} catch (JSONException e) {
return new TaskData(false);
}
return new TaskData(true);
}
use of com.ichi2.async.DeckTask.TaskData in project Anki-Android by Ramblurr.
the class DeckTask method doInBackgroundCheckDatabase.
private TaskData doInBackgroundCheckDatabase(TaskData... params) {
Log.i(AnkiDroidApp.TAG, "doInBackgroundCheckDatabase");
Collection col = params[0].getCollection();
long result = col.fixIntegrity();
if (result == -1) {
return new TaskData(false);
} else {
return new TaskData(0, result, true);
}
}
Aggregations