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.