author | nikita@nikita-lab |
Fri, 22 May 2009 16:45:49 +0200 | |
changeset 207 | dbc0c467c3e6 |
parent 194 | 4f1b3af03671 |
child 209 | f5b9da8365f5 |
permissions | -rw-r--r-- |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
1 |
/** |
55
66732dd2cb77
Add an interface for sending im message.
Da Risk <darisk972@gmail.com>
parents:
51
diff
changeset
|
2 |
* |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
3 |
*/ |
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
4 |
package com.beem.project.beem.service; |
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
5 |
|
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
6 |
import java.util.ArrayList; |
51
85705bdb77ab
Ajout d'une methode pour recuperer les groups du roster
Da Risk <darisk972@gmail.com>
parents:
38
diff
changeset
|
7 |
import java.util.Collection; |
38
3e76846c48a9
We can now get the contact list of the user.
Da Risk <darisk972@gmail.com>
parents:
30
diff
changeset
|
8 |
import java.util.HashMap; |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
9 |
import java.util.List; |
38
3e76846c48a9
We can now get the contact list of the user.
Da Risk <darisk972@gmail.com>
parents:
30
diff
changeset
|
10 |
import java.util.Map; |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
11 |
|
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
12 |
import org.jivesoftware.smack.Roster; |
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
13 |
import org.jivesoftware.smack.RosterEntry; |
51
85705bdb77ab
Ajout d'une methode pour recuperer les groups du roster
Da Risk <darisk972@gmail.com>
parents:
38
diff
changeset
|
14 |
import org.jivesoftware.smack.RosterGroup; |
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
15 |
import org.jivesoftware.smack.RosterListener; |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
16 |
import org.jivesoftware.smack.XMPPException; |
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
17 |
import org.jivesoftware.smack.packet.Presence; |
69 | 18 |
import org.jivesoftware.smack.util.StringUtils; |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
19 |
|
61 | 20 |
import com.beem.project.beem.service.aidl.IBeemRosterListener; |
21 |
||
22 |
import android.os.RemoteCallbackList; |
|
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
23 |
import android.os.RemoteException; |
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
24 |
import android.util.Log; |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
25 |
|
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
26 |
/** |
38
3e76846c48a9
We can now get the contact list of the user.
Da Risk <darisk972@gmail.com>
parents:
30
diff
changeset
|
27 |
* This class implement a Roster adapter for BEEM. |
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
28 |
* @author darisk |
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
29 |
*/ |
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
30 |
public class RosterAdapter extends com.beem.project.beem.service.aidl.IRoster.Stub { |
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
31 |
|
69 | 32 |
private static final String TAG = "RosterAdapter"; |
33 |
private Roster mAdaptee; |
|
180
d77ea17eea3a
ajout des groupes dans ContactAdapter.java
nikita@nikita-rack
parents:
157
diff
changeset
|
34 |
private RemoteCallbackList<IBeemRosterListener> mRemoteRosListeners = new RemoteCallbackList<IBeemRosterListener>(); |
69 | 35 |
private Map<String, Contact> mContacts = new HashMap<String, Contact>(); |
36 |
||
37 |
private RosterListenerAdapter mRosterListener = new RosterListenerAdapter(); |
|
38 |
||
39 |
/** |
|
40 |
* Constructor. |
|
41 |
* @param roster the roster to adapt |
|
42 |
*/ |
|
43 |
public RosterAdapter(final Roster roster) { |
|
44 |
mAdaptee = roster; |
|
45 |
roster.addRosterListener(mRosterListener); |
|
46 |
for (RosterEntry entry : roster.getEntries()) { |
|
47 |
String user = StringUtils.parseBareAddress(entry.getUser()); |
|
124
4eaf1efcadda
ca devrait etre bon pour la presence a la connection
nikita@nikita-rack
parents:
99
diff
changeset
|
48 |
if (!mContacts.containsKey(user)) { |
4eaf1efcadda
ca devrait etre bon pour la presence a la connection
nikita@nikita-rack
parents:
99
diff
changeset
|
49 |
Contact c = new Contact(user); |
4eaf1efcadda
ca devrait etre bon pour la presence a la connection
nikita@nikita-rack
parents:
99
diff
changeset
|
50 |
c.setStatus(roster.getPresence(user)); |
181 | 51 |
c.setGroups(entry.getGroups()); |
180
d77ea17eea3a
ajout des groupes dans ContactAdapter.java
nikita@nikita-rack
parents:
157
diff
changeset
|
52 |
mContacts.put(user, c); |
124
4eaf1efcadda
ca devrait etre bon pour la presence a la connection
nikita@nikita-rack
parents:
99
diff
changeset
|
53 |
} |
69 | 54 |
} |
55 |
} |
|
56 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
57 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
58 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
59 |
*/ |
69 | 60 |
@Override |
61 |
public void createGroup(String groupname) throws RemoteException { |
|
62 |
mAdaptee.createGroup(groupname); |
|
63 |
} |
|
64 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
65 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
66 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
67 |
*/ |
69 | 68 |
@Override |
69 |
public Contact addContact(String user, String name, String[] groups) throws RemoteException { |
|
70 |
try { |
|
71 |
mAdaptee.createEntry(user, name, groups); |
|
72 |
Contact res = new Contact(user); |
|
73 |
mContacts.put(user, res); |
|
191
cc21283865ad
La liste marche, mais chut faut pas le dire a darkmouchefdeprojtyran
nikita@nikita-lab
parents:
184
diff
changeset
|
74 |
for (String group : groups) { |
194
4f1b3af03671
debug de la contactlist avec reecriture d'une bonne grosse partie
nikita@nikita-lab
parents:
191
diff
changeset
|
75 |
//mAdaptee.createGroup(group); |
191
cc21283865ad
La liste marche, mais chut faut pas le dire a darkmouchefdeprojtyran
nikita@nikita-lab
parents:
184
diff
changeset
|
76 |
res.addGroup(group); |
cc21283865ad
La liste marche, mais chut faut pas le dire a darkmouchefdeprojtyran
nikita@nikita-lab
parents:
184
diff
changeset
|
77 |
} |
69 | 78 |
return res; |
79 |
} catch (XMPPException e) { |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
80
diff
changeset
|
80 |
Log.e(TAG, "Error while adding new contact", e); |
69 | 81 |
return null; |
61 | 82 |
} |
207
dbc0c467c3e6
ajout de la gestion du resend de la subscription request
nikita@nikita-lab
parents:
194
diff
changeset
|
83 |
} |
61 | 84 |
|
69 | 85 |
/** |
86 |
* {@inheritDoc} |
|
87 |
*/ |
|
88 |
@Override |
|
89 |
public void deleteContact(Contact contact) throws RemoteException { |
|
90 |
mContacts.remove(contact.getJID()); |
|
91 |
} |
|
92 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
93 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
94 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
95 |
*/ |
69 | 96 |
@Override |
97 |
public void addConnectionListener(IBeemRosterListener listen) throws RemoteException { |
|
98 |
if (listen != null) |
|
99 |
mRemoteRosListeners.register(listen); |
|
100 |
} |
|
101 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
102 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
103 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
104 |
*/ |
69 | 105 |
@Override |
106 |
public void removeConnectionListener(IBeemRosterListener listen) throws RemoteException { |
|
107 |
if (listen != null) |
|
108 |
mRemoteRosListeners.unregister(listen); |
|
109 |
} |
|
110 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
111 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
112 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
113 |
*/ |
69 | 114 |
@Override |
115 |
public Contact getContact(String jid) throws RemoteException { |
|
116 |
return mContacts.get(jid); |
|
117 |
} |
|
118 |
||
119 |
/** |
|
120 |
* {@inheritDoc} |
|
121 |
*/ |
|
122 |
@Override |
|
123 |
public List<Contact> getContactList() throws RemoteException { |
|
124 |
List<Contact> res = new ArrayList<Contact>(); |
|
125 |
res.addAll(mContacts.values()); |
|
126 |
return res; |
|
127 |
} |
|
128 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
129 |
/** |
180
d77ea17eea3a
ajout des groupes dans ContactAdapter.java
nikita@nikita-rack
parents:
157
diff
changeset
|
130 |
* Listener for the roster events. It will call the remote listeners registered. |
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
131 |
* @author darisk |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
132 |
*/ |
69 | 133 |
private class RosterListenerAdapter implements RosterListener { |
61 | 134 |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
135 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
136 |
* Constructor. |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
137 |
*/ |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
138 |
public RosterListenerAdapter() { |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
139 |
// TODO Auto-generated constructor stub |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
140 |
} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
141 |
|
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
142 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
143 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
144 |
*/ |
61 | 145 |
@Override |
69 | 146 |
public void entriesAdded(Collection<String> addresses) { |
147 |
Log.i(TAG, "Ajout de l'entry"); |
|
148 |
final int n = mRemoteRosListeners.beginBroadcast(); |
|
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
149 |
|
69 | 150 |
List<String> tab = new ArrayList<String>(); |
151 |
for (int i = 0; i < n; i++) { |
|
152 |
IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); |
|
153 |
try { |
|
154 |
tab.addAll(addresses); |
|
155 |
listener.onEntriesAdded(tab); |
|
156 |
} catch (RemoteException e) { |
|
157 |
// The RemoteCallbackList will take care of removing the |
|
158 |
// dead listeners. |
|
159 |
Log.w(TAG, "Error while adding roster entries", e); |
|
160 |
} |
|
161 |
} |
|
162 |
mRemoteRosListeners.finishBroadcast(); |
|
61 | 163 |
} |
64 | 164 |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
165 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
166 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
167 |
*/ |
61 | 168 |
@Override |
69 | 169 |
public void entriesDeleted(Collection<String> addresses) { |
170 |
Log.i(TAG, "Suppression de l'entry"); |
|
171 |
final int n = mRemoteRosListeners.beginBroadcast(); |
|
172 |
||
173 |
List<String> tab = new ArrayList<String>(); |
|
174 |
for (int i = 0; i < n; i++) { |
|
175 |
IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); |
|
176 |
try { |
|
177 |
tab.addAll(addresses); |
|
178 |
listener.onEntriesDeleted(tab); |
|
179 |
} catch (RemoteException e) { |
|
180 |
// The RemoteCallbackList will take care of removing the |
|
181 |
// dead listeners. |
|
182 |
Log.w(TAG, "Error while deleting roster entries", e); |
|
183 |
} |
|
184 |
} |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
185 |
mRemoteRosListeners.finishBroadcast(); |
61 | 186 |
} |
187 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
188 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
189 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
190 |
*/ |
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
191 |
@Override |
69 | 192 |
public void entriesUpdated(Collection<String> addresses) { |
99 | 193 |
Log.d(TAG, "Update de l'entry"); |
69 | 194 |
final int n = mRemoteRosListeners.beginBroadcast(); |
195 |
||
196 |
List<String> tab = new ArrayList<String>(); |
|
197 |
for (int i = 0; i < n; i++) { |
|
198 |
IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); |
|
199 |
try { |
|
200 |
tab.addAll(addresses); |
|
201 |
listener.onEntriesUpdated(tab); |
|
202 |
} catch (RemoteException e) { |
|
203 |
// The RemoteCallbackList will take care of removing the |
|
204 |
// dead listeners. |
|
205 |
Log.w(TAG, "Error while updating roster entries", e); |
|
206 |
} |
|
207 |
} |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
208 |
mRemoteRosListeners.finishBroadcast(); |
61 | 209 |
} |
210 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
211 |
/** |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
212 |
* {@inheritDoc} |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
213 |
*/ |
69 | 214 |
@Override |
215 |
public void presenceChanged(Presence presence) { |
|
216 |
Log.i(TAG, "Changement de Presence"); |
|
217 |
/* gestion du roster coter sedirvice */ |
|
218 |
String user = StringUtils.parseBareAddress(presence.getFrom()); |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
219 |
Log.d(TAG, "User : " + user); |
69 | 220 |
Contact c = mContacts.get(StringUtils.parseBareAddress(user)); |
221 |
if (c == null) { |
|
222 |
c = new Contact(user); |
|
223 |
mContacts.put(user, c); |
|
224 |
} |
|
225 |
c.addRes(StringUtils.parseResource(presence.getFrom())); |
|
226 |
c.setStatus(mAdaptee.getPresence(presence.getFrom())); |
|
184 | 227 |
c.setMsgState(presence.getStatus()); |
69 | 228 |
/* redispatch vers les IBeemRosterListener */ |
229 |
final int n = mRemoteRosListeners.beginBroadcast(); |
|
61 | 230 |
|
69 | 231 |
for (int i = 0; i < n; i++) { |
232 |
IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); |
|
233 |
try { |
|
234 |
listener.onPresenceChanged(new PresenceAdapter(presence)); |
|
235 |
} catch (RemoteException e) { |
|
236 |
// The RemoteCallbackList will take care of removing the |
|
237 |
// dead listeners. |
|
238 |
Log.w(TAG, "Error while updating roster entries", e); |
|
239 |
} |
|
240 |
} |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
69
diff
changeset
|
241 |
mRemoteRosListeners.finishBroadcast(); |
69 | 242 |
} |
243 |
} |
|
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
244 |
|
69 | 245 |
/** |
246 |
* {@inheritDoc} |
|
247 |
*/ |
|
248 |
@Override |
|
249 |
public List<String> getGroupsNames() throws RemoteException { |
|
250 |
Collection<RosterGroup> groups = mAdaptee.getGroups(); |
|
251 |
ArrayList<String> result = new ArrayList<String>(groups.size()); |
|
252 |
for (RosterGroup rosterGroup : groups) { |
|
253 |
result.add(rosterGroup.getName()); |
|
58
ae9ca6ed9095
Add a listner for presence message in the RosterAdapter class
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
254 |
} |
69 | 255 |
return result; |
256 |
} |
|
51
85705bdb77ab
Ajout d'une methode pour recuperer les groups du roster
Da Risk <darisk972@gmail.com>
parents:
38
diff
changeset
|
257 |
|
30
7057a9d3657a
Add some adapter for smack classes
Da Risk <darisk972@gmail.com>
parents:
diff
changeset
|
258 |
} |