From 6b41628fbf7298390823a99503d3a0f2f687556b Mon Sep 17 00:00:00 2001 From: Eric House Date: Wed, 5 Feb 2020 19:00:01 -0800 Subject: [PATCH] dup: fix to call informMove(); make strings localizable Was relying incorrectly on showRobotScores, which is FALSE on linux by default. --- .../eehouse/android/xw4/jni/DUtilCtxt.java | 65 +++++++------ .../app/src/main/res/values/strings.xml | 5 +- xwords4/android/jni/LocalizedStrIncludes.h | 7 +- xwords4/common/server.c | 93 ++++++++++--------- xwords4/linux/LocalizedStrIncludes.h | 3 + xwords4/linux/lindutil.c | 7 +- 6 files changed, 103 insertions(+), 77 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java index 3ccbcd4ba..4f2eb923e 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java @@ -92,32 +92,35 @@ public class DUtilCtxt { } } - static final int STRD_ROBOT_TRADED = 1; - static final int STR_ROBOT_MOVED = 2; - static final int STRS_VALUES_HEADER = 3; - static final int STRD_REMAINING_TILES_ADD = 4; - static final int STRD_UNUSED_TILES_SUB = 5; - static final int STRS_REMOTE_MOVED = 6; - static final int STRD_TIME_PENALTY_SUB = 7; - static final int STR_PASS = 8; - static final int STRS_MOVE_ACROSS = 9; - static final int STRS_MOVE_DOWN = 10; - static final int STRS_TRAY_AT_START = 11; - static final int STRSS_TRADED_FOR = 12; - static final int STR_PHONY_REJECTED = 13; - static final int STRD_CUMULATIVE_SCORE = 14; - static final int STRS_NEW_TILES = 15; - static final int STR_COMMIT_CONFIRM = 16; - static final int STR_SUBMIT_CONFIRM = 17; - static final int STR_BONUS_ALL = 18; - static final int STRD_TURN_SCORE = 19; - static final int STRD_REMAINS_HEADER = 20; - static final int STRD_REMAINS_EXPL = 21; - static final int STRSD_RESIGNED = 22; - static final int STRSD_WINNER = 23; - static final int STRDSD_PLACER = 24; - static final int STR_DUP_CLIENT_SENT = 25; - static final int STRDD_DUP_HOST_RECEIVED = 26; + private static final int STRD_ROBOT_TRADED = 1; + private static final int STR_ROBOT_MOVED = 2; + private static final int STRS_VALUES_HEADER = 3; + private static final int STRD_REMAINING_TILES_ADD = 4; + private static final int STRD_UNUSED_TILES_SUB = 5; + private static final int STRS_REMOTE_MOVED = 6; + private static final int STRD_TIME_PENALTY_SUB = 7; + private static final int STR_PASS = 8; + private static final int STRS_MOVE_ACROSS = 9; + private static final int STRS_MOVE_DOWN = 10; + private static final int STRS_TRAY_AT_START = 11; + private static final int STRSS_TRADED_FOR = 12; + private static final int STR_PHONY_REJECTED = 13; + private static final int STRD_CUMULATIVE_SCORE = 14; + private static final int STRS_NEW_TILES = 15; + private static final int STR_COMMIT_CONFIRM = 16; + private static final int STR_SUBMIT_CONFIRM = 17; + private static final int STR_BONUS_ALL = 18; + private static final int STRD_TURN_SCORE = 19; + private static final int STRD_REMAINS_HEADER = 20; + private static final int STRD_REMAINS_EXPL = 21; + private static final int STRSD_RESIGNED = 22; + private static final int STRSD_WINNER = 23; + private static final int STRDSD_PLACER = 24; + private static final int STR_DUP_CLIENT_SENT = 25; + private static final int STRDD_DUP_HOST_RECEIVED = 26; + private static final int STR_DUP_MOVED = 27; + private static final int STRD_DUP_TRADED = 28; + private static final int STRSD_DUP_ONESCORE = 29; public String getUserString( int stringCode ) { @@ -194,7 +197,15 @@ public class DUtilCtxt { case STRDD_DUP_HOST_RECEIVED: id = R.string.dup_host_received_fmt; break; - + case STR_DUP_MOVED: + id = R.string.dup_moved; + break; + case STRD_DUP_TRADED: + id = R.string.dup_traded_fmt; + break; + case STRSD_DUP_ONESCORE: + id = R.string.dup_onescore_fmt; + break; default: Log.w( TAG, "no such stringCode: %d", stringCode ); diff --git a/xwords4/android/app/src/main/res/values/strings.xml b/xwords4/android/app/src/main/res/values/strings.xml index 3e7fbb12c..7a6fa5ff1 100644 --- a/xwords4/android/app/src/main/res/values/strings.xml +++ b/xwords4/android/app/src/main/res/values/strings.xml @@ -2421,7 +2421,6 @@ Duplicate mode - Dup @@ -2489,6 +2488,10 @@ Game un-paused + Duplicate turn complete. Scores:\n + No moves made; traded %1$d tiles + %1$s: %2$d points\n + Game pause diff --git a/xwords4/android/jni/LocalizedStrIncludes.h b/xwords4/android/jni/LocalizedStrIncludes.h index 30a004be4..d9dc9e96e 100644 --- a/xwords4/android/jni/LocalizedStrIncludes.h +++ b/xwords4/android/jni/LocalizedStrIncludes.h @@ -1,4 +1,4 @@ -/* Keep these in sync with the constants in UtilCtxt.java */ +/* Keep these in sync with the constants in DUtilCtxt.java */ #ifndef _LOCALIZEDSTRINCLUDES_H_ @@ -30,6 +30,9 @@ # define STRDSD_PLACER 24 # define STR_DUP_CLIENT_SENT 25 # define STRDD_DUP_HOST_RECEIVED 26 +# define STR_DUP_MOVED 27 +# define STRD_DUP_TRADED 28 +# define STRSD_DUP_ONESCORE 29 -# define N_AND_USER_STRINGS 26 +# define N_AND_USER_STRINGS 29 #endif diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 677d3f9da..4028676ba 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -899,59 +899,58 @@ bitsPerTile( ServerCtxt* server ) static void dupe_setupShowTrade( ServerCtxt* server, XP_U16 nTiles ) { - if ( server->nv.showRobotScores ) { - XP_ASSERT( !server->nv.prevMoveStream ); + XP_ASSERT( inDuplicateMode(server) ); + XP_ASSERT( !server->nv.prevMoveStream ); - XWStreamCtxt* stream = mkServerStream( server ); + XP_UCHAR buf[128]; + const XP_UCHAR* fmt = dutil_getUserString( server->vol.dutil, STRD_DUP_TRADED ); + XP_SNPRINTF( buf, VSIZE(buf), fmt, nTiles ); - XP_UCHAR buf[64]; - XP_SNPRINTF( buf, VSIZE(buf), "No moves made; traded %d tiles", nTiles ); - stream_catString( stream, buf ); + XWStreamCtxt* stream = mkServerStream( server ); + stream_catString( stream, buf ); - server->nv.prevMoveStream = stream; - server->vol.showPrevMove = XP_TRUE; - } + server->nv.prevMoveStream = stream; + server->vol.showPrevMove = XP_TRUE; } static void dupe_setupShowMove( ServerCtxt* server, XP_U16* scores ) { - if ( server->nv.showRobotScores ) { - XP_ASSERT( !server->nv.prevMoveStream ); + XP_ASSERT( inDuplicateMode(server) ); + XP_ASSERT( !server->nv.prevMoveStream ); /* firing */ - const CurGameInfo* gi = server->vol.gi; - const XP_U16 nPlayers = gi->nPlayers; + const CurGameInfo* gi = server->vol.gi; + const XP_U16 nPlayers = gi->nPlayers; - XWStreamCtxt* stream = mkServerStream( server ); + XWStreamCtxt* stream = mkServerStream( server ); - XP_U16 lastMax = 0x7FFF; - for ( XP_U16 nDone = 0; nDone < nPlayers; ) { + XP_U16 lastMax = 0x7FFF; + for ( XP_U16 nDone = 0; nDone < nPlayers; ) { - /* Find the largest score we haven't already done */ - XP_U16 thisMax = 0; - for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) { - XP_U16 score = scores[ii]; - if ( score < lastMax && score > thisMax ) { - thisMax = score; - } + /* Find the largest score we haven't already done */ + XP_U16 thisMax = 0; + for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) { + XP_U16 score = scores[ii]; + if ( score < lastMax && score > thisMax ) { + thisMax = score; } - - /* Process everybody with that score */ - for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) { - if ( scores[ii] == thisMax ) { - ++nDone; - XP_UCHAR buf[64]; - XP_SNPRINTF( buf, VSIZE(buf), "%s: %d points\n", - gi->players[ii].name, scores[ii] ); - stream_catString( stream, buf ); - } - } - lastMax = thisMax; } - server->nv.prevMoveStream = stream; - server->vol.showPrevMove = XP_TRUE; + /* Process everybody with that score */ + const XP_UCHAR* fmt = dutil_getUserString( server->vol.dutil, STRSD_DUP_ONESCORE ); + for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) { + if ( scores[ii] == thisMax ) { + ++nDone; + XP_UCHAR buf[128]; + XP_SNPRINTF( buf, VSIZE(buf), fmt, gi->players[ii].name, scores[ii] ); + stream_catString( stream, buf ); + } + } + lastMax = thisMax; } + + server->nv.prevMoveStream = stream; + server->vol.showPrevMove = XP_TRUE; } static void @@ -1339,7 +1338,7 @@ makeRobotMove( ServerCtxt* server ) (server_countTilesInPool( server ) >= MAX_TRAY_TILES)); server->vol.showPrevMove = XP_TRUE; - if ( server->nv.showRobotScores ) { + if ( inDuplicateMode(server) || server->nv.showRobotScores ) { stream = mkServerStream( server ); } @@ -1450,11 +1449,11 @@ postponeRobotMove( ServerCtxt* server ) static void showPrevScore( ServerCtxt* server ) { - if ( server->nv.showRobotScores ) { /* this can be changed between turns */ + /* showRobotScores can be changed between turns */ + if ( inDuplicateMode( server ) || server->nv.showRobotScores ) { XW_UtilCtxt* util = server->vol.util; XW_DUtilCtxt* dutil = server->vol.dutil; XWStreamCtxt* stream; - const XP_UCHAR* str; XP_UCHAR buf[128]; CurGameInfo* gi = server->vol.gi; XP_U16 nPlayers = gi->nPlayers; @@ -1464,13 +1463,15 @@ showPrevScore( ServerCtxt* server ) prevTurn = (server->nv.currentTurn + nPlayers - 1) % nPlayers; lp = &gi->players[prevTurn]; + XP_U16 stringCode; if ( inDuplicateMode( server ) ) { - str = "Duplicate turn complete. Scores:\n"; + stringCode = STR_DUP_MOVED; } else if ( LP_IS_LOCAL(lp) ) { - str = dutil_getUserString( dutil, STR_ROBOT_MOVED ); + stringCode = STR_ROBOT_MOVED; } else { - str = dutil_getUserString( dutil, STRS_REMOTE_MOVED ); + stringCode = STRS_REMOTE_MOVED; } + const XP_UCHAR* str = dutil_getUserString( dutil, stringCode ); XP_SNPRINTF( buf, sizeof(buf), str, lp->name ); str = buf; @@ -2549,7 +2550,7 @@ nextTurn( ServerCtxt* server, XP_S16 nxtTurn ) if ( server->vol.showPrevMove ) { server->vol.showPrevMove = XP_FALSE; - if ( server->nv.showRobotScores ) { + if ( inDuplicateMode(server) || server->nv.showRobotScores ) { server->nv.stateAfterShow = server->nv.gameState; SETSTATE( server, XWSTATE_NEED_SHOWSCORE ); moreToDo = XP_TRUE; @@ -2769,7 +2770,7 @@ static XWStreamCtxt* makeTradeReportIf( ServerCtxt* server, const TrayTileSet* tradedTiles ) { XWStreamCtxt* stream = NULL; - if ( server->nv.showRobotScores ) { + if ( inDuplicateMode(server) || server->nv.showRobotScores ) { XP_UCHAR tradeBuf[64]; const XP_UCHAR* tradeStr = dutil_getUserQuantityString( server->vol.dutil, STRD_ROBOT_TRADED, @@ -2786,7 +2787,7 @@ static XWStreamCtxt* makeMoveReportIf( ServerCtxt* server, XWStreamCtxt** wordsStream ) { XWStreamCtxt* stream = NULL; - if ( server->nv.showRobotScores ) { + if ( inDuplicateMode(server) || server->nv.showRobotScores ) { ModelCtxt* model = server->vol.model; stream = mkServerStream( server ); *wordsStream = mkServerStream( server ); diff --git a/xwords4/linux/LocalizedStrIncludes.h b/xwords4/linux/LocalizedStrIncludes.h index 773884322..a508b4215 100644 --- a/xwords4/linux/LocalizedStrIncludes.h +++ b/xwords4/linux/LocalizedStrIncludes.h @@ -60,6 +60,9 @@ enum { STR_DUP_CLIENT_SENT, STRDD_DUP_HOST_RECEIVED, + STR_DUP_MOVED, + STRD_DUP_TRADED, + STRSD_DUP_ONESCORE, STR_LAST }; diff --git a/xwords4/linux/lindutil.c b/xwords4/linux/lindutil.c index 4b7dbe5bb..d4c372640 100644 --- a/xwords4/linux/lindutil.c +++ b/xwords4/linux/lindutil.c @@ -176,7 +176,6 @@ linux_dutil_getUserString( XW_DUtilCtxt* XP_UNUSED(uc), XP_U16 code ) return (XP_UCHAR*)"The robot \"%s\" moved:\n"; case STRS_REMOTE_MOVED: return (XP_UCHAR*)"Remote player \"%s\" moved:\n"; - #ifndef XWFEATURE_STANDALONE_ONLY case STR_LOCALPLAYERS: return (XP_UCHAR*)"Local players"; @@ -200,11 +199,17 @@ linux_dutil_getUserString( XW_DUtilCtxt* XP_UNUSED(uc), XP_U16 code ) return "[Winner] %s: %d"; case STRDSD_PLACER: return "[#%d] %s: %d"; + case STR_DUP_MOVED: + return (XP_UCHAR*)"Duplicate turn complete. Scores:\n"; case STR_DUP_CLIENT_SENT: return "This device has sent its moves to the host. When all players " "have sent their moves it will be your turn again."; case STRDD_DUP_HOST_RECEIVED: return "%d of %d players have reported their moves."; + case STRD_DUP_TRADED: + return "No moves made; traded %d tiles"; + case STRSD_DUP_ONESCORE: + return "%s: %d points\n"; default: XP_LOGF( "%s(code=%d)", __func__, code );