Bug #170
Debug de l'ajout de contact, que ce soit pour un contact existant ou
inexistant, pareil pour le groupe du contacte.
--- a/src/com/beem/project/beem/service/RosterAdapter.java Sat Jun 20 19:43:37 2009 +0200
+++ b/src/com/beem/project/beem/service/RosterAdapter.java Sat Jun 20 22:42:26 2009 +0200
@@ -5,7 +5,9 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -30,246 +32,272 @@
*/
public class RosterAdapter extends com.beem.project.beem.service.aidl.IRoster.Stub {
- /**
- * Listener for the roster events. It will call the remote listeners registered.
- *
- * @author darisk
- */
- private class RosterListenerAdapter implements RosterListener {
+ /**
+ * Listener for the roster events. It will call the remote listeners registered.
+ *
+ * @author darisk
+ */
+ private class RosterListenerAdapter implements RosterListener {
+
+ /**
+ * Constructor.
+ */
+ public RosterListenerAdapter() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void entriesAdded(Collection<String> addresses) {
+ Log.i(TAG, "Ajout de l'entry");
+ final int n = mRemoteRosListeners.beginBroadcast();
+
+ List<String> tab = new ArrayList<String>();
+ tab.addAll(addresses);
+ for (int i = 0; i < n; i++) {
+ IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
+ try {
+ listener.onEntriesAdded(tab);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Error while adding roster entries", e);
+ }
+ }
+ mRemoteRosListeners.finishBroadcast();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void entriesDeleted(Collection<String> addresses) {
+ Log.i(TAG, "Suppression de l'entry");
+ final int n = mRemoteRosListeners.beginBroadcast();
+
+ List<String> tab = new ArrayList<String>();
+ tab.addAll(addresses);
+ for (int i = 0; i < n; i++) {
+ IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
+ try {
+ listener.onEntriesDeleted(tab);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Error while deleting roster entries", e);
+ }
+ }
+ mRemoteRosListeners.finishBroadcast();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void entriesUpdated(Collection<String> addresses) {
+ Log.d(TAG, "Update de l'entry");
+ final int n = mRemoteRosListeners.beginBroadcast();
+
+ List<String> tab = new ArrayList<String>();
+ tab.addAll(addresses);
+ for (int i = 0; i < n; i++) {
+ IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
+ try {
+ listener.onEntriesUpdated(tab);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Error while updating roster entries", e);
+ }
+ }
+ mRemoteRosListeners.finishBroadcast();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void presenceChanged(Presence presence) {
+ Log.i(TAG, "Changement de Presence");
+ String user = StringUtils.parseBareAddress(presence.getFrom());
+ Log.d(TAG, "User : " + user);
+ Contact c = mContacts.get(StringUtils.parseBareAddress(user));
+ if (c == null) {
+ c = new Contact(user);
+ mContacts.put(user, c);
+ }
+ c.addRes(StringUtils.parseResource(presence.getFrom()));
+ c.setStatus(mAdaptee.getPresence(presence.getFrom()));
+ c.setMsgState(presence.getStatus());
+ c.setName(mAdaptee.getEntry(user).getName());
+ /* redispatch vers les IBeemRosterListener */
+ final int n = mRemoteRosListeners.beginBroadcast();
+
+ for (int i = 0; i < n; i++) {
+ IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
+ try {
+ listener.onPresenceChanged(new PresenceAdapter(presence));
+ } catch (RemoteException e) {
+ // The RemoteCallbackList will take care of removing the
+ // dead listeners.
+ Log.w(TAG, "Error while updating roster entries", e);
+ }
+ }
+ mRemoteRosListeners.finishBroadcast();
+ }
+ }
+
+ private static final String TAG = "RosterAdapter";
+ private Roster mAdaptee;
+ private RemoteCallbackList<IBeemRosterListener> mRemoteRosListeners = new RemoteCallbackList<IBeemRosterListener>();
+
+ private Map<String, Contact> mContacts = new HashMap<String, Contact>();
+
+ private RosterListenerAdapter mRosterListener = new RosterListenerAdapter();
/**
* Constructor.
- */
- public RosterListenerAdapter() {
- // TODO Auto-generated constructor stub
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void entriesAdded(Collection<String> addresses) {
- Log.i(TAG, "Ajout de l'entry");
- final int n = mRemoteRosListeners.beginBroadcast();
-
- List<String> tab = new ArrayList<String>();
- for (int i = 0; i < n; i++) {
- IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
- try {
- tab.addAll(addresses);
- listener.onEntriesAdded(tab);
- } catch (RemoteException e) {
- // The RemoteCallbackList will take care of removing the
- // dead listeners.
- Log.w(TAG, "Error while adding roster entries", e);
- }
- }
- mRemoteRosListeners.finishBroadcast();
- }
-
- /**
- * {@inheritDoc}
+ *
+ * @param roster
+ * the roster to adapt
*/
- @Override
- public void entriesDeleted(Collection<String> addresses) {
- Log.i(TAG, "Suppression de l'entry");
- final int n = mRemoteRosListeners.beginBroadcast();
-
- List<String> tab = new ArrayList<String>();
- for (int i = 0; i < n; i++) {
- IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
- try {
- tab.addAll(addresses);
- listener.onEntriesDeleted(tab);
- } catch (RemoteException e) {
- // The RemoteCallbackList will take care of removing the
- // dead listeners.
- Log.w(TAG, "Error while deleting roster entries", e);
+ public RosterAdapter(final Roster roster) {
+ mAdaptee = roster;
+ roster.addRosterListener(mRosterListener);
+ for (RosterEntry entry : roster.getEntries()) {
+ String user = StringUtils.parseBareAddress(entry.getUser());
+ if (!mContacts.containsKey(user)) {
+ Contact c = new Contact(user);
+ c.setStatus(roster.getPresence(user));
+ c.setGroups(entry.getGroups());
+ c.setName(entry.getName());
+ mContacts.put(user, c);
+ }
}
- }
- mRemoteRosListeners.finishBroadcast();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void entriesUpdated(Collection<String> addresses) {
- Log.d(TAG, "Update de l'entry");
- final int n = mRemoteRosListeners.beginBroadcast();
-
- List<String> tab = new ArrayList<String>();
- for (int i = 0; i < n; i++) {
- IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
- try {
- tab.addAll(addresses);
- listener.onEntriesUpdated(tab);
- } catch (RemoteException e) {
- // The RemoteCallbackList will take care of removing the
- // dead listeners.
- Log.w(TAG, "Error while updating roster entries", e);
- }
- }
- mRemoteRosListeners.finishBroadcast();
}
/**
* {@inheritDoc}
*/
@Override
- public void presenceChanged(Presence presence) {
- Log.i(TAG, "Changement de Presence");
- /* gestion du roster coter sedirvice */
- String user = StringUtils.parseBareAddress(presence.getFrom());
- Log.d(TAG, "User : " + user);
- Contact c = mContacts.get(StringUtils.parseBareAddress(user));
- if (c == null) {
- c = new Contact(user);
- mContacts.put(user, c);
- }
- c.addRes(StringUtils.parseResource(presence.getFrom()));
- c.setStatus(mAdaptee.getPresence(presence.getFrom()));
- c.setMsgState(presence.getStatus());
- c.setName(mAdaptee.getEntry(user).getName());
- /* redispatch vers les IBeemRosterListener */
- final int n = mRemoteRosListeners.beginBroadcast();
-
- for (int i = 0; i < n; i++) {
- IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
- try {
- listener.onPresenceChanged(new PresenceAdapter(presence));
- } catch (RemoteException e) {
- // The RemoteCallbackList will take care of removing the
- // dead listeners.
- Log.w(TAG, "Error while updating roster entries", e);
- }
- }
- mRemoteRosListeners.finishBroadcast();
+ public void addRosterListener(IBeemRosterListener listen) throws RemoteException {
+ if (listen != null)
+ mRemoteRosListeners.register(listen);
}
- }
- private static final String TAG = "RosterAdapter";
- private Roster mAdaptee;
- private RemoteCallbackList<IBeemRosterListener> mRemoteRosListeners = new RemoteCallbackList<IBeemRosterListener>();
-
- private Map<String, Contact> mContacts = new HashMap<String, Contact>();
-
- private RosterListenerAdapter mRosterListener = new RosterListenerAdapter();
-
- /**
- * Constructor.
- *
- * @param roster
- * the roster to adapt
- */
- public RosterAdapter(final Roster roster) {
- mAdaptee = roster;
- roster.addRosterListener(mRosterListener);
- for (RosterEntry entry : roster.getEntries()) {
- String user = StringUtils.parseBareAddress(entry.getUser());
- if (!mContacts.containsKey(user)) {
- Contact c = new Contact(user);
- c.setStatus(roster.getPresence(user));
- c.setGroups(entry.getGroups());
- c.setName(entry.getName());
- mContacts.put(user, c);
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Contact addContact(String user, String name, String[] groups) throws RemoteException {
+ Contact res = null;
+ RosterEntry contact = mAdaptee.getEntry(user);
+ if (contact != null) {
+ res = mContacts.get(user);
+ for (String groupStr : groups) {
+ boolean found = false;
+ for (RosterGroup group: mAdaptee.getGroups()) {
+ if (group.getName().equals(groupStr) && !group.contains(contact)) {
+ try {
+ group.addEntry(contact);
+ res.addGroup(groupStr);
+ found = true;
+ } catch (XMPPException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ if (!found) {
+ try {
+ mAdaptee.createGroup(groupStr).addEntry(contact);
+ } catch (XMPPException e) {
+ e.printStackTrace();
+ } catch (IllegalArgumentException e) {
+ }
+ res.addGroup(groupStr);
+ }
+ }
+ } else {
+ try {
+ mAdaptee.createEntry(user, name, groups);
+ res = new Contact(user);
+ mContacts.put(user, res);
+ for (String groupStr : groups) {
+ try {
+ mAdaptee.createGroup(groupStr);
+ } catch (IllegalArgumentException e) {
+ //e.printStackTrace();
+ }
+ res.addGroup(groupStr);
+ }
+ } catch (XMPPException e) {
+ Log.e(TAG, "Error while adding new contact", e);
+ return null;
+ }
+ }
+ return res;
}
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void addRosterListener(IBeemRosterListener listen) throws RemoteException {
- if (listen != null)
- mRemoteRosListeners.register(listen);
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public Contact addContact(String user, String name, String[] groups) throws RemoteException {
- try {
- mAdaptee.createEntry(user, name, groups);
- Contact res = new Contact(user);
- mContacts.put(user, res);
- for (String group : groups) {
- // mAdaptee.createGroup(group);
- res.addGroup(group);
- }
- return res;
- } catch (XMPPException e) {
- Log.e(TAG, "Error while adding new contact", e);
- return null;
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void createGroup(String groupname) throws RemoteException {
+ mAdaptee.createGroup(groupname);
}
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public void createGroup(String groupname) throws RemoteException {
- mAdaptee.createGroup(groupname);
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void deleteContact(Contact contact) throws RemoteException {
+ mContacts.remove(contact.getJID());
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public void deleteContact(Contact contact) throws RemoteException {
- mContacts.remove(contact.getJID());
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Contact getContact(String jid) throws RemoteException {
+ return mContacts.get(jid);
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public Contact getContact(String jid) throws RemoteException {
- return mContacts.get(jid);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public List<Contact> getContactList() throws RemoteException {
- List<Contact> res = new ArrayList<Contact>();
- res.addAll(mContacts.values());
- return res;
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<Contact> getContactList() throws RemoteException {
+ List<Contact> res = new ArrayList<Contact>();
+ res.addAll(mContacts.values());
+ return res;
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public List<String> getGroupsNames() throws RemoteException {
- Collection<RosterGroup> groups = mAdaptee.getGroups();
- ArrayList<String> result = new ArrayList<String>(groups.size());
- for (RosterGroup rosterGroup : groups) {
- result.add(rosterGroup.getName());
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<String> getGroupsNames() throws RemoteException {
+ Collection<RosterGroup> groups = mAdaptee.getGroups();
+ ArrayList<String> result = new ArrayList<String>(groups.size());
+ for (RosterGroup rosterGroup : groups) {
+ result.add(rosterGroup.getName());
+ }
+ return result;
}
- return result;
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeRosterListener(IBeemRosterListener listen) throws RemoteException {
- if (listen != null)
- mRemoteRosListeners.unregister(listen);
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void removeRosterListener(IBeemRosterListener listen) throws RemoteException {
+ if (listen != null)
+ mRemoteRosListeners.unregister(listen);
+ }
- /**
- *
- */
- @Override
- public void setContactName(String jid, String name) throws RemoteException {
- mContacts.get(jid).setName(name);
- mAdaptee.getEntry(jid).setName(name);
- }
+ /**
+ *
+ */
+ @Override
+ public void setContactName(String jid, String name) throws RemoteException {
+ mContacts.get(jid).setName(name);
+ mAdaptee.getEntry(jid).setName(name);
+ }
@Override
public PresenceAdapter getPresence(String jid) throws RemoteException {
--- a/src/com/beem/project/beem/ui/AddContact.java Sat Jun 20 19:43:37 2009 +0200
+++ b/src/com/beem/project/beem/ui/AddContact.java Sat Jun 20 22:42:26 2009 +0200
@@ -28,75 +28,81 @@
*/
public class AddContact extends Activity {
- protected static final String TAG = "AddContact";
- private String mLogin;
- private String mAlias;
- private final List<String> mGroup = new ArrayList<String>();
- private IXmppFacade xmppFacade;
- private final ServiceConnection mServConn = new BeemServiceConnection();
+ protected static final String TAG = "AddContact";
+ private String mLogin;
+ private String mAlias;
+ private final List<String> mGroup = new ArrayList<String>();
+ private IXmppFacade xmppFacade;
+ private final ServiceConnection mServConn = new BeemServiceConnection();
- private final OnClickListener mOkListener = new OnClickListener() {
+ private final OnClickListener mOkListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- boolean valid = true;
- if (getWidgetText(R.id.addc_login).length() == 0) {
- valid = false;
- } else {
- mLogin = getWidgetText(R.id.addc_login);
- }
- if (getWidgetText(R.id.addc_alias).length() == 0) {
- valid = false;
- } else {
- mAlias = getWidgetText(R.id.addc_alias);
- }
- if (getWidgetText(R.id.addc_group).length() == 0) {
- valid = false;
- } else {
- mGroup.add(getWidgetText(R.id.addc_group));
- }
- if (valid) {
- try {
- xmppFacade.getRoster().addContact(mLogin, mAlias, mGroup.toArray(new String[mGroup.size()]));
- Toast.makeText(AddContact.this, getString(R.string.AddCContactAdded), Toast.LENGTH_SHORT).show();
- finish();
- } catch (RemoteException e) {
- Toast.makeText(AddContact.this, e.getMessage(), Toast.LENGTH_SHORT).show();
- e.printStackTrace();
+ @Override
+ public void onClick(View v) {
+ boolean valid = true;
+ if (getWidgetText(R.id.addc_login).length() == 0) {
+ valid = false;
+ } else {
+ mLogin = getWidgetText(R.id.addc_login);
+ }
+ if (getWidgetText(R.id.addc_alias).length() == 0) {
+ valid = false;
+ } else {
+ mAlias = getWidgetText(R.id.addc_alias);
+ }
+ if (getWidgetText(R.id.addc_group).length() == 0) {
+ valid = false;
+ } else {
+ mGroup.add(getWidgetText(R.id.addc_group));
+ }
+ if (valid) {
+ try {
+ xmppFacade.getRoster().addContact(mLogin, mAlias, mGroup.toArray(new String[mGroup.size()]));
+ Toast.makeText(AddContact.this, getString(R.string.AddCContactAdded), Toast.LENGTH_SHORT).show();
+ finish();
+ } catch (RemoteException e) {
+ Toast.makeText(AddContact.this, e.getMessage(), Toast.LENGTH_SHORT).show();
+ e.printStackTrace();
+ }
+ setResult(RESULT_OK);
+ } else {
+ Toast.makeText(AddContact.this, getString(R.string.AddCBadForm), Toast.LENGTH_SHORT).show();
+ setResult(RESULT_CANCELED);
+ }
+
}
- setResult(RESULT_OK);
- } else {
- Toast.makeText(AddContact.this, getString(R.string.AddCBadForm), Toast.LENGTH_SHORT).show();
- setResult(RESULT_CANCELED);
- }
-
- }
- };
-
- private String getWidgetText(int id) {
- EditText widget = (EditText) this.findViewById(id);
- return widget.getText().toString();
- }
+ };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.addcontact);
- Button ok = (Button) findViewById(R.id.addc_ok);
- ok.setOnClickListener(mOkListener);
- bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
- }
-
- private class BeemServiceConnection implements ServiceConnection {
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- xmppFacade = IXmppFacade.Stub.asInterface(service);
+ private String getWidgetText(int id) {
+ EditText widget = (EditText) this.findViewById(id);
+ return widget.getText().toString();
}
@Override
- public void onServiceDisconnected(ComponentName name) {
- xmppFacade = null;
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.addcontact);
+ Button ok = (Button) findViewById(R.id.addc_ok);
+ ok.setOnClickListener(mOkListener);
+ bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unbindService(mServConn);
}
- }
+
+ private class BeemServiceConnection implements ServiceConnection {
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ xmppFacade = IXmppFacade.Stub.asInterface(service);
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ xmppFacade = null;
+ }
+ }
}
--- a/src/com/beem/project/beem/ui/ContactList.java Sat Jun 20 19:43:37 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java Sat Jun 20 22:42:26 2009 +0200
@@ -200,8 +200,7 @@
} else {
boolean found = false;
for (Contact tempContact : groupMap.get(group)) {
- if (tempContact.getJID() == str) {
- curContact = tempContact;
+ if (tempContact.getJID().equals(str)) {
found = true;
break;
}
--- a/src/com/beem/project/beem/ui/Subscription.java Sat Jun 20 19:43:37 2009 +0200
+++ b/src/com/beem/project/beem/ui/Subscription.java Sat Jun 20 22:42:26 2009 +0200
@@ -6,7 +6,6 @@
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Type;
-import com.beem.project.beem.BeemApplication;
import com.beem.project.beem.BeemService;
import com.beem.project.beem.R;
import com.beem.project.beem.service.PresenceAdapter;
@@ -19,7 +18,6 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
-import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;