merge otr repo with trunk
authorNikita Kozlov <nikita@elyzion.net>
Sat, 05 Nov 2011 23:49:30 +0100
changeset 956 6b30719f4de6
parent 927 bdaaf0226e93 (diff)
parent 955 319ce14e4826 (current diff)
child 957 55e6f3409146
merge otr repo with trunk
AndroidManifest.xml
build.properties
default.properties
res/values/strings.xml
src/com/beem/project/beem/BeemApplication.java
src/com/beem/project/beem/BeemService.java
src/com/beem/project/beem/package-info.java
src/com/beem/project/beem/providers/AvatarProvider.java
src/com/beem/project/beem/providers/package-info.java
src/com/beem/project/beem/service/BeemAvatarCache.java
src/com/beem/project/beem/service/BeemAvatarManager.java
src/com/beem/project/beem/service/BeemCapsManager.java
src/com/beem/project/beem/service/BeemChatManager.java
src/com/beem/project/beem/service/ChatAdapter.java
src/com/beem/project/beem/service/Contact.java
src/com/beem/project/beem/service/LoginAsyncTask.java
src/com/beem/project/beem/service/Message.java
src/com/beem/project/beem/service/PresenceAdapter.java
src/com/beem/project/beem/service/PrivacyListItem.java
src/com/beem/project/beem/service/PrivacyListManagerAdapter.java
src/com/beem/project/beem/service/RosterAdapter.java
src/com/beem/project/beem/service/UserInfo.java
src/com/beem/project/beem/service/XmppConnectionAdapter.java
src/com/beem/project/beem/service/XmppFacade.java
src/com/beem/project/beem/service/package-info.java
src/com/beem/project/beem/smack/avatar/AvatarCache.java
src/com/beem/project/beem/smack/avatar/AvatarExtension.java
src/com/beem/project/beem/smack/avatar/AvatarListener.java
src/com/beem/project/beem/smack/avatar/AvatarManager.java
src/com/beem/project/beem/smack/avatar/AvatarMetadataExtension.java
src/com/beem/project/beem/smack/avatar/AvatarMetadataProvider.java
src/com/beem/project/beem/smack/avatar/AvatarProvider.java
src/com/beem/project/beem/smack/avatar/AvatarRetriever.java
src/com/beem/project/beem/smack/avatar/AvatarRetrieverFactory.java
src/com/beem/project/beem/smack/avatar/FileAvatarCache.java
src/com/beem/project/beem/smack/avatar/HttpAvatarRetriever.java
src/com/beem/project/beem/smack/avatar/HttpClientAvatarRetriever.java
src/com/beem/project/beem/smack/avatar/XmppAvatarRetriever.java
src/com/beem/project/beem/smack/avatar/package-info.java
src/com/beem/project/beem/smack/caps/CapsExtension.java
src/com/beem/project/beem/smack/caps/CapsManager.java
src/com/beem/project/beem/smack/caps/CapsProvider.java
src/com/beem/project/beem/smack/caps/package-info.java
src/com/beem/project/beem/smack/pep/PEPListener.java
src/com/beem/project/beem/smack/pep/PepSubManager.java
src/com/beem/project/beem/smack/pep/package-info.java
src/com/beem/project/beem/ui/AddContact.java
src/com/beem/project/beem/ui/ChangeStatus.java
src/com/beem/project/beem/ui/Chat.java
src/com/beem/project/beem/ui/ContactList.java
src/com/beem/project/beem/ui/CreateAccount.java
src/com/beem/project/beem/ui/GroupList.java
src/com/beem/project/beem/ui/Login.java
src/com/beem/project/beem/ui/LoginAnim.java
src/com/beem/project/beem/ui/PrivacyList.java
src/com/beem/project/beem/ui/Settings.java
src/com/beem/project/beem/ui/Subscription.java
src/com/beem/project/beem/ui/dialogs/builders/Alias.java
src/com/beem/project/beem/ui/dialogs/builders/ChatList.java
src/com/beem/project/beem/ui/dialogs/builders/CreatePrivacyList.java
src/com/beem/project/beem/ui/dialogs/builders/DeleteContact.java
src/com/beem/project/beem/ui/dialogs/builders/DeletePrivacyList.java
src/com/beem/project/beem/ui/dialogs/builders/ResendSubscription.java
src/com/beem/project/beem/ui/dialogs/builders/package-info.java
src/com/beem/project/beem/ui/package-info.java
src/com/beem/project/beem/ui/wizard/Account.java
src/com/beem/project/beem/ui/wizard/AccountConfigure.java
src/com/beem/project/beem/ui/wizard/package-info.java
src/com/beem/project/beem/utils/BeemBroadcastReceiver.java
src/com/beem/project/beem/utils/BeemConnectivity.java
src/com/beem/project/beem/utils/FreePort.java
src/com/beem/project/beem/utils/PresenceType.java
src/com/beem/project/beem/utils/SortedList.java
src/com/beem/project/beem/utils/Status.java
src/com/beem/project/beem/utils/package-info.java
--- a/.hgtags	Sat Nov 05 22:27:58 2011 +0100
+++ b/.hgtags	Sat Nov 05 23:49:30 2011 +0100
@@ -9,3 +9,4 @@
 7b54215139deae5ba9307b7a165f24d65f926938 0.1.5_rc1
 8d19f91dd64c7f29f137b3236fb38c2cbcf98a36 0.1.5
 3b5e81bf741ae4fd47e239f889fb66ae6732dbd6 0.1.6_rc1
+18b31fdfb292b1405c5783f1d11be8cef9302087 0.1.6
--- a/AndroidManifest.xml	Sat Nov 05 22:27:58 2011 +0100
+++ b/AndroidManifest.xml	Sat Nov 05 23:49:30 2011 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-	package="com.beem.project.beem" android:versionCode="8"
-	android:versionName="0.1.6_rc1">
+	package="com.beem.project.beem" android:versionCode="9"
+	android:versionName="0.1.6">
 	<application android:label="@string/app_name"
 		android:icon="@drawable/beem_launcher_icon_silver" android:theme="@style/Theme.BEEM.Default"
 		android:name=".BeemApplication">
@@ -32,6 +32,8 @@
 		<activity android:name=".ui.GroupList" android:label="GroupList" />
 		<activity android:name=".ui.PrivacyList" android:label="@string/privacy_list_name" />
 
+		<!-- MemorizingTrustManagerActivity -->
+		<activity android:name="de.duenndns.ssl.MemorizingActivity" />
 		<!--
 			Could be interesting if we would launch beem at startup <receiver
 			android:name=".tool.BeemBroadcastReceiver" android:enabled="true">
--- a/CREDITS	Sat Nov 05 22:27:58 2011 +0100
+++ b/CREDITS	Sat Nov 05 23:49:30 2011 +0100
@@ -19,6 +19,7 @@
 Andrea Selva for italian translations
 Erik Lindström for swedish translations
 Murilo Ferraz Franco for portuguese translations
+Alexei Emanov for russian translations
 
 
 Thanks to all !
--- a/build.properties	Sat Nov 05 22:27:58 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-external-libs=libs
-javadoc-output=doc/javadoc
-
--- a/default.properties	Sat Nov 05 22:27:58 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-# 
-# This file must be checked in Version Control Systems.
-# 
-# To customize properties used by the Ant build system use,
-# "build.properties", and override values to adapt the script to your
-# project structure.
-
-# Indicates whether an apk should be generated for each density.
-split.density=false
-# Project target.
-target=android-9
--- a/doc/asmack-beem/beem-build-process.patch	Sat Nov 05 22:27:58 2011 +0100
+++ b/doc/asmack-beem/beem-build-process.patch	Sat Nov 05 23:49:30 2011 +0100
@@ -1,6 +1,8 @@
---- asmack-git/build.bash	2010-05-07 22:08:18.000000000 +0200
-+++ asmack/build.bash	2010-05-07 22:06:53.000000000 +0200
-@@ -15,11 +15,11 @@
+diff --git a/build.bash b/build.bash
+index ce793f9..8a7f6bf 100755
+--- a/build.bash
++++ b/build.bash
+@@ -15,11 +15,11 @@ fetch() {
    if ! [ -f "${2}/.svn/entries" ]; then
      mkdir "${2}"
      cd "${2}"
@@ -14,7 +16,7 @@
    fi
  )
  }
-@@ -37,11 +37,11 @@
+@@ -37,11 +37,11 @@ gitfetch() {
  }
  
  fetchall() {
@@ -27,7 +29,16 @@
 +  fetch "http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/management/common/src/main/" "qpid" "HEAD"
 +  fetch "http://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/auth/src/main/java/common/" "harmony" "HEAD"
 +  fetch "https://dnsjava.svn.sourceforge.net/svnroot/dnsjava/trunk" "dnsjava" "HEAD"
-+  fetch "https://kenai.com/svn/jbosh~main/trunk/jbosh/src/main/java" "jbosh" "HEAD"
++  gitfetch "git://kenai.com/jbosh~origin" "jbosh"
  }
  
  copyfolder() {
+@@ -67,7 +67,7 @@ buildsrc() {
+   copyfolder "src/dnsjava"  "build/src/trunk" "org"
+   copyfolder "src/harmony" "build/src/trunk" "."
+   copyfolder "src/custom" "build/src/trunk" "."
+-  copyfolder "src/jbosh" "build/src/trunk" "."
++  copyfolder "src/jbosh/src/main/java" "build/src/trunk" "."
+ }
+ 
+ patchsrc() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/asmack-beem/beem_patches/10-custom-sslcontext.patch	Sat Nov 05 23:49:30 2011 +0100
@@ -0,0 +1,84 @@
+Index: org/jivesoftware/smack/XMPPConnection.java
+===================================================================
+--- org/jivesoftware/smack/XMPPConnection.java	(révision 11644)
++++ org/jivesoftware/smack/XMPPConnection.java	(copie de travail)
+@@ -758,14 +758,14 @@
+      * @throws Exception if an exception occurs.
+      */
+     void proceedTLSReceived() throws Exception {
+-        SSLContext context = SSLContext.getInstance("TLS");
++        SSLContext context = this.config.getCustomSSLContext();
+         KeyStore ks = null;
+         KeyManager[] kms = null;
+         PasswordCallback pcb = null;
+ 
+         if(config.getCallbackHandler() == null) {
+            ks = null;
+-        } else {
++        } else if (context == null) {
+             //System.out.println("Keystore type: "+configuration.getKeystoreType());
+             if(config.getKeystoreType().equals("NONE")) {
+                 ks = null;
+@@ -821,10 +821,12 @@
+         }
+ 
+         // Verify certificate presented by the server
+-        context.init(kms,
+-                new javax.net.ssl.TrustManager[]{new ServerTrustManager(getServiceName(), config)},
+-                //new javax.net.ssl.TrustManager[]{new OpenTrustManager()},
+-                new java.security.SecureRandom());
++	if (context == null) {
++		context = SSLContext.getInstance("TLS");
++		context.init(kms,
++			new javax.net.ssl.TrustManager[]{new ServerTrustManager(getServiceName(), config)},
++			new java.security.SecureRandom());
++	}
+         Socket plain = socket;
+         // Secure the plain connection
+         socket = context.getSocketFactory().createSocket(plain,
+Index: org/jivesoftware/smack/ConnectionConfiguration.java
+===================================================================
+--- org/jivesoftware/smack/ConnectionConfiguration.java	(révision 11644)
++++ org/jivesoftware/smack/ConnectionConfiguration.java	(copie de travail)
+@@ -20,6 +20,7 @@
+ 
+ package org.jivesoftware.smack;
+ 
++import javax.net.ssl.SSLContext;
+ import org.jivesoftware.smack.proxy.ProxyInfo;
+ import org.jivesoftware.smack.util.DNSUtil;
+ 
+@@ -59,6 +60,7 @@
+     private boolean selfSignedCertificateEnabled = false;
+     private boolean expiredCertificatesCheckEnabled = false;
+     private boolean notMatchingDomainCheckEnabled = false;
++    private SSLContext customSSLContext;
+ 
+     private boolean compressionEnabled = false;
+ 
+@@ -487,6 +489,25 @@
+     }
+ 
+     /**
++     * Gets the custom SSLContext for SSL sockets. This is null by default.
++     *
++     * @return the SSLContext previously set with setCustomSSLContext() or null.
++     */
++    public SSLContext getCustomSSLContext() {
++	    return this.customSSLContext;
++    }
++
++    /**
++     * Sets a custom SSLContext for creating SSL sockets. A custom Context causes all other
++     * SSL/TLS realted settings to be ignored.
++     *
++     * @param context the custom SSLContext for new sockets; null to reset default behaviour.
++     */
++    public void setCustomSSLContext(SSLContext context) {
++	    this.customSSLContext = context;
++    }
++
++    /**
+      * Returns true if the connection is going to use stream compression. Stream compression
+      * will be requested after TLS was established (if TLS was enabled) and only if the server
+      * offered stream compression. With stream compression network traffic can be reduced
Binary file libs/asmack-android-7-beem.jar has changed
--- a/res/values-fr/strings.xml	Sat Nov 05 22:27:58 2011 +0100
+++ b/res/values-fr/strings.xml	Sat Nov 05 23:49:30 2011 +0100
@@ -313,6 +313,14 @@
 	<string name="privacy_list_delete_dialog_no">Non</string>
 
 	<string name="UpdateButton">Mettre à jour</string>
+
+	<!-- MemorizingTrustManager library -->
+	<string name="mtm_accept_cert">Accepter un certificat de sécurité invalide ?</string>
+	<string name="mtm_decision_always">Toujours</string>
+	<string name="mtm_decision_once">Une fois</string>
+	<string name="mtm_decision_abort">Annuler</string>
+
+	<string name="mtm_notification">Certificate Verification</string>
 	
 	<!-- Error messages -->
 	<string name="error_login_authentication">Erreur lors de l\'authenfitication, mauvais login ou password</string>
--- a/res/values-ru/strings.xml	Sat Nov 05 22:27:58 2011 +0100
+++ b/res/values-ru/strings.xml	Sat Nov 05 23:49:30 2011 +0100
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <resources>
 <!-- Generic terms -->
 <string name="app_name">Beem</string>
@@ -7,7 +7,7 @@
 <string name="CancelButton">Отмена</string>
 <string name="AcceptButton">Разрешить</string>
 <string name="RefuseButton">Отказать</string>
-<string name="JabberID">JID</string>
+<string name="JabberID">Jabber ID</string>
 <string name="Password">Пароль</string>
 <string name="Continue">Продолжить</string>
 
@@ -15,10 +15,10 @@
 <string name="AccountConfigureManualConfiguration">Ручная конфигурация</string>
 
 <!--  Beem class -->
-<string name="BeemJabberID">JID</string>
+<string name="BeemJabberID">Jabber ID</string>
 
 <!--  BeemApplication class -->
-<string name="BeemApplicationConnect">Соединяемся...</string>
+<string name="BeemApplicationConnect">Соединение...</string>
 
 <!--  BeemService class -->
 <string name="BeemServiceDescription">Использовать сервис Beem</string>
@@ -38,9 +38,9 @@
 <string name="AddCGroup">Группа</string>
 <string name="AddCOkButton">Добавить</string>
 <string name="AddCContactAdded">Контакт добавлен</string>
-<string name="AddCContactAddedError">При добавлении контакта возникла ошибка</string>
-<string name="AddCContactAddedLoginError">При выполнении входа возникла ошибка</string>
-<string name="AddCBadForm"></string>
+<string name="AddCContactAddedError">Ошибка добавления контакта</string>
+<string name="AddCContactAddedLoginError">Ошибка входа</string>
+<string name="AddCBadForm"/>
 <string name="AddCContactAlready">Контакт уже добавлен</string>
 
 <!--  ChangeStatus class -->
@@ -53,10 +53,16 @@
 <string name="MenuAccountAbout">О проекте Beem</string>
 <string name="MenuAccountCreate">Создать аккаунт</string>
 <string name="MenuConnection">Изменить аккаунт</string>
-<string name="ChangeStatusOk">Обновляем статус...</string>
-<string name="ChangeStatusNoChange">Ничего не поменялось</string>
+<string name="ChangeStatusOk">Обновление статуса...</string>
+<string name="ChangeStatusNoChange">Ничего не изменилось</string>
+<string name="my_avatar">Мой аватар</string>
+<string name="select_avatar">Выберите свой аватар</string>
+<string name="take_photo">Снять фото</string>
+<string name="pick_photo">Выбрать фото</string>
+<string name="delete_avatar">Нет аватара</string>
+<string name="photoPickerNotFoundText">Нельзя выбрать фото</string>
 
-<!-- Settings class -->
+	<!-- Settings class -->
 <string name="SettingsText">Имя пользователя</string>
 <string name="SettingsPassword">Пароль</string>
 <string name="SettingsProxy">Прокси</string>
@@ -79,27 +85,25 @@
 <string name="SettingsResourceSummary">Установить метку данного клиента</string>
 <string name="SettingsPrioritySummary">Установить приоритет данного клиента</string>
 <string name="contact_list_preferences">Список контактов</string>
-<string name="contact_list_preferences_sum">A set of display options for your buddy list
-</string>
+<string name="contact_list_preferences_sum">Опции отображения контактов</string>
 <string name="CLP_hide_groups">Скрывать группы</string>
 <string name="CLP_hide_groups_sum">Отметьте для того, чтобы спрятать группы</string>
 <string name="CLP_hidden_contact">Скрывать оффлайн-контакты</string>
-<string name="CLP_hidden_contact_sum">Check this option to hide unconnected buddies
-</string>
+<string name="CLP_hidden_contact_sum">Отметьте, чтобы спрятать контакты, которые не в сети</string>
 <string name="settings_account_username">Имя пользователя</string>
-<string name="login_username_info_default"></string>
+<string name="login_username_info_default"/>
 <string name="settings_account_password">Пароль</string>
 <string name="settings_account_server">Сервер</string>
 <string name="settings_account_port">Порт</string>
-<string name="settings_advanced_service_behaviour"></string>
+<string name="settings_advanced_service_behaviour"/>
 <string name="settings_advanced_sum">Расширенные настройки</string>
 <string name="settings_xmpp_server">Сервер</string>
-<string name="comments_xmpp_server"></string>
+<string name="comments_xmpp_server"/>
 <string name="settings_xmpp_port">Порт</string>
 <string name="settings_xmpp_use_tls">Требовать SSL/TLS</string>
-<string name="settings_reco_delay"></string>
+<string name="settings_reco_delay"/>
 <string name="comments_xmpp_port">По умолчанию 5222</string>
-<string name="settings_proxy_sum"></string>
+<string name="settings_proxy_sum"/>
 <string name="settings_proxy_use">Соединяться через прокси</string>
 <string name="settings_proxy_type_prompt">Выберите тип проси</string>
 <string name="settings_proxy_server">Сервер</string>
@@ -107,8 +111,8 @@
 <string name="comments_proxy_port">По умолчанию 1080</string>
 <string name="settings_proxy_username">Имя пользователя</string>
 <string name="settings_proxy_password">Пароль</string>
-<string name="away_chk_title">Включить Auto-away</string>
-<string name="away_chk_sum">Устанавливать статус "Отошел" при отключении экрана</string>
+<string name="away_chk_title">Включать автоматически \"Отошел\"</string>
+<string name="away_chk_sum">Устанавливать статус \"Отошел\" при отключении экрана</string>
 <string name="away_message_title">Сообщение об отсутствии</string>
 <string name="away_message_sum">Напишите сообщение об отсутствии</string>
 <string name="away_message_hint">Я отошел, экран телефона выключен</string>
@@ -117,9 +121,21 @@
 <string name="notification_enable_vibrate_sum">Вибрировать при новых сообщениях</string>
 <string name="notification_snd_title">Сигнал сообщений</string>
 <string name="notification_snd_sum">Установить сигнал для пришедшего сообщения</string>
-
+<string name="settings_chat_compact">Компактный диалог</string>
+<string name="settings_chat_compact_sum">Сделать окно диалога компактным</string>
+<string name="history">История</string>
+<string name="history_sum">Пометьте для сохранения разговоров на SD карте</string>
+<string name="history_mount">Для сохранения истории необходима установленная SD карта с разрешённой записью</string>
+<string name="history_on_off">Разрешить сохранение истории</string>
+<string name="chat_preferences">Диалог</string>
+<string name="chat_preferences_sum">История, размер  диалога...</string>
+<string name="chat_history_path">Путь к истории</string>
+<string name="chat_history_path_sum">Путь к сохраняемым диалогам на SD карте</string>
+<string name="settings_smack_debug">Разрешить отладку XMPP</string>
+<string name="settings_full_jid_login">Использовать мой полный JID как имя пользователя</string>
+<string name="settings_full_jid_login_sum">Необходимо для некоторых серверов, например для Google Talk</string>
 
-<!-- Subscription class -->
+	<!-- Subscription class -->
 <string name="SubscriptAccept">Контакт авторизован</string>
 <string name="SubscriptError">Ошибка авторизации</string>
 <string name="SubscriptRefused">Авторизация отклонена</string>
@@ -130,20 +146,20 @@
 <string name="BeemChatManagerNewMessage">Пришло новое сообщение</string>
 
 <!--  BeemBroadcastReceiver class -->
-<string name="BeemBroadcastReceiverDisconnect">BEEM: Соединение разорвано</string>
+<string name="BeemBroadcastReceiverDisconnect">Beem: Соединение разорвано</string>
 
 <!--  XmppConnectionAdapter class -->
 <string name="AcceptContactRequest">%s добавил(а) вас в свой контакт-лист.</string>
 <string name="AcceptContactRequestFrom">Авторизовать %s.</string>
 
 <!-- Activities -->
-<string name="login_tag"></string>
+<string name="login_tag"/>
 <string name="edit_settings_name">Настройки</string>
-<string name="edit_settings_tag"></string>
+<string name="edit_settings_tag"/>
 <string name="create_account_name">Создать аккаунт</string>
-<string name="create_account_tag"></string>
+<string name="create_account_tag"/>
 <string name="contact_list_name">Контакты</string>
-<string name="contact_list_tag"></string>
+<string name="contact_list_tag"/>
 <string name="user_info_name">Информация о пользователе</string>
 
 <!-- Buttons -->
@@ -159,67 +175,62 @@
 <string name="login_menu_settings">Настройки</string>
 <string name="login_menu_about">О программе</string>
 <string name="login_about_title">Beem %s - О программе</string>
-<string name="login_about_msg">
-Beem is an EPITECH Innovative Project. Visit us at
-http://www.beem-project.com !
-</string>
+<string name="login_about_msg"/>
 <string name="login_about_button">Закрыть</string>
 <string name="login_settings_button">Настройки</string>
 <string name="login_login_button">Войти</string>
-<string name="login_login_progress">Соединяемся, подождите немного...</string>
-<string name="login_error_msg">Unfortunately, an error occured.\n\nError
-detail:\n%s</string>
+<string name="login_login_progress">Соединение. Пожалуйста, подождите...</string>
+<string name="login_error_msg">К сожалению, произошла ошибка.\n\nПодробности:\n%s</string>
 <string name="login_menu_login">Войти</string>
 <string name="login_no_connectivity">Интернет соединение не найдено</string>
-<string name="login_start_msg"></string>
+<string name="login_start_msg">Настройки в меню</string>
 
 <!-- LoginAnim activity -->
-<string name="loganim_connecting">Соединение ...</string>
-<string name="loganim_authenticating">Аутентификация ...</string>
-<string name="loganim_login_success">Вошли в сеть</string>
-<string name="loganim_login_failed">Не удалось войти в сеть</string>
+<string name="loganim_connecting">Соединение...</string>
+<string name="loganim_authenticating">Аутентификация...</string>
+<string name="loganim_login_success">Вход выполнен</string>
+<string name="loganim_login_failed">Не удалось войти</string>
 
 <!-- EditSettings Activity -->
 <string name="settings_menu_create_account">Создать аккаунт</string>
 <string name="settings_menu_privacy_lists">Настроить списки приватности</string>
 <string name="settings_saved_ok">Настройки успешно сохранены</string>
 
-
-
 <!-- EditSettings Activity Categories -->
 <string name="general_preferences">Общие настройки</string>
-<string name="user_preferences">Настройки пользователя (обязательно)</string>
-<string name="user_preferences_advanced">Расширенные настройки пользователя (необязательно)</string>
+<string name="user_preferences">Настройки пользователя (обязательные)</string>
+<string name="user_preferences_advanced">Расширенные настройки пользователя (дополнительные)</string>
 <string name="network_preferences">Настройки сети</string>
 <string name="proxy_proxy_settings">Настройки прокси</string>
 <string name="proxy_user_settings">Настройки прокси</string>
+<string name="history_preferences">История</string>
+<string name="chat_layout_option">Вид диалога</string>
 
-<!-- EditSettings Activity Tabs -->
-<string name="settings_tab_tag_account"></string>
+	<!-- EditSettings Activity Tabs -->
+<string name="settings_tab_tag_account"/>
 <string name="settings_tab_label_account">Аккаунт</string>
-<string name="settings_tab_tag_xmpp"></string>
+<string name="settings_tab_tag_xmpp"/>
 <string name="settings_tab_label_xmpp">XMPP</string>
-<string name="settings_tab_tag_proxy"></string>
+<string name="settings_tab_tag_proxy"/>
 <string name="settings_tab_label_proxy">Прокси</string>
 
-
 <!-- wizard activities -->
-<string name="account_wizard_text1"><b>Добро пожаловать в BEEM.</b>\n\nВы ещё не настроили аккаунт XMPP (Jabber).\nВыберите один из следующих вариантов :</string>
-<string name="account_wizard_configure_text"></string>
+<string name="account_wizard_text1"><b>Добро пожаловать в Beem.</b>\n\nВы ещё не настроили аккаунт XMPP (Jabber).\nВыберите один из следующих вариантов :</string>
+<string name="account_wizard_configure_text"/>
 <string name="account_wizard_configure_account">Использовать существующий аккаунт</string>
 <string name="account_wizard_create_account">Создать новый аккаунт</string>
 
 <!-- Create an account Activity -->
-<string name="create_account_instr_dialog_title"></string>
-<string name="create_account_err_dialog_title"></string>
-<string name="create_account_err_dialog_settings_button">Изменить настройки</string>
+<string name="create_account_instr_dialog_title">Создание учётной записи - Инструкция</string>
+<string name="create_account_err_dialog_title">Создание учётной записи - Ошибка</string>
+<string name="create_account_err_dialog_settings_button">Изменить мои настройки</string>
 <string name="create_account_close_dialog_button">Закрыть</string>
 <string name="create_account_successfull_after">Аккаунт %s успешно создан</string>
 <string name="create_account_err_username">Неправильный JID</string>
 <string name="create_account_err_passwords">Пароли не совпадают</string>
 <string name="create_account_username">Имя пользователя</string>
 <string name="create_account_password">Пароль</string>
-<string name="create_account_confirm_password">Ещё раз</string>
+<string name="create_account_confirm_password">Повторите пароль</string>
 
 <!-- ContactList Activity  -->
 <string name="contact_list_menu_add_contact">Добавить контакт</string>
@@ -227,7 +238,7 @@
 <string name="contact_list_menu_settings">Настройки</string>
 <string name="contact_list_menu_disconnect">Отключиться</string>
 <string name="contact_list_all_contact">Все контакты</string>
-<string name="contact_list_no_group"></string>
+<string name="contact_list_no_group">Без группы</string>
 
 <!-- UserInfo dialog -->
 <string name="userinfo_label_alias">Псевдоним</string>
@@ -235,15 +246,14 @@
 <string name="userinfo_label_re_subscription">Выслать приглашение ещё раз</string>
 <string name="userinfo_label_block">Заблокировать</string>
 <string name="userinfo_label_delete">Удалить</string>
-<string name="userinfo_resend"></string>
-<string name="userinfo_sure2delete">Are you sure you want to delete this contact ?
-</string>
+<string name="userinfo_resend"/>
+<string name="userinfo_sure2delete">Вы уверены, что хотите удалить этот контакт?</string>
 <string name="userinfo_yes">Да</string>
 <string name="userinfo_no">Нет</string>
-<string name="userinfo_sureresend"></string>
+<string name="userinfo_sureresend">Вы уверены, что хотите повторно послать приглашение?</string>
 
 <string name="chat_name">Чат</string>
-<string name="chat_input_default_value">Печатать сообщение</string>
+<string name="chat_input_default_value">Введите сообщение тут</string>
 <string name="chat_self">Я</string>
 <string name="chat_error">Ошибка</string>
 <string name="chat_send_message">Отправить</string>
@@ -258,9 +268,9 @@
 <string name="chat_state_inactive">занимается чем-то другим</string>
 
 <string name="contact_status_msg_available">Онлайн</string>
-<string name="contact_status_msg_available_chat">Поболтает</string>
+<string name="contact_status_msg_available_chat">Доступен для разговора</string>
 <string name="contact_status_msg_dnd">Занят</string>
-<string name="contact_status_msg_away">Отошёл</string>
+<string name="contact_status_msg_away">Отошел</string>
 <string name="contact_status_msg_xa">Недоступен</string>
 <string name="contact_status_msg_offline">Оффлайн</string>
 
@@ -284,27 +294,27 @@
 <string name="error_login_authentication">Ошибка: неверно указан логин или пароль</string>
 
 <string name="interna_server_error">Ошибка сервера</string>
-<string name="bad_request"></string>
-<string name="forbidden"></string>
-<string name="item_not_found"></string>
-<string name="conflict"></string>
-<string name="feature_not_implemented"></string>
-<string name="gone"></string>
-<string name="jid_malformed"></string>
-<string name="no_acceptable"></string>
-<string name="not_allowed"></string>
-<string name="not_authorized"></string>
-<string name="payment_required"></string>
-<string name="recipient_unavailable"></string>
-<string name="redirect"></string>
-<string name="registration_required"></string>
+<string name="bad_request">Ошибочный запрос</string>
+<string name="forbidden"/>
+<string name="item_not_found"/>
+<string name="conflict"/>
+<string name="feature_not_implemented">Возможность нереализована</string>
+<string name="gone"/>
+<string name="jid_malformed">Неверный JID</string>
+<string name="no_acceptable"/>
+<string name="not_allowed"/>
+<string name="not_authorized"/>
+<string name="payment_required"/>
+<string name="recipient_unavailable"/>
+<string name="redirect"/>
+<string name="registration_required"/>
 <string name="remote_server_not_found">Сервер не найден</string>
 <string name="remote_server_timeout">Сервер не отвечает</string>
 <string name="remote_server_error">Ошибка сервера</string>
-<string name="resource_constraint"></string>
-<string name="service_unavailable"></string>
-<string name="subscription_required"></string>
-<string name="undefined_condition"></string>
-<string name="unexpected_condition"></string>
-<string name="request_timeout"></string>
-</resources>
+<string name="resource_constraint"/>
+<string name="service_unavailable"/>
+<string name="subscription_required"/>
+<string name="undefined_condition"/>
+<string name="unexpected_condition"/>
+<string name="request_timeout"/>
+</resources>
\ No newline at end of file
--- a/res/values/strings.xml	Sat Nov 05 22:27:58 2011 +0100
+++ b/res/values/strings.xml	Sat Nov 05 23:49:30 2011 +0100
@@ -313,7 +313,15 @@
 	<string name="privacy_list_delete_dialog_no">No</string>
 
 	<string name="UpdateButton">Update</string>
-	
+
+	<!-- MemorizingTrustManager library -->
+	<string name="mtm_accept_cert">Accept Unknown Certificate?</string>
+	<string name="mtm_decision_always">Always</string>
+	<string name="mtm_decision_once">Once</string>
+	<string name="mtm_decision_abort">Abort</string>
+
+	<string name="mtm_notification">Certificate Verification</string>
+
 	<!-- Error messages -->
 	
 	<string name="error_login_authentication">Error during authentication, bad login or password.</string>
--- a/src/com/beem/project/beem/BeemApplication.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/BeemApplication.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 package com.beem.project.beem;
 
@@ -49,14 +49,15 @@
 import android.preference.PreferenceManager;
 
 /**
- * This class contains informations that needs to be global in the application. Theses informations must be necessary
- * for the activities and the service.
+ * This class contains informations that needs to be global in the application.
+ * Theses informations must be necessary for the activities and the service.
  * @author Da Risk <darisk972@gmail.com>
  */
 public class BeemApplication extends Application {
 
-    /*
-     * Constants for PREFERENCE_KEY The format of the Preference key is : $name_KEY = "$name"
+    /* Constants for PREFERENCE_KEY
+     * The format of the Preference key is :
+     * $name_KEY = "$name"
      */
     /** Preference key for account username. */
     public static final String ACCOUNT_USERNAME_KEY = "account_username";
@@ -159,6 +160,7 @@
 
     /**
      * Enable Pep in the application context.
+     *
      * @param enabled true to enable pep
      */
     public void setPepEnabled(boolean enabled) {
@@ -167,6 +169,7 @@
 
     /**
      * Check if Pep is enabled.
+     *
      * @return true if enabled
      */
     public boolean isPepEnabled() {
@@ -185,7 +188,7 @@
 	}
 
 	@Override
-	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+	public void onSharedPreferenceChanged(SharedPreferences  sharedPreferences, String key) {
 	    if (BeemApplication.ACCOUNT_USERNAME_KEY.equals(key) || BeemApplication.ACCOUNT_PASSWORD_KEY.equals(key)) {
 		String login = mSettings.getString(BeemApplication.ACCOUNT_USERNAME_KEY, "");
 		String password = mSettings.getString(BeemApplication.ACCOUNT_PASSWORD_KEY, "");
--- a/src/com/beem/project/beem/BeemService.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/BeemService.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem;
 
 import org.jivesoftware.smack.ConnectionConfiguration;
@@ -78,6 +78,9 @@
 import android.provider.Settings;
 import android.util.Log;
 
+import java.security.GeneralSecurityException;
+import javax.net.ssl.SSLContext;
+
 import com.beem.project.beem.service.XmppConnectionAdapter;
 import com.beem.project.beem.service.XmppFacade;
 import com.beem.project.beem.service.aidl.IXmppFacade;
@@ -88,9 +91,13 @@
 import com.beem.project.beem.smack.avatar.AvatarProvider;
 import com.beem.project.beem.smack.caps.CapsProvider;
 
+import de.duenndns.ssl.MemorizingTrustManager;
+
 /**
- * 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 {
@@ -132,7 +139,7 @@
      */
     private void initConnectionConfig() {
 	// TODO add an option for this ?
-	//         SmackConfiguration.setPacketReplyTimeout(30000);
+//         SmackConfiguration.setPacketReplyTimeout(30000);
 	mUseProxy = mSettings.getBoolean(BeemApplication.PROXY_USE_KEY, false);
 	if (mUseProxy) {
 	    String stype = mSettings.getString(BeemApplication.PROXY_TYPE_KEY, "HTTP");
@@ -160,6 +167,7 @@
 	// maybe not the universal path, but it works on most devices (Samsung Galaxy, Google Nexus One)
 	mConnectionConfiguration.setTruststoreType("BKS");
 	mConnectionConfiguration.setTruststorePath("/system/etc/security/cacerts.bks");
+	installMemorizingTrustManager(mConnectionConfiguration);
     }
 
     /**
@@ -180,6 +188,7 @@
 	return true;
     }
 
+
     /**
      * {@inheritDoc}
      */
@@ -209,8 +218,8 @@
 	    if (!"".equals(tmpPort))
 		mPort = 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;
 	}
 
@@ -263,9 +272,11 @@
     public void sendNotification(int id, Notification notif) {
 	if (mSettings.getBoolean(BeemApplication.NOTIFICATION_VIBRATE_KEY, true))
 	    notif.defaults |= Notification.DEFAULT_VIBRATE;
+	notif.ledARGB = 0xff0000ff; // Blue color
+	notif.ledOnMS = 1000;
+	notif.ledOffMS = 1000;
 	notif.defaults |= Notification.DEFAULT_LIGHTS;
-	String ringtoneStr = mSettings.getString(BeemApplication.NOTIFICATION_SOUND_KEY,
-	    Settings.System.DEFAULT_NOTIFICATION_URI.toString());
+	String ringtoneStr = mSettings.getString(BeemApplication.NOTIFICATION_SOUND_KEY, Settings.System.DEFAULT_NOTIFICATION_URI.toString());
 	notif.sound = Uri.parse(ringtoneStr);
 	mNotificationManager.notify(id, notif);
     }
@@ -319,6 +330,22 @@
     }
 
     /**
+     * Install the MemorizingTrustManager in the ConnectionConfiguration of Smack.
+     *
+     * @param config the configuration to modify
+     */
+    private void installMemorizingTrustManager(ConnectionConfiguration config) {
+	try {
+	    SSLContext sc = SSLContext.getInstance("TLS");
+	    sc.init(null, MemorizingTrustManager.getInstanceList(this),
+		    new java.security.SecureRandom());
+	    config.setCustomSSLContext(sc);
+	} catch (GeneralSecurityException e) {
+	    Log.w(TAG, "Unable to use MemorizingTrustManager", e);
+	}
+    }
+
+    /**
      * A sort of patch from this thread: http://www.igniterealtime.org/community/thread/31118. Avoid ClassCastException
      * by bypassing the classloading shit of Smack.
      * @param pm The ProviderManager.
@@ -343,7 +370,8 @@
 	// 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,51 +388,81 @@
 	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());
 	 */
     }
 
@@ -456,7 +514,7 @@
 		mOldStatus = mConnection.getPreviousStatus();
 		if (mConnection.isAuthentificated())
 		    mConnection.changeStatus(Status.CONTACT_STATUS_AWAY,
-			mSettings.getString(BeemApplication.AUTO_AWAY_MSG_KEY, "Away"));
+			    mSettings.getString(BeemApplication.AUTO_AWAY_MSG_KEY, "Away"));
 	    } else if (intentAction.equals(Intent.ACTION_SCREEN_ON)) {
 		if (mConnection.isAuthentificated())
 		    mConnection.changeStatus(mOldMode, mOldStatus);
@@ -464,3 +522,4 @@
 	}
     }
 }
+
--- a/src/com/beem/project/beem/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 /**
  * This package contains BEEM's entry points.
--- a/src/com/beem/project/beem/providers/AvatarProvider.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/providers/AvatarProvider.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.providers;
 
 import android.content.ContentProvider;
@@ -58,11 +58,13 @@
 
 /**
  * A simple content provider we expose the differents avatar downloaded.
+ *
  */
 public class AvatarProvider extends ContentProvider {
 
     /** The content uri of this provider. */
-    public static final Uri CONTENT_URI = Uri.parse("content://com.beem.project.beem.providers.avatarprovider");
+    public static final Uri CONTENT_URI =
+	Uri.parse("content://com.beem.project.beem.providers.avatarprovider");
 
     private static final String TAG = AvatarProvider.class.getSimpleName();
     private static final String AUTHORITY = "com.beem.project.beem.providers.avatarprovider";
@@ -76,16 +78,17 @@
 	String ID = "_id";
     }
 
-    private static String[] columnNames = new String[] { Columns.ID };
+    private static String[] columnNames = new String[] {Columns.ID };
 
     private static final int AVATAR = 1;
     private static final int AVATAR_ID = 2;
     private static final UriMatcher URIMATCHER = new UriMatcher(AVATAR);
 
-    static {
-	URIMATCHER.addURI(AUTHORITY, "*", AVATAR_ID);
+    static
+    {
+        URIMATCHER.addURI(AUTHORITY, "*", AVATAR_ID);
 	// should not be needed if we pass AVATAR on the constructor but it does not work
-	URIMATCHER.addURI(AUTHORITY, null, AVATAR);
+        URIMATCHER.addURI(AUTHORITY, null, AVATAR);
     }
 
     private String mDataPath;
@@ -98,6 +101,7 @@
 
     /**
      * Translate the mode passed to {@link #openFile} into mode passed to {@link ParcelFileDescriptor#open}.
+     *
      * @param uri the uri to open
      * @param mode the mode
      * @return the mode
@@ -108,18 +112,23 @@
 	if ("r".equals(mode)) {
 	    modeBits = ParcelFileDescriptor.MODE_READ_ONLY;
 	} else if ("w".equals(mode) || "wt".equals(mode)) {
-	    modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY | ParcelFileDescriptor.MODE_CREATE
+	    modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
+		| ParcelFileDescriptor.MODE_CREATE
 		| ParcelFileDescriptor.MODE_TRUNCATE;
 	} else if ("wa".equals(mode)) {
-	    modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY | ParcelFileDescriptor.MODE_CREATE
+	    modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
+		| ParcelFileDescriptor.MODE_CREATE
 		| ParcelFileDescriptor.MODE_APPEND;
 	} else if ("rw".equals(mode)) {
-	    modeBits = ParcelFileDescriptor.MODE_READ_WRITE | ParcelFileDescriptor.MODE_CREATE;
+	    modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+		| ParcelFileDescriptor.MODE_CREATE;
 	} else if ("rwt".equals(mode)) {
-	    modeBits = ParcelFileDescriptor.MODE_READ_WRITE | ParcelFileDescriptor.MODE_CREATE
+	    modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+		| ParcelFileDescriptor.MODE_CREATE
 		| ParcelFileDescriptor.MODE_TRUNCATE;
 	} else {
-	    throw new FileNotFoundException("Bad mode for " + uri + ": " + mode);
+	    throw new FileNotFoundException("Bad mode for " + uri + ": "
+		    + mode);
 	}
 	return modeBits;
     }
@@ -134,7 +143,8 @@
     }
 
     @Override
-    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+    public ParcelFileDescriptor openFile(Uri uri, String mode)
+	throws FileNotFoundException {
 	String id = uri.getPath();
 	File data = new File(mDataPath, id);
 	int modeBits = AvatarProvider.modeToMode(uri, mode);
@@ -158,7 +168,7 @@
 		String id = uri.getPathSegments().get(0);
 		File f = new File(mDataPath, id);
 		if (f.exists())
-		    c.newRow().add(f.getName());
+			c.newRow().add(f.getName());
 		break;
 	    default:
 		Log.w(TAG, "Unsupported uri for query match = " + match);
--- a/src/com/beem/project/beem/providers/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/providers/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,10 +40,10 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
+
 
 /**
  * ContentProviders for Beem.
  */
 package com.beem.project.beem.providers;
-
--- a/src/com/beem/project/beem/service/BeemAvatarCache.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/BeemAvatarCache.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import android.content.ContentResolver;
@@ -72,6 +72,7 @@
 
     /**
      * Create a BeemAvatarCache.
+     *
      * @param ctx The android context of the cache.
      */
     public BeemAvatarCache(final Context ctx) {
@@ -79,6 +80,7 @@
 	mContentResolver = mContext.getContentResolver();
     }
 
+
     @Override
     public void put(String key, byte[] data) throws IOException {
 	Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(key).build();
@@ -98,7 +100,7 @@
 	    byte[] data = new byte[1024];
 	    int nbread;
 	    while ((nbread = in.read(data)) != -1)
-		os.write(data, 0, nbread);
+		    os.write(data, 0, nbread);
 	} finally {
 	    in.close();
 	    os.close();
--- a/src/com/beem/project/beem/service/BeemAvatarManager.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/BeemAvatarManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 package com.beem.project.beem.service;
 
@@ -61,7 +61,8 @@
 import org.jivesoftware.smack.Connection;
 
 /**
- * An AvatarManager for Beem. It allows to publish avatar on the Android platform.
+ * An AvatarManager for Beem.
+ * It allows to publish avatar on the Android platform.
  */
 public class BeemAvatarManager extends AvatarManager {
     private static final String TAG = BeemAvatarManager.class.getSimpleName();
@@ -71,6 +72,7 @@
 
     /**
      * Create a BeemAvatarManager.
+     *
      * @param ctx the Android context
      * @param con the connection
      * @param pepMgr the PepSubManager of the connection
@@ -78,13 +80,14 @@
      * @param autoDownload tre to enable auto download of avatars
      */
     public BeemAvatarManager(final Context ctx, final Connection con, final PepSubManager pepMgr,
-	final AvatarCache cache, final boolean autoDownload) {
+	    final AvatarCache cache, final boolean autoDownload) {
 	super(con, pepMgr, cache, autoDownload);
 	mContext = ctx;
     }
 
     /**
      * Publish an avatar.
+     *
      * @param avatarUri the uri of the avatar
      * @return true if the avatar was successfully published
      */
@@ -99,7 +102,9 @@
     }
 
     /**
-     * Publish an avatar. This will send the XMPP stanza to enable the publication of an avatar.
+     * Publish an avatar.
+     * This will send the XMPP stanza to enable the publication of an avatar.
+     *
      * @param bitmap the avatar to publish
      * @return true on success false otherwise
      */
@@ -122,6 +127,7 @@
 
     /**
      * Send this bitmap to the avatar data node of the pep server.
+     *
      * @param bmp the avatar bitmap
      * @param format the image format to publish this data
      * @param quality the compression quality use for JPEG compression
@@ -147,6 +153,7 @@
 
     /**
      * Convert the bitmap to a byte array.
+     *
      * @param bitmap the avatar bitmap
      * @param format the resulting image format
      * @param quality the compression quality use for JPEG compression
--- a/src/com/beem/project/beem/service/BeemCapsManager.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/BeemCapsManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import org.jivesoftware.smack.Connection;
@@ -79,6 +79,7 @@
 
     /**
      * Create a BeemCapsManager.
+     *
      * @param sdm the ServiceDiscoveryManager to use
      * @param conn the connection to use
      * @param context the Android context to use to store data
@@ -89,9 +90,10 @@
 	initCacheDirectory();
     }
 
+
     @Override
     protected DiscoverInfo load(String ver) {
-	File fver = new File(mCacheDir, ver);
+	File fver = new File(mCacheDir, sanitizeName(ver));
 	try {
 	    Reader fr = new BufferedReader(new FileReader(fver));
 	    try {
@@ -99,7 +101,7 @@
 		    mParser = makeParser();
 		mParser.setInput(fr);
 		return (DiscoverInfo) PacketParserUtils.parsePacketExtension("query",
-		    "http://jabber.org/protocol/disco#info", mParser);
+			"http://jabber.org/protocol/disco#info", mParser);
 
 	    } finally {
 		fr.close();
@@ -113,11 +115,12 @@
 
     @Override
     protected void store(String ver, DiscoverInfo info) {
-	File fver = new File(mCacheDir, ver);
+
+	File fver = new File(mCacheDir, sanitizeName(ver));
 	try {
 	    Writer fw = new BufferedWriter(new FileWriter(fver));
 	    try {
-		String data = info.toXML();
+		String data  = info.toXML();
 		fw.write(data, 0, data.length());
 	    } finally {
 		fw.close();
@@ -131,7 +134,7 @@
     protected boolean isInCache(String ver) {
 	boolean result = super.isInCache(ver);
 	if (!result) {
-	    File fver = new File(mCacheDir, ver);
+	    File fver = new File(mCacheDir, sanitizeName(ver));
 	    result = fver.exists();
 	}
 	return result;
@@ -148,6 +151,7 @@
 
     /**
      * Make an Xml parser.
+     *
      * @return the created xml parser.
      * @throws XmlPullParserException if an error occurs while creating the parser.
      */
@@ -156,4 +160,13 @@
 	fact.setNamespaceAware(true);
 	return fact.newPullParser();
     }
+
+    /**
+     * Sanitize the base64 ver attribute in order to use it as a filename.
+     * @param ver the base64 ver attribute
+     * @return a sanitize filename for the ver attribute
+     */
+    private String sanitizeName(String ver) {
+	return ver.replaceAll("/", ".");
+    }
 }
--- a/src/com/beem/project/beem/service/BeemChatManager.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/BeemChatManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import java.io.File;
@@ -89,7 +89,8 @@
     private final ChatManager mAdaptee;
     private final Map<String, ChatAdapter> mChats = new HashMap<String, ChatAdapter>();
     private final ChatListener mChatListener = new ChatListener();
-    private final RemoteCallbackList<IChatManagerListener> mRemoteChatCreationListeners = new RemoteCallbackList<IChatManagerListener>();
+    private final RemoteCallbackList<IChatManagerListener> mRemoteChatCreationListeners =
+	new RemoteCallbackList<IChatManagerListener>();
     private final BeemService mService;
     private final ChatRosterListener mChatRosterListn = new ChatRosterListener();
 
@@ -188,8 +189,7 @@
 	    BeemApplication.ACCOUNT_USERNAME_KEY, "");
 	String historyPath = PreferenceManager.getDefaultSharedPreferences(mService.getBaseContext()).getString(
 	    BeemApplication.CHAT_HISTORY_KEY, "");
-	if ("".equals(historyPath))
-	    historyPath = "/Android/data/com.beem.project.beem/chat/";
+	if ("".equals(historyPath)) historyPath = "/Android/data/com.beem.project.beem/chat/";
 	res.setHistory(history);
 	res.setAccountUser(accountUser);
 	res.listenOtrSession();
@@ -298,9 +298,9 @@
 	    try {
 		CharSequence tickerText = mService.getBind().getRoster().getContact(chat.getParticipant().getJID())
 		    .getName();
-		Notification notification = new Notification(android.R.drawable.stat_notify_chat, tickerText,
-		    System.currentTimeMillis());
-		notification.flags = Notification.FLAG_AUTO_CANCEL;
+		Notification notification = new Notification(android.R.drawable.stat_notify_chat, tickerText, System
+		    .currentTimeMillis());
+		notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
 		notification.setLatestEventInfo(mService, tickerText, msgBody, makeChatIntent(chat));
 		mService.sendNotification(chat.getParticipant().getJID().hashCode(), notification);
 	    } catch (RemoteException e) {
--- a/src/com/beem/project/beem/service/ChatAdapter.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/ChatAdapter.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import java.io.File;
--- a/src/com/beem/project/beem/service/Contact.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/Contact.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import java.util.ArrayList;
@@ -141,6 +141,7 @@
 
     /**
      * Make an xmpp uri for a spcific jid.
+     *
      * @param jid the jid to represent as an uri
      * @return an uri representing this jid.
      */
@@ -284,6 +285,7 @@
 
     /**
      * Get the avatar id of the contact.
+     *
      * @return the avatar id or null if there is not
      */
     public String getAvatarId() {
@@ -320,6 +322,7 @@
 
     /**
      * Set the avatar id of the contact.
+     *
      * @param avatarId the avatar id
      */
     public void setAvatarId(String avatarId) {
--- a/src/com/beem/project/beem/service/LoginAsyncTask.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/LoginAsyncTask.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import android.os.AsyncTask;
--- a/src/com/beem/project/beem/service/Message.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/Message.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import org.jivesoftware.smack.packet.XMPPError;
@@ -69,9 +69,6 @@
     /** Error message type. */
     public static final int MSG_TYPE_ERROR = 400;
 
-    /** Informational message type. */
-    public static final int MSG_TYPE_INFO = 500;
-
     /** Parcelable.Creator needs by Android. */
     public static final Parcelable.Creator<Message> CREATOR = new Parcelable.Creator<Message>() {
 
@@ -294,6 +291,7 @@
 
     /**
      * Set the Date of the message.
+     *
      * @param date date of the message.
      */
     public void setTimestamp(Date date) {
@@ -302,6 +300,7 @@
 
     /**
      * Get the Date of the message.
+     *
      * @return if it is a delayed message get the date the message was sended.
      */
     public Date getTimestamp() {
--- a/src/com/beem/project/beem/service/PresenceAdapter.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/PresenceAdapter.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import org.jivesoftware.smack.packet.Presence;
@@ -101,8 +101,7 @@
 	mStatusText = presence.getStatus();
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.os.Parcelable#describeContents()
      */
     @Override
@@ -191,8 +190,7 @@
 	this.mType = type;
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int)
      */
     @Override
--- a/src/com/beem/project/beem/service/PrivacyListItem.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/PrivacyListItem.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import android.os.Parcel;
--- a/src/com/beem/project/beem/service/PrivacyListManagerAdapter.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/PrivacyListManagerAdapter.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import java.util.ArrayList;
@@ -71,7 +71,8 @@
 
     private final PrivacyListManager mPrivacyListManager;
 
-    private final RemoteCallbackList<IPrivacyListListener> mPrivacyListListeners = new RemoteCallbackList<IPrivacyListListener>();
+    private final RemoteCallbackList<IPrivacyListListener> mPrivacyListListeners =
+	new RemoteCallbackList<IPrivacyListListener>();
     private final PrivacyListListenerAdapter mPrivacyListListener = new PrivacyListListenerAdapter();
 
     /**
@@ -83,16 +84,14 @@
 	mPrivacyListManager.addListener(mPrivacyListListener);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#blockUser(java.lang.String, java.lang.String)
      */
     @Override
     public void blockUser(String listName, String jid) throws RemoteException {
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#createPrivacyList(java.lang.String, java.util.List)
      */
     @Override
@@ -112,8 +111,7 @@
 	Log.d(TAG, "END createPrivacyList.");
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#declineActivePrivacyList()
      */
     @Override
@@ -125,8 +123,7 @@
 	}
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#declineDefaultPrivacyList()
      */
     @Override
@@ -138,8 +135,7 @@
 	}
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#editPrivacyList(java.lang.String, java.util.List)
      */
     @Override
@@ -153,8 +149,7 @@
 	Log.d(TAG, "END editPrivacyList.");
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#getActivePrivacyList()
      */
     @Override
@@ -168,8 +163,7 @@
 	return null;
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#getBlockedGroupsByList(java.lang.String)
      */
     @Override
@@ -187,8 +181,7 @@
 	return blockedGroups;
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#getBlockedUsersByList(java.lang.String)
      */
     @Override
@@ -206,8 +199,7 @@
 	return blockedUsers;
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#getDefaultPrivacyList()
      */
     @Override
@@ -221,8 +213,7 @@
 	return null;
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#removePrivacyList(java.lang.String)
      */
     @Override
@@ -234,8 +225,7 @@
 	}
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#setActivePrivacyList(java.lang.String)
      */
     @Override
@@ -247,8 +237,7 @@
 	}
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#setDefaultPrivacyList(java.lang.String)
      */
     @Override
@@ -298,8 +287,7 @@
 	/**
 	 * Constructor.
 	 */
-	public PrivacyListListenerAdapter() {
-	}
+	public PrivacyListListenerAdapter() { }
 
 	@Override
 	public void setPrivacyList(final String listName, final List<PrivacyItem> listItem) {
@@ -345,8 +333,7 @@
 	    mPrivacyListListeners.unregister(listener);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IPrivacyListManager#getPrivacyLists()
      */
     @Override
--- a/src/com/beem/project/beem/service/RosterAdapter.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/RosterAdapter.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import java.util.ArrayList;
@@ -77,7 +77,8 @@
 
     private static final String TAG = "RosterAdapter";
     private final Roster mAdaptee;
-    private final RemoteCallbackList<IBeemRosterListener> mRemoteRosListeners = new RemoteCallbackList<IBeemRosterListener>();
+    private final RemoteCallbackList<IBeemRosterListener> mRemoteRosListeners =
+	new RemoteCallbackList<IBeemRosterListener>();
     private final Map<Integer, String> mDefaultStatusMessages;
     private final RosterListenerAdapter mRosterListener = new RosterListenerAdapter();
     private Map<String, String> mAvatarIdmap = new HashMap<String, String>();
@@ -109,6 +110,7 @@
 	    mAvatarManager.addAvatarListener(new AvatarEventListener());
     }
 
+
     /**
      * {@inheritDoc}
      */
@@ -210,8 +212,7 @@
 	mAdaptee.getEntry(jid).setName(name);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IRoster#getPresence(java.lang.String)
      */
     @Override
@@ -219,8 +220,7 @@
 	return new PresenceAdapter(mAdaptee.getPresence(jid));
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IRoster#addContactToGroup(java.lang.String, java.lang.String)
      */
     @Override
@@ -234,8 +234,7 @@
 	}
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IRoster#removeContactFromGroup(java.lang.String, java.lang.String)
      */
     @Override
@@ -284,14 +283,14 @@
      */
     private Map<Integer, String> createDefaultStatusMessagesMap(Context context) {
 	Map<Integer, String> defaultStatusMessages = new HashMap<Integer, String>();
-	defaultStatusMessages.put(Status.CONTACT_STATUS_AVAILABLE,
-	    context.getString(R.string.contact_status_msg_available));
-	defaultStatusMessages.put(Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT,
-	    context.getString(R.string.contact_status_msg_available_chat));
+	defaultStatusMessages.put(Status.CONTACT_STATUS_AVAILABLE, context
+	    .getString(R.string.contact_status_msg_available));
+	defaultStatusMessages.put(Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT, context
+	    .getString(R.string.contact_status_msg_available_chat));
 	defaultStatusMessages.put(Status.CONTACT_STATUS_AWAY, context.getString(R.string.contact_status_msg_away));
 	defaultStatusMessages.put(Status.CONTACT_STATUS_BUSY, context.getString(R.string.contact_status_msg_dnd));
-	defaultStatusMessages.put(Status.CONTACT_STATUS_DISCONNECT,
-	    context.getString(R.string.contact_status_msg_offline));
+	defaultStatusMessages.put(Status.CONTACT_STATUS_DISCONNECT, context
+	    .getString(R.string.contact_status_msg_offline));
 	defaultStatusMessages.put(Status.CONTACT_STATUS_UNAVAILABLE, context.getString(R.string.contact_status_msg_xa));
 
 	return defaultStatusMessages;
@@ -394,14 +393,14 @@
 
     /**
      * Listener on avatar metadata event.
+     *
      */
     private class AvatarEventListener implements AvatarListener {
 
 	/**
 	 * Constructor.
 	 */
-	public AvatarEventListener() {
-	}
+	public AvatarEventListener() { }
 
 	@Override
 	public void onAvatarChange(String from, String avatarId, List<Info> avatarInfos) {
--- a/src/com/beem/project/beem/service/UserInfo.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/UserInfo.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,14 +40,16 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import android.os.Parcel;
 import android.os.Parcelable;
 
 /**
- * This class contains information about the user of the connection. These informations are sent by the connection.
+ * This class contains information about the user of the connection.
+ * These informations are sent by the connection.
+ *
  */
 public class UserInfo implements Parcelable {
 
@@ -99,6 +101,7 @@
 
     /**
      * Get the avatar id of the user.
+     *
      * @return the avatar id
      */
     public String getAvatarId() {
@@ -107,6 +110,7 @@
 
     /**
      * Set the avater id of the user.
+     *
      * @param avatarId the avatar id
      */
     public void setAvatarId(String avatarId) {
@@ -115,6 +119,7 @@
 
     /**
      * Get the full jid of the user.
+     *
      * @return the jid
      */
     public String getJid() {
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import org.jivesoftware.smack.ConnectionConfiguration;
@@ -116,7 +116,8 @@
     private BeemAvatarManager mAvatarManager;
     private PepSubManager mPepManager;
     private SharedPreferences mPref;
-    private final RemoteCallbackList<IBeemConnectionListener> mRemoteConnListeners = new RemoteCallbackList<IBeemConnectionListener>();
+    private final RemoteCallbackList<IBeemConnectionListener> mRemoteConnListeners =
+	new RemoteCallbackList<IBeemConnectionListener>();
     private final SubscribePacketListener mSubscribePacketListener = new SubscribePacketListener();
 
     private final ConnexionListenerAdapter mConListener = new ConnexionListenerAdapter();
@@ -131,8 +132,8 @@
      * @param password password to use on connect
      * @param service the background service associated with the connection.
      */
-    public XmppConnectionAdapter(final ConnectionConfiguration config, final String login, final String password,
-	final BeemService service) {
+    public XmppConnectionAdapter(final ConnectionConfiguration config,
+	    final String login, final String password, final BeemService service) {
 	this(new XMPPConnection(config), login, password, service);
     }
 
@@ -143,8 +144,8 @@
      * @param password password to use on connect
      * @param service the background service associated with the connection.
      */
-    public XmppConnectionAdapter(final String serviceName, final String login, final String password,
-	final BeemService service) {
+    public XmppConnectionAdapter(final String serviceName,
+	    final String login, final String password, final BeemService service) {
 	this(new XMPPConnection(serviceName), login, password, service);
     }
 
@@ -155,8 +156,8 @@
      * @param password The password to use
      * @param service the background service associated with the connection.
      */
-    public XmppConnectionAdapter(final XMPPConnection con, final String login, final String password,
-	final BeemService service) {
+    public XmppConnectionAdapter(final XMPPConnection con,
+	    final String login, final String password, final BeemService service) {
 	mAdaptee = con;
 	PrivacyListManager.getInstanceFor(mAdaptee);
 	mLogin = login;
@@ -198,8 +199,8 @@
 		try {
 		    //TODO NIKITA DOES SOME SHIT !!! Fix this monstruosity
 		    String str = mService.getResources().getString(
-			mService.getResources().getIdentifier(e.getXMPPError().getCondition().replace("-", "_"),
-			    "string", "com.beem.project.beem"));
+			mService.getResources().getIdentifier(
+			    e.getXMPPError().getCondition().replace("-", "_"), "string", "com.beem.project.beem"));
 		    mErrorMsg = str;
 		} catch (NullPointerException e2) {
 		    if (!"".equals(e.getMessage()))
@@ -243,7 +244,7 @@
 
 	    mChatManager = new BeemChatManager(mAdaptee.getChatManager(), mService, mAdaptee.getRoster());
 	    //nikita: I commented this line because of the logs provided in http://www.beem-project.com/issues/321
-	    //Also, since the privacylistmanager isn't finished and used, it will be safer to not initialise it
+	    //Also, since the privacylistmanager isn't finished and used, it will be safer to not initialize it
 	    //mPrivacyListManager = new PrivacyListManagerAdapter(PrivacyListManager.getInstanceFor(mAdaptee));
 	    mService.initJingle(mAdaptee);
 	    discoverServerFeatures();
@@ -333,6 +334,7 @@
 
     /**
      * Get the AvatarManager of this connection.
+     *
      * @return the AvatarManager or null if there is not
      */
     public BeemAvatarManager getAvatarManager() {
@@ -361,13 +363,13 @@
      */
     private void updateNotification(String text) {
 	Notification mStatusNotification;
-	mStatusNotification = new Notification(com.beem.project.beem.R.drawable.beem_status_icon, text,
-	    System.currentTimeMillis());
+	mStatusNotification = new Notification(com.beem.project.beem.R.drawable.beem_status_icon, text, System
+	    .currentTimeMillis());
 	mStatusNotification.defaults = Notification.DEFAULT_LIGHTS;
 	mStatusNotification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;
 
-	mStatusNotification.setLatestEventInfo(mService, "Beem Status", text,
-	    PendingIntent.getActivity(mService, 0, new Intent(mService, ChangeStatus.class), 0));
+	mStatusNotification.setLatestEventInfo(mService, "Beem Status", text, PendingIntent.getActivity(mService, 0,
+	    new Intent(mService, ChangeStatus.class), 0));
 	// bypass the preferences for notification
 	mService.getNotificationManager().notify(BeemService.NOTIFICATION_STATUS_ID, mStatusNotification);
     }
@@ -414,7 +416,8 @@
 
     /**
      * Get the user informations.
-     * @return the user infos
+     *
+     * @return the user infos or null if not logged
      */
     public UserInfo getUserInfo() {
 	return mUserInfo;
@@ -667,10 +670,11 @@
 			R.string.AcceptContactRequest, from), System.currentTimeMillis());
 		    notif.flags = Notification.FLAG_AUTO_CANCEL;
 		    Intent intent = new Intent(mService, Subscription.class);
-		    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).putExtra("from", from);
-		    notif.setLatestEventInfo(mService, from,
-			mService.getString(R.string.AcceptContactRequestFrom, from),
-			PendingIntent.getActivity(mService, 0, intent, PendingIntent.FLAG_ONE_SHOT));
+		    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+			.putExtra("from", from);
+		    notif.setLatestEventInfo(mService, from, mService
+			.getString(R.string.AcceptContactRequestFrom, from), PendingIntent.getActivity(mService, 0,
+			    intent, PendingIntent.FLAG_ONE_SHOT));
 		    int id = packet.hashCode();
 		    mService.sendNotification(id, notif);
 		}
@@ -718,9 +722,9 @@
 	    notification.flags = Notification.FLAG_AUTO_CANCEL;
 	    Intent intent = new Intent(mService, Subscription.class);
 	    intent.setData(Contact.makeXmppUri(from));
-	    notification.setLatestEventInfo(mService, from,
-		mService.getString(R.string.AcceptContactRequestFrom, from),
-		PendingIntent.getActivity(mService, 0, intent, PendingIntent.FLAG_ONE_SHOT));
+	    notification.setLatestEventInfo(mService, from, mService
+		.getString(R.string.AcceptContactRequestFrom, from), PendingIntent.getActivity(mService, 0,
+		    intent, PendingIntent.FLAG_ONE_SHOT));
 	    int id = p.hashCode();
 	    mService.sendNotification(id, notification);
 	}
--- a/src/com/beem/project/beem/service/XmppFacade.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/XmppFacade.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.service;
 
 import org.jivesoftware.smack.packet.Presence;
@@ -142,8 +142,7 @@
 	mConnexion.getAdaptee().sendPacket(presence2);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see com.beem.project.beem.service.aidl.IXmppFacade#call(java.lang.String)
      */
     @Override
--- a/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl	Sat Nov 05 23:49:30 2011 +0100
@@ -103,6 +103,10 @@
 
     void disableAvatarPublishing();
 
+    /**
+     * Get the user informations.
+     * @return null if not connected
+     */
     UserInfo getUserInfo();
 
      IPrivacyListManager getPrivacyListManager();
--- a/src/com/beem/project/beem/service/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/service/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -39,7 +39,7 @@
 
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
- */
+*/
 /**
  * This package contains all the class use by the service.
  */
--- a/src/com/beem/project/beem/smack/avatar/AvatarCache.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarCache.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,19 +40,22 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.io.IOException;
 import java.io.InputStream;
 
 /**
- * Interface for an AvatarCache. This can be improved to a generic cache.
+ * Interface for an AvatarCache.
+ * This can be improved to a generic cache.
+ *
  */
 public interface AvatarCache {
 
     /**
      * Put some datas in cache.
+     *
      * @param id the key id of the data
      * @param data the datato cache
      * @throws IOException if an IO error occurs while caching the data
@@ -61,6 +64,7 @@
 
     /**
      * Put some datas in cache.
+     *
      * @param id the key id of the data
      * @param data an InputStream to the data to cache
      * @throws IOException if an IO error occurs while caching the data
@@ -69,14 +73,16 @@
 
     /**
      * Get some data from the cache.
+     *
      * @param id the id of the data to get
      * @return the cached data
-     * @throws IOException if an IO error occurs while geting the data
+     * @throws IOException  if an IO error occurs while geting the data
      */
     byte[] get(String id) throws IOException;
 
     /**
      * Test if a data is in cache.
+     *
      * @param id the id of the data
      * @return true if data is in cache false otherwise
      */
--- a/src/com/beem/project/beem/smack/avatar/AvatarExtension.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarExtension.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,14 +40,16 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import org.jivesoftware.smack.util.Base64;
 import org.jivesoftware.smack.packet.PacketExtension;
 
 /**
- * PacketExtension to represent the Avatar data. XML namespace urn:xmpp:avatar:data
+ * PacketExtension to represent the Avatar data.
+ * XML namespace urn:xmpp:avatar:data
+ *
  */
 public class AvatarExtension implements PacketExtension {
 
@@ -71,6 +73,7 @@
 
     /**
      * Get the avatar data as a Base64 string.
+     *
      * @return a base64 string.
      */
     public String getBase64() {
@@ -79,6 +82,7 @@
 
     /**
      * Get the avatar data.
+     *
      * @return the decoded data
      */
     public byte[] getData() {
--- a/src/com/beem/project/beem/smack/avatar/AvatarListener.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarListener.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.util.List;
@@ -48,11 +48,13 @@
 
 /**
  * A listener for avatar changes event.
+ *
  */
 public interface AvatarListener {
 
     /**
      * Event which is fired when a contact change avatar.
+     *
      * @param from the contact who change his avatar
      * @param avatarId the new avatar id, may be null if the contact set no avatar
      * @param avatarInfos the metadata infos of the avatar, may be empty if the contact set no avatar
--- a/src/com/beem/project/beem/smack/avatar/AvatarManager.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import com.beem.project.beem.smack.avatar.AvatarMetadataExtension.Info;
@@ -62,13 +62,15 @@
 import org.jivesoftware.smack.util.StringUtils;
 
 /**
- * This class deals with the avatar data. It can be configured to auto retrieve the avatar and put it in cache.
+ * This class deals with the avatar data.
+ * It can be configured to auto retrieve the avatar and put it in cache.
+ *
  */
 public class AvatarManager {
 
-    /** The pubsub node for avatar data. */
+    /**  The pubsub node for avatar data. */
     public static final String AVATARDATA_NODE = "urn:xmpp:avatar:data";
-    /** The pubsub node for avatar metadata. */
+    /**  The pubsub node for avatar metadata. */
     public static final String AVATARMETADATA_NODE = "urn:xmpp:avatar:metadata";
 
     private PepSubManager mPep;
@@ -79,13 +81,14 @@
 
     /**
      * Create an AvatarManager.
+     *
      * @param con the connection
      * @param pepMgr the PepSubManager of the Connection
      * @param cache the cache which will store the avatars
      * @param autoDownload true to enable auto download of avatars
      */
-    public AvatarManager(final Connection con, final PepSubManager pepMgr, final AvatarCache cache,
-	final boolean autoDownload) {
+    public AvatarManager(final Connection con, final PepSubManager pepMgr,
+	    final AvatarCache cache, final boolean autoDownload) {
 	mCon = con;
 	mPep = pepMgr;
 	mAutoDownload = autoDownload;
@@ -95,6 +98,7 @@
 
     /**
      * Create an AvatarManager.
+     *
      * @param con the connection
      * @param pepMgr the PepSubManager of the Connection
      * @param autoDownload true to enable auto download of avatars
@@ -109,6 +113,7 @@
 
     /**
      * Get an avatar from the cache.
+     *
      * @param avatarId the id of the avatar
      * @return the avatar or null if it cannot be retrieved from the cache
      */
@@ -124,6 +129,7 @@
 
     /**
      * Add an AvatarListener.
+     *
      * @param listener the AvatarListener to add
      */
     public void addAvatarListener(AvatarListener listener) {
@@ -133,6 +139,7 @@
 
     /**
      * Remove an AvatarListener.
+     *
      * @param listener the AvatarListener to remove
      */
     public void removeAvatarListener(AvatarListener listener) {
@@ -141,6 +148,7 @@
 
     /**
      * Download an avatar.
+     *
      * @param from The jid of the user
      * @param avatarId the id of the avatar
      * @param info the metadata information of the avatar to download
@@ -150,7 +158,7 @@
 	try {
 	    AvatarRetriever retriever = AvatarRetrieverFactory.getRetriever(mCon, from, info);
 	    byte[] avatar = retriever.getAvatar();
-	    // TODO check the hash before store
+	// TODO check the hash before store
 	    mCache.put(avatarId, avatar);
 	    return true;
 	} catch (IOException e) {
@@ -170,6 +178,7 @@
 
     /**
      * Send an avatar image to the pep server.
+     *
      * @param data the image data.
      * @return true if the image where successfully sent. false otherwise
      */
@@ -185,7 +194,9 @@
     }
 
     /**
-     * Send the metadata of the avatar you want to publish. By sending this metadata, you publish an avatar.
+     * Send the metadata of the avatar you want to publish.
+     * By sending this metadata, you publish an avatar.
+     *
      * @param id the id of the metadata item
      * @param metadata the metadata to publish
      */
@@ -196,8 +207,10 @@
     }
 
     /**
-     * Select the avatar to download. Subclass should override this method to take control over the selection process.
+     * Select the avatar to download.
+     * Subclass should override this method to take control over the selection process.
      * This implementation select the first element.
+     *
      * @param available list of the avatar metadata information
      * @return the metadata of the avatar to download
      */
@@ -205,8 +218,10 @@
 	return available.get(0);
     }
 
+
     /**
      * Get the id corresponding to this avatar data.
+     *
      * @param data the avatar data
      * @return the id
      * @throws NoSuchAlgorithmException if the sha-1 algorithm is unavailable
@@ -219,6 +234,7 @@
 
     /**
      * Publish an avatar data.
+     *
      * @param id the id of the avatar data
      * @param data the data of the avatar
      */
@@ -231,6 +247,7 @@
 
     /**
      * Fire the listeners for avatar change.
+     *
      * @param from the jid of the contact
      * @param avatarId the new avatar id
      * @param avatarInfos the metadata infos of the avatar
@@ -240,6 +257,7 @@
 	    l.onAvatarChange(from, avatarId, avatarInfos);
     }
 
+
     /**
      * A listener to PEPEevent.
      */
--- a/src/com/beem/project/beem/smack/avatar/AvatarMetadataExtension.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarMetadataExtension.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.util.LinkedList;
@@ -49,7 +49,9 @@
 import org.jivesoftware.smack.packet.PacketExtension;
 
 /**
- * PacketExtension to represent the Avatar metadata. XML namespace urn:xmpp:avatar:metadata
+ * PacketExtension to represent the Avatar metadata.
+ * XML namespace urn:xmpp:avatar:metadata
+ *
  */
 public class AvatarMetadataExtension implements PacketExtension {
     private List<Info> mInfos = new LinkedList<Info>();
@@ -62,6 +64,7 @@
 
     /**
      * Get the metadata informations.
+     *
      * @return a list of informations
      */
     public List<Info> getInfos() {
@@ -70,6 +73,7 @@
 
     /**
      * Add a metadate information.
+     *
      * @param info the metadata information to add
      */
     public void addInfo(Info info) {
@@ -110,6 +114,7 @@
 
 	/**
 	 * Create an Info.
+	 *
 	 * @param id the id of the info
 	 * @param type the MIME type of the avatar
 	 * @param bytes the size of the avatar in bytes
@@ -122,6 +127,7 @@
 
 	/**
 	 * Set the size of the avatar in bytes.
+	 *
 	 * @param bytes the size
 	 */
 	public void setBytes(int bytes) {
@@ -130,6 +136,7 @@
 
 	/**
 	 * Set the size of the avatar in bytes.
+	 *
 	 * @return the size
 	 */
 	public int getBytes() {
@@ -138,6 +145,7 @@
 
 	/**
 	 * Set the height.
+	 *
 	 * @param height the height
 	 */
 	public void setHeight(int height) {
@@ -146,6 +154,7 @@
 
 	/**
 	 * Get the height.
+	 *
 	 * @return the height
 	 */
 	public int getHeight() {
@@ -154,6 +163,7 @@
 
 	/**
 	 * Set the width.
+	 *
 	 * @param width the width
 	 */
 	public void setWidth(int width) {
@@ -162,6 +172,7 @@
 
 	/**
 	 * Get the width.
+	 *
 	 * @return the width
 	 */
 	public int getWidth() {
@@ -170,6 +181,7 @@
 
 	/**
 	 * Set the url.
+	 *
 	 * @param url the url
 	 */
 	public void setUrl(String url) {
@@ -178,6 +190,7 @@
 
 	/**
 	 * Get the url.
+	 *
 	 * @return the url, null if no url is present
 	 */
 	public String getUrl() {
@@ -186,6 +199,7 @@
 
 	/**
 	 * Get the id.
+	 *
 	 * @return the id
 	 */
 	public String getId() {
@@ -194,6 +208,7 @@
 
 	/**
 	 * Set the id.
+	 *
 	 * @param id the id
 	 */
 	public void setId(String id) {
@@ -202,6 +217,7 @@
 
 	/**
 	 * Set the MIME type of the avatar.
+	 *
 	 * @param type the type
 	 */
 	public void setType(String type) {
@@ -210,6 +226,7 @@
 
 	/**
 	 * Get the MIME type of the avatar.
+	 *
 	 * @return the type, null if no type is present
 	 */
 	public String getType() {
@@ -218,6 +235,7 @@
 
 	/**
 	 * Return this information as an xml element.
+	 *
 	 * @return an xml element representing this information
 	 */
 	public String toXML() {
--- a/src/com/beem/project/beem/smack/avatar/AvatarMetadataProvider.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarMetadataProvider.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import org.jivesoftware.smack.packet.PacketExtension;
@@ -48,19 +48,21 @@
 import org.xmlpull.v1.XmlPullParser;
 
 /**
- * A PacketExtensionProvider to parse the Avatar metadata. XML namespace urn:xmpp:avatar:metadata
+ * A PacketExtensionProvider to parse the Avatar metadata.
+ * XML namespace urn:xmpp:avatar:metadata
  */
 public class AvatarMetadataProvider implements PacketExtensionProvider {
 
     /**
-     * Creates a new AvatarMetadataProvider. ProviderManager requires that every PacketExtensionProvider has a public,
-     * no-argument constructor
+     * Creates a new AvatarMetadataProvider.
+     * ProviderManager requires that every PacketExtensionProvider has a public, no-argument constructor
      */
     public AvatarMetadataProvider() {
     }
 
     @Override
-    public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
+    public PacketExtension parseExtension(XmlPullParser parser)
+	throws Exception {
 	AvatarMetadataExtension metadata = new AvatarMetadataExtension();
 	boolean done = false;
 	StringBuilder buffer = new StringBuilder();
@@ -78,12 +80,10 @@
 		    try {
 			if (sbytes != null)
 			    bytes = Integer.parseInt(sbytes);
-		    } catch (NumberFormatException e) {
-		    }
+		    } catch (NumberFormatException e) { }
 		    if (bytes != 0 && id != null && type != null)
 			info = new AvatarMetadataExtension.Info(id, type, bytes);
-		    else
-			// invalid info
+		    else // invalid info
 			continue;
 
 		    String url = parser.getAttributeValue(null, "url");
@@ -97,8 +97,7 @@
 			    width = Integer.parseInt(parser.getAttributeValue(null, "width"));
 			info.setHeight(height);
 			info.setWidth(width);
-		    } catch (NumberFormatException e) {
-		    }
+		    } catch (NumberFormatException e) { }
 		    metadata.addInfo(info);
 		}
 	    } else if (eventType == XmlPullParser.END_TAG) {
--- a/src/com/beem/project/beem/smack/avatar/AvatarProvider.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarProvider.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import org.jivesoftware.smack.packet.PacketExtension;
@@ -48,19 +48,21 @@
 import org.xmlpull.v1.XmlPullParser;
 
 /**
- * A PacketExtensionProvider to parse the Avatar data. XML namespace urn:xmpp:avatar:data
+ * A PacketExtensionProvider to parse the Avatar data.
+ * XML namespace urn:xmpp:avatar:data
  */
 public class AvatarProvider implements PacketExtensionProvider {
 
     /**
-     * Creates a new AvatarProvider. ProviderManager requires that every PacketExtensionProvider has a public,
-     * no-argument constructor
+     * Creates a new AvatarProvider.
+     * ProviderManager requires that every PacketExtensionProvider has a public, no-argument constructor
      */
     public AvatarProvider() {
     }
 
     @Override
-    public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
+    public PacketExtension parseExtension(XmlPullParser parser)
+	throws Exception {
 	AvatarMetadataExtension metadata = new AvatarMetadataExtension();
 	boolean done = false;
 	StringBuilder buffer = new StringBuilder();
--- a/src/com/beem/project/beem/smack/avatar/AvatarRetriever.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarRetriever.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.io.IOException;
@@ -52,6 +52,7 @@
 
     /**
      * Retrieve the avatar.
+     *
      * @return the avatar
      * @throws IOException if an IO error occurs while retrieving the avatar
      */
--- a/src/com/beem/project/beem/smack/avatar/AvatarRetrieverFactory.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarRetrieverFactory.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import com.beem.project.beem.smack.avatar.AvatarMetadataExtension.Info;
@@ -62,6 +62,7 @@
 
     /**
      * Get a AvatarRetriever to retrieve this avatar.
+     *
      * @param con the connection
      * @param from the user which own the avatar
      * @param info the metadata information of the avatar to retrieve
--- a/src/com/beem/project/beem/smack/avatar/FileAvatarCache.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/FileAvatarCache.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.io.BufferedInputStream;
@@ -62,6 +62,7 @@
 
     /**
      * Create a FileAvatarCache.
+     *
      * @param storedir The directory used to store the data.
      */
     public FileAvatarCache(final File storedir) {
@@ -90,7 +91,7 @@
 	    byte[] data = new byte[1024];
 	    int nbread;
 	    while ((nbread = in.read(data)) != -1)
-		os.write(data, 0, nbread);
+		    os.write(data, 0, nbread);
 	} finally {
 	    in.close();
 	    os.close();
--- a/src/com/beem/project/beem/smack/avatar/HttpAvatarRetriever.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/HttpAvatarRetriever.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.io.InputStream;
@@ -51,13 +51,14 @@
 /**
  * An AvatarRetriever which retrieve the avatar over HTTP.
  */
-public class HttpAvatarRetriever implements AvatarRetriever {
+public  class HttpAvatarRetriever implements AvatarRetriever {
 
     private URL mUrl;
     private String mUrlString;
 
     /**
      * Create a HttpAvatarRetriever.
+     *
      * @param url the url of the avatar to download.
      */
     public HttpAvatarRetriever(final URL url) {
@@ -66,6 +67,7 @@
 
     /**
      * Create a HttpAvatarRetriever.
+     *
      * @param url the url of the avatar to download.
      */
     public HttpAvatarRetriever(final String url) {
--- a/src/com/beem/project/beem/smack/avatar/HttpClientAvatarRetriever.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/HttpClientAvatarRetriever.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.io.InputStream;
@@ -56,13 +56,14 @@
 /**
  * An AvatarRetriever which retrieve the avatar over HTTP using the Apache HttpClient.
  */
-public class HttpClientAvatarRetriever implements AvatarRetriever {
+public  class HttpClientAvatarRetriever implements AvatarRetriever {
 
     private String mUrl;
     private HttpClient mClient;
 
     /**
      * Create a HttpAvatarRetriever.
+     *
      * @param client the custom HttpClient to use to downlowad
      * @param url the url of the avatar to download.
      */
@@ -73,6 +74,7 @@
 
     /**
      * Create a HttpAvatarRetriever.
+     *
      * @param url the url of the avatar to download.
      */
     public HttpClientAvatarRetriever(final String url) {
--- a/src/com/beem/project/beem/smack/avatar/XmppAvatarRetriever.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/XmppAvatarRetriever.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.avatar;
 
 import java.util.List;
@@ -65,6 +65,7 @@
 
     /**
      * Create an XmppAvatarRetriever.
+     *
      * @param con the xmpp connection
      * @param from the contact from which we retrieve the avatar
      * @param id the id of the avatar to retrieve
--- a/src/com/beem/project/beem/smack/avatar/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/avatar/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,10 +40,9 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 /**
  * This package contains implementation of XEP-0084 User Avatar.
  */
 package com.beem.project.beem.smack.avatar;
-
--- a/src/com/beem/project/beem/smack/caps/CapsExtension.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/caps/CapsExtension.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 package com.beem.project.beem.smack.caps;
 
@@ -48,6 +48,7 @@
 
 /**
  * This extension represents a capability of XEP-0115.
+ *
  */
 public class CapsExtension implements PacketExtension {
 
@@ -56,8 +57,10 @@
     private String mNode;
     private String mExt;
 
+
     /**
      * Create a CapsExtension.
+     *
      * @param hash The value of the hash attribute.
      * @param node the value of the node attribute
      * @param ver the value of the ver attribute.
@@ -70,6 +73,7 @@
 
     /**
      * Get the ver attribute value.
+     *
      * @return the value of the ver attribute.
      */
     public String getVer() {
@@ -78,6 +82,7 @@
 
     /**
      * Get the hash attribute value.
+     *
      * @return the value of the hash attribute.
      */
     public String getHash() {
@@ -86,6 +91,7 @@
 
     /**
      * Get the node attribute value.
+     *
      * @return the value of the node attribute.
      */
     public String getNode() {
@@ -94,6 +100,7 @@
 
     /**
      * Get the ext attribute value.
+     *
      * @return the value of the ext attribute.
      */
     public String getExt() {
@@ -102,6 +109,7 @@
 
     /**
      * Set the hash attribute.
+     *
      * @param hash the value of hash
      */
     public void setHash(String hash) {
@@ -110,6 +118,7 @@
 
     /**
      * Set the ver attribute.
+     *
      * @param ver the value of ver
      */
     public void setVer(String ver) {
@@ -118,6 +127,7 @@
 
     /**
      * Set the node attribute.
+     *
      * @param node the value of node
      */
     public void setNode(String node) {
@@ -126,6 +136,7 @@
 
     /**
      * Set the ext attribute.
+     *
      * @param ext the value of ext
      */
     public void setExt(String ext) {
--- a/src/com/beem/project/beem/smack/caps/CapsManager.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/caps/CapsManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.caps;
 
 import org.jivesoftware.smack.Connection;
@@ -69,7 +69,9 @@
 import org.jivesoftware.smack.util.StringUtils;
 
 /**
- * Capabilities manager to implements XEP-0115. The DiscoverInfo are cached in memory.
+ * Capabilities manager to implements XEP-0115.
+ * The DiscoverInfo are cached in memory.
+ *
  */
 public class CapsManager {
     // the verCache should be stored on disk
@@ -83,6 +85,7 @@
 
     /**
      * Create a CapsManager.
+     *
      * @param sdm The service discovery manager to use.
      * @param conn The connection to manage.
      */
@@ -94,6 +97,7 @@
 
     /**
      * Get the discover info associated with a ver attribute.
+     *
      * @param ver the ver attribute.
      * @return the discover info or null if it was not cached.
      */
@@ -103,6 +107,7 @@
 
     /**
      * Get the discover info of a contact.
+     *
      * @param jid the jid of the contact.
      * @param ver the ver attribute of the contact capability.
      * @return The info of the client null if the info was not cached.
@@ -118,7 +123,9 @@
     }
 
     /**
-     * Set the node attribute to send in your capability. This is usually an uri to identify the client.
+     * Set the node attribute to send in your capability.
+     * This is usually an uri to identify the client.
+     *
      * @param node the node attribute to set.
      */
     public void setNode(String node) {
@@ -126,7 +133,9 @@
     }
 
     /**
-     * Load a persistent DiscoverInfo. The default implementation does nothing and always return null.
+     * Load a persistent DiscoverInfo.
+     * The default implementation does nothing and always return null.
+     *
      * @param ver the ver hash of the discoverInfo.
      * @return The discover info or null if not present.
      */
@@ -135,7 +144,9 @@
     }
 
     /**
-     * Store a DiscoverInfo for persistence. The default implementation does nothing.
+     * Store a DiscoverInfo for persistence.
+     * The default implementation does nothing.
+     *
      * @param ver the ver hash of the DiscoverInfo
      * @param info the DiscoverInfo to store
      */
@@ -143,8 +154,10 @@
     }
 
     /**
-     * Check if the discover info correspondig to the ver hash is in cache. This implementation checks the memory cache.
+     * Check if the discover info correspondig to the ver hash is in cache.
+     * This implementation checks the memory cache.
      * If the info is not in cache it is necessary to request it from the network.
+     *
      * @param ver the ver hash
      * @return true if it is in cache false otherwise
      */
@@ -189,6 +202,7 @@
 
     /**
      * Validate the ver attribute of a received capability.
+     *
      * @param jid the jid of the sender of the capability.
      * @param node the node attribute of the capability.
      * @param ver the ver attribute of the capability.
@@ -219,6 +233,7 @@
 
     /**
      * Calculate the ver attribute.
+     *
      * @param info The discover info to calculate the ver.
      * @param hashMethod the hash algorithm to use.
      * @return the value of the ver attribute
@@ -236,9 +251,9 @@
 		s.append(c);
 	    s.append('/');
 	    // Should add lang but it is not available
-	    //             c = identity.getType();
-	    //             if (c != null)
-	    //                 S.append(c);
+//             c = identity.getType();
+//             if (c != null)
+//                 S.append(c);
 	    s.append('/');
 	    c = identity.getName();
 	    if (c != null)
@@ -256,6 +271,7 @@
 
     /**
      * Get the identities sorted correctly to calculate the ver attribute.
+     *
      * @param info the DiscoverInfo containing the identities
      * @return the sorted list of identities.
      */
@@ -270,20 +286,16 @@
 	    public int compare(DiscoverInfo.Identity o1, DiscoverInfo.Identity o2) {
 
 		String cat1 = o1.getCategory();
-		if (cat1 == null)
-		    cat1 = "";
+		if (cat1 == null) cat1 = "";
 		String cat2 = o2.getCategory();
-		if (cat2 == null)
-		    cat2 = "";
+		if (cat2 == null) cat2 = "";
 		int res = cat1.compareTo(cat2);
 		if (res != 0)
 		    return res;
 		String type1 = o1.getType();
-		if (type1 == null)
-		    type1 = "";
+		if (type1 == null) type1 = "";
 		String type2 = o2.getCategory();
-		if (type2 == null)
-		    type2 = "";
+		if (type2 == null) type2 = "";
 		res = type1.compareTo(type2);
 		if (res != 0)
 		    return res;
@@ -296,6 +308,7 @@
 
     /**
      * Get the features sorted correctly to calculate the ver attribute.
+     *
      * @param info the DiscoverInfo containing the features
      * @return the sorted list of features.
      */
@@ -312,6 +325,7 @@
 
     /**
      * Get the Discover Information send by your own connection.
+     *
      * @return your own DiscoverInfo
      */
     private DiscoverInfo getOwnInformation() {
@@ -328,6 +342,7 @@
 
     /**
      * Calculate a Hash (digest).
+     *
      * @param algo the algorithm to use
      * @param data the data to compute
      * @return the resulting hash
@@ -343,7 +358,7 @@
      */
     private void initSupportedAlgorithm() {
 	// sort by ""preference"
-	String[] algo = new String[] { "sha-1", "md2", "md5", "sha-224", "sha-256", "sha-384", "sha-512" };
+	String[] algo = new String[] {"sha-1", "md2", "md5", "sha-224", "sha-256", "sha-384", "sha-512" };
 	for (String a : algo) {
 	    try {
 		MessageDigest md = MessageDigest.getInstance(a);
--- a/src/com/beem/project/beem/smack/caps/CapsProvider.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/caps/CapsProvider.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.caps;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -48,16 +48,17 @@
 import org.jivesoftware.smack.packet.PacketExtension;
 
 /**
- * PacketExtensionProvider for XEP-0115. This provider parse c element of namespace http://jabber.org/protocol/caps
- * which represents a capability of XEP-0115
+ * PacketExtensionProvider for XEP-0115.
+ * This provider parse c element of namespace
+ * http://jabber.org/protocol/caps which represents a capability of XEP-0115
+ *
  */
 public class CapsProvider implements PacketExtensionProvider {
 
     /**
      * Constructor.
      */
-    public CapsProvider() {
-    }
+    public CapsProvider() { }
 
     @Override
     public PacketExtension parseExtension(XmlPullParser parser) {
--- a/src/com/beem/project/beem/smack/caps/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/caps/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,10 +40,9 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 /**
  * This package contains implementation of XEP-0115.
  */
 package com.beem.project.beem.smack.caps;
-
--- a/src/com/beem/project/beem/smack/pep/PEPListener.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/pep/PEPListener.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.pep;
 
 import org.jivesoftware.smackx.pubsub.Item;
@@ -52,7 +52,8 @@
 public interface PEPListener {
 
     /**
-     * Called when PEP events are received.
+     *  Called when PEP events are received.
+     *
      * @param from the JID of the user who send the event
      * @param node the node of the items in the event
      * @param items the different items of the event
--- a/src/com/beem/project/beem/smack/pep/PepSubManager.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/pep/PepSubManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.smack.pep;
 
 import java.util.ArrayList;
@@ -60,6 +60,7 @@
 
 /**
  * Little extension of {@link PubSubManager} which allows to add {@link PEPListener}.
+ *
  */
 public class PepSubManager extends PubSubManager {
     private List<PEPListener> mPepListeners = new ArrayList<PEPListener>();
@@ -67,6 +68,7 @@
 
     /**
      * Create a PepSubManager.
+     *
      * @param connection the connection
      */
     public PepSubManager(final Connection connection) {
@@ -75,8 +77,9 @@
     }
 
     /**
-     * Create a PepSubManager associated to the specified connection where the pubsub requests require a specific to
-     * address for packets.
+     * Create a PepSubManager associated to the specified connection where the pubsub
+     * requests require a specific to address for packets.
+     *
      * @param connection the connection
      * @param toAddress The pubsub specific to address (required for some servers)
      */
@@ -87,6 +90,7 @@
 
     /**
      * Add a listener to PEP event.
+     *
      * @param listener the listener
      */
     public void addPEPListener(PEPListener listener) {
@@ -96,6 +100,7 @@
 
     /**
      * Remove a listener to PEP event.
+     *
      * @param listener the listener
      */
     public void removePEPListener(PEPListener listener) {
@@ -103,7 +108,9 @@
     }
 
     /**
-     * Get a PepNode. This node is obtain without checking its existence as PEP should auto create it.
+     * Get a PepNode.
+     * This node is obtain without checking its existence as PEP should auto create it.
+     *
      * @param nodeName the node name
      * @return the node
      */
@@ -115,6 +122,7 @@
 
     /**
      * Initialize the PepSubManager.
+     *
      * @param con the connection
      */
     private void init(Connection con) {
@@ -137,6 +145,7 @@
 
     /**
      * Fire the PEP listeners.
+     *
      * @param from the JID of the user who send the event
      * @param node the node of the items in the event
      * @param items the different items of the event
--- a/src/com/beem/project/beem/smack/pep/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/smack/pep/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 /**
  * This package contains an implementation of XEP-0163 Personnal Eventing Protocol based on the pubsub implementation.
--- a/src/com/beem/project/beem/ui/AddContact.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/AddContact.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import java.util.ArrayList;
@@ -103,8 +103,7 @@
 	this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onStart()
      */
     @Override
@@ -130,8 +129,7 @@
 	unbindService(mServConn);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onDestroy()
      */
     @Override
@@ -180,8 +178,7 @@
 	/**
 	 * Constructor.
 	 */
-	public OkListener() {
-	}
+	public OkListener() { }
 
 	@Override
 	public void onClick(View v) {
--- a/src/com/beem/project/beem/ui/ChangeStatus.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/ChangeStatus.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 package com.beem.project.beem.ui;
 
@@ -115,7 +115,8 @@
     private static final int CAMERA_WITH_DATA = 0;
     private static final int PHOTO_PICKED_WITH_DATA = 1;
 
-    private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera");
+    private static final File PHOTO_DIR = new File(
+            Environment.getExternalStorageDirectory() + "/DCIM/Camera");
 
     private static final String KEY_CURRENT_PHOTO_FILE = "currentphotofile";
 
@@ -173,6 +174,7 @@
 	    avatarPanel.setVisibility(View.GONE);
 	}
 
+
 	mSettings = PreferenceManager.getDefaultSharedPreferences(this);
 	mStatusMessageEditText = (EditText) findViewById(R.id.ChangeStatusMessage);
 	mStatusMessageEditText.setText(mSettings.getString(BeemApplication.STATUS_TEXT_KEY, ""));
@@ -211,8 +213,7 @@
 	unbindService(mServConn);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onDestroy()
      */
     @Override
@@ -226,21 +227,23 @@
      */
     @Override
     protected void onSaveInstanceState(Bundle outState) {
-	if (mCurrentPhotoFile != null) {
-	    outState.putString(KEY_CURRENT_PHOTO_FILE, mCurrentPhotoFile.toString());
-	}
-	super.onSaveInstanceState(outState);
+        if (mCurrentPhotoFile != null) {
+            outState.putString(KEY_CURRENT_PHOTO_FILE, mCurrentPhotoFile.toString());
+        }
+        super.onSaveInstanceState(outState);
     }
 
     @Override
     protected void onRestoreInstanceState(Bundle savedInstanceState) {
-	String fileName = savedInstanceState.getString(KEY_CURRENT_PHOTO_FILE);
-	if (fileName != null) {
-	    mCurrentPhotoFile = new File(fileName);
-	}
-	super.onRestoreInstanceState(savedInstanceState);
+        String fileName = savedInstanceState.getString(KEY_CURRENT_PHOTO_FILE);
+        if (fileName != null) {
+            mCurrentPhotoFile = new File(fileName);
+        }
+        super.onRestoreInstanceState(savedInstanceState);
     }
 
+
+
     @Override
     protected Dialog onCreateDialog(int id) {
 	if (id == SELECT_PHOTO_DLG)
@@ -250,12 +253,11 @@
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-	// Ignore failed requests
-	if (resultCode != RESULT_OK)
-	    return;
+	  // Ignore failed requests
+        if (resultCode != RESULT_OK) return;
 
-	switch (requestCode) {
-	    case PHOTO_PICKED_WITH_DATA:
+        switch (requestCode) {
+            case PHOTO_PICKED_WITH_DATA:
 		mAvatarUri = Uri.parse(data.getAction());
 		Log.d(TAG, "selected avatar uri " + mAvatarUri);
 		if (mAvatarUri != null) {
@@ -263,14 +265,15 @@
 		    mDisableAvatar = false;
 		    mShowCurrentAvatar = false;
 		}
-		break;
+                break;
 
-	    case CAMERA_WITH_DATA:
-		doCropPhoto(mCurrentPhotoFile);
-		break;
+            case CAMERA_WITH_DATA:
+                doCropPhoto(mCurrentPhotoFile);
+                break;
 	    default:
 		Log.w(TAG, "onActivityResult : invalid request code");
-	}
+
+        }
     }
 
     /**
@@ -325,6 +328,7 @@
 
     /**
      * ClickListener for the avatarButton.
+     *
      * @param button the avatar button
      */
     private void onAvatarButton(View button) {
@@ -351,8 +355,10 @@
     private void displayCurrentAvatar() {
 	try {
 	    UserInfo ui = mXmppFacade.getUserInfo();
+	    if (ui == null)
+		return;
 	    String avatarId = ui.getAvatarId();
-	    Log.d(TAG, "User info ; avatar id " + avatarId);
+	    Log.d(TAG, "User info : avatar id " + avatarId);
 	    if (avatarId != null) {
 		Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(avatarId).build();
 		mAvatar.setImageURI(uri);
@@ -364,7 +370,8 @@
     }
 
     /*
-     * Some codes from AOSP (platform/packages/apps/Contacts) to select and crop an image.
+     * Some codes from AOSP (platform/packages/apps/Contacts)
+     * to select and crop an image.
      */
 
     /**
@@ -372,34 +379,36 @@
      * @return the dialog
      */
     private Dialog createPickPhotoDialog() {
-	// Wrap our context to inflate list items using correct theme
-	final Context dialogContext = new ContextThemeWrapper(this, android.R.style.Theme_Light);
+	 // Wrap our context to inflate list items using correct theme
+        final Context dialogContext = new ContextThemeWrapper(this,
+                android.R.style.Theme_Light);
 
-	final ListAdapter adapter = ArrayAdapter.createFromResource(dialogContext, R.array.pick_photo_items,
-	    android.R.layout.simple_list_item_1);
+        final ListAdapter adapter = ArrayAdapter.createFromResource(dialogContext,
+		R.array.pick_photo_items,
+                android.R.layout.simple_list_item_1);
 
-	final AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);
-	builder.setTitle(R.string.select_avatar);
-	builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
-	    public void onClick(DialogInterface dialog, int which) {
-		dialog.dismiss();
-		switch (which) {
-		    case 0:
-			doTakePhoto();
-			break;
-		    case 1:
-			doPickPhotoFromGallery();
-			break;
-		    case 2:
+        final AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);
+        builder.setTitle(R.string.select_avatar);
+        builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
+            public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
+                switch(which) {
+                    case 0:
+                        doTakePhoto();
+                        break;
+                    case 1:
+                        doPickPhotoFromGallery();
+                        break;
+                    case 2:
 			mDisableAvatar = true;
 			mAvatar.setImageURI(null);
 			break;
 		    default:
 			Log.w(TAG, "DialogInterface onClick : invalid which code");
-		}
-	    }
-	});
-	return builder.create();
+                }
+            }
+        });
+        return builder.create();
     }
 
     /**
@@ -407,24 +416,24 @@
      * @return the filename
      */
     private String getPhotoFileName() {
-	Date date = new Date(System.currentTimeMillis());
-	SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
-	return dateFormat.format(date) + ".jpg";
+        Date date = new Date(System.currentTimeMillis());
+        SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
+        return dateFormat.format(date) + ".jpg";
     }
 
     /**
      * Launches Camera to take a picture and store it in a file.
      */
     protected void doTakePhoto() {
-	try {
-	    // Launch camera to take photo for selected contact
-	    PHOTO_DIR.mkdirs();
-	    mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());
-	    final Intent intent = getTakePickIntent(mCurrentPhotoFile);
-	    startActivityForResult(intent, CAMERA_WITH_DATA);
-	} catch (ActivityNotFoundException e) {
-	    Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
-	}
+        try {
+            // Launch camera to take photo for selected contact
+            PHOTO_DIR.mkdirs();
+            mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());
+            final Intent intent = getTakePickIntent(mCurrentPhotoFile);
+            startActivityForResult(intent, CAMERA_WITH_DATA);
+        } catch (ActivityNotFoundException e) {
+            Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
+        }
     }
 
     /**
@@ -433,9 +442,9 @@
      * @return the intent
      */
     public static Intent getTakePickIntent(File f) {
-	Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
-	intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
-	return intent;
+        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
+        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
+        return intent;
     }
 
     /**
@@ -443,22 +452,25 @@
      * @param f the image file to crop
      */
     protected void doCropPhoto(final File f) {
-	try {
+        try {
 
-	    // Add the image to the media store
+            // Add the image to the media store
 	    // level 8
 	    /*
-	     * MediaScannerConnection.scanFile( this, new String[] { f.getAbsolutePath() }, new String[] { null },
-	     * null);
-	     */
+            MediaScannerConnection.scanFile(
+                    this,
+                    new String[] { f.getAbsolutePath() },
+                    new String[] { null },
+                    null);
+	    */
 
-	    // Launch gallery to crop the photo
-	    final Intent intent = getCropImageIntent(Uri.fromFile(f));
-	    startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
-	} catch (ActivityNotFoundException e) {
-	    Log.e(TAG, "Cannot crop image", e);
-	    Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
-	}
+            // Launch gallery to crop the photo
+            final Intent intent = getCropImageIntent(Uri.fromFile(f));
+            startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
+        } catch (ActivityNotFoundException e) {
+            Log.e(TAG, "Cannot crop image", e);
+            Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
+        }
     }
 
     /**
@@ -467,28 +479,28 @@
      * @return the intent
      */
     public static Intent getCropImageIntent(Uri photoUri) {
-	Intent intent = new Intent("com.android.camera.action.CROP");
-	intent.setDataAndType(photoUri, "image/*");
-	intent.putExtra("crop", "true");
-	intent.putExtra("aspectX", 1);
-	intent.putExtra("aspectY", 1);
-	intent.putExtra("outputX", ICON_SIZE);
-	intent.putExtra("outputY", ICON_SIZE);
+        Intent intent = new Intent("com.android.camera.action.CROP");
+        intent.setDataAndType(photoUri, "image/*");
+        intent.putExtra("crop", "true");
+        intent.putExtra("aspectX", 1);
+        intent.putExtra("aspectY", 1);
+        intent.putExtra("outputX", ICON_SIZE);
+        intent.putExtra("outputY", ICON_SIZE);
 	intent.putExtra(MediaStore.EXTRA_OUTPUT, MY_AVATAR_URI);
-	return intent;
+        return intent;
     }
 
     /**
      * Launches Gallery to pick a photo.
      */
     protected void doPickPhotoFromGallery() {
-	try {
-	    // Launch picker to choose photo for selected contact
-	    final Intent intent = getPhotoPickIntent();
-	    startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
-	} catch (ActivityNotFoundException e) {
-	    Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
-	}
+        try {
+            // Launch picker to choose photo for selected contact
+            final Intent intent = getPhotoPickIntent();
+            startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
+        } catch (ActivityNotFoundException e) {
+            Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
+        }
     }
 
     /**
@@ -496,19 +508,21 @@
      * @return the intent
      */
     public static Intent getPhotoPickIntent() {
-	Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
-	intent.setType("image/*");
-	intent.putExtra("crop", "true");
-	intent.putExtra("aspectX", 1);
-	intent.putExtra("aspectY", 1);
-	intent.putExtra("outputX", ICON_SIZE);
-	intent.putExtra("outputY", ICON_SIZE);
+        Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
+        intent.setType("image/*");
+        intent.putExtra("crop", "true");
+        intent.putExtra("aspectX", 1);
+        intent.putExtra("aspectY", 1);
+        intent.putExtra("outputX", ICON_SIZE);
+        intent.putExtra("outputY", ICON_SIZE);
 	intent.putExtra(MediaStore.EXTRA_OUTPUT, MY_AVATAR_URI);
 	// use this to get the bitmap in the intent
-	//         intent.putExtra("return-data", true);
-	return intent;
+//         intent.putExtra("return-data", true);
+        return intent;
     }
 
+
+
     /**
      * connection to service.
      * @author nikita
--- a/src/com/beem/project/beem/ui/Chat.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/Chat.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import java.io.IOException;
--- a/src/com/beem/project/beem/ui/ContactList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/ContactList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -39,7 +39,7 @@
 
     Flavien Astraud, November 26, 2009
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import java.util.ArrayList;
@@ -121,16 +121,16 @@
     private final BeemContactList mAdapterContactList = new BeemContactList();
     private final List<String> mListGroup = new ArrayList<String>();
 
-    /**
-     * Map containing a list of the different contacts of a given group. Each list is a @{link SortedList} so there is
-     * no need to sort it again.
-     */
+    /** Map containing a list of the different contacts of a given group.
+     * Each list is a @{link SortedList} so there is no need to sort it again.
+     * */
     private final Map<String, List<Contact>> mContactOnGroup = new HashMap<String, List<Contact>>();
     private final BeemContactListOnClick mOnContactClick = new BeemContactListOnClick();
     private final Handler mHandler = new Handler();
     private final ServiceConnection mServConn = new BeemServiceConnection();
     private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver();
-    private final ComparatorContactListByStatusAndName<Contact> mComparator = new ComparatorContactListByStatusAndName<Contact>();
+    private final ComparatorContactListByStatusAndName<Contact> mComparator =
+	new ComparatorContactListByStatusAndName<Contact>();
     private final BeemRosterListener mBeemRosterListener = new BeemRosterListener();
     private List<Contact> mListContact;
     private String mSelectedGroup;
@@ -253,8 +253,8 @@
 		    result = true;
 		    break;
 		case R.id.contact_list_context_menu_userinfo_subscription:
-		    Dialog subscription = new ResendSubscription(ContactList.this, mXmppFacade, mSelectedContact)
-			.create();
+		    Dialog subscription = new ResendSubscription(ContactList.this,
+			mXmppFacade, mSelectedContact).create();
 		    subscription.show();
 		    result = true;
 		    break;
@@ -377,10 +377,12 @@
 	}
 
 	/**
-	 * {@inheritDoc} Simple stategy to handle the onEntriesAdded event. if contact has to be shown :
+	 * {@inheritDoc}
+	 * Simple stategy to handle the onEntriesAdded event.
+	 * if contact has to be shown :
 	 * <ul>
-	 * <li>add him to his groups</li>
-	 * <li>add him to the specials groups</>
+	 * <li> add him to his groups</li>
+	 * <li> add him to the specials groups</>
 	 * </ul>
 	 */
 	@Override
@@ -412,9 +414,10 @@
 	}
 
 	/**
-	 * {@inheritDoc} Simple stategy to handle the onEntriesDeleted event.
+	 * {@inheritDoc}
+	 * Simple stategy to handle the onEntriesDeleted event.
 	 * <ul>
-	 * <li>Remove the contact from all groups</li>
+	 * <li> Remove the contact from all groups</li>
 	 * </ul>
 	 */
 	@Override
@@ -445,11 +448,12 @@
 	}
 
 	/**
-	 * {@inheritDoc} Simple stategy to handle the onEntriesUpdated event.
+	 * {@inheritDoc}
+	 * Simple stategy to handle the onEntriesUpdated event.
 	 * <ul>
-	 * <li>Remove the contact from all groups</li>
-	 * <li>if contact has to be shown add it to his groups</li>
-	 * <li>if contact has to be shown add it to the specials groups</li>
+	 * <li> Remove the contact from all groups</li>
+	 * <li> if contact has to be shown add it to his groups</li>
+	 * <li> if contact has to be shown add it to the specials groups</li>
 	 * </ul>
 	 */
 	@Override
@@ -470,7 +474,8 @@
 			for (String group : groups) {
 			    if (!mListGroup.contains(group)) {
 				mListGroup.add(mListGroup.size() - 1, group);
-				List<Contact> tmplist = new SortedList<Contact>(new LinkedList<Contact>(), mComparator);
+				List<Contact> tmplist = new SortedList<Contact>(
+				    new LinkedList<Contact>(), mComparator);
 				mContactOnGroup.put(group, tmplist);
 			    }
 			    mContactOnGroup.get(group).remove(contact);
@@ -488,11 +493,12 @@
 	}
 
 	/**
-	 * {@inheritDoc} Simple stategy to handle the onPresenceChanged event.
+	 * {@inheritDoc}
+	 * Simple stategy to handle the onPresenceChanged event.
 	 * <ul>
-	 * <li>Remove the contact from all groups</li>
-	 * <li>if contact has to be shown add it to his groups</li>
-	 * <li>if contact has to be shown add it to the specials groups</li>
+	 * <li> Remove the contact from all groups</li>
+	 * <li> if contact has to be shown add it to his groups</li>
+	 * <li> if contact has to be shown add it to the specials groups</li>
 	 * </ul>
 	 */
 	@Override
@@ -521,8 +527,10 @@
 	}
 
 	/**
-	 * Add a contact to the special list No Group and All contacts. The contact will be added if the list is not the
-	 * current list otherwise the list must be modified in a Handler.
+	 * Add a contact to the special list No Group and All contacts.
+	 * The contact will be added if the list is not the current list otherwise
+	 * the list must be modified in a Handler.
+	 *
 	 * @param contact the contact to add.
 	 */
 	private void addToSpecialList(Contact contact) {
@@ -539,6 +547,7 @@
 
 	/**
 	 * Update the current list with the status of contact.
+	 *
 	 * @param listName name of the current list
 	 * @param contact contact to update
 	 */
@@ -547,11 +556,12 @@
 	    final List<String> groups = contact.getGroups();
 	    String noGroup = getString(R.string.contact_list_no_group);
 	    String allGroup = getString(R.string.contact_list_all_contact);
-	    final boolean add = ((!hideDisconnected || Status.statusOnline(contact.getStatus())) && // must show and
-	    ((listName.equals(noGroup) && groups.isEmpty()) || // in no group
-		groups.contains(listName) || // or in current
-	    listName.equals(allGroup) // or in all
-	    ));
+	    final boolean add = ((!hideDisconnected || Status.statusOnline(contact.getStatus())) &&	// must show and
+		(
+		    (listName.equals(noGroup) && groups.isEmpty()) ||			// in no group
+		    groups.contains(listName) ||					// or in current
+		    listName.equals(allGroup)						// or in all
+		));
 	    mHandler.post(new Runnable() {
 		public void run() {
 		    mListContact.remove(contact);
@@ -614,6 +624,7 @@
 	    return mListContact.get(position).hashCode();
 	}
 
+
 	/**
 	 * {@inheritDoc}
 	 */
@@ -661,8 +672,8 @@
 	}
 
 	/**
-	 * Get a LayerDrawable containing the avatar and the status icon. The status icon will change with the level of
-	 * the drawable.
+	 * Get a LayerDrawable containing the avatar and the status icon.
+	 * The status icon will change with the level of the drawable.
 	 * @param avatarId the avatar id to retrieve or null to get default
 	 * @return a LayerDrawable
 	 */
@@ -699,8 +710,7 @@
 	    /**
 	     * Create a ContactFilter.
 	     */
-	    public ContactFilter() {
-	    }
+	    public ContactFilter() { }
 
 	    @Override
 	    protected Filter.FilterResults performFiltering(CharSequence constraint) {
@@ -720,7 +730,7 @@
 	    }
 
 	    @Override
-	    protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
+	    protected void publishResults(CharSequence constraint, Filter.FilterResults  results) {
 		Log.d(TAG, "publishResults");
 		List<Contact> contacts = (List<Contact>) results.values;
 		mListContact = contacts;
@@ -829,7 +839,9 @@
 	}
 
 	/**
-	 * Assign the differents contact to their groups. This methods will fill the mContactOnGroup map.
+	 * Assign the differents contact to their groups.
+	 * This methods will fill the mContactOnGroup map.
+	 *
 	 * @param contacts list of contacts
 	 * @param groupNames list of existing groups
 	 */
@@ -862,6 +874,7 @@
 
 	/**
 	 * Make the List of the map became Insertion sorted list.
+	 *
 	 * @param map the map to convert.
 	 */
 	private void makeSortedList(Map<String, List<Contact>> map) {
@@ -872,6 +885,9 @@
 	}
     }
 
+
+
+
     /**
      * Comparator Contact by status and name.
      */
--- a/src/com/beem/project/beem/ui/CreateAccount.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/CreateAccount.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import java.util.regex.Pattern;
@@ -122,8 +122,8 @@
 	    xmppConnection.connect();
 	    AccountManager accountManager = new AccountManager(xmppConnection);
 	    accountManager.createAccount(username, password);
-	    Toast toast = Toast.makeText(getApplicationContext(),
-		String.format(getString(R.string.create_account_successfull_after), username), NOTIFICATION_DURATION);
+	    Toast toast = Toast.makeText(getApplicationContext(), String.format(
+		getString(R.string.create_account_successfull_after), username), NOTIFICATION_DURATION);
 	    toast.show();
 	} catch (XMPPException e) {
 	    createErrorDialog(e.getMessage());
@@ -139,7 +139,9 @@
      */
     private void createErrorDialog(String errMsg) {
 	AlertDialog.Builder builder = new AlertDialog.Builder(this);
-	builder.setTitle(R.string.create_account_err_dialog_title).setMessage(errMsg).setCancelable(false)
+	builder.setTitle(R.string.create_account_err_dialog_title)
+	    .setMessage(errMsg)
+	    .setCancelable(false)
 	    .setIcon(android.R.drawable.ic_dialog_alert);
 	builder.setNeutralButton(R.string.create_account_close_dialog_button, new DialogInterface.OnClickListener() {
 
--- a/src/com/beem/project/beem/ui/GroupList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/GroupList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import java.util.ArrayList;
@@ -80,7 +80,7 @@
     private static final Intent SERVICE_INTENT = new Intent();
 
     private final ServiceConnection mServConn = new BeemServiceConnection();
-    private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver();
+    private final BeemBroadcastReceiver mReceiver =  new BeemBroadcastReceiver();
     private IXmppFacade mXmppFacade;
     private IRoster mRoster;
     private String mJID;
@@ -99,8 +99,7 @@
     public GroupList() {
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onCreate(android.os.Bundle)
      */
     @Override
@@ -138,8 +137,7 @@
 	unbindService(mServConn);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onDestroy()
      */
     @Override
--- a/src/com/beem/project/beem/ui/Login.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/Login.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import android.app.Activity;
--- a/src/com/beem/project/beem/ui/LoginAnim.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/LoginAnim.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,12 +40,16 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import android.app.Activity;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
 import android.content.ComponentName;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -64,6 +68,8 @@
 import com.beem.project.beem.service.LoginAsyncTask;
 import com.beem.project.beem.service.aidl.IXmppFacade;
 
+import de.duenndns.ssl.MemorizingTrustManager;
+
 /**
  * This class is an activity which display an animation during the connection with the server.
  * @author Da Risk <darisk972@gmail.com>
@@ -72,6 +78,7 @@
 
     private static final String TAG = "LoginAnim";
     private static final Intent SERVICE_INTENT = new Intent();
+    private static final int RECEIVER_PRIORITY = 50;
     static {
 	SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
     }
@@ -83,6 +90,7 @@
     private Button mCancelBt;
     private TextView mLoginState;
     private boolean mBinded;
+    private BroadcastReceiver mSslReceiver;
 
     /**
      * Constructor.
@@ -90,8 +98,7 @@
     public LoginAnim() {
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onCreate(android.os.Bundle)
      */
     @Override
@@ -103,10 +110,21 @@
 	mRotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_and_scale);
 	mCancelBt = (Button) findViewById(R.id.loginanim_cancel_button);
 	mCancelBt.setOnClickListener(new ClickListener());
+	mSslReceiver = new BroadcastReceiver() {
+	    public void onReceive(Context ctx, Intent i) {
+		try {
+		    Log.i(TAG, "Interception the SSL notification");
+		    PendingIntent pi = i.getParcelableExtra(MemorizingTrustManager.INTERCEPT_DECISION_INTENT_LAUNCH);
+		    pi.send();
+		    abortBroadcast();
+		} catch (PendingIntent.CanceledException e) {
+		    Log.e(TAG, "Error while displaying the SSL dialog", e);
+		}
+	    }
+	};
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onStart()
      */
     @Override
@@ -117,10 +135,14 @@
 	    mTask = new LoginTask();
 	if (!mBinded)
 	    mBinded = bindService(LoginAnim.SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
+	IntentFilter filter = new IntentFilter(MemorizingTrustManager.INTERCEPT_DECISION_INTENT
+		+ "/" + getPackageName());
+	filter.setPriority(RECEIVER_PRIORITY);
+	registerReceiver(mSslReceiver, filter);
+
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onPause()
      */
     @Override
@@ -129,11 +151,12 @@
 	if (mBinded && mTask.getStatus() != AsyncTask.Status.RUNNING) {
 	    unbindService(mServConn);
 	    mXmppFacade = null;
+	    mBinded = false;
 	}
+	unregisterReceiver(mSslReceiver);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
      */
     @Override
@@ -182,8 +205,7 @@
 	LoginTask() {
 	}
 
-	/*
-	 * (non-Javadoc)
+	/* (non-Javadoc)
 	 * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
 	 */
 	@Override
@@ -206,12 +228,11 @@
 	}
 
 	@Override
-	protected void onProgressUpdate(Integer... values) {
+	protected void onProgressUpdate(Integer ... values) {
 	    mLoginState.setText(getResources().getStringArray(R.array.loganim_state)[values[0]]);
 	}
 
-	/*
-	 * (non-Javadoc)
+	/* (non-Javadoc)
 	 * @see android.os.AsyncTask#onCancelled()
 	 */
 	@Override
--- a/src/com/beem/project/beem/ui/PrivacyList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/PrivacyList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import java.util.ArrayList;
--- a/src/com/beem/project/beem/ui/Settings.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/Settings.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import android.content.ComponentName;
--- a/src/com/beem/project/beem/ui/Subscription.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/Subscription.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui;
 
 import org.jivesoftware.smack.packet.Presence;
@@ -91,8 +91,7 @@
     public Subscription() {
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onCreate(android.os.Bundle)
      */
     @Override
@@ -109,8 +108,7 @@
 	this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onResume()
      */
     @Override
@@ -119,8 +117,7 @@
 	bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onPause()
      */
     @Override
@@ -129,8 +126,7 @@
 	unbindService(mServConn);
     }
 
-    /*
-     * (non-Javadoc)
+    /* (non-Javadoc)
      * @see android.app.Activity#onDestroy()
      */
     @Override
@@ -141,6 +137,7 @@
 
     /**
      * Send the presence stanza.
+     *
      * @param p presence stanza
      */
     private void sendPresence(Presence p) {
@@ -169,7 +166,8 @@
 	    switch (v.getId()) {
 		case R.id.SubscriptionAccept:
 		    presence = new Presence(Type.subscribed);
-		    Toast.makeText(Subscription.this, getString(R.string.SubscriptAccept), Toast.LENGTH_SHORT).show();
+		    Toast.makeText(Subscription.this, getString(R.string.SubscriptAccept), Toast.LENGTH_SHORT)
+			    .show();
 		    break;
 		case R.id.SubscriptionRefuse:
 		    presence = new Presence(Type.unsubscribed);
--- a/src/com/beem/project/beem/ui/dialogs/builders/Alias.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/Alias.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.dialogs.builders;
 
 import android.app.AlertDialog;
@@ -80,10 +80,12 @@
 	mContact = contact;
 
 	LayoutInflater factory = LayoutInflater.from(context);
-	final View textEntryView = factory.inflate(R.layout.contactdialogaliasdialog, null);
+	final View textEntryView = factory.inflate(
+	    R.layout.contactdialogaliasdialog, null);
 	setTitle(mContact.getJID());
 	setView(textEntryView);
-	mEditTextAlias = (EditText) textEntryView.findViewById(R.id.CDAliasDialogName);
+	mEditTextAlias = (EditText) textEntryView.findViewById(
+	    R.id.CDAliasDialogName);
 	mEditTextAlias.setText(mContact.getName());
 	setPositiveButton(R.string.OkButton, new DialogClickListener());
 	setNegativeButton(R.string.CancelButton, new DialogClickListener());
@@ -100,6 +102,7 @@
 	public DialogClickListener() {
 	}
 
+
 	@Override
 	public void onClick(final DialogInterface dialog, final int which) {
 	    if (which == DialogInterface.BUTTON_POSITIVE) {
--- a/src/com/beem/project/beem/ui/dialogs/builders/ChatList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/ChatList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.dialogs.builders;
 
 import java.util.List;
--- a/src/com/beem/project/beem/ui/dialogs/builders/CreatePrivacyList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/CreatePrivacyList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.dialogs.builders;
 
 import java.util.ArrayList;
--- a/src/com/beem/project/beem/ui/dialogs/builders/DeleteContact.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/DeleteContact.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.dialogs.builders;
 
 import android.app.AlertDialog;
--- a/src/com/beem/project/beem/ui/dialogs/builders/DeletePrivacyList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/DeletePrivacyList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.dialogs.builders;
 
 import android.app.AlertDialog;
--- a/src/com/beem/project/beem/ui/dialogs/builders/ResendSubscription.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/ResendSubscription.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.dialogs.builders;
 
 import org.jivesoftware.smack.packet.Presence;
--- a/src/com/beem/project/beem/ui/dialogs/builders/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/dialogs/builders/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 /**
  * This package contains Beem dialog builder's.
  */
--- a/src/com/beem/project/beem/ui/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -39,7 +39,7 @@
 
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
- */
+*/
 /**
  * This package contains the different activity displayed by BEEM and other class useful to make the UI.
  */
--- a/src/com/beem/project/beem/ui/wizard/Account.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/wizard/Account.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.wizard;
 
 import android.app.Activity;
@@ -56,6 +56,7 @@
 
 /**
  * The first activity of an user friendly wizard to configure a XMPP account.
+ *
  * @author Da Risk <darisk972@gmail.com>
  */
 public class Account extends Activity implements OnClickListener, RadioGroup.OnCheckedChangeListener {
@@ -97,7 +98,7 @@
     }
 
     @Override
-    public void onCheckedChanged(RadioGroup group, int checkedId) {
+    public void onCheckedChanged(RadioGroup  group, int checkedId) {
 	if (checkedId == -1)
 	    mNextButton.setEnabled(false);
 	else
--- a/src/com/beem/project/beem/ui/wizard/AccountConfigure.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/wizard/AccountConfigure.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.ui.wizard;
 
 import android.app.Activity;
@@ -67,6 +67,7 @@
 
 /**
  * Activity to enter the information required in order to configure a XMPP account.
+ *
  * @author Da Risk <darisk972@gmail.com>
  */
 public class AccountConfigure extends Activity implements OnClickListener {
@@ -98,6 +99,7 @@
 	mAccountJID = (EditText) findViewById(R.id.account_username);
 	mAccountPassword = (EditText) findViewById(R.id.account_password);
 
+
 	InputFilter[] orgFilters = mAccountJID.getFilters();
 	InputFilter[] newFilters = new InputFilter[orgFilters.length + 1];
 	int i;
@@ -193,11 +195,11 @@
 	}
 
 	@Override
-	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+	public void beforeTextChanged(CharSequence  s, int start, int count, int after) {
 	}
 
 	@Override
-	public void onTextChanged(CharSequence s, int start, int before, int count) {
+	public void onTextChanged(CharSequence  s, int start, int before, int count) {
 	}
     }
 
@@ -219,11 +221,11 @@
 	}
 
 	@Override
-	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+	public void beforeTextChanged(CharSequence  s, int start, int count, int after) {
 	}
 
 	@Override
-	public void onTextChanged(CharSequence s, int start, int before, int count) {
+	public void onTextChanged(CharSequence  s, int start, int before, int count) {
 	}
     }
 }
--- a/src/com/beem/project/beem/ui/wizard/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/ui/wizard/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 
 /**
  * This package contains some configuration wizards.
--- a/src/com/beem/project/beem/utils/BeemBroadcastReceiver.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/BeemBroadcastReceiver.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.utils;
 
 import android.app.Activity;
@@ -84,9 +84,8 @@
 	    }
 	} else if (intentAction.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
 	    if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) {
-		Toast
-		    .makeText(context, context.getString(R.string.BeemBroadcastReceiverDisconnect), Toast.LENGTH_SHORT)
-		    .show();
+		Toast.makeText(context, context.getString(R.string.BeemBroadcastReceiverDisconnect),
+		    Toast.LENGTH_SHORT).show();
 		context.stopService(new Intent(context, BeemService.class));
 	    }
 	}
--- a/src/com/beem/project/beem/utils/BeemConnectivity.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/BeemConnectivity.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.utils;
 
 import android.content.Context;
@@ -59,8 +59,7 @@
     /**
      * Private constructor to forbid instantiation.
      */
-    private BeemConnectivity() {
-    }
+    private BeemConnectivity() { }
 
     /**
      * Checks if is connected.
@@ -68,7 +67,8 @@
      * @return true, if is connected
      */
     public static boolean isConnected(final Context ctx) {
-	ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
+	ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(
+	    Context.CONNECTIVITY_SERVICE);
 	NetworkInfo ni = cm.getActiveNetworkInfo();
 	return ni != null && ni.isConnected();
     }
@@ -79,11 +79,14 @@
      * @return true, if is wifi
      */
     public static boolean isWifi(final Context ctx) {
-	WifiManager wm = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
+	WifiManager wm = (WifiManager) ctx.getSystemService(
+	    Context.WIFI_SERVICE);
 	WifiInfo wi = wm.getConnectionInfo();
 	if (wi != null
-	    && (WifiInfo.getDetailedStateOf(wi.getSupplicantState()) == DetailedState.OBTAINING_IPADDR || WifiInfo
-		.getDetailedStateOf(wi.getSupplicantState()) == DetailedState.CONNECTED)) {
+	    && (WifiInfo.getDetailedStateOf(wi.getSupplicantState())
+		== DetailedState.OBTAINING_IPADDR
+		|| WifiInfo.getDetailedStateOf(wi.getSupplicantState())
+		== DetailedState.CONNECTED)) {
 	    return false;
 	}
 	return false;
@@ -95,7 +98,8 @@
      * @return true, if is umts
      */
     public static boolean isUmts(final Context ctx) {
-	TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
+	TelephonyManager tm = (TelephonyManager) ctx.getSystemService(
+	    Context.TELEPHONY_SERVICE);
 	return tm.getNetworkType() >= TelephonyManager.NETWORK_TYPE_UMTS;
     }
 
@@ -105,7 +109,8 @@
      * @return true, if is edge
      */
     public static boolean isEdge(final Context ctx) {
-	TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
+	TelephonyManager tm = (TelephonyManager) ctx.getSystemService(
+	    Context.TELEPHONY_SERVICE);
 	return tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_EDGE;
     }
 
--- a/src/com/beem/project/beem/utils/FreePort.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/FreePort.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.utils;
 
 import java.io.IOException;
--- a/src/com/beem/project/beem/utils/PresenceType.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/PresenceType.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.utils;
 
 import org.jivesoftware.smack.packet.Presence;
--- a/src/com/beem/project/beem/utils/SortedList.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/SortedList.java	Sat Nov 05 23:49:30 2011 +0100
@@ -26,7 +26,7 @@
     Please send bug reports with examples or suggestions to
     contact@beem-project.com or http://dev.beem-project.com/
 
- */
+*/
 package com.beem.project.beem.utils;
 
 import java.util.List;
@@ -37,8 +37,10 @@
 import java.util.Collections;
 
 /**
- * This class add a sort by insertion to a List. All methods which allow you to insert an object at a specific index
+ * This class add a sort by insertion to a List.
+ * All methods which allow you to insert an object at a specific index
  * will throw an UnsupportedOperationException.
+ *
  * @author Da Risk <da_risk@beem-project.com>
  * @param <E> the type of elements maintained by this list
  */
@@ -49,6 +51,7 @@
 
     /**
      * Create a SortedList. The existing elements will be sorted.
+     *
      * @param list list to sort
      * @param mComparator mComparator to use.
      */
@@ -126,7 +129,9 @@
     }
 
     /**
-     * Add all the elements in the specified collection. The index param is ignored.
+     * Add all the elements in the specified collection.
+     * The index param is ignored.
+     *
      * @param index ignored
      * @param c collection containing elements to be added to this list
      * @return true if this list changed as a result of the call
@@ -137,7 +142,9 @@
     }
 
     /**
-     * Add all the elements in the specified collection. The index param is ignored.
+     * Add all the elements in the specified collection.
+     * The index param is ignored.
+     *
      * @param l collection containing elements to be added to this list
      * @return true if this list changed as a result of the call
      * @see addAll(Collection)
@@ -241,7 +248,8 @@
     }
 
     /**
-     * A SortedList.iterator don't allow list modification. It use the mBackend iterator for the other operations.
+     * A SortedList.iterator don't allow list modification.
+     * It use the mBackend iterator for the other operations.
      */
     private class SortedListIterator<E> implements ListIterator<E> {
 
@@ -249,6 +257,7 @@
 
 	/**
 	 * Construct SortedList.Iterator.
+	 *
 	 * @param iterator the iterator of the backend list
 	 */
 	SortedListIterator(final ListIterator<E> iterator) {
--- a/src/com/beem/project/beem/utils/Status.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/Status.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 package com.beem.project.beem.utils;
 
 import org.jivesoftware.smack.packet.Presence;
--- a/src/com/beem/project/beem/utils/package-info.java	Sat Nov 05 22:27:58 2011 +0100
+++ b/src/com/beem/project/beem/utils/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -40,7 +40,7 @@
     Flavien Astraud, November 26, 2009
     Head of the EIP Laboratory.
 
- */
+*/
 /**
  * This package contains utility class to deal with various aspect of BEEM.
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/duenndns/ssl/MTMDecision.java	Sat Nov 05 23:49:30 2011 +0100
@@ -0,0 +1,33 @@
+/* MemorizingTrustManager - a TrustManager which asks the user about invalid
+ *  certificates and memorizes their decision.
+ *
+ * Copyright (c) 2010 Georg Lukas <georg@op-co.de>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package de.duenndns.ssl;
+
+class MTMDecision {
+	public final static int DECISION_INVALID	= 0;
+	public final static int DECISION_ABORT		= 1;
+	public final static int DECISION_ONCE		= 2;
+	public final static int DECISION_ALWAYS	= 3;
+
+	int state = DECISION_INVALID;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/duenndns/ssl/MemorizingActivity.java	Sat Nov 05 23:49:30 2011 +0100
@@ -0,0 +1,97 @@
+/* MemorizingTrustManager - a TrustManager which asks the user about invalid
+ *  certificates and memorizes their decision.
+ *
+ * Copyright (c) 2010 Georg Lukas <georg@op-co.de>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package de.duenndns.ssl;
+
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.*;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.beem.project.beem.R;
+
+public class MemorizingActivity extends Activity
+		implements OnClickListener,OnCancelListener {
+	final static String TAG = "MemorizingActivity";
+
+	int decisionId;
+	String app;
+	
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		Log.d(TAG, "onCreate");
+		super.onCreate(savedInstanceState);
+	}
+
+	@Override
+	public void onResume() {
+		super.onResume();
+		Intent i = getIntent();
+		app = i.getStringExtra(MemorizingTrustManager.DECISION_INTENT_APP);
+		decisionId = i.getIntExtra(MemorizingTrustManager.DECISION_INTENT_ID, MTMDecision.DECISION_INVALID);
+		String cert = i.getStringExtra(MemorizingTrustManager.DECISION_INTENT_CERT);
+		Log.d(TAG, "onResume with " + i.getExtras() + " decId=" + decisionId);
+		Log.d(TAG, "data: " + i.getData());
+		new AlertDialog.Builder(this).setTitle(R.string.mtm_accept_cert)
+			.setMessage(cert)
+			.setPositiveButton(R.string.mtm_decision_always, this)
+			.setNeutralButton(R.string.mtm_decision_once, this)
+			.setNegativeButton(R.string.mtm_decision_abort, this)
+			.setOnCancelListener(this)
+			.create().show();
+	}
+
+	void sendDecision(int decision) {
+		Log.d(TAG, "Sending decision to " + app + ": " + decision);
+		Intent i = new Intent(MemorizingTrustManager.DECISION_INTENT + "/" + app);
+		i.putExtra(MemorizingTrustManager.DECISION_INTENT_ID, decisionId);
+		i.putExtra(MemorizingTrustManager.DECISION_INTENT_CHOICE, decision);
+		sendBroadcast(i);
+		finish();
+	}
+
+	// react on AlertDialog button press
+	public void onClick(DialogInterface dialog, int btnId) {
+		int decision;
+		dialog.dismiss();
+		switch (btnId) {
+		case DialogInterface.BUTTON_POSITIVE:
+			decision = MTMDecision.DECISION_ALWAYS;
+			break;
+		case DialogInterface.BUTTON_NEUTRAL:
+			decision = MTMDecision.DECISION_ONCE;
+			break;
+		default:
+			decision = MTMDecision.DECISION_ABORT;
+		}
+		sendDecision(decision);
+	}
+
+	public void onCancel(DialogInterface dialog) {
+		sendDecision(MTMDecision.DECISION_ABORT);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/duenndns/ssl/MemorizingTrustManager.java	Sat Nov 05 23:49:30 2011 +0100
@@ -0,0 +1,390 @@
+/* MemorizingTrustManager - a TrustManager which asks the user about invalid
+ *  certificates and memorizes their decision.
+ *
+ * Copyright (c) 2010 Georg Lukas <georg@op-co.de>
+ *
+ * MemorizingTrustManager.java contains the actual trust manager and interface
+ * code to create a MemorizingActivity and obtain the results.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package de.duenndns.ssl;
+
+import android.app.Activity;
+import android.app.Application;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.Service;
+import android.app.AlertDialog;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.Uri;
+import android.util.Log;
+import android.os.Handler;
+
+import java.io.File;
+import java.security.cert.*;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.HashMap;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+
+import com.beem.project.beem.R;
+
+/**
+ * A X509 trust manager implementation which asks the user about invalid
+ * certificates and memorizes their decision.
+ * <p>
+ * The certificate validity is checked using the system default X509
+ * TrustManager, creating a query Dialog if the check fails.
+ * <p>
+ * <b>WARNING:</b> This only works if a dedicated thread is used for
+ * opening sockets!
+ */
+public class MemorizingTrustManager implements X509TrustManager {
+	final static String TAG = "MemorizingTrustManager";
+	public final static String INTERCEPT_DECISION_INTENT = "de.duenndns.ssl.INTERCEPT_DECISION";
+	public final static String INTERCEPT_DECISION_INTENT_LAUNCH = INTERCEPT_DECISION_INTENT + ".launch_intent";
+	final static String DECISION_INTENT = "de.duenndns.ssl.DECISION";
+	final static String DECISION_INTENT_APP    = DECISION_INTENT + ".app";
+	final static String DECISION_INTENT_ID     = DECISION_INTENT + ".decisionId";
+	final static String DECISION_INTENT_CERT   = DECISION_INTENT + ".cert";
+	final static String DECISION_INTENT_CHOICE = DECISION_INTENT + ".decisionChoice";
+	private final static int NOTIFICATION_ID = 100509;
+
+	static String KEYSTORE_DIR = "KeyStore";
+	static String KEYSTORE_FILE = "KeyStore.bks";
+
+	Context master;
+	NotificationManager notificationManager;
+	private static int decisionId = 0;
+	private static HashMap<Integer,MTMDecision> openDecisions = new HashMap();
+
+	Handler masterHandler;
+	private File keyStoreFile;
+	private KeyStore appKeyStore;
+	private X509TrustManager defaultTrustManager;
+	private X509TrustManager appTrustManager;
+
+	/** Creates an instance of the MemorizingTrustManager class.
+	 *
+	 * @param m Activity or Service to show the Dialog / Notification
+	 */
+	private MemorizingTrustManager(Context m) {
+		master = m;
+		masterHandler = new Handler();
+		notificationManager = (NotificationManager)master.getSystemService(Context.NOTIFICATION_SERVICE);
+
+		Application app;
+		if (m instanceof Service) {
+			app = ((Service)m).getApplication();
+		} else if (m instanceof Activity) {
+			app = ((Activity)m).getApplication();
+		} else throw new ClassCastException("MemorizingTrustManager context must be either Activity or Service!");
+
+		File dir = app.getDir(KEYSTORE_DIR, Context.MODE_PRIVATE);
+		keyStoreFile = new File(dir + File.separator + KEYSTORE_FILE);
+
+		appKeyStore = loadAppKeyStore();
+		defaultTrustManager = getTrustManager(null);
+		appTrustManager = getTrustManager(appKeyStore);
+	}
+
+	/**
+	 * Returns a X509TrustManager list containing a new instance of
+	 * TrustManagerFactory.
+	 *
+	 * This function is meant for convenience only. You can use it
+	 * as follows to integrate TrustManagerFactory for HTTPS sockets:
+	 *
+	 * <pre>
+	 *     SSLContext sc = SSLContext.getInstance("TLS");
+	 *     sc.init(null, MemorizingTrustManager.getInstanceList(this),
+	 *         new java.security.SecureRandom());
+	 *     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+	 * </pre>
+	 * @param c Activity or Service to show the Dialog / Notification
+	 */
+	public static X509TrustManager[] getInstanceList(Context c) {
+		return new X509TrustManager[] { new MemorizingTrustManager(c) };
+	}
+
+	/**
+	 * Changes the path for the KeyStore file.
+	 *
+	 * The actual filename relative to the app's directory will be
+	 * <code>app_<i>dirname</i>/<i>filename</i></code>.
+	 *
+	 * @param dirname directory to store the KeyStore.
+	 * @param filename file name for the KeyStore.
+	 */
+	public static void setKeyStoreFile(String dirname, String filename) {
+		KEYSTORE_DIR = dirname;
+		KEYSTORE_FILE = filename;
+	}
+
+	X509TrustManager getTrustManager(KeyStore ks) {
+		try {
+			TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
+			tmf.init(ks);
+			for (TrustManager t : tmf.getTrustManagers()) {
+				if (t instanceof X509TrustManager) {
+					return (X509TrustManager)t;
+				}
+			}
+		} catch (Exception e) {
+			// Here, we are covering up errors. It might be more useful
+			// however to throw them out of the constructor so the
+			// embedding app knows something went wrong.
+			Log.e(TAG, "getTrustManager(" + ks + ")", e);
+		}
+		return null;
+	}
+
+	KeyStore loadAppKeyStore() {
+		KeyStore ks;
+		try {
+			ks = KeyStore.getInstance(KeyStore.getDefaultType());
+		} catch (KeyStoreException e) {
+			Log.e(TAG, "getAppKeyStore()", e);
+			return null;
+		}
+		try {
+			ks.load(null, null);
+			ks.load(new java.io.FileInputStream(keyStoreFile), "MTM".toCharArray());
+		} catch (java.io.FileNotFoundException e) {
+			Log.i(TAG, "getAppKeyStore(" + keyStoreFile + ") - file does not exist");
+		} catch (Exception e) {
+			Log.e(TAG, "getAppKeyStore(" + keyStoreFile + ")", e);
+		}
+		return ks;
+	}
+
+	void storeCert(X509Certificate[] chain) {
+		// add all certs from chain to appKeyStore
+		try {
+			for (X509Certificate c : chain)
+				appKeyStore.setCertificateEntry(c.getSubjectDN().toString(), c);
+		} catch (KeyStoreException e) {
+			Log.e(TAG, "storeCert(" + chain + ")", e);
+			return;
+		}
+		
+		// reload appTrustManager
+		appTrustManager = getTrustManager(appKeyStore);
+
+		// store KeyStore to file
+		try {
+			java.io.FileOutputStream fos = new java.io.FileOutputStream(keyStoreFile);
+			appKeyStore.store(fos, "MTM".toCharArray());
+			fos.close();
+		} catch (Exception e) {
+			Log.e(TAG, "storeCert(" + keyStoreFile + ")", e);
+		}
+	}
+
+	private boolean isExpiredException(Throwable e) {
+		do {
+			if (e instanceof CertificateExpiredException)
+				return true;
+			e = e.getCause();
+		} while (e != null);
+		return false;
+	}
+
+	public void checkCertTrusted(X509Certificate[] chain, String authType, boolean isServer)
+		throws CertificateException
+	{
+		Log.d(TAG, "checkCertTrusted(" + chain + ", " + authType + ", " + isServer + ")");
+		try {
+			Log.d(TAG, "checkCertTrusted: trying appTrustManager");
+			if (isServer)
+				appTrustManager.checkServerTrusted(chain, authType);
+			else
+				appTrustManager.checkClientTrusted(chain, authType);
+		} catch (CertificateException ae) {
+			// if the cert is stored in our appTrustManager, we ignore expiredness
+			ae.printStackTrace();
+			if (isExpiredException(ae)) {
+				Log.i(TAG, "checkCertTrusted: accepting expired certificate from keystore");
+				return;
+			}
+			try {
+				Log.d(TAG, "checkCertTrusted: trying defaultTrustManager");
+				if (isServer)
+					defaultTrustManager.checkServerTrusted(chain, authType);
+				else
+					defaultTrustManager.checkClientTrusted(chain, authType);
+			} catch (CertificateException e) {
+				e.printStackTrace();
+				interact(chain, authType, e);
+			}
+		}
+	}
+
+	public void checkClientTrusted(X509Certificate[] chain, String authType)
+		throws CertificateException
+	{
+		checkCertTrusted(chain, authType, false);
+	}
+
+	public void checkServerTrusted(X509Certificate[] chain, String authType)
+		throws CertificateException
+	{
+		checkCertTrusted(chain, authType, true);
+	}
+
+	public X509Certificate[] getAcceptedIssuers()
+	{
+		Log.d(TAG, "getAcceptedIssuers()");
+		return defaultTrustManager.getAcceptedIssuers();
+	}
+
+	private int createDecisionId(MTMDecision d) {
+		int myId;
+		synchronized(openDecisions) {
+			myId = decisionId;
+			openDecisions.put(myId, d);
+			decisionId += 1;
+		}
+		return myId;
+	}
+
+	private String certChainMessage(final X509Certificate[] chain, CertificateException cause) {
+		Throwable e = cause;
+		Log.d(TAG, "certChainMessage for " + e);
+		StringBuffer si = new StringBuffer();
+		if (e.getCause() != null) {
+			e = e.getCause();
+			si.append(e.getLocalizedMessage());
+			si.append("\n");
+		}
+		for (X509Certificate c : chain) {
+			si.append("\n");
+			si.append(c.getSubjectDN().toString());
+			si.append(" (");
+			si.append(c.getIssuerDN().toString());
+			si.append(")");
+		}
+		return si.toString();
+	}
+
+	void startActivityNotification(PendingIntent intent, String certName) {
+		Notification n = new Notification(android.R.drawable.ic_lock_lock,
+				master.getString(R.string.mtm_notification),
+				System.currentTimeMillis());
+		n.setLatestEventInfo(master.getApplicationContext(),
+				master.getString(R.string.mtm_notification),
+				certName, intent);
+		n.flags |= Notification.FLAG_AUTO_CANCEL;
+
+		notificationManager.notify(NOTIFICATION_ID, n);
+	}
+
+	void launchServiceMode(Intent activityIntent, final String certMessage) {
+		BroadcastReceiver launchNotifReceiver= new BroadcastReceiver() {
+		    public void onReceive(Context ctx, Intent i) {
+			Log.i(TAG, "Interception not done by the application. Send notification");
+			PendingIntent pi = i.getParcelableExtra(INTERCEPT_DECISION_INTENT_LAUNCH);
+			startActivityNotification(pi, certMessage);
+		    }
+		};
+		master.registerReceiver(launchNotifReceiver, new IntentFilter(INTERCEPT_DECISION_INTENT + "/" + master.getPackageName()));
+		PendingIntent call = PendingIntent.getActivity(master, 0, activityIntent, 0);
+		Intent ni = new Intent(INTERCEPT_DECISION_INTENT + "/" + master.getPackageName());
+		ni.putExtra(INTERCEPT_DECISION_INTENT_LAUNCH, call);
+		master.sendOrderedBroadcast(ni, null);
+
+	}
+
+	void interact(final X509Certificate[] chain, String authType, CertificateException cause)
+		throws CertificateException
+	{
+		/* prepare the MTMDecision blocker object */
+		MTMDecision choice = new MTMDecision();
+		final int myId = createDecisionId(choice);
+		final String certTitle = chain[0].getSubjectDN().toString();
+		final String certMessage = certChainMessage(chain, cause);
+
+		BroadcastReceiver decisionReceiver = new BroadcastReceiver() {
+			public void onReceive(Context ctx, Intent i) { interactResult(i); }
+		};
+		master.registerReceiver(decisionReceiver, new IntentFilter(DECISION_INTENT + "/" + master.getPackageName()));
+		masterHandler.post(new Runnable() {
+			public void run() {
+				Intent ni = new Intent(master, MemorizingActivity.class);
+				ni.setData(Uri.parse(MemorizingTrustManager.class.getName() + "/" + myId));
+				ni.putExtra(DECISION_INTENT_APP, master.getPackageName());
+				ni.putExtra(DECISION_INTENT_ID, myId);
+				ni.putExtra(DECISION_INTENT_CERT, certMessage);
+
+				try {
+					master.startActivity(ni);
+				} catch (Exception e) {
+					Log.e(TAG, "startActivity: " + e);
+					launchServiceMode(ni, certMessage);
+				}
+			}
+		});
+
+		Log.d(TAG, "openDecisions: " + openDecisions);
+		Log.d(TAG, "waiting on " + myId);
+		try {
+			synchronized(choice) { choice.wait(); }
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		master.unregisterReceiver(decisionReceiver);
+		Log.d(TAG, "finished wait on " + myId + ": " + choice.state);
+		switch (choice.state) {
+		case MTMDecision.DECISION_ALWAYS:
+			storeCert(chain);
+		case MTMDecision.DECISION_ONCE:
+			break;
+		default:
+			throw (cause);
+		}
+	}
+
+	public static void interactResult(Intent i) {
+		int decisionId = i.getIntExtra(DECISION_INTENT_ID, MTMDecision.DECISION_INVALID);
+		int choice = i.getIntExtra(DECISION_INTENT_CHOICE, MTMDecision.DECISION_INVALID);
+		Log.d(TAG, "interactResult: " + decisionId + " chose " + choice);
+		Log.d(TAG, "openDecisions: " + openDecisions);
+
+		MTMDecision d;
+		synchronized(openDecisions) {
+			 d = openDecisions.get(decisionId);
+			 openDecisions.remove(decisionId);
+		}
+		synchronized(d) {
+			d.state = choice;
+			d.notify();
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/duenndns/ssl/package-info.java	Sat Nov 05 23:49:30 2011 +0100
@@ -0,0 +1,7 @@
+/**
+ * This package contains the MemorizingTrustManager library made by Georg.
+ * It is a "plugin" for Android Java to allow asking the user about SSL certificates
+ * https://github.com/ge0rg/MemorizingTrustManager
+ */
+package de.duenndns.ssl;
+