Skip to content

Commit 40c706a

Browse files
committed
Merge pull request nicolas-raoul#117 from hssm/burying
Burying: UI changes, catch up to new commits, and some fixes
2 parents 4d2243f + 0d9cdd8 commit 40c706a

11 files changed

+82
-58
lines changed

res/layout/studyoptions_congrats.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@
2020
android:layout_height="wrap_content"
2121
android:layout_width="fill_parent"
2222
android:gravity="center"
23-
android:id="@+id/studyoptions_congrats_open_other_deck"
24-
android:text="@string/studyoptions_congrats_open_other_deck" />
23+
android:id="@+id/studyoptions_congrats_unbury"
24+
android:text="@string/unbury" />
2525
<Button
2626
android:layout_height="wrap_content"
2727
android:layout_width="fill_parent"
2828
android:gravity="center"
29-
android:id="@+id/studyoptions_congrats_customstudy"
30-
android:text="@string/studyoptions_congrats_custom_study" />
29+
android:id="@+id/studyoptions_congrats_open_other_deck"
30+
android:text="@string/studyoptions_congrats_open_other_deck" />
3131
<Button
3232
android:layout_height="wrap_content"
3333
android:layout_width="fill_parent"
3434
android:gravity="center"
35-
android:id="@+id/studyoptions_congrats_finish"
36-
android:text="@string/studyoptions_congrats_finish" />
35+
android:id="@+id/studyoptions_congrats_customstudy"
36+
android:text="@string/studyoptions_congrats_custom_study" />
3737
</LinearLayout>

res/values/01-core.xml

+3-1
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@
6565
<string name="ease3_learning">Easy</string>
6666

6767
<string name="studyoptions_congrats_undo">Undo %s</string>
68+
<string name="studyoptions_congrats_unbury">Unbury</string>
6869
<string name="studyoptions_congrats_custom_study">Custom Study</string>
6970
<string name="studyoptions_congrats_open_other_deck">Open Other Deck</string>
70-
<string name="studyoptions_congrats_finish">Back to Study Screen</string>
7171

7272
<string name="card_unsuspended">Card suspension undone</string>
7373
<string name="card_suspended">Card resuspended</string>
@@ -82,6 +82,7 @@
8282
<string name="undo_action_suspend_note">suspend note</string>
8383
<string name="undo_action_delete">delete note</string>
8484
<string name="undo_action_mark">mark note</string>
85+
<string name="unbury">Unbury</string>
8586

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

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

105106
<string name="menu_dismiss_note">Dismiss Note...</string>
107+
<string name="menu_bury_card">Bury Card</string>
106108
<string name="menu_bury_note">Bury Note</string>
107109
<string name="menu_suspend_card">Suspend Card</string>
108110
<string name="menu_suspend_note">Suspend Note</string>

res/values/10-preferences.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -270,12 +270,12 @@
270270
<string name="deck_conf_days">XXX day(s)</string>
271271
<string name="deck_conf_easy_ivl">Easy interval</string>
272272
<string name="deck_conf_start_ease">Starting ease</string>
273-
<string name="deck_conf_separate">Siblings</string>
274-
<string name="deck_conf_separate_summ">Try not to show sibling cards next to each other</string>
275273
<string name="deck_conf_max_rev">Maximum reviews/day</string>
276-
<string name="deck_conf_sibl_space">Space siblings by up to</string>
274+
<string name="deck_conf_new_bury">Bury related new cards</string>
275+
<string name="deck_conf_new_bury_summ">Related new cards are buried until the next day</string>
276+
<string name="deck_conf_rev_bury">Bury related reviews</string>
277+
<string name="deck_conf_rev_bury_summ">Related reviews are buried until the next day</string>
277278
<string name="deck_conf_easy_bonus">Easy bonus</string>
278-
<string name="deck_conf_min_range">Minimum sibling range</string>
279279
<string name="deck_conf_ivl_fct">Interval modifier</string>
280280
<string name="deck_conf_max_ivl">Maximum interval</string>
281281
<string name="deck_conf_new_lps_ivl">New interval</string>

res/xml/deck_options.xml

+8-15
Original file line numberDiff line numberDiff line change
@@ -62,28 +62,16 @@
6262
app:min="100" />
6363
<CheckBoxPreference
6464
android:defaultValue="true"
65-
android:key="newSeparate"
66-
android:summary="@string/deck_conf_separate_summ"
67-
android:title="@string/deck_conf_separate" />
65+
android:key="newBury"
66+
android:summary="@string/deck_conf_new_bury_summ"
67+
android:title="@string/deck_conf_new_bury" />
6868
</PreferenceScreen>
6969
<PreferenceScreen android:title="@string/deck_conf_rev_cards" >
7070
<com.ichi2.preferences.NumberRangePreference
7171
android:key="revPerDay"
7272
android:title="@string/deck_conf_max_rev"
7373
app:max="9999"
7474
app:min="0" />
75-
<com.ichi2.preferences.NumberRangePreference
76-
android:key="revSpaceMax"
77-
android:summary="@string/deck_conf_percent"
78-
android:title="@string/deck_conf_sibl_space"
79-
app:max="100"
80-
app:min="0" />
81-
<com.ichi2.preferences.NumberRangePreference
82-
android:key="revSpaceMin"
83-
android:summary="@string/deck_conf_days"
84-
android:title="@string/deck_conf_min_range"
85-
app:max="99"
86-
app:min="0" />
8775
<com.ichi2.preferences.NumberRangePreference
8876
android:key="easyBonus"
8977
android:summary="@string/deck_conf_percent"
@@ -102,6 +90,11 @@
10290
android:title="@string/deck_conf_max_ivl"
10391
app:max="99999"
10492
app:min="1" />
93+
<CheckBoxPreference
94+
android:defaultValue="true"
95+
android:key="revBury"
96+
android:summary="@string/deck_conf_rev_bury_summ"
97+
android:title="@string/deck_conf_rev_bury" />
10598
</PreferenceScreen>
10699
<PreferenceScreen android:title="@string/deck_conf_lps_cards" >
107100
<com.ichi2.preferences.StepsPreference

src/com/ichi2/anki/DeckOptions.java

+6-9
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,14 @@ protected void cacheValues() {
101101
mValues.put("newFactor", Integer.toString(newOptions.getInt("initialFactor") / 10));
102102
mValues.put("newOrder", newOptions.getString("order"));
103103
mValues.put("newPerDay", newOptions.getString("perDay"));
104-
mValues.put("newSeparate", Boolean.toString(newOptions.getBoolean("separate")));
104+
mValues.put("newBury", Boolean.toString(newOptions.optBoolean("bury", true)));
105105
// rev
106106
JSONObject revOptions = mOptions.getJSONObject("rev");
107107
mValues.put("revPerDay", revOptions.getString("perDay"));
108-
mValues.put("revSpaceMax", Integer.toString((int) (revOptions.getDouble("fuzz") * 100)));
109-
mValues.put("revSpaceMin", revOptions.getString("minSpace"));
110108
mValues.put("easyBonus", Integer.toString((int) (revOptions.getDouble("ease4") * 100)));
111109
mValues.put("revIvlFct", Integer.toString((int) (revOptions.getDouble("ivlFct") * 100)));
112110
mValues.put("revMaxIvl", revOptions.getString("maxIvl"));
111+
mValues.put("revBury", Boolean.toString(revOptions.optBoolean("bury", true)));
113112
// lapse
114113
JSONObject lapOptions = mOptions.getJSONObject("lapse");
115114
mValues.put("lapSteps", StepsPreference.convertFromJSON(lapOptions.getJSONArray("delays")));
@@ -173,18 +172,18 @@ public boolean commit() {
173172
ja.put(mOptions.getJSONObject("new").getJSONArray("ints").get(0));
174173
ja.put((Integer) value);
175174
mOptions.getJSONObject("new").put("ints", ja);
175+
} else if (key.equals("newBury")) {
176+
mOptions.getJSONObject("new").put("bury", (Boolean) value);
176177
} else if (key.equals("revPerDay")) {
177178
mOptions.getJSONObject("rev").put("perDay", (Integer) value);
178-
} else if (key.equals("revSpaceMax")) {
179-
mOptions.getJSONObject("rev").put("fuzz", (Integer) value / 100.0f);
180-
} else if (key.equals("revSpaceMin")) {
181-
mOptions.getJSONObject("rev").put("minSpace", (Integer) value);
182179
} else if (key.equals("easyBonus")) {
183180
mOptions.getJSONObject("rev").put("ease4", (Integer) value / 100.0f);
184181
} else if (key.equals("revIvlFct")) {
185182
mOptions.getJSONObject("rev").put("ivlFct", (Integer) value / 100.0f);
186183
} else if (key.equals("revMaxIvl")) {
187184
mOptions.getJSONObject("rev").put("maxIvl", (Integer) value);
185+
} else if (key.equals("revBury")) {
186+
mOptions.getJSONObject("rev").put("bury", (Boolean) value);
188187
} else if (key.equals("lapMinIvl")) {
189188
mOptions.getJSONObject("lapse").put("minInt", (Integer) value);
190189
} else if (key.equals("lapLeechThres")) {
@@ -199,8 +198,6 @@ public boolean commit() {
199198
mOptions.put("autoplay", (Boolean) value);
200199
} else if (key.equals("replayQuestion")) {
201200
mOptions.put("replayq", (Boolean) value);
202-
} else if (key.equals("newSeparate")) {
203-
mOptions.getJSONObject("new").put("separate", (Boolean) value);
204201
} else if (key.equals("name")) {
205202
if (!mCol.getDecks().rename(mDeck, (String) value)) {
206203
Themes.showThemedToast(DeckOptions.this,

src/com/ichi2/anki/Reviewer.java

+12-4
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ public class Reviewer extends AnkiActivity {
165165
private static final int MENU_CLEAR_WHITEBOARD = 1;
166166
private static final int MENU_EDIT = 2;
167167
private static final int MENU_REMOVE = 3;
168-
private static final int MENU_REMOVE_BURY = 31;
168+
private static final int MENU_REMOVE_BURY_CARD = 30;
169+
private static final int MENU_REMOVE_BURY_NOTE = 31;
169170
private static final int MENU_REMOVE_SUSPEND_CARD = 32;
170171
private static final int MENU_REMOVE_SUSPEND_NOTE = 33;
171172
private static final int MENU_REMOVE_DELETE = 34;
@@ -1228,7 +1229,8 @@ public boolean onCreateOptionsMenu(Menu menu) {
12281229

12291230
SubMenu removeDeckSubMenu = menu.addSubMenu(Menu.NONE, MENU_REMOVE, Menu.NONE, R.string.menu_dismiss_note);
12301231
removeDeckSubMenu.setIcon(R.drawable.ic_menu_stop);
1231-
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_BURY, Menu.NONE, R.string.menu_bury_note);
1232+
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_BURY_CARD, Menu.NONE, R.string.menu_bury_card);
1233+
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_BURY_NOTE, Menu.NONE, R.string.menu_bury_note);
12321234
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_SUSPEND_CARD, Menu.NONE, R.string.menu_suspend_card);
12331235
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_SUSPEND_NOTE, Menu.NONE, R.string.menu_suspend_note);
12341236
removeDeckSubMenu.add(Menu.NONE, MENU_REMOVE_DELETE, Menu.NONE, R.string.menu_delete_note);
@@ -1403,8 +1405,14 @@ public boolean onOptionsItemSelected(MenuItem item) {
14031405

14041406
case MENU_EDIT:
14051407
return editCard();
1406-
1407-
case MENU_REMOVE_BURY:
1408+
1409+
case MENU_REMOVE_BURY_CARD:
1410+
setNextCardAnimation(false);
1411+
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_DISMISS_NOTE, mDismissCardHandler, new DeckTask.TaskData(
1412+
mSched, mCurrentCard, 4));
1413+
return true;
1414+
1415+
case MENU_REMOVE_BURY_NOTE:
14081416
setNextCardAnimation(false);
14091417
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_DISMISS_NOTE, mDismissCardHandler, new DeckTask.TaskData(
14101418
mSched, mCurrentCard, 0));

src/com/ichi2/anki/StudyOptionsFragment.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ public class StudyOptionsFragment extends Fragment {
157157
// private View mReviewEarlyView;
158158
private TextView mTextCongratsMessage;
159159
private Button mButtonCongratsUndo;
160+
private Button mButtonCongratsUnbury;
160161
private Button mButtonCongratsOpenOtherDeck;
161-
private Button mButtonCongratsFinish;
162162
private Button mButtonCongratsCustomStudy;
163163

164164
private View mCustomStudyDetailsView;
@@ -233,16 +233,17 @@ public void onClick(View v) {
233233
finishCongrats();
234234
}
235235
return;
236+
case R.id.studyoptions_congrats_unbury:
237+
col.getSched().unburyCards();
238+
resetAndUpdateValuesFromDeck();
239+
finishCongrats();
240+
return;
236241
case R.id.studyoptions_congrats_open_other_deck:
237242
closeStudyOptions();
238243
return;
239244
case R.id.studyoptions_congrats_customstudy:
240245
showDialog(DIALOG_CUSTOM_STUDY);
241246
return;
242-
case R.id.studyoptions_congrats_finish:
243-
updateValuesFromDeck();
244-
finishCongrats();
245-
return;
246247
case R.id.studyoptions_card_browser:
247248
openCardBrowser();
248249
return;
@@ -413,7 +414,6 @@ public boolean onTouch(View v, MotionEvent event) {
413414

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

676676
mTextCongratsMessage.setOnClickListener(mButtonClickListener);
677677
mButtonCongratsUndo = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_undo);
678+
mButtonCongratsUnbury = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_unbury);
678679
mButtonCongratsCustomStudy = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_customstudy);
679680
mButtonCongratsOpenOtherDeck = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_open_other_deck);
680681
if (mFragmented) {
681682
mButtonCongratsOpenOtherDeck.setVisibility(View.GONE);
682683
}
683-
mButtonCongratsFinish = (Button) mCongratsView.findViewById(R.id.studyoptions_congrats_finish);
684-
684+
685+
685686
mButtonCongratsUndo.setOnClickListener(mButtonClickListener);
687+
mButtonCongratsUnbury.setOnClickListener(mButtonClickListener);
686688
mButtonCongratsCustomStudy.setOnClickListener(mButtonClickListener);
687689
mButtonCongratsOpenOtherDeck.setOnClickListener(mButtonClickListener);
688-
mButtonCongratsFinish.setOnClickListener(mButtonClickListener);
689690
}
690691

691692

@@ -1141,6 +1142,9 @@ private void prepareCongratsView() {
11411142
mButtonCongratsUndo.setText(res.getString(R.string.studyoptions_congrats_undo,
11421143
AnkiDroidApp.getCol().undoName(res)));
11431144
}
1145+
if (AnkiDroidApp.colIsOpen() && !AnkiDroidApp.getCol().getSched().haveBuried()) {
1146+
mButtonCongratsUnbury.setVisibility(View.GONE);
1147+
}
11441148
mTextCongratsMessage.setText(AnkiDroidApp.getCol().getSched().finishedMsg(getActivity()));
11451149
// Filtered decks must not have a custom study button
11461150
try {

src/com/ichi2/async/DeckTask.java

+8
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,14 @@ private TaskData doInBackgroundDismissNote(TaskData... params) {
558558
col.getDb().getDatabase().beginTransaction();
559559
try {
560560
switch (type) {
561+
case 4:
562+
// collect undo information
563+
col.markUndo(Collection.UNDO_BURY_CARD,
564+
new Object[] { col.getDirty(), note.cards(), card.getId() });
565+
// then bury
566+
sched.buryCards(new long[]{ card.getId() });
567+
sHadCardQueue = true;
568+
break;
561569
case 0:
562570
// collect undo information
563571
col.markUndo(Collection.UNDO_BURY_NOTE,

src/com/ichi2/libanki/Collection.java

+5
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ public class Collection {
111111
public static final int UNDO_SUSPEND_NOTE = 4;
112112
public static final int UNDO_DELETE_NOTE = 5;
113113
public static final int UNDO_MARK_NOTE = 6;
114+
public static final int UNDO_BURY_CARD = 7;
115+
114116
private static final int[] fUndoNames = new int[]{
115117
R.string.undo_action_review,
116118
R.string.undo_action_edit,
@@ -1261,6 +1263,9 @@ public void markUndo(int type, Object[] o) {
12611263
case UNDO_EDIT_NOTE:
12621264
mUndo.add(new Object[]{type, ((Note)o[0]).clone(), o[1], o[2]});
12631265
break;
1266+
case UNDO_BURY_CARD:
1267+
mUndo.add(new Object[]{type, o[0], o[1], o[2]});
1268+
break;
12641269
case UNDO_BURY_NOTE:
12651270
mUndo.add(new Object[]{type, o[0], o[1], o[2]});
12661271
break;

src/com/ichi2/libanki/Finder.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,9 @@ private String _findCardState(String val) {
463463
}
464464
return "type = " + n;
465465
} else if (val.equals("suspended")) {
466-
return "c.queue in (-1, -2)";
466+
return "c.queue = -1";
467+
} else if (val.equals("buried")) {
468+
return "c.queue = -2";
467469
} else if (val.equals("due")) {
468470
return "(c.queue in (2,3) and c.due <= " + mCol.getSched().getToday() +
469471
") or (c.queue = 1 and c.due <= " + mCol.getSched().getDayCutoff() + ")";

src/com/ichi2/libanki/Sched.java

+14-9
Original file line numberDiff line numberDiff line change
@@ -1595,7 +1595,7 @@ private List<Long> _fillDyn(JSONObject deck) {
15951595
int limit = terms.getInt(1);
15961596
int order = terms.getInt(2);
15971597
String orderlimit = _dynOrder(order, limit);
1598-
search += " -is:suspended -deck:filtered";
1598+
search += " -is:suspended -is:buried -deck:filtered";
15991599
ids = mCol.findCards(search, orderlimit);
16001600
if (ids.isEmpty()) {
16011601
return ids;
@@ -1976,10 +1976,10 @@ public boolean newDue() {
19761976
}
19771977

19781978

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

@@ -2096,18 +2096,23 @@ public void unsuspendCards(long[] ids) {
20962096
"UPDATE cards SET queue = type, mod = " + Utils.intNow() + ", usn = " + mCol.usn()
20972097
+ " WHERE queue = -1 AND id IN " + Utils.ids2str(ids));
20982098
}
2099-
2100-
2099+
2100+
2101+
public void buryCards(long[] cids) {
2102+
removeLrn(cids);
2103+
mCol.getDb().execute("update cards set queue=-2,mod=?,usn=? where id in " + Utils.ids2str(cids),
2104+
new Object[]{Utils.now(), mCol.usn()});
2105+
}
2106+
2107+
21012108
/**
21022109
* Bury all cards for note until next session.
21032110
* @param nid The id of the targetted note.
21042111
*/
21052112
public void buryNote(long nid) {
21062113
long[] cids = Utils.arrayList2array(mCol.getDb().queryColumn(Long.class,
21072114
"SELECT id FROM cards WHERE nid = " + nid + " AND queue >= 0", 0));
2108-
removeLrn(cids);
2109-
mCol.getDb().execute("update cards set queue=-2,mod=?,usn=? where id in " + Utils.ids2str(cids),
2110-
new Object[]{Utils.now(), mCol.usn()});
2115+
buryCards(cids);
21112116
}
21122117

21132118
/**
@@ -2161,7 +2166,7 @@ private void _burySiblings(Card card) {
21612166

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

0 commit comments

Comments
 (0)