improve text around invitations

This commit is contained in:
Eric House 2016-01-13 19:51:24 -08:00
parent e98ba8d84a
commit bdafcfa916
7 changed files with 712 additions and 609 deletions

File diff suppressed because it is too large Load diff

View file

@ -549,9 +549,13 @@
</plurals> </plurals>
<plurals name="invite_sent_fmt"> <plurals name="invite_sent_fmt">
<item quantity="one">You have already invited a remote player to <item quantity="one">You have already invited a remote player to
this game. We are waiting for him/her to connect back.</item> this game. We are waiting for him/her to respond. Please
<item quantity="other">You have already invited %1$d players to use the re-invite button if you think the invitation did not go
this game. We are waiting for them to connect back.</item> out.</item>
<item quantity="other">You have already sent %1$d unique
invitations for this game. We are waiting for %2$d of the
recipients to respond. Please use the re-invite button if you
think the invitations did not go out.</item>
</plurals> </plurals>
<string name="invited_msg">This game was created from an <string name="invited_msg">This game was created from an
invitation you received. As soon as it is able to connect to the invitation you received. As soon as it is able to connect to the
@ -579,6 +583,15 @@
this alert will not be dismissed until everybody has been invited this alert will not be dismissed until everybody has been invited
and all invitations have been accepted.)</string> and all invitations have been accepted.)</string>
<string name="invit_expl_sms_fmt">Invite sent via SMS to phone
number %1$s on %2$s</string>
<string name="invit_expl_bt_fmt">Invite sent via Bluetooth to
paired device %1$s on %2$s</string>
<string name="invit_expl_relay_fmt">Invite forwarded by the relay
to another device on %1$s</string>
<string name="invit_expl_notarget_fmt">Invite sent via %1$s on
%2$s. Recipient unknown.</string>
<!-- Short for "points", this is shown at the right end of the <!-- Short for "points", this is shown at the right end of the
tray in place of the first tile placed along with the points tray in place of the first tile placed along with the points
the current move would earn if committed. --> the current move would earn if committed. -->

View file

@ -467,9 +467,13 @@
</plurals> </plurals>
<plurals name="invite_sent_fmt"> <plurals name="invite_sent_fmt">
<item quantity="one">Uoy evah ydaerla detivni a etomer reyalp ot <item quantity="one">Uoy evah ydaerla detivni a etomer reyalp ot
siht emag. Ew era gnitiaw rof reh/mih ot tcennoc kcab.</item> siht emag. Ew era gnitiaw rof reh/mih ot dnopser. Esaelp
<item quantity="other">Uoy evah ydaerla detivni %1$d sreyalp ot esu eht etivni-er nottub fi uoy kniht eht noitativni did ton og
siht emag. Ew era gnitiaw rof meht ot tcennoc kcab.</item> tuo.</item>
<item quantity="other">Uoy evah ydaerla tnes %1$d euqinu
snoitativni rof siht emag. Ew era gnitiaw rof %2$d fo eht
stneipicer ot dnopser. Esaelp esu eht etivni-er nottub fi uoy
kniht eht snoitativni did ton og tuo.</item>
</plurals> </plurals>
<string name="invited_msg">Siht emag saw detaerc morf na <string name="invited_msg">Siht emag saw detaerc morf na
noitativni uoy deviecer. Sa noos sa ti si elba ot tcennoc ot eht noitativni uoy deviecer. Sa noos sa ti si elba ot tcennoc ot eht
@ -493,6 +497,14 @@
etomer sreyalp. Uoy nod\'t evah ot etivni meht lla ta ,ecno tub etomer sreyalp. Uoy nod\'t evah ot etivni meht lla ta ,ecno tub
siht trela lliw ton eb dessimsid litnu ydobyreve sah neeb detivni siht trela lliw ton eb dessimsid litnu ydobyreve sah neeb detivni
dna lla snoitativni evah neeb detpecca.)</string> dna lla snoitativni evah neeb detpecca.)</string>
<string name="invit_expl_sms_fmt">Etivni tnes aiv SMS ot enohp
rebmun %1$s no %2$s</string>
<string name="invit_expl_bt_fmt">Etivni tnes aiv Htooteulb ot
deriap ecived %1$s no %2$s</string>
<string name="invit_expl_relay_fmt">Etivni dedrawrof yb eht yaler
ot rehtona ecived no %1$s</string>
<string name="invit_expl_notarget_fmt">Etivni tnes aiv %1$s no
%2$s. Tneipicer nwonknu.</string>
<!-- Short for "points", this is shown at the right end of the <!-- Short for "points", this is shown at the right end of the
tray in place of the first tile placed along with the points tray in place of the first tile placed along with the points
the current move would earn if committed. --> the current move would earn if committed. -->

View file

@ -467,9 +467,13 @@
</plurals> </plurals>
<plurals name="invite_sent_fmt"> <plurals name="invite_sent_fmt">
<item quantity="one">YOU HAVE ALREADY INVITED A REMOTE PLAYER TO <item quantity="one">YOU HAVE ALREADY INVITED A REMOTE PLAYER TO
THIS GAME. WE ARE WAITING FOR HIM/HER TO CONNECT BACK.</item> THIS GAME. WE ARE WAITING FOR HIM/HER TO RESPOND. PLEASE
<item quantity="other">YOU HAVE ALREADY INVITED %1$d PLAYERS TO USE THE RE-INVITE BUTTON IF YOU THINK THE INVITATION DID NOT GO
THIS GAME. WE ARE WAITING FOR THEM TO CONNECT BACK.</item> OUT.</item>
<item quantity="other">YOU HAVE ALREADY SENT %1$d UNIQUE
INVITATIONS FOR THIS GAME. WE ARE WAITING FOR %2$d OF THE
RECIPIENTS TO RESPOND. PLEASE USE THE RE-INVITE BUTTON IF YOU
THINK THE INVITATIONS DID NOT GO OUT.</item>
</plurals> </plurals>
<string name="invited_msg">THIS GAME WAS CREATED FROM AN <string name="invited_msg">THIS GAME WAS CREATED FROM AN
INVITATION YOU RECEIVED. AS SOON AS IT IS ABLE TO CONNECT TO THE INVITATION YOU RECEIVED. AS SOON AS IT IS ABLE TO CONNECT TO THE
@ -493,6 +497,14 @@
REMOTE PLAYERS. YOU DON\'T HAVE TO INVITE THEM ALL AT ONCE, BUT REMOTE PLAYERS. YOU DON\'T HAVE TO INVITE THEM ALL AT ONCE, BUT
THIS ALERT WILL NOT BE DISMISSED UNTIL EVERYBODY HAS BEEN INVITED THIS ALERT WILL NOT BE DISMISSED UNTIL EVERYBODY HAS BEEN INVITED
AND ALL INVITATIONS HAVE BEEN ACCEPTED.)</string> AND ALL INVITATIONS HAVE BEEN ACCEPTED.)</string>
<string name="invit_expl_sms_fmt">INVITE SENT VIA SMS TO PHONE
NUMBER %1$s ON %2$s</string>
<string name="invit_expl_bt_fmt">INVITE SENT VIA BLUETOOTH TO
PAIRED DEVICE %1$s ON %2$s</string>
<string name="invit_expl_relay_fmt">INVITE FORWARDED BY THE RELAY
TO ANOTHER DEVICE ON %1$s</string>
<string name="invit_expl_notarget_fmt">INVITE SENT VIA %1$s ON
%2$s. RECIPIENT UNKNOWN.</string>
<!-- Short for "points", this is shown at the right end of the <!-- Short for "points", this is shown at the right end of the
tray in place of the first tile placed along with the points tray in place of the first tile placed along with the points
the current move would earn if committed. --> the current move would earn if committed. -->

View file

@ -449,7 +449,7 @@ public class BoardDelegate extends DelegateBase
OnClickListener lstnrMore = new OnClickListener() { OnClickListener lstnrMore = new OnClickListener() {
public void onClick( DialogInterface dialog, public void onClick( DialogInterface dialog,
int item ) { int item ) {
showOKOnlyDialog( m_sentInfo.getAsText() ); showOKOnlyDialog( m_sentInfo.getAsText( m_activity ) );
} }
}; };
@ -515,12 +515,12 @@ public class BoardDelegate extends DelegateBase
} }
} else { } else {
m_sentInfo = DBUtils.getInvitesFor( m_activity, m_rowid ); m_sentInfo = DBUtils.getInvitesFor( m_activity, m_rowid );
int nSent = m_sentInfo.getPlayerCount(); int nSent = m_sentInfo.getMinPlayerCount();
boolean haveSent = nSent >= m_nMissing; boolean haveSent = nSent >= m_nMissing;
if ( haveSent ) { if ( haveSent ) {
titleID = R.string.waiting_invite_title; titleID = R.string.waiting_invite_title;
message = getQuantityString( R.plurals.invite_sent_fmt, message = getQuantityString( R.plurals.invite_sent_fmt,
nSent, nSent ); nSent, nSent, m_nMissing );
buttonTxt = R.string.button_reinvite; buttonTxt = R.string.button_reinvite;
nukeNeutButton = false; nukeNeutButton = false;
} else if ( DeviceRole.SERVER_ISCLIENT == m_gi.serverRole ) { } else if ( DeviceRole.SERVER_ISCLIENT == m_gi.serverRole ) {

View file

@ -422,10 +422,10 @@ public class DBUtils {
public static class SentInvitesInfo { public static class SentInvitesInfo {
public long m_rowid; public long m_rowid;
private int m_count = 0;
private ArrayList<InviteMeans> m_means; private ArrayList<InviteMeans> m_means;
private ArrayList<String> m_target; private ArrayList<String> m_target;
private ArrayList<Timestamp> m_timestamp; private ArrayList<Timestamp> m_timestamp;
private int m_cachedCount = 0;
private SentInvitesInfo( long rowID ) { private SentInvitesInfo( long rowID ) {
m_rowid = rowID; m_rowid = rowID;
@ -436,22 +436,84 @@ public class DBUtils {
private void addEntry( InviteMeans means, String target, Timestamp ts ) private void addEntry( InviteMeans means, String target, Timestamp ts )
{ {
++m_count;
m_means.add( means ); m_means.add( means );
m_target.add( target ); m_target.add( target );
m_timestamp.add( ts ); m_timestamp.add( ts );
m_cachedCount = -1;
} }
public int getPlayerCount() { // There will be lots of duplicates, but we can't detect them all. BUT
return m_count; // if means and target are the same it's definitely a dup. So count
// them all and return the largest number we have. 99% of the time we
// care only that it's non-0.
public int getMinPlayerCount() {
if ( -1 == m_cachedCount ) {
DbgUtils.logf( "getMinPlayerCount(%H)", this );
int count = m_timestamp.size();
Map<InviteMeans, Set<String>> hashes
= new HashMap<InviteMeans, Set<String>>();
int fakeCount = 0; // make all null-targets count for one
for ( int ii = 0; ii < count; ++ii ) {
InviteMeans means = m_means.get(ii);
Set<String> devs;
if ( ! hashes.containsKey( means ) ) {
DbgUtils.logf( "creating new hash for means %s", means.toString() );
devs = new HashSet<String>();
hashes.put( means, devs );
}
devs = hashes.get( means );
String target = m_target.get( ii );
if ( null == target ) {
target = String.format( "%d", ++fakeCount );
}
devs.add( target );
DbgUtils.logf( "added target %s for means %s", target, means.toString() );
} }
public String getAsText() { // Now find the max
String[] strs = new String[m_count]; m_cachedCount = 0;
for ( int ii = 0; ii < m_count; ++ii ) { for ( InviteMeans means : InviteMeans.values() ) {
strs[ii] = String.format( "Invite sent to dev %s via %s on %s", if ( hashes.containsKey( means ) ) {
m_target.get(ii), m_means.get(ii).toString(), int siz = hashes.get( means ).size();
m_timestamp.get(ii).toString() ); m_cachedCount += siz;
DbgUtils.logf( "counting: means %s has unique count of %d",
means.toString(), siz );
}
}
}
DbgUtils.logf( "getMinPlayerCount(%H) => %d", this, m_cachedCount );
return m_cachedCount;
}
public String getAsText( Context context )
{
int count = m_timestamp.size();
String[] strs = new String[count];
for ( int ii = 0; ii < count; ++ii ) {
InviteMeans means = m_means.get(ii);
String target = m_target.get(ii);
String timestamp = m_timestamp.get(ii).toString();
String msg;
switch ( means ) {
case SMS:
msg = LocUtils.getString( context, R.string.invit_expl_sms_fmt,
target, timestamp );
break;
case BLUETOOTH:
msg = LocUtils.getString( context, R.string.invit_expl_bt_fmt,
target, timestamp );
break;
case RELAY:
msg = LocUtils.getString( context, R.string.invit_expl_relay_fmt,
timestamp );
break;
default:
msg = LocUtils.getString( context, R.string.invit_expl_notarget_fmt,
means.toString(), timestamp );
}
strs[ii] = msg;
} }
return TextUtils.join( "\n\n", strs ); return TextUtils.join( "\n\n", strs );
} }

View file

@ -207,7 +207,7 @@ public class GameSummary {
if ( 0 < missing ) { if ( 0 < missing ) {
DBUtils.SentInvitesInfo si = DBUtils.getInvitesFor( m_context, DBUtils.SentInvitesInfo si = DBUtils.getInvitesFor( m_context,
rowid ); rowid );
if ( si.getPlayerCount() >= missing ) { if ( si.getMinPlayerCount() >= missing ) {
result = LocUtils.getString( m_context, result = LocUtils.getString( m_context,
R.string.summary_invites_out ); R.string.summary_invites_out );
} }