diff --git a/xwords4/android/XWords4/jni/xwjni.c b/xwords4/android/XWords4/jni/xwjni.c index d053916b1..53980056f 100644 --- a/xwords4/android/XWords4/jni/xwjni.c +++ b/xwords4/android/XWords4/jni/xwjni.c @@ -177,6 +177,9 @@ loadCommonPrefs( JNIEnv* env, CommonPrefs* cp, jobject j_cp ) cp->showColors = getBool( env, j_cp, "showColors" ); cp->sortNewTiles = getBool( env, j_cp, "sortNewTiles" ); cp->allowPeek = getBool( env, j_cp, "allowPeek" ); +#ifdef XWFEATURE_CROSSHAIRS + cp->hideCrosshairs = getBool( env, j_cp, "hideCrosshairs" ); +#endif } static XWStreamCtxt* diff --git a/xwords4/android/XWords4/res/layout/lookup.xml b/xwords4/android/XWords4/res/layout/lookup.xml index 4d9970ddd..021468272 100644 --- a/xwords4/android/XWords4/res/layout/lookup.xml +++ b/xwords4/android/XWords4/res/layout/lookup.xml @@ -7,14 +7,6 @@ android:layout_height="fill_parent" > - - - + + + - diff --git a/xwords4/android/XWords4/res/values/common_rsrc.xml b/xwords4/android/XWords4/res/values/common_rsrc.xml index cfb2f5abd..ff97bd738 100644 --- a/xwords4/android/XWords4/res/values/common_rsrc.xml +++ b/xwords4/android/XWords4/res/values/common_rsrc.xml @@ -12,6 +12,7 @@ key_skip_confirm key_sort_tiles key_peek_other + key_hide_crosshairs key_hide_values key_ringer_zoom key_hide_title @@ -81,6 +82,9 @@ Crosswords + + xwords@eehouse.org + eehouse.org diff --git a/xwords4/android/XWords4/res/values/strings.xml b/xwords4/android/XWords4/res/values/strings.xml index 45e455b90..4cc576dc8 100644 --- a/xwords4/android/XWords4/res/values/strings.xml +++ b/xwords4/android/XWords4/res/values/strings.xml @@ -1057,6 +1057,18 @@ Tapping on scoreboard name shows that player\'s tiles + + + Disable crosshairs + + Do not visually indicate which board cell is touched + Network game settings Settings that apply to @@ -1799,4 +1811,12 @@ Words no shorter than Words no longer than + Email author + Comment about Crosswords + Send comment via + + (If relevant, please include the + version: \"%s\"; and make/model of your phone or + tablet.)" + diff --git a/xwords4/android/XWords4/res/xml/xwprefs.xml b/xwords4/android/XWords4/res/xml/xwprefs.xml index 76f6ac204..9dd28a086 100644 --- a/xwords4/android/XWords4/res/xml/xwprefs.xml +++ b/xwords4/android/XWords4/res/xml/xwprefs.xml @@ -231,6 +231,11 @@ android:summary="@string/ringer_zoom_summary" android:defaultValue="false" /> + m_wordsAdapter; private Button m_doneButton; - private TextView m_summary; private Dialog m_dialog; private Context m_context; private int m_dlgId; @@ -96,7 +95,6 @@ public class LookupView extends LinearLayout m_doneButton = (Button)findViewById( R.id.button_done ); m_doneButton.setOnClickListener( this ); - m_summary = (TextView)findViewById( R.id.summary ); switchState(); } @@ -233,12 +231,12 @@ public class LookupView extends LinearLayout private void setSummary( int id ) { - m_summary.setText( m_context.getString( id ) ); + m_dialog.setTitle( m_context.getString( id ) ); } private void setSummary( String word ) { String title = Utils.format( m_context, R.string.pick_url_titlef, word ); - m_summary.setText( title ); + m_dialog.setTitle( title ); } } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayReceiver.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayReceiver.java index be86580d1..204b6f9b9 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayReceiver.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayReceiver.java @@ -49,7 +49,7 @@ public class RelayReceiver extends BroadcastReceiver { { if ( null != intent && null != intent.getAction() && intent.getAction().equals( Intent.ACTION_BOOT_COMPLETED ) ) { - DbgUtils.logf( "launching timer on boot" ); + DbgUtils.logf("RelayReceiver.onReceive: launching timer on boot"); RestartTimer( context ); } else { // DbgUtils.logf( "RelayReceiver::onReceive()" ); @@ -82,10 +82,10 @@ public class RelayReceiver extends BroadcastReceiver { Intent intent = new Intent( context, RelayReceiver.class ); PendingIntent pi = PendingIntent.getBroadcast( context, 0, intent, 0 ); - if ( interval_millis > 0 || force ) { - // DbgUtils.logf( "setting alarm for %d millis", interval_millis ); + if ( force || interval_millis > 0 ) { + long first_millis = force ? 0 : interval_millis; am.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, - 0, // first firing + first_millis, // first firing interval_millis, pi ); } else { am.cancel( pi ); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/Utils.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/Utils.java index b2e6b5294..dc9d4a191 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/Utils.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/Utils.java @@ -57,6 +57,21 @@ public class Utils { } ); } + public static void emailAuthor( Context context ) + { + Intent intent = new Intent( Intent.ACTION_SEND ); + intent.setType( "text/html" ); + intent.putExtra( Intent.EXTRA_SUBJECT, + context.getString( R.string.email_author_subject ) ); + String[] addrs = { context.getString( R.string.email_author_email ) }; + intent.putExtra( Intent.EXTRA_EMAIL, addrs ); + String body = format( context, R.string.email_body_revf, + GitVersion.VERS ); + intent.putExtra( Intent.EXTRA_TEXT, body ); + String chooserMsg = context.getString( R.string.email_author_chooser ); + context.startActivity( Intent.createChooser( intent, chooserMsg ) ); + } + public static View inflate( Context context, int layoutId ) { LayoutInflater factory = LayoutInflater.from( context ); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWApp.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWApp.java index ddacc2867..46005bfcd 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWApp.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWApp.java @@ -30,6 +30,8 @@ public class XWApp extends Application { DbgUtils.logEnable( this ); DbgUtils.logf( "XWApp.onCreate(); git_rev=%s", getString(R.string.git_rev) ); + + RelayReceiver.RestartTimer( this ); super.onCreate(); } } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java index e600236ab..9c8a42ceb 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java @@ -1,6 +1,6 @@ /* -*- compile-command: "cd ../../../../../../; ant debug install"; -*- */ /* - * Copyright 2009-2010 by Eric House (xwords@eehouse.org). All + * Copyright 2009 - 2011 by Eric House (xwords@eehouse.org). All * rights reserved. * * This program is free software; you can redistribute it and/or @@ -27,7 +27,6 @@ import android.graphics.Paint; import android.content.res.Resources; import junit.framework.Assert; -import org.eehouse.android.xw4.Utils; import org.eehouse.android.xw4.R; import org.eehouse.android.xw4.DictUtils; @@ -48,6 +47,7 @@ public class CommonPrefs { public boolean showColors; public boolean sortNewTiles; public boolean allowPeek; + public boolean hideCrosshairs; public int[] playerColors; public int[] bonusColors; @@ -78,6 +78,7 @@ public class CommonPrefs { showColors = getBoolean( context, sp, R.string.key_color_tiles, true ); sortNewTiles = getBoolean( context, sp, R.string.key_sort_tiles, true ); allowPeek = getBoolean( context, sp, R.string.key_peek_other, false ); + hideCrosshairs = getBoolean( context, sp, R.string.key_hide_crosshairs, false ); int ids[] = { R.string.key_player0, R.string.key_player1, @@ -181,31 +182,37 @@ public class CommonPrefs { public static int getDefaultBoardSize( Context context ) { String value = getString( context, R.string.key_board_size ); + int result; try { - return Integer.parseInt( value.substring( 0, 2 ) ); + result = Integer.parseInt( value.substring( 0, 2 ) ); } catch ( Exception ex ) { - return 15; + result = 15; } + return result; } public static int getDefaultPlayerMinutes( Context context ) { String value = getString( context, R.string.key_initial_player_minutes ); + int result; try { - return Integer.parseInt( value ); + result = Integer.parseInt( value ); } catch ( Exception ex ) { - return 25; + result = 25; } + return result; } public static long getProxyInterval( Context context ) { String value = getString( context, R.string.key_connect_frequency ); + long result; try { - return Long.parseLong( value ); + result = Long.parseLong( value ); } catch ( Exception ex ) { - return -1; + result = -1; } + return result; } public static String getDefaultHumanDict( Context context ) diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/UtilCtxtImpl.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/UtilCtxtImpl.java index 0ad9cbcf7..3549b5863 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/UtilCtxtImpl.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/UtilCtxtImpl.java @@ -227,7 +227,7 @@ public class UtilCtxtImpl implements UtilCtxt { } private void subclassOverride( String name ) { - DbgUtils.logf( "%s::%s() called", getClass().getName(), name ); + // DbgUtils.logf( "%s::%s() called", getClass().getName(), name ); } } diff --git a/xwords4/common/board.c b/xwords4/common/board.c index f2569f81f..5e88833bc 100644 --- a/xwords4/common/board.c +++ b/xwords4/common/board.c @@ -435,6 +435,9 @@ board_prefsChanged( BoardCtxt* board, CommonPrefs* cp ) board->skipCommitConfirm = cp->skipCommitConfirm; board->showColors = cp->showColors; board->allowPeek = cp->allowPeek; +#ifdef XWFEATURE_CROSSHAIRS + board->hideCrosshairs = cp->hideCrosshairs; +#endif if ( showArrowChanged ) { showArrowChanged = setArrowVisible( board, XP_FALSE ); @@ -1413,6 +1416,9 @@ invalCellsUnderRect( BoardCtxt* board, const XP_Rect* rect ) void invalCol( BoardCtxt* board, XP_U16 col ) { +#ifdef XWFEATURE_CROSSHAIRS + XP_ASSERT( !board->hideCrosshairs ); +#endif XP_U16 row; XP_U16 nCols = model_numCols(board->model); for ( row = 0; row < nCols; ++row ) { @@ -1423,6 +1429,9 @@ invalCol( BoardCtxt* board, XP_U16 col ) void invalRow( BoardCtxt* board, XP_U16 row ) { +#ifdef XWFEATURE_CROSSHAIRS + XP_ASSERT( !board->hideCrosshairs ); +#endif XP_U16 col; XP_U16 nCols = model_numCols(board->model); for ( col = 0; col < nCols; ++col ) { diff --git a/xwords4/common/boarddrw.c b/xwords4/common/boarddrw.c index 0bec5e916..12e1fd085 100644 --- a/xwords4/common/boarddrw.c +++ b/xwords4/common/boarddrw.c @@ -242,13 +242,15 @@ static CellFlags flagsForCrosshairs( const BoardCtxt* board, XP_U16 col, XP_U16 row ) { CellFlags flags = 0; - XP_Bool inHor, inVert; - dragDropInCrosshairs( board, col, row, &inHor, &inVert ); - if ( inHor ) { - flags |= CELL_CROSSHOR; - } - if ( inVert ) { - flags |= CELL_CROSSVERT; + if ( ! board->hideCrosshairs ) { + XP_Bool inHor, inVert; + dragDropInCrosshairs( board, col, row, &inHor, &inVert ); + if ( inHor ) { + flags |= CELL_CROSSHOR; + } + if ( inVert ) { + flags |= CELL_CROSSVERT; + } } return flags; } diff --git a/xwords4/common/boardp.h b/xwords4/common/boardp.h index 10b4a9f0f..c607908d2 100644 --- a/xwords4/common/boardp.h +++ b/xwords4/common/boardp.h @@ -176,6 +176,9 @@ struct BoardCtxt { XP_Bool hideValsInTray; XP_Bool skipCommitConfirm; XP_Bool allowPeek; /* Can look at non-turn player's rack */ +#ifdef XWFEATURE_CROSSHAIRS + XP_Bool hideCrosshairs; +#endif XP_Bool eraseTray; XP_Bool boardObscuresTray; diff --git a/xwords4/common/comtypes.h b/xwords4/common/comtypes.h index 36bd2d310..2309ba77b 100644 --- a/xwords4/common/comtypes.h +++ b/xwords4/common/comtypes.h @@ -200,6 +200,9 @@ typedef struct CommonPrefs { #endif XP_Bool showColors; /* applies to all games */ XP_Bool allowPeek; /* applies to all games */ +#ifdef XWFEATURE_CROSSHAIRS + XP_Bool hideCrosshairs; /* applies to all games */ +#endif } CommonPrefs; typedef struct _PlayerDicts { diff --git a/xwords4/common/dragdrpp.c b/xwords4/common/dragdrpp.c index 68ab48bba..7c1d227c7 100644 --- a/xwords4/common/dragdrpp.c +++ b/xwords4/common/dragdrpp.c @@ -92,7 +92,11 @@ ddStartBoard( BoardCtxt* board, XP_U16 xx, XP_U16 yy ) found = coordToCell( board, xx, yy, &col, &row ); XP_ASSERT( found ); - (void)crosshairs_set( board, col, row ); +#ifdef XWFEATURE_CROSSHAIRS + if ( !board->hideCrosshairs ) { + (void)crosshairs_set( board, col, row ); + } +#endif trayVisible = board->trayVisState == TRAY_REVEALED; if ( trayVisible && holdsPendingTile( board, col, row ) ) { @@ -481,8 +485,12 @@ dragDropContinueImpl( BoardCtxt* board, XP_U16 xx, XP_U16 yy, if ( newInfo.obj == OBJ_BOARD ) { (void)coordToCell( board, xx, yy, &newInfo.u.board.col, &newInfo.u.board.row ); - draw = crosshairs_set( board, newInfo.u.board.col, - newInfo.u.board.row ); +#ifdef XWFEATURE_CROSSHAIRS + if ( !board->hideCrosshairs ) { + draw = crosshairs_set( board, newInfo.u.board.col, + newInfo.u.board.row ); + } +#endif } if ( ds->dtype == DT_DIVIDER ) { diff --git a/xwords4/linux/gtkmain.c b/xwords4/linux/gtkmain.c index f1ef026ec..a58aadfc1 100644 --- a/xwords4/linux/gtkmain.c +++ b/xwords4/linux/gtkmain.c @@ -2269,6 +2269,9 @@ gtkmain( LaunchParams* params, int argc, char *argv[] ) globals.cGlobals.cp.robotThinkMin = params->robotThinkMin; globals.cGlobals.cp.robotThinkMax = params->robotThinkMax; #endif +#ifdef XWFEATURE_CROSSHAIRS + globals.cGlobals.cp.hideCrosshairs = params->hideCrosshairs; +#endif setupGtkUtilCallbacks( &globals, params->util ); diff --git a/xwords4/linux/linuxmain.c b/xwords4/linux/linuxmain.c index aaa8c4d40..989c206ad 100644 --- a/xwords4/linux/linuxmain.c +++ b/xwords4/linux/linuxmain.c @@ -412,6 +412,9 @@ typedef enum { ,CMD_SKIPCONFIRM ,CMD_VERTICALSCORE ,CMD_NOPEEK +#ifdef XWFEATURE_CROSSHAIRS + ,CMD_NOCROSSHAIRS +#endif ,CMD_ADDPIPE ,CMD_ADDNBS #ifdef XWFEATURE_SEARCHLIMIT @@ -492,6 +495,9 @@ static CmdInfoRec CmdInfoRecs[] = { ,{ CMD_SKIPCONFIRM, false, "skip-confirm", "don't confirm before commit" } ,{ CMD_VERTICALSCORE, false, "vertical", "scoreboard is vertical" } ,{ CMD_NOPEEK, false, "no-peek", "disallow scoreboard tap changing player" } +#ifdef XWFEATURE_CROSSHAIRS + ,{ CMD_NOCROSSHAIRS, false, "hide-crosshairs", "don't show crosshairs on board" } +#endif ,{ CMD_ADDPIPE, true, "with-pipe", "named pipe to listen on for relay msgs" } ,{ CMD_ADDNBS, true, "with-nbs", "nbs socket to listen/reply on for relay msgs" } @@ -1334,7 +1340,7 @@ main( int argc, char** argv ) mainParams.allowPeek = XP_TRUE; mainParams.showRobotScores = XP_FALSE; mainParams.useMmap = XP_TRUE; - + /* serverName = mainParams.info.clientInfo.serverName = "localhost"; */ #if defined PLATFORM_GTK @@ -1549,6 +1555,12 @@ main( int argc, char** argv ) break; case CMD_NOPEEK: mainParams.allowPeek = XP_FALSE; + break; +#ifdef XWFEATURE_CROSSHAIRS + case CMD_NOCROSSHAIRS: + mainParams.hideCrosshairs = XP_TRUE; + break; +#endif case CMD_ADDPIPE: mainParams.pipe = optarg; break; diff --git a/xwords4/linux/main.h b/xwords4/linux/main.h index a22e7b453..7b2efef80 100644 --- a/xwords4/linux/main.h +++ b/xwords4/linux/main.h @@ -80,6 +80,10 @@ typedef struct LaunchParams { #ifdef XWFEATURE_SEARCHLIMIT XP_Bool allowHintRect; #endif +#ifdef XWFEATURE_CROSSHAIRS + XP_Bool hideCrosshairs; +#endif + #ifdef XWFEATURE_SLOW_ROBOT XP_U16 robotThinkMin, robotThinkMax; diff --git a/xwords4/relay/scripts/showinplay.sh b/xwords4/relay/scripts/showinplay.sh index 45999be57..70918f7aa 100755 --- a/xwords4/relay/scripts/showinplay.sh +++ b/xwords4/relay/scripts/showinplay.sh @@ -6,6 +6,7 @@ LIMIT=10000 usage() { echo "usage: $0 [--limit ]" + exit 1 } while [ $# -gt 0 ]; do diff --git a/xwords4/relay/scripts/showmsgs.sh b/xwords4/relay/scripts/showmsgs.sh index eedba6495..95c60efad 100755 --- a/xwords4/relay/scripts/showmsgs.sh +++ b/xwords4/relay/scripts/showmsgs.sh @@ -6,6 +6,7 @@ CONNNAME="" usage() { echo "usage: $0 [--connname ]" + exit 1 } while [ $# -gt 0 ]; do diff --git a/xwords4/relay/scripts/showrecent.sh b/xwords4/relay/scripts/showrecent.sh index b1f445608..5c8992e49 100755 --- a/xwords4/relay/scripts/showrecent.sh +++ b/xwords4/relay/scripts/showrecent.sh @@ -6,6 +6,7 @@ LIMIT=10000 usage() { echo "usage: $0 [--limit ]" + exit 1 } while [ $# -gt 0 ]; do