# HG changeset patch
# User nikita@localhost
# Date 1245756887 -7200
# Node ID d78115a6b45bd8d64d95b2e3f02309ddbd8274ee
# Parent 0548b407992ac1a485131aa0e2391f5b4a92cacc
Feature #183
des petits trucs en plus, ajout du bouton "block user", il ne faut pas
le toucher, il y a un bug dessus encore
diff -r 0548b407992a -r d78115a6b45b res/layout/contactdialog.xml
--- a/res/layout/contactdialog.xml Mon Jun 22 18:07:29 2009 +0200
+++ b/res/layout/contactdialog.xml Tue Jun 23 13:34:47 2009 +0200
@@ -18,4 +18,7 @@
+
+
\ No newline at end of file
diff -r 0548b407992a -r d78115a6b45b res/values/strings.xml
--- a/res/values/strings.xml Mon Jun 22 18:07:29 2009 +0200
+++ b/res/values/strings.xml Tue Jun 23 13:34:47 2009 +0200
@@ -58,6 +58,7 @@
Change group
Resend suscription
User infos
+ Block user
Login:
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/BeemService.java
--- a/src/com/beem/project/beem/BeemService.java Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/BeemService.java Tue Jun 23 13:34:47 2009 +0200
@@ -2,6 +2,7 @@
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
+import org.jivesoftware.smack.PrivacyListManager;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.Roster.SubscriptionMode;
@@ -233,7 +234,7 @@
else
mService = null;
initConnectionConfig();
- mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+ mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mConnection = new XmppConnectionAdapter(mConnectionConfiguration, mLogin, mPassword, this);
initRosterRequestListener();
mBind = new XmppFacade(mConnection, this);
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/service/Contact.java
--- a/src/com/beem/project/beem/service/Contact.java Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/service/Contact.java Tue Jun 23 13:34:47 2009 +0200
@@ -29,16 +29,16 @@
*/
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
- @Override
- public Contact createFromParcel(Parcel source) {
- return new Contact(source);
- }
+ @Override
+ public Contact createFromParcel(Parcel source) {
+ return new Contact(source);
+ }
- @Override
- public Contact[] newArray(int size) {
- return new Contact[size];
- }
- };
+ @Override
+ public Contact[] newArray(int size) {
+ return new Contact[size];
+ }
+ };
private int mID;
private int mStatus;
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/service/RosterAdapter.java
--- a/src/com/beem/project/beem/service/RosterAdapter.java Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/service/RosterAdapter.java Tue Jun 23 13:34:47 2009 +0200
@@ -5,9 +5,7 @@
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;
@@ -32,276 +30,274 @@
*/
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 {
-
- /**
- * 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();
+ /**
+ * Listener for the roster events. It will call the remote listeners registered.
+ *
+ * @author darisk
+ */
+ private class RosterListenerAdapter implements RosterListener {
/**
* Constructor.
- *
- * @param roster
- * the roster to adapt
+ */
+ 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}
*/
- 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);
- }
+ @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 addRosterListener(IBeemRosterListener listen) throws RemoteException {
- if (listen != null)
- mRemoteRosListeners.register(listen);
+ public void presenceChanged(Presence presence) {
+ String user = StringUtils.parseBareAddress(presence.getFrom());
+ 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();
- /**
- * {@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;
+ 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 void addRosterListener(IBeemRosterListener listen) throws RemoteException {
+ if (listen != null)
+ mRemoteRosListeners.register(listen);
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public void createGroup(String groupname) throws RemoteException {
- mAdaptee.createGroup(groupname);
+ /**
+ * {@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;
+ }
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void deleteContact(Contact contact) throws RemoteException {
- mContacts.remove(contact.getJID());
- }
+ return res;
+ }
- /**
- * {@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 void createGroup(String groupname) throws RemoteException {
+ mAdaptee.createGroup(groupname);
+ }
- /**
- * {@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;
- }
+ /**
+ * {@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 List getContactList() throws RemoteException {
+ List res = new ArrayList();
+ res.addAll(mContacts.values());
+ return res;
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeRosterListener(IBeemRosterListener listen) throws RemoteException {
- if (listen != null)
- mRemoteRosListeners.unregister(listen);
+ /**
+ * {@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;
+ }
- /**
- *
- */
- @Override
- public void setContactName(String jid, String name) throws RemoteException {
- mContacts.get(jid).setName(name);
- mAdaptee.getEntry(jid).setName(name);
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void removeRosterListener(IBeemRosterListener listen) throws RemoteException {
+ if (listen != null)
+ mRemoteRosListeners.unregister(listen);
+ }
- @Override
- public PresenceAdapter getPresence(String jid) throws RemoteException {
- return new PresenceAdapter(mAdaptee.getPresence(jid));
- }
+ /**
+ *
+ */
+ @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 {
+ return new PresenceAdapter(mAdaptee.getPresence(jid));
+ }
}
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/service/XmppConnectionAdapter.java
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Tue Jun 23 13:34:47 2009 +0200
@@ -35,7 +35,7 @@
private String mLogin;
private String mPassword;
private RosterAdapter mRoster;
- private PrivacyListAdapter mPrivacyList;
+ private PrivacyListManagerAdapter mPrivacyList;
private BeemService mService;
private RemoteCallbackList mRemoteConnListeners = new RemoteCallbackList();
@@ -111,15 +111,21 @@
@Override
public boolean connectSync() throws RemoteException {
try {
+ try {
+ PrivacyListManager.getInstanceFor(mAdaptee);
+ } catch (NullPointerException e){
+ Log.e(TAG, "pas normal", e);
+ }
mAdaptee.connect();
mAdaptee.addConnectionListener(mConListener);
mAdaptee.login(mLogin, mPassword, "BEEM");
mChatManager = new BeemChatManager(mAdaptee.getChatManager(), mService);
- // TODO find why this cause a null pointer exception
+ mPrivacyList = new PrivacyListManagerAdapter(mAdaptee);
+
this.initFeatures(); // pour declarer les features xmpp qu'on supporte
- mPrivacyList = new PrivacyListAdapter(PrivacyListManager.getInstanceFor(mAdaptee));
ChatStateManager.getInstance(mAdaptee);
+
triggerAsynchronousConnectEvent();
return true;
} catch (XMPPException e) {
@@ -165,7 +171,7 @@
Roster adap = mAdaptee.getRoster();
if (adap == null)
return null;
- mRoster = new RosterAdapter(adap);
+ mRoster = new RosterAdapter(adap);
return mRoster;
}
@@ -206,6 +212,19 @@
mConListener.onConnect();
}
/**
+ * @param mPrivacyList the mPrivacyList to set
+ */
+ public void setPrivacyList(PrivacyListManagerAdapter mPrivacyList) {
+ this.mPrivacyList = mPrivacyList;
+ }
+
+ /**
+ * @return the mPrivacyList
+ */
+ public PrivacyListManagerAdapter getPrivacyList() {
+ return mPrivacyList;
+ }
+ /**
* Listener for XMPP connection events. It will calls the remote listeners for connexion events.
* @author darisk
*/
@@ -223,6 +242,7 @@
@Override
public void connectionClosed() {
mRoster = null;
+
final int n = mRemoteConnListeners.beginBroadcast();
for (int i = 0; i < n; i++) {
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/service/XmppFacade.java
--- a/src/com/beem/project/beem/service/XmppFacade.java Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/service/XmppFacade.java Tue Jun 23 13:34:47 2009 +0200
@@ -117,4 +117,9 @@
presence2.setTo(presence.getTo());
mConnexion.getAdaptee().sendPacket(presence2);
}
+
+ @Override
+ public void blockUser(String jid) throws RemoteException {
+ mConnexion.getPrivacyList().addBlockedUser(jid);
+ }
}
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/service/aidl/IXmppFacade.aidl
--- a/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Tue Jun 23 13:34:47 2009 +0200
@@ -46,4 +46,5 @@
void sendPresencePacket(in PresenceAdapter presence);
+ void blockUser(in String jid);
}
diff -r 0548b407992a -r d78115a6b45b src/com/beem/project/beem/ui/ContactDialog.java
--- a/src/com/beem/project/beem/ui/ContactDialog.java Mon Jun 22 18:07:29 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactDialog.java Tue Jun 23 13:34:47 2009 +0200
@@ -47,6 +47,8 @@
button.setOnClickListener(new resendListener());
button = (Button) findViewById(R.id.CDInfos);
button.setOnClickListener(new infosListener());
+ button = (Button) findViewById(R.id.CDBlock);
+ button.setOnClickListener(new blockListener());
mContext.bindService(new Intent(mContext, BeemService.class), mServConn, Service.BIND_AUTO_CREATE);
}
@@ -63,6 +65,19 @@
}
}
+
+ class blockListener implements View.OnClickListener {
+
+ @Override
+ public void onClick(View v) {
+ try {
+ xmppFacade.blockUser("beem.test@gmail.com");
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
class chatListener implements View.OnClickListener {
@@ -80,8 +95,7 @@
class groupListener implements View.OnClickListener {
@Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
+ public void onClick(View v) {
dismiss();
}
@@ -90,8 +104,7 @@
class infosListener implements View.OnClickListener {
@Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
+ public void onClick(View v) {
dismiss();
}