Skip to content

Commit

Permalink
Merge pull request nicolas-raoul#117 from hssm/burying
Browse files Browse the repository at this point in the history
Burying: UI changes, catch up to new commits, and some fixes
  • Loading branch information
flerda committed Nov 3, 2013
2 parents 4d2243f + 0d9cdd8 commit 40c706a
Show file tree
Hide file tree
Showing 11 changed files with 82 additions and 58 deletions.
12 changes: 6 additions & 6 deletions res/layout/studyoptions_congrats.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center"
android:id="@+id/studyoptions_congrats_open_other_deck"
android:text="@string/studyoptions_congrats_open_other_deck" />
android:id="@+id/studyoptions_congrats_unbury"
android:text="@string/unbury" />
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center"
android:id="@+id/studyoptions_congrats_customstudy"
android:text="@string/studyoptions_congrats_custom_study" />
android:id="@+id/studyoptions_congrats_open_other_deck"
android:text="@string/studyoptions_congrats_open_other_deck" />
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center"
android:id="@+id/studyoptions_congrats_finish"
android:text="@string/studyoptions_congrats_finish" />
android:id="@+id/studyoptions_congrats_customstudy"
android:text="@string/studyoptions_congrats_custom_study" />
</LinearLayout>
4 changes: 3 additions & 1 deletion res/values/01-core.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@
<string name="ease3_learning">Easy</string>

<string name="studyoptions_congrats_undo">Undo %s</string>
<string name="studyoptions_congrats_unbury">Unbury</string>
<string name="studyoptions_congrats_custom_study">Custom Study</string>
<string name="studyoptions_congrats_open_other_deck">Open Other Deck</string>
<string name="studyoptions_congrats_finish">Back to Study Screen</string>

<string name="card_unsuspended">Card suspension undone</string>
<string name="card_suspended">Card resuspended</string>
Expand All @@ -82,6 +82,7 @@
<string name="undo_action_suspend_note">suspend note</string>
<string name="undo_action_delete">delete note</string>
<string name="undo_action_mark">mark note</string>
<string name="unbury">Unbury</string>

<string name="finish_operation">Finishing previous operation (most likely backup creation).\nPlease wait...</string>

Expand All @@ -103,6 +104,7 @@
<string name="menu_about">About</string>

<string name="menu_dismiss_note">Dismiss Note...</string>
<string name="menu_bury_card">Bury Card</string>
<string name="menu_bury_note">Bury Note</string>
<string name="menu_suspend_card">Suspend Card</string>
<string name="menu_suspend_note">Suspend Note</string>
Expand Down
8 changes: 4 additions & 4 deletions res/values/10-preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -270,12 +270,12 @@
<string name="deck_conf_days">XXX day(s)</string>
<string name="deck_conf_easy_ivl">Easy interval</string>
<string name="deck_conf_start_ease">Starting ease</string>
<string name="deck_conf_separate">Siblings</string>
<string name="deck_conf_separate_summ">Try not to show sibling cards next to each other</string>
<string name="deck_conf_max_rev">Maximum reviews/day</string>
<string name="deck_conf_sibl_space">Space siblings by up to</string>
<string name="deck_conf_new_bury">Bury related new cards</string>
<string name="deck_conf_new_bury_summ">Related new cards are buried until the next day</string>
<string name="deck_conf_rev_bury">Bury related reviews</string>
<string name="deck_conf_rev_bury_summ">Related reviews are buried until the next day</string>
<string name="deck_conf_easy_bonus">Easy bonus</string>
<string name="deck_conf_min_range">Minimum sibling range</string>
<string name="deck_conf_ivl_fct">Interval modifier</string>
<string name="deck_conf_max_ivl">Maximum interval</string>
<string name="deck_conf_new_lps_ivl">New interval</string>
Expand Down
23 changes: 8 additions & 15 deletions res/xml/deck_options.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,28 +62,16 @@
app:min="100" />
<CheckBoxPreference
android:defaultValue="true"
android:key="newSeparate"
android:summary="@string/deck_conf_separate_summ"
android:title="@string/deck_conf_separate" />
android:key="newBury"
android:summary="@string/deck_conf_new_bury_summ"
android:title="@string/deck_conf_new_bury" />
</PreferenceScreen>
<PreferenceScreen android:title="@string/deck_conf_rev_cards" >
<com.ichi2.preferences.NumberRangePreference
android:key="revPerDay"
android:title="@string/deck_conf_max_rev"
app:max="9999"
app:min="0" />
<com.ichi2.preferences.NumberRangePreference
android:key="revSpaceMax"
android:summary="@string/deck_conf_percent"
android:title="@string/deck_conf_sibl_space"
app:max="100"
app:min="0" />
<com.ichi2.preferences.NumberRangePreference
android:key="revSpaceMin"
android:summary="@string/deck_conf_days"
android:title="@string/deck_conf_min_range"
app:max="99"
app:min="0" />
<com.ichi2.preferences.NumberRangePreference
android:key="easyBonus"
android:summary="@string/deck_conf_percent"
Expand All @@ -102,6 +90,11 @@
android:title="@string/deck_conf_max_ivl"
app:max="99999"
app:min="1" />
<CheckBoxPreference
android:defaultValue="true"
android:key="revBury"
android:summary="@string/deck_conf_rev_bury_summ"
android:title="@string/deck_conf_rev_bury" />
</PreferenceScreen>
<PreferenceScreen android:title="@string/deck_conf_lps_cards" >
<com.ichi2.preferences.StepsPreference
Expand Down
15 changes: 6 additions & 9 deletions src/com/ichi2/anki/DeckOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,14 @@ protected void cacheValues() {
mValues.put("newFactor", Integer.toString(newOptions.getInt("initialFactor") / 10));
mValues.put("newOrder", newOptions.getString("order"));
mValues.put("newPerDay", newOptions.getString("perDay"));
mValues.put("newSeparate", Boolean.toString(newOptions.getBoolean("separate")));
mValues.put("newBury", Boolean.toString(newOptions.optBoolean("bury", true)));
// rev
JSONObject revOptions = mOptions.getJSONObject("rev");
mValues.put("revPerDay", revOptions.getString("perDay"));
mValues.put("revSpaceMax", Integer.toString((int) (revOptions.getDouble("fuzz") * 100)));
mValues.put("revSpaceMin", revOptions.getString("minSpace"));
mValues.put("easyBonus", Integer.toString((int) (revOptions.getDouble("ease4") * 100)));
mValues.put("revIvlFct", Integer.toString((int) (revOptions.getDouble("ivlFct") * 100)));
mValues.put("revMaxIvl", revOptions.getString("maxIvl"));
mValues.put("revBury", Boolean.toString(revOptions.optBoolean("bury", true)));
// lapse
JSONObject lapOptions = mOptions.getJSONObject("lapse");
mValues.put("lapSteps", StepsPreference.convertFromJSON(lapOptions.getJSONArray("delays")));
Expand Down Expand Up @@ -173,18 +172,18 @@ public boolean commit() {
ja.put(mOptions.getJSONObject("new").getJSONArray("ints").get(0));
ja.put((Integer) value);
mOptions.getJSONObject("new").put("ints", ja);
} else if (key.equals("newBury")) {
mOptions.getJSONObject("new").put("bury", (Boolean) value);
} else if (key.equals("revPerDay")) {
mOptions.getJSONObject("rev").put("perDay", (Integer) value);
} else if (key.equals("revSpaceMax")) {
mOptions.getJSONObject("rev").put("fuzz", (Integer) value / 100.0f);
} else if (key.equals("revSpaceMin")) {
mOptions.getJSONObject("rev").put("minSpace", (Integer) value);
} else if (key.equals("easyBonus")) {
mOptions.getJSONObject("rev").put("ease4", (Integer) value / 100.0f);
} else if (key.equals("revIvlFct")) {
mOptions.getJSONObject("rev").put("ivlFct", (Integer) value / 100.0f);
} else if (key.equals("revMaxIvl")) {
mOptions.getJSONObject("rev").put("maxIvl", (Integer) value);
} else if (key.equals("revBury")) {
mOptions.getJSONObject("rev").put("bury", (Boolean) value);
} else if (key.equals("lapMinIvl")) {
mOptions.getJSONObject("lapse").put("minInt", (Integer) value);
} else if (key.equals("lapLeechThres")) {
Expand All @@ -199,8 +198,6 @@ public boolean commit() {
mOptions.put("autoplay", (Boolean) value);
} else if (key.equals("replayQuestion")) {
mOptions.put("replayq", (Boolean) value);
} else if (key.equals("newSeparate")) {
mOptions.getJSONObject("new").put("separate", (Boolean) value);
} else if (key.equals("name")) {
if (!mCol.getDecks().rename(mDeck, (String) value)) {
Themes.showThemedToast(DeckOptions.this,
Expand Down
16 changes: 12 additions & 4 deletions src/com/ichi2/anki/Reviewer.java
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,8 @@ public class Reviewer extends AnkiActivity {
private static final int MENU_CLEAR_WHITEBOARD = 1;
private static final int MENU_EDIT = 2;
private static final int MENU_REMOVE = 3;
private static final int MENU_REMOVE_BURY = 31;
private static final int MENU_REMOVE_BURY_CARD = 30;
private static final int MENU_REMOVE_BURY_NOTE = 31;
private static final int MENU_REMOVE_SUSPEND_CARD = 32;
private static final int MENU_REMOVE_SUSPEND_NOTE = 33;
private static final int MENU_REMOVE_DELETE = 34;
Expand Down Expand Up @@ -1228,7 +1229,8 @@ public boolean onCreateOptionsMenu(Menu menu) {

SubMenu removeDeckSubMenu = menu.addSubMenu(Menu.NONE, MENU_REMOVE, Menu.NONE, R.string.menu_dismiss_note);
removeDeckSubMenu.setIcon(R.drawable.ic_menu_stop);
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_BURY, Menu.NONE, R.string.menu_bury_note);
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_BURY_CARD, Menu.NONE, R.string.menu_bury_card);
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_BURY_NOTE, Menu.NONE, R.string.menu_bury_note);
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_SUSPEND_CARD, Menu.NONE, R.string.menu_suspend_card);
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_SUSPEND_NOTE, Menu.NONE, R.string.menu_suspend_note);
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_DELETE, Menu.NONE, R.string.menu_delete_note);
Expand Down Expand Up @@ -1403,8 +1405,14 @@ public boolean onOptionsItemSelected(MenuItem item) {

case MENU_EDIT:
return editCard();

case MENU_REMOVE_BURY:

case MENU_REMOVE_BURY_CARD:
setNextCardAnimation(false);
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_DISMISS_NOTE, mDismissCardHandler, new DeckTask.TaskData(
mSched, mCurrentCard, 4));
return true;

case MENU_REMOVE_BURY_NOTE:
setNextCardAnimation(false);
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_DISMISS_NOTE, mDismissCardHandler, new DeckTask.TaskData(
mSched, mCurrentCard, 0));
Expand Down
22 changes: 13 additions & 9 deletions src/com/ichi2/anki/StudyOptionsFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,8 @@ public class StudyOptionsFragment extends Fragment {
// private View mReviewEarlyView;
private TextView mTextCongratsMessage;
private Button mButtonCongratsUndo;
private Button mButtonCongratsUnbury;
private Button mButtonCongratsOpenOtherDeck;
private Button mButtonCongratsFinish;
private Button mButtonCongratsCustomStudy;

private View mCustomStudyDetailsView;
Expand Down Expand Up @@ -233,16 +233,17 @@ public void onClick(View v) {
finishCongrats();
}
return;
case R.id.studyoptions_congrats_unbury:
col.getSched().unburyCards();
resetAndUpdateValuesFromDeck();
finishCongrats();
return;
case R.id.studyoptions_congrats_open_other_deck:
closeStudyOptions();
return;
case R.id.studyoptions_congrats_customstudy:
showDialog(DIALOG_CUSTOM_STUDY);
return;
case R.id.studyoptions_congrats_finish:
updateValuesFromDeck();
finishCongrats();
return;
case R.id.studyoptions_card_browser:
openCardBrowser();
return;
Expand Down Expand Up @@ -413,7 +414,6 @@ public boolean onTouch(View v, MotionEvent event) {

if (getArguments().getBoolean("onlyFnsMsg")) {
prepareCongratsView();
mButtonCongratsFinish.setVisibility(View.GONE);
return mCongratsView;
} else {
// clear undo if new deck is opened (do not clear if only congrats msg is shown)
Expand Down Expand Up @@ -675,17 +675,18 @@ private void initAllContentViews(LayoutInflater inflater) {

mTextCongratsMessage.setOnClickListener(mButtonClickListener);
mButtonCongratsUndo = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_undo);
mButtonCongratsUnbury = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_unbury);
mButtonCongratsCustomStudy = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_customstudy);
mButtonCongratsOpenOtherDeck = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_open_other_deck);
if (mFragmented) {
mButtonCongratsOpenOtherDeck.setVisibility(View.GONE);
}
mButtonCongratsFinish = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_finish);


mButtonCongratsUndo.setOnClickListener(mButtonClickListener);
mButtonCongratsUnbury.setOnClickListener(mButtonClickListener);
mButtonCongratsCustomStudy.setOnClickListener(mButtonClickListener);
mButtonCongratsOpenOtherDeck.setOnClickListener(mButtonClickListener);
mButtonCongratsFinish.setOnClickListener(mButtonClickListener);
}


Expand Down Expand Up @@ -1141,6 +1142,9 @@ private void prepareCongratsView() {
mButtonCongratsUndo.setText(res.getString(R.string.studyoptions_congrats_undo,
AnkiDroidApp.getCol().undoName(res)));
}
if (AnkiDroidApp.colIsOpen() && !AnkiDroidApp.getCol().getSched().haveBuried()) {
mButtonCongratsUnbury.setVisibility(View.GONE);
}
mTextCongratsMessage.setText(AnkiDroidApp.getCol().getSched().finishedMsg(getActivity()));
// Filtered decks must not have a custom study button
try {
Expand Down
8 changes: 8 additions & 0 deletions src/com/ichi2/async/DeckTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -558,6 +558,14 @@ private TaskData doInBackgroundDismissNote(TaskData... params) {
col.getDb().getDatabase().beginTransaction();
try {
switch (type) {
case 4:
// collect undo information
col.markUndo(Collection.UNDO_BURY_CARD,
new Object[] { col.getDirty(), note.cards(), card.getId() });
// then bury
sched.buryCards(new long[]{ card.getId() });
sHadCardQueue = true;
break;
case 0:
// collect undo information
col.markUndo(Collection.UNDO_BURY_NOTE,
Expand Down
5 changes: 5 additions & 0 deletions src/com/ichi2/libanki/Collection.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ public class Collection {
public static final int UNDO_SUSPEND_NOTE = 4;
public static final int UNDO_DELETE_NOTE = 5;
public static final int UNDO_MARK_NOTE = 6;
public static final int UNDO_BURY_CARD = 7;

private static final int[] fUndoNames = new int[]{
R.string.undo_action_review,
R.string.undo_action_edit,
Expand Down Expand Up @@ -1261,6 +1263,9 @@ public void markUndo(int type, Object[] o) {
case UNDO_EDIT_NOTE:
mUndo.add(new Object[]{type, ((Note)o[0]).clone(), o[1], o[2]});
break;
case UNDO_BURY_CARD:
mUndo.add(new Object[]{type, o[0], o[1], o[2]});
break;
case UNDO_BURY_NOTE:
mUndo.add(new Object[]{type, o[0], o[1], o[2]});
break;
Expand Down
4 changes: 3 additions & 1 deletion src/com/ichi2/libanki/Finder.java
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,9 @@ private String _findCardState(String val) {
}
return "type = " + n;
} else if (val.equals("suspended")) {
return "c.queue in (-1, -2)";
return "c.queue = -1";
} else if (val.equals("buried")) {
return "c.queue = -2";
} else if (val.equals("due")) {
return "(c.queue in (2,3) and c.due <= " + mCol.getSched().getToday() +
") or (c.queue = 1 and c.due <= " + mCol.getSched().getDayCutoff() + ")";
Expand Down
23 changes: 14 additions & 9 deletions src/com/ichi2/libanki/Sched.java
Original file line number Diff line number Diff line change
Expand Up @@ -1595,7 +1595,7 @@ private List<Long> _fillDyn(JSONObject deck) {
int limit = terms.getInt(1);
int order = terms.getInt(2);
String orderlimit = _dynOrder(order, limit);
search += " -is:suspended -deck:filtered";
search += " -is:suspended -is:buried -deck:filtered";
ids = mCol.findCards(search, orderlimit);
if (ids.isEmpty()) {
return ids;
Expand Down Expand Up @@ -1976,10 +1976,10 @@ public boolean newDue() {
}


private boolean haveBuried() {
public boolean haveBuried() {
String sdids = Utils.ids2str(mCol.getDecks().active());
int cnt = mCol.getDb().queryScalar(String.format(Locale.US,
"select 1 from cards where queue = -2 and did in %s limit 1", sdids));
"select 1 from cards where queue = -2 and did in %s limit 1", sdids), false);
return cnt == 0 ? false : true;
}

Expand Down Expand Up @@ -2096,18 +2096,23 @@ public void unsuspendCards(long[] ids) {
"UPDATE cards SET queue = type, mod = " + Utils.intNow() + ", usn = " + mCol.usn()
+ " WHERE queue = -1 AND id IN " + Utils.ids2str(ids));
}




public void buryCards(long[] cids) {
removeLrn(cids);
mCol.getDb().execute("update cards set queue=-2,mod=?,usn=? where id in " + Utils.ids2str(cids),
new Object[]{Utils.now(), mCol.usn()});
}


/**
* Bury all cards for note until next session.
* @param nid The id of the targetted note.
*/
public void buryNote(long nid) {
long[] cids = Utils.arrayList2array(mCol.getDb().queryColumn(Long.class,
"SELECT id FROM cards WHERE nid = " + nid + " AND queue >= 0", 0));
removeLrn(cids);
mCol.getDb().execute("update cards set queue=-2,mod=?,usn=? where id in " + Utils.ids2str(cids),
new Object[]{Utils.now(), mCol.usn()});
buryCards(cids);
}

/**
Expand Down Expand Up @@ -2161,7 +2166,7 @@ private void _burySiblings(Card card) {

/** Put cards at the end of the new queue. */
public void forgetCards(long[] ids) {
mCol.getDb().execute("update cards set type=0,queue=0,ivl=0,due=0,factor=? where odid=0 "+
mCol.getDb().execute("update cards set type=0,queue=0,ivl=0,due=0,factor=2500 where odid=0 "+
"and queue >= 0 and id in " + Utils.ids2str(ids));
int pmax = mCol.getDb().queryScalar("SELECT max(due) FROM cards WHERE type=0", false);
// takes care of mod + usn
Expand Down

0 comments on commit 40c706a

Please sign in to comment.