use of com.ichi2.utils.FunctionalInterfaces.Consumer in project AnkiChinaAndroid by ankichinateam.
the class IntentHandler method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
// Note: This is our entry point from the launcher with intent: android.intent.action.MAIN
Timber.d("onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.progress_bar);
Intent intent = getIntent();
Timber.v(intent.toString());
Intent reloadIntent = new Intent(this, DeckPicker.class);
reloadIntent.setDataAndType(getIntent().getData(), getIntent().getType());
String action = intent.getAction();
// #6157 - We want to block actions that need permissions we don't have, but not the default case
// as this requires nothing
Consumer<Runnable> runIfStoragePermissions = (runnable) -> performActionIfStoragePermission(runnable, reloadIntent, action);
LaunchType launchType = getLaunchType(intent);
switch(launchType) {
case FILE_IMPORT:
runIfStoragePermissions.consume(() -> handleFileImport(intent, reloadIntent, action));
break;
case SYNC:
runIfStoragePermissions.consume(() -> handleSyncIntent(reloadIntent, action));
break;
case REVIEW:
runIfStoragePermissions.consume(() -> handleReviewIntent(intent));
break;
case DEFAULT_START_APP_IF_NEW:
Timber.d("onCreate() performing default action");
launchDeckPickerIfNoOtherTasks(reloadIntent);
break;
default:
Timber.w("Unknown launch type: %s. Performing default action", launchType);
launchDeckPickerIfNoOtherTasks(reloadIntent);
}
}
use of com.ichi2.utils.FunctionalInterfaces.Consumer in project Anki-Android by ankidroid.
the class CardBrowser method rescheduleSelectedCards.
private void rescheduleSelectedCards() {
if (!hasSelectedCards()) {
Timber.i("Attempted reschedule - no cards selected");
return;
}
List<Long> selectedCardIds = getSelectedCardIds();
Consumer<Integer> consumer = newDays -> rescheduleWithoutValidation(selectedCardIds, newDays);
RescheduleDialog rescheduleDialog;
if (selectedCardIds.size() == 1) {
long cardId = selectedCardIds.get(0);
Card selected = getCol().getCard(cardId);
rescheduleDialog = RescheduleDialog.rescheduleSingleCard(getResources(), selected, consumer);
} else {
rescheduleDialog = RescheduleDialog.rescheduleMultipleCards(getResources(), consumer, selectedCardIds.size());
}
showDialogFragment(rescheduleDialog);
}
use of com.ichi2.utils.FunctionalInterfaces.Consumer in project Anki-Android by ankidroid.
the class IntentHandler method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
// Note: This is our entry point from the launcher with intent: android.intent.action.MAIN
Timber.d("onCreate()");
super.onCreate(savedInstanceState);
Themes.disableXiaomiForceDarkMode(this);
setContentView(R.layout.progress_bar);
Intent intent = getIntent();
Timber.v(intent.toString());
Intent reloadIntent = new Intent(this, DeckPicker.class);
reloadIntent.setDataAndType(getIntent().getData(), getIntent().getType());
String action = intent.getAction();
// #6157 - We want to block actions that need permissions we don't have, but not the default case
// as this requires nothing
Consumer<Runnable> runIfStoragePermissions = (runnable) -> performActionIfStorageAccessible(runnable, reloadIntent, action);
LaunchType launchType = getLaunchType(intent);
switch(launchType) {
case FILE_IMPORT:
runIfStoragePermissions.accept(() -> handleFileImport(intent, reloadIntent, action));
break;
case SYNC:
runIfStoragePermissions.accept(() -> handleSyncIntent(reloadIntent, action));
break;
case REVIEW:
runIfStoragePermissions.accept(() -> handleReviewIntent(intent));
break;
case DEFAULT_START_APP_IF_NEW:
Timber.d("onCreate() performing default action");
launchDeckPickerIfNoOtherTasks(reloadIntent);
break;
default:
Timber.w("Unknown launch type: %s. Performing default action", launchType);
launchDeckPickerIfNoOtherTasks(reloadIntent);
}
}
use of com.ichi2.utils.FunctionalInterfaces.Consumer in project AnkiChinaAndroid by ankichinateam.
the class SelfStudyActivity method onOptionsItemSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// (when another operation will be performed on the model, it will undo the latest operation)
if (mUndoSnackbar != null && mUndoSnackbar.isShown()) {
mUndoSnackbar.dismiss();
}
switch(item.getItemId()) {
case android.R.id.home:
endMultiSelectMode();
return true;
case R.id.screen:
showScreenDialog();
return true;
case R.id.action_edit:
mCardsAdapter.setMultiCheckable(!mCardsAdapter.isMultiCheckableMode());
return true;
case R.id.action_add_note_from_card_browser:
{
Intent intent = new Intent(SelfStudyActivity.this, NoteEditor.class);
intent.putExtra(NoteEditor.EXTRA_CALLER, NoteEditor.CALLER_CARDBROWSER_ADD);
startActivityForResultWithAnimation(intent, ADD_NOTE, ActivityTransitionAnimation.LEFT);
return true;
}
case R.id.action_save_search:
{
String searchTerms = mSearchView.getQuery().toString();
showDialogFragment(CardBrowserMySearchesDialog.newInstance(null, mMySearchesDialogListener, searchTerms, CardBrowserMySearchesDialog.CARD_BROWSER_MY_SEARCHES_TYPE_SAVE));
return true;
}
case R.id.action_list_my_searches:
{
JSONObject savedFiltersObj = getCol().getConf().optJSONObject("savedFilters");
HashMap<String, String> savedFilters = new HashMap<>();
if (savedFiltersObj != null) {
Iterator<String> it = savedFiltersObj.keys();
while (it.hasNext()) {
String searchName = it.next();
savedFilters.put(searchName, savedFiltersObj.optString(searchName));
}
}
showDialogFragment(CardBrowserMySearchesDialog.newInstance(savedFilters, mMySearchesDialogListener, "", CardBrowserMySearchesDialog.CARD_BROWSER_MY_SEARCHES_TYPE_LIST));
return true;
}
case R.id.action_sort_by_size:
showDialogFragment(CardBrowserOrderDialog.newInstance(mOrder, mOrderAsc, mOrderDialogListener));
return true;
case R.id.action_show_marked:
mSearchTerms = "tag:marked";
mSearchView.setQuery("", false);
mSearchView.setQueryHint(getResources().getString(R.string.card_browser_show_marked));
searchCards();
return true;
case R.id.action_show_suspended:
mSearchTerms = "is:suspended";
mSearchView.setQuery("", false);
mSearchView.setQueryHint(getResources().getString(R.string.card_browser_show_suspended));
searchCards();
return true;
case R.id.action_flag_zero:
flagTask(0);
return true;
case R.id.action_flag_one:
flagTask(1);
return true;
case R.id.action_flag_two:
flagTask(2);
return true;
case R.id.action_flag_three:
flagTask(3);
return true;
case R.id.action_flag_four:
flagTask(4);
return true;
case R.id.action_delete_card:
if (inMultiSelectMode()) {
CollectionTask.launchCollectionTask(DISMISS_MULTI, mDeleteNoteHandler, new TaskData(new Object[] { getSelectedCardIds(), Collection.DismissType.DELETE_NOTE_MULTI }));
mCardsAdapter.getSelectedItemIds().clear();
}
return true;
case R.id.action_mark_card:
CollectionTask.launchCollectionTask(DISMISS_MULTI, markCardHandler(), new TaskData(new Object[] { getSelectedCardIds(), Collection.DismissType.MARK_NOTE_MULTI }));
return true;
case R.id.action_suspend_card:
CollectionTask.launchCollectionTask(DISMISS_MULTI, suspendCardHandler(), new TaskData(new Object[] { getSelectedCardIds(), Collection.DismissType.SUSPEND_CARD_MULTI }));
toggleMultiSelectMode(false);
return true;
case R.id.action_change_deck:
{
AlertDialog.Builder builderSingle = new AlertDialog.Builder(this);
builderSingle.setTitle(getString(R.string.move_all_to_deck));
// WARNING: changeDeck depends on this index, so any changes should be reflected there.
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.dropdown_deck_item);
for (Deck deck : getValidDecksForChangeDeck()) {
try {
arrayAdapter.add(deck.getString("name"));
} catch (JSONException e) {
e.printStackTrace();
}
}
builderSingle.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.dismiss());
builderSingle.setAdapter(arrayAdapter, (dialog, which) -> changeDeck(which));
builderSingle.show();
return true;
}
case R.id.action_undo:
if (getCol().undoAvailable()) {
CollectionTask.launchCollectionTask(UNDO, mUndoHandler);
}
return true;
case R.id.action_preview:
{
mStartStudyButton.performClick();
return true;
}
case R.id.action_reset_cards_progress:
{
Timber.i("NoteEditor:: Reset progress button pressed");
// Show confirmation dialog before resetting card progress
ConfirmationDialog dialog = new ConfirmationDialog();
String title = getString(R.string.reset_card_dialog_title);
String message = getString(R.string.reset_card_dialog_message);
dialog.setArgs(title, message);
Runnable confirm = () -> {
Timber.i("CardBrowser:: ResetProgress button pressed");
CollectionTask.launchCollectionTask(DISMISS_MULTI, resetProgressCardHandler(), new TaskData(new Object[] { getSelectedCardIds(), Collection.DismissType.RESET_CARDS }));
};
dialog.setConfirm(confirm);
showDialogFragment(dialog);
return true;
}
case R.id.action_reschedule_cards:
{
Timber.i("CardBrowser:: Reschedule button pressed");
long[] selectedCardIds = getSelectedCardIds();
FunctionalInterfaces.Consumer<Integer> consumer = newDays -> CollectionTask.launchCollectionTask(DISMISS_MULTI, rescheduleCardHandler(), new TaskData(new Object[] { selectedCardIds, Collection.DismissType.RESCHEDULE_CARDS, newDays }));
RescheduleDialog rescheduleDialog;
if (selectedCardIds.length == 1) {
long cardId = selectedCardIds[0];
Card selected = getCol().getCard(cardId);
rescheduleDialog = RescheduleDialog.rescheduleSingleCard(getResources(), selected, consumer);
} else {
rescheduleDialog = RescheduleDialog.rescheduleMultipleCards(getResources(), consumer, selectedCardIds.length);
}
showDialogFragment(rescheduleDialog);
return true;
}
case R.id.action_reposition_cards:
{
Timber.i("CardBrowser:: Reposition button pressed");
// Only new cards may be repositioned
long[] cardIds = getSelectedCardIds();
for (int i = 0; i < cardIds.length; i++) {
if (getCol().getCard(cardIds[i]).getQueue() != Consts.CARD_TYPE_NEW) {
SimpleMessageDialog dialog = SimpleMessageDialog.newInstance(getString(R.string.vague_error), getString(R.string.reposition_card_not_new_error), false);
showDialogFragment(dialog);
return false;
}
}
IntegerDialog repositionDialog = new IntegerDialog();
repositionDialog.setArgs(getString(R.string.reposition_card_dialog_title), getString(R.string.reposition_card_dialog_message), 5);
repositionDialog.setCallbackRunnable(days -> CollectionTask.launchCollectionTask(DISMISS_MULTI, repositionCardHandler(), new TaskData(new Object[] { cardIds, Collection.DismissType.REPOSITION_CARDS, days })));
showDialogFragment(repositionDialog);
return true;
}
case R.id.action_edit_note:
{
openNoteEditorForCurrentlySelectedNote();
}
default:
return super.onOptionsItemSelected(item);
}
}
use of com.ichi2.utils.FunctionalInterfaces.Consumer in project AnkiChinaAndroid by ankichinateam.
the class Reviewer method showRescheduleCardDialog.
private void showRescheduleCardDialog() {
Consumer<Integer> runnable = days -> CollectionTask.launchCollectionTask(DISMISS_MULTI, mRescheduleCardHandler, new TaskData(new Object[] { new long[] { mCurrentCard.getId() }, Collection.DismissType.RESCHEDULE_CARDS, days }));
RescheduleDialog dialog = RescheduleDialog.rescheduleSingleCard(getResources(), mCurrentCard, runnable);
showDialogFragment(dialog);
}
Aggregations