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";