--- a/.hgtags Tue Dec 28 16:33:33 2010 +0100
+++ b/.hgtags Fri Apr 15 03:01:09 2011 +0200
@@ -6,3 +6,5 @@
1b88edb34d96acb5795b8d28e58b974f1bf2c1d6 0.1.4_rc
887b6a1fd9662312bf1ec271f9735369ead04cad 0.1.4
cf5db8d24b2a28ca501cc3e076abc55b38b41d90 0.1.4
+7b54215139deae5ba9307b7a165f24d65f926938 0.1.5_rc1
+8d19f91dd64c7f29f137b3236fb38c2cbcf98a36 0.1.5
--- a/AndroidManifest.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/AndroidManifest.xml Fri Apr 15 03:01:09 2011 +0200
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.beem.project.beem" android:versionCode="5"
- android:versionName="0.1.4">
+ package="com.beem.project.beem" android:versionCode="7"
+ android:versionName="0.1.5">
<application android:label="@string/app_name"
android:icon="@drawable/beem_launcher_icon_silver" android:theme="@style/Theme.BEEM.Default"
- android:debuggable="true" android:name=".BeemApplication">
+ android:name="BeemApplication">
<activity android:name=".ui.Login" android:label="@string/app_name"
android:launchMode="standard">
<intent-filter>
@@ -16,59 +16,22 @@
<activity android:name=".ui.wizard.AccountConfigure" android:label="Account wizard" />
<activity android:name=".ui.LoginAnim" android:label="@string/login_login_progress"
android:launchMode="singleTop" android:screenOrientation="portrait" />
- <activity android:name=".ui.Settings" android:label="@string/edit_settings_name">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
+ <activity android:name=".ui.Settings" android:label="@string/edit_settings_name" />
<activity android:name=".ui.Chat" android:label="@string/chat_name"
- android:launchMode="singleTop">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
+ android:launchMode="singleTop" />
<activity android:name=".ui.ChangeStatus" android:label="@string/ChangeStatusActTitle"
- android:launchMode="singleTask"
- android:windowSoftInputMode="stateHidden" >
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
- <activity android:name=".ui.AddContact" android:label="@string/AddCActTitle">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
- <activity android:name=".ui.Subscription" android:label="@string/app_name">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
+ android:launchMode="singleTop"
+ android:windowSoftInputMode="stateHidden" />
+ <activity android:name=".ui.AddContact" android:label="@string/AddCActTitle" />
+ <activity android:name=".ui.Subscription" android:label="@string/app_name" />
<activity android:name=".ui.CreateAccount" android:label="@string/create_account_name" />
+
<activity android:name=".ui.ContactList" android:label="@string/contact_list_name"
- android:launchMode="singleTask">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
- <activity android:name=".ui.GroupList" android:label="GroupList">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
- <activity android:name=".ui.PrivacyList" android:label="@string/privacy_list_name">
- <intent-filter android:label="Beem Connection">
- <action
- android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
- </intent-filter>
- </activity>
+ android:launchMode="singleTask" />
+
+ <activity android:name=".ui.GroupList" android:label="GroupList" />
+ <activity android:name="ui.PrivacyList" android:label="@string/privacy_list_name" />
+
<!--
Could be interesting if we would launch beem at startup <receiver
android:name=".tool.BeemBroadcastReceiver" android:enabled="true">
@@ -76,23 +39,27 @@
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </receiver>
-->
+ <provider android:name="providers.AvatarProvider"
+ android:authorities="com.beem.project.beem.providers.avatarprovider"
+ android:exported="false" />
+
<service android:name="BeemService" android:enabled="true"
android:label="Beem Service" android:permission="com.beem.project.beem.BEEM_SERVICE">
<intent-filter>
<action android:name="com.beem.project.beem.BeemService"></action>
- <action android:name="android.intent.action.SCREEN_OFF"></action>
- <action android:name="android.intent.action.SCREEN_ON"></action>
</intent-filter>
</service>
</application>
<permission android:permissionGroup="android.permission-group.NETWORK"
android:label="BeemService" android:description="@string/BeemServiceDescription"
- android:name="com.beem.project.beem.BEEM_SERVICE"></permission>
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
- <uses-permission android:name="android.permission.VIBRATE"></uses-permission>
- <uses-permission android:name="com.beem.project.beem.BEEM_SERVICE"></uses-permission>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
- <uses-sdk android:minSdkVersion="3" />
+ android:name="com.beem.project.beem.BEEM_SERVICE"/>
+ <uses-permission android:name="android.permission.INTERNET"/>
+ <uses-permission android:name="android.permission.VIBRATE"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ <uses-permission android:name="com.beem.project.beem.BEEM_SERVICE"/>
+ <uses-feature name="android.hardware.touchscreen" required="false" />
+ <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="7" />
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true" android:anyDensity="true" />
</manifest>
--- a/CREDITS Tue Dec 28 16:33:33 2010 +0100
+++ b/CREDITS Fri Apr 15 03:01:09 2011 +0200
@@ -16,6 +16,9 @@
Tranlators :
GoApk http://goapk.com for chinese translations
Daniel Hofmann for german translations
+Andrea Selva for italian translations
+Erik Lindström for swedish translations
+
Thanks to all !
--- a/build.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/build.xml Fri Apr 15 03:01:09 2011 +0200
@@ -73,6 +73,8 @@
<delete verbose="false" dir="gen"/>
</target>
+ <target name="all" depends="clean,debug,javadoc"/>
+
<target name="javadoc">
<javadoc author="true" destdir="${javadoc.output}" doctitle="Beem javadoc" source="1.6" sourcepath="${source.dir}" use="true" version="false" bootclasspathref="android.target.classpath">
<classpath>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/drawable/avatar_status.xml Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Layer Level list drawable for Avatar and status icon
+ See src/com/beem/project/beem/utils/Status.java
+ for level values to change the status.
+ The status icon must be resized using method
+ LayerDrawable.setLayerInset();
+ The drawable with id @id/avatar must be replace by the real
+ avatar using the method LayerDrawable.setDrawableByLayerId()
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/avatar">
+ <shape/>
+ </item>
+ <item android:drawable="@drawable/status_icon" />
+</layer-list>
Binary file res/drawable/background.png has changed
--- a/res/layout/changestatus.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/layout/changestatus.xml Fri Apr 15 03:01:09 2011 +0200
@@ -5,8 +5,21 @@
<RelativeLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:padding="10dip">
+ <LinearLayout android:id="@+id/avatar_panel"
+ android:orientation="vertical"
+ android:gravity="center"
+ android:layout_alignParentTop="true"
+ android:layout_width="fill_parent" android:layout_height="fill_parent" >
+ <TextView android:text="@string/my_avatar" style="@style/Label"
+ android:layout_width="wrap_content" android:layout_height="wrap_content" />
+
+ <ImageButton android:id="@+id/avatarButton"
+ android:layout_width="120dip" android:layout_height="120dip"
+ android:scaleType="fitCenter" />
+ </LinearLayout>
<TextView android:id="@+id/ChangeStatusTypeLabel"
android:layout_width="fill_parent" android:layout_height="wrap_content"
+ android:layout_below="@id/avatar_panel"
android:text="@string/ChangeStatusType" style="@style/Label" />
<Spinner android:id="@+id/ChangeStatusSpinner"
android:layout_width="fill_parent" android:layout_height="wrap_content"
--- a/res/layout/chat.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/layout/chat.xml Fri Apr 15 03:01:09 2011 +0200
@@ -7,9 +7,10 @@
android:orientation="horizontal" android:gravity="center_vertical"
android:background="#222222" android:padding="4px">
<ImageView android:id="@+id/chat_contact_status_icon"
- android:src="@drawable/status_icon"
- android:adjustViewBounds="true" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:gravity="center_vertical" />
+ android:src="@drawable/avatar_status"
+ android:layout_width="48dip"
+ android:layout_height="48dip"
+ />
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:paddingLeft="15sp">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/layout/chat_compact.xml Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent" android:layout_height="fill_parent"
+ android:orientation="vertical">
+ <View android:layout_width="fill_parent" android:layout_height="2dp"
+ android:fadingEdge="horizontal" android:background="#222222" />
+ <ListView android:id="@+id/chat_messages"
+ android:layout_width="fill_parent" android:layout_height="0dip"
+ android:layout_weight="1" android:transcriptMode="normal"
+ android:stackFromBottom="true"
+ android:fadingEdge="none" android:padding="4px"
+ android:fastScrollEnabled="true" android:smoothScrollbar="false"
+ android:focusable="true"/>
+ <LinearLayout android:layout_width="fill_parent"
+ android:layout_height="wrap_content" android:orientation="horizontal"
+ android:background="#222222" android:padding="8px">
+ <EditText android:id="@+id/chat_input" android:layout_width="0dip"
+ android:layout_height="fill_parent" android:layout_weight="1"
+ android:maxLines="5"
+ android:inputType="textShortMessage|textAutoCorrect|textMultiLine"
+ android:imeOptions="actionSend" android:cursorVisible="true"
+ android:hint="@string/chat_input_default_value" />
+ <Button android:id="@+id/chat_send_message"
+ android:layout_width="wrap_content" android:layout_height="fill_parent"
+ android:text="@string/chat_send_message" />
+ </LinearLayout>
+</LinearLayout>
--- a/res/layout/preferences.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/layout/preferences.xml Fri Apr 15 03:01:09 2011 +0200
@@ -24,14 +24,30 @@
android:title="@string/away_message_title" android:key="settings_away_message"
android:hint="@string/away_message_hint" />
</PreferenceScreen>
+ <PreferenceScreen android:key="chat"
+ android:title="@string/chat_preferences" android:summary="@string/chat_preferences_sum">
+ <PreferenceCategory android:title="@string/history_preferences">
+ <CheckBoxPreference android:id="@+id/chat_history"
+ android:title="@string/history" android:summary="@string/history_sum"
+ android:defaultValue="false" android:key="settings_key_history" />
+ <EditTextPreference android:dependency="settings_key_history"
+ android:singleLine="true" android:title="@string/chat_history_path"
+ android:summary="@string/chat_history_path_sum" android:key="settings_chat_history_path"
+ android:hint="/Android/data/com.beem.project.beem/chat/" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/chat_layout_option">
+ <CheckBoxPreference android:title="@string/settings_chat_compact"
+ android:defaultValue="false" android:summary="@string/settings_chat_compact_sum"
+ android:key="settings_chat_compact_key" />
+ </PreferenceCategory>
+ </PreferenceScreen>
<PreferenceScreen android:title="@string/notification_preferences">
<CheckBoxPreference android:title="@string/notification_enable_vibrate_title"
android:defaultValue="false" android:summary="@string/notification_enable_vibrate_sum"
android:key="notification_vibrate" />
- <RingtonePreference
- android:title="@string/notification_snd_title" android:key="notification_sound"
- android:summary="@string/notification_snd_sum" android:ringtoneType="notification"
- android:showDefault="true" />
+ <RingtonePreference android:title="@string/notification_snd_title"
+ android:key="notification_sound" android:summary="@string/notification_snd_sum"
+ android:ringtoneType="notification" android:showDefault="true" />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="@string/user_preferences">
@@ -70,7 +86,8 @@
<EditTextPreference android:singleLine="true"
android:dependency="proxy_use" android:name="port"
android:summary="@string/SettingsProxyPort" android:title="@string/settings_proxy_port"
- android:key="proxy_port" android:numeric="signed" android:hint="@string/comments_proxy_port" />
+ android:key="proxy_port" android:numeric="signed"
+ android:hint="@string/comments_proxy_port" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/proxy_user_settings">
<EditTextPreference android:singleLine="true"
@@ -83,11 +100,14 @@
android:title="@string/settings_proxy_password" android:key="proxy_password" />
</PreferenceCategory>
</PreferenceScreen>
+
<PreferenceScreen android:key="advanced"
android:title="@string/SettingsAdvanced" android:summary="@string/settings_advanced_sum">
<PreferenceCategory android:title="@string/settings_advanced_service_behaviour">
<CheckBoxPreference android:title="@string/settings_xmpp_use_tls"
android:defaultValue="false" android:key="settings_key_xmpp_tls_use" />
+ <CheckBoxPreference android:title="@string/settings_smack_debug"
+ android:defaultValue="false" android:key="smack_debug" />
<EditTextPreference android:singleLine="true"
android:title="@string/settings_reco_delay" android:name="Reconnect delay"
android:summary="@string/SettingsAdvancedRecoDelay" android:key="settings_key_reco_delay"
@@ -105,6 +125,9 @@
android:summary="@string/SettingsAdvancedPortOpt" android:title="@string/settings_xmpp_port"
android:defaultValue="5222" android:numeric="signed" android:key="settings_key_xmpp_port"
android:hint="@string/comments_xmpp_port" />
+ <CheckBoxPreference android:title="@string/settings_full_jid_login"
+ android:defaultValue="false" android:summary="@string/settings_full_jid_login_sum"
+ android:key="full_jid_login" />
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
--- a/res/values-de/strings.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values-de/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -1,298 +1,317 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <!-- Generic terms -->
- <string name="app_name">Beem</string>
- <string name="OkButton">Ok</string>
- <string name="ClearButton">Löschen</string>
- <string name="CancelButton">Abbrechen</string>
- <string name="AcceptButton">Authorisieren</string>
- <string name="RefuseButton">Ablehnen</string>
- <string name="Password">Passwort</string>
-
- <!-- Beem class -->
- <string name="BeemJabberID">Jabber ID</string>
+<!-- Generic terms -->
+<string name="app_name">Beem</string>
+<string name="OkButton">Ok</string>
+<string name="ClearButton">Löschen</string>
+<string name="CancelButton">Abbrechen</string>
+<string name="AcceptButton">Authorisieren</string>
+<string name="RefuseButton">Ablehnen</string>
+<string name="JabberID">Jabber ID</string>
+<string name="Password">Passwort</string>
+<string name="Continue">Fortfahren</string>
- <!-- BeemApplication class -->
- <string name="BeemApplicationConnect">Verbinden...</string>
+<!-- AccountConfigure class -->
+<string name="AccountConfigureManualConfiguration">Manuelle Konfiguration</string>
+
+<!-- Beem class -->
+<string name="BeemJabberID">Jabber ID</string>
- <!-- BeemService class -->
- <string name="BeemServiceDescription">Benutze Beem Service</string>
- <string name="BeemServiceCreated">Beem Service erstellt</string>
- <string name="BeemServiceDestroyed">Beem Service verworfen</string>
+<!-- BeemApplication class -->
+<string name="BeemApplicationConnect">Verbinden...</string>
- <!-- ContactDialog class -->
- <string name="CDChat">Chatten</string>
- <string name="CDCall">Anrufen</string>
- <string name="CDInfos">Kontakt bearbeiten</string>
+<!-- BeemService class -->
+<string name="BeemServiceDescription">Benutze Beem Service</string>
+<string name="BeemServiceCreated">Beem Service erstellt</string>
+<string name="BeemServiceDestroyed">Beem Service verworfen</string>
- <!-- AddContact class -->
- <string name="AddCActTitle">Beem - Kontakt hinzufügen</string>
+<!-- ContactDialog class -->
+<string name="CDChat">Chatten</string>
+<string name="CDCall">Anrufen</string>
+<string name="CDInfos">Kontakt bearbeiten</string>
- <string name="AddCLogin">Benutzername</string>
- <string name="AddCAlias">Alias</string>
- <string name="AddCGroup">Gruppe</string>
- <string name="AddCOkButton">Hinzufügen</string>
- <string name="AddCContactAdded">Kontakt hinzugefügt</string>
- <string name="AddCContactAddedError">Fehler, Benutzer nicht hinzugefügt</string>
- <string name="AddCContactAddedLoginError">Fehler bei der Anmeldung</string>
- <string name="AddCBadForm">Mangelhafte Form</string>
- <string name="AddCContactAlready">Kontakt existiert bereits</string>
+<!-- AddContact class -->
+<string name="AddCActTitle">Beem - Kontakt hinzufügen</string>
- <!-- ChangeStatus class -->
- <string name="ChangeStatusActTitle">Beem - Meinen Status ändern</string>
- <string name="ChangeStatusType">Mein Status</string>
- <string name="ChangeStatusMessage">Meine persönliche Nachricht</string>
- <string name="OpenContactList">Kontaktliste öffnen</string>
+<string name="AddCLogin">Benutzername</string>
+<string name="AddCAlias">Alias</string>
+<string name="AddCGroup">Gruppe</string>
+<string name="AddCOkButton">Hinzufügen</string>
+<string name="AddCContactAdded">Kontakt hinzugefügt</string>
+<string name="AddCContactAddedError">Fehler, Benutzer nicht hinzugefügt</string>
+<string name="AddCContactAddedLoginError">Fehler bei der Anmeldung</string>
+<string name="AddCBadForm">Mangelhafte Form</string>
+<string name="AddCContactAlready">Kontakt existiert bereits</string>
- <string name="MenuAddContact">Kontakt hinzufügen</string>
- <string name="MenuAccountAbout">Beem Project</string>
- <string name="MenuAccountCreate">Konto erstellen</string>
- <string name="MenuConnection">Konto bearbeiten</string>
- <string name="ChangeStatusOk">Aktualisiere Status</string>
- <string name="ChangeStatusNoChange">Nichts zu ändern</string>
+<!-- ChangeStatus class -->
+<string name="ChangeStatusActTitle">Beem - Meinen Status ändern</string>
+<string name="ChangeStatusType">Mein Status</string>
+<string name="ChangeStatusMessage">Meine persönliche Nachricht</string>
+<string name="OpenContactList">Kontaktliste öffnen</string>
+
+<string name="MenuAddContact">Kontakt hinzufügen</string>
+<string name="MenuAccountAbout">Beem Project</string>
+<string name="MenuAccountCreate">Konto erstellen</string>
+<string name="MenuConnection">Konto bearbeiten</string>
+<string name="ChangeStatusOk">Aktualisiere Status</string>
+<string name="ChangeStatusNoChange">Nichts zu ändern</string>
- <!-- Settings class -->
- <string name="SettingsText">Benutzername bearbeiten</string>
- <string name="SettingsPassword">Passwort bearbeiten</string>
- <string name="SettingsProxy">Proxy</string>
- <string name="SettingsProxyProxy">Benutze einen Proxyserver</string>
- <string name="SettingsProxySummary">Anmeldung über einen Proxyserver</string>
- <string name="SettingsProxyType">Protokoll</string>
- <string name="SettingsProxyTypeSummary">Art des Proxyservers wählen</string>
- <string name="SettingsProxyServer">Adresse des Proxyservers bearbeiten</string>
- <string name="SettingsProxyPort">Port des Proxyservers bearbeiten</string>
- <string name="SettingsProxyUser">Optional, erlaubt das Authentifizieren mit dem Proxyserver</string>
- <string name="SettingsProxyPassword">Optional, erlaubt das Authentifizieren mit dem Proxyserver</string>
- <string name="SettingsAdvanced">Erweitert</string>
- <string name="SettingsAdvancedOptions">Spezifische Server Optionen</string>
- <string name="SettingsAdvancedRecoDelay">Bearbeite die Verzögerung bei der Wiederverbindung</string>
- <string name="SettingsAdvancedSpecOpt">Aktivieren, um einen spezifischen Server für die Verbindung zu benutzen</string>
- <string name="SettingsAdvancedAddOpt">Adresse des Servers bearbeiten</string>
- <string name="SettingsAdvancedPortOpt">Port des Servers bearbeiten</string>
- <string name="SettingsResourceTitle">Ressource</string>
- <string name="SettingsPriorityTitle">Priorität</string>
- <string name="SettingsResourceSummary">XMPP Ressource des Clients einstellen</string>
- <string name="SettingsPrioritySummary">Priorität des Clients einstellen</string>
- <string name="contact_list_preferences">Kontaktliste</string>
- <string name="contact_list_preferences_sum">Anzeigeoptionen der Kontaktliste</string>
- <string name="CLP_hide_groups">Gruppen verstecken</string>
- <string name="CLP_hide_groups_sum">Aktivieren, um Gruppen zu verstecken</string>
- <string name="CLP_hidden_contact">Kontakte verstecken</string>
- <string name="CLP_hidden_contact_sum">Aktivieren, um Kontakte zu verstecken, die offline sind</string>
- <string name="settings_account_username">Benutzername</string>
- <string name="login_username_info_default">beem@beem-project.com</string>
- <string name="settings_account_password">Passwort</string>
- <string name="settings_account_server">Server</string>
- <string name="settings_account_port">Port</string>
- <string name="settings_advanced_service_behaviour">Verhalten des Dienstes</string>
- <string name="settings_advanced_sum">Erweiterte Einstellungen für fortgeschrittene Benutzer</string>
- <string name="settings_xmpp_server">Adresse</string>
- <string name="comments_xmpp_server">example.com</string>
- <string name="settings_xmpp_port">Port</string>
- <string name="settings_xmpp_use_tls">Verwende SSL/TLS</string>
- <string name="settings_reco_delay">Verzögerung bei der Wiederverbindung</string>
- <string name="comments_xmpp_port">Standard: 5222</string>
- <string name="settings_proxy_sum">Einstellungen für das Benutzen eines Proxyservers</string>
- <string name="settings_proxy_use">Benutze einen Proxyserver</string>
- <string name="settings_proxy_type_prompt">Art des Proxyservers wählen</string>
- <string name="settings_proxy_server">Server</string>
- <string name="settings_proxy_port">Port</string>
- <string name="comments_proxy_port">Standard: 1080</string>
- <string name="settings_proxy_username">Benutzername</string>
- <string name="settings_proxy_password">Passwort</string>
- <string name="away_chk_title">Aktiviere automatische Abwesenheit</string>
- <string name="away_chk_sum">Status auf Abwesend wenn Bildschirm ausgeschaltet ist</string>
- <string name="away_message_title">Abwesenheitsnachricht</string>
- <string name="away_message_sum">Angezeigte Abwesenheitsnachricht</string>
- <string name="away_message_hint">Ich bin abwesend, mein Telefonbildschirm ist ausgeschaltet</string>
- <string name="notification_preferences">Benachrichtigungseinstellungen</string>
- <string name="notification_enable_vibrate_title">Vibrieren</string>
- <string name="notification_enable_vibrate_sum">Vibriere bei eingehenden Nachrichten</string>
- <string name="notification_snd_title">Nachrichtensignalton</string>
- <string name="notification_snd_sum">Lege den Signalton für eingehende Nachrichten fest</string>
-
+<!-- Settings class -->
+<string name="SettingsText">Benutzername bearbeiten</string>
+<string name="SettingsPassword">Passwort bearbeiten</string>
+<string name="SettingsProxy">Proxy</string>
+<string name="SettingsProxyProxy">Benutze einen Proxyserver</string>
+<string name="SettingsProxySummary">Anmeldung über einen Proxyserver</string>
+<string name="SettingsProxyType">Protokoll</string>
+<string name="SettingsProxyTypeSummary">Art des Proxyservers wählen</string>
+<string name="SettingsProxyServer">Adresse des Proxyservers bearbeiten</string>
+<string name="SettingsProxyPort">Port des Proxyservers bearbeiten</string>
+<string name="SettingsProxyUser">Optional, erlaubt das Authentifizieren mit dem Proxyserver</string>
+<string name="SettingsProxyPassword">Optional, erlaubt das Authentifizieren mit dem Proxyserver</string>
+<string name="SettingsAdvanced">Erweitert</string>
+<string name="SettingsAdvancedOptions">Spezifische Server Optionen</string>
+<string name="SettingsAdvancedRecoDelay">Bearbeite die Verzögerung bei der Wiederverbindung</string>
+<string name="SettingsAdvancedSpecOpt">Aktivieren, um einen spezifischen Server für die Verbindung zu benutzen</string>
+<string name="SettingsAdvancedAddOpt">Adresse des Servers bearbeiten</string>
+<string name="SettingsAdvancedPortOpt">Port des Servers bearbeiten</string>
+<string name="SettingsResourceTitle">Ressource</string>
+<string name="SettingsPriorityTitle">Priorität</string>
+<string name="SettingsResourceSummary">XMPP Ressource des Clients einstellen</string>
+<string name="SettingsPrioritySummary">Priorität des Clients einstellen</string>
+<string name="contact_list_preferences">Kontaktliste</string>
+<string name="contact_list_preferences_sum">A set of display options for your buddy list
+</string>
+<string name="CLP_hide_groups">Gruppen ausblenden</string>
+<string name="CLP_hide_groups_sum">Aktivieren, um Gruppen auszublenden</string>
+<string name="CLP_hidden_contact">Kontakte ausblenden</string>
+<string name="CLP_hidden_contact_sum">Check this option to hide unconnected buddies
+</string>
+<string name="settings_account_username">Benutzername (JID)</string>
+<string name="login_username_info_default">beem@beem-project.com</string>
+<string name="settings_account_password">Passwort</string>
+<string name="settings_account_server">Server</string>
+<string name="settings_account_port">Port</string>
+<string name="settings_advanced_service_behaviour">Verhalten des Dienstes</string>
+<string name="settings_advanced_sum">Erweiterte Einstellungen für fortgeschrittene Benutzer</string>
+<string name="settings_xmpp_server">Adresse</string>
+<string name="comments_xmpp_server">example.com</string>
+<string name="settings_xmpp_port">Port</string>
+<string name="settings_xmpp_use_tls">Verwende SSL/TLS</string>
+<string name="settings_reco_delay">Verzögerung bei der Wiederverbindung</string>
+<string name="comments_xmpp_port">Standard: 5222</string>
+<string name="settings_proxy_sum">Einstellungen für das Benutzen eines Proxyservers</string>
+<string name="settings_proxy_use">Benutze einen Proxyserver</string>
+<string name="settings_proxy_type_prompt">Art des Proxyservers wählen</string>
+<string name="settings_proxy_server">Server</string>
+<string name="settings_proxy_port">Port</string>
+<string name="comments_proxy_port">Standard: 1080</string>
+<string name="settings_proxy_username">Benutzername</string>
+<string name="settings_proxy_password">Passwort</string>
+<string name="away_chk_title">Aktiviere automatische Abwesenheit</string>
+<string name="away_chk_sum">Status auf Abwesend wenn Bildschirm aus</string>
+<string name="away_message_title">Abwesenheitsnachricht</string>
+<string name="away_message_sum">Angezeigte Abwesenheitsnachricht</string>
+<string name="away_message_hint">Ich bin abwesend, mein Telefonbildschirm ist aus</string>
+<string name="notification_preferences">Benachrichtigungseinstellungen</string>
+<string name="notification_enable_vibrate_title">Aktiviere Vibration</string>
+<string name="notification_enable_vibrate_sum">Aktiviere Vibration für eingehende Nachrichten</string>
+<string name="notification_snd_title">Nachrichtensignalton</string>
+<string name="notification_snd_sum">Lege den Signalton für eingehende Nachrichten fest</string>
+<string name="settings_chat_compact">Kompakter Chat</string>
+<string name="settings_chat_compact_sum">Benutze kompakte Chatfenster</string>
+<string name="history">Chronik</string>
+<string name="history_mount">Die Speicherkarte muss eingehängt und beschreibbar sein, um die Chronik zu aktivieren</string>
+<string name="history_on_off">Aktiviere Nachrichtenchronik</string>
+<string name="settings_smack_debug">Aktiviere XMPP Debug Modus</string>
+<string name="settings_full_jid_login">Benutze meine vollständige JID als Benutzername</string>
+<string name="settings_full_jid_login_sum">Wird von einigen Servern, z.b. Google Talk, vorausgesetzt</string>
- <!-- Subscription class -->
- <string name="SubscriptAccept">Zustimmung angenommen</string>
- <string name="SubscriptError">Zustimmungsfehler</string>
- <string name="SubscriptRefused">Zustimmung abgelehnt</string>
- <string name="SubscriptText">%s will dich zu seiner/ihrer Kontaktliste hinzufügen. Willst du ihn/sie authorisieren ?</string>
- <string name="SubscriptTitle">Kontakt authorisieren ?</string>
+<!-- Subscription class -->
+<string name="SubscriptAccept">Zustimmung angenommen</string>
+<string name="SubscriptError">Zustimmungsfehler</string>
+<string name="SubscriptRefused">Zustimmung abgelehnt</string>
+<string name="SubscriptText">%s will dich zu seiner/ihrer Kontaktliste hinzufügen. Willst du ihn/sie authorisieren?</string>
+<string name="SubscriptTitle">Kontakt authorisieren?</string>
- <!-- BeemChatManager -->
- <string name="BeemChatManagerNewMessage">Du hast eine neue Nachricht</string>
+<!-- BeemChatManager -->
+<string name="BeemChatManagerNewMessage">Du hast eine neue Nachricht</string>
- <!-- BeemBroadcastReceiver class -->
- <string name="BeemBroadcastReceiverDisconnect">BEEM: Die Verbindung wurde getrennt</string>
+<!-- BeemBroadcastReceiver class -->
+<string name="BeemBroadcastReceiverDisconnect">BEEM: Die Verbindung wurde getrennt</string>
- <!-- XmppConnectionAdapter class -->
- <string name="AcceptContactRequest">%s hat dich gerade zu seiner/ihrer Kontaktliste hinzugefügt.</string>
- <string name="AcceptContactRequestFrom">Authorisiere %s dich zu kontaktieren.</string>
+<!-- XmppConnectionAdapter class -->
+<string name="AcceptContactRequest">%s hat dich gerade zu seiner/ihrer Kontaktliste hinzugefügt.</string>
+<string name="AcceptContactRequestFrom">Authorisiere %s dich zu kontaktieren.</string>
- <!-- Activities -->
- <string name="login_tag">Beem - Anmeldung</string>
- <string name="edit_settings_name">Beem - Einstellungen</string>
- <string name="edit_settings_tag">Beem - Einstellungen bearbeiten</string>
- <string name="create_account_name">Beem - Konto erstellen</string>
- <string name="create_account_tag">Beem - Konto erstellen</string>
- <string name="contact_list_name">Beem - Kontakte</string>
- <string name="contact_list_tag">Beem - Kontaktliste</string>
- <string name="user_info_name">Beem - Benutzerinformation</string>
+<!-- Activities -->
+<string name="login_tag">Beem - Anmeldung</string>
+<string name="edit_settings_name">Beem - Einstellungen</string>
+<string name="edit_settings_tag">Beem - Einstellungen bearbeiten</string>
+<string name="create_account_name">Beem - Konto erstellen</string>
+<string name="create_account_tag">Beem - Konto erstellen</string>
+<string name="contact_list_name">Beem - Kontakte</string>
+<string name="contact_list_tag">Beem - Kontaktliste</string>
+<string name="user_info_name">Beem - Benutzerinformation</string>
+
+<!-- Buttons -->
+<string name="button_create_account">Dieses Konto erstellen</string>
+<string name="button_create_login_account">Dieses Konto erstellen und benutzen</string>
- <!-- Buttons -->
- <string name="button_create_account">Dieses Konto erstellen</string>
- <string name="button_create_login_account">Dieses Konto erstellen und benutzen</string>
+<!-- LogAs Activity -->
+<string name="login_username">Benutzername</string>
+<string name="login_password">Passwort</string>
+<string name="login_error_dialog_title">Anmeldung - Fehler</string>
+<string name="login_close_dialog_button">Schließen</string>
+<string name="login_menu_create_account">Konto erstellen</string>
+<string name="login_menu_settings">Einstellungen</string>
+<string name="login_menu_about">Über</string>
+<string name="login_about_title">Beem %s - Über</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_button">Schließen</string>
+<string name="login_settings_button">Einstellungen</string>
+<string name="login_login_button">Anmelden</string>
+<string name="login_login_progress">Verbinden. Bitte warten...</string>
+<string name="login_error_msg">Unfortunately, an error occured.\n\nError
+detail:\n%s</string>
+<string name="login_menu_login">Anmelden</string>
+<string name="login_no_connectivity">Keine Internetverbindung gefunden</string>
+<string name="login_start_msg">Konfiguration der Einstellungen im Menü</string>
- <!-- LogAs Activity -->
- <string name="login_username">Benutzername</string>
- <string name="login_password">Passwort</string>
- <string name="login_error_dialog_title">Anmeldung - Fehler</string>
- <string name="login_close_dialog_button">Schließen</string>
- <string name="login_menu_create_account">Konto erstellen</string>
- <string name="login_menu_settings">Einstellungen</string>
- <string name="login_menu_about">Über</string>
- <string name="login_about_title">Beem %s - Über</string>
- <string name="login_about_msg">Beem ist ein EPITECH Innovative Project. Besuche uns auf http://www.beem-project.com !</string>
- <string name="login_about_button">Schließen</string>
- <string name="login_settings_button">Einstellungen</string>
- <string name="login_login_button">Anmelden</string>
- <string name="login_login_progress">Verbinden. Bitte warten...</string>
- <string name="login_error_msg">Leider trat ein Fehler auf.\n\nFehler Detail:\n%s</string>
- <string name="login_menu_login">Anmelden</string>
- <string name="login_no_connectivity">Keine Internetverbindung gefunden</string>
- <string name="login_start_msg">Konfiguration der Einstellungen im Menü</string>
+<!-- LoginAnim activity -->
+<string name="loganim_connecting">Verbinden...</string>
+<string name="loganim_authenticating">Authentifizieren...</string>
+<string name="loganim_login_success">Erfolgreich angemeldet</string>
+<string name="loganim_login_failed">Anmeldung gescheitert</string>
- <!-- LoginAnim activity -->
- <string name="loganim_connecting">Verbinden ...</string>
- <string name="loganim_authenticating">Authentifizieren ...</string>
- <string name="loganim_login_success">Erfolgreich angemeldet</string>
- <string name="loganim_login_failed">Anmeldung gescheitert</string>
-
- <!-- EditSettings Activity -->
- <string name="settings_menu_create_account">Konto erstellen</string>
- <string name="settings_menu_privacy_lists">Meine Privatsphärenliste verwalten</string>
- <string name="settings_saved_ok">Die Einstellungen wurden erfolgreich gespeichert.</string>
+<!-- EditSettings Activity -->
+<string name="settings_menu_create_account">Konto erstellen</string>
+<string name="settings_menu_privacy_lists">Meine Privatsphärenliste verwalten</string>
+<string name="settings_saved_ok">Die Einstellungen wurden erfolgreich gespeichert.</string>
- <!-- EditSettings Activity Categories -->
- <string name="general_preferences">Allgemeine Einstellungen</string>
- <string name="user_preferences">Benutzereinstellungen (notwendig)</string>
- <string name="user_preferences_advanced">Zusätzliche Benutzereinstellungen (optional)</string>
- <string name="network_preferences">Netzwerk Einstellungen</string>
- <string name="proxy_proxy_settings">Proxy Einstellungen</string>
- <string name="proxy_user_settings">Proxy Einstellungen</string>
+<!-- EditSettings Activity Categories -->
+<string name="general_preferences">Allgemeine Einstellungen</string>
+<string name="user_preferences">Benutzereinstellungen (notwendig)</string>
+<string name="user_preferences_advanced">Zusätzliche Benutzereinstellungen (optional)</string>
+<string name="network_preferences">Netzwerk Einstellungen</string>
+<string name="proxy_proxy_settings">Proxy Einstellungen</string>
+<string name="proxy_user_settings">Proxy Einstellungen</string>
- <!-- EditSettings Activity Tabs -->
- <string name="settings_tab_tag_account">edit_settings_tab_account</string>
- <string name="settings_tab_label_account">Konto</string>
- <string name="settings_tab_tag_xmpp">edit_settings_tab_xmpp</string>
- <string name="settings_tab_label_xmpp">XMPP</string>
- <string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
- <string name="settings_tab_label_proxy">Proxy</string>
+<!-- EditSettings Activity Tabs -->
+<string name="settings_tab_tag_account">edit_settings_tab_account</string>
+<string name="settings_tab_label_account">Konto</string>
+<string name="settings_tab_tag_xmpp">edit_settings_tab_xmpp</string>
+<string name="settings_tab_label_xmpp">XMPP</string>
+<string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
+<string name="settings_tab_label_proxy">Proxy</string>
- <!-- wizard activities -->
- <string name="account_wizard_text1"><b>Willkommen bei BEEM.</b>\n\nDu hast noch kein XMPPP (Jabber) Konto konfiguriert.\nWähle eine der folgenden Optionen :</string>
- <string name="account_wizard_configure_text"><b>Bitte gib die Daten deines bestehenden Kontos ein</b></string>
- <string name="account_wizard_configure_account">Ich habe bereits ein Konto, das ich benutzen möchte</string>
- <string name="account_wizard_create_account">Ich möchte ein neues Konto registrieren</string>
+<!-- wizard activities -->
+<string name="account_wizard_text1"><b>Willkommen bei BEEM.</b>\n\nDu hast noch kein XMPP (Jabber) Konto konfiguriert. Wähle eine der folgenden Optionen:</string>
+<string name="account_wizard_configure_text"><b>Bitte trage die Zugangsdaten für dein vorhandenes Konto ein</b></string>
+<string name="account_wizard_configure_account">Ich habe bereits ein Konto, das ich benutzen will</string>
+<string name="account_wizard_create_account">Ich möchte ein neues Konto registrieren</string>
- <!-- Create an account Activity -->
- <string name="create_account_instr_dialog_title">Konto erstellen - Anweisungen</string>
- <string name="create_account_err_dialog_title">Konto erstellen - Fehler</string>
- <string name="create_account_err_dialog_settings_button">Einstellungen ändern</string>
- <string name="create_account_close_dialog_button">Schließen</string>
- <string name="create_account_successfull_after">Das Konto %s wurde erfolgreich erstellt</string>
- <string name="create_account_err_username">Mangelhafte Jabber ID</string>
- <string name="create_account_err_passwords">Passwörter stimmen nicht überein.</string>
- <string name="create_account_username">Benutzername</string>
- <string name="create_account_password">Passwort</string>
- <string name="create_account_confirm_password">Passwort bestätigen</string>
+<!-- Create an account Activity -->
+<string name="create_account_instr_dialog_title">Konto erstellen - Anweisungen</string>
+<string name="create_account_err_dialog_title">Konto erstellen - Fehler</string>
+<string name="create_account_err_dialog_settings_button">Einstellungen ändern</string>
+<string name="create_account_close_dialog_button">Schließen</string>
+<string name="create_account_successfull_after">Das Konto %s wurde erfolgreich erstellt</string>
+<string name="create_account_err_username">Mangelhafte Jabber ID</string>
+<string name="create_account_err_passwords">Passwörter stimmen nicht überein.</string>
+<string name="create_account_username">Benutzername</string>
+<string name="create_account_password">Passwort</string>
+<string name="create_account_confirm_password">Passwort bestätigen</string>
- <!-- ContactList Activity -->
- <string name="contact_list_menu_add_contact">Kontakt hinzufügen</string>
- <string name="contact_list_menu_status">Status ändern</string>
- <string name="contact_list_menu_settings">Einstellungen</string>
- <string name="contact_list_menu_disconnect">Verbindung trennen</string>
- <string name="contact_list_all_contact">Alle Kontakte</string>
- <string name="contact_list_no_group">Keine Gruppe</string>
+<!-- ContactList Activity -->
+<string name="contact_list_menu_add_contact">Kontakt hinzufügen</string>
+<string name="contact_list_menu_status">Status ändern</string>
+<string name="contact_list_menu_settings">Einstellungen</string>
+<string name="contact_list_menu_disconnect">Verbindung trennen</string>
+<string name="contact_list_all_contact">Alle Kontakte</string>
+<string name="contact_list_no_group">Keine Gruppe</string>
- <!-- UserInfo dialog -->
- <string name="userinfo_label_alias">Alias</string>
- <string name="userinfo_label_chg_group">Gruppen verwalten</string>
- <string name="userinfo_label_re_subscription">Einladung erneut senden</string>
- <string name="userinfo_label_block">Blockieren</string>
- <string name="userinfo_label_delete">Löschen</string>
- <string name="userinfo_resend">Zustimmung erneut senden</string>
- <string name="userinfo_sure2delete">Bist du sicher, dass du diesen Kontakt löschen willst ?</string>
- <string name="userinfo_yes">Ja</string>
- <string name="userinfo_no">Nein</string>
- <string name="userinfo_sureresend">Bist du sicher, dass du die Einladung erneut senden willst ?</string>
+<!-- UserInfo dialog -->
+<string name="userinfo_label_alias">Alias</string>
+<string name="userinfo_label_chg_group">Gruppen verwalten</string>
+<string name="userinfo_label_re_subscription">Einladung erneut senden</string>
+<string name="userinfo_label_block">Sperren</string>
+<string name="userinfo_label_delete">Löschen</string>
+<string name="userinfo_resend">Zustimmung erneut senden</string>
+<string name="userinfo_sure2delete">Are you sure you want to delete this contact?
+</string>
+<string name="userinfo_yes">Ja</string>
+<string name="userinfo_no">Nein</string>
+<string name="userinfo_sureresend">Bist du sicher, dass du die Einladung erneut senden willst?</string>
- <string name="chat_name">Beem - Chat</string>
- <string name="chat_input_default_value">Nachricht eingeben</string>
- <string name="chat_self">Ich</string>
- <string name="chat_error">Fehler</string>
- <string name="chat_send_message">Senden</string>
- <string name="chat_menu_contacts_list">Kontaktliste</string>
- <string name="chat_menu_change_chat">Chat wechseln</string>
- <string name="chat_dialog_change_chat_title">Offene Chats</string>
- <string name="chat_menu_close_chat">Diesen Chat schließen</string>
- <string name="chat_no_more_chats">Keine weiteren aktiven Chats</string>
- <string name="chat_state_composing">schreibt gerade</string>
- <string name="chat_state_gone">hat die Unterhaltung verlassen</string>
- <string name="chat_state_active">verfolgt die Unterhaltung</string>
- <string name="chat_state_inactive">macht etwas anderes</string>
+<string name="chat_name">Beem - Chat</string>
+<string name="chat_input_default_value">Nachricht eingeben</string>
+<string name="chat_self">Ich</string>
+<string name="chat_error">Fehler</string>
+<string name="chat_send_message">Senden</string>
+<string name="chat_menu_contacts_list">Kontaktliste</string>
+<string name="chat_menu_change_chat">Chat wechseln</string>
+<string name="chat_dialog_change_chat_title">Offene Chats</string>
+<string name="chat_menu_close_chat">Diesen Chat schließen</string>
+<string name="chat_no_more_chats">Keine weiteren aktiven Chats</string>
+<string name="chat_state_composing">schreibt gerade</string>
+<string name="chat_state_gone">hat die Unterhaltung verlassen</string>
+<string name="chat_state_active">verfolgt die Unterhaltung</string>
+<string name="chat_state_inactive">macht etwas anderes</string>
- <string name="contact_status_msg_available">Online</string>
- <string name="contact_status_msg_available_chat">Bereit zum Chatten</string>
- <string name="contact_status_msg_dnd">Beschäftigt</string>
- <string name="contact_status_msg_away">Abwesend</string>
- <string name="contact_status_msg_xa">N/A</string>
- <string name="contact_status_msg_offline">Offline</string>
+<string name="contact_status_msg_available">Online</string>
+<string name="contact_status_msg_available_chat">Bereit zum Chatten</string>
+<string name="contact_status_msg_dnd">Beschäftigt</string>
+<string name="contact_status_msg_away">Abwesend</string>
+<string name="contact_status_msg_xa">N/A</string>
+<string name="contact_status_msg_offline">Offline</string>
- <string name="privacy_list_name">Beem - Meine Privatsphärenliste verwalten</string>
- <string name="privacy_list_no_data">Keine Privatsphärenliste vorhanden.</string>
- <string name="privacy_list_menu_create">Privatsphärenliste erstellen</string>
- <string name="privacy_list_create_dialog_title">Privatsphärenliste erstellen</string>
- <string name="privacy_list_create_dialog_list_name_label">Titel</string>
- <string name="privacy_list_create_dialog_create_button">Erstellen</string>
- <string name="privacy_list_select_dialog_buddies">Kontakte</string>
- <string name="privacy_list_select_dialog_groups">Gruppen</string>
- <string name="privacy_list_select_dialog_delete">Löschen</string>
- <string name="privacy_list_delete_dialog_msg">Bist du sicher, dass du die Privatsphärenliste mit dem Titel \'%s\' löschen willst ?</string>
- <string name="privacy_list_delete_dialog_yes">Ja</string>
- <string name="privacy_list_delete_dialog_no">Nein</string>
+<string name="privacy_list_name">Beem - Meine Privatsphärenliste verwalten</string>
+<string name="privacy_list_no_data">Keine Privatsphärenliste vorhanden.</string>
+<string name="privacy_list_menu_create">Privatsphärenliste erstellen</string>
+<string name="privacy_list_create_dialog_title">Privatsphärenliste erstellen</string>
+<string name="privacy_list_create_dialog_list_name_label">Titel</string>
+<string name="privacy_list_create_dialog_create_button">Erstellen</string>
+<string name="privacy_list_select_dialog_buddies">Kontakte</string>
+<string name="privacy_list_select_dialog_groups">Gruppen</string>
+<string name="privacy_list_select_dialog_delete">Löschen</string>
+<string name="privacy_list_delete_dialog_msg">Bist du sicher, dass du die Privatsphärenliste mit dem Titel \'%s\' löschen willst?</string>
+<string name="privacy_list_delete_dialog_yes">Ja</string>
+<string name="privacy_list_delete_dialog_no">Nein</string>
- <string name="UpdateButton">Aktualisierung</string>
+<string name="UpdateButton">Aktualisieren</string>
- <!-- Error messages -->
+<!-- Error messages -->
- <string name="error_login_authentication">Ein Fehler ist während der Authentifizierung aufgetreten: mangelhafter Benutzer oder Passwort.</string>
+<string name="error_login_authentication">Ein Fehler ist während der Authentifizierung aufgetreten: mangelhafter Benutzername oder Passwort.</string>
- <string name="interna_server_error">Remoteserver Fehler</string>
- <string name="bad_request">Mangelhafte Anfrage</string>
- <string name="forbidden">Verboten</string>
- <string name="item_not_found">Eintrag nicht gefunden</string>
- <string name="conflict">Konflikt</string>
- <string name="feature_not_implemented">Feature nicht vorhanden</string>
- <string name="gone">verloren</string>
- <string name="jid_malformed">JID mangelhaft</string>
- <string name="no_acceptable">nicht akzeptabel</string>
- <string name="not_allowed">nicht erlaubt</string>
- <string name="not_authorized">nicht authorisiert</string>
- <string name="payment_required">Bezahlung erforderlich</string>
- <string name="recipient_unavailable">Empfänger unerreichbar</string>
- <string name="redirect">weiterleiten</string>
- <string name="registration_required">Anmeldung wird benötigt</string>
- <string name="remote_server_not_found">Remoteserver nicht gefunden</string>
- <string name="remote_server_timeout">Keine Antwort vom Server</string>
- <string name="remote_server_error">Remoteserver Fehler</string>
- <string name="resource_constraint">Ressourceneinschränkung</string>
- <string name="service_unavailable">Dienst unerreichbar</string>
- <string name="subscription_required">Zustimmung wird benötigt</string>
- <string name="undefined_condition">Undefinierte Bedingung</string>
- <string name="unexpected_condition">Unerwartete Bedingung</string>
- <string name="request_timeout">Zeitüberschreitung bei der Anfrage</string>
+<string name="interna_server_error">Remoteserver Fehler</string>
+<string name="bad_request">Mangelhafte Anfrage</string>
+<string name="forbidden">Verboten</string>
+<string name="item_not_found">Eintrag nicht gefunden</string>
+<string name="conflict">Konflikt</string>
+<string name="feature_not_implemented">Feature nicht vorhanden</string>
+<string name="gone">verloren</string>
+<string name="jid_malformed">JID mangelhaft</string>
+<string name="no_acceptable">nicht akzeptabel</string>
+<string name="not_allowed">nicht erlaubt</string>
+<string name="not_authorized">nicht authorisiert</string>
+<string name="payment_required">Bezahlung erforderlich</string>
+<string name="recipient_unavailable">Empfänger unerreichbar</string>
+<string name="redirect">weiterleiten</string>
+<string name="registration_required">Anmeldung wird benötigt</string>
+<string name="remote_server_not_found">Remoteserver nicht gefunden</string>
+<string name="remote_server_timeout">Keine Antwort vom Server</string>
+<string name="remote_server_error">Remoteserver Fehler</string>
+<string name="resource_constraint">Ressourcen Einschränkung</string>
+<string name="service_unavailable">Dienst unerreichbar</string>
+<string name="subscription_required">Zustimmung wird benötigt</string>
+<string name="undefined_condition">Undefinierte Bedingung</string>
+<string name="unexpected_condition">Unerwartete Bedingung</string>
+<string name="request_timeout">Zeitüberschreitung bei der Anfrage</string>
</resources>
--- a/res/values-fr/strings.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values-fr/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -56,6 +56,12 @@
<string name="MenuConnection">Modifier un compte</string>
<string name="ChangeStatusOk">Mise à jour du statut</string>
<string name="ChangeStatusNoChange">Rien à changer</string>
+ <string name="my_avatar">Mon avatar</string>
+ <string name="select_avatar">Choisissez votre avatar</string>
+ <string name="take_photo">Prendre une photo</string>
+ <string name="pick_photo">Choisir une image</string>
+ <string name="delete_avatar">Pas d\'avatar</string>
+ <string name="photoPickerNotFoundText">Sélecteur d\'image non disponible</string>
<!-- Settings class -->
<string name="SettingsText">Saisissez votre identifiant de connexion</string>
@@ -86,7 +92,7 @@
<string name="CLP_hide_groups_sum">Cochez cette option pour cacher les groupes</string>
<string name="CLP_hidden_contact">Cachez les contacts</string>
<string name="CLP_hidden_contact_sum">Cochez cette option pour cacher les contacts déconnectés</string>
- <string name="settings_account_username">Nom d\'utilisateur</string>
+ <string name="settings_account_username">Nom d\'utilisateur (JID)</string>
<string name="login_username_info_default">beem@beem-project.com</string>
<string name="settings_account_password">Mot de passe</string>
<string name="settings_account_server">Serveur</string>
@@ -117,6 +123,19 @@
<string name="notification_enable_vibrate_sum">Activer le vibreur pour les messages entrants</string>
<string name="notification_snd_title">Sonnerie des messages</string>
<string name="notification_snd_sum">Configurer la sonnerie des messages entrants</string>
+ <string name="settings_chat_compact">Chat compact</string>
+ <string name="settings_chat_compact_sum">Activer la fenetre Chat compact</string>
+ <string name="history">Historique</string>
+ <string name="history_sum">Cochez cette option pour enregistrer les discussions sur la SDCard</string>
+ <string name="history_mount">Il vous faut avoir une SDcard utilisable en écriture pour activer l\'historique</string>
+ <string name="history_on_off">Activer la l\'historique des messages</string>
+ <string name="chat_preferences">Chat</string>
+ <string name="chat_preferences_sum">Historique, taille de la fenêtre ...</string>
+ <string name="chat_history_path">Répertoire d\'historique</string>
+ <string name="chat_history_path_sum">Les conversations sont enregistrées dans un dossier sur la SDCard</string>
+ <string name="settings_smack_debug">Activer le debugger XMPP</string>
+ <string name="settings_full_jid_login">Utiliser le JID entier en tant que login</string>
+ <string name="settings_full_jid_login_sum">Nécessaire pour certains serveurs (Google Talk)</string>
<!-- Subscription class -->
<string name="SubscriptAccept">Inscription acceptée</string>
@@ -209,6 +228,9 @@
<string name="settings_tab_label_xmpp">XMPP</string>
<string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
<string name="settings_tab_label_proxy">Proxy</string>
+ <string name="history_preferences">Historique</string>
+ <string name="chat_layout_option">Fenêtre de chat</string>
+
<!-- wizard activities -->
<string name="account_wizard_text1"><b>Bienvenue sur BEEM.</b>\n\nVous n\'avez pas encore configuré de compte XMPP (Jabber).\nChoisissez une des options suivantes :</string>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/values-it/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Generic terms -->
+ <string name="app_name">Beem</string>
+ <string name="OkButton">Ok</string>
+ <string name="ClearButton">Pulisci</string>
+ <string name="CancelButton">Annulla</string>
+ <string name="AcceptButton">Autorizza</string>
+ <string name="RefuseButton">Proibisci</string>
+ <string name="JabberID">Jabber ID</string>
+ <string name="Password">Password</string>
+ <string name="Continue">Continua</string>
+
+ <!-- AccountConfigure class -->
+ <string name="AccountConfigureManualConfiguration">Configurazione Manuale</string>
+
+ <!-- Beem class -->
+ <string name="BeemJabberID">Jabber ID</string>
+
+ <!-- BeemApplication class -->
+ <string name="BeemApplicationConnect">Connessione...</string>
+
+ <!-- BeemService class -->
+ <string name="BeemServiceDescription">Usa il sservizio Beem</string>
+ <string name="BeemServiceCreated">Create il servizio Bemm</string>
+ <string name="BeemServiceDestroyed">Rimosso il servizio Beem</string>
+
+ <!-- ContactDialog class -->
+ <string name="CDChat">Chat</string>
+ <string name="CDCall">Chiamate</string>
+ <string name="CDInfos">Gestisci Utente</string>
+
+ <!-- AddContact class -->
+ <string name="AddCActTitle">Beem - Aggiungi un contatto</string>
+
+ <string name="AddCLogin">Username</string>
+ <string name="AddCAlias">Alias</string>
+ <string name="AddCGroup">Gruppo</string>
+ <string name="AddCOkButton">Aggiungi</string>
+ <string name="AddCContactAdded">Aggiunto contatto</string>
+ <string name="AddCContactAddedError">Errore Contatto non aggiunto</string>
+ <string name="AddCContactAddedLoginError">Errore di accesso</string>
+ <string name="AddCBadForm">Forma errata</string>
+ <string name="AddCContactAlready">Contatto già esistente</string>
+
+ <!-- ChangeStatus class -->
+ <string name="ChangeStatusActTitle">Beem - Cambia il mio stato</string>
+ <string name="ChangeStatusType">Il mio stato</string>
+ <string name="ChangeStatusMessage">Messaggio personale</string>
+ <string name="OpenContactList">Apri lista contatti</string>
+
+ <string name="MenuAddContact">Aggiungi un nuovo cotatto</string>
+ <string name="MenuAccountAbout">Progetto Beem</string>
+ <string name="MenuAccountCreate">Crea un account</string>
+ <string name="MenuConnection">Modifica account</string>
+ <string name="ChangeStatusOk">Aggiornamento stato</string>
+ <string name="ChangeStatusNoChange">Nessun cambiamento</string>
+
+ <!-- Settings class -->
+ <string name="SettingsText">Modifica il tuo username</string>
+ <string name="SettingsPassword">Modifica la tua password</string>
+ <string name="SettingsProxy">Proxy</string>
+ <string name="SettingsProxyProxy">Usa un server proxy</string>
+ <string name="SettingsProxySummary">Accedi attraverso un server proxy</string>
+ <string name="SettingsProxyType">Protocollo</string>
+ <string name="SettingsProxyTypeSummary">Scegli il tipo del server proxy</string>
+ <string name="SettingsProxyServer">Modifica l\'indirizzo del server proxy</string>
+ <string name="SettingsProxyPort">Modifica la porta del server proxy</string>
+ <string name="SettingsProxyUser">Opzionale, permetti l\'autenticazione di te stesso sul server proxy</string>
+ <string name="SettingsProxyPassword">Opzionale, permetti l\'autenticazione di te stesso sul server proxy</string>
+ <string name="SettingsAdvanced">Avanzate</string>
+ <string name="SettingsAdvancedOptions">Opzioni specifiche del server</string>
+ <string name="SettingsAdvancedRecoDelay">Modifica ritardo di ri-connessione</string>
+ <string name="SettingsAdvancedSpecOpt">Abilita se vuoi usare un server specifico per la tua connessione</string>
+ <string name="SettingsAdvancedAddOpt">Modifica l\'indirizzo del server</string>
+ <string name="SettingsAdvancedPortOpt">Modifica la porta del server</string>
+ <string name="SettingsResourceTitle">Risorsa</string>
+ <string name="SettingsPriorityTitle">Priorità</string>
+ <string name="SettingsResourceSummary">Imposta la risorsa XMPP del tuo client </string>
+ <string name="SettingsPrioritySummary">Imposta la priorità del tuo client</string>
+ <string name="contact_list_preferences">Lista amici</string>
+ <string name="contact_list_preferences_sum">Un insieme di opzioni di visualizzazione per la tua lista amizie
+ </string>
+ <string name="CLP_hide_groups">Nascondi gruppi</string>
+ <string name="CLP_hide_groups_sum">Abilita quest\'opzione per nascondere i gruppi</string>
+ <string name="CLP_hidden_contact">Nascondi le amizie</string>
+ <string name="CLP_hidden_contact_sum">Abilita quest\'opzione per nascondere gli amici non connessi
+ </string>
+ <string name="settings_account_username">Username</string>
+ <string name="login_username_info_default">beem@beem-project.com</string>
+ <string name="settings_account_password">Password</string>
+ <string name="settings_account_server">Server</string>
+ <string name="settings_account_port">Porta</string>
+ <string name="settings_advanced_service_behaviour">Funzionamento del servizio</string>
+ <string name="settings_advanced_sum">Un insieme di opzioni per gli utenti avanzati</string>
+ <string name="settings_xmpp_server">Indirizzo</string>
+ <string name="comments_xmpp_server">example.com</string>
+ <string name="settings_xmpp_port">Porta</string>
+ <string name="settings_xmpp_use_tls">Usa SSL/TLS</string>
+ <string name="settings_reco_delay">Ritardo di ri-connessione</string>
+ <string name="comments_xmpp_port">Predefinita: 5222</string>
+ <string name="settings_proxy_sum">Impostazioni per l\'utilizzo del proxy</string>
+ <string name="settings_proxy_use">Connetti utilizzando un proxy</string>
+ <string name="settings_proxy_type_prompt">Scegli un tipo di proxy</string>
+ <string name="settings_proxy_server">Server</string>
+ <string name="settings_proxy_port">Porta</string>
+ <string name="comments_proxy_port">Predefinita: 1080</string>
+ <string name="settings_proxy_username">Username</string>
+ <string name="settings_proxy_password">Password</string>
+ <string name="away_chk_title">Abilita Auto-away</string>
+ <string name="away_chk_sum">Cambia lo stato ad Away quando lo schermo è spento</string>
+ <string name="away_message_title">Messaggio Away</string>
+ <string name="away_message_sum">Il messaggio Away che verrà mostrato</string>
+ <string name="away_message_hint">Non sono disponibile, il mio schermo è spento</string>
+ <string name="notification_preferences">Impostazioni di notifica</string>
+ <string name="notification_enable_vibrate_title">Abilita vibrazione</string>
+ <string name="notification_enable_vibrate_sum">Abilita vibrazione per i messaggi in arrivo</string>
+ <string name="notification_snd_title">Suoneria messaggi</string>
+ <string name="notification_snd_sum">Imposta la suoneria per i messaggi in arrivo</string>
+
+
+ <!-- Subscription class -->
+ <string name="SubscriptAccept">Sottoscrizione accettata</string>
+ <string name="SubscriptError">Errore nella sottoscrizione</string>
+ <string name="SubscriptRefused">Sottoscrizione refiutata</string>
+ <string name="SubscriptText">%s desidera aggiungerti nella sua lista di amicizie. Vuoi autorizzarlo/a?</string>
+ <string name="SubscriptTitle">Autorizza amicizia ?</string>
+
+ <!-- BeemChatManager -->
+ <string name="BeemChatManagerNewMessage">Hai un nuovo messaggio</string>
+
+ <!-- BeemBroadcastReceiver class -->
+ <string name="BeemBroadcastReceiverDisconnect">BEEM: sei stato disconnesso</string>
+
+ <!-- XmppConnectionAdapter class -->
+ <string name="AcceptContactRequest">%s ti ha appena aggiunto alla sue lista di amicizie.</string>
+ <string name="AcceptContactRequestFrom">Autorizza %s a contattarti.</string>
+
+ <!-- Activities -->
+ <string name="login_tag">Beem - Login Activity</string>
+ <string name="edit_settings_name">Beem - Settings</string>
+ <string name="edit_settings_tag">Beem - EditSettings Activity</string>
+ <string name="create_account_name">Beem - Create an account</string>
+ <string name="create_account_tag">Beem - CreateAccount Activity</string>
+ <string name="contact_list_name">Beem - Contacts</string>
+ <string name="contact_list_tag">Beem - ContactList Activity</string>
+ <string name="user_info_name">Beem - User Info</string>
+
+ <!-- Buttons -->
+ <string name="button_create_account">Crea questo account</string>
+ <string name="button_create_login_account">Crea ed usa questo account</string>
+
+ <!-- LogAs Activity -->
+ <string name="login_username">Username</string>
+ <string name="login_password">Password</string>
+ <string name="login_error_dialog_title">Accesso - Errore</string>
+ <string name="login_close_dialog_button">Chiudi</string>
+ <string name="login_menu_create_account">Crea un account</string>
+ <string name="login_menu_settings">Impostazioni</string>
+ <string name="login_menu_about">Informazioni su</string>
+ <string name="login_about_title">Beem %s - Informazioni</string>
+ <string name="login_about_msg">
+ Beem è un progetto innovativo EPITECH. Visitaci su
+ http://www.beem-project.com !
+ </string>
+ <string name="login_about_button">Chiudi</string>
+ <string name="login_settings_button">Impostazioni</string>
+ <string name="login_login_button">Accedi</string>
+ <string name="login_login_progress">Connessione in corso. Attendere...</string>
+ <string name="login_error_msg">Purtroppo, si è verificato un errore.\n\nDettagli
+ errore:\n%s</string>
+ <string name="login_menu_login">Accedi</string>
+ <string name="login_no_connectivity">Non è stata trovata la connessione internet</string>
+ <string name="login_start_msg">Impostazioni di configurazione nel menuSettings configuration in menu</string>
+
+ <!-- LoginAnim activity -->
+ <string name="loganim_connecting">Connessione in corso ...</string>
+ <string name="loganim_authenticating">Autenticazione ...</string>
+ <string name="loganim_login_success">Accesso riuscito</string>
+ <string name="loganim_login_failed">Accesso fallito</string>
+
+ <!-- EditSettings Activity -->
+ <string name="settings_menu_create_account">Crea un account</string>
+ <string name="settings_menu_privacy_lists">Gestisci le mie liste di privacy</string>
+ <string name="settings_saved_ok">Le impostazioni sono state salvate con successo.</string>
+
+
+
+ <!-- EditSettings Activity Categories -->
+ <string name="general_preferences">Preferenze generali</string>
+ <string name="user_preferences">Impostazioni utente (richiste)</string>
+ <string name="user_preferences_advanced">Impostazioni utente avanzate (opzionali)</string>
+ <string name="network_preferences">Opzioni rete</string>
+ <string name="proxy_proxy_settings">Impostazioni Proxy</string>
+ <string name="proxy_user_settings">Impostazioni Proxy</string>
+
+ <!-- EditSettings Activity Tabs -->
+ <string name="settings_tab_tag_account">edit_settings_tab_account</string>
+ <string name="settings_tab_label_account">Account</string>
+ <string name="settings_tab_tag_xmpp">edit_settings_tab_xmpp</string>
+ <string name="settings_tab_label_xmpp">XMPP</string>
+ <string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
+ <string name="settings_tab_label_proxy">Proxy</string>
+
+
+ <!-- wizard activities -->
+ <string name="account_wizard_text1"><b>Benvenuto su BEEM.</b>\n\nNon hai ancora configurato un account XMPP (Jabber).\nScegli una delle seguenti opzioni :</string>
+ <string name="account_wizard_configure_text"><b>Si prega di compilare i dati per il vostro account esistente</b></string>
+ <string name="account_wizard_configure_account">Possiedo già un account che voglio</string>
+ <string name="account_wizard_create_account">Voglio registrare un nuovo account</string>
+
+ <!-- Create an account Activity -->
+ <string name="create_account_instr_dialog_title">Crea un account - Istruzioni</string>
+ <string name="create_account_err_dialog_title">Crea un account - Errore</string>
+ <string name="create_account_err_dialog_settings_button">Cambia le mie impostazioni</string>
+ <string name="create_account_close_dialog_button">Chiudi</string>
+ <string name="create_account_successfull_after">account %s è stato creato con successo</string>
+ <string name="create_account_err_username">Errato JabberID</string>
+ <string name="create_account_err_passwords">Le password non coincidono.</string>
+ <string name="create_account_username">Username</string>
+ <string name="create_account_password">Password</string>
+ <string name="create_account_confirm_password">Conferma password</string>
+
+ <!-- ContactList Activity -->
+ <string name="contact_list_menu_add_contact">Aggiungi un contatto</string>
+ <string name="contact_list_menu_status">Cambia stato</string>
+ <string name="contact_list_menu_settings">Impsotazioni</string>
+ <string name="contact_list_menu_disconnect">Disconnetti</string>
+ <string name="contact_list_all_contact">Tutti i contatti</string>
+ <string name="contact_list_no_group">Nessun gruppo</string>
+
+ <!-- UserInfo dialog -->
+ <string name="userinfo_label_alias">Alias</string>
+ <string name="userinfo_label_chg_group">Gestisci gruppi</string>
+ <string name="userinfo_label_re_subscription">Rimanda invito</string>
+ <string name="userinfo_label_block">Blocco</string>
+ <string name="userinfo_label_delete">Elimina</string>
+ <string name="userinfo_resend">Rimanda sottoscrizione</string>
+ <string name="userinfo_sure2delete">Sei sicuro di voler eliminare questo contatto?
+ </string>
+ <string name="userinfo_yes">Sì</string>
+ <string name="userinfo_no">No</string>
+ <string name="userinfo_sureresend">Sei sicuro di voler rispedire l\'invito ?</string>
+
+ <string name="chat_name">Beem - Chat</string>
+ <string name="chat_input_default_value">Scrivi il tuo messaggio</string>
+ <string name="chat_self">Io</string>
+ <string name="chat_error">Errore</string>
+ <string name="chat_send_message">Invia</string>
+ <string name="chat_menu_contacts_list">Lista contatti</string>
+ <string name="chat_menu_change_chat">Cambia conversazione</string>
+ <string name="chat_dialog_change_chat_title">Conversazioni aperte</string>
+ <string name="chat_menu_close_chat">Chiudi questa conversazione</string>
+ <string name="chat_no_more_chats">nessuna conversazione attiva</string>
+ <string name="chat_state_composing">sta componendo un messaggio</string>
+ <string name="chat_state_gone">ha abbandonato la conversazione</string>
+ <string name="chat_state_active">presta attenzione alla conversazione</string>
+ <string name="chat_state_inactive">sta facendo qualcos\'altro</string>
+
+ <string name="contact_status_msg_available">Disponibile</string>
+ <string name="contact_status_msg_available_chat">Disponibile a conversare</string>
+ <string name="contact_status_msg_dnd">Non disturbare</string>
+ <string name="contact_status_msg_away">Away</string>
+ <string name="contact_status_msg_xa">Non disponibile</string>
+ <string name="contact_status_msg_offline">Disconnesso</string>
+
+ <string name="privacy_list_name">Beem - Gestisci le mie liste di privacy</string>
+ <string name="privacy_list_no_data">Non c\'è alcuna lista di provacy registrata.</string>
+ <string name="privacy_list_menu_create">Crea una lista di privacy</string>
+ <string name="privacy_list_create_dialog_title">Crea una lista di privacy</string>
+ <string name="privacy_list_create_dialog_list_name_label">Titolo</string>
+ <string name="privacy_list_create_dialog_create_button">Creare</string>
+ <string name="privacy_list_select_dialog_buddies">Amicizie</string>
+ <string name="privacy_list_select_dialog_groups">Gruppi</string>
+ <string name="privacy_list_select_dialog_delete">Elimina</string>
+ <string name="privacy_list_delete_dialog_msg">Sei sicuro di voler eliminare la lista di privacy intitolata \'%s\' ?</string>
+ <string name="privacy_list_delete_dialog_yes">Sì</string>
+ <string name="privacy_list_delete_dialog_no">No</string>
+
+ <string name="UpdateButton">Aggiorna</string>
+
+ <!-- Error messages -->
+
+ <string name="error_login_authentication">Errore durante l\'autenticazione, login o password errati.</string>
+
+ <string name="interna_server_error">Errore del server remoto</string>
+ <string name="bad_request">bad-request</string>
+ <string name="forbidden">forbidden</string>
+ <string name="item_not_found">item-not-found</string>
+ <string name="conflict">conflict</string>
+ <string name="feature_not_implemented">feature-not-implemented</string>
+ <string name="gone">gone</string>
+ <string name="jid_malformed">jid-malformed</string>
+ <string name="no_acceptable">no-acceptable</string>
+ <string name="not_allowed">not-allowed</string>
+ <string name="not_authorized">not-authorized</string>
+ <string name="payment_required">payment-required</string>
+ <string name="recipient_unavailable">recipient-unavailable</string>
+ <string name="redirect">redirect</string>
+ <string name="registration_required">registration-required</string>
+ <string name="remote_server_not_found">Remote server not found</string>
+ <string name="remote_server_timeout">No server response</string>
+ <string name="remote_server_error">Remote server error</string>
+ <string name="resource_constraint">resource-constraint</string>
+ <string name="service_unavailable">service-unavailable</string>
+ <string name="subscription_required">subscription-required</string>
+ <string name="undefined_condition">undefined-condition</string>
+ <string name="unexpected_condition">unexpected-condition</string>
+ <string name="request_timeout">request-timeout</string>
+</resources>
--- a/res/values-ru/strings.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values-ru/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -178,7 +178,7 @@
<string name="userinfo_label_re_subscription">Выслать приглашение ещё раз</string>
<string name="userinfo_label_block">Заблокировать</string>
<string name="userinfo_label_delete">Удалить</string>
-<string name="userinfo_sure2delete">Are you sure you want to delete this contact ?
+<string name="userinfo_sure2delete">Are you sure you want to delete this contact?
</string>
<string name="userinfo_yes">Да</string>
<string name="userinfo_no">Нет</string>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/values-sv/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+<!-- Generic terms -->
+<string name="app_name">Beem</string>
+<string name="OkButton">Ok</string>
+<string name="ClearButton">Töm</string>
+<string name="CancelButton">Avbryt</string>
+<string name="AcceptButton">Godkänn</string>
+<string name="RefuseButton">Neka</string>
+<string name="JabberID">Jabber-ID</string>
+<string name="Password">Lösenord</string>
+<string name="Continue">Fortsätt</string>
+
+<!-- AccountConfigure class -->
+<string name="AccountConfigureManualConfiguration">Manuell inställning</string>
+
+<!-- Beem class -->
+<string name="BeemJabberID">Jabber-ID</string>
+
+<!-- BeemApplication class -->
+<string name="BeemApplicationConnect">Ansluter...</string>
+
+<!-- BeemService class -->
+<string name="BeemServiceDescription">Använda tjänsten Beem</string>
+<string name="BeemServiceCreated">Beemtjänst skapad</string>
+<string name="BeemServiceDestroyed">Beemtjänst avslutad</string>
+
+<!-- ContactDialog class -->
+<string name="CDChat">Chatta</string>
+<string name="CDCall">Ring</string>
+<string name="CDInfos">Hantera kontakt</string>
+
+<!-- AddContact class -->
+<string name="AddCActTitle">Beem - Lägg till kontakt</string>
+
+<string name="AddCLogin">Användarnamn</string>
+<string name="AddCAlias">Alias</string>
+<string name="AddCGroup">Grupp</string>
+<string name="AddCOkButton">Lägg till</string>
+<string name="AddCContactAdded">Kontakt tillagd</string>
+<string name="AddCContactAddedError">Fel, kontakt inte tillagd</string>
+<string name="AddCContactAddedLoginError">Fel vid inloggning</string>
+<string name="AddCBadForm">Fel ifyllt</string>
+<string name="AddCContactAlready">Kontakten finns redan</string>
+
+<!-- ChangeStatus class -->
+<string name="ChangeStatusActTitle">Beem - Ändra status</string>
+<string name="ChangeStatusType">Min status</string>
+<string name="ChangeStatusMessage">Mitt personliga meddelande</string>
+<string name="OpenContactList">Öppna kontaktlista</string>
+
+<string name="MenuAddContact">Lägg till ny kontakt</string>
+<string name="MenuAccountAbout">Beemprojektet</string>
+<string name="MenuAccountCreate">Skapa konto</string>
+<string name="MenuConnection">Ändra konto</string>
+<string name="ChangeStatusOk">Uppdaterar status</string>
+<string name="ChangeStatusNoChange">Inget att ändra</string>
+
+<!-- Settings class -->
+<string name="SettingsText">Ändra ditt användarnamn</string>
+<string name="SettingsPassword">Ändra ditt lösenord</string>
+<string name="SettingsProxy">Proxy</string>
+<string name="SettingsProxyProxy">Använd proxyserver</string>
+<string name="SettingsProxySummary">Logga in via proxyserver</string>
+<string name="SettingsProxyType">Protokoll</string>
+<string name="SettingsProxyTypeSummary">Välj typ av proxyserver</string>
+<string name="SettingsProxyServer">Ändra proxyserveradress</string>
+<string name="SettingsProxyPort">Ändra proxyserverport</string>
+<string name="SettingsProxyUser">Valfritt, möjliggör autentisering på proxyservern</string>
+<string name="SettingsProxyPassword">Valfritt, möjliggör autentisering på proxyservern</string>
+<string name="SettingsAdvanced">Avancerat</string>
+<string name="SettingsAdvancedOptions">Specifika serverinställningar</string>
+<string name="SettingsAdvancedRecoDelay">Ändra tid mellan anslutningsförsök</string>
+<string name="SettingsAdvancedSpecOpt">Markera om du vill använda någon specifik server för anslutningen</string>
+<string name="SettingsAdvancedAddOpt">Ändra serveradress</string>
+<string name="SettingsAdvancedPortOpt">Ändra serverport</string>
+<string name="SettingsResourceTitle">Instans</string>
+<string name="SettingsPriorityTitle">Prioritet</string>
+<string name="SettingsResourceSummary">Ange XMPP-instans för denna klient</string>
+<string name="SettingsPrioritySummary">Ange prioritet för denna klient</string>
+<string name="contact_list_preferences">Kontaktlista</string>
+<string name="contact_list_preferences_sum">A set of display options for your buddy list
+</string>
+<string name="CLP_hide_groups">Dölj grupper</string>
+<string name="CLP_hide_groups_sum">Markera för att dölja grupper</string>
+<string name="CLP_hidden_contact">Dölj kontakter</string>
+<string name="CLP_hidden_contact_sum">Check this option to hide unconnected buddies
+</string>
+<string name="settings_account_username">Användarnamn (JID)</string>
+<string name="login_username_info_default">beem@beem-project.com</string>
+<string name="settings_account_password">Lösenord</string>
+<string name="settings_account_server">Server</string>
+<string name="settings_account_port">Port</string>
+<string name="settings_advanced_service_behaviour">Tjänstebeskrivning</string>
+<string name="settings_advanced_sum">Inställningar för avancerade användare</string>
+<string name="settings_xmpp_server">Adress</string>
+<string name="comments_xmpp_server">example.com</string>
+<string name="settings_xmpp_port">Port</string>
+<string name="settings_xmpp_use_tls">Kräv SSL/TLS</string>
+<string name="settings_reco_delay">Tid mellan anslutningsförsök</string>
+<string name="comments_xmpp_port">Förvalt: 5222</string>
+<string name="settings_proxy_sum">Inställningar för användning av proxy</string>
+<string name="settings_proxy_use">Anslut via proxy</string>
+<string name="settings_proxy_type_prompt">Välj typ av proxy</string>
+<string name="settings_proxy_server">Server</string>
+<string name="settings_proxy_port">Port</string>
+<string name="comments_proxy_port">Förvalt: 1080</string>
+<string name="settings_proxy_username">Användarnamn</string>
+<string name="settings_proxy_password">Lösenord</string>
+<string name="away_chk_title">Aktivera automatisk frånvaro</string>
+<string name="away_chk_sum">Ändra status till frånvarande när skärmen släcks</string>
+<string name="away_message_title">Frånvaromeddelande</string>
+<string name="away_message_sum">Frånvaromeddelandet som kommer att visas</string>
+<string name="away_message_hint">Jag är frånvarande, telefonens skärm är släckt</string>
+<string name="notification_preferences">Aviseringsinställningar</string>
+<string name="notification_enable_vibrate_title">Aktivera vibration</string>
+<string name="notification_enable_vibrate_sum">Aktivera vibration vid inkommande meddelande</string>
+<string name="notification_snd_title">Meddelandesignal</string>
+<string name="notification_snd_sum">Ange signal för inkommande meddelanden</string>
+<string name="settings_chat_compact">Kompakt chatt</string>
+<string name="settings_chat_compact_sum">Gör chattfönstret kompakt</string>
+<string name="history">Historik</string>
+<string name="history_mount">Ett monterat och skrivbart SD-kort krävs för att aktivera historik</string>
+<string name="history_on_off">Aktivera historik</string>
+<string name="settings_smack_debug">Aktivera XMPP-felsökning</string>
+<string name="settings_full_jid_login">Använd fullständigt JID som användarnamn</string>
+<string name="settings_full_jid_login_sum">Krävs på vissa servrar som Google Talk</string>
+
+<!-- Subscription class -->
+<string name="SubscriptAccept">Prenumeration godkänd</string>
+<string name="SubscriptError">Fel vid prenumeration</string>
+<string name="SubscriptRefused">Prenumeration nekad</string>
+<string name="SubscriptText">%s vill lägga till dig i sin kontaktlista. Godkänner du det?</string>
+<string name="SubscriptTitle">Godkänn kontakt?</string>
+
+<!-- BeemChatManager -->
+<string name="BeemChatManagerNewMessage">Du har ett nytt meddelande</string>
+
+<!-- BeemBroadcastReceiver class -->
+<string name="BeemBroadcastReceiverDisconnect">BEEM: Du är frånkopplad</string>
+
+<!-- XmppConnectionAdapter class -->
+<string name="AcceptContactRequest">%s har lagt till dig till sin kontaktlista.</string>
+<string name="AcceptContactRequestFrom">Godkänn att %s kontaktar dig.</string>
+
+<!-- Activities -->
+<string name="login_tag">Beem - Aktivitet inloggningar</string>
+<string name="edit_settings_name">Beem - Inställningar</string>
+<string name="edit_settings_tag">Beem - Aktivitet inställningar</string>
+<string name="create_account_name">Beem - Skapa konto</string>
+<string name="create_account_tag">Beem - Aktivitet skapa konto</string>
+<string name="contact_list_name">Beem - Kontakter</string>
+<string name="contact_list_tag">Beem - Aktivitet kontaktlista</string>
+<string name="user_info_name">Beem - Användarinfo</string>
+
+<!-- Buttons -->
+<string name="button_create_account">Skapa kontot</string>
+<string name="button_create_login_account">Skapa och använd kontot</string>
+
+<!-- LogAs Activity -->
+<string name="login_username">Användarnamn</string>
+<string name="login_password">Lösenord</string>
+<string name="login_error_dialog_title">Fel vid inloggning</string>
+<string name="login_close_dialog_button">Stäng</string>
+<string name="login_menu_create_account">Skapa konto</string>
+<string name="login_menu_settings">Inställningar</string>
+<string name="login_menu_about">Om</string>
+<string name="login_about_title">Beem %s - Om</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_button">Stäng</string>
+<string name="login_settings_button">Inställningar</string>
+<string name="login_login_button">Logga in</string>
+<string name="login_login_progress">Ansluter. Vänta...</string>
+<string name="login_error_msg">Unfortunately, an error occured.\n\nError
+detail:\n%s</string>
+<string name="login_menu_login">Logga in</string>
+<string name="login_no_connectivity">Ingen internetanslutning hittades</string>
+<string name="login_start_msg">Inställningar i menyn</string>
+
+<!-- LoginAnim activity -->
+<string name="loganim_connecting">Ansluter...</string>
+<string name="loganim_authenticating">Verifierar...</string>
+<string name="loganim_login_success">Inloggningen lyckades</string>
+<string name="loganim_login_failed">Inloggningen misslyckades</string>
+
+<!-- EditSettings Activity -->
+<string name="settings_menu_create_account">Skapa konto</string>
+<string name="settings_menu_privacy_lists">Hantera spärrlistor</string>
+<string name="settings_saved_ok">Inställningarna har sparats.</string>
+
+
+
+<!-- EditSettings Activity Categories -->
+<string name="general_preferences">Allmänna inställningar</string>
+<string name="user_preferences">Användarinställningar (krävs)</string>
+<string name="user_preferences_advanced">Avancerade användarinställningar (valfritt)</string>
+<string name="network_preferences">Nätverksinställningar</string>
+<string name="proxy_proxy_settings">Proxyinställningar</string>
+<string name="proxy_user_settings">Proxyinställningar</string>
+
+<!-- EditSettings Activity Tabs -->
+<string name="settings_tab_tag_account">edit_settings_tab_account</string>
+<string name="settings_tab_label_account">Konto</string>
+<string name="settings_tab_tag_xmpp">edit_settings_tab_xmpp</string>
+<string name="settings_tab_label_xmpp">XMPP</string>
+<string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
+<string name="settings_tab_label_proxy">Proxy</string>
+
+
+<!-- wizard activities -->
+<string name="account_wizard_text1"><b>Välkommen till BEEM.</b>\n\nDu har inte konfigurerat något XMPP (Jabber)-konto än.\nVälj ett av följande alternativ:</string>
+<string name="account_wizard_configure_text"><b>Fyll i uppgifterna för ditt befintliga konto</b></string>
+<string name="account_wizard_configure_account">Jag har redan ett konto som jag vill använda</string>
+<string name="account_wizard_create_account">Jag vill registrera ett nytt konto</string>
+
+<!-- Create an account Activity -->
+<string name="create_account_instr_dialog_title">Skapa konto - Instruktioner</string>
+<string name="create_account_err_dialog_title">Skapa konto - Fel</string>
+<string name="create_account_err_dialog_settings_button">Ändra inställningar</string>
+<string name="create_account_close_dialog_button">Stäng</string>
+<string name="create_account_successfull_after">kontot %s har skapats</string>
+<string name="create_account_err_username">Felaktigt Jabber-ID</string>
+<string name="create_account_err_passwords">Lösenorden är inte lika.</string>
+<string name="create_account_username">Användarnamn</string>
+<string name="create_account_password">Lösenord</string>
+<string name="create_account_confirm_password">Bekräfta lösenordet</string>
+
+<!-- ContactList Activity -->
+<string name="contact_list_menu_add_contact">Lägg till kontakt</string>
+<string name="contact_list_menu_status">Ändra status</string>
+<string name="contact_list_menu_settings">Inställningar</string>
+<string name="contact_list_menu_disconnect">Koppla från</string>
+<string name="contact_list_all_contact">Alla kontakter</string>
+<string name="contact_list_no_group">Ingen grupp</string>
+
+<!-- UserInfo dialog -->
+<string name="userinfo_label_alias">Alias</string>
+<string name="userinfo_label_chg_group">Hantera grupper</string>
+<string name="userinfo_label_re_subscription">Skicka förfrågan igen</string>
+<string name="userinfo_label_block">Spärra</string>
+<string name="userinfo_label_delete">Ta bort</string>
+<string name="userinfo_resend">Skicka prenumeration igen</string>
+<string name="userinfo_sure2delete">Are you sure you want to delete this contact ?
+</string>
+<string name="userinfo_yes">Ja</string>
+<string name="userinfo_no">Nej</string>
+<string name="userinfo_sureresend">Är du säker på att du vill skicka förfrågan igen?</string>
+
+<string name="chat_name">Beem - Chatt</string>
+<string name="chat_input_default_value">Skriv meddelande</string>
+<string name="chat_self">Jag</string>
+<string name="chat_error">Fel</string>
+<string name="chat_send_message">Skicka</string>
+<string name="chat_menu_contacts_list">Kontaktlista</string>
+<string name="chat_menu_change_chat">Byt chatt</string>
+<string name="chat_dialog_change_chat_title">Öppna chattar</string>
+<string name="chat_menu_close_chat">Stäng den här chatten</string>
+<string name="chat_no_more_chats">Inga fler aktiva chattar</string>
+<string name="chat_state_composing">skriver ett meddelande</string>
+<string name="chat_state_gone">har lämnat samtalet</string>
+<string name="chat_state_active">iakttar samtalet</string>
+<string name="chat_state_inactive">gör något annat</string>
+
+<string name="contact_status_msg_available">Tillgänglig</string>
+<string name="contact_status_msg_available_chat">Tillgänglig för chatt</string>
+<string name="contact_status_msg_dnd">Stör ej</string>
+<string name="contact_status_msg_away">Frånvarande</string>
+<string name="contact_status_msg_xa">Inte tillgänglig</string>
+<string name="contact_status_msg_offline">Frånkopplad</string>
+
+<string name="privacy_list_name">Beem - Hantera spärrlistor</string>
+<string name="privacy_list_no_data">Det finns inga spärrlistor.</string>
+<string name="privacy_list_menu_create">Skapa spärrlista</string>
+<string name="privacy_list_create_dialog_title">Skapa spärrlista</string>
+<string name="privacy_list_create_dialog_list_name_label">Titel</string>
+<string name="privacy_list_create_dialog_create_button">Skapa</string>
+<string name="privacy_list_select_dialog_buddies">Kontakter</string>
+<string name="privacy_list_select_dialog_groups">Grupper</string>
+<string name="privacy_list_select_dialog_delete">Ta bort</string>
+<string name="privacy_list_delete_dialog_msg">Vill du verkligen ta bort spärrlistan \'%s\'?</string>
+<string name="privacy_list_delete_dialog_yes">Ja</string>
+<string name="privacy_list_delete_dialog_no">Nej</string>
+
+<string name="UpdateButton">Uppdatera</string>
+
+<!-- Error messages -->
+
+<string name="error_login_authentication">Fel vid inloggning, fel ID eller lösenord.</string>
+
+<string name="interna_server_error">Serverfel</string>
+<string name="bad_request">felaktig begäran</string>
+<string name="forbidden">otillåten</string>
+<string name="item_not_found">hittades inte</string>
+<string name="conflict">konflikt</string>
+<string name="feature_not_implemented">funktionen finns inte</string>
+<string name="gone">borta</string>
+<string name="jid_malformed">felaktigt JID</string>
+<string name="no_acceptable">accepteras inte</string>
+<string name="not_allowed">tillåts inte</string>
+<string name="not_authorized">inte godkänd</string>
+<string name="payment_required">betalning krävs</string>
+<string name="recipient_unavailable">mottagaren ej tillgänglig</string>
+<string name="redirect">vidarebefordra</string>
+<string name="registration_required">registrering krävs</string>
+<string name="remote_server_not_found">Servern hittades inte</string>
+<string name="remote_server_timeout">Servern svarar inte</string>
+<string name="remote_server_error">Serverfel</string>
+<string name="resource_constraint">begränsad instans</string>
+<string name="service_unavailable">tjänsten ej tillgänglig</string>
+<string name="subscription_required">prenumeration krävs</string>
+<string name="undefined_condition">odefinierat tillstånd</string>
+<string name="unexpected_condition">oväntat tillstånd</string>
+<string name="request_timeout">timeout för begäran</string>
+</resources>
--- a/res/values-zh-rCN/strings.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values-zh-rCN/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -1,306 +1,317 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <!-- Generic terms -->
- <string name="app_name">Beem</string>
- <string name="OkButton">确定</string>
- <string name="ClearButton">清除</string>
- <string name="CancelButton">取消</string>
- <string name="AcceptButton">认证</string>
- <string name="RefuseButton">拒绝</string>
- <string name="JabberID">Jabber账号 </string>
- <string name="Password">密码</string>
-
- <!-- Beem class -->
- <string name="BeemJabberID">Jabber账号 </string>
-
- <!-- BeemApplication class -->
- <string name="BeemApplicationConnect">连接中...</string>
-
- <!-- BeemService class -->
- <string name="BeemServiceDescription">使用Beem服务</string>
- <string name="BeemServiceCreated">Beem服务已创建</string>
- <string name="BeemServiceDestroyed">Beem服务已取消</string>
-
- <!-- ContactDialog class -->
- <string name="CDChat">聊天</string>
- <string name="CDCall">呼叫</string>
- <string name="CDInfos">用户管理</string>
-
- <!-- AddContact class -->
- <string name="AddCActTitle">Beem - 添加连接</string>
-
- <string name="AddCLogin">用户名</string>
- <string name="AddCAlias">别名</string>
- <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="AddCContactAlready">联系人已存在</string>
-
- <!-- ChangeStatus class -->
- <string name="ChangeStatusActTitle">Beem - 改变我的状态</string>
- <string name="ChangeStatusType">我的状态</string>
- <string name="ChangeStatusMessage">我的个人消息</string>
- <string name="OpenContactList">打开联系人列表</string>
-
- <string name="MenuAddContact">添加心联系人</string>
- <string name="MenuAccountAbout">Beem项目</string>
- <string name="MenuAccountCreate">创建账号</string>
- <string name="MenuConnection">编辑账号</string>
- <string name="ChangeStatusOk">更新状态</string>
- <string name="ChangeStatusNoChange">没有东西需要改变</string>
-
- <!-- Settings class -->
- <string name="SettingsText">修改用户名</string>
- <string name="SettingsPassword">修改密码</string>
- <string name="SettingsProxy">代理</string>
- <string name="SettingsProxyProxy">使用代理服务器</string>
- <string name="SettingsProxySummary">通过代理服务器登录</string>
- <string name="SettingsProxyType">协议</string>
- <string name="SettingsProxyTypeSummary">选择代理类型</string>
- <string name="SettingsProxyServer">修改代理服务器地址</string>
- <string name="SettingsProxyPort">修改地理服务器端口</string>
- <string name="SettingsProxyUser">可选,允许在代理服务器上注册</string>
- <string name="SettingsProxyPassword">可选,允许在代理服务器上注册</string>
- <string name="SettingsAdvanced">高级</string>
- <string name="SettingsAdvancedOptions">特定服务器选项</string>
- <string name="SettingsAdvancedRecoDelay">修改重连延时</string>
- <string name="SettingsAdvancedSpecOpt">勾选此选项以连接到特定的服务器.</string>
- <string name="SettingsAdvancedAddOpt">编辑服务器地址</string>
- <string name="SettingsAdvancedPortOpt">编辑服务器端口</string>
- <string name="SettingsResourceTitle">资源</string>
- <string name="SettingsPriorityTitle">优先级</string>
- <string name="SettingsResourceSummary">设定客户端XMPP资源</string>
- <string name="SettingsPrioritySummary">设定客户端优先级</string>
- <string name="contact_list_preferences">好友列表</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">勾选此选项隐藏未登录好友
- </string>
- <string name="settings_account_username">用户名</string>
- <string name="login_username_info_default">beem@beem-project.com</string>
- <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_sum">高级用户设置</string>
- <string name="settings_xmpp_server">地址</string>
- <string name="comments_xmpp_server">example.com</string>
- <string name="settings_xmpp_port">端口</string>
- <string name="settings_xmpp_use_tls">使用SSL/TLS</string>
- <string name="settings_reco_delay">重连延时</string>
- <string name="comments_xmpp_port">默认端口:5222</string>
- <string name="settings_proxy_sum">代理设置</string>
- <string name="settings_proxy_use">使用代理连接</string>
- <string name="settings_proxy_type_prompt">选择代理类型</string>
- <string name="settings_proxy_server">服务器</string>
- <string name="settings_proxy_port">端口</string>
- <string name="comments_proxy_port">默认端口:1080</string>
- <string name="settings_proxy_username">用户名</string>
- <string name="settings_proxy_password">密码</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>
- <string name="notification_preferences">通知设置</string>
- <string name="notification_enable_vibrate_title">开启震动</string>
- <string name="notification_enable_vibrate_sum">开启来信时的震动提示</string>
- <string name="notification_snd_title">消息提示音</string>
- <string name="notification_snd_sum">设定消息提示音</string>
-
-
- <!-- Subscription class -->
- <string name="SubscriptAccept">订阅已经接受</string>
- <string name="SubscriptError">订阅错误</string>
- <string name="SubscriptRefused">订阅被拒绝</string>
- <string name="SubscriptText">%s 想要添加你到他/她的好友列表.批准他/她的请求吗?</string>
- <string name="SubscriptTitle">批准好友请求?</string>
-
- <!-- BeemChatManager -->
- <string name="BeemChatManagerNewMessage">你有一个新消息</string>
-
- <!-- BeemBroadcastReceiver class -->
- <string name="BeemBroadcastReceiverDisconnect">BEEM:你的连接已断开</string>
-
- <!-- XmppConnectionAdapter class -->
- <string name="AcceptContactRequest">%s刚将你添加到他/她的好友列表.</string>
- <string name="AcceptContactRequestFrom">批准%s联系你</string>
-
- <!-- Activities -->
- <string name="login_tag">Beem - 登录中</string>
- <string name="edit_settings_name">Beem - 设置</string>
- <string name="edit_settings_tag">Beem - 编制设置</string>
- <string name="create_account_name">Beem - 创建新账号 </string>
- <string name="create_account_tag">Beem - 创建新账号中</string>
- <string name="contact_list_name">Beem - 联系人</string>
- <string name="contact_list_tag">Beem - 联系人列表</string>
- <string name="user_info_name">Beem - 用户信息</string>
-
- <!-- Buttons -->
- <string name="button_create_account">创建这个账户</string>
- <string name="button_create_login_account">创建并使用这个账户</string>
-
- <!-- LogAs Activity -->
- <string name="login_username">用户名</string>
- <string name="login_password">密码</string>
- <string name="login_error_dialog_title">登录 - 错误</string>
- <string name="login_close_dialog_button">关闭</string>
- <string name="login_menu_create_account">创建一个账号</string>
- <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是一个欧洲理工学院的创新项目.访问我们的网站
- http://www.beem-project.com !
- </string>
- <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">很遗憾,发生一个错误.\n\nE错误
- 详情:\n%s</string>
- <string name="login_menu_login">登陆</string>
- <string name="login_no_connectivity">没有可用连接</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>
-
- <!-- 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="network_preferences">网络选项</string>
- <string name="proxy_proxy_settings">代理选项</string>
- <string name="proxy_user_settings">代理选项</string>
-
- <!-- EditSettings Activity Tabs -->
- <string name="settings_tab_tag_account">edit_settings_tab_account</string>
- <string name="settings_tab_label_account">帐户</string>
- <string name="settings_tab_tag_xmpp">edit_settings_tab_xmpp</string>
- <string name="settings_tab_label_xmpp">XMPP</string>
- <string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
- <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"><b>请输入您已有账号的信息</b></string>
- <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_close_dialog_button">关闭</string>
- <string name="create_account_successfull_after">账号%s已成功创建</string>
- <string name="create_account_err_username">错误的Jabber ID</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>
-
- <!-- ContactList Activity -->
- <string name="contact_list_menu_add_contact">添加联系人</string>
- <string name="contact_list_menu_status">更改状态</string>
- <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>
-
- <!-- UserInfo dialog -->
- <string name="userinfo_label_alias">别名</string>
- <string name="userinfo_label_chg_group">管理组</string>
- <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">确定删除该联系人?
- </string>
- <string name="userinfo_yes">是</string>
- <string name="userinfo_no">否</string>
- <string name="userinfo_sureresend">确定要重新发送邀请吗?</string>
-
- <string name="chat_name">Beem - 聊天</string>
- <string name="chat_input_default_value">输入信息</string>
- <string name="chat_self">我</string>
- <string name="chat_error">错误</string>
- <string name="chat_send_message">发送</string>
- <string name="chat_menu_contacts_list">联系人列表</string>
- <string name="chat_menu_change_chat">切换聊天窗口</string>
- <string name="chat_dialog_change_chat_title">打开聊天窗口</string>
- <string name="chat_menu_close_chat">关闭聊天窗口</string>
- <string name="chat_no_more_chats">没有活动的聊天窗口</string>
- <string name="chat_state_composing">正在输入信息</string>
- <string name="chat_state_gone">已经离开了会话</string>
- <string name="chat_state_active">关注会话</string>
- <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_dnd">请勿打扰</string>
- <string name="contact_status_msg_away">离开</string>
- <string name="contact_status_msg_xa">没有空</string>
- <string name="contact_status_msg_offline">连接已断开</string>
-
- <string name="privacy_list_name">Beem - 管理我的隐私列表</string>
- <string name="privacy_list_no_data">没有隐私列表</string>
- <string name="privacy_list_menu_create">创建隐私列表</string>
- <string name="privacy_list_create_dialog_title">创建隐私列表</string>
- <string name="privacy_list_create_dialog_list_name_label">标题</string>
- <string name="privacy_list_create_dialog_create_button">创建</string>
- <string name="privacy_list_select_dialog_buddies">好友</string>
- <string name="privacy_list_select_dialog_groups">组</string>
- <string name="privacy_list_select_dialog_delete">删除</string>
- <string name="privacy_list_delete_dialog_msg">确定要删除 \'%s\'隐私列表吗 ?</string>
- <string name="privacy_list_delete_dialog_yes">是</string>
- <string name="privacy_list_delete_dialog_no">否</string>
-
- <string name="UpdateButton">更新</string>
-
- <!-- Error messages -->
-
- <string name="error_login_authentication">验证时发生错误,用户名或者密码错误.</string>
-
- <string name="interna_server_error">远程服务器错误</string>
- <string name="bad_request">bad-request</string>
- <string name="forbidden">被拒绝</string>
- <string name="item_not_found">item-not-found</string>
- <string name="conflict">冲突</string>
- <string name="feature_not_implemented">feature-not-implemented</string>
- <string name="gone">离开</string>
- <string name="jid_malformed">jid-malformed</string>
- <string name="no_acceptable">no-acceptable</string>
- <string name="not_allowed">not-allowed</string>
- <string name="not_authorized">not-authorized</string>
- <string name="payment_required">payment-required</string>
- <string name="recipient_unavailable">recipient-unavailable</string>
- <string name="redirect">redirect</string>
- <string name="registration_required">registration-required</string>
- <string name="remote_server_not_found">未发现远程服务器</string>
- <string name="remote_server_timeout">远程服务器未响应</string>
- <string name="remote_server_error">远程服务器错误</string>
- <string name="resource_constraint">resource-constraint</string>
- <string name="service_unavailable">service-unavailable</string>
- <string name="subscription_required">subscription-required</string>
- <string name="undefined_condition">undefined-condition</string>
- <string name="unexpected_condition">unexpected-condition</string>
- <string name="request_timeout">request-timeout</string>
-</resources>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+<!-- Generic terms -->
+<string name="app_name">Beem</string>
+<string name="OkButton">确定</string>
+<string name="ClearButton">清除</string>
+<string name="CancelButton">取消</string>
+<string name="AcceptButton">认证</string>
+<string name="RefuseButton">拒绝</string>
+<string name="JabberID">Jabber账号 </string>
+<string name="Password">密码</string>
+<string name="Continue">继续</string>
+
+<!-- AccountConfigure class -->
+<string name="AccountConfigureManualConfiguration">手动设置</string>
+
+<!-- Beem class -->
+<string name="BeemJabberID">Jabber账号 </string>
+
+<!-- BeemApplication class -->
+<string name="BeemApplicationConnect">连接中...</string>
+
+<!-- BeemService class -->
+<string name="BeemServiceDescription">使用Beem服务</string>
+<string name="BeemServiceCreated">Beem服务已创建</string>
+<string name="BeemServiceDestroyed">Beem服务已取消</string>
+
+<!-- ContactDialog class -->
+<string name="CDChat">聊天</string>
+<string name="CDCall">呼叫</string>
+<string name="CDInfos">用户管理</string>
+
+<!-- AddContact class -->
+<string name="AddCActTitle">Beem - 添加连接</string>
+
+<string name="AddCLogin">用户名</string>
+<string name="AddCAlias">别名</string>
+<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="AddCContactAlready">联系人已存在</string>
+
+<!-- ChangeStatus class -->
+<string name="ChangeStatusActTitle">Beem - 改变我的状态</string>
+<string name="ChangeStatusType">我的状态</string>
+<string name="ChangeStatusMessage">我的个人消息</string>
+<string name="OpenContactList">打开联系人列表</string>
+
+<string name="MenuAddContact">添加心联系人</string>
+<string name="MenuAccountAbout">Beem项目</string>
+<string name="MenuAccountCreate">创建账号</string>
+<string name="MenuConnection">编辑账号</string>
+<string name="ChangeStatusOk">更新状态</string>
+<string name="ChangeStatusNoChange">没有东西需要改变</string>
+
+<!-- Settings class -->
+<string name="SettingsText">修改用户名</string>
+<string name="SettingsPassword">修改密码</string>
+<string name="SettingsProxy">代理</string>
+<string name="SettingsProxyProxy">使用代理服务器</string>
+<string name="SettingsProxySummary">通过代理服务器登录</string>
+<string name="SettingsProxyType">协议</string>
+<string name="SettingsProxyTypeSummary">选择代理类型</string>
+<string name="SettingsProxyServer">修改代理服务器地址</string>
+<string name="SettingsProxyPort">修改地理服务器端口</string>
+<string name="SettingsProxyUser">可选,允许在代理服务器上注册</string>
+<string name="SettingsProxyPassword">可选,允许在代理服务器上注册</string>
+<string name="SettingsAdvanced">高级</string>
+<string name="SettingsAdvancedOptions">特定服务器选项</string>
+<string name="SettingsAdvancedRecoDelay">修改重连延时</string>
+<string name="SettingsAdvancedSpecOpt">勾选此选项以连接到特定的服务器.</string>
+<string name="SettingsAdvancedAddOpt">编辑服务器地址</string>
+<string name="SettingsAdvancedPortOpt">编辑服务器端口</string>
+<string name="SettingsResourceTitle">资源</string>
+<string name="SettingsPriorityTitle">优先级</string>
+<string name="SettingsResourceSummary">设定客户端XMPP资源</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="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="settings_account_username">用户名</string>
+<string name="login_username_info_default">beem@beem-project.com</string>
+<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_sum">高级用户设置</string>
+<string name="settings_xmpp_server">地址</string>
+<string name="comments_xmpp_server">example.com</string>
+<string name="settings_xmpp_port">端口</string>
+<string name="settings_xmpp_use_tls">使用SSL/TLS</string>
+<string name="settings_reco_delay">重连延时</string>
+<string name="comments_xmpp_port">默认端口:5222</string>
+<string name="settings_proxy_sum">代理设置</string>
+<string name="settings_proxy_use">使用代理连接</string>
+<string name="settings_proxy_type_prompt">选择代理类型</string>
+<string name="settings_proxy_server">服务器</string>
+<string name="settings_proxy_port">端口</string>
+<string name="comments_proxy_port">默认端口:1080</string>
+<string name="settings_proxy_username">用户名</string>
+<string name="settings_proxy_password">密码</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>
+<string name="notification_preferences">通知设置</string>
+<string name="notification_enable_vibrate_title">允许振动</string>
+<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_mount">你需要有已插入设备并可以写入的SD存储来允许历史记录</string>
+<string name="history_on_off">允许历史记录</string>
+<string name="settings_smack_debug">允许XMPPP调试</string>
+<string name="settings_full_jid_login">使用我完整的Jid作为用户名</string>
+<string name="settings_full_jid_login_sum">某些例如Google Talk这样的服务器需要</string>
+
+<!-- Subscription class -->
+<string name="SubscriptAccept">订阅已经接受</string>
+<string name="SubscriptError">订阅错误</string>
+<string name="SubscriptRefused">订阅被拒绝</string>
+<string name="SubscriptText">%s 想要添加你到他/她的好友列表.批准他/她的请求吗?</string>
+<string name="SubscriptTitle">批准好友请求?</string>
+
+<!-- BeemChatManager -->
+<string name="BeemChatManagerNewMessage">你有一个新消息</string>
+
+<!-- BeemBroadcastReceiver class -->
+<string name="BeemBroadcastReceiverDisconnect">BEEM:你的连接已断开</string>
+
+<!-- XmppConnectionAdapter class -->
+<string name="AcceptContactRequest">%s刚将你添加到他/她的好友列表.</string>
+<string name="AcceptContactRequestFrom">批准%s联系你</string>
+
+<!-- Activities -->
+<string name="login_tag">Beem - 登录中</string>
+<string name="edit_settings_name">Beem - 设置</string>
+<string name="edit_settings_tag">Beem - 编制设置</string>
+<string name="create_account_name">Beem - 创建新账号 </string>
+<string name="create_account_tag">Beem - 创建新账号中</string>
+<string name="contact_list_name">Beem - 联系人</string>
+<string name="contact_list_tag">Beem - 联系人列表</string>
+<string name="user_info_name">Beem - 用户信息</string>
+
+<!-- Buttons -->
+<string name="button_create_account">创建这个账户</string>
+<string name="button_create_login_account">创建并使用这个账户</string>
+
+<!-- LogAs Activity -->
+<string name="login_username">用户名</string>
+<string name="login_password">密码</string>
+<string name="login_error_dialog_title">登录 - 错误</string>
+<string name="login_close_dialog_button">关闭</string>
+<string name="login_menu_create_account">创建一个账号</string>
+<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_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_menu_login">登陆</string>
+<string name="login_no_connectivity">没有可用连接</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>
+
+<!-- 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="network_preferences">网络选项</string>
+<string name="proxy_proxy_settings">代理选项</string>
+<string name="proxy_user_settings">代理选项</string>
+
+<!-- EditSettings Activity Tabs -->
+<string name="settings_tab_tag_account">编辑账户设定</string>
+<string name="settings_tab_label_account">帐户</string>
+<string name="settings_tab_tag_xmpp">编辑XMPP设置</string>
+<string name="settings_tab_label_xmpp">XMPP</string>
+<string name="settings_tab_tag_proxy">编辑代理设置</string>
+<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"><b>请输入您已有账号的信息</b></string>
+<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_close_dialog_button">关闭</string>
+<string name="create_account_successfull_after">账号%s已成功创建</string>
+<string name="create_account_err_username">错误的Jabber ID</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>
+
+<!-- ContactList Activity -->
+<string name="contact_list_menu_add_contact">添加联系人</string>
+<string name="contact_list_menu_status">改变状态</string>
+<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>
+
+<!-- UserInfo dialog -->
+<string name="userinfo_label_alias">别名</string>
+<string name="userinfo_label_chg_group">管理组</string>
+<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_yes">是</string>
+<string name="userinfo_no">否</string>
+<string name="userinfo_sureresend">确定要重新发送邀请吗?</string>
+
+<string name="chat_name">Beem - 聊天</string>
+<string name="chat_input_default_value">输入信息</string>
+<string name="chat_self">我</string>
+<string name="chat_error">错误</string>
+<string name="chat_send_message">发送</string>
+<string name="chat_menu_contacts_list">联系人列表</string>
+<string name="chat_menu_change_chat">切换聊天窗口</string>
+<string name="chat_dialog_change_chat_title">打开聊天窗口</string>
+<string name="chat_menu_close_chat">关闭聊天窗口</string>
+<string name="chat_no_more_chats">没有活动的聊天窗口</string>
+<string name="chat_state_composing">正在输入信息</string>
+<string name="chat_state_gone">已经离开了会话</string>
+<string name="chat_state_active">关注会话</string>
+<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_dnd">请勿打扰</string>
+<string name="contact_status_msg_away">离开</string>
+<string name="contact_status_msg_xa">没有空</string>
+<string name="contact_status_msg_offline">连接已断开</string>
+
+<string name="privacy_list_name">Beem - 管理我的隐私列表</string>
+<string name="privacy_list_no_data">没有隐私列表</string>
+<string name="privacy_list_menu_create">创建隐私列表</string>
+<string name="privacy_list_create_dialog_title">创建隐私列表</string>
+<string name="privacy_list_create_dialog_list_name_label">标题</string>
+<string name="privacy_list_create_dialog_create_button">创建</string>
+<string name="privacy_list_select_dialog_buddies">好友</string>
+<string name="privacy_list_select_dialog_groups">组</string>
+<string name="privacy_list_select_dialog_delete">删除</string>
+<string name="privacy_list_delete_dialog_msg">确定要删除 \'%s\'隐私列表吗 ?</string>
+<string name="privacy_list_delete_dialog_yes">是</string>
+<string name="privacy_list_delete_dialog_no">否</string>
+
+<string name="UpdateButton">更新</string>
+
+<!-- Error messages -->
+
+<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">Jid畸形</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="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>
--- a/res/values-zh-rTW/strings.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values-zh-rTW/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -1,306 +1,317 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <!-- Generic terms -->
- <string name="app_name">Beem</string>
- <string name="OkButton">確定</string>
- <string name="ClearButton">清除</string>
- <string name="CancelButton">取消</string>
- <string name="AcceptButton">認證</string>
- <string name="RefuseButton">拒絕</string>
- <string name="JabberID">Jabber賬號 </string>
- <string name="Password">密碼</string>
-
- <!-- Beem class -->
- <string name="BeemJabberID">Jabber賬號 </string>
-
- <!-- BeemApplication class -->
- <string name="BeemApplicationConnect">連接中...</string>
-
- <!-- BeemService class -->
- <string name="BeemServiceDescription">使用Beem服務</string>
- <string name="BeemServiceCreated">Beem服務已建立</string>
- <string name="BeemServiceDestroyed">Beem服務已取消</string>
-
- <!-- ContactDialog class -->
- <string name="CDChat">聊天</string>
- <string name="CDCall">呼叫</string>
- <string name="CDInfos">使用者管理</string>
-
- <!-- AddContact class -->
- <string name="AddCActTitle">Beem - 新增連接</string>
-
- <string name="AddCLogin">使用者名</string>
- <string name="AddCAlias">別名</string>
- <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="AddCContactAlready">聯繫人已存在</string>
-
- <!-- ChangeStatus class -->
- <string name="ChangeStatusActTitle">Beem - 改變我的狀態</string>
- <string name="ChangeStatusType">我的狀態</string>
- <string name="ChangeStatusMessage">我的個人訊息</string>
- <string name="OpenContactList">開啟聯繫人清單</string>
-
- <string name="MenuAddContact">新增心聯繫人</string>
- <string name="MenuAccountAbout">Beem項目</string>
- <string name="MenuAccountCreate">建立賬號</string>
- <string name="MenuConnection">編輯賬號</string>
- <string name="ChangeStatusOk">更新狀態</string>
- <string name="ChangeStatusNoChange">沒有東西需要改變</string>
-
- <!-- Settings class -->
- <string name="SettingsText">修改使用者名</string>
- <string name="SettingsPassword">修改密碼</string>
- <string name="SettingsProxy">代理</string>
- <string name="SettingsProxyProxy">使用代理伺服器</string>
- <string name="SettingsProxySummary">通過代理伺服器登入</string>
- <string name="SettingsProxyType">協議</string>
- <string name="SettingsProxyTypeSummary">選取代理類型</string>
- <string name="SettingsProxyServer">修改代理伺服器位址</string>
- <string name="SettingsProxyPort">修改地理伺服器通訊埠</string>
- <string name="SettingsProxyUser">可選,允許在代理伺服器上註冊</string>
- <string name="SettingsProxyPassword">可選,允許在代理伺服器上註冊</string>
- <string name="SettingsAdvanced">進階</string>
- <string name="SettingsAdvancedOptions">特定伺服器選項</string>
- <string name="SettingsAdvancedRecoDelay">修改重連延時</string>
- <string name="SettingsAdvancedSpecOpt">勾選此選項以連接到特定的伺服器.</string>
- <string name="SettingsAdvancedAddOpt">編輯伺服器位址</string>
- <string name="SettingsAdvancedPortOpt">編輯伺服器通訊埠</string>
- <string name="SettingsResourceTitle">資源</string>
- <string name="SettingsPriorityTitle">優先級</string>
- <string name="SettingsResourceSummary">設定用戶端XMPP資源</string>
- <string name="SettingsPrioritySummary">設定用戶端優先級</string>
- <string name="contact_list_preferences">好友清單</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">勾選此選項隱藏未登入好友
- </string>
- <string name="settings_account_username">使用者名</string>
- <string name="login_username_info_default">beem@beem-project.com</string>
- <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_sum">進階使用者設定</string>
- <string name="settings_xmpp_server">位址</string>
- <string name="comments_xmpp_server">example.com</string>
- <string name="settings_xmpp_port">通訊埠</string>
- <string name="settings_xmpp_use_tls">使用SSL/TLS</string>
- <string name="settings_reco_delay">重連延時</string>
- <string name="comments_xmpp_port">預設通訊埠:5222</string>
- <string name="settings_proxy_sum">代理設定</string>
- <string name="settings_proxy_use">使用代理連接</string>
- <string name="settings_proxy_type_prompt">選取代理類型</string>
- <string name="settings_proxy_server">伺服器</string>
- <string name="settings_proxy_port">通訊埠</string>
- <string name="comments_proxy_port">預設通訊埠:1080</string>
- <string name="settings_proxy_username">使用者名</string>
- <string name="settings_proxy_password">密碼</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>
- <string name="notification_preferences">通知設定</string>
- <string name="notification_enable_vibrate_title">開啟震動</string>
- <string name="notification_enable_vibrate_sum">開啟來信時的震動提示</string>
- <string name="notification_snd_title">訊息提示音</string>
- <string name="notification_snd_sum">設定訊息提示音</string>
-
-
- <!-- Subscription class -->
- <string name="SubscriptAccept">訂閱已經接受</string>
- <string name="SubscriptError">訂閱錯誤</string>
- <string name="SubscriptRefused">訂閱被拒絕</string>
- <string name="SubscriptText">%s 想要新增你到他/她的好友清單.批准他/她的要求嗎?</string>
- <string name="SubscriptTitle">批准好友要求?</string>
-
- <!-- BeemChatManager -->
- <string name="BeemChatManagerNewMessage">你有一個新訊息</string>
-
- <!-- BeemBroadcastReceiver class -->
- <string name="BeemBroadcastReceiverDisconnect">BEEM:你的連接已中斷</string>
-
- <!-- XmppConnectionAdapter class -->
- <string name="AcceptContactRequest">%s剛將你新增到他/她的好友清單.</string>
- <string name="AcceptContactRequestFrom">批准%s聯繫你</string>
-
- <!-- Activities -->
- <string name="login_tag">Beem - 登入中</string>
- <string name="edit_settings_name">Beem - 設定</string>
- <string name="edit_settings_tag">Beem - 編製設定</string>
- <string name="create_account_name">Beem - 建立新賬號 </string>
- <string name="create_account_tag">Beem - 建立新賬號中</string>
- <string name="contact_list_name">Beem - 聯繫人</string>
- <string name="contact_list_tag">Beem - 聯繫人清單</string>
- <string name="user_info_name">Beem - 使用者訊息</string>
-
- <!-- Buttons -->
- <string name="button_create_account">建立這個賬戶</string>
- <string name="button_create_login_account">建立並使用這個賬戶</string>
-
- <!-- LogAs Activity -->
- <string name="login_username">使用者名</string>
- <string name="login_password">密碼</string>
- <string name="login_error_dialog_title">登入 - 錯誤</string>
- <string name="login_close_dialog_button">關閉</string>
- <string name="login_menu_create_account">建立一個賬號</string>
- <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是一個歐洲理工學院的創新項目.存取我們的網站
- http://www.beem-project.com !
- </string>
- <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">很遺憾,發生一個錯誤.\n\nE錯誤
- 詳情:\n%s</string>
- <string name="login_menu_login">登陸</string>
- <string name="login_no_connectivity">沒有可用連接</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>
-
- <!-- 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="network_preferences">網路選項</string>
- <string name="proxy_proxy_settings">代理選項</string>
- <string name="proxy_user_settings">代理選項</string>
-
- <!-- EditSettings Activity Tabs -->
- <string name="settings_tab_tag_account">edit_settings_tab_account</string>
- <string name="settings_tab_label_account">帳戶</string>
- <string name="settings_tab_tag_xmpp">edit_settings_tab_xmpp</string>
- <string name="settings_tab_label_xmpp">XMPP</string>
- <string name="settings_tab_tag_proxy">edit_settings_tab_proxy</string>
- <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"><b>請輸入您已有賬號的訊息</b></string>
- <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_close_dialog_button">關閉</string>
- <string name="create_account_successfull_after">賬號%s已成功建立</string>
- <string name="create_account_err_username">錯誤的Jabber ID</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>
-
- <!-- ContactList Activity -->
- <string name="contact_list_menu_add_contact">新增聯繫人</string>
- <string name="contact_list_menu_status">變更狀態</string>
- <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>
-
- <!-- UserInfo dialog -->
- <string name="userinfo_label_alias">別名</string>
- <string name="userinfo_label_chg_group">管理組</string>
- <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">確定刪除該聯繫人?
- </string>
- <string name="userinfo_yes">是</string>
- <string name="userinfo_no">否</string>
- <string name="userinfo_sureresend">確定要重新傳送邀請嗎?</string>
-
- <string name="chat_name">Beem - 聊天</string>
- <string name="chat_input_default_value">輸入訊息</string>
- <string name="chat_self">我</string>
- <string name="chat_error">錯誤</string>
- <string name="chat_send_message">傳送</string>
- <string name="chat_menu_contacts_list">聯繫人清單</string>
- <string name="chat_menu_change_chat">切換聊天視窗</string>
- <string name="chat_dialog_change_chat_title">開啟聊天視窗</string>
- <string name="chat_menu_close_chat">關閉聊天視窗</string>
- <string name="chat_no_more_chats">沒有活動的聊天視窗</string>
- <string name="chat_state_composing">正在輸入訊息</string>
- <string name="chat_state_gone">已經離開了會話</string>
- <string name="chat_state_active">關注會話</string>
- <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_dnd">請勿打擾</string>
- <string name="contact_status_msg_away">離開</string>
- <string name="contact_status_msg_xa">沒有空</string>
- <string name="contact_status_msg_offline">連接已中斷</string>
-
- <string name="privacy_list_name">Beem - 管理我的隱私清單</string>
- <string name="privacy_list_no_data">沒有隱私清單</string>
- <string name="privacy_list_menu_create">建立隱私清單</string>
- <string name="privacy_list_create_dialog_title">建立隱私清單</string>
- <string name="privacy_list_create_dialog_list_name_label">標題</string>
- <string name="privacy_list_create_dialog_create_button">建立</string>
- <string name="privacy_list_select_dialog_buddies">好友</string>
- <string name="privacy_list_select_dialog_groups">組</string>
- <string name="privacy_list_select_dialog_delete">刪除</string>
- <string name="privacy_list_delete_dialog_msg">確定要刪除 \'%s\'隱私清單嗎 ?</string>
- <string name="privacy_list_delete_dialog_yes">是</string>
- <string name="privacy_list_delete_dialog_no">否</string>
-
- <string name="UpdateButton">更新</string>
-
- <!-- Error messages -->
-
- <string name="error_login_authentication">驗證時發生錯誤,使用者名或者密碼錯誤.</string>
-
- <string name="interna_server_error">遠端伺服器錯誤</string>
- <string name="bad_request">bad-request</string>
- <string name="forbidden">被拒絕</string>
- <string name="item_not_found">item-not-found</string>
- <string name="conflict">衝突</string>
- <string name="feature_not_implemented">feature-not-implemented</string>
- <string name="gone">離開</string>
- <string name="jid_malformed">jid-malformed</string>
- <string name="no_acceptable">no-acceptable</string>
- <string name="not_allowed">not-allowed</string>
- <string name="not_authorized">not-authorized</string>
- <string name="payment_required">payment-required</string>
- <string name="recipient_unavailable">recipient-unavailable</string>
- <string name="redirect">redirect</string>
- <string name="registration_required">registration-required</string>
- <string name="remote_server_not_found">未發現遠端伺服器</string>
- <string name="remote_server_timeout">遠端伺服器未響應</string>
- <string name="remote_server_error">遠端伺服器錯誤</string>
- <string name="resource_constraint">resource-constraint</string>
- <string name="service_unavailable">service-unavailable</string>
- <string name="subscription_required">subscription-required</string>
- <string name="undefined_condition">undefined-condition</string>
- <string name="unexpected_condition">unexpected-condition</string>
- <string name="request_timeout">request-timeout</string>
-</resources>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+<!-- Generic terms -->
+<string name="app_name">Beem</string>
+<string name="OkButton">确定</string>
+<string name="ClearButton">清除</string>
+<string name="CancelButton">取消</string>
+<string name="AcceptButton">认证</string>
+<string name="RefuseButton">拒绝</string>
+<string name="JabberID">Jabber账号 </string>
+<string name="Password">密码</string>
+<string name="Continue">继续</string>
+
+<!-- AccountConfigure class -->
+<string name="AccountConfigureManualConfiguration">手动设置</string>
+
+<!-- Beem class -->
+<string name="BeemJabberID">Jabber账号 </string>
+
+<!-- BeemApplication class -->
+<string name="BeemApplicationConnect">连接中...</string>
+
+<!-- BeemService class -->
+<string name="BeemServiceDescription">使用Beem服务</string>
+<string name="BeemServiceCreated">Beem服务已创建</string>
+<string name="BeemServiceDestroyed">Beem服务已取消</string>
+
+<!-- ContactDialog class -->
+<string name="CDChat">聊天</string>
+<string name="CDCall">呼叫</string>
+<string name="CDInfos">用户管理</string>
+
+<!-- AddContact class -->
+<string name="AddCActTitle">Beem - 添加连接</string>
+
+<string name="AddCLogin">用户名</string>
+<string name="AddCAlias">别名</string>
+<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="AddCContactAlready">联系人已存在</string>
+
+<!-- ChangeStatus class -->
+<string name="ChangeStatusActTitle">Beem - 改变我的状态</string>
+<string name="ChangeStatusType">我的状态</string>
+<string name="ChangeStatusMessage">我的个人消息</string>
+<string name="OpenContactList">打开联系人列表</string>
+
+<string name="MenuAddContact">添加心联系人</string>
+<string name="MenuAccountAbout">Beem项目</string>
+<string name="MenuAccountCreate">创建账号</string>
+<string name="MenuConnection">编辑账号</string>
+<string name="ChangeStatusOk">更新状态</string>
+<string name="ChangeStatusNoChange">没有东西需要改变</string>
+
+<!-- Settings class -->
+<string name="SettingsText">修改用户名</string>
+<string name="SettingsPassword">修改密码</string>
+<string name="SettingsProxy">代理</string>
+<string name="SettingsProxyProxy">使用代理服务器</string>
+<string name="SettingsProxySummary">通过代理服务器登录</string>
+<string name="SettingsProxyType">协议</string>
+<string name="SettingsProxyTypeSummary">选择代理类型</string>
+<string name="SettingsProxyServer">修改代理服务器地址</string>
+<string name="SettingsProxyPort">修改地理服务器端口</string>
+<string name="SettingsProxyUser">可选,允许在代理服务器上注册</string>
+<string name="SettingsProxyPassword">可选,允许在代理服务器上注册</string>
+<string name="SettingsAdvanced">高级</string>
+<string name="SettingsAdvancedOptions">特定服务器选项</string>
+<string name="SettingsAdvancedRecoDelay">修改重连延时</string>
+<string name="SettingsAdvancedSpecOpt">勾选此选项以连接到特定的服务器.</string>
+<string name="SettingsAdvancedAddOpt">编辑服务器地址</string>
+<string name="SettingsAdvancedPortOpt">编辑服务器端口</string>
+<string name="SettingsResourceTitle">资源</string>
+<string name="SettingsPriorityTitle">优先级</string>
+<string name="SettingsResourceSummary">设定客户端XMPP资源</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="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="settings_account_username">用户名</string>
+<string name="login_username_info_default">beem@beem-project.com</string>
+<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_sum">高级用户设置</string>
+<string name="settings_xmpp_server">地址</string>
+<string name="comments_xmpp_server">example.com</string>
+<string name="settings_xmpp_port">端口</string>
+<string name="settings_xmpp_use_tls">使用SSL/TLS</string>
+<string name="settings_reco_delay">重连延时</string>
+<string name="comments_xmpp_port">默认端口:5222</string>
+<string name="settings_proxy_sum">代理设置</string>
+<string name="settings_proxy_use">使用代理连接</string>
+<string name="settings_proxy_type_prompt">选择代理类型</string>
+<string name="settings_proxy_server">服务器</string>
+<string name="settings_proxy_port">端口</string>
+<string name="comments_proxy_port">默认端口:1080</string>
+<string name="settings_proxy_username">用户名</string>
+<string name="settings_proxy_password">密码</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>
+<string name="notification_preferences">通知设置</string>
+<string name="notification_enable_vibrate_title">允许振动</string>
+<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_mount">你需要有已插入设备并可以写入的SD存储来允许历史记录</string>
+<string name="history_on_off">允许历史记录</string>
+<string name="settings_smack_debug">允许XMPPP调试</string>
+<string name="settings_full_jid_login">使用我完整的Jid作为用户名</string>
+<string name="settings_full_jid_login_sum">某些例如Google Talk这样的服务器需要</string>
+
+<!-- Subscription class -->
+<string name="SubscriptAccept">订阅已经接受</string>
+<string name="SubscriptError">订阅错误</string>
+<string name="SubscriptRefused">订阅被拒绝</string>
+<string name="SubscriptText">%s 想要添加你到他/她的好友列表.批准他/她的请求吗?</string>
+<string name="SubscriptTitle">批准好友请求?</string>
+
+<!-- BeemChatManager -->
+<string name="BeemChatManagerNewMessage">你有一个新消息</string>
+
+<!-- BeemBroadcastReceiver class -->
+<string name="BeemBroadcastReceiverDisconnect">BEEM:你的连接已断开</string>
+
+<!-- XmppConnectionAdapter class -->
+<string name="AcceptContactRequest">%s刚将你添加到他/她的好友列表.</string>
+<string name="AcceptContactRequestFrom">批准%s联系你</string>
+
+<!-- Activities -->
+<string name="login_tag">Beem - 登录中</string>
+<string name="edit_settings_name">Beem - 设置</string>
+<string name="edit_settings_tag">Beem - 编制设置</string>
+<string name="create_account_name">Beem - 创建新账号 </string>
+<string name="create_account_tag">Beem - 创建新账号中</string>
+<string name="contact_list_name">Beem - 联系人</string>
+<string name="contact_list_tag">Beem - 联系人列表</string>
+<string name="user_info_name">Beem - 用户信息</string>
+
+<!-- Buttons -->
+<string name="button_create_account">创建这个账户</string>
+<string name="button_create_login_account">创建并使用这个账户</string>
+
+<!-- LogAs Activity -->
+<string name="login_username">用户名</string>
+<string name="login_password">密码</string>
+<string name="login_error_dialog_title">登录 - 错误</string>
+<string name="login_close_dialog_button">关闭</string>
+<string name="login_menu_create_account">创建一个账号</string>
+<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_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_menu_login">登陆</string>
+<string name="login_no_connectivity">没有可用连接</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>
+
+<!-- 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="network_preferences">网络选项</string>
+<string name="proxy_proxy_settings">代理选项</string>
+<string name="proxy_user_settings">代理选项</string>
+
+<!-- EditSettings Activity Tabs -->
+<string name="settings_tab_tag_account">编辑账户设定</string>
+<string name="settings_tab_label_account">帐户</string>
+<string name="settings_tab_tag_xmpp">编辑XMPP设置</string>
+<string name="settings_tab_label_xmpp">XMPP</string>
+<string name="settings_tab_tag_proxy">编辑代理设置</string>
+<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"><b>请输入您已有账号的信息</b></string>
+<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_close_dialog_button">关闭</string>
+<string name="create_account_successfull_after">账号%s已成功创建</string>
+<string name="create_account_err_username">错误的Jabber ID</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>
+
+<!-- ContactList Activity -->
+<string name="contact_list_menu_add_contact">添加联系人</string>
+<string name="contact_list_menu_status">改变状态</string>
+<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>
+
+<!-- UserInfo dialog -->
+<string name="userinfo_label_alias">别名</string>
+<string name="userinfo_label_chg_group">管理组</string>
+<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_yes">是</string>
+<string name="userinfo_no">否</string>
+<string name="userinfo_sureresend">确定要重新发送邀请吗?</string>
+
+<string name="chat_name">Beem - 聊天</string>
+<string name="chat_input_default_value">输入信息</string>
+<string name="chat_self">我</string>
+<string name="chat_error">错误</string>
+<string name="chat_send_message">发送</string>
+<string name="chat_menu_contacts_list">联系人列表</string>
+<string name="chat_menu_change_chat">切换聊天窗口</string>
+<string name="chat_dialog_change_chat_title">打开聊天窗口</string>
+<string name="chat_menu_close_chat">关闭聊天窗口</string>
+<string name="chat_no_more_chats">没有活动的聊天窗口</string>
+<string name="chat_state_composing">正在输入信息</string>
+<string name="chat_state_gone">已经离开了会话</string>
+<string name="chat_state_active">关注会话</string>
+<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_dnd">请勿打扰</string>
+<string name="contact_status_msg_away">离开</string>
+<string name="contact_status_msg_xa">没有空</string>
+<string name="contact_status_msg_offline">连接已断开</string>
+
+<string name="privacy_list_name">Beem - 管理我的隐私列表</string>
+<string name="privacy_list_no_data">没有隐私列表</string>
+<string name="privacy_list_menu_create">创建隐私列表</string>
+<string name="privacy_list_create_dialog_title">创建隐私列表</string>
+<string name="privacy_list_create_dialog_list_name_label">标题</string>
+<string name="privacy_list_create_dialog_create_button">创建</string>
+<string name="privacy_list_select_dialog_buddies">好友</string>
+<string name="privacy_list_select_dialog_groups">组</string>
+<string name="privacy_list_select_dialog_delete">删除</string>
+<string name="privacy_list_delete_dialog_msg">确定要删除 \'%s\'隐私列表吗 ?</string>
+<string name="privacy_list_delete_dialog_yes">是</string>
+<string name="privacy_list_delete_dialog_no">否</string>
+
+<string name="UpdateButton">更新</string>
+
+<!-- Error messages -->
+
+<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">Jid畸形</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="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>
--- a/res/values/arrays.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values/arrays.xml Fri Apr 15 03:01:09 2011 +0200
@@ -13,6 +13,11 @@
<item name="Unavailable">@string/contact_status_msg_xa</item>
<item name="Disconnected">@string/contact_status_msg_offline</item>
</string-array>
+ <string-array name="pick_photo_items">
+ <item>@string/take_photo</item>
+ <item>@string/pick_photo</item>
+ <item>@string/delete_avatar</item>
+ </string-array>
<string-array name="privacy_list_select_dialog">
<item name="@string/privacy_list_select_dialog_buddies">Buddies</item>
<item name="@string/privacy_list_select_dialog_groups">Groups</item>
--- a/res/values/strings.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values/strings.xml Fri Apr 15 03:01:09 2011 +0200
@@ -55,6 +55,13 @@
<string name="MenuConnection">Edit account</string>
<string name="ChangeStatusOk">Updating status</string>
<string name="ChangeStatusNoChange">Nothing to change</string>
+ <string name="my_avatar">My avatar</string>
+ <string name="select_avatar">Choose your avatar</string>
+ <string name="take_photo">Take a photo</string>
+ <string name="pick_photo">Select a picture</string>
+ <string name="delete_avatar">No avatar</string>
+ <string name="photoPickerNotFoundText">Photo picker not found</string>
+
<!-- Settings class -->
<string name="SettingsText">Edit your username</string>
@@ -86,7 +93,7 @@
<string name="CLP_hidden_contact">Hide buddies</string>
<string name="CLP_hidden_contact_sum">Check this option to hide unconnected buddies
</string>
- <string name="settings_account_username">Username</string>
+ <string name="settings_account_username">Username (JID)</string>
<string name="login_username_info_default">beem@beem-project.com</string>
<string name="settings_account_password">Password</string>
<string name="settings_account_server">Server</string>
@@ -117,14 +124,26 @@
<string name="notification_enable_vibrate_sum">Enable vibrate on incoming messages</string>
<string name="notification_snd_title">Message ringtone</string>
<string name="notification_snd_sum">Set your incoming message ringtone</string>
+ <string name="settings_chat_compact">Chat compact</string>
+ <string name="settings_chat_compact_sum">Set the chat windows compact</string>
+ <string name="history">History</string>
+ <string name="history_sum">Check this to save chats on the SDCard</string>
+ <string name="history_mount">You need to have SDcard mounted and writable to enable history</string>
+ <string name="history_on_off">Enable history messages</string>
+ <string name="chat_preferences">Chat</string>
+ <string name="chat_preferences_sum">History, Layout size ...</string>
+ <string name="chat_history_path">History path</string>
+ <string name="chat_history_path_sum">Chat conversations are saved in a folder on the SDCard</string>
+ <string name="settings_smack_debug">Enable XMPP debug</string>
+ <string name="settings_full_jid_login">Use my full JID as username</string>
+ <string name="settings_full_jid_login_sum">Need by some server such as Google Talk</string>
-
<!-- Subscription class -->
<string name="SubscriptAccept">Subscription accepted</string>
<string name="SubscriptError">Subscription error</string>
<string name="SubscriptRefused">Subscription refused</string>
- <string name="SubscriptText">%s wants to add you to his/her buddy list. Do you want to authorize him/her ?</string>
- <string name="SubscriptTitle">Authorize buddy ?</string>
+ <string name="SubscriptText">%s wants to add you to his/her buddy list. Do you want to authorize him/her?</string>
+ <string name="SubscriptTitle">Authorize buddy?</string>
<!-- BeemChatManager -->
<string name="BeemChatManagerNewMessage">You\'ve a new message</string>
@@ -193,6 +212,9 @@
<string name="network_preferences">Network options</string>
<string name="proxy_proxy_settings">Proxy settings</string>
<string name="proxy_user_settings">Proxy settings</string>
+ <string name="history_preferences">History</string>
+ <string name="chat_layout_option">Chat layout</string>
+
<!-- EditSettings Activity Tabs -->
<string name="settings_tab_tag_account">edit_settings_tab_account</string>
@@ -236,11 +258,11 @@
<string name="userinfo_label_block">Block</string>
<string name="userinfo_label_delete">Delete</string>
<string name="userinfo_resend">Suscription resend</string>
- <string name="userinfo_sure2delete">Are you sure you want to delete this contact ?
+ <string name="userinfo_sure2delete">Are you sure you want to delete this contact?
</string>
<string name="userinfo_yes">Yes</string>
<string name="userinfo_no">No</string>
- <string name="userinfo_sureresend">Are you sure you want to resend invit ?</string>
+ <string name="userinfo_sureresend">Are you sure you want to resend invit?</string>
<string name="chat_name">Beem - Chat</string>
<string name="chat_input_default_value">Type your message</string>
@@ -279,7 +301,7 @@
<string name="privacy_list_select_dialog_buddies">Buddies</string>
<string name="privacy_list_select_dialog_groups">Groups</string>
<string name="privacy_list_select_dialog_delete">Delete</string>
- <string name="privacy_list_delete_dialog_msg">Do you really want to delete the privacy list entitled \'%s\' ?</string>
+ <string name="privacy_list_delete_dialog_msg">Do you really want to delete the privacy list entitled \'%s\'?</string>
<string name="privacy_list_delete_dialog_yes">Yes</string>
<string name="privacy_list_delete_dialog_no">No</string>
--- a/res/values/styles.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/res/values/styles.xml Fri Apr 15 03:01:09 2011 +0200
@@ -13,7 +13,7 @@
<item name="android:enabled">true</item>
</style>
<style name="Theme.BEEM.Default" parent="@android:style/Theme">
- <item name="android:windowBackground">@drawable/background</item>
+<!-- <item name="android:windowBackground">@drawable/background</item>-->
</style>
--- a/src/com/beem/project/beem/BeemApplication.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/BeemApplication.java Fri Apr 15 03:01:09 2011 +0200
@@ -83,11 +83,18 @@
public static final String NOTIFICATION_VIBRATE_KEY = "notification_vibrate";
/** Preference key for notification sound. */
public static final String NOTIFICATION_SOUND_KEY = "notification_sound";
+ /** Preference key for smack debugging. */
+ public static final String SMACK_DEBUG_KEY = "smack_debug";
+ /** Preference key for full Jid for login. */
+ public static final String FULL_JID_LOGIN_KEY = "full_jid_login";
+ /** Preference key for history path on the SDCard. */
+ public static final String CHAT_HISTORY_KEY = "settings_chat_history_path";
//TODO add the other one
private boolean mIsConnected;
private boolean mIsAccountConfigured;
+ private boolean mPepEnabled;
private SharedPreferences mSettings;
private final PreferenceListener mPreferenceListener = new PreferenceListener();
@@ -111,7 +118,6 @@
public void onTerminate() {
super.onTerminate();
mSettings.unregisterOnSharedPreferenceChangeListener(mPreferenceListener);
-
}
/**
@@ -139,6 +145,24 @@
}
/**
+ * Enable Pep in the application context.
+ *
+ * @param enabled true to enable pep
+ */
+ public void setPepEnabled(boolean enabled) {
+ mPepEnabled = enabled;
+ }
+
+ /**
+ * Check if Pep is enabled.
+ *
+ * @return true if enabled
+ */
+ public boolean isPepEnabled() {
+ return mPepEnabled;
+ }
+
+ /**
* A listener for all the change in the preference file. It is used to maintain the global state of the application.
*/
private class PreferenceListener implements SharedPreferences.OnSharedPreferenceChangeListener {
--- a/src/com/beem/project/beem/BeemService.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/BeemService.java Fri Apr 15 03:01:09 2011 +0200
@@ -48,7 +48,6 @@
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.Roster.SubscriptionMode;
-import org.jivesoftware.smack.provider.PrivacyProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.provider.DelayInfoProvider;
import org.jivesoftware.smackx.provider.DiscoverInfoProvider;
@@ -133,6 +132,8 @@
* Initialize the connection.
*/
private void initConnectionConfig() {
+ // TODO add an option for this ?
+// SmackConfiguration.setPacketReplyTimeout(30000);
mUseProxy = mSettings.getBoolean(BeemApplication.PROXY_USE_KEY, false);
if (mUseProxy) {
String stype = mSettings.getString(BeemApplication.PROXY_TYPE_KEY, "HTTP");
@@ -154,7 +155,8 @@
|| mSettings.getBoolean("settings_key_gmail", false)) {
mConnectionConfiguration.setSecurityMode(SecurityMode.required);
}
- mConnectionConfiguration.setDebuggerEnabled(true);
+ if (mSettings.getBoolean(BeemApplication.SMACK_DEBUG_KEY, false))
+ mConnectionConfiguration.setDebuggerEnabled(true);
mConnectionConfiguration.setSendPresence(true);
// maybe not the universal path, but it works on most devices (Samsung Galaxy, Google Nexus One)
mConnectionConfiguration.setTruststoreType("BKS");
@@ -194,7 +196,7 @@
registerReceiver(mOnOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
registerReceiver(mOnOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
}
- String tmpJid = mSettings.getString(BeemApplication.ACCOUNT_USERNAME_KEY, "");
+ String tmpJid = mSettings.getString(BeemApplication.ACCOUNT_USERNAME_KEY, "").trim();
mLogin = StringUtils.parseName(tmpJid);
mPassword = mSettings.getString(BeemApplication.ACCOUNT_PASSWORD_KEY, "");
mPort = DEFAULT_XMPP_PORT;
@@ -202,13 +204,15 @@
mHost = mService;
if (mSettings.getBoolean("settings_key_specific_server", false)) {
- mHost = mSettings.getString("settings_key_xmpp_server", "");
+ mHost = mSettings.getString("settings_key_xmpp_server", "").trim();
if ("".equals(mHost))
- mHost = StringUtils.parseServer(tmpJid);
+ mHost = mService;
String tmpPort = mSettings.getString("settings_key_xmpp_port", "5222");
- mPort = ("".equals(tmpPort)) ? DEFAULT_XMPP_PORT : Integer.parseInt(tmpPort);
+ if (!"".equals(tmpPort))
+ mPort = Integer.parseInt(tmpPort);
}
- if ("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;
}
@@ -229,7 +233,6 @@
@Override
public void onDestroy() {
super.onDestroy();
- resetStatus();
mNotificationManager.cancelAll();
unregisterReceiver(mReceiver);
mSettings.unregisterOnSharedPreferenceChangeListener(mPreferenceListener);
@@ -330,7 +333,7 @@
pm.addIQProvider("query", "http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());
// Privacy
- pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
+ //pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
// Delayed Delivery only the new version
pm.addExtensionProvider("delay", "urn:xmpp:delay", new DelayInfoProvider());
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/providers/AvatarProvider.java Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,204 @@
+/*
+ BEEM is a videoconference application on the Android Platform.
+
+ Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ This file is part of BEEM.
+
+ BEEM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ BEEM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with BEEM. If not, see <http://www.gnu.org/licenses/>.
+
+ Please send bug reports with examples or suggestions to
+ contact@beem-project.com or http://dev.beem-project.com/
+
+ Epitech, hereby disclaims all copyright interest in the program "Beem"
+ written by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ Nicolas Sadirac, November 26, 2009
+ President of Epitech.
+
+ Flavien Astraud, November 26, 2009
+ Head of the EIP Laboratory.
+
+*/
+package com.beem.project.beem.providers;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Environment;
+import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+/**
+ * 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");
+
+ private static final String TAG = AvatarProvider.class.getSimpleName();
+ private static final String AUTHORITY = "com.beem.project.beem.providers.avatarprovider";
+
+ /**
+ * The differents columns available in the AvatarProvider.
+ */
+ public static interface Columns {
+
+ /** The id of the avatar. */
+ String ID = "_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);
+ // should not be needed if we pass AVATAR on the constructor but it does not work
+ URIMATCHER.addURI(AUTHORITY, null, AVATAR);
+ }
+
+ private String mDataPath;
+
+ /**
+ * Create an AvatarProvider.
+ */
+ public AvatarProvider() {
+ }
+
+ /**
+ * 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
+ * @throws FileNotFoundException if the mode passed is illegal
+ */
+ public static int modeToMode(Uri uri, String mode) throws FileNotFoundException {
+ int modeBits;
+ 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
+ | ParcelFileDescriptor.MODE_TRUNCATE;
+ } else if ("wa".equals(mode)) {
+ modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
+ | ParcelFileDescriptor.MODE_CREATE
+ | ParcelFileDescriptor.MODE_APPEND;
+ } else if ("rw".equals(mode)) {
+ modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+ | ParcelFileDescriptor.MODE_CREATE;
+ } else if ("rwt".equals(mode)) {
+ modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+ | ParcelFileDescriptor.MODE_CREATE
+ | ParcelFileDescriptor.MODE_TRUNCATE;
+ } else {
+ throw new FileNotFoundException("Bad mode for " + uri + ": "
+ + mode);
+ }
+ return modeBits;
+ }
+
+ @Override
+ public boolean onCreate() {
+ File cacheDir = Environment.getExternalStorageDirectory();
+ File dataPath = new File(cacheDir, "/Android/data/com.beem.project.beem/cache/avatar");
+ dataPath.mkdirs();
+ mDataPath = dataPath.getAbsolutePath();
+ return true;
+ }
+
+ @Override
+ 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);
+ return ParcelFileDescriptor.open(data, modeBits);
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
+ MatrixCursor c = new MatrixCursor(columnNames);
+ int match = URIMATCHER.match(uri);
+ switch (match) {
+ case AVATAR:
+ File[] files = new File(mDataPath).listFiles();
+ if (files != null) {
+ for (File f : files) {
+ c.newRow().add(f.getName());
+ }
+ }
+ break;
+ case AVATAR_ID:
+ String id = uri.getPathSegments().get(0);
+ File f = new File(mDataPath, id);
+ if (f.exists())
+ c.newRow().add(f.getName());
+ break;
+ default:
+ Log.w(TAG, "Unsupported uri for query match = " + match);
+ }
+ return c;
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ int res = 0;
+ String id = uri.getPath();
+ File data = new File(mDataPath, id);
+ if (data.exists() && data.delete()) {
+ res++;
+ }
+ return res;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ return null;
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ return null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/providers/package-info.java Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,49 @@
+/*
+ BEEM is a videoconference application on the Android Platform.
+
+ Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ This file is part of BEEM.
+
+ BEEM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ BEEM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with BEEM. If not, see <http://www.gnu.org/licenses/>.
+
+ Please send bug reports with examples or suggestions to
+ contact@beem-project.com or http://dev.beem-project.com/
+
+ Epitech, hereby disclaims all copyright interest in the program "Beem"
+ written by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ Nicolas Sadirac, November 26, 2009
+ President of Epitech.
+
+ Flavien Astraud, November 26, 2009
+ Head of the EIP Laboratory.
+
+*/
+
+
+/**
+ * ContentProviders for Beem.
+ */
+package com.beem.project.beem.providers;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/service/BeemAvatarCache.java Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,133 @@
+/*
+ BEEM is a videoconference application on the Android Platform.
+
+ Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ This file is part of BEEM.
+
+ BEEM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ BEEM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with BEEM. If not, see <http://www.gnu.org/licenses/>.
+
+ Please send bug reports with examples or suggestions to
+ contact@beem-project.com or http://dev.beem-project.com/
+
+ Epitech, hereby disclaims all copyright interest in the program "Beem"
+ written by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ Nicolas Sadirac, November 26, 2009
+ President of Epitech.
+
+ Flavien Astraud, November 26, 2009
+ Head of the EIP Laboratory.
+
+*/
+package com.beem.project.beem.service;
+
+import android.content.ContentResolver;
+import android.content.Context;
+
+import android.database.Cursor;
+
+import android.net.Uri;
+
+import com.beem.project.beem.providers.AvatarProvider;
+import com.beem.project.beem.smack.avatar.AvatarCache;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * An implementation of an AvatarCache which store the data of the filesystem.
+ */
+public class BeemAvatarCache implements AvatarCache {
+
+ private static final String TAG = BeemAvatarCache.class.getSimpleName();
+
+ private Context mContext;
+ private ContentResolver mContentResolver;
+
+ /**
+ * Create a BeemAvatarCache.
+ *
+ * @param ctx The android context of the cache.
+ */
+ public BeemAvatarCache(final Context ctx) {
+ mContext = ctx;
+ mContentResolver = mContext.getContentResolver();
+ }
+
+
+ @Override
+ public void put(String key, byte[] data) throws IOException {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(key).build();
+ OutputStream os = new BufferedOutputStream(mContentResolver.openOutputStream(uri));
+ try {
+ os.write(data);
+ } finally {
+ os.close();
+ }
+ }
+
+ @Override
+ public void put(String key, InputStream in) throws IOException {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(key).build();
+ OutputStream os = new BufferedOutputStream(mContentResolver.openOutputStream(uri));
+ try {
+ byte[] data = new byte[1024];
+ int nbread;
+ while ((nbread = in.read(data)) != -1)
+ os.write(data, 0, nbread);
+ } finally {
+ in.close();
+ os.close();
+ }
+ }
+
+ @Override
+ public byte[] get(String key) throws IOException {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(key).build();
+ InputStream is = new BufferedInputStream(mContentResolver.openInputStream(uri));
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ try {
+ byte[] data = new byte[1024];
+ is.read(data);
+ bos.write(data);
+ } finally {
+ is.close();
+ }
+ return bos.toByteArray();
+ }
+
+ @Override
+ public boolean contains(String key) {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(key).build();
+ Cursor c = mContentResolver.query(uri, null, null, null, null);
+ boolean res = c.getCount() > 0;
+ c.close();
+ return res;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/service/BeemAvatarManager.java Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,170 @@
+/*
+ BEEM is a videoconference application on the Android Platform.
+
+ Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ This file is part of BEEM.
+
+ BEEM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ BEEM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with BEEM. If not, see <http://www.gnu.org/licenses/>.
+
+ Please send bug reports with examples or suggestions to
+ contact@beem-project.com or http://dev.beem-project.com/
+
+ Epitech, hereby disclaims all copyright interest in the program "Beem"
+ written by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ Nicolas Sadirac, November 26, 2009
+ President of Epitech.
+
+ Flavien Astraud, November 26, 2009
+ Head of the EIP Laboratory.
+
+*/
+
+package com.beem.project.beem.service;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.provider.MediaStore;
+import android.util.Log;
+
+import com.beem.project.beem.smack.avatar.AvatarManager;
+import com.beem.project.beem.smack.avatar.AvatarCache;
+import com.beem.project.beem.smack.avatar.AvatarMetadataExtension;
+
+import java.security.NoSuchAlgorithmException;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import com.beem.project.beem.smack.pep.PepSubManager;
+import org.jivesoftware.smack.Connection;
+
+/**
+ * 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();
+ private static final int JPEG_QUALITY = 100;
+
+ private Context mContext;
+
+ /**
+ * Create a BeemAvatarManager.
+ *
+ * @param ctx the Android context
+ * @param con the connection
+ * @param pepMgr the PepSubManager of the connection
+ * @param cache the cache which will store the avatars
+ * @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) {
+ 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
+ */
+ public boolean publishAvatar(Uri avatarUri) {
+ try {
+ Bitmap bmp = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), avatarUri);
+ return publishAvatar(bmp);
+ } catch (IOException e) {
+ Log.d(TAG, "Error while publishing avatar " + avatarUri, e);
+ }
+ return false;
+ }
+
+ /**
+ * 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
+ */
+ private boolean publishAvatar(Bitmap bitmap) {
+ //TODO use the metadata available in the mediastore
+ AvatarMetadataExtension meta = new AvatarMetadataExtension();
+ // Probably a bug on prosody but only the last data sent is kept
+ // and in beem we retrieve the first info
+ AvatarMetadataExtension.Info jpeg = publishBitmap(bitmap, Bitmap.CompressFormat.JPEG, JPEG_QUALITY);
+ // The png format is mandatory for interoperability
+ AvatarMetadataExtension.Info png = publishBitmap(bitmap, Bitmap.CompressFormat.PNG, JPEG_QUALITY);
+ if (png == null)
+ return false;
+ meta.addInfo(png);
+ if (jpeg != null)
+ meta.addInfo(jpeg);
+ publishAvatarMetaData(png.getId(), meta);
+ return true;
+ }
+
+ /**
+ * 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
+ * @return the resulting info associate with this bitmap. null if the operation failed
+ */
+ private AvatarMetadataExtension.Info publishBitmap(Bitmap bmp, Bitmap.CompressFormat format, int quality) {
+ try {
+ byte[] data = getBitmapByte(bmp, format, quality);
+ String dataid = getAvatarId(data);
+ if (!publishAvatarData(data))
+ return null;
+ String mimetype = "image/png";
+ if (Bitmap.CompressFormat.JPEG == format)
+ mimetype = "image/jpeg";
+ AvatarMetadataExtension.Info info = new AvatarMetadataExtension.Info(dataid, mimetype, data.length);
+ info.setHeight(bmp.getHeight());
+ info.setWidth(bmp.getWidth());
+ return info;
+ } catch (NoSuchAlgorithmException ex) {
+ return null;
+ }
+ }
+
+ /**
+ * 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
+ * @return the bitmap data or a array of 0 element on error
+ */
+ private byte[] getBitmapByte(Bitmap bitmap, Bitmap.CompressFormat format, int quality) {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ if (bitmap.compress(format, quality, bos))
+ return bos.toByteArray();
+ else
+ return new byte[0];
+ }
+
+}
--- a/src/com/beem/project/beem/service/BeemChatManager.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/service/BeemChatManager.java Fri Apr 15 03:01:09 2011 +0200
@@ -43,6 +43,7 @@
*/
package com.beem.project.beem.service;
+import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -56,11 +57,13 @@
import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.os.Environment;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.util.Log;
+import com.beem.project.beem.BeemApplication;
import com.beem.project.beem.BeemService;
import com.beem.project.beem.R;
import com.beem.project.beem.service.aidl.IChat;
@@ -173,6 +176,16 @@
return mChats.get(key);
}
ChatAdapter res = new ChatAdapter(chat);
+ boolean history = PreferenceManager.getDefaultSharedPreferences(mService.getBaseContext()).getBoolean(
+ "settings_key_history", false);
+ String accountUser = PreferenceManager.getDefaultSharedPreferences(mService.getBaseContext()).getString(
+ 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/";
+ res.setHistory(history);
+ res.setAccountUser(accountUser);
+ res.setHistoryPath(new File(Environment.getExternalStorageDirectory(), historyPath));
Log.d(TAG, "getChat put " + key);
mChats.put(key, res);
return res;
--- a/src/com/beem/project/beem/service/ChatAdapter.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/service/ChatAdapter.java Fri Apr 15 03:01:09 2011 +0200
@@ -43,6 +43,9 @@
*/
package com.beem.project.beem.service;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -52,9 +55,12 @@
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.ChatState;
import org.jivesoftware.smackx.ChatStateListener;
+import org.jivesoftware.smackx.ChatState;
+import android.os.Environment;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
@@ -80,8 +86,11 @@
private final RemoteCallbackList<IMessageListener> mRemoteListeners = new RemoteCallbackList<IMessageListener>();
private final MsgListener mMsgListener = new MsgListener();
private SessionID mOtrSessionId;
+ private boolean mIsHistory;
+ private File mHistoryPath;
+ private String mAccountUser;
- /**
+ /**
* Constructor.
* @param chat The chat to adapt
*/
@@ -100,15 +109,15 @@
return mParticipant;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public void sendMessage(com.beem.project.beem.service.Message message) throws RemoteException {
- org.jivesoftware.smack.packet.Message send = new org.jivesoftware.smack.packet.Message();
- String msgBody = message.getBody();
- send.setTo(message.getTo());
- Log.w(TAG, "message to " + message.getTo());
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sendMessage(com.beem.project.beem.service.Message message) throws RemoteException {
+ org.jivesoftware.smack.packet.Message send = new org.jivesoftware.smack.packet.Message();
+ String msgBody = message.getBody();
+ send.setTo(message.getTo());
+ Log.w(TAG, "message to " + message.getTo());
if (mOtrSessionId != null) {
String body;
@@ -120,20 +129,22 @@
}
}
- send.setBody(msgBody);
- send.setThread(message.getThread());
- send.setSubject(message.getSubject());
- send.setType(org.jivesoftware.smack.packet.Message.Type.chat);
- // TODO gerer les messages contenant des XMPPError
- // send.set
- try {
- mAdaptee.sendMessage(send);
- mMessages.add(message);
- } catch (XMPPException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ send.setBody(msgBody);
+ send.setThread(message.getThread());
+ send.setSubject(message.getSubject());
+ send.setType(org.jivesoftware.smack.packet.Message.Type.chat);
+ // TODO gerer les messages contenant des XMPPError
+ // send.set
+ try {
+ mAdaptee.sendMessage(send);
+ mMessages.add(message);
+ } catch (XMPPException e) {
+ e.printStackTrace();
}
+ String state = Environment.getExternalStorageState();
+ if (mIsHistory && Environment.MEDIA_MOUNTED.equals(state))
+ saveHistory(message, mAccountUser);
+ }
public void sendMessage(String msg) {
Message msgToSend = new Message(mParticipant.getJIDWithRes(), Message.MSG_TYPE_CHAT);
@@ -145,91 +156,169 @@
}
}
- /**
- * {@inheritDoc}
- */
- @Override
- public void addMessageListener(IMessageListener listen) {
- if (listen != null)
- mRemoteListeners.register(listen);
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void addMessageListener(IMessageListener listen) {
+ if (listen != null)
+ mRemoteListeners.register(listen);
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeMessageListener(IMessageListener listen) {
- if (listen != null) {
- mRemoteListeners.unregister(listen);
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void removeMessageListener(IMessageListener listen) {
+ if (listen != null) {
+ mRemoteListeners.unregister(listen);
}
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getState() throws RemoteException {
+ return mState;
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public String getState() throws RemoteException {
- return mState;
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setState(String state) throws RemoteException {
+ mState = state;
+ }
+
+ /**
+ * Get the adaptee for the Chat.
+ * @return The real chat object
+ */
+ public Chat getAdaptee() {
+ return mAdaptee;
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public void setState(String state) throws RemoteException {
- mState = state;
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setOpen(boolean isOpen) {
+ this.mIsOpen = isOpen;
+ }
- /**
- * Get the adaptee for the Chat.
- * @return The real chat object
- */
- public Chat getAdaptee() {
- return mAdaptee;
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean isOpen() {
+ return mIsOpen;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<Message> getMessages() throws RemoteException {
+ return Collections.unmodifiableList(mMessages);
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public void setOpen(boolean isOpen) {
- this.mIsOpen = isOpen;
+ /**
+ * Add a message in the chat history.
+ * @param msg the message to add
+ */
+ void addMessage(Message msg) {
+ if (mMessages.size() == HISTORY_MAX_SIZE)
+ mMessages.remove(0);
+ mMessages.add(msg);
+ if (!"".equals(msg.getBody()) && msg.getBody() != null) {
+ String state = Environment.getExternalStorageState();
+ if (mIsHistory && Environment.MEDIA_MOUNTED.equals(state))
+ saveHistory(msg, msg.getFrom());
+ }
+ }
+
+ /**
+ * Save message in SDCard.
+ * @param msg the message receive
+ * @param contactName the name of the contact
+ */
+ public void saveHistory(Message msg, String contactName) {
+ File path = getHistoryPath();
+ File filepath;
+ if (contactName.equals(msg.getFrom()))
+ filepath = new File(path, StringUtils.parseBareAddress(contactName));
+ else
+ filepath = new File(path, StringUtils.parseBareAddress(msg.getTo()));
+ path.mkdirs();
+ try {
+ FileWriter file = new FileWriter(filepath, true);
+ String log = msg.getTimestamp() + " " + contactName + " " + msg.getBody()
+ + System.getProperty("line.separator");
+ file.write(log);
+ file.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Error writing chat history", e);
}
+ }
+ /**
+ * set History enable/disable.
+ * @param isHisory history state
+ */
+ public void setHistory(boolean isHisory) {
+ this.mIsHistory = isHisory;
+ }
+
+ /**
+ * get History state.
+ * @return mIsHistory
+ */
+ public boolean getHistory() {
+ return mIsHistory;
+ }
+
+ /**
+ * Set Account user name.
+ * @param accountUser user name
+ */
+ public void setAccountUser(String accountUser) {
+ mAccountUser = accountUser;
+ }
+
+ /**
+ * get Account user name.
+ * @return mAccountUser
+ */
+ public String getAccountUser() {
+ return mAccountUser;
+ }
+
+ /**
+ * set History path.
+ * @param historyPath history path
+ */
+ public void setHistoryPath(File historyPath) {
+ this.mHistoryPath = historyPath;
+ }
+
+ /**
+ * get History path.
+ * @return mHistoryPath;
+ */
+ public File getHistoryPath() {
+ return mHistoryPath;
+ }
+
+ /**
+ * Listener.
+ */
+ private class MsgListener implements ChatStateListener {
/**
- * {@inheritDoc}
- */
- @Override
- public boolean isOpen() {
- return mIsOpen;
- }
-
- /**
- * {@inheritDoc}
+ * Constructor.
*/
- @Override
- public List<Message> getMessages() throws RemoteException {
- return Collections.unmodifiableList(mMessages);
- }
-
- /**
- * Add a message in the chat history.
- * @param msg the message to add
- */
- void addMessage(Message msg) {
- if (mMessages.size() == HISTORY_MAX_SIZE)
- mMessages.remove(0);
- mMessages.add(msg);
- }
-
- /**
- * Listener.
- */
- private class MsgListener implements ChatStateListener {
- /**
- * Constructor.
- */
- public MsgListener() { }
+ public MsgListener() { }
@Override
public void processMessage(Chat chat, org.jivesoftware.smack.packet.Message message) {
--- a/src/com/beem/project/beem/service/Contact.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/service/Contact.java Fri Apr 15 03:01:09 2011 +0200
@@ -140,6 +140,28 @@
}
/**
+ * Make an xmpp uri for a spcific jid.
+ *
+ * @param jid the jid to represent as an uri
+ * @return an uri representing this jid.
+ */
+ public static Uri makeXmppUri(String jid) {
+ StringBuilder build = new StringBuilder("xmpp:");
+ String name = StringUtils.parseName(jid);
+ build.append(name);
+ if (!"".equals(name))
+ build.append('@');
+ build.append(StringUtils.parseServer(jid));
+ String resource = StringUtils.parseResource(jid);
+ if (!"".equals(resource)) {
+ build.append('/');
+ build.append(resource);
+ }
+ Uri u = Uri.parse(build.toString());
+ return u;
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -387,14 +409,7 @@
* @return the URI
*/
public Uri toUri() {
- StringBuilder build = new StringBuilder("xmpp:");
- String name = StringUtils.parseName(mJID);
- build.append(name);
- if (!"".equals(name))
- build.append('@');
- build.append(StringUtils.parseServer(mJID));
- Uri u = Uri.parse(build.toString());
- return u;
+ return makeXmppUri(mJID);
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/service/UserInfo.aidl Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,46 @@
+/*
+ BEEM is a videoconference application on the Android Platform.
+
+ Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ This file is part of BEEM.
+
+ BEEM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ BEEM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with BEEM. If not, see <http://www.gnu.org/licenses/>.
+
+ Please send bug reports with examples or suggestions to
+ contact@beem-project.com or http://dev.beem-project.com/
+
+ Epitech, hereby disclaims all copyright interest in the program "Beem"
+ written by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ Nicolas Sadirac, November 26, 2009
+ President of Epitech.
+
+ Flavien Astraud, November 26, 2009
+ Head of the EIP Laboratory.
+
+*/
+package com.beem.project.beem.service;
+
+parcelable UserInfo;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/service/UserInfo.java Fri Apr 15 03:01:09 2011 +0200
@@ -0,0 +1,128 @@
+/*
+ BEEM is a videoconference application on the Android Platform.
+
+ Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ This file is part of BEEM.
+
+ BEEM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ BEEM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with BEEM. If not, see <http://www.gnu.org/licenses/>.
+
+ Please send bug reports with examples or suggestions to
+ contact@beem-project.com or http://dev.beem-project.com/
+
+ Epitech, hereby disclaims all copyright interest in the program "Beem"
+ written by Frederic-Charles Barthelery,
+ Jean-Manuel Da Silva,
+ Nikita Kozlov,
+ Philippe Lago,
+ Jean Baptiste Vergely,
+ Vincent Veronis.
+
+ Nicolas Sadirac, November 26, 2009
+ President of Epitech.
+
+ 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.
+ *
+ */
+public class UserInfo implements Parcelable {
+
+ /** Parcelable.Creator needs by Android. */
+ public static final Parcelable.Creator<UserInfo> CREATOR = new Parcelable.Creator<UserInfo>() {
+
+ @Override
+ public UserInfo createFromParcel(Parcel source) {
+ return new UserInfo(source);
+ }
+
+ @Override
+ public UserInfo[] newArray(int size) {
+ return new UserInfo[size];
+ }
+ };
+
+ private final String mFullJid;
+ private String mAvatarId;
+
+ /**
+ * Construct a UserInfo from a parcel.
+ * @param in parcel to use for construction
+ */
+ private UserInfo(final Parcel in) {
+ mFullJid = in.readString();
+ mAvatarId = in.readString();
+ }
+
+ /**
+ * Constructor.
+ * @param jid jid of the user
+ */
+ public UserInfo(final String jid) {
+ // the jid is case insensitive
+ mFullJid = jid;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mFullJid);
+ dest.writeString(mAvatarId);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ /**
+ * Get the avatar id of the user.
+ *
+ * @return the avatar id
+ */
+ public String getAvatarId() {
+ return mAvatarId;
+ }
+
+ /**
+ * Set the avater id of the user.
+ *
+ * @param avatarId the avatar id
+ */
+ public void setAvatarId(String avatarId) {
+ mAvatarId = avatarId;
+ }
+
+ /**
+ * Get the full jid of the user.
+ *
+ * @return the jid
+ */
+ public String getJid() {
+ return mFullJid;
+ }
+}
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Fri Apr 15 03:01:09 2011 +0200
@@ -53,6 +53,7 @@
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
+import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.ChatStateManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.packet.DiscoverInfo;
@@ -64,11 +65,10 @@
import android.content.SharedPreferences;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
-import android.os.Environment;
import android.util.Log;
import java.util.Iterator;
-import java.io.File;
+import java.util.List;
import com.beem.project.beem.BeemService;
import com.beem.project.beem.R;
@@ -83,8 +83,8 @@
import com.beem.project.beem.utils.Status;
import com.beem.project.beem.smack.pep.PepSubManager;
import com.beem.project.beem.smack.avatar.AvatarCache;
-import com.beem.project.beem.smack.avatar.FileAvatarCache;
-import com.beem.project.beem.smack.avatar.AvatarManager;
+import com.beem.project.beem.smack.avatar.AvatarListener;
+import com.beem.project.beem.smack.avatar.AvatarMetadataExtension;
/**
* This class implements an adapter for XMPPConnection.
@@ -113,14 +113,18 @@
private ChatStateManager mChatStateManager;
private final BeemService mService;
private BeemApplication mApplication;
- private AvatarManager mAvatarManager;
+ private BeemAvatarManager mAvatarManager;
private PepSubManager mPepManager;
+ private SharedPreferences mPref;
private final RemoteCallbackList<IBeemConnectionListener> mRemoteConnListeners =
new RemoteCallbackList<IBeemConnectionListener>();
private final SubscribePacketListener mSubscribePacketListener = new SubscribePacketListener();
private final ConnexionListenerAdapter mConListener = new ConnexionListenerAdapter();
+ private UserInfo mUserInfo;
+ private final UserInfoManager mUserInfoManager = new UserInfoManager();
+
/**
* Constructor.
* @param config Configuration to use in order to connect
@@ -128,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);
}
@@ -140,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);
}
@@ -152,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;
@@ -163,13 +167,13 @@
if (ctx instanceof BeemApplication) {
mApplication = (BeemApplication) ctx;
}
- SharedPreferences pref = mService.getServicePreference();
+ mPref = mService.getServicePreference();
try {
- mPreviousPriority = Integer.parseInt(pref.getString("settings_key_priority", "0"));
- mResource = pref.getString("settings_key_resource", "BEEM");
+ mPreviousPriority = Integer.parseInt(mPref.getString("settings_key_priority", "0"));
} catch (NumberFormatException ex) {
mPreviousPriority = 0;
}
+ mResource = mPref.getString("settings_key_resource", "BEEM");
}
/**
@@ -236,15 +240,20 @@
mAdaptee.addPacketListener(mSubscribePacketListener, filter);
mAdaptee.login(mLogin, mPassword, mResource);
+ mUserInfo = new UserInfo(mAdaptee.getUser());
+
mChatManager = new BeemChatManager(mAdaptee.getChatManager(), mService);
- mPrivacyListManager = new PrivacyListManagerAdapter(PrivacyListManager.getInstanceFor(mAdaptee));
- mService.resetStatus();
+ //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 initialize it
+ //mPrivacyListManager = new PrivacyListManagerAdapter(PrivacyListManager.getInstanceFor(mAdaptee));
mService.initJingle(mAdaptee);
discoverServerFeatures();
mRoster = new RosterAdapter(mAdaptee.getRoster(), mService, mAvatarManager);
mApplication.setConnected(true);
- changeStatus(Status.CONTACT_STATUS_AVAILABLE, mService.getServicePreference().getString("status_text", ""));
+ int mode = mPref.getInt(BeemApplication.STATUS_KEY, 0);
+ String status = mPref.getString(BeemApplication.STATUS_TEXT_KEY, "");
+ changeStatus(mode, status);
return true;
} catch (XMPPException e) {
Log.e(TAG, "Error while connecting", e);
@@ -328,7 +337,7 @@
*
* @return the AvatarManager or null if there is not
*/
- public AvatarManager getAvatarManager() {
+ public BeemAvatarManager getAvatarManager() {
return mAvatarManager;
}
@@ -405,6 +414,14 @@
return mRoster;
}
+ /**
+ * Get the user informations.
+ *
+ * @return the user infos
+ */
+ public UserInfo getUserInfo() {
+ return mUserInfo;
+ }
/**
* Returns true if currently authenticated by successfully calling the login method.
@@ -458,7 +475,8 @@
sdm = new ServiceDiscoveryManager(mAdaptee);
sdm.addFeature("http://jabber.org/protocol/disco#info");
- sdm.addFeature("jabber:iq:privacy");
+ //nikita: must be uncommented when the feature will be enabled
+ //sdm.addFeature("jabber:iq:privacy");
sdm.addFeature("http://jabber.org/protocol/caps");
sdm.addFeature("urn:xmpp:avatar:metadata");
sdm.addFeature("urn:xmpp:avatar:metadata+notify");
@@ -478,7 +496,7 @@
try {
// jid et server
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(mAdaptee);
- DiscoverInfo info = sdm.discoverInfo("elyzion.net");
+ DiscoverInfo info = sdm.discoverInfo(mAdaptee.getServiceName());
Iterator<DiscoverInfo.Identity> it = info.getIdentities();
while (it.hasNext()) {
DiscoverInfo.Identity identity = it.next();
@@ -487,7 +505,7 @@
}
}
} catch (XMPPException e) {
- // No Pep
+ Log.w(TAG, "Unable to discover server features", e);
}
}
@@ -496,13 +514,22 @@
*/
private void initPEP() {
// Enable pep sending
+ Log.d(TAG, "Pep enabled");
// API 8
// mService.getExternalCacheDir()
mPepManager = new PepSubManager(mAdaptee);
- File cacheDir = Environment.getExternalStorageDirectory();
- cacheDir = new File(cacheDir, "/Android/data/com.beem.project.beem/cache/");
- AvatarCache avatarCache = new FileAvatarCache(cacheDir);
- mAvatarManager = new AvatarManager(mAdaptee, mPepManager, avatarCache, true);
+ AvatarCache avatarCache = new BeemAvatarCache(mService);
+ mAvatarManager = new BeemAvatarManager(mService, mAdaptee, mPepManager, avatarCache, true);
+ mAvatarManager.addAvatarListener(mUserInfoManager);
+ mApplication.setPepEnabled(true);
+ }
+
+ /**
+ * Reset the application state.
+ */
+ private void resetApplication() {
+ mApplication.setConnected(false);
+ mApplication.setPepEnabled(false);
}
/**
@@ -529,7 +556,7 @@
intent.putExtra("normally", true);
mService.sendBroadcast(intent);
mService.stopSelf();
- mApplication.setConnected(false);
+ resetApplication();
}
/**
@@ -543,7 +570,7 @@
intent.putExtra("message", exception.getMessage());
mService.sendBroadcast(intent);
mService.stopSelf();
- mApplication.setConnected(false);
+ resetApplication();
}
/**
@@ -567,7 +594,7 @@
}
mRemoteConnListeners.finishBroadcast();
mService.stopSelf();
- mApplication.setConnected(false);
+ resetApplication();
}
/**
@@ -694,7 +721,7 @@
R.string.AcceptContactRequest, from), System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(mService, Subscription.class);
- intent.putExtra("from", from);
+ intent.setData(Contact.makeXmppUri(from));
notification.setLatestEventInfo(mService, from, mService
.getString(R.string.AcceptContactRequestFrom, from), PendingIntent.getActivity(mService, 0,
intent, PendingIntent.FLAG_ONE_SHOT));
@@ -703,4 +730,25 @@
}
}
+ /**
+ * The UserInfoManager listen to XMPP events and update the user information accoldingly.
+ */
+ private class UserInfoManager implements AvatarListener {
+
+ /**
+ * Constructor.
+ */
+ public UserInfoManager() {
+ }
+
+ @Override
+ public void onAvatarChange(String from, String avatarId, List<AvatarMetadataExtension.Info> avatarInfos) {
+ String jid = StringUtils.parseBareAddress(mUserInfo.getJid());
+ String mfrom = StringUtils.parseBareAddress(from);
+ if (jid.equalsIgnoreCase(mfrom)) {
+ mUserInfo.setAvatarId(avatarId);
+ }
+ }
+ }
+
}
--- a/src/com/beem/project/beem/service/XmppFacade.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/service/XmppFacade.java Fri Apr 15 03:01:09 2011 +0200
@@ -45,6 +45,7 @@
import org.jivesoftware.smack.packet.Presence;
+import android.net.Uri;
import android.os.RemoteException;
import com.beem.project.beem.service.aidl.IChatManager;
@@ -53,7 +54,6 @@
import com.beem.project.beem.service.aidl.IXmppConnection;
import com.beem.project.beem.service.aidl.IXmppFacade;
import com.beem.project.beem.utils.PresenceType;
-import com.beem.project.beem.smack.avatar.AvatarManager;
/**
* This class is a facade for the Beem Service.
@@ -150,11 +150,23 @@
}
@Override
- public byte[] getAvatar(String avatarId) throws RemoteException {
- AvatarManager mgr = mConnexion.getAvatarManager();
+ public boolean publishAvatar(Uri avatarUri) throws RemoteException {
+ BeemAvatarManager mgr = mConnexion.getAvatarManager();
if (mgr == null)
- return null;
+ return false;
+
+ return mgr.publishAvatar(avatarUri);
+ }
- return mgr.getAvatar(avatarId);
+ @Override
+ public void disableAvatarPublishing() throws RemoteException {
+ BeemAvatarManager mgr = mConnexion.getAvatarManager();
+ if (mgr != null)
+ mgr.disableAvatarPublishing();
+ }
+
+ @Override
+ public UserInfo getUserInfo() throws RemoteException {
+ return mConnexion.getUserInfo();
}
}
--- a/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Fri Apr 15 03:01:09 2011 +0200
@@ -43,11 +43,14 @@
*/
package com.beem.project.beem.service.aidl;
-import com.beem.project.beem.service.aidl.IXmppConnection;
-import com.beem.project.beem.service.aidl.IRoster;
-import com.beem.project.beem.service.aidl.IChatManager;
-import com.beem.project.beem.service.aidl.IPrivacyListManager;
+import com.beem.project.beem.service.aidl.IXmppConnection;
+import com.beem.project.beem.service.aidl.IRoster;
+import com.beem.project.beem.service.aidl.IChatManager;
+import com.beem.project.beem.service.aidl.IPrivacyListManager;
import com.beem.project.beem.service.PresenceAdapter;
+import com.beem.project.beem.service.UserInfo;
+
+import android.net.Uri;
interface IXmppFacade {
@@ -96,11 +99,11 @@
*/
void call(in String jid);
- /**
- * get the an avatar
- * @param id the id of the avatar
- */
- byte[] getAvatar(in String id);
+ boolean publishAvatar(in Uri avatarUri);
+
+ void disableAvatarPublishing();
+
+ UserInfo getUserInfo();
IPrivacyListManager getPrivacyListManager();
}
--- a/src/com/beem/project/beem/smack/avatar/AvatarManager.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarManager.java Fri Apr 15 03:01:09 2011 +0200
@@ -51,11 +51,15 @@
import java.util.List;
import java.util.LinkedList;
+import java.security.NoSuchAlgorithmException;
+import java.security.MessageDigest;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.pubsub.Item;
import org.jivesoftware.smackx.pubsub.PayloadItem;
+import org.jivesoftware.smackx.pubsub.LeafNode;
+import org.jivesoftware.smack.util.StringUtils;
/**
* This class deals with the avatar data.
@@ -64,6 +68,11 @@
*/
public class AvatarManager {
+ /** The pubsub node for avatar data. */
+ public static final String AVATARDATA_NODE = "urn:xmpp:avatar:data";
+ /** The pubsub node for avatar metadata. */
+ public static final String AVATARMETADATA_NODE = "urn:xmpp:avatar:metadata";
+
private PepSubManager mPep;
private Connection mCon;
private boolean mAutoDownload;
@@ -78,7 +87,8 @@
* @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;
@@ -87,6 +97,21 @@
}
/**
+ * Create an AvatarManager.
+ *
+ * @param con the connection
+ * @param pepMgr the PepSubManager of the Connection
+ * @param autoDownload true to enable auto download of avatars
+ */
+ protected AvatarManager(final Connection con, final PepSubManager pepMgr, final boolean autoDownload) {
+ mCon = con;
+ mPep = pepMgr;
+ mAutoDownload = autoDownload;
+ mPep.addPEPListener(new Listener());
+ //TODO add a memory cache
+ }
+
+ /**
* Get an avatar from the cache.
*
* @param avatarId the id of the avatar
@@ -121,31 +146,6 @@
mListeners.remove(listener);
}
-
- /**
- * 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
- */
- protected Info selectAvatar(List<Info> available) {
- return available.get(0);
- }
-
- /**
- * 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
- */
- private void fireListeners(String from, String avatarId, List<Info> avatarInfos) {
- for (AvatarListener l : mListeners)
- l.onAvatarChange(from, avatarId, avatarInfos);
- }
-
/**
* Download an avatar.
*
@@ -169,6 +169,96 @@
}
/**
+ * Disable the diffusion of your avatar.
+ */
+ public void disableAvatarPublishing() {
+ AvatarMetadataExtension metadata = new AvatarMetadataExtension();
+ publishAvatarMetaData(null, metadata);
+ }
+
+ /**
+ * Send an avatar image to the pep server.
+ *
+ * @param data the image data.
+ * @return true if the image where successfully sent. false otherwise
+ */
+ public boolean publishAvatarData(byte[] data) {
+ try {
+ String id = getAvatarId(data);
+ publishAvatarData(id, data);
+ return true;
+ } catch (NoSuchAlgorithmException e) {
+ System.err.println("Security error while publishing avatar data : " + e.getMessage());
+ return false;
+ }
+ }
+
+ /**
+ * 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
+ */
+ public void publishAvatarMetaData(String id, AvatarMetadataExtension metadata) {
+ PayloadItem<AvatarMetadataExtension> item = new PayloadItem<AvatarMetadataExtension>(id, metadata);
+ LeafNode node = mPep.getPEPNode(AVATARMETADATA_NODE);
+ node.publish(item);
+ }
+
+ /**
+ * 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
+ */
+ protected Info selectAvatar(List<Info> available) {
+ 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
+ */
+ protected String getAvatarId(byte[] data) throws NoSuchAlgorithmException {
+ MessageDigest md = MessageDigest.getInstance("sha-1");
+ byte[] hash = md.digest(data);
+ return StringUtils.encodeHex(hash);
+ }
+
+ /**
+ * Publish an avatar data.
+ *
+ * @param id the id of the avatar data
+ * @param data the data of the avatar
+ */
+ private void publishAvatarData(String id, byte[] data) {
+ AvatarExtension avatar = new AvatarExtension(data);
+ PayloadItem<AvatarExtension> item = new PayloadItem<AvatarExtension>(id, avatar);
+ LeafNode node = mPep.getPEPNode(AVATARDATA_NODE);
+ node.publish(item);
+ }
+
+ /**
+ * 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
+ */
+ private void fireListeners(String from, String avatarId, List<Info> avatarInfos) {
+ for (AvatarListener l : mListeners)
+ l.onAvatarChange(from, avatarId, avatarInfos);
+ }
+
+
+ /**
* A listener to PEPEevent.
*/
private class Listener implements PEPListener {
--- a/src/com/beem/project/beem/smack/avatar/AvatarMetadataProvider.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/smack/avatar/AvatarMetadataProvider.java Fri Apr 15 03:01:09 2011 +0200
@@ -70,16 +70,34 @@
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG) {
if ("info".equals(parser.getName())) {
- int bytes = Integer.parseInt(parser.getAttributeValue(null, "bytes"));
- int height = Integer.parseInt(parser.getAttributeValue(null, "height"));
- int width = Integer.parseInt(parser.getAttributeValue(null, "width"));
String id = parser.getAttributeValue(null, "id");
String type = parser.getAttributeValue(null, "type");
+ String sbytes = parser.getAttributeValue(null, "bytes");
+ String sheight = parser.getAttributeValue(null, "height");
+ String swidth = parser.getAttributeValue(null, "width");
+ int bytes = 0;
+ AvatarMetadataExtension.Info info = null;
+ try {
+ if (sbytes != null)
+ bytes = Integer.parseInt(sbytes);
+ } catch (NumberFormatException e) { }
+ if (bytes != 0 && id != null && type != null)
+ info = new AvatarMetadataExtension.Info(id, type, bytes);
+ else // invalid info
+ continue;
+
String url = parser.getAttributeValue(null, "url");
- AvatarMetadataExtension.Info info = new AvatarMetadataExtension.Info(id, type, bytes);
- info.setHeight(height);
- info.setWidth(width);
info.setUrl(url);
+ try {
+ int height = 0;
+ int width = 0;
+ if (sheight != null)
+ height = Integer.parseInt(parser.getAttributeValue(null, "height"));
+ if (swidth != null)
+ width = Integer.parseInt(parser.getAttributeValue(null, "width"));
+ info.setHeight(height);
+ info.setWidth(width);
+ } catch (NumberFormatException e) { }
metadata.addInfo(info);
}
} else if (eventType == XmlPullParser.END_TAG) {
--- a/src/com/beem/project/beem/smack/caps/CapsManager.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/smack/caps/CapsManager.java Fri Apr 15 03:01:09 2011 +0200
@@ -178,7 +178,7 @@
PacketExtension p = packet.getExtension("c", "http://jabber.org/protocol/caps");
CapsExtension caps = (CapsExtension) p;
if (!isInCache(caps.getVer())) {
- validate(packet.getFrom(), caps.getVer(), caps.getHash());
+ validate(packet.getFrom(), caps.getNode(), caps.getVer(), caps.getHash());
}
}
}, filter);
@@ -204,13 +204,14 @@
* 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.
* @param hashMethod the hash algorithm to use to calculate ver
* @return true if the ver attribute is valid false otherwise.
*/
- private boolean validate(String jid, String ver, String hashMethod) {
+ private boolean validate(String jid, String node, String ver, String hashMethod) {
try {
- DiscoverInfo info = mSdm.discoverInfo(jid);
+ DiscoverInfo info = mSdm.discoverInfo(jid, node + "#" + ver);
if (!mSupportedAlgorithm.contains(hashMethod)) {
mJidCache.put(jid, info);
return false;
--- a/src/com/beem/project/beem/ui/ChangeStatus.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/ui/ChangeStatus.java Fri Apr 15 03:01:09 2011 +0200
@@ -45,21 +45,32 @@
package com.beem.project.beem.ui;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ActivityNotFoundException;
import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
+import android.net.Uri;
import android.os.Bundle;
+import android.os.Environment;
import android.os.IBinder;
import android.os.RemoteException;
import android.preference.PreferenceManager;
+import android.provider.MediaStore;
import android.util.Log;
+import android.view.ContextThemeWrapper;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.ListAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
@@ -68,10 +79,16 @@
import com.beem.project.beem.BeemApplication;
import com.beem.project.beem.R;
import com.beem.project.beem.service.aidl.IXmppFacade;
+import com.beem.project.beem.service.UserInfo;
+import com.beem.project.beem.providers.AvatarProvider;
import com.beem.project.beem.utils.BeemBroadcastReceiver;
import com.beem.project.beem.utils.BeemConnectivity;
import com.beem.project.beem.utils.Status;
+import java.io.File;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
/**
* This Activity is used to change the status.
* @author nikita
@@ -83,6 +100,7 @@
SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
}
+ private static final String TAG = ChangeStatus.class.getSimpleName();
private static final int AVAILABLE_FOR_CHAT_IDX = 0;
private static final int AVAILABLE_IDX = 1;
private static final int BUSY_IDX = 2;
@@ -90,12 +108,28 @@
private static final int UNAVAILABLE_IDX = 4;
private static final int DISCONNECTED_IDX = 5;
+ private static final int ICON_SIZE = 80;
+
+ private static final int SELECT_PHOTO_DLG = 0;
+
+ 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 String KEY_CURRENT_PHOTO_FILE = "currentphotofile";
+
+ private static final Uri MY_AVATAR_URI = Uri.parse(AvatarProvider.CONTENT_URI + "/my_avatar");
+
private EditText mStatusMessageEditText;
private Toast mToast;
private Button mOk;
private Button mClear;
private Button mContact;
private Spinner mSpinner;
+ private ImageButton mAvatar;
+ private Uri mAvatarUri;
private SharedPreferences mSettings;
private ArrayAdapter<CharSequence> mAdapter;
@@ -103,6 +137,9 @@
private final ServiceConnection mServConn = new BeemServiceConnection();
private final OnClickListener mOnClickOk = new MyOnClickListener();
private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver();
+ private boolean mShowCurrentAvatar = true;
+ private boolean mDisableAvatar;
+ private File mCurrentPhotoFile;
/**
* Constructor.
@@ -117,6 +154,7 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ Log.d(TAG, "oncreate");
setContentView(R.layout.changestatus);
mOk = (Button) findViewById(R.id.ChangeStatusOk);
@@ -128,6 +166,15 @@
mContact = (Button) findViewById(R.id.OpenContactList);
mContact.setOnClickListener(mOnClickOk);
+ BeemApplication app = (BeemApplication) getApplication();
+ mAvatar = (ImageButton) findViewById(R.id.avatarButton);
+ mAvatar.setOnClickListener(mOnClickOk);
+ if (!app.isPepEnabled()) {
+ View avatarPanel = findViewById(R.id.avatar_panel);
+ avatarPanel.setVisibility(View.GONE);
+ }
+
+
mSettings = PreferenceManager.getDefaultSharedPreferences(this);
mStatusMessageEditText = (EditText) findViewById(R.id.ChangeStatusMessage);
mStatusMessageEditText.setText(mSettings.getString(BeemApplication.STATUS_TEXT_KEY, ""));
@@ -163,7 +210,6 @@
@Override
protected void onPause() {
super.onPause();
- Log.d("TAG", "pause");
unbindService(mServConn);
}
@@ -176,6 +222,60 @@
this.unregisterReceiver(mReceiver);
}
+ /*
+ * The activity is often reclaimed by the system memory.
+ */
+ @Override
+ protected void onSaveInstanceState(Bundle 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);
+ }
+
+
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+ if (id == SELECT_PHOTO_DLG)
+ return createPickPhotoDialog();
+ return null;
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // Ignore failed requests
+ if (resultCode != RESULT_OK) return;
+
+ switch (requestCode) {
+ case PHOTO_PICKED_WITH_DATA:
+ mAvatarUri = Uri.parse(data.getAction());
+ Log.d(TAG, "selected avatar uri " + mAvatarUri);
+ if (mAvatarUri != null) {
+ mAvatar.setImageURI(mAvatarUri);
+ mDisableAvatar = false;
+ mShowCurrentAvatar = false;
+ }
+ break;
+
+ case CAMERA_WITH_DATA:
+ doCropPhoto(mCurrentPhotoFile);
+ break;
+ default:
+ Log.w(TAG, "onActivityResult : invalid request code");
+
+ }
+ }
+
/**
* Return the status index from status the settings.
* @return the status index from status the settings.
@@ -227,6 +327,201 @@
}
/**
+ * ClickListener for the avatarButton.
+ *
+ * @param button the avatar button
+ */
+ private void onAvatarButton(View button) {
+ showDialog(SELECT_PHOTO_DLG);
+ }
+
+ /**
+ * Publish the selected avatar.
+ */
+ private void publishAvatar() {
+ try {
+ if (mDisableAvatar)
+ mXmppFacade.disableAvatarPublishing();
+ else if (mAvatarUri != null)
+ mXmppFacade.publishAvatar(mAvatarUri);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error while publishing avatar", e);
+ }
+ }
+
+ /**
+ * Display the current avatar in the button.
+ */
+ private void displayCurrentAvatar() {
+ try {
+ UserInfo ui = mXmppFacade.getUserInfo();
+ String avatarId = ui.getAvatarId();
+ Log.d(TAG, "User info ; avatar id " + avatarId);
+ if (avatarId != null) {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(avatarId).build();
+ mAvatar.setImageURI(uri);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error while displaying current avatar", e);
+ }
+ mShowCurrentAvatar = false;
+ }
+
+ /*
+ * Some codes from AOSP (platform/packages/apps/Contacts)
+ * to select and crop an image.
+ */
+
+ /**
+ * Creates a dialog offering two options: take a photo or pick a photo from the gallery.
+ * @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);
+
+ 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:
+ mDisableAvatar = true;
+ mAvatar.setImageURI(null);
+ break;
+ default:
+ Log.w(TAG, "DialogInterface onClick : invalid which code");
+ }
+ }
+ });
+ return builder.create();
+ }
+
+ /**
+ * Create a file name for the icon photo using current time.
+ * @return the filename
+ */
+ private String getPhotoFileName() {
+ 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();
+ }
+ }
+
+ /**
+ * Constructs an intent for capturing a photo and storing it in a temporary file.
+ * @param f the temporary file to use to store the picture
+ * @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;
+ }
+
+ /**
+ * Sends a newly acquired photo to Gallery for cropping.
+ * @param f the image file to crop
+ */
+ protected void doCropPhoto(final File f) {
+ try {
+
+ // Add the image to the media store
+ // level 8
+ /*
+ 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();
+ }
+ }
+
+ /**
+ * Constructs an intent for image cropping.
+ * @param photoUri the uri of the photo to crop
+ * @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.putExtra(MediaStore.EXTRA_OUTPUT, MY_AVATAR_URI);
+ 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();
+ }
+ }
+
+ /**
+ * Constructs an intent for picking a photo from Gallery, cropping it and returning the bitmap.
+ * @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.putExtra(MediaStore.EXTRA_OUTPUT, MY_AVATAR_URI);
+ // use this to get the bitmap in the intent
+// intent.putExtra("return-data", true);
+ return intent;
+ }
+
+
+
+ /**
* connection to service.
* @author nikita
*/
@@ -244,6 +539,8 @@
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mXmppFacade = IXmppFacade.Stub.asInterface(service);
+ if (mShowCurrentAvatar)
+ displayCurrentAvatar();
}
/**
@@ -280,6 +577,7 @@
try {
mXmppFacade.changeStatus(status, msg.toString());
edit.putInt(BeemApplication.STATUS_KEY, mSpinner.getSelectedItemPosition());
+ publishAvatar();
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -292,7 +590,8 @@
} else if (v == mContact) {
startActivity(new Intent(ChangeStatus.this, ContactList.class));
ChangeStatus.this.finish();
- }
+ } else if (v == mAvatar)
+ onAvatarButton(v);
}
}
}
--- a/src/com/beem/project/beem/ui/Chat.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/ui/Chat.java Fri Apr 15 03:01:09 2011 +0200
@@ -40,7 +40,7 @@
Flavien Astraud, November 26, 2009
Head of the EIP Laboratory.
- */
+*/
package com.beem.project.beem.ui;
import java.text.DateFormat;
@@ -49,7 +49,10 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.io.InputStream;
+import java.io.IOException;
+import org.jivesoftware.smack.packet.Presence.Mode;
import org.jivesoftware.smack.util.StringUtils;
import android.app.Activity;
@@ -58,13 +61,18 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
+import android.preference.PreferenceManager;
import android.text.util.Linkify;
import android.util.Log;
import android.view.KeyEvent;
@@ -73,6 +81,7 @@
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
@@ -83,7 +92,9 @@
import android.widget.ListView;
import android.widget.TextView;
+
import com.beem.project.beem.R;
+import com.beem.project.beem.providers.AvatarProvider;
import com.beem.project.beem.service.Contact;
import com.beem.project.beem.service.Message;
import com.beem.project.beem.service.PresenceAdapter;
@@ -119,6 +130,7 @@
private TextView mContactChatState;
private TextView mContactOtrState;
private ImageView mContactStatusIcon;
+ private LayerDrawable mAvatarStatusDrawable;
private ListView mMessagesListView;
private EditText mInputField;
private Button mSendButton;
@@ -136,7 +148,9 @@
private final BeemBroadcastReceiver mBroadcastReceiver = new BeemBroadcastReceiver();
private final BeemRosterListener mBeemRosterListener = new BeemRosterListener();
private IXmppFacade mXmppFacade;
+ private String mCurrentAvatarId;
private boolean mBinded;
+ private boolean mCompact;
/**
* Constructor.
@@ -151,15 +165,22 @@
@Override
protected void onCreate(Bundle savedBundle) {
super.onCreate(savedBundle);
- setContentView(R.layout.chat);
this.registerReceiver(mBroadcastReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
-
+ SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
+ mCompact = settings.getBoolean("settings_chat_compact_key", false);
// UI
- mContactNameTextView = (TextView) findViewById(R.id.chat_contact_name);
- mContactStatusMsgTextView = (TextView) findViewById(R.id.chat_contact_status_msg);
- mContactChatState = (TextView) findViewById(R.id.chat_contact_chat_state);
- mContactOtrState = (TextView) findViewById(R.id.chat_contact_otr_state);
- mContactStatusIcon = (ImageView) findViewById(R.id.chat_contact_status_icon);
+ if (!mCompact) {
+ setContentView(R.layout.chat);
+ mContactNameTextView = (TextView) findViewById(R.id.chat_contact_name);
+ mContactStatusMsgTextView = (TextView) findViewById(R.id.chat_contact_status_msg);
+ mContactChatState = (TextView) findViewById(R.id.chat_contact_chat_state);
+ mContactStatusIcon = (ImageView) findViewById(R.id.chat_contact_status_icon);
+ mAvatarStatusDrawable = (LayerDrawable) mContactStatusIcon.getDrawable();
+ mContactOtrState = (TextView) findViewById(R.id.chat_contact_otr_state);
+ mAvatarStatusDrawable.setLayerInset(1, 36, 36, 0, 0);
+ } else {
+ setContentView(R.layout.chat_compact);
+ }
mMessagesListView = (ListView) findViewById(R.id.chat_messages);
mMessagesListView.setAdapter(mMessagesListAdapter);
mInputField = (EditText) findViewById(R.id.chat_input);
@@ -287,6 +308,7 @@
Log.e(TAG, e.getMessage());
}
this.finish();
+ this.finish();
break;
case R.id.chat_menu_start_otr_session:
try {
@@ -535,7 +557,8 @@
@Override
public void run() {
if (msg.getType() == Message.MSG_TYPE_ERROR) {
- mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody(), true, msg.getTimestamp()));
+ mListMessages.add(new MessageText(fromBareJid, mContact.getName(),
+ msg.getBody(), true, msg.getTimestamp()));
mMessagesListAdapter.notifyDataSetChanged();
} else if (msg.getBody() != null) {
MessageText lastMessage = null;
@@ -547,7 +570,8 @@
lastMessage.setTimestamp(msg.getTimestamp());
mListMessages.set(mListMessages.size() - 1, lastMessage);
} else if (msg.getBody() != null)
- mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody(), false, msg.getTimestamp()));
+ mListMessages.add(new MessageText(fromBareJid, mContact.getName(),
+ msg.getBody(), false, msg.getTimestamp()));
mMessagesListAdapter.notifyDataSetChanged();
}
}
@@ -576,7 +600,8 @@
} else if ("paused".equals(state)) {
text = Chat.this.getString(R.string.chat_state_active);
}
- mContactChatState.setText(text);
+ if (!mCompact)
+ mContactChatState.setText(text);
}
});
@@ -611,24 +636,74 @@
String res = mContact.getSelectedRes();
if (!"".equals(res))
name += "(" + res + ")";
- if (!(mContactNameTextView.getText().toString().equals(name)))
- mContactNameTextView.setText(name);
-
- // Check for a contact status message update
- if (!(mContactStatusMsgTextView.getText().toString().equals(mContact.getMsgState()))) {
- mContactStatusMsgTextView.setText(mContact.getMsgState());
- Linkify.addLinks(mContactStatusMsgTextView, Linkify.WEB_URLS);
+ if (!mCompact) {
+ if (!(mContactNameTextView.getText().toString().equals(name)))
+ mContactNameTextView.setText(name);
+ //Check for a contact status message update
+ if (!(mContactStatusMsgTextView.getText().toString().equals(mContact.getMsgState()))) {
+ mContactStatusMsgTextView.setText(mContact.getMsgState());
+ Linkify.addLinks(mContactStatusMsgTextView, Linkify.WEB_URLS);
+ }
+ } else {
+ Mode m = Status.getPresenceModeFromStatus(mContact.getStatus());
+ if (m == null)
+ setTitle(getString(R.string.chat_name) + " " + name
+ + " (" + getString(R.string.contact_status_msg_offline) + ")");
+ else
+ setTitle(getString(R.string.chat_name) + " " + name + " (" + m.name() + ")");
}
}
+
+
+
/**
* Update the contact status icon.
*/
private void updateContactStatusIcon() {
+ if (mCompact)
+ return;
+ String id = mContact.getAvatarId();
+ if (id == null)
+ id = "";
+ Log.d(TAG, "update contact icon : " + id);
+ if (!id.equals(mCurrentAvatarId)) {
+ Drawable avatar = getAvatarDrawable(mContact.getAvatarId());
+ mAvatarStatusDrawable.setDrawableByLayerId(R.id.avatar, avatar);
+ mCurrentAvatarId = id;
+ }
mContactStatusIcon.setImageLevel(mContact.getStatus());
}
/**
+ * Get a Drawable containing the avatar icon.
+ *
+ * @param avatarId the avatar id to retrieve or null to get default
+ * @return a Drawable
+ */
+ private Drawable getAvatarDrawable(String avatarId) {
+ Drawable avatarDrawable = null;
+ if (avatarId != null) {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(avatarId).build();
+ InputStream in = null;
+ try {
+ try {
+ in = getContentResolver().openInputStream(uri);
+ avatarDrawable = Drawable.createFromStream(in, avatarId);
+ } finally {
+ if (in != null)
+ in.close();
+ }
+ } catch (IOException e) {
+ Log.w(TAG, "Error while setting the avatar", e);
+ }
+ }
+ if (avatarDrawable == null)
+ avatarDrawable = getResources().getDrawable(R.drawable.beem_launcher_icon_silver);
+ return avatarDrawable;
+ }
+
+ /**
* Prepare the status icons map.
*/
private void prepareIconsStatus() {
@@ -697,10 +772,11 @@
View sv;
if (convertView == null) {
LayoutInflater inflater = Chat.this.getLayoutInflater();
- sv = inflater.inflate(R.layout.chat_msg_row, null);
+ sv = inflater.inflate(R.layout.chat_msg_row, null);
} else {
sv = convertView;
}
+ DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
MessageText msg = mListMessages.get(position);
TextView msgName = (TextView) sv.findViewById(R.id.chatmessagename);
msgName.setText(msg.getName());
@@ -708,8 +784,8 @@
msgName.setError(null);
TextView msgText = (TextView) sv.findViewById(R.id.chatmessagetext);
msgText.setText(msg.getMessage());
+ registerForContextMenu(msgText);
TextView msgDate = (TextView) sv.findViewById(R.id.chatmessagedate);
- DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
String date = df.format(msg.getTimestamp());
msgDate.setText(date);
if (msg.isError()) {
@@ -753,7 +829,8 @@
* @param message A String containing the message.
* @param isError if the message is an error message.
*/
- public MessageText(final String bareJid, final String name, final String message, final boolean isError) {
+ public MessageText(final String bareJid, final String name, final String message,
+ final boolean isError) {
mBareJid = bareJid;
mName = name;
mMessage = message;
@@ -768,7 +845,8 @@
* @param isError if the message is an error message.
* @param date the time of the message.
*/
- public MessageText(final String bareJid, final String name, final String message, final boolean isError, Date date) {
+ public MessageText(final String bareJid, final String name, final String message,
+ final boolean isError, Date date) {
mBareJid = bareJid;
mName = name;
mMessage = message;
@@ -836,7 +914,6 @@
/**
* Set the Date of the message.
- *
* @param date date of the message.
*/
public void setTimestamp(Date date) {
@@ -845,7 +922,6 @@
/**
* 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/ui/ContactList.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/ui/ContactList.java Fri Apr 15 03:01:09 2011 +0200
@@ -49,7 +49,8 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.IOException;
import org.jivesoftware.smack.util.StringUtils;
@@ -60,7 +61,7 @@
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
-import android.graphics.drawable.LevelListDrawable;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -87,8 +88,10 @@
import android.widget.ListView;
import android.widget.TextView;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import com.beem.project.beem.R;
+import com.beem.project.beem.providers.AvatarProvider;
import com.beem.project.beem.service.Contact;
import com.beem.project.beem.service.PresenceAdapter;
import com.beem.project.beem.service.aidl.IBeemRosterListener;
@@ -656,30 +659,47 @@
private void bindView(View view, Contact curContact) {
if (curContact != null) {
TextView v = (TextView) view.findViewById(R.id.contactlistpseudo);
- LevelListDrawable mStatusDrawable = (LevelListDrawable) getResources()
- .getDrawable(R.drawable.status_icon);
- mStatusDrawable.setLevel(curContact.getStatus());
- v.setCompoundDrawablesWithIntrinsicBounds(mStatusDrawable, null, null, null);
v.setText(curContact.getName());
v = (TextView) view.findViewById(R.id.contactlistmsgperso);
v.setText(curContact.getMsgState());
- Drawable d = null;
+ ImageView img = (ImageView) view.findViewById(R.id.avatar);
+ String avatarId = curContact.getAvatarId();
+ int contactStatus = curContact.getStatus();
+ Drawable avatar = getAvatarStatusDrawable(avatarId);
+ img.setImageDrawable(avatar);
+ img.setImageLevel(contactStatus);
+ }
+ }
+
+ /**
+ * 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
+ */
+ private Drawable getAvatarStatusDrawable(String avatarId) {
+ Drawable avatarDrawable = null;
+ if (avatarId != null) {
+ Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(avatarId).build();
+ InputStream in = null;
try {
- String avatarId = curContact.getAvatarId();
- byte[] avatar = mXmppFacade.getAvatar(avatarId);
- if (avatar != null) {
- ByteArrayInputStream in = new ByteArrayInputStream(avatar);
- d = Drawable.createFromStream(in, avatarId);
+ try {
+ in = getContentResolver().openInputStream(uri);
+ avatarDrawable = Drawable.createFromStream(in, avatarId);
+ } finally {
+ if (in != null)
+ in.close();
}
- } catch (RemoteException e) {
- Log.e(TAG, "Error while setting the avatar", e);
+ } catch (IOException e) {
+ Log.w(TAG, "Error while setting the avatar " + avatarId, e);
}
- ImageView img = (ImageView) view.findViewById(R.id.avatar);
- if (d != null)
- img.setImageDrawable(d);
- else
- img.setImageResource(R.drawable.beem_launcher_icon_silver);
}
+ if (avatarDrawable == null)
+ avatarDrawable = getResources().getDrawable(R.drawable.beem_launcher_icon_silver);
+ LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.avatar_status);
+ ld.setLayerInset(1, 36, 36, 0, 0);
+ ld.setDrawableByLayerId(R.id.avatar, avatarDrawable);
+ return ld;
}
/**
--- a/src/com/beem/project/beem/ui/LoginAnim.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/ui/LoginAnim.java Fri Apr 15 03:01:09 2011 +0200
@@ -1,7 +1,7 @@
/*
BEEM is a videoconference application on the Android Platform.
- Copyright (C) 2009 by Frederic-Charles Barthelery,
+ Copyright (C) 2009-2011 by Frederic-Charles Barthelery,
Jean-Manuel Da Silva,
Nikita Kozlov,
Philippe Lago,
@@ -82,6 +82,7 @@
private AsyncTask<IXmppFacade, Integer, Boolean> mTask;
private Button mCancelBt;
private TextView mLoginState;
+ private boolean mBinded;
/**
* Constructor.
@@ -110,27 +111,19 @@
protected void onStart() {
super.onStart();
mLogo.startAnimation(mRotateAnim);
- }
-
- /* (non-Javadoc)
- * @see android.app.Activity#onResume()
- */
- @Override
- protected void onResume() {
- super.onResume();
if (mTask == null)
mTask = new LoginTask();
- if (mXmppFacade == null)
- bindService(LoginAnim.SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
+ if (!mBinded)
+ mBinded = bindService(LoginAnim.SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
}
/* (non-Javadoc)
* @see android.app.Activity#onPause()
*/
@Override
- protected void onPause() {
- super.onPause();
- if (mXmppFacade != null) { // and async task not en cours
+ protected void onStop() {
+ super.onStop();
+ if (mBinded && mTask.getStatus() != AsyncTask.Status.RUNNING) {
unbindService(mServConn);
mXmppFacade = null;
}
--- a/src/com/beem/project/beem/ui/Subscription.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/com/beem/project/beem/ui/Subscription.java Fri Apr 15 03:01:09 2011 +0200
@@ -54,6 +54,7 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
+import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
@@ -63,6 +64,7 @@
import com.beem.project.beem.R;
import com.beem.project.beem.service.PresenceAdapter;
import com.beem.project.beem.service.aidl.IXmppFacade;
+import com.beem.project.beem.service.Contact;
import com.beem.project.beem.utils.BeemBroadcastReceiver;
/**
@@ -72,6 +74,7 @@
public class Subscription extends Activity {
private static final Intent SERVICE_INTENT = new Intent();
+ private static final String TAG = Subscription.class.getSimpleName();
private IXmppFacade mService;
private String mContact;
private ServiceConnection mServConn = new BeemServiceConnection();
@@ -97,7 +100,8 @@
setContentView(R.layout.subscription);
findViewById(R.id.SubscriptionAccept).setOnClickListener(mClickListener);
findViewById(R.id.SubscriptionRefuse).setOnClickListener(mClickListener);
- mContact = getIntent().getStringExtra("from");
+ Contact c = new Contact(getIntent().getData());
+ mContact = c.getJID();
TextView tv = (TextView) findViewById(R.id.SubscriptionText);
String str = String.format(getString(R.string.SubscriptText), mContact);
tv.setText(str);
@@ -132,6 +136,20 @@
}
/**
+ * Send the presence stanza.
+ *
+ * @param p presence stanza
+ */
+ private void sendPresence(Presence p) {
+ PresenceAdapter preAdapt = new PresenceAdapter(p);
+ try {
+ mService.sendPresencePacket(preAdapt);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error while sending subscription response", e);
+ }
+ }
+
+ /**
* Event simple click on buttons.
*/
private class MyOnClickListener implements OnClickListener {
@@ -144,29 +162,25 @@
@Override
public void onClick(View v) {
+ Presence presence = null;
switch (v.getId()) {
case R.id.SubscriptionAccept:
- Presence presence = new Presence(Type.subscribed);
- presence.setTo(mContact);
- PresenceAdapter preAdapt = new PresenceAdapter(presence);
- try {
- mService.sendPresencePacket(preAdapt);
- Toast.makeText(Subscription.this, getString(R.string.SubscriptAccept), Toast.LENGTH_SHORT)
+ presence = new Presence(Type.subscribed);
+ Toast.makeText(Subscription.this, getString(R.string.SubscriptAccept), Toast.LENGTH_SHORT)
.show();
- finish();
- } catch (RemoteException e) {
- Toast.makeText(Subscription.this, getString(R.string.SubscriptError), Toast.LENGTH_SHORT)
- .show();
- e.printStackTrace();
- }
break;
case R.id.SubscriptionRefuse:
+ presence = new Presence(Type.unsubscribed);
Toast.makeText(Subscription.this, getString(R.string.SubscriptRefused), Toast.LENGTH_SHORT).show();
- finish();
break;
default:
Toast.makeText(Subscription.this, getString(R.string.SubscriptError), Toast.LENGTH_SHORT).show();
}
+ if (presence != null) {
+ presence.setTo(mContact);
+ sendPresence(presence);
+ }
+ finish();
}
};
--- a/src/net/java/otr4j/OtrKeyManagerImpl.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/net/java/otr4j/OtrKeyManagerImpl.java Fri Apr 15 03:01:09 2011 +0200
@@ -21,7 +21,7 @@
import java.util.Properties;
import java.util.Vector;
-import org.bouncycastle.util.encoders.Base64;
+import org.bouncycastle2.util.encoders.Base64;
import net.java.otr4j.crypto.OtrCryptoEngineImpl;
import net.java.otr4j.crypto.OtrCryptoException;
--- a/src/net/java/otr4j/crypto/OtrCryptoEngineImpl.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/net/java/otr4j/crypto/OtrCryptoEngineImpl.java Fri Apr 15 03:01:09 2011 +0200
@@ -30,22 +30,22 @@
import net.java.otr4j.io.SerializationUtils;
-import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
-import org.bouncycastle.crypto.BufferedBlockCipher;
-import org.bouncycastle.crypto.engines.AESFastEngine;
-import org.bouncycastle.crypto.generators.DHKeyPairGenerator;
-import org.bouncycastle.crypto.modes.SICBlockCipher;
-import org.bouncycastle.crypto.params.DHKeyGenerationParameters;
-import org.bouncycastle.crypto.params.DHParameters;
-import org.bouncycastle.crypto.params.DHPrivateKeyParameters;
-import org.bouncycastle.crypto.params.DHPublicKeyParameters;
-import org.bouncycastle.crypto.params.DSAParameters;
-import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
-import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
-import org.bouncycastle.crypto.params.KeyParameter;
-import org.bouncycastle.crypto.params.ParametersWithIV;
-import org.bouncycastle.crypto.signers.DSASigner;
-import org.bouncycastle.util.BigIntegers;
+import org.bouncycastle2.crypto.AsymmetricCipherKeyPair;
+import org.bouncycastle2.crypto.BufferedBlockCipher;
+import org.bouncycastle2.crypto.engines.AESFastEngine;
+import org.bouncycastle2.crypto.generators.DHKeyPairGenerator;
+import org.bouncycastle2.crypto.modes.SICBlockCipher;
+import org.bouncycastle2.crypto.params.DHKeyGenerationParameters;
+import org.bouncycastle2.crypto.params.DHParameters;
+import org.bouncycastle2.crypto.params.DHPrivateKeyParameters;
+import org.bouncycastle2.crypto.params.DHPublicKeyParameters;
+import org.bouncycastle2.crypto.params.DSAParameters;
+import org.bouncycastle2.crypto.params.DSAPrivateKeyParameters;
+import org.bouncycastle2.crypto.params.DSAPublicKeyParameters;
+import org.bouncycastle2.crypto.params.KeyParameter;
+import org.bouncycastle2.crypto.params.ParametersWithIV;
+import org.bouncycastle2.crypto.signers.DSASigner;
+import org.bouncycastle2.util.BigIntegers;
/**
*
--- a/src/net/java/otr4j/io/OtrOutputStream.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/net/java/otr4j/io/OtrOutputStream.java Fri Apr 15 03:01:09 2011 +0200
@@ -14,7 +14,7 @@
import net.java.otr4j.io.messages.MysteriousT;
import net.java.otr4j.io.messages.SignatureX;
-import org.bouncycastle.util.BigIntegers;
+import org.bouncycastle2.util.BigIntegers;
public class OtrOutputStream extends FilterOutputStream implements
SerializationConstants {
--- a/src/net/java/otr4j/io/SerializationUtils.java Tue Dec 28 16:33:33 2010 +0100
+++ b/src/net/java/otr4j/io/SerializationUtils.java Fri Apr 15 03:01:09 2011 +0200
@@ -20,7 +20,7 @@
import javax.crypto.interfaces.DHPublicKey;
-import org.bouncycastle.util.encoders.Base64;
+import org.bouncycastle2.util.encoders.Base64;
import net.java.otr4j.io.messages.AbstractEncodedMessage;
import net.java.otr4j.io.messages.AbstractMessage;
--- a/tools/JavaHeaderCheck.regex Tue Dec 28 16:33:33 2010 +0100
+++ b/tools/JavaHeaderCheck.regex Fri Apr 15 03:01:09 2011 +0200
@@ -1,7 +1,7 @@
^/\*$
^ BEEM is a videoconference application on the Android Platform\.$
^$
-^ Copyright \(C\) \d\d\d\d by .*$
+^ Copyright \(C\) 2009(-\d\d\d\d)? by .*$
^ .*$
^$
^ This file is part of BEEM\.$
@@ -20,7 +20,7 @@
^ along with BEEM\. If not, see <http://www.gnu.org/licenses/>\.$
^$
^ Please send bug reports with examples or suggestions to$
-^ contact@beem-project\.com or http://dev\.beem-project\.com/$
+^ contact@beem-project\.com or http://(dev|www)\.beem-project\.com/$
^$
^ Epitech, hereby disclaims all copyright interest in the program "Beem"$
^ written by Frederic-Charles Barthelery,$
--- a/tools/LicenseHeader.txt Tue Dec 28 16:33:33 2010 +0100
+++ b/tools/LicenseHeader.txt Fri Apr 15 03:01:09 2011 +0200
@@ -1,12 +1,9 @@
/*
BEEM is a videoconference application on the Android Platform.
- Copyright (C) 2009 by Frederic-Charles Barthelery,
- Jean-Manuel Da Silva,
- Nikita Kozlov,
- Philippe Lago,
- Jean Baptiste Vergely,
- Vincent Veronis.
+ Copyright (C) 2009-2011 by Frederic-Charles Barthelery,
+ Nikita Kozlov,
+ Vincent Veronis.
This file is part of BEEM.
@@ -24,20 +21,6 @@
along with BEEM. If not, see <http://www.gnu.org/licenses/>.
Please send bug reports with examples or suggestions to
- contact@beem-project.com or http://dev.beem-project.com/
-
- Epitech, hereby disclaims all copyright interest in the program "Beem"
- written by Frederic-Charles Barthelery,
- Jean-Manuel Da Silva,
- Nikita Kozlov,
- Philippe Lago,
- Jean Baptiste Vergely,
- Vincent Veronis.
-
- Nicolas Sadirac, November 26, 2009
- President of Epitech.
-
- Flavien Astraud, November 26, 2009
- Head of the EIP Laboratory.
+ contact@beem-project.com or http://www.beem-project.com/
*/
--- a/tools/checkstyle.xml Tue Dec 28 16:33:33 2010 +0100
+++ b/tools/checkstyle.xml Fri Apr 15 03:01:09 2011 +0200
@@ -1,208 +1,343 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+<?xml version="1.0"?>
+<!DOCTYPE module PUBLIC
+ "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
+ "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<!--
- This configuration file was written by the eclipse-cs plugin configuration editor
+
+ Checkstyle configuration that checks the sun coding conventions from:
+
+ - the Java Language Specification at
+ http://java.sun.com/docs/books/jls/second_edition/html/index.html
+
+ - the Sun Code Conventions at http://java.sun.com/docs/codeconv/
+
+ - the Javadoc guidelines at
+ http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
+
+ - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html
+
+ - some best practices
+
+ Checkstyle is very configurable. Be sure to read the documentation at
+ http://checkstyle.sf.net (or in your downloaded distribution).
+
+ Most Checks are configurable, be sure to consult the documentation.
+
+ To completely disable a check, just comment it out or delete it from the file.
+
+ Finally, it is worth reading the documentation.
+
-->
-<!--
- Checkstyle-Configuration: Beem Checks
- Description: none
--->
+
<module name="Checker">
- <property name="severity" value="warning"/>
- <property name="basedir" value="/home/beem/"/>
- <module name="TreeWalker">
- <module name="JavadocMethod">
- <property name="severity" value="error"/>
- <property name="allowUndeclaredRTE" value="true"/>
- </module>
- <module name="JavadocType">
- <property name="severity" value="error"/>
- </module>
- <module name="JavadocVariable">
- <property name="severity" value="error"/>
- <property name="scope" value="package"/>
- </module>
- <module name="JavadocStyle">
- <property name="severity" value="error"/>
- <property name="checkEmptyJavadoc" value="true"/>
- </module>
- <module name="ConstantName"/>
- <module name="LocalFinalVariableName"/>
- <module name="LocalVariableName"/>
- <module name="MemberName">
- <property name="severity" value="error"/>
- <property name="format" value="^m[A-Z][a-zA-Z0-9]*$"/>
- </module>
- <module name="MethodName"/>
- <module name="PackageName"/>
- <module name="ParameterName"/>
- <module name="StaticVariableName"/>
- <module name="TypeName"/>
- <module name="AvoidStarImport"/>
- <module name="IllegalImport"/>
- <module name="RedundantImport"/>
- <module name="UnusedImports">
- <property name="severity" value="error"/>
- </module>
- <module name="AvoidStaticImport">
- <property name="excludes" value="*"/>
- </module>
- <module name="LineLength">
- <property name="max" value="120"/>
+ <!--
+ If you set the basedir property below, then all reported file
+ names will be relative to the specified directory. See
+ http://checkstyle.sourceforge.net/5.x/config.html#Checker
+-->
+ <property name="basedir" value="/home/beem/" default="."/>
+
+ <property name="severity" value="warning"/>
+
+ <!-- Checks that a package-info.java file exists for each package. -->
+ <!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
+ <module name="JavadocPackage">
+ <property name="allowLegacy" value="false"/>
</module>
- <module name="MethodLength"/>
- <module name="ParameterNumber"/>
- <module name="AnonInnerLength">
- <property name="max" value="60"/>
- </module>
- <module name="EmptyForIteratorPad"/>
- <module name="GenericWhitespace">
- <property name="severity" value="error"/>
- </module>
- <module name="MethodParamPad">
- <property name="severity" value="error"/>
+
+ <!-- Checks whether files end with a new line. -->
+ <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
+ <module name="NewlineAtEndOfFile">
+ <property name="severity" value="error"/>
</module>
- <module name="NoWhitespaceAfter">
- <property name="severity" value="error"/>
- </module>
- <module name="NoWhitespaceBefore">
- <property name="severity" value="error"/>
- </module>
- <module name="OperatorWrap"/>
- <module name="ParenPad">
- <property name="severity" value="error"/>
- </module>
- <module name="TypecastParenPad">
- <property name="severity" value="error"/>
+
+ <!-- Checks that property files contain the same keys. -->
+ <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
+ <module name="Translation">
+ <property name="severity" value="error"/>
</module>
- <module name="WhitespaceAfter">
- <property name="severity" value="error"/>
- </module>
- <module name="WhitespaceAround">
- <property name="severity" value="error"/>
- </module>
- <module name="ModifierOrder">
- <property name="severity" value="error"/>
- </module>
- <module name="RedundantModifier">
- <property name="severity" value="error"/>
+
+ <!-- Checks for Size Violations. -->
+ <!-- See http://checkstyle.sf.net/config_sizes.html -->
+ <module name="FileLength"/>
+
+ <!-- Checks for whitespace -->
+ <!-- See http://checkstyle.sf.net/config_whitespace.html -->
+ <!-- we want tab
+ <module name="FileTabCharacter"/>
+ -->
+
+ <!-- Miscellaneous other checks. -->
+ <!-- See http://checkstyle.sf.net/config_misc.html -->
+ <module name="RegexpSingleline">
+ <property name="severity" value="error"/>
+ <property name="format" value="\s+$"/>
+ <property name="minimum" value="0"/>
+ <property name="maximum" value="0"/>
+ <property name="message" value="Line has trailing spaces."/>
</module>
- <module name="AvoidNestedBlocks"/>
- <module name="EmptyBlock"/>
- <module name="LeftCurly">
- <property name="severity" value="error"/>
+
+ <!-- This rules is desactivated because it is too stupid.
+ It also compare the Header of the file.
+ <module name="StrictDuplicateCode">
+ <property name="min" value="25" />
</module>
- <module name="RightCurly">
- <property name="severity" value="error"/>
- </module>
- <module name="AnnotationUseStyle">
- <property name="severity" value="error"/>
- </module>
- <module name="MissingDeprecated">
- <property name="severity" value="error"/>
+ -->
+
+ <!-- Header file -->
+ <module name="RegexpHeader">
+ <property name="headerFile" value="${basedir}/tools/JavaHeaderCheck.regex"/>
+ <property name="multiLines" value="5, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38"/>
+ <property name="severity" value="error" />
</module>
- <module name="MissingOverride">
- <property name="severity" value="error"/>
- </module>
- <module name="CovariantEquals"/>
- <module name="AvoidInlineConditionals"/>
- <module name="InnerAssignment"/>
- <module name="DoubleCheckedLocking"/>
- <module name="EmptyStatement"/>
- <module name="EqualsHashCode">
- <property name="severity" value="error"/>
- </module>
- <module name="HiddenField">
- <property name="ignoreConstructorParameter" value="true"/>
- <property name="ignoreSetter" value="true"/>
- <property name="ignoreAbstractMethods" value="true"/>
- </module>
- <module name="IllegalInstantiation"/>
- <module name="InnerAssignment">
- <property name="severity" value="error"/>
- </module>
- <module name="MagicNumber"/>
- <module name="MissingSwitchDefault">
- <property name="severity" value="error"/>
- </module>
- <module name="RedundantThrows"/>
- <module name="SimplifyBooleanExpression">
- <property name="severity" value="error"/>
- </module>
- <module name="SimplifyBooleanReturn">
- <property name="severity" value="error"/>
- </module>
- <module name="StringLiteralEquality">
- <property name="severity" value="error"/>
- </module>
- <module name="IllegalCatch"/>
- <module name="IllegalThrows"/>
- <module name="IllegalType"/>
- <module name="PackageDeclaration"/>
- <module name="JUnitTestCase"/>
- <module name="DeclarationOrder">
- <property name="severity" value="error"/>
- </module>
- <module name="ExplicitInitialization"/>
- <module name="DefaultComesLast"/>
- <module name="MissingCtor"/>
- <module name="FallThrough"/>
- <module name="MultipleStringLiterals">
- <property name="allowedDuplicates" value="2"/>
+
+ <module name="TreeWalker">
+
+ <!-- Checks for Javadoc comments. -->
+ <!-- See http://checkstyle.sf.net/config_javadoc.html -->
+ <module name="JavadocMethod">
+ <property name="allowUndeclaredRTE" value="true"/>
+ <property name="severity" value="error"/>
+ </module>
+ <module name="JavadocType">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="JavadocVariable">
+ <property name="scope" value="package" />
+ <property name="severity" value="error"/>
+ </module>
+ <module name="JavadocStyle">
+ <property name="checkEmptyJavadoc" value="true"/>
+ <property name="severity" value="error"/>
+ </module>
+
+
+ <!-- Checks for Naming Conventions. -->
+ <!-- See http://checkstyle.sf.net/config_naming.html -->
+ <module name="ConstantName"/>
+ <module name="LocalFinalVariableName"/>
+ <module name="LocalVariableName"/>
+ <module name="MemberName">
+ <property name="format" value="^m[A-Z][a-zA-Z0-9]*$"/>
+ <property name="severity" value="error"/>
+ </module>
+ <module name="MethodName"/>
+ <module name="PackageName"/>
+ <module name="ParameterName"/>
+ <module name="StaticVariableName"/>
+ <module name="TypeName"/>
+
+
+ <!-- Checks for Headers -->
+ <!-- See http://checkstyle.sf.net/config_header.html -->
+ <!-- <module name="Header"> -->
+ <!-- The follow property value demonstrates the ability -->
+ <!-- to have access to ANT properties. In this case it uses -->
+ <!-- the ${basedir} property to allow Checkstyle to be run -->
+ <!-- from any directory within a project. See property -->
+ <!-- expansion, -->
+ <!-- http://checkstyle.sf.net/config.html#properties -->
+ <!-- <property -->
+ <!-- name="headerFile" -->
+ <!-- value="${basedir}/java.header"/> -->
+ <!-- </module> -->
+
+ <!-- Checks for imports -->
+ <!-- See http://checkstyle.sf.net/config_import.html -->
+ <module name="AvoidStarImport"/>
+ <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
+ <module name="RedundantImport"/>
+ <module name="UnusedImports">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="AvoidStaticImport">
+ <property name="excludes" value="*"/>
+ </module>
+
+
+ <!-- Checks for Size Violations. -->
+ <!-- See http://checkstyle.sf.net/config_sizes.html -->
+ <module name="LineLength">
+ <property name="max" value="120" />
+ </module>
+ <module name="MethodLength"/>
+ <module name="ParameterNumber"/>
+ <module name="AnonInnerLength">
+ <property name="max" value="60" />
+ </module>
+
+
+ <!-- Checks for whitespace -->
+ <!-- See http://checkstyle.sf.net/config_whitespace.html -->
+ <module name="EmptyForIteratorPad"/>
+ <module name="GenericWhitespace">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="MethodParamPad">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="NoWhitespaceAfter">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="NoWhitespaceBefore">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="OperatorWrap"/>
+ <module name="ParenPad">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="TypecastParenPad">
+ <property name="severity" value="error"/>
+ </module>
+ <!-- We want mixed tabulation
+ <module name="TabCharacter"/>
+ -->
+ <module name="WhitespaceAfter">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="WhitespaceAround">
+ <property name="severity" value="error"/>
+ </module>
+
+
+ <!-- Modifier Checks -->
+ <!-- See http://checkstyle.sf.net/config_modifiers.html -->
+ <module name="ModifierOrder">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="RedundantModifier">
+ <property name="severity" value="error"/>
+ </module>
+
+
+ <!-- Checks for blocks. You know, those {}'s -->
+ <!-- See http://checkstyle.sf.net/config_blocks.html -->
+ <module name="AvoidNestedBlocks"/>
+ <module name="EmptyBlock"/>
+ <module name="LeftCurly">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="RightCurly">
+ <property name="severity" value="error"/>
+ </module>
+ <!--
+ <module name="NeedBraces"/>
+ -->
+
+ <!-- Check for annotations
+ http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated
+ -->
+ <module name="AnnotationUseStyle">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="MissingDeprecated">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="MissingOverride">
+ <property name="severity" value="error"/>
+ </module>
+
+ <!-- Checks for common coding problems -->
+ <!-- See http://checkstyle.sf.net/config_coding.html -->
+ <module name="CovariantEquals"/>
+ <module name="AvoidInlineConditionals"/>
+ <module name="InnerAssignment" />
+ <module name="DoubleCheckedLocking"/> <!-- MY FAVOURITE -->
+ <module name="EmptyStatement"/>
+ <module name="EqualsHashCode">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="HiddenField">
+ <property name="ignoreConstructorParameter" value="true"/>
+ <property name="ignoreAbstractMethods" value="true"/>
+ <property name="ignoreSetter" value="true"/>
+ </module>
+ <module name="IllegalInstantiation"/>
+ <module name="InnerAssignment">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="MagicNumber"/>
+ <module name="MissingSwitchDefault">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="RedundantThrows"/>
+ <module name="SimplifyBooleanExpression">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="SimplifyBooleanReturn">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="StringLiteralEquality">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="IllegalCatch"/>
+ <module name="IllegalThrows"/>
+ <module name="IllegalType"/>
+ <module name="PackageDeclaration"/>
+ <module name="JUnitTestCase"/>
+ <module name="DeclarationOrder">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="ExplicitInitialization"/>
+ <module name="DefaultComesLast"/>
+ <module name="MissingCtor" >
+ <property name="severity" value="info"/>
+ </module>
+ <module name="FallThrough"/>
+ <module name="MultipleStringLiterals">
+ <property name="allowedDuplicates" value="2"/>
+ </module>
+ <module name="MultipleVariableDeclarations"/>
+ <module name="UnnecessaryParentheses"/>
+ <module name="ParameterAssignment"/>
+ <module name="EqualsAvoidNull">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="NoClone"/>
+ <module name="NoFinalizer"/>
+ <module name="SuperClone"/>
+ <module name="SuperFinalize"/>
+ <module name="ModifiedControlVariable">
+ <property name="severity" value="error"/>
+ </module>
+ <module name="ReturnCount">
+ <property name="max" value="3"/>
+ </module>
+
+ <!-- Checks for class design -->
+ <!-- See http://checkstyle.sf.net/config_design.html -->
+ <!--
+ <module name="DesignForExtension"/>
+ -->
+ <module name="FinalClass"/>
+ <module name="HideUtilityClassConstructor"/>
+ <!--
+ <module name="InterfaceIsType"/>
+ -->
+ <module name="VisibilityModifier"/>
+ <module name="MutableException"/>
+ <module name="ThrowsCount">
+ <property name="max" value="2" />
+ </module>
+
+
+ <!-- Miscellaneous other checks. -->
+ <!-- See http://checkstyle.sf.net/config_misc.html -->
+ <module name="ArrayTypeStyle"/>
+ <module name="FinalParameters">
+ <property name="tokens" value="CTOR_DEF"/>
+ </module>
+ <module name="Indentation"/>
+
+ <module name="TodoComment"/>
+ <module name="UpperEll"/>
+
+ <module name="BooleanExpressionComplexity"/>
+ <module name="UpperEll"/>
+
+ <module name="ArrayTypeStyle"/>
+
</module>
- <module name="MultipleVariableDeclarations"/>
- <module name="UnnecessaryParentheses"/>
- <module name="ParameterAssignment"/>
- <module name="EqualsAvoidNull">
- <property name="severity" value="error"/>
- </module>
- <module name="NoClone"/>
- <module name="NoFinalizer"/>
- <module name="SuperClone"/>
- <module name="SuperFinalize"/>
- <module name="ModifiedControlVariable">
- <property name="severity" value="error"/>
- </module>
- <module name="ReturnCount">
- <property name="max" value="3"/>
- </module>
- <module name="FinalClass"/>
- <module name="HideUtilityClassConstructor"/>
- <module name="VisibilityModifier"/>
- <module name="MutableException"/>
- <module name="ThrowsCount">
- <property name="max" value="2"/>
- </module>
- <module name="ArrayTypeStyle"/>
- <module name="FinalParameters">
- <property name="tokens" value="CTOR_DEF"/>
- </module>
- <module name="Indentation"/>
- <module name="TodoComment"/>
- <module name="UpperEll"/>
- <module name="BooleanExpressionComplexity"/>
- <module name="UpperEll"/>
- <module name="ArrayTypeStyle"/>
- </module>
- <module name="JavadocPackage">
- <property name="allowLegacy" value="true"/>
- </module>
- <module name="NewlineAtEndOfFile">
- <property name="severity" value="error"/>
- </module>
- <module name="Translation">
- <property name="severity" value="error"/>
- </module>
- <module name="FileLength"/>
- <module name="RegexpSingleline">
- <property name="severity" value="error"/>
- <property name="format" value="\s+$"/>
- <property name="message" value="Line has trailing spaces."/>
- </module>
- <module name="RegexpHeader">
- <property name="severity" value="error"/>
- <property name="headerFile" value="${basedir}/tools/JavaHeaderCheck.regex"/>
- <property name="multiLines" value="5, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38"/>
- </module>
+
</module>