author | darisk@kaaliyah |
Mon, 10 Aug 2009 05:32:45 +0200 | |
changeset 342 | 2b489d4a7917 |
parent 326 | c5f000965df8 |
child 351 | 718557c6c309 |
permissions | -rw-r--r-- |
17 | 1 |
package com.beem.project.beem; |
2 |
||
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
72
diff
changeset
|
3 |
import org.jivesoftware.smack.ConnectionConfiguration; |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
4 |
import org.jivesoftware.smack.PacketListener; |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
5 |
import org.jivesoftware.smack.Roster; |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
6 |
import org.jivesoftware.smack.XMPPConnection; |
315
151b1b64f407
ajout de la fonctionnalite require ssl/tls dans le service
nikita@localhost
parents:
313
diff
changeset
|
7 |
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode; |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
8 |
import org.jivesoftware.smack.Roster.SubscriptionMode; |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
9 |
import org.jivesoftware.smack.filter.PacketFilter; |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
10 |
import org.jivesoftware.smack.packet.Packet; |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
11 |
import org.jivesoftware.smack.packet.Presence; |
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
72
diff
changeset
|
12 |
import org.jivesoftware.smack.proxy.ProxyInfo; |
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
72
diff
changeset
|
13 |
import org.jivesoftware.smack.proxy.ProxyInfo.ProxyType; |
326 | 14 |
import org.jivesoftware.smack.util.StringUtils; |
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
15 |
|
17 | 16 |
import android.app.Notification; |
17 |
import android.app.NotificationManager; |
|
147 | 18 |
import android.app.PendingIntent; |
17 | 19 |
import android.app.Service; |
20 |
import android.content.Intent; |
|
19
213b84d2e743
Improve the service. It connect with a xmpp server running on the
Da Risk <darisk972@gmail.com>
parents:
18
diff
changeset
|
21 |
import android.content.SharedPreferences; |
297 | 22 |
import android.content.SharedPreferences.Editor; |
17 | 23 |
import android.os.IBinder; |
18 | 24 |
import android.os.RemoteException; |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
25 |
import android.util.Log; |
216 | 26 |
import android.widget.ArrayAdapter; |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
27 |
|
67
8c3870db8e31
Rename some XMPP* classes in Xmpp*
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
28 |
import com.beem.project.beem.service.XmppConnectionAdapter; |
8c3870db8e31
Rename some XMPP* classes in Xmpp*
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
29 |
import com.beem.project.beem.service.XmppFacade; |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
30 |
import com.beem.project.beem.service.aidl.IBeemConnectionListener; |
67
8c3870db8e31
Rename some XMPP* classes in Xmpp*
Da Risk <darisk972@gmail.com>
parents:
55
diff
changeset
|
31 |
import com.beem.project.beem.service.aidl.IXmppFacade; |
147 | 32 |
import com.beem.project.beem.ui.Subscription; |
72
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
33 |
|
17 | 34 |
/** |
326 | 35 |
* This class is for the Beem service. The connection to the xmpp server will be made asynchronously when the service |
36 |
* will start. |
|
17 | 37 |
* @author darisk |
38 |
*/ |
|
39 |
public class BeemService extends Service { |
|
40 |
||
72
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
41 |
/** |
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
42 |
* The id to use for status notification. |
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
43 |
*/ |
326 | 44 |
public static final int NOTIFICATION_STATUS_ID = 100; |
72
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
45 |
|
326 | 46 |
private NotificationManager mNotificationManager; |
47 |
private XmppConnectionAdapter mConnection; |
|
48 |
private SharedPreferences mSettings; |
|
49 |
private String mLogin; |
|
50 |
private String mPassword; |
|
51 |
private String mHost; |
|
52 |
private String mService; |
|
53 |
private int mPort; |
|
80
29f0d6a23321
Le proxy devrait marcher a peu pres.
Da Risk <darisk972@gmail.com>
parents:
72
diff
changeset
|
54 |
private ConnectionConfiguration mConnectionConfiguration; |
326 | 55 |
private ProxyInfo mProxyInfo; |
56 |
private boolean mUseProxy; |
|
57 |
private IXmppFacade.Stub mBind; |
|
21 | 58 |
|
55
66732dd2cb77
Add an interface for sending im message.
Da Risk <darisk972@gmail.com>
parents:
42
diff
changeset
|
59 |
/** |
72
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
60 |
* Constructor. |
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
61 |
*/ |
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
62 |
public BeemService() { |
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
63 |
} |
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
64 |
|
cdedc3a25d39
Show a progress dialog during connection with the server
Da Risk <darisk972@gmail.com>
parents:
67
diff
changeset
|
65 |
/** |
212 | 66 |
* Close the connection to the xmpp server. |
55
66732dd2cb77
Add an interface for sending im message.
Da Risk <darisk972@gmail.com>
parents:
42
diff
changeset
|
67 |
*/ |
212 | 68 |
private void closeConnection() { |
69 |
if (mConnection != null) |
|
70 |
mConnection.disconnect(); |
|
17 | 71 |
} |
147 | 72 |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
73 |
/** |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
74 |
* Initialise la configuration de la connexion. |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
75 |
*/ |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
76 |
private void initConnectionConfig() { |
193 | 77 |
// TODO mettre a false par defaut et remplacer les valeurs par defaut |
313 | 78 |
java.security.Security.addProvider(new com.sun.security.sasl.Provider()); |
212 | 79 |
mUseProxy = mSettings.getBoolean(getString(R.string.settings_key_proxy_use), false); |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
80 |
if (mUseProxy) { |
216 | 81 |
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.proxy_types, |
313 | 82 |
android.R.layout.simple_spinner_item); |
216 | 83 |
int pos = mSettings.getInt(getString(R.string.settings_key_proxy_type), 0); |
84 |
String stype = adapter.getItem(pos).toString(); |
|
212 | 85 |
String phost = mSettings.getString(getString(R.string.settings_key_proxy_server), ""); |
86 |
String puser = mSettings.getString(getString(R.string.settings_key_proxy_username), ""); |
|
87 |
String ppass = mSettings.getString(getString(R.string.settings_key_proxy_password), ""); |
|
88 |
int pport = Integer.parseInt(mSettings.getString(getString(R.string.settings_key_proxy_port), "1080")); |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
89 |
ProxyInfo.ProxyType type = ProxyType.valueOf(stype); |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
90 |
mProxyInfo = new ProxyInfo(type, phost, pport, puser, ppass); |
193 | 91 |
if (mService != null) |
92 |
mConnectionConfiguration = new ConnectionConfiguration(mHost, mPort, mService, mProxyInfo); |
|
93 |
else |
|
94 |
mConnectionConfiguration = new ConnectionConfiguration(mHost, mPort, mProxyInfo); |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
95 |
} else { |
193 | 96 |
if (mService != null) |
97 |
mConnectionConfiguration = new ConnectionConfiguration(mHost, mPort, mService); |
|
98 |
else |
|
99 |
mConnectionConfiguration = new ConnectionConfiguration(mHost, mPort); |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
100 |
} |
342 | 101 |
if (mSettings.getBoolean(getString(R.string.settings_key_xmpp_tls_use), false)) { |
315
151b1b64f407
ajout de la fonctionnalite require ssl/tls dans le service
nikita@localhost
parents:
313
diff
changeset
|
102 |
mConnectionConfiguration.setSecurityMode(SecurityMode.required); |
151b1b64f407
ajout de la fonctionnalite require ssl/tls dans le service
nikita@localhost
parents:
313
diff
changeset
|
103 |
} |
133 | 104 |
mConnectionConfiguration.setDebuggerEnabled(false); |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
105 |
mConnectionConfiguration.setSendPresence(true); |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
106 |
} |
99 | 107 |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
108 |
private void initRosterRequestListener() { |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
109 |
Roster.setDefaultSubscriptionMode(SubscriptionMode.manual); |
193 | 110 |
final XMPPConnection con = mConnection.getAdaptee(); |
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
111 |
try { |
212 | 112 |
// l'ajout d'un packet listener ne peut etre effectuer que lorsqu'on est connecte au |
113 |
// serveur |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
114 |
mConnection.addConnectionListener(new IBeemConnectionListener.Stub() { |
99 | 115 |
|
116 |
@Override |
|
212 | 117 |
public void connectionClosed() throws RemoteException { |
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
118 |
Log.i("BeemService", "connectionClosed()"); |
212 | 119 |
|
120 |
} |
|
121 |
||
122 |
@Override |
|
123 |
public void connectionClosedOnError() throws RemoteException { |
|
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
124 |
Log.i("BeemService", "connectionClosedOnError()"); |
212 | 125 |
|
126 |
} |
|
127 |
||
128 |
@Override |
|
129 |
public void connectionFailed(String errorMsg) throws RemoteException { |
|
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
130 |
Log.i("BeemService", "connectionFailed()"); |
212 | 131 |
|
132 |
} |
|
133 |
||
134 |
@Override |
|
135 |
public void onConnect() throws RemoteException { |
|
136 |
||
137 |
PacketFilter filter = new PacketFilter() { |
|
138 |
||
139 |
@Override |
|
140 |
public boolean accept(Packet packet) { |
|
141 |
if (packet instanceof Presence) { |
|
142 |
Presence pres = (Presence) packet; |
|
143 |
if (pres.getType() == Presence.Type.subscribe) |
|
144 |
return true; |
|
145 |
} |
|
146 |
return false; |
|
147 |
} |
|
148 |
}; |
|
149 |
con.addPacketListener(new PacketListener() { |
|
150 |
||
151 |
@Override |
|
152 |
public void processPacket(Packet packet) { |
|
153 |
String from = packet.getFrom(); |
|
154 |
Notification notif = new Notification(com.beem.project.beem.R.drawable.signal, |
|
342 | 155 |
"Demande d'ajout", System.currentTimeMillis()); |
212 | 156 |
notif.defaults = Notification.DEFAULT_ALL; |
157 |
notif.flags = Notification.FLAG_AUTO_CANCEL; |
|
158 |
Intent intent = new Intent(BeemService.this, Subscription.class); |
|
159 |
intent.putExtra("from", from); |
|
326 | 160 |
notif.setLatestEventInfo(BeemService.this, from, "demande d'ajout de " + from, |
161 |
PendingIntent.getActivity(BeemService.this, 0, intent, PendingIntent.FLAG_ONE_SHOT)); |
|
212 | 162 |
int id = packet.hashCode(); |
163 |
sendNotification(id, notif); |
|
164 |
} |
|
165 |
}, filter); |
|
297 | 166 |
// set status connect in the preferences |
167 |
// private static final int AVAILABLE_IDX = 5; |
|
168 |
Editor edit = mSettings.edit(); |
|
169 |
edit.putInt(getString(R.string.PreferenceStatus), 1); |
|
170 |
edit.commit(); |
|
212 | 171 |
} |
172 |
||
173 |
@Override |
|
174 |
public void reconnectingIn(int seconds) throws RemoteException { |
|
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
175 |
Log.i("BeemService", "reconnectingIn()"); |
212 | 176 |
|
177 |
} |
|
178 |
||
179 |
@Override |
|
180 |
public void reconnectionFailed() throws RemoteException { |
|
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
181 |
Log.i("BeemService", "reconnectionFailed()"); |
212 | 182 |
|
183 |
} |
|
184 |
||
185 |
@Override |
|
99 | 186 |
public void reconnectionSuccessful() throws RemoteException { |
239
65369afd96d3
Rajout de Log dans le beem service pour les reconnections etc.
marseille@marseille-desktop
parents:
236
diff
changeset
|
187 |
Log.i("BeemService", "reconnectionSuccessful()"); |
99 | 188 |
PacketFilter filter = new PacketFilter() { |
189 |
||
190 |
@Override |
|
191 |
public boolean accept(Packet packet) { |
|
192 |
if (packet instanceof Presence) { |
|
193 |
Presence pres = (Presence) packet; |
|
194 |
if (pres.getType() == Presence.Type.subscribe) |
|
195 |
return true; |
|
196 |
} |
|
197 |
return false; |
|
198 |
} |
|
199 |
}; |
|
200 |
con.addPacketListener(new PacketListener() { |
|
201 |
||
202 |
@Override |
|
203 |
public void processPacket(Packet packet) { |
|
204 |
// TODO Auto-generated method stub |
|
147 | 205 |
Log.d("TEST", "Une demande recue"); |
99 | 206 |
} |
207 |
}, filter); |
|
208 |
} |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
209 |
}); |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
210 |
} catch (RemoteException e) { |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
211 |
// TODO Auto-generated catch block |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
212 |
e.printStackTrace(); |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
213 |
} |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
214 |
} |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
215 |
|
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
216 |
/** |
212 | 217 |
* {@inheritDoc} |
218 |
*/ |
|
219 |
@Override |
|
220 |
public IBinder onBind(Intent intent) { |
|
263
ff0b4790a5ed
La gestion de la connection et des changement de settings a ete revu.
marseille@marseille-desktop
parents:
239
diff
changeset
|
221 |
Log.e("BEEMSERVICE", "ONBIND()"); |
212 | 222 |
return mBind; |
223 |
} |
|
224 |
||
225 |
/** |
|
226 |
* {@inheritDoc} |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
227 |
*/ |
212 | 228 |
@Override |
229 |
public void onCreate() { |
|
230 |
||
231 |
super.onCreate(); |
|
232 |
mSettings = getSharedPreferences(getString(R.string.settings_filename), MODE_PRIVATE); |
|
233 |
mLogin = mSettings.getString(getString(R.string.settings_key_account_username), ""); |
|
234 |
mPassword = mSettings.getString(getString(R.string.settings_key_account_password), ""); |
|
235 |
mHost = mSettings.getString(getString(R.string.settings_key_xmpp_server), ""); |
|
236 |
mPort = Integer.parseInt(mSettings.getString(getString(R.string.settings_key_xmpp_port), "5222")); |
|
237 |
||
263
ff0b4790a5ed
La gestion de la connection et des changement de settings a ete revu.
marseille@marseille-desktop
parents:
239
diff
changeset
|
238 |
Log.i("BEEEMSERVICE", mLogin); |
326 | 239 |
/* |
240 |
* Gestion pour gmail. |
|
241 |
*/ |
|
242 |
if ("".equals(mHost)) { |
|
243 |
mHost = StringUtils.parseServer(mLogin); |
|
212 | 244 |
mService = null; |
326 | 245 |
mLogin = StringUtils.parseName(mLogin); |
246 |
} else |
|
247 |
mService = StringUtils.parseServer(mLogin); |
|
212 | 248 |
initConnectionConfig(); |
326 | 249 |
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); |
212 | 250 |
mConnection = new XmppConnectionAdapter(mConnectionConfiguration, mLogin, mPassword, this); |
251 |
initRosterRequestListener(); |
|
252 |
mBind = new XmppFacade(mConnection, this); |
|
253 |
} |
|
254 |
||
255 |
/** |
|
256 |
* {@inheritDoc} |
|
257 |
*/ |
|
258 |
@Override |
|
259 |
public void onDestroy() { |
|
263
ff0b4790a5ed
La gestion de la connection et des changement de settings a ete revu.
marseille@marseille-desktop
parents:
239
diff
changeset
|
260 |
super.onDestroy(); |
212 | 261 |
closeConnection(); |
262 |
mNotificationManager.cancel(NOTIFICATION_STATUS_ID); |
|
263
ff0b4790a5ed
La gestion de la connection et des changement de settings a ete revu.
marseille@marseille-desktop
parents:
239
diff
changeset
|
263 |
Log.e("BEEEMSERVICE", "ONDESTROY"); |
212 | 264 |
} |
265 |
||
266 |
/** |
|
267 |
* {@inheritDoc} |
|
268 |
*/ |
|
269 |
@Override |
|
270 |
public void onStart(Intent intent, int startId) { |
|
263
ff0b4790a5ed
La gestion de la connection et des changement de settings a ete revu.
marseille@marseille-desktop
parents:
239
diff
changeset
|
271 |
super.onStart(intent, startId); |
212 | 272 |
try { |
273 |
mConnection.connectAsync(); |
|
274 |
} catch (RemoteException e) { |
|
275 |
// TODO Auto-generated catch block |
|
276 |
e.printStackTrace(); |
|
277 |
} |
|
278 |
} |
|
279 |
||
280 |
/** |
|
281 |
* Show a notification. |
|
326 | 282 |
* @param id the id of the notification. |
283 |
* @param notif the notification to show |
|
212 | 284 |
*/ |
285 |
public void sendNotification(int id, Notification notif) { |
|
286 |
mNotificationManager.notify(id, notif); |
|
94
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
287 |
} |
904759c1bd62
Draft de reception d'une demande d'ajout.
Da Risk <darisk972@gmail.com>
parents:
83
diff
changeset
|
288 |
|
17 | 289 |
} |