mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-04 20:46:28 +01:00
fix problems with params[] serialization
Was passing through DlgState params a number of classes that weren't serializable or that didn't have equals() methods required for DEBUG assertions to pass. Added versions of equals() that just call super in non-DEBUG case since it's a lot of code and isn't required except for testing. (Serialization of course is.)
This commit is contained in:
parent
d55d9573e4
commit
101c2ff8f2
7 changed files with 228 additions and 42 deletions
|
@ -73,21 +73,27 @@ public class DlgState implements Parcelable {
|
|||
public DlgState setTitle( int id )
|
||||
{ m_titleId = id; return this; }
|
||||
|
||||
// @Override
|
||||
// public String toString()
|
||||
// {
|
||||
// String params = "";
|
||||
// if ( null != m_params ) {
|
||||
// List<String> strs = new ArrayList<>();
|
||||
// for (Object obj : m_params) {
|
||||
// strs.add(String.format("%s", obj));
|
||||
// }
|
||||
// params = TextUtils.join( ",", strs );
|
||||
// }
|
||||
// return String.format("[msg: %s; key: %s; action: %s; pair %s: na: %s; pos: %d; neg: %d; title: %d; params: %s]",
|
||||
// m_msg, m_prefsKey, m_action, m_pair, m_onNAChecked,
|
||||
// m_posButton, m_negButton, m_titleId, params );
|
||||
// }
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
if ( BuildConfig.DEBUG) {
|
||||
String params = "";
|
||||
if ( null != m_params ) {
|
||||
List<String> strs = new ArrayList<>();
|
||||
for (Object obj : m_params) {
|
||||
strs.add(String.format("%s", obj));
|
||||
}
|
||||
params = TextUtils.join( ",", strs );
|
||||
}
|
||||
return String.format("[id: %s; msg: %s; key: %s; action: %s; pair %s; "
|
||||
+ "na: %s; pos: %d; neg: %d; title: %d; "
|
||||
+ "params: %s]",
|
||||
m_id, m_msg, m_prefsKey, m_action, m_pair, m_onNAChecked,
|
||||
m_posButton, m_negButton, m_titleId, params );
|
||||
} else {
|
||||
return super.toString();
|
||||
}
|
||||
}
|
||||
|
||||
// I only need this if BuildConfig.DEBUG is true...
|
||||
@Override
|
||||
|
|
|
@ -862,7 +862,8 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
|
||||
lstnr = new OnClickListener() {
|
||||
public void onClick( DialogInterface dlg, int item ) {
|
||||
curThis().makeThenLaunchOrConfigure( edit, true, false );
|
||||
String name = edit.getText().toString();
|
||||
curThis().makeThenLaunchOrConfigure( name, true, false );
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -874,7 +875,8 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
if ( canDoDefaults ) {
|
||||
lstnr2 = new OnClickListener() {
|
||||
public void onClick( DialogInterface dlg, int item ) {
|
||||
curThis().makeThenLaunchOrConfigure( edit, false, false );
|
||||
String name = edit.getText().toString();
|
||||
curThis().makeThenLaunchOrConfigure( name, false, false );
|
||||
}
|
||||
};
|
||||
ab.setNegativeButton( R.string.use_defaults, lstnr2 );
|
||||
|
@ -2543,7 +2545,7 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
|
||||
// Returns true if user has what looks like a default name and has not
|
||||
// said he wants us to stop bugging him about it.
|
||||
private boolean askingChangeName( EditText edit, boolean doConfigure )
|
||||
private boolean askingChangeName( String name, boolean doConfigure )
|
||||
{
|
||||
boolean asking = false;
|
||||
boolean skipAsk = XWPrefs
|
||||
|
@ -2563,7 +2565,7 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
makeConfirmThenBuilder( msg, Action.NEW_GAME_DFLT_NAME )
|
||||
.setOnNA( Action.SET_NA_DEFAULTNAME )
|
||||
.setNegButton( R.string.button_later )
|
||||
.setParams( edit, doConfigure )
|
||||
.setParams( name, doConfigure )
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
@ -2574,19 +2576,18 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
{
|
||||
boolean handled = null != m_newGameParams;
|
||||
if ( handled ) {
|
||||
EditText edit = (EditText)m_newGameParams[0];
|
||||
String name = (String)m_newGameParams[0];
|
||||
boolean doConfigure = (Boolean)m_newGameParams[1];
|
||||
m_newGameParams = null;
|
||||
makeThenLaunchOrConfigure( edit, doConfigure, true );
|
||||
makeThenLaunchOrConfigure( name, doConfigure, true );
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
private void makeThenLaunchOrConfigure( EditText edit, boolean doConfigure,
|
||||
private void makeThenLaunchOrConfigure( String name, boolean doConfigure,
|
||||
boolean skipAsk )
|
||||
{
|
||||
if ( skipAsk || !askingChangeName( edit, doConfigure ) ) {
|
||||
String name = edit.getText().toString();
|
||||
if ( skipAsk || !askingChangeName( name, doConfigure ) ) {
|
||||
long rowID;
|
||||
long groupID = 1 == m_mySIS.selGroupIDs.size()
|
||||
? m_mySIS.selGroupIDs.iterator().next() : DBUtils.GROUPID_UNSPEC;
|
||||
|
|
|
@ -26,21 +26,23 @@ import android.content.Intent;
|
|||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.eehouse.android.xw4.jni.CommsAddrRec;
|
||||
import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnType;
|
||||
import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnTypeSet;
|
||||
import org.eehouse.android.xw4.jni.CurGameInfo;
|
||||
import org.eehouse.android.xw4.jni.GameSummary;
|
||||
import org.eehouse.android.xw4.loc.LocUtils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Iterator;
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class NetLaunchInfo {
|
||||
import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnType;
|
||||
import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnTypeSet;
|
||||
import org.eehouse.android.xw4.jni.CommsAddrRec;
|
||||
import org.eehouse.android.xw4.jni.CurGameInfo;
|
||||
import org.eehouse.android.xw4.jni.GameSummary;
|
||||
import org.eehouse.android.xw4.loc.LocUtils;
|
||||
|
||||
public class NetLaunchInfo implements Serializable {
|
||||
private static final String TAG = NetLaunchInfo.class.getSimpleName();
|
||||
private static final String ADDRS_KEY = "ad";
|
||||
private static final String PHONE_KEY = "phn";
|
||||
|
@ -108,6 +110,8 @@ public class NetLaunchInfo {
|
|||
p2pMacAddress = bundle.getString( MultiService.P2P_MAC_ADDRESS );
|
||||
|
||||
m_addrs = new CommsConnTypeSet( bundle.getInt( ADDRS_KEY ) );
|
||||
|
||||
Utils.testSerialization( this );
|
||||
}
|
||||
|
||||
public static NetLaunchInfo makeFrom( Bundle bundle )
|
||||
|
@ -317,6 +321,45 @@ public class NetLaunchInfo {
|
|||
bundle.putInt( ADDRS_KEY, flags );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
NetLaunchInfo other = null;
|
||||
boolean result = null != obj && obj instanceof NetLaunchInfo;
|
||||
if ( result ) {
|
||||
other = (NetLaunchInfo)obj;
|
||||
result = ((null == gameName) ? (null == other.gameName)
|
||||
: gameName.equals(other.gameName))
|
||||
&& ((null == dict) ? (null == other.dict)
|
||||
: dict.equals(other.dict))
|
||||
&& lang == other.lang
|
||||
&& forceChannel == other.forceChannel
|
||||
&& nPlayersT == other.nPlayersT
|
||||
&& nPlayersH == other.nPlayersH
|
||||
&& ((null == room) ? (null == other.room)
|
||||
: room.equals(other.room))
|
||||
&& ((null == btName) ? (null == other.btName)
|
||||
: btName.equals(other.btName))
|
||||
&& ((null == btAddress) ? (null == other.btAddress)
|
||||
: btAddress.equals(other.btAddress))
|
||||
&& ((null == p2pMacAddress) ? (null == other.p2pMacAddress)
|
||||
: p2pMacAddress.equals(other.p2pMacAddress))
|
||||
&& ((null == phone) ? (null == other.phone)
|
||||
: phone.equals(other.phone))
|
||||
&& isGSM == other. isGSM
|
||||
&& osVers == other.osVers
|
||||
&& _conTypes == other._conTypes
|
||||
&& gameID == other.gameID
|
||||
&& ((null == m_addrs ? (null == other.m_addrs)
|
||||
: m_addrs.equals(other.m_addrs)))
|
||||
&& m_valid == other.m_valid
|
||||
&& ((null == inviteID ? (null == other.inviteID)
|
||||
: inviteID.equals(other.inviteID)))
|
||||
;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public String makeLaunchJSON()
|
||||
{
|
||||
String result = null;
|
||||
|
@ -608,5 +651,7 @@ public class NetLaunchInfo {
|
|||
}
|
||||
}
|
||||
m_valid = valid;
|
||||
|
||||
Utils.testSerialization( this );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -533,6 +533,16 @@ public class Utils {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static void testSerialization( Serializable obj )
|
||||
{
|
||||
if ( BuildConfig.DEBUG ) {
|
||||
String as64 = serializableToString64( obj );
|
||||
Object other = string64ToSerializable( as64 );
|
||||
Assert.assertTrue( other.equals( obj ) );
|
||||
Log.d( TAG, "testSerialization(%s) worked!!!", obj );
|
||||
}
|
||||
}
|
||||
|
||||
private static void setFirstBootStatics( Context context )
|
||||
{
|
||||
if ( null == s_isFirstBootThisVersion ) {
|
||||
|
|
|
@ -22,20 +22,21 @@ package org.eehouse.android.xw4.jni;
|
|||
|
||||
import android.content.Context;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Random;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.eehouse.android.xw4.BuildConfig;
|
||||
import org.eehouse.android.xw4.DictLangCache;
|
||||
import org.eehouse.android.xw4.DictUtils;
|
||||
import org.eehouse.android.xw4.Log;
|
||||
import org.eehouse.android.xw4.R;
|
||||
import org.eehouse.android.xw4.Utils;
|
||||
import org.eehouse.android.xw4.loc.LocUtils;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Random;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class CurGameInfo implements Serializable {
|
||||
private static final String TAG = CurGameInfo.class.getSimpleName();
|
||||
|
@ -149,6 +150,8 @@ public class CurGameInfo implements Serializable {
|
|||
for ( ii = 0; ii < MAX_NUM_PLAYERS; ++ii ) {
|
||||
players[ii] = new LocalPlayer( src.players[ii] );
|
||||
}
|
||||
|
||||
Utils.testSerialization( this );
|
||||
}
|
||||
|
||||
public String getJSONData()
|
||||
|
@ -270,6 +273,43 @@ public class CurGameInfo implements Serializable {
|
|||
return matter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
boolean result;
|
||||
if ( BuildConfig.DEBUG ) {
|
||||
CurGameInfo other = null;
|
||||
result = null != obj && obj instanceof CurGameInfo;
|
||||
if ( result ) {
|
||||
other = (CurGameInfo)obj;
|
||||
result = dictLang == other.dictLang
|
||||
&& gameID == other.gameID
|
||||
&& gameSeconds == other.gameSeconds
|
||||
&& nPlayers == other.nPlayers
|
||||
&& boardSize == other.boardSize
|
||||
&& forceChannel == other.forceChannel
|
||||
&& hintsNotAllowed == other.hintsNotAllowed
|
||||
&& timerEnabled == other.timerEnabled
|
||||
&& allowPickTiles == other.allowPickTiles
|
||||
&& allowHintRect == other.allowHintRect
|
||||
&& m_smartness == other.m_smartness
|
||||
&& Arrays.deepEquals( players, other.players )
|
||||
&& ((null == dictName) ? (null == other.dictName)
|
||||
: dictName.equals(other.dictName))
|
||||
&& ((null == serverRole) ? (null == other.serverRole)
|
||||
: serverRole.equals(other.serverRole))
|
||||
&& ((null == phoniesAction) ? (null == other.phoniesAction)
|
||||
: phoniesAction.equals(other.phoniesAction))
|
||||
&& ((null == m_name) ? (null == other.m_name)
|
||||
: m_name.equals(other.m_name))
|
||||
;
|
||||
}
|
||||
} else {
|
||||
result = super.equals( obj );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int remoteCount()
|
||||
{
|
||||
int count = 0;
|
||||
|
|
|
@ -24,9 +24,13 @@ import android.content.Context;
|
|||
import android.text.TextUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.eehouse.android.xw4.BuildConfig;
|
||||
import org.eehouse.android.xw4.DBUtils;
|
||||
import org.eehouse.android.xw4.Log;
|
||||
import org.eehouse.android.xw4.R;
|
||||
|
@ -36,7 +40,6 @@ import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnType;
|
|||
import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnTypeSet;
|
||||
import org.eehouse.android.xw4.jni.CurGameInfo.DeviceRole;
|
||||
import org.eehouse.android.xw4.loc.LocUtils;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/** Info we want to access when the game's closed that's not available
|
||||
* in CurGameInfo
|
||||
|
@ -98,6 +101,55 @@ public class GameSummary implements Serializable {
|
|||
return null != relayID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
boolean result;
|
||||
if ( BuildConfig.DEBUG ) {
|
||||
result = null != obj && obj instanceof GameSummary;
|
||||
if ( result ) {
|
||||
GameSummary other = (GameSummary)obj;
|
||||
result = lastMoveTime == other.lastMoveTime
|
||||
&& nMoves == other.nMoves
|
||||
&& turn == other.turn
|
||||
&& turnIsLocal == other.turnIsLocal
|
||||
&& nPlayers == other.nPlayers
|
||||
&& missingPlayers == other.missingPlayers
|
||||
&& gameOver == other.gameOver
|
||||
&& seed == other.seed
|
||||
&& modtime == other.modtime
|
||||
&& gameID == other.gameID
|
||||
&& dictLang == other.dictLang
|
||||
&& nPacketsPending == other.nPacketsPending
|
||||
&& ((null == scores) ? (null == other.scores)
|
||||
: scores.equals(other.scores))
|
||||
&& Arrays.deepEquals( m_players, other.m_players )
|
||||
&& ((null == conTypes) ? (null == other.conTypes)
|
||||
: conTypes.equals(other.conTypes))
|
||||
&& ((null == roomName) ? (null == other.roomName)
|
||||
: roomName.equals(other.roomName))
|
||||
&& ((null == relayID) ? (null == other.relayID)
|
||||
: relayID.equals(other.relayID))
|
||||
&& Arrays.deepEquals( remoteDevs, other.remoteDevs )
|
||||
&& ((null == serverRole) ? (null == other.serverRole)
|
||||
: serverRole.equals(other.serverRole))
|
||||
&& ((null == m_giFlags) ? (null == other.m_giFlags)
|
||||
: m_giFlags.equals(other.m_giFlags))
|
||||
&& ((null == m_playersSummary) ? (null == other.m_playersSummary)
|
||||
: m_playersSummary.equals(other.m_playersSummary))
|
||||
&& ((null == m_gi) ? (null == other.m_gi)
|
||||
: m_gi.equals(other.m_gi))
|
||||
&& Arrays.deepEquals( m_remotePhones, other.m_remotePhones )
|
||||
&& ((null == m_extras) ? (null == other.m_extras)
|
||||
: m_extras.equals(other.m_extras))
|
||||
;
|
||||
}
|
||||
} else {
|
||||
result = super.equals( obj );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public String summarizePlayers()
|
||||
{
|
||||
String result;
|
||||
|
|
|
@ -26,7 +26,9 @@ import java.io.Serializable;
|
|||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.eehouse.android.xw4.BuildConfig;
|
||||
import org.eehouse.android.xw4.R;
|
||||
import org.eehouse.android.xw4.Utils;
|
||||
|
||||
public class LocalPlayer implements Serializable {
|
||||
public String name;
|
||||
|
@ -43,6 +45,8 @@ public class LocalPlayer implements Serializable {
|
|||
String fmt = context.getString( R.string.player_fmt);
|
||||
name = String.format( fmt, num + 1 );
|
||||
password = "";
|
||||
|
||||
// Utils.testSerialization( this );
|
||||
}
|
||||
|
||||
public LocalPlayer( final LocalPlayer src )
|
||||
|
@ -53,6 +57,34 @@ public class LocalPlayer implements Serializable {
|
|||
password = src.password;
|
||||
dictName = src.dictName;
|
||||
secondsUsed = src.secondsUsed;
|
||||
|
||||
// Utils.testSerialization( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
boolean result;
|
||||
if ( BuildConfig.DEBUG ) {
|
||||
LocalPlayer other = null;
|
||||
result = null != obj && obj instanceof LocalPlayer;
|
||||
if ( result ) {
|
||||
other = (LocalPlayer)obj;
|
||||
result = secondsUsed == other.secondsUsed
|
||||
&& robotIQ == other.robotIQ
|
||||
&& isLocal == other.isLocal
|
||||
&& ((null == name) ? (null == other.name)
|
||||
: name.equals(other.name))
|
||||
&& ((null == password) ? (null == other.password)
|
||||
: password.equals(other.password))
|
||||
&& ((null == dictName) ? (null == other.dictName)
|
||||
: dictName.equals(other.dictName))
|
||||
;
|
||||
}
|
||||
} else {
|
||||
result = super.equals( obj );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean isRobot()
|
||||
|
|
Loading…
Add table
Reference in a new issue