mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-04 20:46:28 +01:00
fix NPE and let GameSummary stay until replaced
GameListItem was clearing its summary when kicking off a replacement load. Instead keep the old around in case somebody wants it (e.g. to figure out what menus to enable) until the reload finishes. Also add logging of how long loading takes. I think a cache might be called for.
This commit is contained in:
parent
6193c376db
commit
122b270025
3 changed files with 20 additions and 8 deletions
|
@ -131,6 +131,7 @@ public class DBUtils {
|
|||
public static GameSummary getSummary( Context context,
|
||||
GameLock lock )
|
||||
{
|
||||
long startMS = System.currentTimeMillis();
|
||||
initDB( context );
|
||||
GameSummary summary = null;
|
||||
String[] columns = { ROW_ID,
|
||||
|
@ -154,8 +155,8 @@ public class DBUtils {
|
|||
selection, null, null, null, null );
|
||||
if ( 1 == cursor.getCount() && cursor.moveToFirst() ) {
|
||||
summary = new GameSummary();
|
||||
summary.nMoves = cursor.getInt(cursor.
|
||||
getColumnIndex(DBHelper.NUM_MOVES));
|
||||
summary.nMoves = cursor
|
||||
.getInt( cursor.getColumnIndex(DBHelper.NUM_MOVES) );
|
||||
summary.nPlayers =
|
||||
cursor.getInt(cursor.
|
||||
getColumnIndex(DBHelper.NUM_PLAYERS));
|
||||
|
@ -264,6 +265,11 @@ public class DBUtils {
|
|||
if ( null == summary && lock.canWrite() ) {
|
||||
summary = GameUtils.summarize( context, lock );
|
||||
}
|
||||
long endMS = System.currentTimeMillis();
|
||||
|
||||
// Might want to be cacheing this...
|
||||
Log.d( TAG, "getSummary(rowid=%d) => %s (took %dms)",
|
||||
lock.getRowid(), summary, endMS - startMS );
|
||||
return summary;
|
||||
} // getSummary
|
||||
|
||||
|
|
|
@ -91,9 +91,9 @@ public class GameListItem extends LinearLayout
|
|||
m_dsdel = new DrawSelDelegate( this );
|
||||
}
|
||||
|
||||
// Might return null!!
|
||||
public GameSummary getSummary()
|
||||
{
|
||||
Assert.assertNotNull( m_summary );
|
||||
return m_summary;
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,6 @@ public class GameListItem extends LinearLayout
|
|||
public void forceReload()
|
||||
{
|
||||
// DbgUtils.logf( "GameListItem.forceReload: rowid=%d", m_rowid );
|
||||
m_summary = null;
|
||||
setLoaded( false );
|
||||
// Apparently it's impossible to reliably cancel an existing
|
||||
// AsyncTask, so let it complete, but drop the results as soon
|
||||
|
|
|
@ -1624,6 +1624,7 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
return handled;// || super.onOptionsItemSelected( item );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateContextMenu( ContextMenu menu, View view,
|
||||
ContextMenuInfo menuInfo )
|
||||
{
|
||||
|
@ -1664,9 +1665,15 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
enable = BoardDelegate.rematchSupported( m_activity, rowID );
|
||||
Utils.setItemVisible( menu, R.id.games_game_rematch, enable );
|
||||
|
||||
boolean isMultiGame = item.getSummary().isMultiGame();
|
||||
enable = isMultiGame
|
||||
&& (BuildConfig.DEBUG || XWPrefs.getDebugEnabled( m_activity ));
|
||||
// Deal with possibility summary's temporarily null....
|
||||
GameSummary summary = item.getSummary();
|
||||
enable = false;
|
||||
boolean isMultiGame = false;
|
||||
if ( null != summary ) {
|
||||
isMultiGame = summary.isMultiGame();
|
||||
enable = isMultiGame
|
||||
&& (BuildConfig.DEBUG || XWPrefs.getDebugEnabled( m_activity ));
|
||||
}
|
||||
Utils.setItemVisible( menu, R.id.games_game_invites, enable );
|
||||
Utils.setItemVisible( menu, R.id.games_game_netstats, isMultiGame );
|
||||
|
||||
|
@ -1675,7 +1682,7 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
Utils.setItemVisible( menu, R.id.games_game_reset, enable );
|
||||
}
|
||||
}
|
||||
}
|
||||
} // onCreateContextMenu
|
||||
|
||||
public boolean onContextItemSelected( MenuItem item )
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue