0
0
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:
Daniel Svärd 2010-02-05 20:37:32 +01:00
parent 44531ff430
commit e4c6021e4a
4 changed files with 70 additions and 8 deletions

View File

@ -58,6 +58,7 @@ import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import com.ichi2.anki.DeckTask.TaskData;
import com.ichi2.utils.DiffEngine;
import com.tomgibara.android.veecheck.util.PrefSettings;
@ -415,7 +416,10 @@ public class Ankidroid extends Activity
startActivity( opts );
return true;
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 false;

View File

@ -476,10 +476,4 @@ public class Card {
AnkiDb.database.execSQL("UPDATE cards SET priority = 0, isDue = 0 WHERE id = " + id);
}
/**
* Suspend this card.
*/
public void suspend() {
isDue = 0;
}
}

View File

@ -1130,7 +1130,44 @@ public class Deck
/* 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) {
updatePriorities(cardIds, null, true);
}

View File

@ -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_ANSWER_CARD = 1;
public static final int TASK_TYPE_SUSPEND_CARD = 2;
private static DeckTask instance;
@ -67,6 +68,8 @@ public class DeckTask extends AsyncTask<DeckTask.TaskData, DeckTask.TaskData, De
return doInBackgroundLoadDeck(params);
case TASK_TYPE_ANSWER_CARD:
return doInBackgroundAnswerCard(params);
case TASK_TYPE_SUSPEND_CARD:
return doInBackgroundSuspendCard(params);
default:
return null;
}
@ -149,6 +152,30 @@ public class DeckTask extends AsyncTask<DeckTask.TaskData, DeckTask.TaskData, De
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
{