# HG changeset patch # User nikita@nikita-lab # Date 1245530546 -7200 # Node ID 8d0efe92412b52a1d77ce4ed1e9c8b34a2c35b92 # Parent daf9be1b7b1fc90bab381da66fdbbb659b849470 Bug #170 Debug de l'ajout de contact, que ce soit pour un contact existant ou inexistant, pareil pour le groupe du contacte. diff -r daf9be1b7b1f -r 8d0efe92412b src/com/beem/project/beem/service/RosterAdapter.java --- 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 addresses) { + Log.i(TAG, "Ajout de l'entry"); + final int n = mRemoteRosListeners.beginBroadcast(); + + List tab = new ArrayList(); + 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 addresses) { + Log.i(TAG, "Suppression de l'entry"); + final int n = mRemoteRosListeners.beginBroadcast(); + + List tab = new ArrayList(); + 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 addresses) { + Log.d(TAG, "Update de l'entry"); + final int n = mRemoteRosListeners.beginBroadcast(); + + List tab = new ArrayList(); + 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 mRemoteRosListeners = new RemoteCallbackList(); + + private Map mContacts = new HashMap(); + + private RosterListenerAdapter mRosterListener = new RosterListenerAdapter(); /** * Constructor. - */ - public RosterListenerAdapter() { - // TODO Auto-generated constructor stub - } - - /** - * {@inheritDoc} - */ - @Override - public void entriesAdded(Collection addresses) { - Log.i(TAG, "Ajout de l'entry"); - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = new ArrayList(); - 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 addresses) { - Log.i(TAG, "Suppression de l'entry"); - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = new ArrayList(); - 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 addresses) { - Log.d(TAG, "Update de l'entry"); - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = new ArrayList(); - 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 mRemoteRosListeners = new RemoteCallbackList(); - - private Map mContacts = new HashMap(); - - 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 getContactList() throws RemoteException { - List res = new ArrayList(); - res.addAll(mContacts.values()); - return res; - } + /** + * {@inheritDoc} + */ + @Override + public List getContactList() throws RemoteException { + List res = new ArrayList(); + res.addAll(mContacts.values()); + return res; + } - /** - * {@inheritDoc} - */ - @Override - public List getGroupsNames() throws RemoteException { - Collection groups = mAdaptee.getGroups(); - ArrayList result = new ArrayList(groups.size()); - for (RosterGroup rosterGroup : groups) { - result.add(rosterGroup.getName()); + /** + * {@inheritDoc} + */ + @Override + public List getGroupsNames() throws RemoteException { + Collection groups = mAdaptee.getGroups(); + ArrayList result = new ArrayList(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 { diff -r daf9be1b7b1f -r 8d0efe92412b src/com/beem/project/beem/ui/AddContact.java --- 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 mGroup = new ArrayList(); - private IXmppFacade xmppFacade; - private final ServiceConnection mServConn = new BeemServiceConnection(); + protected static final String TAG = "AddContact"; + private String mLogin; + private String mAlias; + private final List mGroup = new ArrayList(); + 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; + } + } } diff -r daf9be1b7b1f -r 8d0efe92412b src/com/beem/project/beem/ui/ContactList.java --- 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; } diff -r daf9be1b7b1f -r 8d0efe92412b src/com/beem/project/beem/ui/Subscription.java --- 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;