handle final scores menuitem: add server_endGame to jni and new

dialog/mechanism to call back and forth between threads to query and
end game on positive response.
This commit is contained in:
eehouse 2010-02-27 18:03:07 +00:00
parent 142492ad85
commit cf9c952fc2
5 changed files with 58 additions and 1 deletions

View file

@ -910,3 +910,14 @@ Java_org_eehouse_android_xw4_jni_XwJNI_comms_1resendAll
(void)comms_resendAll( state->game.comms );
XWJNI_END();
}
JNIEXPORT void JNICALL
Java_org_eehouse_android_xw4_jni_XwJNI_server_1endGame
( JNIEnv* env, jclass C, jint gamePtr )
{
XWJNI_START();
XP_ASSERT( !!state->game.server );
server_endGame( state->game.server );
XWJNI_END();
}

View file

@ -227,6 +227,9 @@
<string name="badwords_lost"> Turn lost.</string>
<string name="badwords_title">Illegal word[s]</string>
<string name="ids_endnow">Are you sure you want to end the game now?</string>
<!-- These do not require localization -->
<string name="key_color_tiles">key_color_tiles</string>
<string name="key_show_arrow">key_show_arrow</string>

View file

@ -36,6 +36,7 @@ public class BoardActivity extends Activity implements UtilCtxt {
private static final int DLG_BADWORDS = 2;
private static final int QUERY_REQUEST_BLK = 3;
private static final int PICK_TILE_REQUEST_BLK = 4;
private static final int QUERY_ENDGAME = 5;
private BoardView m_view;
private int m_jniGamePtr;
@ -136,6 +137,26 @@ public class BoardActivity extends Activity implements UtilCtxt {
dialog = ab.create();
dialog.setOnDismissListener( makeODL() );
break;
case QUERY_ENDGAME:
dialog = new AlertDialog.Builder( this )
.setTitle( R.string.query_title )
.setMessage( R.string.ids_endnow )
.setPositiveButton( R.string.button_yes,
new DialogInterface.OnClickListener() {
public void onClick( DialogInterface dlg,
int item ) {
m_jniThread.handle(JNICmd.CMD_ENDGAME);
}
})
.setNegativeButton( R.string.button_no,
new DialogInterface.OnClickListener() {
public void onClick( DialogInterface dlg,
int item ) {
// do nothing
}
})
.create();
break;
}
return dialog;
} // onCreateDialog
@ -231,6 +252,9 @@ public class BoardActivity extends Activity implements UtilCtxt {
m_dlgTitle = msg.arg1;
showDialog( DLG_OKONLY );
break;
case JNIThread.QUERY_ENDGAME:
showDialog( QUERY_ENDGAME );
break;
}
}
} );
@ -343,7 +367,8 @@ public class BoardActivity extends Activity implements UtilCtxt {
break;
case R.id.board_menu_game_final:
Utils.notImpl(this);
m_jniThread.handle( JNIThread.JNICmd.CMD_FINAL,
R.string.history_title );
break;
case R.id.board_menu_game_resend:

View file

@ -41,12 +41,15 @@ public class JNIThread extends Thread {
CMD_REMAINING,
CMD_RESEND,
CMD_HISTORY,
CMD_FINAL,
CMD_ENDGAME,
CMD_POST_OVER,
};
public static final int RUNNING = 1;
public static final int DRAW = 2;
public static final int DIALOG = 3;
public static final int QUERY_ENDGAME = 4;
private boolean m_stopped = false;
private int m_jniGamePtr;
@ -303,6 +306,20 @@ public class JNIThread extends Thread {
);
break;
case CMD_FINAL:
if ( XwJNI.server_getGameIsOver( m_jniGamePtr ) ) {
String msg = XwJNI.server_writeFinalScores( m_jniGamePtr );
sendForDialog( R.string.query_title, msg );
} else {
Message.obtain( m_handler, QUERY_ENDGAME ).sendToTarget();
draw = true;
}
break;
case CMD_ENDGAME:
XwJNI.server_endGame( m_jniGamePtr );
break;
case CMD_POST_OVER:
sendForDialog( ((Integer)args[0]).intValue(),
XwJNI.server_writeFinalScores( m_jniGamePtr ) );

View file

@ -123,6 +123,7 @@ public class XwJNI {
public static native boolean server_getGameIsOver( int gamePtr );
public static native String server_writeFinalScores( int gamePtr );
public static native void server_initClientConnection( int gamePtr );
public static native void server_endGame( int gamePtr );
// Comms
public static native void comms_start( int gamePtr );