diff --git a/DroidFish/res/values/strings.xml b/DroidFish/res/values/strings.xml
index d807195..9e3567a 100644
--- a/DroidFish/res/values/strings.xml
+++ b/DroidFish/res/values/strings.xml
@@ -43,6 +43,7 @@ you are not actively using the program.\
Load game from Scid file
Save game to PGN file
Retrieve Position
+ Repeat last move
Truncate Game Tree
Move Variation Up
Move Variation Down
diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java
index df45719..542fff7 100644
--- a/DroidFish/src/org/petero/droidfish/DroidFish.java
+++ b/DroidFish/src/org/petero/droidfish/DroidFish.java
@@ -2186,6 +2186,7 @@ public class DroidFish extends Activity
// savePGNToFile(".autosave.pgn", true);
TimeControlData tcData = new TimeControlData();
tcData.setTimeControl(timeControl, movesPerSession, timeIncrement);
+ speech.flushQueue();
ctrl.newGame(gameMode, tcData);
ctrl.startGame();
setBoardFlip(true);
@@ -2264,12 +2265,13 @@ public class DroidFish extends Activity
}
private final Dialog boardMenuDialog() {
- final int CLIPBOARD = 0;
- final int FILEMENU = 1;
- final int SHARE_GAME = 2;
- final int SHARE_TEXT = 3;
- final int SHARE_IMAG = 4;
- final int GET_FEN = 5;
+ final int CLIPBOARD = 0;
+ final int FILEMENU = 1;
+ final int SHARE_GAME = 2;
+ final int SHARE_TEXT = 3;
+ final int SHARE_IMAG = 4;
+ final int GET_FEN = 5;
+ final int REPEAT_LAST_MOVE = 6;
setAutoMode(AutoMode.OFF);
List lst = new ArrayList();
@@ -2284,6 +2286,9 @@ public class DroidFish extends Activity
if (hasFenProvider(getPackageManager())) {
lst.add(getString(R.string.get_fen)); actions.add(GET_FEN);
}
+ if (moveAnnounceType.startsWith("speech_")) {
+ lst.add(getString(R.string.repeat_last_move)); actions.add(REPEAT_LAST_MOVE);
+ }
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.tools_menu);
builder.setItems(lst.toArray(new CharSequence[lst.size()]), new DialogInterface.OnClickListener() {
@@ -2308,6 +2313,10 @@ public class DroidFish extends Activity
case GET_FEN:
getFen();
break;
+ case REPEAT_LAST_MOVE:
+ speech.flushQueue();
+ ctrl.repeatLastMove();
+ break;
}
}
});
diff --git a/DroidFish/src/org/petero/droidfish/Speech.java b/DroidFish/src/org/petero/droidfish/Speech.java
index 87507ff..6fd13e6 100644
--- a/DroidFish/src/org/petero/droidfish/Speech.java
+++ b/DroidFish/src/org/petero/droidfish/Speech.java
@@ -74,6 +74,7 @@ public class Speech {
case TextToSpeech.LANG_COUNTRY_AVAILABLE:
case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE:
lang = Language.fromString(langStr);
+ tts.addEarcon("[move]", "org.petero.droidfish", R.raw.movesound);
say(toSpeak);
break;
case TextToSpeech.LANG_MISSING_DATA:
@@ -97,8 +98,10 @@ public class Speech {
@SuppressWarnings("deprecation")
public void say(String text) {
if (initialized) {
- if (lang != Language.NONE && text != null)
- tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
+ if (lang != Language.NONE && text != null) {
+ tts.playEarcon("[move]", TextToSpeech.QUEUE_ADD, null);
+ tts.speak(text, TextToSpeech.QUEUE_ADD, null);
+ }
toSpeak = null;
} else {
toSpeak = text;
diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java
index acf89b8..b97c75b 100644
--- a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java
+++ b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java
@@ -1036,6 +1036,10 @@ public class DroidChessController {
updateGUI();
}
+ public final void repeatLastMove() {
+ gui.movePlayed(game.prevPos(), game.tree.currentNode.move, true);
+ }
+
private final void setPlayerNames(Game game) {
if (game != null) {
String engine = "Computer";