diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java index 082fcb26d..6e4540592 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java @@ -567,6 +567,13 @@ public class BoardDelegate extends DelegateBase ConnStatusHandler.setHandler( this ); } + @Override + protected void onDestroy() + { + GamesListDelegate.boardDestroyed( m_rowid ); + super.onDestroy(); + } + protected void onSaveInstanceState( Bundle outState ) { outState.putInt( DLG_TITLE, m_dlgTitle ); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java index d8c614b00..0c3b2f132 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java @@ -501,6 +501,7 @@ public class GamesListDelegate extends ListDelegateBase private int m_fieldID; private Activity m_activity; + private static GamesListDelegate s_self; private GamesListDelegator m_delegator; private GameListAdapter m_adapter; private Handler m_handler; @@ -516,7 +517,7 @@ public class GamesListDelegate extends ListDelegateBase private String m_nameField; private NetLaunchInfo m_netLaunchInfo; private GameNamer m_namer; - private long m_launchedGame = DBUtils.ROWID_NOTFOUND; + private Set m_launchedGames; private boolean m_menuPrepared; private Set m_selGames; private Set m_selGroupIDs; @@ -527,6 +528,8 @@ public class GamesListDelegate extends ListDelegateBase super( delegator, sis, R.menu.games_list_menu ); m_delegator = delegator; m_activity = delegator.getActivity(); + m_launchedGames = new HashSet(); + s_self = this; } protected Dialog onCreateDialog( int id ) @@ -792,7 +795,7 @@ public class GamesListDelegate extends ListDelegateBase protected void onNewIntent( Intent intent ) { // super.onNewIntent( intent ); - m_launchedGame = DBUtils.ROWID_NOTFOUND; + m_launchedGames.clear(); Assert.assertNotNull( intent ); invalRelayIDs( intent.getStringArrayExtra( RELAYIDS_EXTRA ) ); m_adapter.reloadGame( intent.getLongExtra( ROWID_EXTRA, -1 ) ); @@ -813,7 +816,7 @@ public class GamesListDelegate extends ListDelegateBase protected void onDestroy() { DBUtils.clearDBChangeListener( this ); - // super.onDestroy(); + s_self = null; } protected void onSaveInstanceState( Bundle outState ) @@ -855,10 +858,10 @@ public class GamesListDelegate extends ListDelegateBase if ( hasFocus ) { updateField(); - if ( DBUtils.ROWID_NOTFOUND != m_launchedGame ) { - setSelGame( m_launchedGame ); - m_launchedGame = DBUtils.ROWID_NOTFOUND; - } + // if ( DBUtils.ROWID_NOTFOUND != m_launchedGame ) { + // setSelGame( m_launchedGame ); + // m_launchedGame = DBUtils.ROWID_NOTFOUND; + // } } } @@ -913,9 +916,9 @@ public class GamesListDelegate extends ListDelegateBase // dialog in case it was dismissed. That way it to check for // an empty room name. if ( clicked instanceof GameListItem ) { - if ( DBUtils.ROWID_NOTFOUND == m_launchedGame ) { - long rowid = ((GameListItem)clicked).getRowID(); - DbgUtils.logf( "GamesListDelegate.itemClicked(%d)", rowid ); + long rowid = ((GameListItem)clicked).getRowID(); + DbgUtils.logf( "GamesListDelegate.itemClicked(%d)", rowid ); + if ( ! m_launchedGames.contains( rowid ) ) { showNotAgainDlgThen( R.string.not_again_newselect, R.string.key_notagain_newselect, Action.OPEN_GAME, rowid, @@ -1710,8 +1713,8 @@ public class GamesListDelegate extends ListDelegateBase private void launchGame( long rowid, boolean invited ) { DbgUtils.logf( "launchGame(%d)", rowid ); - if ( DBUtils.ROWID_NOTFOUND == m_launchedGame ) { - m_launchedGame = rowid; + if ( ! m_launchedGames.contains( rowid ) ) { + m_launchedGames.add( rowid ); m_delegator.launchGame( rowid, invited ); } } @@ -1826,6 +1829,13 @@ public class GamesListDelegate extends ListDelegateBase // return adapter; } + public static void boardDestroyed( long rowid ) + { + if ( null != s_self ) { + s_self.m_launchedGames.remove( rowid ); + } + } + public static void onGameDictDownload( Context context, Intent intent ) { intent.setClass( context, GamesListActivity.class );