From 53748e352accc9f74256f94df1ebac516671267c Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 14 Nov 2013 21:47:01 -0800 Subject: [PATCH] fix games created after reset of prefs from disappearing: they were being saved with groupid of -1, so now when the default's not been sit choose and pass in the first group. --- .../src/org/eehouse/android/xw4/DBUtils.java | 51 ++++++++++++------- .../org/eehouse/android/xw4/GameUtils.java | 23 +++------ .../org/eehouse/android/xw4/GamesList.java | 22 ++++++-- .../eehouse/android/xw4/NewGameActivity.java | 1 + .../src/org/eehouse/android/xw4/XWPrefs.java | 7 ++- 5 files changed, 65 insertions(+), 39 deletions(-) diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java index e77420fae..74930b6e2 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java @@ -55,6 +55,7 @@ import org.eehouse.android.xw4.DictUtils.DictLoc; public class DBUtils { public static final int ROWID_NOTFOUND = -1; + public static final int GROUPID_UNSPEC = -1; private static final String DICTS_SEP = ","; @@ -754,15 +755,10 @@ public class DBUtils { } } - public static GameLock saveNewGame( Context context, byte[] bytes ) - { - long groupID = XWPrefs.getDefaultNewGameGroup( context ); - return saveNewGame( context, bytes, groupID ); - } - public static GameLock saveNewGame( Context context, byte[] bytes, long groupID ) { + Assert.assertTrue( GROUPID_UNSPEC != groupID ); GameLock lock = null; initDB( context ); @@ -807,7 +803,7 @@ public class DBUtils { updateRow( context, DBHelper.TABLE_NAME_SUM, rowid, values ); setCached( rowid, null ); // force reread - if ( -1 != rowid ) { // Means new game? + if ( ROWID_NOTFOUND != rowid ) { // Means new game? notifyListeners( rowid, false ); } invalGroupsCache(); @@ -817,7 +813,7 @@ public class DBUtils { public static byte[] loadGame( Context context, GameLock lock ) { long rowid = lock.getRowid(); - Assert.assertTrue( -1 != rowid ); + Assert.assertTrue( ROWID_NOTFOUND != rowid ); byte[] result = getCached( rowid ); if ( null == result ) { initDB( context ); @@ -869,7 +865,7 @@ public class DBUtils { public static int getVisID( Context context, long rowid ) { - int result = -1; + int result = ROWID_NOTFOUND; initDB( context ); synchronized( s_dbHelper ) { SQLiteDatabase db = s_dbHelper.getReadableDatabase(); @@ -1004,9 +1000,9 @@ public class DBUtils { Iterator iter = result.keySet().iterator(); while ( iter.hasNext() ) { - Long id = iter.next(); - GameGroupInfo ggi = result.get( id ); - readTurnInfo( db, id, ggi ); + Long groupID = iter.next(); + GameGroupInfo ggi = result.get( groupID ); + readTurnInfo( db, groupID, ggi ); } db.close(); @@ -1016,13 +1012,31 @@ public class DBUtils { return s_groupsCache; } // getGroups - private static void readTurnInfo( SQLiteDatabase db, long id, + // public static void unhideTo( Context context, long groupID ) + // { + // Assert.assertTrue( GROUPID_UNSPEC != groupID ); + // initDB( context ); + // synchronized( s_dbHelper ) { + // SQLiteDatabase db = s_dbHelper.getWritableDatabase(); + // ContentValues values = new ContentValues(); + // values.put( DBHelper.GROUPID, groupID ); + // String selection = String.format( "%s = %d", DBHelper.GROUPID, + // GROUPID_UNSPEC ); + // long result = db.update( DBHelper.TABLE_NAME_SUM, + // values, selection, null ); + // db.close(); + + // notifyListeners( ROWID_NOTFOUND, true ); + // } + // } + + private static void readTurnInfo( SQLiteDatabase db, long groupID, GameGroupInfo ggi ) { String[] columns = { DBHelper.LASTMOVE, DBHelper.GIFLAGS, DBHelper.TURN }; String orderBy = DBHelper.LASTMOVE; - String selection = String.format( "%s=%d", DBHelper.GROUPID, id ); + String selection = String.format( "%s=%d", DBHelper.GROUPID, groupID ); Cursor cursor = db.query( DBHelper.TABLE_NAME_SUM, columns, selection, null, // args @@ -1100,7 +1114,7 @@ public class DBUtils { public static long getGroupForGame( Context context, long rowid ) { - long result = ROWID_NOTFOUND; + long result = GROUPID_UNSPEC; initDB( context ); String[] columns = { DBHelper.GROUPID }; String selection = String.format( ROW_ID_FMT, rowid ); @@ -1125,7 +1139,7 @@ public class DBUtils { public static long addGroup( Context context, String name ) { - long rowid = ROWID_NOTFOUND; + long rowid = GROUPID_UNSPEC; if ( null != name && 0 < name.length() ) { HashMap gameInfo = getGroups( context ); if ( null == gameInfo.get( name ) ) { @@ -1185,10 +1199,11 @@ public class DBUtils { } // Change group id of a game - public static void moveGame( Context context, long gameid, long groupid ) + public static void moveGame( Context context, long gameid, long groupID ) { + Assert.assertTrue( GROUPID_UNSPEC != groupID ); ContentValues values = new ContentValues(); - values.put( DBHelper.GROUPID, groupid ); + values.put( DBHelper.GROUPID, groupID ); updateRow( context, DBHelper.TABLE_NAME_SUM, gameid, values ); } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java index 950ea8f03..ba31bd677 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java @@ -50,7 +50,6 @@ public class GameUtils { public static final String INTENT_KEY_ROWID = "rowid"; public static final String INTENT_FORRESULT_ROWID = "forresult"; - private static final long GROUPID_UNSPEC = -1; private static Integer s_minScreen; public static class NoSuchGameException extends RuntimeException { @@ -376,21 +375,15 @@ public class GameUtils { return DBUtils.saveGame( context, lock, bytes, setCreate ); } - public static GameLock saveNewGame( Context context, byte[] bytes ) + public static GameLock saveNewGame( Context context, byte[] bytes, + long groupID ) { - return DBUtils.saveNewGame( context, bytes ); - } - - public static long saveNew( Context context, CurGameInfo gi ) - { - return saveNew( context, gi, GROUPID_UNSPEC ); + return DBUtils.saveNewGame( context, bytes, groupID ); } public static long saveNew( Context context, CurGameInfo gi, long groupID ) { - if ( GROUPID_UNSPEC == groupID ) { - groupID = XWPrefs.getDefaultNewGameGroup( context ); - } + Assert.assertTrue( DBUtils.GROUPID_UNSPEC != groupID ); long rowid = DBUtils.ROWID_NOTFOUND; byte[] bytes = XwJNI.gi_to_stream( gi ); @@ -464,7 +457,7 @@ public class GameUtils { public static long makeNewNetGame( Context context, NetLaunchInfo info ) { - return makeNewNetGame( context, GROUPID_UNSPEC, info.room, + return makeNewNetGame( context, DBUtils.GROUPID_UNSPEC, info.room, info.inviteID, info.lang, info.dict, info.nPlayersT ); } @@ -473,8 +466,8 @@ public class GameUtils { CommsAddrRec addr, int lang, int nPlayersT, int nPlayersH ) { - return makeNewBTGame( context, GROUPID_UNSPEC, gameID, addr, lang, - nPlayersT, nPlayersH ); + return makeNewBTGame( context, DBUtils.GROUPID_UNSPEC, gameID, addr, + lang, nPlayersT, nPlayersH ); } public static long makeNewBTGame( Context context, long groupID, @@ -496,7 +489,7 @@ public class GameUtils { int lang, String dict, int nPlayersT, int nPlayersH ) { - return makeNewSMSGame( context, GROUPID_UNSPEC, gameID, addr, + return makeNewSMSGame( context, DBUtils.GROUPID_UNSPEC, gameID, addr, lang, dict, nPlayersT, nPlayersH ); } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java index 93b4aedc6..781b46b35 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java @@ -94,7 +94,7 @@ public class GamesList extends XWExpandableListActivity }; private static final int[] DEBUG_ITEMS = { - R.id.games_menu_loaddb, + // R.id.games_menu_loaddb, R.id.games_menu_storedb, R.id.games_menu_checkupdates, }; @@ -483,11 +483,12 @@ public class GamesList extends XWExpandableListActivity // DBUtils.DBChangeListener interface public void gameSaved( final long rowid, final boolean countChanged ) { - post( new Runnable() { + runOnUiThread( new Runnable() { public void run() { if ( countChanged ) { onContentChanged(); } else { + Assert.assertTrue( 0 <= rowid ); m_adapter.inval( rowid ); } } @@ -727,7 +728,7 @@ public class GamesList extends XWExpandableListActivity boolean changeContent = false; boolean dropSels = false; int groupPos = getSelGroupPos(); - long groupID = -1; + long groupID = DBUtils.GROUPID_UNSPEC; if ( 0 <= groupPos ) { groupID = m_adapter.getGroupIDFor( groupPos ); } @@ -820,7 +821,8 @@ public class GamesList extends XWExpandableListActivity byte[] stream = GameUtils.savedGame( GamesList.this, selRowIDs[0] ); GameLock lock = - GameUtils.saveNewGame( GamesList.this, stream ); + GameUtils.saveNewGame( GamesList.this, stream, + getSaveGroup() ); DBUtils.saveSummary( GamesList.this, lock, smry ); m_selGames.add( lock.getRowid() ); lock.unlock(); @@ -1053,6 +1055,9 @@ public class GamesList extends XWExpandableListActivity private void startNewGameActivity( long groupID ) { + if ( DBUtils.GROUPID_UNSPEC == groupID ) { + groupID = getSaveGroup(); + } NewGameActivity.startActivity( this, groupID ); } @@ -1332,6 +1337,15 @@ public class GamesList extends XWExpandableListActivity } } + private long getSaveGroup() + { + long groupID = XWPrefs.getDefaultNewGameGroup( this ); + if ( DBUtils.GROUPID_UNSPEC == groupID ) { + groupID = m_adapter.getGroupIDFor( 0 ); + } + return groupID; + } + public static void onGameDictDownload( Context context, Intent intent ) { intent.setClass( context, GamesList.class ); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/NewGameActivity.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/NewGameActivity.java index c45bd58bb..89d445080 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/NewGameActivity.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/NewGameActivity.java @@ -79,6 +79,7 @@ public class NewGameActivity extends XWActivity { getBundledData( savedInstanceState ); m_groupID = getIntent().getLongExtra( GROUPID_EXTRA, -1 ); + Assert.assertTrue( -1 != m_groupID ); setContentView( R.layout.new_game ); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWPrefs.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWPrefs.java index 1a2b31868..0287377e0 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWPrefs.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/XWPrefs.java @@ -27,6 +27,8 @@ import android.text.TextUtils; import com.google.android.gcm.GCMRegistrar; import java.util.ArrayList; +import junit.framework.Assert; + public class XWPrefs { public static boolean getSMSEnabled( Context context ) @@ -301,12 +303,13 @@ public class XWPrefs { public static long getDefaultNewGameGroup( Context context ) { - return getPrefsLong( context, R.string.key_default_group, - DBUtils.ROWID_NOTFOUND ); + return getPrefsLong( context, R.string.key_default_group, + DBUtils.GROUPID_UNSPEC ); } public static void setDefaultNewGameGroup( Context context, long val ) { + Assert.assertTrue( DBUtils.GROUPID_UNSPEC != val ); setPrefsLong( context, R.string.key_default_group, val ); }