diff --git a/xwords4/android/XWords4/res/layout/smsinviter_item.xml b/xwords4/android/XWords4/res/layout/smsinviter_item.xml
index 73af81b73..8ab447125 100644
--- a/xwords4/android/XWords4/res/layout/smsinviter_item.xml
+++ b/xwords4/android/XWords4/res/layout/smsinviter_item.xml
@@ -14,18 +14,29 @@
android:layout_height="wrap_content"
/>
-
-
-
+
+
+
+
+
diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/SMSInviteDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/SMSInviteDelegate.java
index 5398da1de..57f034df9 100644
--- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/SMSInviteDelegate.java
+++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/SMSInviteDelegate.java
@@ -21,9 +21,9 @@
package org.eehouse.android.xw4;
import android.app.Activity;
-import android.app.ListActivity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
@@ -34,12 +34,18 @@ import android.provider.ContactsContract;
import android.text.method.DialerKeyListener;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.ImageButton;
+import android.widget.Spinner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import junit.framework.Assert;
@@ -173,27 +179,41 @@ public class SMSInviteDelegate extends InviteDelegate {
{
int count = m_adapter.getCount();
String[] result = new String[countChecks()];
+ int[] counts = new int[result.length];
+
int index = 0;
Iterator iter = m_phoneRecs.iterator();
for ( int ii = 0; iter.hasNext(); ++ii ) {
- if ( iter.next().m_checked ) {
- result[index++] =
- ((SMSListItem)m_adapter.getItem(ii)).getNumber();
+ PhoneRec rec = iter.next();
+ if ( rec.m_isChecked ) {
+ counts[index] = rec.nPlayers;
+ result[index] = ((SMSListItem)m_adapter.getItem(ii)).getNumber();
+ index++;
}
}
devsP[0] = result;
if ( null != countsP ) {
- DbgUtils.logf( "FIXME: SMSInviteDelegate: assuming 1 player per device" );
- countsP[0] = new int[] {1};
+ countsP[0] = counts;
}
}
@Override
protected void tryEnable()
{
- int count = countChecks();
- m_okButton.setEnabled( count == m_nMissing );
- m_clearButton.setEnabled( 0 < count );
+ if ( null != m_phoneRecs ) {
+ int nPlayers = 0;
+ int nDevs = 0;
+ Iterator iter = m_phoneRecs.iterator();
+ while ( iter.hasNext() ) {
+ PhoneRec rec = iter.next();
+ if ( rec.m_isChecked ) {
+ ++nDevs;
+ nPlayers += rec.nPlayers;
+ }
+ }
+ m_okButton.setEnabled( 0 < nPlayers && nPlayers <= m_nMissing );
+ m_clearButton.setEnabled( 0 < nDevs );
+ }
}
// DlgDelegate.DlgClickNotify interface
@@ -231,7 +251,7 @@ public class SMSInviteDelegate extends InviteDelegate {
if ( null != m_phoneRecs ) {
Iterator iter = m_phoneRecs.iterator();
while ( iter.hasNext() ) {
- if ( iter.next().m_checked ) {
+ if ( iter.next().m_isChecked ) {
++count;
}
}
@@ -292,7 +312,7 @@ public class SMSInviteDelegate extends InviteDelegate {
if ( checkIfAll && m_phoneRecs.size() <= m_nMissing ) {
Iterator iter = m_phoneRecs.iterator();
while ( iter.hasNext() ) {
- iter.next().m_checked = true;
+ iter.next().m_isChecked = true;
}
}
tryEnable();
@@ -327,11 +347,11 @@ public class SMSInviteDelegate extends InviteDelegate {
if ( m_nMissing <= countChecks() ) {
Iterator iter = m_phoneRecs.iterator();
while ( iter.hasNext() ) {
- iter.next().m_checked = false;
+ iter.next().m_isChecked = false;
}
}
- rec.m_checked = true;
+ rec.m_isChecked = true;
m_phoneRecs.add( rec );
}
@@ -339,7 +359,7 @@ public class SMSInviteDelegate extends InviteDelegate {
{
int count = m_adapter.getCount();
for ( int ii = count - 1; ii >= 0; --ii ) {
- if ( m_phoneRecs.get( ii ).m_checked ) {
+ if ( m_phoneRecs.get( ii ).m_isChecked ) {
m_phoneRecs.remove( ii );
}
}
@@ -349,7 +369,8 @@ public class SMSInviteDelegate extends InviteDelegate {
private class PhoneRec {
public String m_phone;
public String m_name;
- public boolean m_checked;
+ public boolean m_isChecked;
+ public int nPlayers;
public PhoneRec( String name, String phone )
{
this( name, phone, false );
@@ -362,7 +383,7 @@ public class SMSInviteDelegate extends InviteDelegate {
public PhoneRec( String name, String phone, boolean checked )
{
m_phone = phone;
- m_checked = checked;
+ m_isChecked = checked;
if ( null == name ) {
name = Utils.phoneToContact( m_activity, phone, false );
@@ -393,20 +414,49 @@ public class SMSInviteDelegate extends InviteDelegate {
SMSListItem item =
(SMSListItem)inflate( R.layout.smsinviter_item );
- item.setChecked( m_phoneRecs.get(position).m_checked );
+ item.setChecked( m_phoneRecs.get(position).m_isChecked );
CompoundButton.OnCheckedChangeListener lstnr =
new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged( CompoundButton bv,
boolean isChecked ) {
- m_phoneRecs.get(position).m_checked = isChecked;
+ m_phoneRecs.get(position).m_isChecked = isChecked;
tryEnable();
}
};
item.setOnCheckedChangeListener( lstnr );
- PhoneRec rec = m_phoneRecs.get( position );
+ final PhoneRec rec = m_phoneRecs.get( position );
item.setContents( rec.m_name, rec.m_phone );
m_items[position] = item;
+
+ // Set up spinner
+ // m_counts.put( position, 1 );
+ rec.nPlayers = 1;
+ if ( XWPrefs.getCanInviteMulti( m_activity ) && 1 < m_nMissing ) {
+ Spinner spinner = (Spinner)
+ item.findViewById(R.id.nperdev_spinner);
+ ArrayAdapter adapter =
+ new ArrayAdapter( m_activity, android.R.layout
+ .simple_spinner_item );
+ for ( int ii = 1; ii <= m_nMissing; ++ii ) {
+ String str = getString( R.string.nplayers_fmt, ii );
+ adapter.add( str );
+ }
+ spinner.setAdapter( adapter );
+ spinner.setVisibility( View.VISIBLE );
+ spinner.setOnItemSelectedListener( new OnItemSelectedListener() {
+ public void onItemSelected( AdapterView> parent,
+ View view, int pos,
+ long id )
+ {
+ rec.nPlayers = 1 + pos;
+ tryEnable();
+ }
+
+ public void onNothingSelected( AdapterView> parent ) {}
+ } );
+ }
+
return item;
}