mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-16 15:41:16 +01:00
implement showValues; pause engine to handle events; call srandom
during init; add menus and call notImpl() for them.
This commit is contained in:
parent
839e707069
commit
14372216d0
7 changed files with 93 additions and 17 deletions
|
@ -22,7 +22,7 @@ import org.eehouse.android.xw4.jni.*;
|
||||||
|
|
||||||
public class BoardActivity extends Activity implements XW_UtilCtxt, Runnable {
|
public class BoardActivity extends Activity implements XW_UtilCtxt, Runnable {
|
||||||
|
|
||||||
private static final String CUR_GAME = "cur_game";
|
private static final String CUR_GAME = "cur_game" + XWConstants.GAME_EXTN;
|
||||||
private static final int PICK_TILE_REQUEST = 1;
|
private static final int PICK_TILE_REQUEST = 1;
|
||||||
|
|
||||||
private BoardView m_view;
|
private BoardView m_view;
|
||||||
|
@ -176,6 +176,23 @@ public class BoardActivity extends Activity implements XW_UtilCtxt, Runnable {
|
||||||
case R.id.board_menu_hint_next:
|
case R.id.board_menu_hint_next:
|
||||||
m_jniThread.handle( JNIThread.JNICmd.CMD_NEXT_HINT );
|
m_jniThread.handle( JNIThread.JNICmd.CMD_NEXT_HINT );
|
||||||
break;
|
break;
|
||||||
|
case R.id.board_menu_values:
|
||||||
|
m_jniThread.handle( JNIThread.JNICmd.CMD_VALUES );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R.id.board_menu_game_counts:
|
||||||
|
case R.id.board_menu_game_left:
|
||||||
|
case R.id.board_menu_game_info:
|
||||||
|
case R.id.board_menu_game_history:
|
||||||
|
case R.id.board_menu_game_final:
|
||||||
|
case R.id.board_menu_game_resend:
|
||||||
|
case R.id.board_menu_file_prefs:
|
||||||
|
Utils.notImpl(this);
|
||||||
|
break;
|
||||||
|
case R.id.board_menu_file_about:
|
||||||
|
Utils.about(this);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Utils.logf( "menuitem " + item.getItemId() + " not handled" );
|
Utils.logf( "menuitem " + item.getItemId() + " not handled" );
|
||||||
handled = false;
|
handled = false;
|
||||||
|
@ -261,6 +278,14 @@ public class BoardActivity extends Activity implements XW_UtilCtxt, Runnable {
|
||||||
m_handler.post( this );
|
m_handler.post( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void remSelected() {
|
||||||
|
// Send a message to the main thread or follow the docs to add
|
||||||
|
// a looper inside JNIThread::run()
|
||||||
|
XP_LOGF( "remSelected() can't call notImpl() as hasn't "
|
||||||
|
+ "called Looper.prepare()" );
|
||||||
|
// Utils.notImpl( this );
|
||||||
|
}
|
||||||
|
|
||||||
public void setTimer( int why, int when, int handle )
|
public void setTimer( int why, int when, int handle )
|
||||||
{
|
{
|
||||||
if ( null != m_timers[why] ) {
|
if ( null != m_timers[why] ) {
|
||||||
|
@ -313,9 +338,8 @@ public class BoardActivity extends Activity implements XW_UtilCtxt, Runnable {
|
||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't need this unless we have a scroll thumb to indicate position
|
public boolean engineProgressCallback()
|
||||||
// public void yOffsetChange( int oldOffset, int newOffset )
|
{
|
||||||
// {
|
return !m_jniThread.busy();
|
||||||
// Utils.logf( "yOffsetChange(" + oldOffset + "," + newOffset + ")" );
|
}
|
||||||
// }
|
} // class BoardActivity
|
||||||
}
|
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
package org.eehouse.android.xw4;
|
package org.eehouse.android.xw4;
|
||||||
|
|
||||||
public interface XWConstants {
|
public interface XWConstants {
|
||||||
|
|
||||||
|
public static final String GAME_EXTN = ".xwg";
|
||||||
|
|
||||||
public static final String PICK_TILE_TILES
|
public static final String PICK_TILE_TILES
|
||||||
= "org.eehouse.android.xw4.PICK_TILE_TILES";
|
= "org.eehouse.android.xw4.PICK_TILE_TILES";
|
||||||
public static final String PICK_TILE_TILE
|
public static final String PICK_TILE_TILE
|
||||||
|
|
|
@ -27,6 +27,7 @@ public class JNIThread extends Thread {
|
||||||
CMD_UNDO_LAST,
|
CMD_UNDO_LAST,
|
||||||
CMD_HINT,
|
CMD_HINT,
|
||||||
CMD_NEXT_HINT,
|
CMD_NEXT_HINT,
|
||||||
|
CMD_VALUES,
|
||||||
};
|
};
|
||||||
|
|
||||||
private boolean m_stopped = false;
|
private boolean m_stopped = false;
|
||||||
|
@ -61,6 +62,12 @@ public class JNIThread extends Thread {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean busy()
|
||||||
|
{ // synchronize this!!!
|
||||||
|
int siz = m_queue.size();
|
||||||
|
return siz > 0;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean toggleTray() {
|
private boolean toggleTray() {
|
||||||
boolean draw;
|
boolean draw;
|
||||||
int state = XwJNI.board_getTrayVisState( m_jniGamePtr );
|
int state = XwJNI.board_getTrayVisState( m_jniGamePtr );
|
||||||
|
@ -74,7 +81,7 @@ public class JNIThread extends Thread {
|
||||||
|
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
boolean[] handled = new boolean[1];
|
boolean[] barr = new boolean[1]; // scratch boolean
|
||||||
while ( !m_stopped ) {
|
while ( !m_stopped ) {
|
||||||
QueueElem elem;
|
QueueElem elem;
|
||||||
Object[] args;
|
Object[] args;
|
||||||
|
@ -99,7 +106,7 @@ public class JNIThread extends Thread {
|
||||||
draw = XwJNI.board_handlePenDown( m_jniGamePtr,
|
draw = XwJNI.board_handlePenDown( m_jniGamePtr,
|
||||||
((Integer)args[0]).intValue(),
|
((Integer)args[0]).intValue(),
|
||||||
((Integer)args[1]).intValue(),
|
((Integer)args[1]).intValue(),
|
||||||
handled );
|
barr );
|
||||||
break;
|
break;
|
||||||
case CMD_PEN_MOVE:
|
case CMD_PEN_MOVE:
|
||||||
draw = XwJNI.board_handlePenMove( m_jniGamePtr,
|
draw = XwJNI.board_handlePenMove( m_jniGamePtr,
|
||||||
|
@ -137,7 +144,14 @@ public class JNIThread extends Thread {
|
||||||
XwJNI.board_resetEngine( m_jniGamePtr );
|
XwJNI.board_resetEngine( m_jniGamePtr );
|
||||||
// fallthru
|
// fallthru
|
||||||
case CMD_NEXT_HINT:
|
case CMD_NEXT_HINT:
|
||||||
draw = XwJNI.board_requestHint( m_jniGamePtr, false, null );
|
draw = XwJNI.board_requestHint( m_jniGamePtr, false, barr );
|
||||||
|
if ( barr[0] ) {
|
||||||
|
handle( CMD_NEXT_HINT );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CMD_VALUES:
|
||||||
|
draw = XwJNI.board_toggle_showValues( m_jniGamePtr );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_TIMER_FIRED:
|
case CMD_TIMER_FIRED:
|
||||||
|
|
|
@ -11,11 +11,12 @@ public interface XW_UtilCtxt {
|
||||||
int getSquareBonus( int col, int row );
|
int getSquareBonus( int col, int row );
|
||||||
int userPickTile( /* PickInfo* pi, add once tile-picking is enabled */
|
int userPickTile( /* PickInfo* pi, add once tile-picking is enabled */
|
||||||
int playerNum, String[] texts );
|
int playerNum, String[] texts );
|
||||||
|
boolean engineProgressCallback();
|
||||||
|
|
||||||
void setTimer( int why, int when, int handle );
|
void setTimer( int why, int when, int handle );
|
||||||
void clearTimer( int why );
|
void clearTimer( int why );
|
||||||
void requestTime();
|
void requestTime();
|
||||||
|
void remSelected();
|
||||||
// Don't need this unless we have a scroll thumb to indicate position
|
// Don't need this unless we have a scroll thumb to indicate position
|
||||||
//void yOffsetChange( int oldOffset, int newOffset );
|
//void yOffsetChange( int oldOffset, int newOffset );
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
|
/* -*- compile-command: "cd ../../../../../../; ant reinstall"; -*- */
|
||||||
|
|
||||||
package org.eehouse.android.xw4.jni;
|
package org.eehouse.android.xw4.jni;
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ public class XwJNI {
|
||||||
public static native int board_getTrayVisState( int gamePtr );
|
public static native int board_getTrayVisState( int gamePtr );
|
||||||
public static native boolean board_hideTray( int gamePtr );
|
public static native boolean board_hideTray( int gamePtr );
|
||||||
public static native boolean board_showTray( int gamePtr );
|
public static native boolean board_showTray( int gamePtr );
|
||||||
|
public static native boolean board_toggle_showValues( int gamePtr );
|
||||||
public static native boolean board_commitTurn( int gamePtr );
|
public static native boolean board_commitTurn( int gamePtr );
|
||||||
public static native boolean board_flip( int gamePtr );
|
public static native boolean board_flip( int gamePtr );
|
||||||
public static native boolean board_replaceTiles( int gamePtr );
|
public static native boolean board_replaceTiles( int gamePtr );
|
||||||
|
|
|
@ -17,7 +17,10 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
#include "utilwrapper.h"
|
#include "utilwrapper.h"
|
||||||
#include "andutils.h"
|
#include "andutils.h"
|
||||||
|
|
||||||
|
@ -152,8 +155,11 @@ and_util_hiliteCell( XW_UtilCtxt* uc, XP_U16 col, XP_U16 row )
|
||||||
static XP_Bool
|
static XP_Bool
|
||||||
and_util_engineProgressCallback( XW_UtilCtxt* uc )
|
and_util_engineProgressCallback( XW_UtilCtxt* uc )
|
||||||
{
|
{
|
||||||
/* don't log; this is getting called a lot */
|
AndUtil* util = (AndUtil*)uc;
|
||||||
return XP_TRUE;
|
JNIEnv* env = *util->env;
|
||||||
|
const char* sig = "()Z";
|
||||||
|
jmethodID mid = getMethodID( env, util->j_util, "engineProgressCallback", sig );
|
||||||
|
return (*env)->CallBooleanMethod( env, util->j_util, mid );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is added for java, not part of the util api */
|
/* This is added for java, not part of the util api */
|
||||||
|
@ -215,7 +221,9 @@ and_util_altKeyDown( XW_UtilCtxt* uc )
|
||||||
static XP_U32
|
static XP_U32
|
||||||
and_util_getCurSeconds( XW_UtilCtxt* uc )
|
and_util_getCurSeconds( XW_UtilCtxt* uc )
|
||||||
{
|
{
|
||||||
LOG_FUNC();
|
struct timeval tv;
|
||||||
|
gettimeofday( &tv, NULL );
|
||||||
|
return tv.tv_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,6 +254,11 @@ static void
|
||||||
and_util_remSelected(XW_UtilCtxt* uc)
|
and_util_remSelected(XW_UtilCtxt* uc)
|
||||||
{
|
{
|
||||||
LOG_FUNC();
|
LOG_FUNC();
|
||||||
|
AndUtil* util = (AndUtil*)uc;
|
||||||
|
JNIEnv* env = *util->env;
|
||||||
|
const char* sig = "()V";
|
||||||
|
jmethodID mid = getMethodID( env, util->j_util, "remSelected", sig );
|
||||||
|
(*env)->CallVoidMethod( env, util->j_util, mid );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
/* -*-mode: C; compile-command: "cd XWords4; ../scripts/ndkbuild.sh"; -*- */
|
/* -*-mode: C; compile-command: "cd XWords4; ../scripts/ndkbuild.sh"; -*- */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
|
|
||||||
|
@ -158,6 +160,9 @@ JNIEXPORT jint JNICALL
|
||||||
Java_org_eehouse_android_xw4_jni_XwJNI_initJNI
|
Java_org_eehouse_android_xw4_jni_XwJNI_initJNI
|
||||||
( JNIEnv* env, jclass C )
|
( JNIEnv* env, jclass C )
|
||||||
{
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday( &tv, NULL );
|
||||||
|
srandom( tv.tv_sec );
|
||||||
#ifdef MEM_DEBUG
|
#ifdef MEM_DEBUG
|
||||||
MemPoolCtx* mpool = mpool_make();
|
MemPoolCtx* mpool = mpool_make();
|
||||||
#endif
|
#endif
|
||||||
|
@ -440,6 +445,17 @@ Java_org_eehouse_android_xw4_jni_XwJNI_board_1showTray
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL
|
||||||
|
Java_org_eehouse_android_xw4_jni_XwJNI_board_1toggle_1showValues
|
||||||
|
( JNIEnv* env, jclass C, jint gamePtr )
|
||||||
|
{
|
||||||
|
jboolean result;
|
||||||
|
XWJNI_START();
|
||||||
|
result = board_toggle_showValues( state->game.board );
|
||||||
|
XWJNI_END();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL
|
JNIEXPORT jboolean JNICALL
|
||||||
Java_org_eehouse_android_xw4_jni_XwJNI_board_1commitTurn
|
Java_org_eehouse_android_xw4_jni_XwJNI_board_1commitTurn
|
||||||
(JNIEnv* env, jclass C, jint gamePtr)
|
(JNIEnv* env, jclass C, jint gamePtr)
|
||||||
|
@ -494,7 +510,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_server_1do
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
org_eehouse_android_xw4_jni_XwJNI_board_1resetEngine
|
Java_org_eehouse_android_xw4_jni_XwJNI_board_1resetEngine
|
||||||
(JNIEnv* env, jclass C, jint gamePtr )
|
(JNIEnv* env, jclass C, jint gamePtr )
|
||||||
{
|
{
|
||||||
XWJNI_START();
|
XWJNI_START();
|
||||||
|
@ -512,7 +528,11 @@ Java_org_eehouse_android_xw4_jni_XwJNI_board_1requestHint
|
||||||
XP_Bool tmpbool;
|
XP_Bool tmpbool;
|
||||||
result = board_requestHint( state->game.board, useLimits, &tmpbool );
|
result = board_requestHint( state->game.board, useLimits, &tmpbool );
|
||||||
/* If passed need to do workRemains[0] = tmpbool */
|
/* If passed need to do workRemains[0] = tmpbool */
|
||||||
XP_ASSERT( !workRemains );
|
if ( workRemains ) {
|
||||||
|
jboolean* jelems = (*env)->GetBooleanArrayElements(env, workRemains, NULL );
|
||||||
|
*jelems = tmpbool;
|
||||||
|
(*env)->ReleaseBooleanArrayElements( env, workRemains, jelems, 0 );
|
||||||
|
}
|
||||||
XWJNI_END();
|
XWJNI_END();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue