diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java
index a52cba82d..a40c75b7a 100644
--- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java
+++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java
@@ -185,7 +185,7 @@ public class BoardDelegate extends DelegateBase
final DlgID dlgID = alert.getDlgID();
Log.d( TAG, "makeDialog(%s)", dlgID.toString() );
OnClickListener lstnr;
- AlertDialog.Builder ab = makeAlertBuilder();
+ AlertDialog.Builder ab = makeAlertBuilder(); // used everywhere...
Dialog dialog;
switch ( dlgID ) {
@@ -236,13 +236,15 @@ public class BoardDelegate extends DelegateBase
break;
case DLG_DELETED: {
+ final int gameID = (Integer)params[0];
+ String gameName = GameUtils.getName( m_activity, m_rowid );
ab = ab.setTitle( R.string.query_title )
- .setMessage( R.string.msg_dev_deleted )
+ .setMessage( getString( R.string.msg_dev_deleted_fmt, gameName ) )
.setPositiveButton( android.R.string.ok, null );
lstnr = new OnClickListener() {
public void onClick( DialogInterface dlg,
int whichButton ) {
- deleteAndClose();
+ deleteAndClose( gameID );
}
};
ab.setNegativeButton( R.string.button_delete, lstnr );
@@ -1082,7 +1084,7 @@ public class BoardDelegate extends DelegateBase
dropConViaAndRestart(CommsConnType.COMMS_CONN_RELAY);
break;
case DELETE_AND_EXIT:
- deleteAndClose();
+ deleteAndClose( m_gi.gameID );
break;
case DROP_SMS_ACTION: // do nothing; work done in onNegButton case
alertOrderIncrIfAt( StartAlertOrder.NBS_PERMS );
@@ -1328,12 +1330,12 @@ public class BoardDelegate extends DelegateBase
doStopProgress = true;
break;
case MESSAGE_NOGAME:
- int gameID = (Integer)args[0];
- if ( gameID == m_gi.gameID ) {
+ final int gameID = (Integer)args[0];
+ if ( gameID == m_gi.gameID && !isFinishing() ) {
post( new Runnable() {
@Override
public void run() {
- showDialogFragment( DlgID.DLG_DELETED );
+ showDialogFragment( DlgID.DLG_DELETED, gameID );
}
} );
}
@@ -1405,6 +1407,7 @@ public class BoardDelegate extends DelegateBase
int strID = -1;
DlgID dlgID = DlgID.NONE;
boolean doToast = false;
+ Object[] params = null;
switch ( relayErr ) {
case TOO_MANY:
@@ -1427,7 +1430,7 @@ public class BoardDelegate extends DelegateBase
case DEADGAME:
case DELETED:
- strID = R.string.msg_dev_deleted;
+ params = new Object[] { m_gi.gameID };
dlgID = DlgID.DLG_DELETED;
break;
@@ -1444,13 +1447,14 @@ public class BoardDelegate extends DelegateBase
if ( doToast ) {
showToast( strID );
} else if ( dlgID != DlgID.NONE ) {
- final int strIDf = strID;
final DlgID dlgIDf = dlgID;
+ final Object[] paramsF = null == params
+ ? new Object[] {R.string.relay_alert, getString( strID )}
+ : params;
post( new Runnable() {
@Override
public void run() {
- showDialogFragment( dlgIDf, R.string.relay_alert,
- getString( strIDf ) );
+ showDialogFragment( dlgIDf, paramsF );
}
});
}
@@ -1549,11 +1553,15 @@ public class BoardDelegate extends DelegateBase
means, code );
}
- private void deleteAndClose()
+ private void deleteAndClose( int gameID )
{
- GameUtils.deleteGame( m_activity, m_jniThread.getLock(), false );
- waitCloseGame( false );
- finish();
+ if ( gameID == m_gi.gameID ) {
+ GameUtils.deleteGame( m_activity, m_jniThread.getLock(), false );
+ waitCloseGame( false );
+ finish();
+ } else {
+ Log.e( TAG, "deleteAndClose() called with wrong gameID %d", gameID );
+ }
}
private void askDropRelay()
diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java
index 48ad74048..4c36bf3a7 100644
--- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java
+++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java
@@ -473,7 +473,13 @@ public class DelegateBase implements DlgClickNotify,
runOnUiThread( new Runnable() {
@Override
public void run() {
- show( DBAlert.newInstance( dlgID, params ) );
+ if ( isFinishing() ) {
+ Log.e( TAG, "not posting dlgID %s b/c %s finishing",
+ dlgID, this );
+ DbgUtils.printStack( TAG );
+ } else {
+ show( DBAlert.newInstance( dlgID, params ) );
+ }
}
} );
}
diff --git a/xwords4/android/app/src/main/res/values/strings.xml b/xwords4/android/app/src/main/res/values/strings.xml
index b45caa79e..89fcfe4b7 100644
--- a/xwords4/android/app/src/main/res/values/strings.xml
+++ b/xwords4/android/app/src/main/res/values/strings.xml
@@ -643,9 +643,9 @@
relay. Once this happens there is no way to continue the
game so you might as well delete it (unless you're saving it
for its history etc.) -->
- This game has been deleted on
- another device. You will not be able to play any
- further.
+ The game named \"%1$s\" has been
+ deleted on another device. You will not be able to play any
+ further.