--- a/src/com/beem/project/beem/BeemService.java Sat Mar 19 19:31:31 2011 +0100
+++ b/src/com/beem/project/beem/BeemService.java Sat Mar 19 20:04:33 2011 +0100
@@ -40,26 +40,29 @@
Flavien Astraud, November 26, 2009
Head of the EIP Laboratory.
-*/
+ */
package com.beem.project.beem;
+import java.util.ArrayList;
+import java.util.List;
+
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.Roster.SubscriptionMode;
import org.jivesoftware.smack.provider.ProviderManager;
+import org.jivesoftware.smack.proxy.ProxyInfo;
+import org.jivesoftware.smack.proxy.ProxyInfo.ProxyType;
+import org.jivesoftware.smack.util.StringUtils;
+import org.jivesoftware.smackx.packet.ChatStateExtension;
import org.jivesoftware.smackx.provider.DelayInfoProvider;
import org.jivesoftware.smackx.provider.DiscoverInfoProvider;
import org.jivesoftware.smackx.provider.DiscoverItemsProvider;
-import org.jivesoftware.smackx.packet.ChatStateExtension;
-import org.jivesoftware.smack.proxy.ProxyInfo;
-import org.jivesoftware.smack.proxy.ProxyInfo.ProxyType;
-import org.jivesoftware.smack.util.StringUtils;
+import org.jivesoftware.smackx.pubsub.provider.EventProvider;
+import org.jivesoftware.smackx.pubsub.provider.ItemProvider;
+import org.jivesoftware.smackx.pubsub.provider.ItemsProvider;
import org.jivesoftware.smackx.pubsub.provider.PubSubProvider;
-import org.jivesoftware.smackx.pubsub.provider.ItemsProvider;
-import org.jivesoftware.smackx.pubsub.provider.ItemProvider;
-import org.jivesoftware.smackx.pubsub.provider.EventProvider;
import android.app.Notification;
import android.app.NotificationManager;
@@ -80,18 +83,16 @@
import com.beem.project.beem.service.XmppConnectionAdapter;
import com.beem.project.beem.service.XmppFacade;
import com.beem.project.beem.service.aidl.IXmppFacade;
-import com.beem.project.beem.utils.BeemBroadcastReceiver;
-import com.beem.project.beem.utils.BeemConnectivity;
-import com.beem.project.beem.utils.Status;
import com.beem.project.beem.smack.avatar.AvatarMetadataProvider;
import com.beem.project.beem.smack.avatar.AvatarProvider;
import com.beem.project.beem.smack.caps.CapsProvider;
+import com.beem.project.beem.utils.BeemBroadcastReceiver;
+import com.beem.project.beem.utils.BeemConnectivity;
+import com.beem.project.beem.utils.Status;
/**
- * This class is for the Beem service.
- * It must contains every global informations needed to maintain the background service.
- * The connection to the xmpp server will be made asynchronously when the service
- * will start.
+ * This class is for the Beem service. It must contains every global informations needed to maintain the background
+ * service. The connection to the xmpp server will be made asynchronously when the service will start.
* @author darisk
*/
public class BeemService extends Service {
@@ -104,7 +105,7 @@
//private static final String COMMAND_NAMESPACE = "http://jabber.org/protocol/commands";
private NotificationManager mNotificationManager;
- private XmppConnectionAdapter mConnection;
+ private List<XmppConnectionAdapter> mConnection = new ArrayList<XmppConnectionAdapter>();
private SharedPreferences mSettings;
private String mLogin;
private String mPassword;
@@ -114,7 +115,7 @@
private ConnectionConfiguration mConnectionConfiguration;
private ProxyInfo mProxyInfo;
private boolean mUseProxy;
- private IXmppFacade.Stub mBind;
+ private ArrayList<XmppFacade> mBind = new ArrayList<XmppFacade>();
private BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver();
private BeemServiceBroadcastReceiver mOnOffReceiver = new BeemServiceBroadcastReceiver();
@@ -167,19 +168,24 @@
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "ONBIND()");
- return mBind;
+ //TODO: Prendre le bon mbind dans le tableau
+ return mBind.get(0);
}
@Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "ONUNBIND()");
- if (!mConnection.getAdaptee().isConnected()) {
+ boolean isConnected = true;
+ for (XmppConnectionAdapter connection : mConnection) {
+ if (!connection.getAdaptee().isConnected())
+ isConnected = false;
+ }
+ if (!isConnected) {
this.stopSelf();
}
return true;
}
-
/**
* {@inheritDoc}
*/
@@ -208,8 +214,8 @@
String tmpPort = mSettings.getString("settings_key_xmpp_port", "5222");
mPort = ("".equals(tmpPort)) ? DEFAULT_XMPP_PORT : Integer.parseInt(tmpPort);
}
- if (mSettings.getBoolean(BeemApplication.FULL_JID_LOGIN_KEY, false) ||
- "gmail.com".equals(mService) || "googlemail.com".equals(mService)) {
+ if (mSettings.getBoolean(BeemApplication.FULL_JID_LOGIN_KEY, false) || "gmail.com".equals(mService)
+ || "googlemail.com".equals(mService)) {
mLogin = tmpJid;
}
@@ -217,10 +223,13 @@
configure(ProviderManager.getInstance());
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- mConnection = new XmppConnectionAdapter(mConnectionConfiguration, mLogin, mPassword, this);
+ //TODO: Faire la liste des accounts et ajouter leur connection
+ mConnection.add(new XmppConnectionAdapter(mConnectionConfiguration, mLogin, mPassword, this));
Roster.setDefaultSubscriptionMode(SubscriptionMode.manual);
- mBind = new XmppFacade(mConnection);
+
+ for (XmppConnectionAdapter connection : mConnection)
+ mBind.add(new XmppFacade(connection));
Log.d(TAG, "ONCREATE");
}
@@ -235,8 +244,10 @@
mSettings.unregisterOnSharedPreferenceChangeListener(mPreferenceListener);
if (mOnOffReceiverIsRegistered)
unregisterReceiver(mOnOffReceiver);
- if (mConnection.isAuthentificated() && BeemConnectivity.isConnected(this))
- mConnection.disconnect();
+ for (XmppConnectionAdapter connection : mConnection) {
+ if (connection.isAuthentificated() && BeemConnectivity.isConnected(this))
+ connection.disconnect();
+ }
Log.d(TAG, "ONDESTROY");
}
@@ -248,7 +259,8 @@
super.onStart(intent, startId);
Log.d(TAG, "onStart");
try {
- mConnection.connectAsync();
+ for (XmppConnectionAdapter connection : mConnection)
+ connection.connectAsync();
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -297,7 +309,8 @@
* @return IXmppFacade a bind to an XmppFacade instance
*/
public IXmppFacade getBind() {
- return mBind;
+ //TODO: Prendre le bon mbind dans le tableau
+ return mBind.get(0);
}
/**
@@ -310,7 +323,6 @@
/**
* Get the notification manager system service.
- *
* @return the notification manager service.
*/
public NotificationManager getNotificationManager() {
@@ -342,8 +354,7 @@
// Chat State
ChatStateExtension.Provider chatState = new ChatStateExtension.Provider();
pm.addExtensionProvider("active", "http://jabber.org/protocol/chatstates", chatState);
- pm.addExtensionProvider("composing", "http://jabber.org/protocol/chatstates",
- chatState);
+ pm.addExtensionProvider("composing", "http://jabber.org/protocol/chatstates", chatState);
pm.addExtensionProvider("paused", "http://jabber.org/protocol/chatstates", chatState);
pm.addExtensionProvider("inactive", "http://jabber.org/protocol/chatstates", chatState);
pm.addExtensionProvider("gone", "http://jabber.org/protocol/chatstates", chatState);
@@ -360,81 +371,51 @@
pm.addExtensionProvider("event", "http://jabber.org/protocol/pubsub#event", new EventProvider());
//TODO rajouter les manquants pour du full pubsub
-
//PEP avatar
pm.addExtensionProvider("metadata", "urn:xmpp:avatar:metadata", new AvatarMetadataProvider());
pm.addExtensionProvider("data", "urn:xmpp:avatar:data", new AvatarProvider());
-// PEPProvider pep = new PEPProvider();
-// AvatarMetadataProvider avaMeta = new AvatarMetadataProvider();
-// pep.registerPEPParserExtension("urn:xmpp:avatar:metadata", avaMeta);
-// pm.addExtensionProvider("event", "http://jabber.org/protocol/pubsub#event", pep);
+ // PEPProvider pep = new PEPProvider();
+ // AvatarMetadataProvider avaMeta = new AvatarMetadataProvider();
+ // pep.registerPEPParserExtension("urn:xmpp:avatar:metadata", avaMeta);
+ // pm.addExtensionProvider("event", "http://jabber.org/protocol/pubsub#event", pep);
/*
- // Private Data Storage
- pm.addIQProvider("query", "jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider());
- // Time
- try {
- pm.addIQProvider("query", "jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time"));
- } catch (ClassNotFoundException e) {
- Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Time");
- }
- // Roster Exchange
- pm.addExtensionProvider("x", "jabber:x:roster", new RosterExchangeProvider());
- // Message Events
- pm.addExtensionProvider("x", "jabber:x:event", new MessageEventProvider());
- // XHTML
- pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider());
- // Group Chat Invitations
- pm.addExtensionProvider("x", "jabber:x:conference", new GroupChatInvitation.Provider());
- // Data Forms
- pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
- // MUC User
- pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user", new MUCUserProvider());
- // MUC Admin
- pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin", new MUCAdminProvider());
- // MUC Owner
- pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner", new MUCOwnerProvider());
- // Version
- try {
- pm.addIQProvider("query", "jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version"));
- } catch (ClassNotFoundException e) {
- // Not sure what's happening here.
- Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Version");
- }
- // VCard
- pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
- // Offline Message Requests
- pm.addIQProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider());
- // Offline Message Indicator
- pm.addExtensionProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider());
- // Last Activity
- pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
- // User Search
- pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());
- // SharedGroupsInfo
- pm.addIQProvider("sharedgroup", "http://www.jivesoftware.org/protocol/sharedgroup",
- new SharedGroupsInfo.Provider());
- // JEP-33: Extended Stanza Addressing
- pm.addExtensionProvider("addresses", "http://jabber.org/protocol/address", new MultipleAddressesProvider());
- // FileTransfer
- pm.addIQProvider("si", "http://jabber.org/protocol/si", new StreamInitiationProvider());
- pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
- pm.addIQProvider("open", "http://jabber.org/protocol/ibb", new IBBProviders.Open());
- pm.addIQProvider("close", "http://jabber.org/protocol/ibb", new IBBProviders.Close());
- pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", new IBBProviders.Data());
-
- pm.addIQProvider("command", COMMAND_NAMESPACE, new AdHocCommandDataProvider());
- pm.addExtensionProvider("malformed-action", COMMAND_NAMESPACE,
- new AdHocCommandDataProvider.MalformedActionError());
- pm.addExtensionProvider("bad-locale", COMMAND_NAMESPACE,
- new AdHocCommandDataProvider.BadLocaleError());
- pm.addExtensionProvider("bad-payload", COMMAND_NAMESPACE,
- new AdHocCommandDataProvider.BadPayloadError());
- pm.addExtensionProvider("bad-sessionid", COMMAND_NAMESPACE,
- new AdHocCommandDataProvider.BadSessionIDError());
- pm.addExtensionProvider("session-expired", COMMAND_NAMESPACE,
- new AdHocCommandDataProvider.SessionExpiredError());
+ * // Private Data Storage pm.addIQProvider("query", "jabber:iq:private", new
+ * PrivateDataManager.PrivateDataIQProvider()); // Time try { pm.addIQProvider("query", "jabber:iq:time",
+ * Class.forName("org.jivesoftware.smackx.packet.Time")); } catch (ClassNotFoundException e) {
+ * Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Time"); } // Roster Exchange
+ * pm.addExtensionProvider("x", "jabber:x:roster", new RosterExchangeProvider()); // Message Events
+ * pm.addExtensionProvider("x", "jabber:x:event", new MessageEventProvider()); // XHTML
+ * pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider()); //
+ * Group Chat Invitations pm.addExtensionProvider("x", "jabber:x:conference", new
+ * GroupChatInvitation.Provider()); // Data Forms pm.addExtensionProvider("x", "jabber:x:data", new
+ * DataFormProvider()); // MUC User pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user", new
+ * MUCUserProvider()); // MUC Admin pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin", new
+ * MUCAdminProvider()); // MUC Owner pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner", new
+ * MUCOwnerProvider()); // Version try { pm.addIQProvider("query", "jabber:iq:version",
+ * Class.forName("org.jivesoftware.smackx.packet.Version")); } catch (ClassNotFoundException e) { // Not sure
+ * what's happening here. Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Version"); }
+ * // VCard pm.addIQProvider("vCard", "vcard-temp", new VCardProvider()); // Offline Message Requests
+ * pm.addIQProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider()); //
+ * Offline Message Indicator pm.addExtensionProvider("offline", "http://jabber.org/protocol/offline", new
+ * OfflineMessageInfo.Provider()); // Last Activity pm.addIQProvider("query", "jabber:iq:last", new
+ * LastActivity.Provider()); // User Search pm.addIQProvider("query", "jabber:iq:search", new
+ * UserSearch.Provider()); // SharedGroupsInfo pm.addIQProvider("sharedgroup",
+ * "http://www.jivesoftware.org/protocol/sharedgroup", new SharedGroupsInfo.Provider()); // JEP-33: Extended
+ * Stanza Addressing pm.addExtensionProvider("addresses", "http://jabber.org/protocol/address", new
+ * MultipleAddressesProvider()); // FileTransfer pm.addIQProvider("si", "http://jabber.org/protocol/si", new
+ * StreamInitiationProvider()); pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams", new
+ * BytestreamsProvider()); pm.addIQProvider("open", "http://jabber.org/protocol/ibb", new IBBProviders.Open());
+ * pm.addIQProvider("close", "http://jabber.org/protocol/ibb", new IBBProviders.Close());
+ * pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", new IBBProviders.Data());
+ * pm.addIQProvider("command", COMMAND_NAMESPACE, new AdHocCommandDataProvider());
+ * pm.addExtensionProvider("malformed-action", COMMAND_NAMESPACE, new
+ * AdHocCommandDataProvider.MalformedActionError()); pm.addExtensionProvider("bad-locale", COMMAND_NAMESPACE,
+ * new AdHocCommandDataProvider.BadLocaleError()); pm.addExtensionProvider("bad-payload", COMMAND_NAMESPACE, new
+ * AdHocCommandDataProvider.BadPayloadError()); pm.addExtensionProvider("bad-sessionid", COMMAND_NAMESPACE, new
+ * AdHocCommandDataProvider.BadSessionIDError()); pm.addExtensionProvider("session-expired", COMMAND_NAMESPACE,
+ * new AdHocCommandDataProvider.SessionExpiredError());
*/
}
@@ -482,16 +463,19 @@
public void onReceive(final Context context, final Intent intent) {
String intentAction = intent.getAction();
if (intentAction.equals(Intent.ACTION_SCREEN_OFF)) {
- mOldMode = mConnection.getPreviousMode();
- mOldStatus = mConnection.getPreviousStatus();
- if (mConnection.isAuthentificated())
- mConnection.changeStatus(Status.CONTACT_STATUS_AWAY,
- mSettings.getString("settings_away_message", "Away"));
+ for (XmppConnectionAdapter connection : mConnection) {
+ mOldMode = connection.getPreviousMode();
+ mOldStatus = connection.getPreviousStatus();
+ if (connection.isAuthentificated())
+ connection.changeStatus(Status.CONTACT_STATUS_AWAY, mSettings.getString(
+ "settings_away_message", "Away"));
+ }
} else if (intentAction.equals(Intent.ACTION_SCREEN_ON)) {
- if (mConnection.isAuthentificated())
- mConnection.changeStatus(mOldMode, mOldStatus);
+ for (XmppConnectionAdapter connection : mConnection) {
+ if (connection.isAuthentificated())
+ connection.changeStatus(mOldMode, mOldStatus);
+ }
}
}
}
}
-