# HG changeset patch # User "Vincent Veronis" # Date 1300561473 -3600 # Node ID 11a7b9c1c500bfd3b67a98e8adfb6988b3a53dcf # Parent be08c91576360e27ef2ee0e45404c0abd11715e7 Debut multi account diff -r be08c9157636 -r 11a7b9c1c500 AndroidManifest.xml --- a/AndroidManifest.xml Sat Mar 19 19:31:31 2011 +0100 +++ b/AndroidManifest.xml Sat Mar 19 20:04:33 2011 +0100 @@ -76,10 +76,9 @@ android:name="android.intent.action.BOOT_COMPLETED" /> --> - - + @@ -110,4 +109,4 @@ - + \ No newline at end of file diff -r be08c9157636 -r 11a7b9c1c500 res/xml/authenticator.xml --- a/res/xml/authenticator.xml Sat Mar 19 19:31:31 2011 +0100 +++ b/res/xml/authenticator.xml Sat Mar 19 20:04:33 2011 +0100 @@ -4,5 +4,6 @@ android:accountType="com.beem.project.com" android:icon="@drawable/beem_launcher_icon_silver" android:smallIcon="@drawable/beem_status_icon" - android:label="@string/app_name" - android:accountPreferences="@xml/preferences" /> \ No newline at end of file + android:label="@string/app_name" /> + + \ No newline at end of file diff -r be08c9157636 -r 11a7b9c1c500 src/com/beem/project/beem/BeemService.java --- 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 mConnection = new ArrayList(); 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 mBind = new ArrayList(); 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); + } } } } } -