use of com.ichi2.libanki.stats.Stats.ALL_DECKS_ID in project AnkiChinaAndroid by ankichinateam.
the class SchedV2 method deckLimitWithParent.
public static ArrayList<Deck> deckLimitWithParent(Long deckId, Collection col) {
if (deckId == ALL_DECKS_ID) {
return col.getDecks().allSorted();
} else {
// The given deck id and its children
ArrayList<Deck> decks = new ArrayList<>();
ArrayList<Long> ids = new ArrayList<>();
ids.add(deckId);
ids.addAll(col.getDecks().children(deckId).values());
for (Deck parent : col.getDecks().parents(deckId)) {
ids.add(parent.optLong("id"));
}
for (long id : ids) {
decks.add(col.getDecks().get(id));
}
Collections.sort(decks, DeckComparator.instance);
return decks;
}
}
use of com.ichi2.libanki.stats.Stats.ALL_DECKS_ID in project Anki-Android by ankidroid.
the class Stats method deckLimit.
/**
* Note: NOT in libanki
* Return a string of deck ids for the provided deck and its children, suitable for an SQL query
* @param deckId the deck id to filter on, or ALL_DECKS_ID for all decks
* @param col collection
* @return
*/
public static String deckLimit(long deckId, Collection col) {
if (deckId == ALL_DECKS_ID) {
// All decks
List<Deck> decks = col.getDecks().all();
ArrayList<Long> ids = new ArrayList<>(decks.size());
for (Deck d : decks) {
ids.add(d.getLong("id"));
}
return Utils.ids2str(ids);
} else {
// The given deck id and its children
java.util.Collection<Long> values = col.getDecks().children(deckId).values();
ArrayList<Long> ids = new ArrayList<>(values.size());
ids.add(deckId);
ids.addAll(values);
return Utils.ids2str(ids);
}
}
use of com.ichi2.libanki.stats.Stats.ALL_DECKS_ID 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);
}
}
Aggregations