mirror of
https://github.com/ankidroid/Anki-Android.git
synced 2024-09-20 12:02:16 +02:00
Proper suspension of card
This commit is contained in:
parent
44531ff430
commit
e4c6021e4a
@ -58,6 +58,7 @@ import android.widget.TextView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.ToggleButton;
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
|
import com.ichi2.anki.DeckTask.TaskData;
|
||||||
import com.ichi2.utils.DiffEngine;
|
import com.ichi2.utils.DiffEngine;
|
||||||
import com.tomgibara.android.veecheck.util.PrefSettings;
|
import com.tomgibara.android.veecheck.util.PrefSettings;
|
||||||
|
|
||||||
@ -415,7 +416,10 @@ public class Ankidroid extends Activity
|
|||||||
startActivity( opts );
|
startActivity( opts );
|
||||||
return true;
|
return true;
|
||||||
case MENU_SUSPEND:
|
case MENU_SUSPEND:
|
||||||
currentCard.suspend();
|
mFlipCard.setChecked(true);
|
||||||
|
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_SUSPEND_CARD,
|
||||||
|
mAnswerCardHandler,
|
||||||
|
new DeckTask.TaskData(0, AnkidroidApp.deck(), currentCard));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -476,10 +476,4 @@ public class Card {
|
|||||||
AnkiDb.database.execSQL("UPDATE cards SET priority = 0, isDue = 0 WHERE id = " + id);
|
AnkiDb.database.execSQL("UPDATE cards SET priority = 0, isDue = 0 WHERE id = " + id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Suspend this card.
|
|
||||||
*/
|
|
||||||
public void suspend() {
|
|
||||||
isDue = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1130,7 +1130,44 @@ public class Deck
|
|||||||
|
|
||||||
/* Priorities
|
/* Priorities
|
||||||
***********************************************************/
|
***********************************************************/
|
||||||
|
public void suspendCard(long cardId)
|
||||||
|
{
|
||||||
|
long[] ids = new long[1];
|
||||||
|
ids[0] = cardId;
|
||||||
|
suspendCards(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void suspendCards(long[] ids)
|
||||||
|
{
|
||||||
|
AnkiDb.database.execSQL(
|
||||||
|
"UPDATE cards SET " +
|
||||||
|
"isDue = 0, " +
|
||||||
|
"priority = -3, " +
|
||||||
|
"modified = " + String.format("%f", (double) (System.currentTimeMillis() / 1000.0)) +
|
||||||
|
" WHERE id IN " + ids2str(ids));
|
||||||
|
rebuildCounts(false);
|
||||||
|
flushMod();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsuspendCard(long cardId)
|
||||||
|
{
|
||||||
|
long[] ids = new long[1];
|
||||||
|
ids[0] = cardId;
|
||||||
|
unsuspendCards(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsuspendCards(long[] ids)
|
||||||
|
{
|
||||||
|
AnkiDb.database.execSQL(
|
||||||
|
"UPDATE cards SET " +
|
||||||
|
"priority = 0, " +
|
||||||
|
"modified = " + String.format("%f", (double) (System.currentTimeMillis() / 1000.0)) +
|
||||||
|
" WHERE id IN " + ids2str(ids));
|
||||||
|
updatePriorities(ids);
|
||||||
|
rebuildCounts(false);
|
||||||
|
flushMod();
|
||||||
|
}
|
||||||
|
|
||||||
private void updatePriorities(long[] cardIds) {
|
private void updatePriorities(long[] cardIds) {
|
||||||
updatePriorities(cardIds, null, true);
|
updatePriorities(cardIds, null, true);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ public class DeckTask extends AsyncTask<DeckTask.TaskData, DeckTask.TaskData, De
|
|||||||
|
|
||||||
public static final int TASK_TYPE_LOAD_DECK = 0;
|
public static final int TASK_TYPE_LOAD_DECK = 0;
|
||||||
public static final int TASK_TYPE_ANSWER_CARD = 1;
|
public static final int TASK_TYPE_ANSWER_CARD = 1;
|
||||||
|
public static final int TASK_TYPE_SUSPEND_CARD = 2;
|
||||||
|
|
||||||
private static DeckTask instance;
|
private static DeckTask instance;
|
||||||
|
|
||||||
@ -67,6 +68,8 @@ public class DeckTask extends AsyncTask<DeckTask.TaskData, DeckTask.TaskData, De
|
|||||||
return doInBackgroundLoadDeck(params);
|
return doInBackgroundLoadDeck(params);
|
||||||
case TASK_TYPE_ANSWER_CARD:
|
case TASK_TYPE_ANSWER_CARD:
|
||||||
return doInBackgroundAnswerCard(params);
|
return doInBackgroundAnswerCard(params);
|
||||||
|
case TASK_TYPE_SUSPEND_CARD:
|
||||||
|
return doInBackgroundSuspendCard(params);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -149,6 +152,30 @@ public class DeckTask extends AsyncTask<DeckTask.TaskData, DeckTask.TaskData, De
|
|||||||
return new TaskData(Ankidroid.DECK_EMPTY);
|
return new TaskData(Ankidroid.DECK_EMPTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TaskData doInBackgroundSuspendCard(TaskData... params)
|
||||||
|
{
|
||||||
|
long start, stop;
|
||||||
|
Deck deck = params[0].getDeck();
|
||||||
|
Card oldCard = params[0].getCard();
|
||||||
|
Card newCard;
|
||||||
|
|
||||||
|
if (oldCard != null)
|
||||||
|
{
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
deck.suspendCard(oldCard.id);
|
||||||
|
stop = System.currentTimeMillis();
|
||||||
|
Log.v(TAG, "doInBackgroundSuspendCard - Suspended card in " + (stop - start) + " ms.");
|
||||||
|
}
|
||||||
|
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
newCard = deck.getCard();
|
||||||
|
stop = System.currentTimeMillis();
|
||||||
|
Log.v(TAG, "doInBackgroundSuspendCard - Loaded new card in " + (stop - start) + " ms.");
|
||||||
|
publishProgress(new TaskData(newCard));
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static interface TaskListener
|
public static interface TaskListener
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user