use of com.ichi2.anki.CardBrowser.Column.QUESTION in project AnkiChinaAndroid by ankichinateam.
the class CardTemplatePreviewer method onCollectionLoaded.
@Override
protected void onCollectionLoaded(Collection col) {
super.onCollectionLoaded(col);
if ((mCurrentCard == null) && (mCardList == null)) {
Timber.d("onCollectionLoaded - incorrect state to load, closing");
closeCardTemplatePreviewer();
return;
}
if (mCardList != null && mOrdinal >= 0 && mOrdinal < mCardList.length) {
mCurrentCard = new PreviewerCard(col, mCardList[mOrdinal]);
}
if (mNoteEditorBundle != null) {
long newDid = mNoteEditorBundle.getLong("did");
if (col.getDecks().isDyn(newDid)) {
mCurrentCard.setODid(mCurrentCard.getDid());
}
mCurrentCard.setDid(newDid);
Note currentNote = mCurrentCard.note();
ArrayList<String> tagsList = mNoteEditorBundle.getStringArrayList("tags");
NoteUtils.setTags(currentNote, tagsList);
Bundle noteFields = mNoteEditorBundle.getBundle("editFields");
if (noteFields != null) {
for (String fieldOrd : noteFields.keySet()) {
// In case the fields on the card are out of sync with the bundle
int fieldOrdInt = Integer.parseInt(fieldOrd);
if (fieldOrdInt < currentNote.getFields().length) {
currentNote.setField(fieldOrdInt, noteFields.getString(fieldOrd));
}
}
}
}
displayCardQuestion();
Timber.i("display card question while showing answer:%s", mShowingAnswer);
if (mShowingAnswer) {
displayCardAnswer();
}
// showBackIcon();
}
use of com.ichi2.anki.CardBrowser.Column.QUESTION in project AnkiChinaAndroid by ankichinateam.
the class CollectionTest method test_furigana.
@Test
@Ignore("Pending port of media search from Rust code")
public void test_furigana() {
Collection col = getCol();
Models mm = col.getModels();
Model m = mm.current();
// filter should work
m.getJSONArray("tmpls").getJSONObject(0).put("qfmt", "{{kana:Front}}");
mm.save(m);
Note n = col.newNote();
n.setItem("Front", "foo[abc]");
col.addNote(n);
Card c = n.cards().get(0);
assertTrue(c.q().endsWith("abc"));
// and should avoid sound
n.setItem("Front", "foo[sound:abc.mp3]");
n.flush();
String question = c.q(true);
assertThat("Question «" + question + "» does not contains «anki:play».", question, containsString("anki:play"));
// it shouldn't throw an error while people are editing
m.getJSONArray("tmpls").getJSONObject(0).put("qfmt", "{{kana:}}");
mm.save(m);
c.q(true);
}
use of com.ichi2.anki.CardBrowser.Column.QUESTION in project AnkiChinaAndroid by ankichinateam.
the class ModelTest method test_cloze_mathjax.
@Test
public void test_cloze_mathjax() {
Collection col = getCol();
col.getModels().setCurrent(col.getModels().byName("Cloze"));
Note note = col.newNote();
note.setItem("Text", "{{c1::ok}} \\(2^2\\) {{c2::not ok}} \\(2^{{c3::2}}\\) \\(x^3\\) {{c4::blah}} {{c5::text with \\(x^2\\) jax}}");
assertNotEquals(0, col.addNote(note));
assertEquals(5, note.numberOfCards());
assertThat(note.cards().get(0).q(), containsString("class=cloze"));
assertThat(note.cards().get(1).q(), containsString("class=cloze"));
assertThat(note.cards().get(2).q(), not(containsString("class=cloze")));
assertThat(note.cards().get(3).q(), containsString("class=cloze"));
assertThat(note.cards().get(4).q(), containsString("class=cloze"));
note = col.newNote();
note.setItem("Text", "\\(a\\) {{c1::b}} \\[ {{c1::c}} \\]");
assertNotEquals(0, col.addNote(note));
assertEquals(1, note.numberOfCards());
String question = note.cards().get(0).q();
assertTrue("Question «" + question + "» does not end correctly", question.endsWith("\\(a\\) <span class=cloze>[...]</span> \\[ [...] \\]"));
}
use of com.ichi2.anki.CardBrowser.Column.QUESTION in project Anki-Android by ankidroid.
the class CardBrowser method onCollectionLoaded.
// Finish initializing the activity after the collection has been correctly loaded
@Override
protected void onCollectionLoaded(Collection col) {
super.onCollectionLoaded(col);
Timber.d("onCollectionLoaded()");
registerExternalStorageListener();
SharedPreferences preferences = AnkiDroidApp.getSharedPrefs(getBaseContext());
// Load reference to action bar title
mActionBarTitle = findViewById(R.id.toolbar_title);
mOrder = CARD_ORDER_NONE;
String colOrder = getCol().get_config_string("sortType");
for (int c = 0; c < fSortTypes.length; ++c) {
if (fSortTypes[c].equals(colOrder)) {
mOrder = c;
break;
}
}
if (mOrder == 1 && preferences.getBoolean("cardBrowserNoSorting", false)) {
mOrder = 0;
}
// This upgrade should already have been done during
// setConf. However older version of AnkiDroid didn't call
// upgradeJSONIfNecessary during setConf, which means the
// conf saved may still have this bug.
mOrderAsc = Upgrade.upgradeJSONIfNecessary(getCol(), "sortBackwards", false);
mCards.reset();
mCardsListView = findViewById(R.id.card_browser_list);
// Create a spinner for column1
Spinner cardsColumn1Spinner = findViewById(R.id.browser_column1_spinner);
ArrayAdapter<CharSequence> column1Adapter = ArrayAdapter.createFromResource(this, R.array.browser_column1_headings, android.R.layout.simple_spinner_item);
column1Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cardsColumn1Spinner.setAdapter(column1Adapter);
mColumn1Index = AnkiDroidApp.getSharedPrefs(getBaseContext()).getInt("cardBrowserColumn1", 0);
cardsColumn1Spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
// If a new column was selected then change the key used to map from mCards to the column TextView
if (pos != mColumn1Index) {
mColumn1Index = pos;
AnkiDroidApp.getSharedPrefs(AnkiDroidApp.getInstance().getBaseContext()).edit().putInt("cardBrowserColumn1", mColumn1Index).apply();
Column[] fromMap = mCardsAdapter.getFromMapping();
fromMap[0] = COLUMN1_KEYS[mColumn1Index];
mCardsAdapter.setFromMapping(fromMap);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Do Nothing
}
});
// Load default value for column2 selection
mColumn2Index = AnkiDroidApp.getSharedPrefs(getBaseContext()).getInt("cardBrowserColumn2", 0);
// Setup the column 2 heading as a spinner so that users can easily change the column type
Spinner cardsColumn2Spinner = findViewById(R.id.browser_column2_spinner);
ArrayAdapter<CharSequence> column2Adapter = ArrayAdapter.createFromResource(this, R.array.browser_column2_headings, android.R.layout.simple_spinner_item);
column2Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cardsColumn2Spinner.setAdapter(column2Adapter);
// Create a new list adapter with updated column map any time the user changes the column
cardsColumn2Spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
// If a new column was selected then change the key used to map from mCards to the column TextView
if (pos != mColumn2Index) {
mColumn2Index = pos;
AnkiDroidApp.getSharedPrefs(AnkiDroidApp.getInstance().getBaseContext()).edit().putInt("cardBrowserColumn2", mColumn2Index).apply();
Column[] fromMap = mCardsAdapter.getFromMapping();
fromMap[1] = COLUMN2_KEYS[mColumn2Index];
mCardsAdapter.setFromMapping(fromMap);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Do Nothing
}
});
// get the font and font size from the preferences
int sflRelativeFontSize = preferences.getInt("relativeCardBrowserFontSize", DEFAULT_FONT_SIZE_RATIO);
String sflCustomFont = preferences.getString("browserEditorFont", "");
Column[] columnsContent = { COLUMN1_KEYS[mColumn1Index], COLUMN2_KEYS[mColumn2Index] };
// make a new list adapter mapping the data in mCards to column1 and column2 of R.layout.card_item_browser
mCardsAdapter = new MultiColumnListAdapter(this, R.layout.card_item_browser, columnsContent, new int[] { R.id.card_sfld, R.id.card_column2 }, sflRelativeFontSize, sflCustomFont);
// link the adapter to the main mCardsListView
mCardsListView.setAdapter(mCardsAdapter);
// make the items (e.g. question & answer) render dynamically when scrolling
mCardsListView.setOnScrollListener(new RenderOnScroll());
// set the spinner index
cardsColumn1Spinner.setSelection(mColumn1Index);
cardsColumn2Spinner.setSelection(mColumn2Index);
mCardsListView.setOnItemClickListener((parent, view, position, id) -> {
if (mInMultiSelectMode) {
// click on whole cell triggers select
CheckBox cb = view.findViewById(R.id.card_checkbox);
cb.toggle();
onCheck(position, view);
} else {
// load up the card selected on the list
long clickedCardId = getCards().get(position).getId();
saveScrollingState(position);
openNoteEditorForCard(clickedCardId);
}
});
mCardsListView.setOnItemLongClickListener((adapterView, view, position, id) -> {
if (mInMultiSelectMode) {
boolean hasChanged = false;
for (int i = Math.min(mLastSelectedPosition, position); i <= Math.max(mLastSelectedPosition, position); i++) {
CardCache card = (CardCache) mCardsListView.getItemAtPosition(i);
// Add to the set of checked cards
hasChanged |= mCheckedCards.add(card);
}
if (hasChanged) {
onSelectionChanged();
}
} else {
mLastSelectedPosition = position;
saveScrollingState(position);
loadMultiSelectMode();
// click on whole cell triggers select
CheckBox cb = view.findViewById(R.id.card_checkbox);
cb.toggle();
onCheck(position, view);
recenterListView(view);
mCardsAdapter.notifyDataSetChanged();
}
return true;
});
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
long deckId = getCol().getDecks().selected();
mDeckSpinnerSelection = new DeckSpinnerSelection(this, col, this.findViewById(R.id.toolbar_spinner), true, false);
mDeckSpinnerSelection.initializeActionBarDeckSpinner(this.getSupportActionBar());
selectDeckAndSave(deckId);
// If a valid value for last deck exists then use it, otherwise use libanki selected deck
if (getLastDeckId() != null && getLastDeckId() == ALL_DECKS_ID) {
selectAllDecks();
} else if (getLastDeckId() != null && getCol().getDecks().get(getLastDeckId(), false) != null) {
mDeckSpinnerSelection.selectDeckById(getLastDeckId(), false);
} else {
mDeckSpinnerSelection.selectDeckById(getCol().getDecks().selected(), false);
}
}
use of com.ichi2.anki.CardBrowser.Column.QUESTION in project Anki-Android by ankidroid.
the class ModelTest method test_cloze_mathjax.
@Test
public void test_cloze_mathjax() {
Collection col = getCol();
col.getModels().setCurrent(col.getModels().byName("Cloze"));
Note note = col.newNote();
note.setItem("Text", "{{c1::ok}} \\(2^2\\) {{c2::not ok}} \\(2^{{c3::2}}\\) \\(x^3\\) {{c4::blah}} {{c5::text with \\(x^2\\) jax}}");
assertNotEquals(0, col.addNote(note));
assertEquals(5, note.numberOfCards());
assertThat(note.cards().get(0).q(), containsString("class=cloze"));
assertThat(note.cards().get(1).q(), containsString("class=cloze"));
assertThat(note.cards().get(2).q(), not(containsString("class=cloze")));
assertThat(note.cards().get(3).q(), containsString("class=cloze"));
assertThat(note.cards().get(4).q(), containsString("class=cloze"));
note = col.newNote();
note.setItem("Text", "\\(a\\) {{c1::b}} \\[ {{c1::c}} \\]");
assertNotEquals(0, col.addNote(note));
assertEquals(1, note.numberOfCards());
String question = note.cards().get(0).q();
assertTrue("Question «" + question + "» does not end correctly", question.endsWith("\\(a\\) <span class=cloze>[...]</span> \\[ [...] \\]"));
}
Aggregations