Search in sources :

Example 11 with ALL_DECKS_ID

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;
    }
}
Also used : ArrayList(java.util.ArrayList) Deck(com.ichi2.libanki.Deck)

Example 12 with ALL_DECKS_ID

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);
    }
}
Also used : ArrayList(java.util.ArrayList) Deck(com.ichi2.libanki.Deck)

Example 13 with ALL_DECKS_ID

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);
    }
}
Also used : SharedPreferences(android.content.SharedPreferences) Spinner(android.widget.Spinner) SearchView(androidx.appcompat.widget.SearchView) CardBrowserSearchView(com.ichi2.ui.CardBrowserSearchView) View(android.view.View) AdapterView(android.widget.AdapterView) TextView(android.widget.TextView) ListView(android.widget.ListView) AbsListView(android.widget.AbsListView) Column(com.ichi2.anki.CardBrowser.Column) CheckBox(android.widget.CheckBox) OnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener)

Aggregations

Deck (com.ichi2.libanki.Deck)9 ArrayList (java.util.ArrayList)7 View (android.view.View)4 TextView (android.widget.TextView)4 SharedPreferences (android.content.SharedPreferences)3 AdapterView (android.widget.AdapterView)3 OnItemSelectedListener (android.widget.AdapterView.OnItemSelectedListener)3 CheckBox (android.widget.CheckBox)3 Spinner (android.widget.Spinner)3 Nullable (androidx.annotation.Nullable)3 SearchView (androidx.appcompat.widget.SearchView)3 Column (com.ichi2.anki.CardBrowser.Column)3 AbsListView (android.widget.AbsListView)2 ImageView (android.widget.ImageView)2 ListView (android.widget.ListView)2 ActionBar (androidx.appcompat.app.ActionBar)2 Toolbar (androidx.appcompat.widget.Toolbar)2 DeckDropDownAdapter (com.ichi2.anki.widgets.DeckDropDownAdapter)2 Collection (com.ichi2.libanki.Collection)2 JSONObject (com.ichi2.utils.JSONObject)2