From ea3e015a8fa3c9aa44e3c60d49bb4e317ae35543 Mon Sep 17 00:00:00 2001 From: Andy2 Date: Sun, 18 Sep 2011 19:10:12 -0700 Subject: [PATCH] use server_listWordsPlayed to implement lookup button: get list from jni, and when it calls back with it launch the browser directly if there's only one, otherwise put up a choice list. Currently the list dismisses after launching the browser once: need to fix that, probably with a custom View. And need to deal with non-English games, and maybe add other choices for lookup than dictionary.com. --- .../android/XWords4/res/values/strings.xml | 1 + .../eehouse/android/xw4/BoardActivity.java | 41 +++++++++++++++---- .../eehouse/android/xw4/jni/JNIThread.java | 7 ++++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/xwords4/android/XWords4/res/values/strings.xml b/xwords4/android/XWords4/res/values/strings.xml index 116ac9e61..fcf980420 100644 --- a/xwords4/android/XWords4/res/values/strings.xml +++ b/xwords4/android/XWords4/res/values/strings.xml @@ -1766,6 +1766,7 @@ Lookup word + Tap to lookup diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java index 357f58907..4092e051b 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java @@ -22,6 +22,7 @@ package org.eehouse.android.xw4; import android.app.Activity; import android.os.Bundle; +import android.text.TextUtils; import android.view.View; import android.view.Menu; import android.view.MenuItem; @@ -72,6 +73,7 @@ public class BoardActivity extends XWActivity private static final int DLG_DELETED = DLG_OKONLY + 8; private static final int DLG_INVITE = DLG_OKONLY + 9; private static final int DLG_SCORES_BLK = DLG_OKONLY + 10; + private static final int DLG_WORDPICK = DLG_OKONLY + 11; private static final int CHAT_REQUEST = 1; private static final int SCREEN_ON_TIME = 10 * 60 * 1000; // 10 mins @@ -95,6 +97,7 @@ public class BoardActivity extends XWActivity private static final String DLG_BYTES = "DLG_BYTES"; private static final String ROOM = "ROOM"; private static final String TOASTSTR = "TOASTSTR"; + private static final String WORDS = "WORDS"; private BoardView m_view; private int m_jniGamePtr; @@ -135,6 +138,7 @@ public class BoardActivity extends XWActivity private String m_room; private String m_toastStr; + private String[] m_words; private int m_missing; private boolean m_haveInvited = false; @@ -237,7 +241,7 @@ public class BoardActivity extends XWActivity lstnr = new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int whichButton ) { - lookupRecent(); + m_jniThread.handle( JNICmd.CMD_WORDS ); } }; ab.setNegativeButton( R.string.button_lookup, lstnr ); @@ -311,6 +315,19 @@ public class BoardActivity extends XWActivity .create(); } break; + case DLG_WORDPICK: + dialog = new AlertDialog.Builder( this ) + .setTitle( R.string.title_lookup ) + .setItems( m_words, new DialogInterface.OnClickListener() { + public void onClick( DialogInterface dialog, + int item ) { + lookupWord( m_words[item] ); + } + } ) + .setNegativeButton( R.string.button_cancel, null ) + .create(); + Utils.setRemoveOnDismiss( this, dialog, id ); + break; default: // just drop it; super.onCreateDialog likely failed break; @@ -398,6 +415,7 @@ public class BoardActivity extends XWActivity outState.putString( DLG_BYTES, m_dlgBytes ); outState.putString( ROOM, m_room ); outState.putString( TOASTSTR, m_toastStr ); + outState.putStringArray( WORDS, m_words ); } private void getBundledData( Bundle bundle ) @@ -408,6 +426,7 @@ public class BoardActivity extends XWActivity m_dlgBytes = bundle.getString( DLG_BYTES ); m_room = bundle.getString( ROOM ); m_toastStr = bundle.getString( TOASTSTR ); + m_words = bundle.getStringArray( WORDS ); } } @@ -1242,6 +1261,17 @@ public class BoardActivity extends XWActivity adjustTradeVisibility(); } break; + case JNIThread.GOT_WORDS: + m_words = + TextUtils.split( (String)msg.obj, "\n" ); + if ( 0 == m_words.length ) { + // drop it + } else if ( 1 == m_words.length ) { + lookupWord( m_words[0] ); + } else { + showDialog( DLG_WORDPICK ); + } + break; } } }; @@ -1514,13 +1544,10 @@ public class BoardActivity extends XWActivity } } - private void lookupRecent() + private void lookupWord( String word ) { - // String[] words = XwJNI.model_getLastTurnWords( m_jniGamePtr ); - String[] words = { "mastodon", "elephant" }; - String fmt = getString( R.string.word_lookupf ); - String dict_url = String.format( fmt, words[0] ); + String dict_url = String.format( fmt, word ); Uri uri = Uri.parse( dict_url ); Intent intent = new Intent( Intent.ACTION_VIEW, uri ); intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); @@ -1529,8 +1556,6 @@ public class BoardActivity extends XWActivity startActivity( intent ); } catch ( android.content.ActivityNotFoundException anfe ) { Utils.logf( "%s", anfe.toString() ); - // Toast.makeText( this, R.string.no_download_warning, - // Toast.LENGTH_SHORT).show(); } } } // class BoardActivity diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java index 15a1d5b76..c95ac244f 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java @@ -77,6 +77,7 @@ public class JNIThread extends Thread { CMD_RESEND, CMD_HISTORY, CMD_FINAL, + CMD_WORDS, CMD_ENDGAME, CMD_POST_OVER, CMD_SENDCHAT, @@ -88,6 +89,7 @@ public class JNIThread extends Thread { public static final int DIALOG = 3; public static final int QUERY_ENDGAME = 4; public static final int TOOLBAR_STATES = 5; + public static final int GOT_WORDS = 6; public class GameStateInfo implements Cloneable { public int visTileCount; @@ -490,6 +492,11 @@ public class JNIThread extends Thread { } break; + case CMD_WORDS: + String words = XwJNI.server_listWordsPlayed( m_jniGamePtr, 1 ); + Message.obtain( m_handler, GOT_WORDS, words ).sendToTarget(); + break; + case CMD_ENDGAME: XwJNI.server_endGame( m_jniGamePtr ); draw = true;