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