--- a/AndroidManifest.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/AndroidManifest.xml Mon Jun 14 22:47:22 2010 +0200
@@ -6,7 +6,7 @@
android:icon="@drawable/beem_launcher_icon_silver" android:theme="@style/Theme.BEEM.Default"
android:debuggable="true" android:name=".BeemApplication">
<activity android:name=".ui.Login" android:label="@string/app_name"
- android:screenOrientation="portrait" android:launchMode="standard">
+ android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
--- a/CREDITS Mon Jun 14 22:45:56 2010 +0200
+++ b/CREDITS Mon Jun 14 22:47:22 2010 +0200
@@ -1,9 +1,19 @@
This file contains the name of the people who have contributed to
BEEM. The names are sorted alphabetically by last name.
+Core Team :
Frederic-Charles Barthelery
Jean-Manuel Da Silva
Nikita Kozlov
Philippe Lago
Jean Baptiste Vergely
Vincent Véronis
+
+Contributors :
+Nolan Darilek
+
+Tranlators :
+GoApk http://goapk.com for chinese translations
+
+Thanks to all !
+
--- a/doc/asmack-beem/beem-build-process.patch Mon Jun 14 22:45:56 2010 +0200
+++ b/doc/asmack-beem/beem-build-process.patch Mon Jun 14 22:47:22 2010 +0200
@@ -1,5 +1,5 @@
---- asmack-org/build.bash 2010-03-05 02:42:58.978546820 +0100
-+++ asmack/build.bash 2010-03-05 02:35:43.689307349 +0100
+--- asmack-git/build.bash 2010-05-07 22:08:18.000000000 +0200
++++ asmack/build.bash 2010-05-07 22:06:53.000000000 +0200
@@ -15,11 +15,11 @@
if ! [ -f "${2}/.svn/entries" ]; then
mkdir "${2}"
@@ -20,83 +20,14 @@
fetchall() {
- gitfetch "git://github.com/rtreffer/smack.git" "smack"
- fetch "http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/management/common/src/main/" "qpid"
-- fetch "http://svn.apache.org/repos/asf/harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/" "harmony"
+- fetch "http://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/auth/src/main/java/common/" "harmony"
- fetch "https://dnsjava.svn.sourceforge.net/svnroot/dnsjava/trunk" "dnsjava"
- fetch "https://kenai.com/svn/jbosh~main/trunk/jbosh/src/main/java" "jbosh"
+ fetch "http://svn.igniterealtime.org/svn/repos/smack/trunk" "smack" "11644"
+ fetch "http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/management/common/src/main/" "qpid" "HEAD"
-+ fetch "http://svn.apache.org/repos/asf/harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/" "harmony" "HEAD"
++ fetch "http://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/auth/src/main/java/common/" "harmony" "HEAD"
+ fetch "https://dnsjava.svn.sourceforge.net/svnroot/dnsjava/trunk" "dnsjava" "HEAD"
+ fetch "https://kenai.com/svn/jbosh~main/trunk/jbosh/src/main/java" "jbosh" "HEAD"
}
copyfolder() {
-@@ -95,7 +95,7 @@
- buildsrc
- patchsrc "patch"
- patchsrc "${dir}"
-- ant -Djar.suffix=`echo ${dir}|sed 's:patch/:-:'`
-+ ant -Dbuild.all=true -Djar.suffix=`echo ${dir}|sed 's:patch/:-:'`
- done
- }
-
---- asmack3/build.xml 2010-02-24 16:09:39.000000000 +0100
-+++ asmack-org/build.xml 2010-02-24 00:18:40.000000000 +0100
-@@ -36,6 +36,13 @@
- </and>
- </condition>
-
-+<condition property="build-2.1">
-+ <and>
-+ <istrue value="${build.all}" />
-+ <available file="${sdk-location}/platforms/android-2.1/android.jar" />
-+ </and>
-+</condition>
-+
- <target name="compile-jse" description="Compile for java se">
- <delete dir="build/classes" failonerror="false" />
- <mkdir dir="build/classes" />
-@@ -65,6 +72,34 @@
- />
- </target>
-
-+<target name="compile-a21" description="Compile for android 2.1" if="build-2.1">
-+ <delete dir="build/classes" failonerror="false" />
-+ <mkdir dir="build/classes" />
-+ <mkdir dir="build/classes/trunk" />
-+ <javac
-+ target="1.5"
-+ srcdir="build/src/trunk"
-+ destdir="build/classes/trunk"
-+ classpath="lib/xmlpull_1_1_3_4c.jar"
-+ bootclasspath="${sdk-location}/platforms/android-2.1/android.jar"
-+ debug="true"
-+ debuglevel="source,lines"
-+ />
-+ <copy todir="build/classes/trunk"><fileset dir="build/src/trunk" includes="META-INF/**" /></copy>
-+ <jar
-+ basedir="build/classes/trunk"
-+ destfile="build/asmack-android-2.1${jar.suffix}.jar"
-+ filesonly="true"
-+ level="9"
-+ />
-+ <zip
-+ basedir="build/src/trunk"
-+ destfile="build/asmack-android-2.1-source${jar.suffix}.zip"
-+ filesonly="true"
-+ level="9"
-+ />
-+</target>
-+
- <target name="compile-a201" description="Compile for android 2.0.1" if="build-2.0.1">
- <delete dir="build/classes" failonerror="false" />
- <mkdir dir="build/classes" />
-@@ -208,7 +243,7 @@
- <target
- name="compile"
- description="Compile for all targets"
-- depends="compile-jse,compile-a201,compile-a20,compile-a16,compile-a15,compile-a11"
-+ depends="compile-jse,compile-a21,compile-a201,compile-a20,compile-a16,compile-a15,compile-a11"
- />
-
- </project>
Binary file res/drawable-hdpi/beem_icon_launcher_color.png has changed
Binary file res/drawable-ldpi/beem_icon_launcher_color.png has changed
Binary file res/drawable-mdpi/beem_icon_launcher_color.png has changed
Binary file res/drawable/beem_icon_launcher_color106.png has changed
Binary file res/drawable/beem_icon_launcher_color160.png has changed
Binary file res/drawable/beem_icon_launcher_color80.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/drawable/status_icon.xml Mon Jun 14 22:47:22 2010 +0200
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Level list drawable for status icon
+ See src/com/beem/project/beem/utils/Status.java
+ for level values
+-->
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:maxLevel="100" android:drawable="@android:drawable/presence_offline" />
+ <item android:maxLevel="200" android:drawable="@drawable/status_requested" />
+ <item android:maxLevel="300" android:drawable="@android:drawable/presence_away" />
+ <item android:maxLevel="400" android:drawable="@android:drawable/presence_busy" />
+ <item android:maxLevel="600" android:drawable="@android:drawable/presence_online" />
+ </level-list>
--- a/res/layout-large-land/login_anim.xml Mon Jun 14 22:45:56 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="fill_parent" android:layout_width="fill_parent"
- android:orientation="vertical">
- <ImageView android:id="@+id/loginanim_logo_anim" android:src="@drawable/beem_icon_launcher_color160"
- android:layout_height="wrap_content" android:layout_width="wrap_content"
- android:layout_gravity="center_vertical|center_horizontal|center"
- android:layout_weight="1" />
- <TextView android:id="@+id/loginanim_status_text"
- android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:textSize="20sp" android:gravity="center" android:textColor="@color/vert_manu"/>
- <Button android:id="@+id/loginanim_cancel_button"
- android:layout_height="wrap_content" android:layout_width="fill_parent"
- android:layout_gravity="bottom" android:text="@string/CancelButton" />
-</LinearLayout>
-
--- a/res/layout-large/login_anim.xml Mon Jun 14 22:45:56 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="fill_parent" android:layout_width="fill_parent"
- android:orientation="vertical">
- <ImageView android:id="@+id/loginanim_logo_anim" android:src="@drawable/beem_icon_launcher_color160"
- android:layout_height="wrap_content" android:layout_width="wrap_content"
- android:layout_gravity="center_vertical|center_horizontal|center"
- android:layout_weight="1" />
- <TextView android:id="@+id/loginanim_status_text"
- android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:textSize="20sp" android:gravity="center" android:textColor="@color/vert_manu"/>
- <Button android:id="@+id/loginanim_cancel_button"
- android:layout_height="wrap_content" android:layout_width="fill_parent"
- android:layout_gravity="bottom" android:text="@string/CancelButton" />
-</LinearLayout>
-
--- a/res/layout-small/login_anim.xml Mon Jun 14 22:45:56 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="fill_parent" android:layout_width="fill_parent"
- android:orientation="vertical">
- <ImageView android:id="@+id/loginanim_logo_anim" android:src="@drawable/beem_icon_launcher_color80"
- android:layout_height="wrap_content" android:layout_width="wrap_content"
- android:layout_gravity="center_vertical|center_horizontal|center"
- android:layout_weight="1" />
- <TextView android:id="@+id/loginanim_status_text"
- android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:textSize="20sp" android:gravity="center" android:textColor="@color/vert_manu"/>
- <Button android:id="@+id/loginanim_cancel_button"
- android:layout_height="wrap_content" android:layout_width="fill_parent"
- android:layout_gravity="bottom" android:text="@string/CancelButton" />
-</LinearLayout>
-
--- a/res/layout/addcontact.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/addcontact.xml Mon Jun 14 22:47:22 2010 +0200
@@ -11,21 +11,24 @@
<EditText android:id="@+id/addc_login" android:inputType="textEmailAddress"
android:imeOptions="actionNext" android:scrollHorizontally="true"
android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:layout_margin="3dip" />
+ android:layout_margin="3dip"
+ android:contentDescription="@string/AddCLogin"/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/AddCAlias"
style="@style/Label" />
<EditText android:id="@+id/addc_alias" android:inputType="text"
android:imeOptions="actionNext" android:textSize="16sp"
android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:scrollHorizontally="true" android:layout_margin="3dip" />
+ android:scrollHorizontally="true" android:layout_margin="3dip"
+ android:contentDescription="@string/AddCAlias"/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/AddCGroup"
style="@style/Label" />
<EditText android:id="@+id/addc_group" android:inputType="text"
android:textSize="16sp" android:layout_width="fill_parent"
android:scrollHorizontally="true" android:layout_height="wrap_content"
- android:layout_margin="3dip" />
+ android:layout_margin="3dip"
+ android:contentDescription="@string/AddCGroup"/>
<View android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_marginBottom="18dp" />
<Button android:id="@+id/addc_ok" android:layout_width="fill_parent"
--- a/res/layout/changestatus.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/changestatus.xml Mon Jun 14 22:47:22 2010 +0200
@@ -10,7 +10,8 @@
android:text="@string/ChangeStatusType" style="@style/Label" />
<Spinner android:id="@+id/ChangeStatusSpinner"
android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:drawSelectorOnTop="true" android:layout_below="@id/ChangeStatusTypeLabel" />
+ android:drawSelectorOnTop="true" android:layout_below="@id/ChangeStatusTypeLabel"
+ android:contentDescription="@string/ChangeStatusType"/>
<TextView android:id="@+id/ChangeStatusMessageLabel"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_below="@id/ChangeStatusSpinner"
@@ -18,6 +19,7 @@
android:inputType="textShortMessage|textCapSentences|textAutoCorrect|textMultiLine|textImeMultiLine"
android:imeOptions="actionDone"
android:selectAllOnFocus="true"
+ android:focusable="true"
/>
<EditText android:id="@+id/ChangeStatusMessage"
android:inputType="textShortMessage|textAutoCorrect"
--- a/res/layout/chat.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/chat.xml Mon Jun 14 22:47:22 2010 +0200
@@ -7,6 +7,7 @@
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" />
<LinearLayout android:orientation="vertical"
@@ -15,27 +16,32 @@
<TextView android:id="@+id/chat_contact_name"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:lines="1" android:singleLine="true" android:textSize="16sp"
- android:textStyle="bold" android:textColor="#FFFFFF" />
+ android:textStyle="bold" android:textColor="#FFFFFF"
+ android:focusable="true"/>
<TextView android:id="@+id/chat_contact_status_msg"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:autoLink="all" android:textSize="12sp" android:textColor="#FFFFFF"
- android:textColorLink="#FFFFFF" />
+ android:textColorLink="#FFFFFF"
+ android:focusable="true"/>
<TextView android:id="@+id/chat_contact_chat_state"
android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:textStyle="italic" android:textSize="12sp" />
+ android:textStyle="italic" android:textSize="12sp"
+ android:focusable="true"/>
</LinearLayout>
</LinearLayout>
<View android:layout_width="fill_parent" android:layout_height="2dp"
android:fadingEdge="horizontal" android:background="#555555" />
<ListView android:id="@+id/chat_messages"
- android:layout_width="fill_parent" android:layout_height="0px"
+ android:layout_width="fill_parent" android:layout_height="0dip"
android:layout_weight="1" android:transcriptMode="normal"
+ android:stackFromBottom="true"
android:fastScrollEnabled="true" android:smoothScrollbar="false"
- android:layout_marginBottom="20sp" android:padding="4px" />
+ android:layout_marginBottom="20sp" android:padding="4px"
+ 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="wrap_content"
+ <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"
--- a/res/layout/contactdialogaliasdialog.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/contactdialogaliasdialog.xml Mon Jun 14 22:47:22 2010 +0200
@@ -11,5 +11,6 @@
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
android:scrollHorizontally="true" android:autoText="false"
- android:capitalize="none" android:gravity="fill_horizontal" />
+ android:capitalize="none" android:gravity="fill_horizontal"
+ android:contentDescription="@string/userinfo_label_alias"/>
</LinearLayout>
--- a/res/layout/contactlist.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/contactlist.xml Mon Jun 14 22:47:22 2010 +0200
@@ -8,6 +8,8 @@
android:layout_height="fill_parent" android:orientation="horizontal"
android:padding="2px">
<ListView android:id="@+id/contactlist" android:layout_width="fill_parent"
- android:layout_height="fill_parent" android:transcriptMode="disabled" />
+ android:layout_height="fill_parent" android:transcriptMode="disabled"
+ android:textFilterEnabled="true" />
+
</LinearLayout>
</LinearLayout>
--- a/res/layout/contactlist_groupstub.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/contactlist_groupstub.xml Mon Jun 14 22:47:22 2010 +0200
@@ -4,7 +4,7 @@
android:layout_height="wrap_content">
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contactlist_banner" android:layout_width="fill_parent"
- android:layout_height="42px" android:spacing="42px"
+ android:layout_height="40dp" android:spacing="25dp"
android:unselectedAlpha="0.4" android:background="#222222" />
<View android:layout_width="fill_parent" android:layout_height="2dp"
android:fadingEdge="horizontal" android:background="#555555" />
--- a/res/layout/create_account.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/create_account.xml Mon Jun 14 22:47:22 2010 +0200
@@ -11,21 +11,24 @@
<EditText android:id="@+id/create_account_username"
android:inputType="textEmailAddress" android:imeOptions="actionNext"
android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:singleLine="true" />
+ android:singleLine="true"
+ android:contentDescription="@string/create_account_username"/>
<TextView android:id="@+id/create_account_label_password"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/create_account_password" style="@style/Label" />
<EditText android:id="@+id/create_account_password"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:inputType="textPassword" android:imeOptions="actionNext"
- android:password="true" android:singleLine="true" />
+ android:password="true" android:singleLine="true"
+ android:contentDescription="@string/create_account_password"/>
<TextView android:id="@+id/create_account_label_confirm_password"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/create_account_confirm_password" style="@style/Label" />
<EditText android:id="@+id/create_account_confirm_password"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:inputType="textPassword" android:imeOptions="actionNext"
- android:password="true" android:singleLine="true" />
+ android:password="true" android:singleLine="true"
+ android:contentDescription="@string/create_account_confirm_password"/>
<View android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_marginBottom="18dp" />
<Button android:id="@+id/create_account_button"
--- a/res/layout/group_list.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/group_list.xml Mon Jun 14 22:47:22 2010 +0200
@@ -5,11 +5,12 @@
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="0dip" android:layout_weight="1"
- android:stackFromBottom="true" android:transcriptMode="normal" />
+ android:stackFromBottom="true" android:transcriptMode="normal"
+ android:focusable="true"/>
<EditText android:id="@+id/GroupListText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxLength="20"
android:singleLine="true" />
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
--- a/res/layout/login_anim.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/login_anim.xml Mon Jun 14 22:47:22 2010 +0200
@@ -3,7 +3,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:orientation="vertical">
- <ImageView android:id="@+id/loginanim_logo_anim" android:src="@drawable/beem_icon_launcher_color106"
+ <ImageView android:id="@+id/loginanim_logo_anim" android:src="@drawable/beem_icon_launcher_color"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_gravity="center_vertical|center_horizontal|center"
android:layout_weight="1" />
--- a/res/layout/preferences.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/preferences.xml Mon Jun 14 22:47:22 2010 +0200
@@ -25,11 +25,11 @@
android:hint="@string/away_message_hint" />
</PreferenceScreen>
<PreferenceScreen android:title="@string/notification_preferences">
- <CheckBoxPreference android:title="@string/notification_disable_vibrate_title"
- android:defaultValue="false" android:summary="@string/notification_disable_vibrate_sum"
- android:key="settings_notification_disable_vibrate" />
+ <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="settings_notification_snd"
+ android:title="@string/notification_snd_title" android:key="notification_sound"
android:summary="@string/notification_snd_sum" android:ringtoneType="notification"
android:showDefault="true" />
</PreferenceScreen>
@@ -56,31 +56,31 @@
android:summary="@string/settings_proxy_sum">
<CheckBoxPreference android:title="@string/SettingsProxyProxy"
android:defaultValue="false" android:summary="@string/SettingsProxySummary"
- android:key="settings_key_proxy_use" />
+ android:key="proxy_use" />
<PreferenceCategory android:title="@string/proxy_proxy_settings">
- <ListPreference android:dependency="settings_key_proxy_use"
+ <ListPreference android:dependency="proxy_use"
android:title="@string/SettingsProxyType" android:entries="@array/proxy_types"
android:summary="@string/SettingsProxyTypeSummary"
android:defaultValue="HTTP" android:entryValues="@array/proxy_types"
- android:key="settings_key_proxy_type" />
+ android:key="proxy_type" />
<EditTextPreference android:singleLine="true"
- android:dependency="settings_key_proxy_use" android:name="serveur"
+ android:dependency="proxy_use" android:name="serveur"
android:summary="@string/SettingsProxyServer" android:title="@string/settings_proxy_server"
- android:key="settings_key_proxy_server" />
+ android:key="proxy_server" />
<EditTextPreference android:singleLine="true"
- android:dependency="settings_key_proxy_use" android:name="port"
+ android:dependency="proxy_use" android:name="port"
android:summary="@string/SettingsProxyPort" android:title="@string/settings_proxy_port"
- android:key="settings_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"
- android:dependency="settings_key_proxy_use" android:name="Utilisateur"
+ android:dependency="proxy_use" android:name="Utilisateur"
android:summary="@string/SettingsProxyUser" android:title="@string/settings_proxy_username"
- android:key="settings_key_proxy_username" />
+ android:key="proxy_username" />
<EditTextPreference android:singleLine="true"
- android:dependency="settings_key_proxy_use" android:name="pass_user"
+ android:dependency="proxy_use" android:name="pass_user"
android:password="true" android:summary="@string/SettingsProxyPassword"
- android:title="@string/settings_proxy_password" android:key="settings_key_proxy_password" />
+ android:title="@string/settings_proxy_password" android:key="proxy_password" />
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:key="advanced"
--- a/res/layout/privacy_list.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/privacy_list.xml Mon Jun 14 22:47:22 2010 +0200
@@ -4,7 +4,9 @@
android:layout_height="fill_parent" android:padding="8dp">
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
- android:drawSelectorOnTop="false" />
+ android:drawSelectorOnTop="false"
+ android:focusable="true"/>
<TextView android:id="@id/android:empty" android:layout_width="fill_parent"
- android:layout_height="fill_parent" android:text="@string/privacy_list_no_data" />
+ android:layout_height="fill_parent" android:text="@string/privacy_list_no_data"
+ android:focusable="true"/>
</LinearLayout>
--- a/res/layout/privacy_list_create_dialog.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/privacy_list_create_dialog.xml Mon Jun 14 22:47:22 2010 +0200
@@ -10,5 +10,6 @@
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
android:scrollHorizontally="true" android:autoText="false"
- android:capitalize="none" android:gravity="fill_horizontal" />
+ android:capitalize="none" android:gravity="fill_horizontal"
+ android:contentDescription="@string/privacy_list_create_dialog_list_name_label"/>
</LinearLayout>
--- a/res/layout/subscription.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/subscription.xml Mon Jun 14 22:47:22 2010 +0200
@@ -16,7 +16,8 @@
android:layout_height="fill_parent" android:autoLink="none"
android:id="@+id/SubscriptionText" android:text="@string/SubscriptText"
android:textColor="@color/white" android:textSize="14sp"
- android:layout_weight="1" android:layout_marginBottom="18dp" />
+ android:layout_weight="1" android:layout_marginBottom="18dp"
+ android:focusable="true"/>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content">
@@ -30,4 +31,4 @@
android:layout_weight="1" android:text="@string/RefuseButton" />
</LinearLayout>
</LinearLayout>
-</ScrollView>
\ No newline at end of file
+</ScrollView>
--- a/res/layout/wizard_account.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/wizard_account.xml Mon Jun 14 22:47:22 2010 +0200
@@ -16,7 +16,8 @@
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/account_wizard_text1"
android:textSize="18sp"
- android:paddingBottom="10dip" />
+ android:paddingBottom="10dip"
+ android:focusable="true" />
<RadioGroup android:id="@+id/configure_group"
android:layout_width="fill_parent" android:layout_height="wrap_content" >
<RadioButton android:id="@+id/configure_account"
--- a/res/layout/wizard_account_configure.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/layout/wizard_account_configure.xml Mon Jun 14 22:47:22 2010 +0200
@@ -24,14 +24,16 @@
android:inputType="textEmailAddress" android:imeOptions="actionNext"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:singleLine="true"
- android:hint="beem@beem-project.com "/>
+ android:hint="beem@beem-project.com "
+ android:contentDescription="@string/JabberID"/>
<TextView
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/Password" style="@style/Label" />
<EditText android:id="@+id/account_password"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:inputType="textPassword" android:imeOptions="actionNext"
- android:password="true" android:singleLine="true" />
+ android:password="true" android:singleLine="true"
+ android:contentDescription="@string/Password"/>
</LinearLayout>
</ScrollView>
--- a/res/menu/contact_list.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/menu/contact_list.xml Mon Jun 14 22:47:22 2010 +0200
@@ -3,6 +3,9 @@
android:visible="true"
android:title="@string/contact_list_menu_add_contact"
android:icon="@drawable/ic_menu_add" />
+ <item android:id="@+id/menu_change_status"
+ android:visible="true"
+ android:title="@string/contact_list_menu_status"/>
<item android:id="@+id/contact_list_menu_settings"
android:visible="true"
android:title="@string/contact_list_menu_settings"
--- a/res/values-de/arrays.xml Mon Jun 14 22:45:56 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string-array name="proxy_types">
- <item>HTTP</item>
- <item>SOCKS4</item>
- <item>SOCKS5</item>
- </string-array>
- <string-array name="status_types">
- <item name="AvailableForChat">Bereit zum Chatten</item>
- <item name="Available">Online</item>
- <item name="Busy">Beschäftigt</item>
- <item name="Away">Abwesend</item>
- <item name="Unavailable">N/A</item>
- <item name="Disconnected">Offline</item>
- </string-array>
- <string-array name="privacy_list_select_dialog">
- <item name="@string/privacy_list_select_dialog_buddies">Kontakte</item>
- <item name="@string/privacy_list_select_dialog_groups">Gruppen</item>
- <item name="@string/privacy_list_select_dialog_delete">Löschen</item>
- </string-array>
- <string-array name="loganim_state">
- <item name="@string/loganim_connecting">Verbinden...</item>
- <item name="@string/loganim_authenticating">Authentifizieren...</item>
- <item name="@string/loganim_login_success">Erfolgreich angemeldet</item>
- <item name="@string/loganim_login_failed">Anmeldung gescheitert</item>
- </string-array>
-</resources>
\ No newline at end of file
--- a/res/values-de/strings.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/values-de/strings.xml Mon Jun 14 22:47:22 2010 +0200
@@ -21,21 +21,6 @@
<string name="BeemServiceCreated">Beem Service erstellt</string>
<string name="BeemServiceDestroyed">Beem Service verworfen</string>
- <!-- Preferences informations -->
- <string name="PreferenceStatus">Status</string>
- <string name="PreferenceStatusText">status_text</string>
- <string name="PreferenceIsConfigured">preference_is_configured </string>
-
- <!-- ContactListSettings class -->
- <string name="CLSServerConnection">Server Verbindung</string>
- <string name="CLSUserid">Benutzer id:</string>
- <string name="CLSPassword">Passwort:</string>
- <string name="CLSService">Dienst:</string>
- <string name="CLSHostPort">Port:</string>
- <string name="CLSProxyInfo">Proxy Informationen</string>
- <string name="CLSLogin">Anmelden:</string>
- <string name="CLSOkButton">Ok</string>
-
<!-- ContactDialog class -->
<string name="CDChat">Chatten</string>
<string name="CDCall">Anrufen</string>
@@ -122,8 +107,8 @@
<string name="away_message_sum">Angezeigte Abwesendheitsnachricht</string>
<string name="away_message_hint">Ich bin abwesend, mein Telefonbildschirm ist aus</string>
<string name="notification_preferences">Benachrichtigungseinstellungen</string>
- <string name="notification_disable_vibrate_title">Vibrieren</string>
- <string name="notification_disable_vibrate_sum">Deaktivieren Sie vibriert bei eingehenden Nachrichten</string>
+ <string name="notification_enable_vibrate_title">Vibrieren</string>
+ <string name="notification_enable_vibrate_sum">Aktivieren Sie vibriert 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>
@@ -135,9 +120,6 @@
<string name="SubscriptText">%s will dich zu seiner/ihrer Kontaktliste hinzufügen. Willst du ihn/sie authorisieren ?</string>
<string name="SubscriptTitle">Kontakt authorisieren ?</string>
- <!-- ContactList class -->
- <string name="ConListNotConnected">Offline</string>
-
<!-- BeemChatManager -->
<string name="BeemChatManagerNewMessage">Du hast eine neue Nachricht</string>
@@ -159,9 +141,6 @@
<string name="user_info_name">Beem - Benutzerinformation</string>
<!-- Buttons -->
- <string name="button_reset">Zurücksetzen</string>
- <string name="button_login">Anmelden</string>
- <string name="button_save">Speichern</string>
<string name="button_create_account">Dieses Konto erstellen</string>
<string name="button_create_login_account">Dieses Konto erstellen und benutzen</string>
@@ -179,12 +158,17 @@
<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_max_retry">Maximaler Wiederholungsversuch</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>
+
<!-- EditSettings Activity -->
<string name="settings_menu_create_account">Konto erstellen</string>
<string name="settings_menu_privacy_lists">Meine Privatsphärenliste verwalten</string>
--- a/res/values-fr/arrays.xml Mon Jun 14 22:45:56 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string-array name="proxy_types">
- <item>HTTP</item>
- <item>SOCKS4</item>
- <item>SOCKS5</item>
- </string-array>
- <string-array name="status_types">
- <item name="AvailableForChat">Disponible pour Bavarder</item>
- <item name="Available">Disponible</item>
- <item name="Busy">Occupé(e)</item>
- <item name="Away">Parti(e)</item>
- <item name="Unavailable">Indisponible</item>
- <item name="Disconnected">Déconnecté(e)</item>
- </string-array>
- <string-array name="privacy_list_select_dialog">
- <item name="@string/privacy_list_select_dialog_buddies">Contacts</item>
- <item name="@string/privacy_list_select_dialog_groups">Groupes</item>
- <item name="@string/privacy_list_select_dialog_delete">Supprimer</item>
- </string-array>
- <string-array name="loganim_state">
- <item name="@string/loganim_connecting">Connexion en cours...</item>
- <item name="@string/loganim_authenticating">Authentification...</item>
- <item name="@string/loganim_login_success">Connexion effectuée</item>
- <item name="@string/loganim_login_failed">Echec de la connexion</item>
- </string-array>
-</resources>
--- a/res/values-fr/strings.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/values-fr/strings.xml Mon Jun 14 22:47:22 2010 +0200
@@ -21,16 +21,6 @@
<string name="BeemServiceCreated">BeemService Créé</string>
<string name="BeemServiceDestroyed">BeemService détruit</string>
- <!-- ContactListSettings class -->
- <string name="CLSServerConnection">Connexion au serveur</string>
- <string name="CLSUserid">Id utilisateur:</string>
- <string name="CLSPassword">Mot de passe:</string>
- <string name="CLSService">Service:</string>
- <string name="CLSHostPort">Port:</string>
- <string name="CLSProxyInfo">Informations proxy</string>
- <string name="CLSLogin">Nom d\'utilisateur:</string>
- <string name="CLSOkButton">Ok</string>
-
<!-- ContactDialog class -->
<string name="CDChat">Chat</string>
<string name="CDCall">Appeler</string>
@@ -114,13 +104,13 @@
<string name="settings_proxy_username">Nom d\'utilisateur</string>
<string name="settings_proxy_password">Mot de passe</string>
<string name="away_chk_title">Activer l\'absence automatique</string>
- <string name="away_chk_sum">Change votre status en Absent automatiquement quand l\'écran du telephone s\'éteind</string>
- <string name="away_message_title">Message d\'asbence</string>
+ <string name="away_chk_sum">Change votre status en Absent automatiquement quand l\'écran du telephone s\'éteint</string>
+ <string name="away_message_title">Message d\'absence</string>
<string name="away_message_sum">Votre Message d\'absence</string>
- <string name="away_message_hint">Je suis absent car mon ecran est éteind</string>
+ <string name="away_message_hint">Je suis absent car mon ecran est éteint</string>
<string name="notification_preferences">Paramètres des notifications</string>
- <string name="notification_disable_vibrate_title">Vibreur</string>
- <string name="notification_disable_vibrate_sum">Désactiver le vibreur pour les messages entrants</string>
+ <string name="notification_enable_vibrate_title">Activer le vibreur</string>
+ <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>
@@ -131,9 +121,6 @@
<string name="SubscriptText">%s vient de vous ajouter à sa liste de contacts. Souhaitez-vous l\'autoriser ?</string>
<string name="SubscriptTitle">Autoriser ce contact ?</string>
- <!-- ContactList class -->
- <string name="ConListNotConnected">Non connecté(e)</string>
-
<!-- BeemChatManager class -->
<string name="BeemChatManagerNewMessage">Vous avez reçu un nouveau message</string>
@@ -163,9 +150,6 @@
<!--
Buttons
-->
- <string name="button_reset">Réinitialiser</string>
- <string name="button_login">Se connecter</string>
- <string name="button_save">Enregistrer</string>
<string name="button_create_account">Créer ce compte</string>
<string name="button_create_login_account">Créer puis utiliser ce compte</string>
@@ -195,9 +179,13 @@
<string name="login_no_connectivity">Pas de connexion internet disponible</string>
<string name="login_start_msg">Configuration des informations dans le menu</string>
- <!--
- EditSettings Activity
- -->
+ <!-- LoginAnim activity -->
+ <string name="loganim_connecting">Connexion en cours ...</string>
+ <string name="loganim_authenticating">Authentification ...</string>
+ <string name="loganim_login_success">Connexion effectuée</string>
+ <string name="loganim_login_failed">Echec de la connextion</string>
+
+ <!-- EditSettings Activity -->
<string name="settings_menu_create_account">Créer un compte</string>
<string name="settings_menu_privacy_lists">Gérer mes listes privées</string>
<string name="settings_saved_ok">Les paramètres ont été enregistrés avec succès.</string>
@@ -242,6 +230,7 @@
ContactList Activity
-->
<string name="contact_list_menu_add_contact">Ajouter un contact</string>
+ <string name="contact_list_menu_status">Changer son status</string>
<string name="contact_list_menu_settings">Paramètres</string>
<string name="contact_list_menu_disconnect">Se déconnecter</string>
<string name="contact_list_all_contact">Tous les contacts</string>
--- a/res/values-ru/arrays.xml Mon Jun 14 22:45:56 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string-array name="proxy_types">
- <item>HTTP</item>
- <item>SOCKS4</item>
- <item>SOCKS5</item>
- </string-array>
- <string-array name="status_types">
- <item name="AvailableForChat">Готов пообщаться</item>
- <item name="Available">Доступен</item>
- <item name="Busy">Занят</item>
- <item name="Away">Oтсутствии</item>
- <item name="Unavailable">Недоступен</item>
- <item name="Disconnected">Не в сети</item>
- </string-array>
- <string-array name="privacy_list_select_dialog">
- <item name="@string/privacy_list_select_dialog_buddies">Собеседники</item>
- <item name="@string/privacy_list_select_dialog_groups">Groups</item>
- <item name="@string/privacy_list_select_dialog_delete">Delete</item>
- </string-array>
- <string-array name="loganim_state">
- <item name="@string/loganim_connecting">Соединение...</item>
- <item name="@string/loganim_authenticating">Аутентификация...</item>
- <item name="@string/loganim_login_success">Логин успешной</item>
- <item name="@string/loganim_login_failed">Не удалось войти в сеть</item>
- </string-array>
-</resources>
--- a/res/values-ru/strings.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/values-ru/strings.xml Mon Jun 14 22:47:22 2010 +0200
@@ -21,22 +21,6 @@
<string name="BeemServiceCreated"></string>
<string name="BeemServiceDestroyed"></string>
-<!-- Preferences informations -->
-<string name="PreferenceStatus">Статус</string>
-<string name="PreferenceStatusText"></string>
-<string name="PreferenceIsConfigured">preference_is_configured
-</string>
-
-<!-- ContactListSettings class -->
-<string name="CLSServerConnection">Соединение</string>
-<string name="CLSUserid">Имя пользователя:</string>
-<string name="CLSPassword">Пароль:</string>
-<string name="CLSService">Сервер:</string>
-<string name="CLSHostPort">Порт:</string>
-<string name="CLSProxyInfo">Прокси</string>
-<string name="CLSLogin">Имя пользователя:</string>
-<string name="CLSOkButton">ОК</string>
-
<!-- ContactDialog class -->
<string name="CDChat">Написать</string>
<string name="CDCall">Повонить</string>
@@ -125,8 +109,8 @@
<string name="away_message_sum"></string>
<string name="away_message_hint"></string>
<string name="notification_preferences">Настройка оповещений</string>
-<string name="notification_disable_vibrate_title">Вибрация</string>
-<string name="notification_disable_vibrate_sum">Отключить вибрировать на входящие сообщения</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>
@@ -138,9 +122,6 @@
<string name="SubscriptText"></string>
<string name="SubscriptTitle"></string>
-<!-- ContactList class -->
-<string name="ConListNotConnected">Не подключен</string>
-
<!-- BeemChatManager -->
<string name="BeemChatManagerNewMessage">Пришло новое сообщение</string>
@@ -162,9 +143,6 @@
<string name="user_info_name">Информация о пользователе</string>
<!-- Buttons -->
-<string name="button_reset">Очистить</string>
-<string name="button_login">Войти</string>
-<string name="button_save">Сохранить</string>
<string name="button_create_account"></string>
<string name="button_create_login_account"></string>
@@ -185,13 +163,18 @@
<string name="login_settings_button">Настройки</string>
<string name="login_login_button">Войти</string>
<string name="login_login_progress">Соединяемся, подождите немного...</string>
-<string name="login_max_retry"></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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/values-zh-rCN/strings.xml Mon Jun 14 22:47:22 2010 +0200
@@ -0,0 +1,299 @@
+<?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_disable_vibrate_title">振动</string>
+ <string name="notification_disable_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>
+
+ <!-- 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_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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/values-zh-rTW/strings.xml Mon Jun 14 22:47:22 2010 +0200
@@ -0,0 +1,299 @@
+<?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_disable_vibrate_title">振動</string>
+ <string name="notification_disable_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>
+
+ <!-- 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_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>
--- a/res/values/arrays.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/values/arrays.xml Mon Jun 14 22:47:22 2010 +0200
@@ -6,12 +6,12 @@
<item>SOCKS5</item>
</string-array>
<string-array name="status_types">
- <item name="AvailableForChat">Available to chat</item>
- <item name="Available">Available</item>
- <item name="Busy">Busy</item>
- <item name="Away">Away</item>
- <item name="Unavailable">Unavailable</item>
- <item name="Disconnected">Disconnected</item>
+ <item name="AvailableForChat">@string/contact_status_msg_available_chat</item>
+ <item name="Available">@string/contact_status_msg_available</item>
+ <item name="Busy">@string/contact_status_msg_dnd</item>
+ <item name="Away">@string/contact_status_msg_away</item>
+ <item name="Unavailable">@string/contact_status_msg_xa</item>
+ <item name="Disconnected">@string/contact_status_msg_offline</item>
</string-array>
<string-array name="privacy_list_select_dialog">
<item name="@string/privacy_list_select_dialog_buddies">Buddies</item>
@@ -19,9 +19,9 @@
<item name="@string/privacy_list_select_dialog_delete">Delete</item>
</string-array>
<string-array name="loganim_state">
- <item name="@string/loganim_connecting">Connecting...</item>
- <item name="@string/loganim_authenticating">Authenticating...</item>
- <item name="@string/loganim_login_success">Login success</item>
- <item name="@string/loganim_login_failed">Login failed</item>
+ <item>@string/loganim_connecting</item>
+ <item>@string/loganim_authenticating</item>
+ <item>@string/loganim_login_success</item>
+ <item>@string/loganim_login_failed</item>
</string-array>
</resources>
--- a/res/values/strings.xml Mon Jun 14 22:45:56 2010 +0200
+++ b/res/values/strings.xml Mon Jun 14 22:47:22 2010 +0200
@@ -21,16 +21,6 @@
<string name="BeemServiceCreated">Beem Service Created</string>
<string name="BeemServiceDestroyed">Beem Service Destroyed</string>
- <!-- ContactListSettings class -->
- <string name="CLSServerConnection">Server connection</string>
- <string name="CLSUserid">User id:</string>
- <string name="CLSPassword">Password:</string>
- <string name="CLSService">Service:</string>
- <string name="CLSHostPort">Port:</string>
- <string name="CLSProxyInfo">Proxy informations</string>
- <string name="CLSLogin">Login:</string>
- <string name="CLSOkButton">Ok</string>
-
<!-- ContactDialog class -->
<string name="CDChat">Chat</string>
<string name="CDCall">Call</string>
@@ -119,8 +109,8 @@
<string name="away_message_sum">The away message that will be displayed</string>
<string name="away_message_hint">I\'m away, my cellphone screen is off</string>
<string name="notification_preferences">Notification settings</string>
- <string name="notification_disable_vibrate_title">Vibrate</string>
- <string name="notification_disable_vibrate_sum">Disable vibrate on incoming messages</string>
+ <string name="notification_enable_vibrate_title">Enable vibrate</string>
+ <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>
@@ -132,9 +122,6 @@
<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>
- <!-- ContactList class -->
- <string name="ConListNotConnected">Not connected</string>
-
<!-- BeemChatManager -->
<string name="BeemChatManagerNewMessage">You\'ve a new message</string>
@@ -156,9 +143,6 @@
<string name="user_info_name">Beem - User Info</string>
<!-- Buttons -->
- <string name="button_reset">Reset</string>
- <string name="button_login">Login</string>
- <string name="button_save">Save</string>
<string name="button_create_account">Create this account</string>
<string name="button_create_login_account">Create and use this account</string>
@@ -179,13 +163,18 @@
<string name="login_settings_button">Settings</string>
<string name="login_login_button">Log in</string>
<string name="login_login_progress">Connecting. Please wait...</string>
- <string name="login_max_retry">Max retry</string>
<string name="login_error_msg">Unfortunately, an error occured.\n\nError
detail:\n%s</string>
<string name="login_menu_login">Login</string>
<string name="login_no_connectivity">No internet connection found</string>
<string name="login_start_msg">Settings configuration in menu</string>
+ <!-- LoginAnim activity -->
+ <string name="loganim_connecting">Connecting ...</string>
+ <string name="loganim_authenticating">Authenticating ...</string>
+ <string name="loganim_login_success">Login success</string>
+ <string name="loganim_login_failed">Login failed</string>
+
<!-- EditSettings Activity -->
<string name="settings_menu_create_account">Create an account</string>
<string name="settings_menu_privacy_lists">Manage my privacy lists</string>
@@ -230,6 +219,7 @@
<!-- ContactList Activity -->
<string name="contact_list_menu_add_contact">Add a contact</string>
+ <string name="contact_list_menu_status">Change status</string>
<string name="contact_list_menu_settings">Settings</string>
<string name="contact_list_menu_disconnect">Disconnect</string>
<string name="contact_list_all_contact">All contacts</string>
--- a/src/com/beem/project/beem/BeemApplication.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/BeemApplication.java Mon Jun 14 22:47:22 2010 +0200
@@ -67,6 +67,23 @@
public static final String STATUS_KEY = "status";
/** Preference key for status message. */
public static final String STATUS_TEXT_KEY = "status_text";
+ /** Preference key for the use of a proxy. */
+ public static final String PROXY_USE_KEY = "proxy_use";
+ /** Preference key for the type of proxy. */
+ public static final String PROXY_TYPE_KEY = "proxy_type";
+ /** Preference key for the proxy server. */
+ public static final String PROXY_SERVER_KEY = "proxy_server";
+ /** Preference key for the proxy port. */
+ public static final String PROXY_PORT_KEY = "proxy_port";
+ /** Preference key for the proxy username. */
+ public static final String PROXY_USERNAME_KEY = "proxy_username";
+ /** Preference key for the proxy password. */
+ public static final String PROXY_PASSWORD_KEY = "proxy_password";
+ /** Preference key for vibrate on notification. */
+ public static final String NOTIFICATION_VIBRATE_KEY = "notification_vibrate";
+ /** Preference key for notification sound. */
+ public static final String NOTIFICATION_SOUND_KEY = "notification_sound";
+
//TODO add the other one
private boolean mIsConnected;
--- a/src/com/beem/project/beem/BeemService.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/BeemService.java Mon Jun 14 22:47:22 2010 +0200
@@ -66,6 +66,7 @@
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.ConnectivityManager;
+import android.net.Uri;
import android.os.IBinder;
import android.os.RemoteException;
import android.preference.PreferenceManager;
@@ -79,7 +80,9 @@
import com.beem.project.beem.utils.Status;
/**
- * This class is for the Beem service. The connection to the xmpp server will be made asynchronously when the service
+ * This class is for the Beem service.
+ * It must contains every global informations needed to maintain the background service.
+ * The connection to the xmpp server will be made asynchronously when the service
* will start.
* @author darisk
*/
@@ -121,13 +124,13 @@
* Initialize the connection.
*/
private void initConnectionConfig() {
- mUseProxy = mSettings.getBoolean("settings_key_proxy_use", false);
+ mUseProxy = mSettings.getBoolean(BeemApplication.PROXY_USE_KEY, false);
if (mUseProxy) {
- String stype = mSettings.getString("settings_key_proxy_type", "HTTP");
- String phost = mSettings.getString("settings_key_proxy_server", "");
- String puser = mSettings.getString("settings_key_proxy_username", "");
- String ppass = mSettings.getString("settings_key_proxy_password", "");
- int pport = Integer.parseInt(mSettings.getString("settings_key_proxy_port", "1080"));
+ String stype = mSettings.getString(BeemApplication.PROXY_TYPE_KEY, "HTTP");
+ String phost = mSettings.getString(BeemApplication.PROXY_SERVER_KEY, "");
+ String puser = mSettings.getString(BeemApplication.PROXY_USERNAME_KEY, "");
+ String ppass = mSettings.getString(BeemApplication.PROXY_PASSWORD_KEY, "");
+ int pport = Integer.parseInt(mSettings.getString(BeemApplication.PROXY_PORT_KEY, "1080"));
ProxyInfo.ProxyType type = ProxyType.valueOf(stype);
mProxyInfo = new ProxyInfo(type, phost, pport, puser, ppass);
} else {
@@ -158,21 +161,16 @@
return mBind;
}
- /* (non-Javadoc)
- * @see android.app.Service#onUnbind(android.content.Intent)
- */
@Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "ONUNBIND()");
if (!mConnection.getAdaptee().isConnected()) {
- Log.d(TAG, "DESTROYED");
this.stopSelf();
}
return true;
}
-
/**
* {@inheritDoc}
*/
@@ -222,7 +220,6 @@
@Override
public void onDestroy() {
super.onDestroy();
- Log.d("Service", "onDestroy");
resetStatus();
mNotificationManager.cancelAll();
unregisterReceiver(mReceiver);
@@ -249,11 +246,16 @@
}
/**
- * Show a notification.
+ * Show a notification using the preference of the user.
* @param id the id of the notification.
* @param notif the notification to show
*/
public void sendNotification(int id, Notification notif) {
+ if (mSettings.getBoolean(BeemApplication.NOTIFICATION_VIBRATE_KEY, true))
+ notif.defaults |= Notification.DEFAULT_VIBRATE;
+ notif.defaults |= Notification.DEFAULT_LIGHTS;
+ String ringtoneStr = mSettings.getString(BeemApplication.NOTIFICATION_SOUND_KEY, "");
+ notif.sound = Uri.parse(ringtoneStr);
mNotificationManager.notify(id, notif);
}
@@ -298,6 +300,15 @@
}
/**
+ * Get the notification manager system service.
+ *
+ * @return the notification manager service.
+ */
+ public NotificationManager getNotificationManager() {
+ return mNotificationManager;
+ }
+
+ /**
* A sort of patch from this thread: http://www.igniterealtime.org/community/thread/31118. Avoid ClassCastException
* by bypassing the classloading shit of Smack.
* @param pm The ProviderManager.
@@ -399,9 +410,6 @@
public BeemServicePreferenceListener() {
}
- /**
- * {@inheritDoc}
- */
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("settings_away_chk".equals(key)) {
@@ -426,24 +434,23 @@
private int mOldMode;
/**
- * ctor.
+ * Constructor.
*/
public BeemServiceBroadcastReceiver() {
}
- /**
- * {@inheritDoc}
- */
@Override
public void onReceive(final Context context, final Intent intent) {
String intentAction = intent.getAction();
if (intentAction.equals(Intent.ACTION_SCREEN_OFF)) {
mOldMode = mConnection.getPreviousMode();
mOldStatus = mConnection.getPreviousStatus();
- mConnection.changeStatus(Status.CONTACT_STATUS_AWAY,
- mSettings.getString("settings_away_message", "Away"));
+ if (mConnection.isAuthentificated())
+ mConnection.changeStatus(Status.CONTACT_STATUS_AWAY,
+ mSettings.getString("settings_away_message", "Away"));
} else if (intentAction.equals(Intent.ACTION_SCREEN_ON)) {
- mConnection.changeStatus(mOldMode, mOldStatus);
+ if (mConnection.isAuthentificated())
+ mConnection.changeStatus(mOldMode, mOldStatus);
}
}
}
--- a/src/com/beem/project/beem/service/BeemChatManager.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/service/BeemChatManager.java Mon Jun 14 22:47:22 2010 +0200
@@ -56,7 +56,6 @@
import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.net.Uri;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.preference.PreferenceManager;
@@ -75,8 +74,8 @@
* @author darisk
*/
public class BeemChatManager extends IChatManager.Stub {
- /** Tag to use with log methods. */
- public static final String TAG = "BeemChatManager";
+
+ private static final String TAG = "BeemChatManager";
private final ChatManager mAdaptee;
private final Map<String, ChatAdapter> mChats = new HashMap<String, ChatAdapter>();
private final ChatListener mChatListener = new ChatListener();
@@ -95,9 +94,6 @@
mAdaptee.addChatListener(mChatListener);
}
- /**
- * {@inheritDoc}
- */
@Override
public void addChatCreationListener(IChatManagerListener listener) throws RemoteException {
if (listener != null)
@@ -259,7 +255,8 @@
*/
private PendingIntent makeChatIntent(IChat chat) {
Intent chatIntent = new Intent(mService, com.beem.project.beem.ui.Chat.class);
- chatIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ chatIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP
+ | Intent.FLAG_ACTIVITY_NEW_TASK);
try {
chatIntent.setData(chat.getParticipant().toUri());
} catch (RemoteException e) {
@@ -281,13 +278,9 @@
.getName();
Notification notification = new Notification(android.R.drawable.stat_notify_chat, tickerText, System
.currentTimeMillis());
- if (!pref.getBoolean("settings_notification_disable_vibrate", true))
- notification.defaults -= Notification.DEFAULT_VIBRATE;
notification.flags = Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(mService, tickerText, mService
.getString(R.string.BeemChatManagerNewMessage), makeChatIntent(chat));
- String ringtoneStr = pref.getString("settings_notification_snd", "");
- notification.sound = Uri.parse(ringtoneStr);
mService.sendNotification(chat.getParticipant().getJID().hashCode(), notification);
} catch (RemoteException e) {
Log.e(TAG, e.getMessage());
--- a/src/com/beem/project/beem/service/Contact.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/service/Contact.java Mon Jun 14 22:47:22 2010 +0200
@@ -79,20 +79,14 @@
private int mID;
private int mStatus;
- private String mJID;
+ private final String mJID;
private String mSelectedRes;
private String mMsgState;
private List<String> mRes;
- private List<String> mGroups;
+ private final List<String> mGroups = new ArrayList<String>();
private String mName;
/**
- * Constructor.
- */
- public Contact() {
- }
-
- /**
* Construct a contact from a parcel.
* @param in parcel to use for construction
*/
@@ -104,7 +98,6 @@
mName = in.readString();
mMsgState = in.readString();
mRes = new ArrayList<String>();
- mGroups = new ArrayList<String>();
in.readStringList(mRes);
in.readStringList(mGroups);
}
@@ -123,7 +116,6 @@
mSelectedRes = res;
if (!"".equals(res))
mRes.add(res);
- mGroups = new ArrayList<String>();
}
/**
@@ -143,7 +135,6 @@
String res = StringUtils.parseResource(enduri);
mSelectedRes = res;
mRes.add(res);
- mGroups = new ArrayList<String>();
}
/**
@@ -283,7 +274,8 @@
* @param groups the mGroups to set
*/
public void setGroups(List<String> groups) {
- this.mGroups = groups;
+ mGroups.clear();
+ mGroups.addAll(groups);
}
/**
@@ -295,14 +287,6 @@
}
/**
- * Set the Jabber ID of the contact.
- * @param jid the jabber ID to set
- */
- public void setJID(String jid) {
- mJID = jid;
- }
-
- /**
* Set the resource of the contact.
* @param resource to set.
*/
@@ -365,7 +349,6 @@
public void setStatus(PresenceAdapter presence) {
mStatus = presence.getStatus();
mMsgState = presence.getStatusText();
-
}
/**
@@ -423,4 +406,20 @@
build.append('/').append(mSelectedRes);
return build.toString();
}
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof Contact))
+ return false;
+ if (other == this)
+ return true;
+ Contact c = (Contact) other;
+ return c.getJID().equals(getJID());
+ }
+
+ @Override
+ public int hashCode() {
+ return mJID.hashCode();
+ }
+
}
--- a/src/com/beem/project/beem/service/RosterAdapter.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/service/RosterAdapter.java Mon Jun 14 22:47:22 2010 +0200
@@ -112,20 +112,6 @@
Log.e(TAG, "Error while adding new contact", e);
return null;
}
- if (groups != null) {
- for (String groupStr : groups) {
- RosterGroup group = mAdaptee.getGroup(groupStr);
- if (group == null) {
- group = mAdaptee.createGroup(groupStr);
- }
- try {
- group.addEntry(contact);
- } catch (XMPPException e) {
- e.printStackTrace();
- return null;
- }
- }
- }
return getContactFromRosterEntry(contact);
}
@@ -147,11 +133,8 @@
*/
@Override
public void createGroup(String groupname) throws RemoteException {
- try {
+ if (mAdaptee.getGroup(groupname) == null)
mAdaptee.createGroup(groupname);
- } catch (IllegalArgumentException e) {
- Log.v(TAG, "Error while creating group", e);
- }
}
/**
@@ -170,17 +153,10 @@
@Override
public List<Contact> getContactList() throws RemoteException {
boolean add = true;
- List<Contact> coList = new ArrayList<Contact>(mAdaptee.getEntries().size());
- for (RosterEntry entry : mAdaptee.getEntries()) {
- for (Contact c : coList) {
- if (c.getJID().equals(entry.getUser())) {
- add = false;
- break;
- }
- }
- // Because getEntries return duplicated user.
- if (add)
- coList.add(getContactFromRosterEntry(entry));
+ Collection<RosterEntry> list = mAdaptee.getEntries();
+ List<Contact> coList = new ArrayList<Contact>(list.size());
+ for (RosterEntry entry : list) {
+ coList.add(getContactFromRosterEntry(entry));
}
return coList;
}
@@ -335,7 +311,6 @@
*/
@Override
public void entriesDeleted(Collection<String> addresses) {
- Log.i(TAG, "Suppression de l'entry");
final int n = mRemoteRosListeners.beginBroadcast();
List<String> tab = new ArrayList<String>();
@@ -377,14 +352,13 @@
@Override
public void presenceChanged(Presence presence) {
final int n = mRemoteRosListeners.beginBroadcast();
+ Log.v(TAG, ">>> Presence changed for " + presence.getFrom());
for (int i = 0; i < n; i++) {
IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
try {
- Log.d(TAG, ">>> Presence changed.");
if (presence.getStatus() == null || "".equals(presence.getStatus())) {
presence.setStatus(mDefaultStatusMessages.get(Status.getStatusFromPresence(presence)));
- Log.d(TAG, ">>> Default status added.");
}
listener.onPresenceChanged(new PresenceAdapter(presence));
} catch (RemoteException e) {
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Mon Jun 14 22:47:22 2010 +0200
@@ -61,10 +61,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.net.Uri;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
-import android.preference.PreferenceManager;
import android.util.Log;
import com.beem.project.beem.BeemService;
@@ -204,6 +202,8 @@
public boolean login() throws RemoteException {
if (mAdaptee.isAuthenticated())
return true;
+ if (!mAdaptee.isConnected())
+ return false;
try {
mAdaptee.login(mLogin, mPassword, mResource);
mChatManager = new BeemChatManager(mAdaptee.getChatManager(), mService);
@@ -339,7 +339,8 @@
mStatusNotification.setLatestEventInfo(mService, "Beem Status", text, PendingIntent.getActivity(mService, 0,
new Intent(mService, ChangeStatus.class), 0));
- mService.sendNotification(BeemService.NOTIFICATION_STATUS_ID, mStatusNotification);
+ // bypass the preferences for notification
+ mService.getNotificationManager().notify(BeemService.NOTIFICATION_STATUS_ID, mStatusNotification);
}
/**
@@ -571,10 +572,10 @@
String from = packet.getFrom();
Notification notif = new Notification(android.R.drawable.stat_notify_more, mService.getString(
R.string.AcceptContactRequest, from), System.currentTimeMillis());
- notif.defaults = Notification.DEFAULT_ALL;
notif.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(mService, Subscription.class);
- intent.putExtra("from", from);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .putExtra("from", from);
notif.setLatestEventInfo(mService, from, mService
.getString(R.string.AcceptContactRequestFrom, from), PendingIntent.getActivity(mService, 0,
intent, PendingIntent.FLAG_ONE_SHOT));
@@ -620,16 +621,11 @@
if (p.getType() != Presence.Type.subscribe)
return;
String from = p.getFrom();
- SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mService);
Notification notification = new Notification(android.R.drawable.stat_notify_more, mService.getString(
R.string.AcceptContactRequest, from), System.currentTimeMillis());
- if (!pref.getBoolean("settings_notification_disable_vibrate", true))
- notification.defaults -= Notification.DEFAULT_VIBRATE;
notification.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(mService, Subscription.class);
intent.putExtra("from", from);
- String ringtoneStr = pref.getString("settings_notification_snd", "");
- notification.sound = Uri.parse(ringtoneStr);
notification.setLatestEventInfo(mService, from, mService
.getString(R.string.AcceptContactRequestFrom, from), PendingIntent.getActivity(mService, 0,
intent, PendingIntent.FLAG_ONE_SHOT));
--- a/src/com/beem/project/beem/ui/Chat.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/ui/Chat.java Mon Jun 14 22:47:22 2010 +0200
@@ -135,6 +135,7 @@
private final BeemBroadcastReceiver mBroadcastReceiver = new BeemBroadcastReceiver();
private final BeemRosterListener mBeemRosterListener = new BeemRosterListener();
private IXmppFacade mXmppFacade;
+ private boolean mBinded;
/**
* Constructor.
@@ -161,6 +162,7 @@
mMessagesListView.setAdapter(mMessagesListAdapter);
mInputField = (EditText) findViewById(R.id.chat_input);
mInputField.setOnKeyListener(this);
+ mInputField.requestFocus();
mSendButton = (Button) findViewById(R.id.chat_send_message);
mSendButton.setOnClickListener(new OnClickListener() {
@Override
@@ -176,8 +178,10 @@
protected void onResume() {
super.onResume();
mContact = new Contact(getIntent().getData());
- if (mXmppFacade == null)
+ if (!mBinded) {
bindService(SERVICE_INTENT, mConn, BIND_AUTO_CREATE);
+ mBinded = true;
+ }
}
/**
@@ -207,8 +211,10 @@
} catch (RemoteException e) {
Log.e(TAG, e.getMessage());
}
- if (mXmppFacade != null)
+ if (mBinded) {
unbindService(mConn);
+ mBinded = false;
+ }
mXmppFacade = null;
mRoster = null;
mChat = null;
@@ -593,7 +599,7 @@
* Update the contact status icon.
*/
private void updateContactStatusIcon() {
- mContactStatusIcon.setImageBitmap(mStatusIconsMap.get(mContact.getStatus()));
+ mContactStatusIcon.setImageLevel(mContact.getStatus());
}
/**
--- a/src/com/beem/project/beem/ui/ContactList.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java Mon Jun 14 22:47:22 2010 +0200
@@ -43,11 +43,13 @@
package com.beem.project.beem.ui;
import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import org.jivesoftware.smack.util.StringUtils;
@@ -58,8 +60,7 @@
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.LevelListDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -76,6 +77,8 @@
import android.view.ViewStub;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
+import android.widget.Filter;
+import android.widget.Filterable;
import android.widget.Gallery;
import android.widget.LinearLayout;
import android.widget.ListView;
@@ -94,45 +97,48 @@
import com.beem.project.beem.ui.dialogs.builders.ResendSubscription;
import com.beem.project.beem.utils.BeemBroadcastReceiver;
import com.beem.project.beem.utils.Status;
+import com.beem.project.beem.utils.SortedList;
/**
* The contact list activity displays the roster of the user.
*/
public class ContactList extends Activity {
- // private static final String TAG = "CONTACTLIST_ACT";
private static final Intent SERVICE_INTENT = new Intent();
static {
SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
}
- private static final int REQUEST_CODE = 1;
private static final String SETTINGS_HIDDEN_CONTACT = "settings_key_hidden_contact";
private static final String TAG = "ContactList";
private final BeemContactList mAdapterContactList = new BeemContactList();
- private final BeemBanner mAdapterBanner = new BeemBanner();
private final List<String> mListGroup = new ArrayList<String>();
+
+ /** Map containing a list of the different contacts of a given group.
+ * Each list is a @{link SortedList} so there is no need to sort it again.
+ * */
private final Map<String, List<Contact>> mContactOnGroup = new HashMap<String, List<Contact>>();
+ private final BeemContactListOnClick mOnContactClick = new BeemContactListOnClick();
private final Handler mHandler = new Handler();
private final ServiceConnection mServConn = new BeemServiceConnection();
private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver();
private final ComparatorContactListByStatusAndName<Contact> mComparator =
new ComparatorContactListByStatusAndName<Contact>();
private final BeemRosterListener mBeemRosterListener = new BeemRosterListener();
- private final Map<Integer, BitmapDrawable> mIconsMap = new HashMap<Integer, BitmapDrawable>();
private List<Contact> mListContact;
+ private String mSelectedGroup;
private IRoster mRoster;
- private String mCurGroup;
- private Contact mContact;
+ private Contact mSelectedContact;
private IXmppFacade mXmppFacade;
private SharedPreferences mSettings;
private LayoutInflater mInflater;
+ private BeemBanner mAdapterBanner;
+ private boolean mBinded;
/**
* Constructor.
*/
public ContactList() {
-
}
/**
@@ -152,23 +158,23 @@
public final boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.contact_list_menu_settings:
- startActivityForResult(new Intent(this, Settings.class), REQUEST_CODE);
+ startActivity(new Intent(this, Settings.class));
return true;
case R.id.contact_list_menu_add_contact:
startActivity(new Intent(ContactList.this, AddContact.class));
return true;
+ case R.id.menu_change_status:
+ startActivity(new Intent(ContactList.this, ChangeStatus.class));
+ return true;
case R.id.menu_disconnect:
- stopService(SERVICE_INTENT);
- finish();
+ stopService(SERVICE_INTENT);
+ finish();
return true;
default:
return false;
}
}
- /**
- * {@inheritDoc}
- */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
@@ -177,38 +183,35 @@
AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
Contact c = mListContact.get(info.position);
try {
- mContact = mRoster.getContact(c.getJID());
+ mSelectedContact = mRoster.getContact(c.getJID());
} catch (RemoteException e) {
e.printStackTrace();
}
- menu.setHeaderTitle(mContact.getJID());
+ menu.setHeaderTitle(mSelectedContact.getJID());
}
- /**
- * {@inheritDoc}
- */
@Override
public boolean onContextItemSelected(MenuItem item) {
Intent in;
boolean result;
- if (mContact != null) {
+ if (mSelectedContact != null) {
switch (item.getItemId()) {
case R.id.contact_list_context_menu_chat_item:
- List<String> res = mContact.getMRes();
+ List<String> res = mSelectedContact.getMRes();
if (res.isEmpty()) {
result = false;
break;
}
for (String resv : res) {
in = new Intent(this, Chat.class);
- in.setData(mContact.toUri(resv));
+ in.setData(mSelectedContact.toUri(resv));
item.getSubMenu().add(resv).setIntent(in);
}
result = true;
break;
case R.id.contact_list_context_menu_call_item:
try {
- mXmppFacade.call(mContact.getJID() + "/psi");
+ mXmppFacade.call(mSelectedContact.getJID() + "/psi");
result = true;
} catch (RemoteException e) {
e.printStackTrace();
@@ -216,22 +219,23 @@
result = true;
break;
case R.id.contact_list_context_menu_user_info:
- item.getSubMenu().setHeaderTitle(mContact.getJID());
+ item.getSubMenu().setHeaderTitle(mSelectedContact.getJID());
result = true;
break;
case R.id.contact_list_context_menu_userinfo_alias:
- Dialog alias = new Alias(ContactList.this, mRoster, mContact).create();
+ Dialog alias = new Alias(ContactList.this, mRoster, mSelectedContact).create();
alias.show();
result = true;
break;
case R.id.contact_list_context_menu_userinfo_group:
in = new Intent(this, GroupList.class);
- in.putExtra("contact", mContact);
+ in.putExtra("contact", mSelectedContact);
startActivity(in);
result = true;
break;
case R.id.contact_list_context_menu_userinfo_subscription:
- Dialog subscription = new ResendSubscription(ContactList.this, mXmppFacade, mContact).create();
+ Dialog subscription = new ResendSubscription(ContactList.this,
+ mXmppFacade, mSelectedContact).create();
subscription.show();
result = true;
break;
@@ -239,7 +243,7 @@
result = true;
break;
case R.id.contact_list_context_menu_userinfo_delete:
- Dialog delete = new DeleteContact(ContactList.this, mRoster, mContact).create();
+ Dialog delete = new DeleteContact(ContactList.this, mRoster, mSelectedContact).create();
delete.show();
result = true;
break;
@@ -252,25 +256,6 @@
return super.onContextItemSelected(item);
}
- /*
- * (non-Javadoc)
- * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (requestCode == REQUEST_CODE) {
- if (resultCode == RESULT_OK) {
- mListContact.clear();
- stopService(SERVICE_INTENT);
- finish();
- }
- }
- }
-
- /**
- * {@inheritDoc}
- */
@Override
protected void onCreate(Bundle saveBundle) {
super.onCreate(saveBundle);
@@ -280,24 +265,19 @@
this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
mInflater = getLayoutInflater();
- prepareIconsStatus();
+ mAdapterBanner = new BeemBanner(mInflater, mListGroup);
+ mListContact = new ArrayList<Contact>();
+ ListView listView = (ListView) findViewById(R.id.contactlist);
+ listView.setOnItemClickListener(mOnContactClick);
+ registerForContextMenu(listView);
+ listView.setAdapter(mAdapterContactList);
}
- /**
- * {@inheritDoc}
- */
@Override
protected void onResume() {
super.onResume();
- if (mXmppFacade == null)
- bindService(SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
- else {
- if (!mSettings.getBoolean("settings_key_hide_groups", false))
- buildBanner();
- else
- hideGroups();
- buildContactList();
- }
+ if (!mBinded)
+ mBinded = bindService(SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
}
/**
@@ -314,14 +294,13 @@
} catch (RemoteException e) {
Log.d("ContactList", "Remote exception", e);
}
- unbindService(mServConn);
+ if (mBinded) {
+ unbindService(mServConn);
+ mBinded = false;
+ }
mXmppFacade = null;
}
- /*
- * (non-Javadoc)
- * @see android.app.Activity#onDestroy()
- */
@Override
protected void onDestroy() {
super.onDestroy();
@@ -330,38 +309,543 @@
}
/**
- * Comparator Contact by Name.
+ * Build and display the contact list.
+ * @param group name of the contact list.
+ */
+ private void buildContactList(String group) {
+ mListContact = mContactOnGroup.get(group);
+ mSelectedGroup = group;
+ Log.d(TAG, "buildContactList for group " + group);
+ mAdapterContactList.notifyDataSetChanged();
+ }
+
+ /**
+ * Show the groups view.
*/
- @SuppressWarnings("unused")
- private class ComparatorContactListByName<T> implements Comparator<T> {
+ private void showGroups() {
+
+ ViewStub stub = (ViewStub) findViewById(R.id.contactlist_stub);
+ if (stub != null) {
+ View v = stub.inflate();
+ Gallery g = (Gallery) v.findViewById(R.id.contactlist_banner);
+ g.setOnItemClickListener(new OnItemClickGroupName());
+ g.setAdapter(mAdapterBanner);
+ g.setSelection(0);
+ } else {
+ ((LinearLayout) findViewById(R.id.contactlist_groupstub)).setVisibility(View.VISIBLE);
+ Gallery g = (Gallery) findViewById(R.id.contactlist_banner);
+ g.setSelection(0);
+ }
+ }
+
+ /**
+ * Hide the groups view.
+ */
+ private void hideGroups() {
+ View v = findViewById(R.id.contactlist_groupstub);
+ if (v != null)
+ v.setVisibility(View.GONE);
+ }
+
+ /**
+ * Listener on service event.
+ */
+ private class BeemRosterListener extends IBeemRosterListener.Stub {
/**
* Constructor.
*/
- public ComparatorContactListByName() {
+ public BeemRosterListener() {
+ }
+
+ /**
+ * {@inheritDoc}
+ * Simple stategy to handle the onEntriesAdded event.
+ * if contact has to be shown :
+ * <ul>
+ * <li> add him to his groups</li>
+ * <li> add him to the specials groups</>
+ * </ul>
+ */
+ @Override
+ public void onEntriesAdded(final List<String> addresses) throws RemoteException {
+ final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
+ for (String newName : addresses) {
+ Contact contact = mRoster.getContact(newName);
+ boolean visible = !hideDisconnected || Status.statusOnline(contact.getStatus());
+ List<String> groups = contact.getGroups();
+ if (visible) {
+ for (String group : groups) {
+ if (!mListGroup.contains(group)) {
+ mListGroup.add(mListGroup.size() - 1, group);
+ List<Contact> tmplist = new SortedList<Contact>(new LinkedList<Contact>(), mComparator);
+ mContactOnGroup.put(group, tmplist);
+ }
+ List<Contact> contactByGroups = mContactOnGroup.get(group);
+ if (mSelectedGroup.equals(group)) {
+ updateCurrentList(group, contact);
+ continue;
+ }
+ contactByGroups.add(contact);
+ }
+
+ // add the contact to all and no groups
+ addToSpecialList(contact);
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * Simple stategy to handle the onEntriesDeleted event.
+ * <ul>
+ * <li> Remove the contact from all groups</li>
+ * </ul>
+ */
+ @Override
+ public void onEntriesDeleted(final List<String> addresses) throws RemoteException {
+ Log.d(TAG, "onEntries deleted " + addresses);
+ for (String cToDelete : addresses) {
+ Contact contact = new Contact(cToDelete);
+ for (Map.Entry<String, List<Contact>> entry : mContactOnGroup.entrySet()) {
+ List<Contact> contactByGroups = entry.getValue();
+ if (mSelectedGroup.equals(entry.getKey())) {
+ updateCurrentList(entry.getKey(), contact);
+ continue;
+ }
+ contactByGroups.remove(contact);
+ }
+ cleanBannerGroup();
+ }
+
+ mHandler.post(new Runnable() {
+ public void run() {
+ mSelectedGroup = getString(R.string.contact_list_all_contact);
+ mListContact = mContactOnGroup.get(mSelectedGroup);
+
+ mAdapterContactList.notifyDataSetChanged();
+ }
+ });
+
+ }
+
+ /**
+ * {@inheritDoc}
+ * Simple stategy to handle the onEntriesUpdated event.
+ * <ul>
+ * <li> Remove the contact from all groups</li>
+ * <li> if contact has to be shown add it to his groups</li>
+ * <li> if contact has to be shown add it to the specials groups</li>
+ * </ul>
+ */
+ @Override
+ public void onEntriesUpdated(final List<String> addresses) throws RemoteException {
+ final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
+ for (String adr : addresses) {
+ Contact contact = mRoster.getContact(adr);
+ boolean visible = !hideDisconnected || Status.statusOnline(contact.getStatus());
+ List<String> groups = contact.getGroups();
+ for (Map.Entry<String, List<Contact>> entry : mContactOnGroup.entrySet()) {
+ List<Contact> contactByGroups = entry.getValue();
+ if (mSelectedGroup.equals(entry.getKey())) {
+ updateCurrentList(entry.getKey(), contact);
+ continue;
+ }
+ contactByGroups.remove(contact);
+ if (visible) {
+ for (String group : groups) {
+ if (!mListGroup.contains(group)) {
+ mListGroup.add(mListGroup.size() - 1, group);
+ List<Contact> tmplist = new SortedList<Contact>(
+ new LinkedList<Contact>(), mComparator);
+ mContactOnGroup.put(group, tmplist);
+ }
+ mContactOnGroup.get(group).remove(contact);
+ }
+ }
+
+ }
+
+ // add the contact to all and no groups
+ if (visible) {
+ addToSpecialList(contact);
+ }
+ }
+ cleanBannerGroup();
+ }
+
+ /**
+ * {@inheritDoc}
+ * Simple stategy to handle the onPresenceChanged event.
+ * <ul>
+ * <li> Remove the contact from all groups</li>
+ * <li> if contact has to be shown add it to his groups</li>
+ * <li> if contact has to be shown add it to the specials groups</li>
+ * </ul>
+ */
+ @Override
+ public void onPresenceChanged(PresenceAdapter presence) throws RemoteException {
+ Log.d(TAG, "presence");
+ String from = presence.getFrom();
+ final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
+ final Contact contact = mRoster.getContact(StringUtils.parseBareAddress(from));
+ boolean visible = !hideDisconnected || Status.statusOnline(contact.getStatus());
+ List<String> groups = contact.getGroups();
+ for (Map.Entry<String, List<Contact>> entry : mContactOnGroup.entrySet()) {
+ List<Contact> contactByGroups = entry.getValue();
+ if (mSelectedGroup.equals(entry.getKey())) {
+ updateCurrentList(entry.getKey(), contact);
+ continue;
+ }
+ contactByGroups.remove(contact);
+ if (visible) {
+ if (groups.contains(entry.getKey())) {
+ contactByGroups.add(contact);
+ }
+ }
+ }
+ if (visible) {
+ addToSpecialList(contact);
+ }
+ }
+
+ /**
+ * Add a contact to the special list No Group and All contacts.
+ * The contact will be added if the list is not the current list otherwise
+ * the list must be modified in a Handler.
+ *
+ * @param contact the contact to add.
+ */
+ private void addToSpecialList(Contact contact) {
+ List<String> groups = contact.getGroups();
+ List<Contact> list = mContactOnGroup.get(getString(R.string.contact_list_all_contact));
+ if (list != mListContact) {
+ list.add(contact);
+ }
+ list = mContactOnGroup.get(getString(R.string.contact_list_no_group));
+ if (list != mListContact && groups.isEmpty()) {
+ list.add(contact);
+ }
+ }
+
+ /**
+ * Update the current list with the status of contact.
+ *
+ * @param listName name of the current list
+ * @param contact contact to update
+ */
+ private void updateCurrentList(String listName, final Contact contact) {
+ final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
+ final List<String> groups = contact.getGroups();
+ String noGroup = getString(R.string.contact_list_no_group);
+ String allGroup = getString(R.string.contact_list_all_contact);
+ final boolean add = ((!hideDisconnected || Status.statusOnline(contact.getStatus())) && // must show and
+ (
+ (listName.equals(noGroup) && groups.isEmpty()) || // in no group
+ groups.contains(listName) || // or in current
+ listName.equals(allGroup) // or in all
+ ));
+ mHandler.post(new Runnable() {
+ public void run() {
+ mListContact.remove(contact);
+ if (add) {
+ mListContact.add(contact);
+ }
+ mAdapterContactList.notifyDataSetChanged();
+ }
+ });
+
+ }
+
+ /**
+ * Remove old groups on the banner.
+ * @throws RemoteException if an error occur when communicating with the service
+ */
+ private void cleanBannerGroup() throws RemoteException {
+ List<String> rosterGroups = mRoster.getGroupsNames();
+ List<String> realGroups = mListGroup.subList(1, mListContact.size() - 1);
+ realGroups.retainAll(rosterGroups);
+ }
+
+ }
+
+ /**
+ * Adapter contact list.
+ */
+ private class BeemContactList extends BaseAdapter implements Filterable {
+
+ private final ContactFilter mFilter;
+
+ /**
+ * Constructor.
+ */
+ public BeemContactList() {
+ mFilter = new ContactFilter();
}
/**
* {@inheritDoc}
*/
@Override
- public int compare(T c1, T c2) {
- return ((Contact) c1).getName().compareToIgnoreCase(((Contact) c2).getName());
+ public int getCount() {
+ return mListContact.size();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getItem(int position) {
+ return mListContact.get(position);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public long getItemId(int position) {
+ return mListContact.get(position).hashCode();
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View v = convertView;
+ if (convertView == null) {
+ v = mInflater.inflate(R.layout.contactlistcontact, null);
+ }
+ Contact c = mListContact.get(position);
+ if (mRoster != null) {
+ try {
+ c = mRoster.getContact(c.getJID());
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ bindView(v, c);
+ return v;
+ }
+
+ @Override
+ public Filter getFilter() {
+ return mFilter;
+ }
+
+ /**
+ * Adapte curContact to the view.
+ * @param view the row view.
+ * @param curContact the current contact.
+ */
+ 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());
+ }
+ }
+
+ /**
+ * A Filter which select Contact to display by searching in ther Jid.
+ */
+ private class ContactFilter extends Filter {
+
+ /**
+ * Create a ContactFilter.
+ */
+ public ContactFilter() { }
+
+ @Override
+ protected Filter.FilterResults performFiltering(CharSequence constraint) {
+ Log.d(TAG, "performFiltering");
+ List<Contact> result = mListContact;
+ if (constraint.length() > 0) {
+ result = new LinkedList<Contact>();
+ for (Contact c : mContactOnGroup.get(mSelectedGroup)) {
+ if (c.getJID().contains(constraint))
+ result.add(c);
+ }
+ }
+ Filter.FilterResults fr = new Filter.FilterResults();
+ fr.values = result;
+ fr.count = result.size();
+ return fr;
+ }
+
+ @Override
+ protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
+ Log.d(TAG, "publishResults");
+ List<Contact> contacts = (List<Contact>) results.values;
+ mListContact = contacts;
+ notifyDataSetChanged();
+ }
}
}
/**
+ * Adapter banner list.
+ */
+ private static class BeemBanner extends BaseAdapter {
+ private List<String> mGroups;
+ private LayoutInflater mInflater;
+
+ /**
+ * Constructor.
+ * @param inflater the inflater use to create the view for the banner
+ * @param groups list of the differents groups to adapt
+ */
+ public BeemBanner(final LayoutInflater inflater, final List<String> groups) {
+ mGroups = groups;
+ mInflater = inflater;
+ }
+
+ @Override
+ public int getCount() {
+ return mGroups.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mGroups.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View v = convertView;
+ if (convertView == null) {
+ v = mInflater.inflate(R.layout.contactlist_group, null);
+ }
+ ((TextView) v).setText(mGroups.get(position));
+ return v;
+ }
+ }
+
+ /**
+ * The service connection used to connect to the Beem service.
+ */
+ private class BeemServiceConnection implements ServiceConnection {
+
+ /**
+ * Constructor.
+ */
+ public BeemServiceConnection() {
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ mXmppFacade = IXmppFacade.Stub.asInterface(service);
+ try {
+ mRoster = mXmppFacade.getRoster();
+ if (mRoster != null) {
+ List<Contact> tmpContactList = mRoster.getContactList();
+ List<String> tmpGroupList = mRoster.getGroupsNames();
+ Collections.sort(tmpGroupList);
+ mListGroup.clear();
+ mListGroup.add(getString(R.string.contact_list_all_contact));
+ mListGroup.addAll(tmpGroupList);
+ mListGroup.add(getString(R.string.contact_list_no_group));
+ assignContactToGroups(mRoster.getContactList(), tmpGroupList);
+ makeSortedList(mContactOnGroup);
+ if (!mSettings.getBoolean("settings_key_hide_groups", false))
+ showGroups();
+ else
+ hideGroups();
+ String group = getString(R.string.contact_list_all_contact);
+ buildContactList(group);
+ mRoster.addRosterListener(mBeemRosterListener);
+ Log.d(TAG, "add rester listneer");
+ }
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ try {
+ mRoster.removeRosterListener(mBeemRosterListener);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ mXmppFacade = null;
+ mRoster = null;
+ mListContact.clear();
+ mListGroup.clear();
+ mContactOnGroup.clear();
+ mBinded = false;
+ }
+
+ /**
+ * Assign the differents contact to their groups.
+ * This methods will fill the mContactOnGroup map.
+ *
+ * @param contacts list of contacts
+ * @param groupNames list of existing groups
+ */
+ private void assignContactToGroups(List<Contact> contacts, List<String> groupNames) {
+ boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
+ mContactOnGroup.clear();
+ List<Contact> all = new LinkedList<Contact>();
+ List<Contact> noGroups = new LinkedList<Contact>();
+ for (String group : groupNames) {
+ mContactOnGroup.put(group, new LinkedList<Contact>());
+ }
+ for (Contact c : contacts) {
+ if (hideDisconnected && !Status.statusOnline(c.getStatus())) {
+ continue;
+ }
+ all.add(c);
+ List<String> groups = c.getGroups();
+ if (groups.isEmpty())
+ noGroups.add(c);
+ else {
+ for (String currentGroup : groups) {
+ List<Contact> contactsByGroups = mContactOnGroup.get(currentGroup);
+ contactsByGroups.add(c);
+ }
+ }
+ }
+ mContactOnGroup.put(getString(R.string.contact_list_no_group), noGroups);
+ mContactOnGroup.put(getString(R.string.contact_list_all_contact), all);
+ }
+
+ /**
+ * Make the List of the map became Insertion sorted list.
+ *
+ * @param map the map to convert.
+ */
+ private void makeSortedList(Map<String, List<Contact>> map) {
+ for (Map.Entry<String, List<Contact>> entry : map.entrySet()) {
+ List<Contact> l = entry.getValue();
+ entry.setValue(new SortedList<Contact>(l, mComparator));
+ }
+ }
+ }
+
+
+
+
+ /**
* Comparator Contact by status and name.
*/
- private class ComparatorContactListByStatusAndName<T> implements Comparator<T> {
+ private static class ComparatorContactListByStatusAndName<T> implements Comparator<T> {
/**
* Constructor.
*/
public ComparatorContactListByStatusAndName() {
}
- /**
- * {@inheritDoc}
- */
@Override
public int compare(T c1, T c2) {
if (((Contact) c1).getStatus() < ((Contact) c2).getStatus()) {
@@ -374,35 +858,6 @@
}
/**
- * Contact List construction.
- */
- private void buildContactList() {
- if (mCurGroup != null) {
- mListContact = mContactOnGroup.get(mCurGroup);
- }
- sortBeemContactList();
- ListView listView = (ListView) findViewById(R.id.contactlist);
- listView.setOnItemClickListener(new BeemContactListOnClick());
- registerForContextMenu(listView);
- listView.setAdapter(mAdapterContactList);
- }
-
- /**
- * buildBanner.
- */
- private void buildBanner() {
-
- ViewStub stub = (ViewStub) findViewById(R.id.contactlist_stub);
- if (stub != null)
- stub.inflate();
- else
- ((LinearLayout) findViewById(R.id.contactlist_groupstub)).setVisibility(View.VISIBLE);
- Gallery g = (Gallery) findViewById(R.id.contactlist_banner);
- g.setOnItemClickListener(new OnItemClickGroupName());
- g.setAdapter(mAdapterBanner);
- }
-
- /**
* Event simple click on item of the contact list.
*/
private class BeemContactListOnClick implements OnItemClickListener {
@@ -437,409 +892,9 @@
@Override
public void onItemClick(AdapterView<?> arg0, View v, int i, long l) {
- mCurGroup = mListGroup.get(i);
- buildContactList();
- }
- }
-
- /**
- * Prepare Bitmap Map.
- */
- private void prepareIconsStatus() {
- mIconsMap.put(Status.CONTACT_STATUS_AVAILABLE, new BitmapDrawable(BitmapFactory.decodeResource(getResources(),
- android.R.drawable.presence_online)));
- mIconsMap.put(Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT,
- new BitmapDrawable(BitmapFactory.decodeResource(getResources(), android.R.drawable.presence_online)));
- mIconsMap.put(Status.CONTACT_STATUS_AWAY,
- new BitmapDrawable(BitmapFactory.decodeResource(getResources(), android.R.drawable.presence_away)));
- mIconsMap.put(Status.CONTACT_STATUS_BUSY,
- new BitmapDrawable(BitmapFactory.decodeResource(getResources(), android.R.drawable.presence_busy)));
- mIconsMap.put(Status.CONTACT_STATUS_DISCONNECT, new BitmapDrawable(BitmapFactory.decodeResource(getResources(),
- android.R.drawable.presence_offline)));
- mIconsMap.put(Status.CONTACT_STATUS_UNAVAILABLE, new BitmapDrawable(BitmapFactory.decodeResource(getResources(),
- R.drawable.status_requested)));
- }
-
- /**
- * Sort the contact list.
- */
- private void sortBeemContactList() {
- Collections.sort(mListContact, mComparator);
- }
-
- /**
- * Listener on service event.
- */
- private class BeemRosterListener extends IBeemRosterListener.Stub {
- /**
- * Constructor.
- */
- public BeemRosterListener() {
- }
-
- /**
- * Refresh the contact list.
- */
- private class RunnableChange implements Runnable {
- /**
- * Constructor.
- */
- public RunnableChange() {
-
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void run() {
- sortBeemContactList();
- mAdapterContactList.notifyDataSetChanged();
- mAdapterBanner.notifyDataSetChanged();
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onEntriesAdded(List<String> addresses) throws RemoteException {
- for (String newName : addresses) {
- Contact c = mRoster.getContact(newName);
- mContactOnGroup.get(getString(R.string.contact_list_all_contact)).add(c);
- if (c.getGroups().size() == 0)
- mContactOnGroup.get(getString(R.string.contact_list_no_group)).add(c);
- else {
- for (String group : c.getGroups()) {
- if (!mListGroup.contains(group)) {
- mListGroup.add(mListGroup.size() - 1, group);
- List<Contact> tmplist = new ArrayList<Contact>();
- mContactOnGroup.put(group, tmplist);
- }
- mContactOnGroup.get(group).add(c);
- if (group.equals(mCurGroup) && !mListContact.contains(c))
- mListContact.add(c);
- }
- }
- }
- mHandler.post(new RunnableChange());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onEntriesDeleted(List<String> addresses) throws RemoteException {
- for (String cToDelete : addresses) {
- for (Contact c : mListContact) {
- if (c.getJID().equals(cToDelete)) {
- for (String group : mListGroup) {
- mContactOnGroup.get(group).remove(c);
- if (mContactOnGroup.get(group).size() == 0) {
- //mContactOnGroup.remove(group);
- //mListGroup.remove(group);
- }
- }
- mListContact.remove(c);
- break;
- }
- }
- }
- mListContact = mContactOnGroup.get(getString(R.string.contact_list_all_contact));
- mHandler.post(new RunnableChange());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onEntriesUpdated(List<String> addresses) throws RemoteException {
- for (String adr : addresses) {
- Contact c = mRoster.getContact(adr);
- if (c.getGroups() != null) {
- if (mContactOnGroup.get(getString(R.string.contact_list_no_group)).contains(c)) {
- mContactOnGroup.get(getString(R.string.contact_list_no_group)).remove(c);
- }
- }
- }
- mHandler.post(new RunnableChange());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onPresenceChanged(PresenceAdapter presence) throws RemoteException {
- String from = presence.getFrom();
- boolean resfound = false;
- for (Contact curContact : mListContact) {
- if (curContact.getJID().equals(StringUtils.parseBareAddress(from))) {
- String pres = StringUtils.parseResource(from);
- for (String res : curContact.getMRes()) {
- if (res.equals(pres)) {
- resfound = true;
- break;
- }
- }
- curContact.setStatus(mRoster.getPresence(StringUtils.parseBareAddress(presence.getFrom())));
- int status = presence.getStatus();
- if (!resfound && !Status.statusOnline(status))
- curContact.addRes(pres);
- else if (resfound && Status.statusOnline(status))
- curContact.delRes(pres);
- mHandler.post(new RunnableChange());
- return;
- }
- }
+ String group = mListGroup.get(i);
+ buildContactList(group);
}
}
- /**
- * Adapter contact list.
- */
- private class BeemContactList extends BaseAdapter {
-
- /**
- * Constructor.
- */
- public BeemContactList() {
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int getCount() {
- if (mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false)) {
- int res = 0;
- for (Contact c : mListContact) {
- if (Status.statusOnline(c.getStatus()))
- res++;
- }
- return res;
- } else {
- return mListContact.size();
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Object getItem(int position) {
- Contact c = null;
- if (mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false)) {
- int res = 0;
- for (Contact cur : mListContact) {
- if (res == position && Status.statusOnline(cur.getStatus())) {
- c = cur;
- break;
- }
- if (Status.statusOnline(cur.getStatus()))
- res++;
- }
- } else
- c = mListContact.get(position);
- return c;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View v = convertView;
- if (convertView == null) {
- v = mInflater.inflate(R.layout.contactlistcontact, null);
- }
- Contact c = null;
- if (mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false)) {
- int res = 0;
- for (Contact cur : mListContact) {
- if (res == position && Status.statusOnline(cur.getStatus())) {
- c = cur;
- break;
- }
- if (Status.statusOnline(cur.getStatus()))
- res++;
- }
- } else
- c = mListContact.get(position);
- if (mRoster != null) {
- try {
- c = mRoster.getContact(c.getJID());
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
- if (mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false) && !Status.statusOnline(c.getStatus())) {
- v.setVisibility(View.GONE);
- } else {
- bindView(v, c);
- }
- return v;
- }
-
- /**
- * Adapte curContact to the view.
- * @param view the row view.
- * @param curContact the current contact.
- */
- private void bindView(View view, Contact curContact) {
-
- if (curContact != null) {
- TextView v = (TextView) view.findViewById(R.id.contactlistpseudo);
- v.setCompoundDrawablesWithIntrinsicBounds(mIconsMap.get(curContact.getStatus()), null, null, null);
- v.setText(curContact.getName());
- v = (TextView) view.findViewById(R.id.contactlistmsgperso);
- v.setText(curContact.getMsgState());
- }
- }
- }
-
- /**
- * Adapter banner list.
- */
- private class BeemBanner extends BaseAdapter {
- /**
- * Constructor.
- */
- public BeemBanner() {
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int getCount() {
- return mListGroup.size();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Object getItem(int position) {
- return mListGroup.get(position);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View v = convertView;
- if (convertView == null) {
- v = mInflater.inflate(R.layout.contactlist_group, null);
- }
- ((TextView) v).setText(mListGroup.get(position));
- return v;
- }
-
- }
-
- /**
- * Create dialog resend subscription.
- */
-
- /**
- * The service connection used to connect to the Beem service.
- */
- private class BeemServiceConnection implements ServiceConnection {
-
- /**
- * Constructor.
- */
- public BeemServiceConnection() {
- }
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mXmppFacade = IXmppFacade.Stub.asInterface(service);
- try {
- mRoster = mXmppFacade.getRoster();
- if (mRoster != null) {
- mRoster.addRosterListener(mBeemRosterListener);
- List<Contact> tmpContactList = mRoster.getContactList();
- List<String> tmpGroupList = mRoster.getGroupsNames();
- Collections.sort(tmpGroupList);
- if (mListGroup.size() > 0)
- mListGroup.clear();
- mListGroup.add(getString(R.string.contact_list_all_contact));
- mListGroup.addAll(tmpGroupList);
- mListGroup.add(getString(R.string.contact_list_no_group));
- mContactOnGroup.clear();
- if (tmpGroupList.size() > 0) {
- List<Contact> tmpNoGroup = new ArrayList<Contact>();
- for (String s : tmpGroupList) {
- List<Contact> tmpList = new ArrayList<Contact>();
- for (Contact c : tmpContactList) {
- if (c.getGroups().size() == 0 && !tmpNoGroup.contains(c))
- tmpNoGroup.add(c);
- else if (c.getGroups().contains(s))
- tmpList.add(c);
- }
- mContactOnGroup.put(s, tmpList);
- }
- mContactOnGroup.put(getString(R.string.contact_list_no_group), tmpNoGroup);
- } else {
- mContactOnGroup.put(getString(R.string.contact_list_no_group), tmpContactList);
- }
- mContactOnGroup.put(getString(R.string.contact_list_all_contact), tmpContactList);
- mCurGroup = getString(R.string.contact_list_all_contact);
- if (!mSettings.getBoolean("settings_key_hide_groups", false))
- buildBanner();
- else
- hideGroups();
- buildContactList();
- }
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- try {
- mRoster.removeRosterListener(mBeemRosterListener);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- mXmppFacade = null;
- mRoster = null;
- mListContact.clear();
- mListGroup.clear();
- mContactOnGroup.clear();
- }
- }
-
- @Override
- protected void finalize() {
- Log.e(TAG, "FINALIZE");
- }
-
- /**
- * Hide the groups view.
- */
- private void hideGroups() {
- ViewStub stub = (ViewStub) findViewById(R.id.contactlist_stub);
- if (stub == null)
- ((LinearLayout) findViewById(R.id.contactlist_groupstub)).setVisibility(View.GONE);
- }
}
--- a/src/com/beem/project/beem/ui/CreateAccount.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/ui/CreateAccount.java Mon Jun 14 22:47:22 2010 +0200
@@ -172,7 +172,7 @@
* @return Registered proxy password
*/
private String getRegisteredProxyPassword() {
- return mSettings.getString("settings_key_proxy_password", DEFAULT_STRING_VALUE);
+ return mSettings.getString(BeemApplication.PROXY_PASSWORD_KEY, DEFAULT_STRING_VALUE);
}
/**
@@ -180,7 +180,7 @@
* @return Registered proxy port
*/
private int getRegisteredProxyPort() {
- return Integer.parseInt(mSettings.getString("settings_key_proxy_port", DEFAULT_STRING_VALUE));
+ return Integer.parseInt(mSettings.getString(BeemApplication.PROXY_PORT_KEY, DEFAULT_STRING_VALUE));
}
/**
@@ -188,7 +188,7 @@
* @return Registered proxy server
*/
private String getRegisteredProxyServer() {
- return mSettings.getString("settings_key_proxy_server", DEFAULT_STRING_VALUE);
+ return mSettings.getString(BeemApplication.PROXY_SERVER_KEY, DEFAULT_STRING_VALUE);
}
/**
@@ -197,8 +197,8 @@
*/
private ProxyInfo.ProxyType getRegisteredProxyType() {
ProxyInfo.ProxyType result = ProxyInfo.ProxyType.NONE;
- if (mSettings.getBoolean("settings_key_proxy_use", false)) {
- String type = mSettings.getString("settings_key_proxy_type", "none");
+ if (mSettings.getBoolean(BeemApplication.PROXY_USE_KEY, false)) {
+ String type = mSettings.getString(BeemApplication.PROXY_TYPE_KEY, "none");
if ("HTTP".equals(type))
result = ProxyInfo.ProxyType.HTTP;
else if ("SOCKS4".equals(type))
@@ -216,7 +216,7 @@
* @return Registered proxy use
*/
private boolean getRegisteredProxyUse() {
- return mSettings.getBoolean("settings_key_proxy_use", DEFAULT_BOOLEAN_VALUE);
+ return mSettings.getBoolean(BeemApplication.PROXY_USE_KEY, DEFAULT_BOOLEAN_VALUE);
}
/**
@@ -224,7 +224,7 @@
* @return Registered proxy username
*/
private String getRegisteredProxyUsername() {
- return mSettings.getString("settings_key_proxy_username", DEFAULT_STRING_VALUE);
+ return mSettings.getString(BeemApplication.PROXY_USERNAME_KEY, DEFAULT_STRING_VALUE);
}
/**
--- a/src/com/beem/project/beem/ui/Settings.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/ui/Settings.java Mon Jun 14 22:47:22 2010 +0200
@@ -43,11 +43,8 @@
*/
package com.beem.project.beem.ui;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
-import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.view.Menu;
@@ -55,7 +52,6 @@
import android.view.MenuItem;
import com.beem.project.beem.R;
-import com.beem.project.beem.utils.BeemBroadcastReceiver;
/**
* This class represents an activity which allows the user to change his account or proxy parameters.
@@ -63,7 +59,6 @@
public class Settings extends PreferenceActivity {
private static final Intent SERVICE_INTENT = new Intent();
- private SettingsBroadcastReceiver mReceiver;
static {
SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
@@ -75,32 +70,10 @@
public Settings() {
}
- /* (non-Javadoc)
- * @see android.preference.PreferenceActivity#onCreate(android.os.Bundle)
- */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preferences);
- mReceiver = new SettingsBroadcastReceiver();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onPause() {
- super.onPause();
- this.unregisterReceiver(mReceiver);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onResume() {
- super.onResume();
- this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
}
/**
@@ -132,20 +105,4 @@
return false;
}
}
-
- /**
- * disconnect Broadcast receiver.
- */
- private class SettingsBroadcastReceiver extends BroadcastReceiver {
- /**
- * Constructor.
- */
- public SettingsBroadcastReceiver() {
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- Settings.this.setResult(RESULT_CANCELED);
- }
- }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/utils/SortedList.java Mon Jun 14 22:47:22 2010 +0200
@@ -0,0 +1,312 @@
+/*
+ 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/
+
+*/
+package com.beem.project.beem.utils;
+
+import java.util.List;
+import java.util.Comparator;
+import java.util.ListIterator;
+import java.util.Iterator;
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * This class add a sort by insertion to a List.
+ * All methods which allow you to insert an object at a specific index
+ * will throw an UnsupportedOperationException.
+ *
+ * @author Da Risk <da_risk@beem-project.com>
+ * @param <E> the type of elements maintained by this list
+ */
+public class SortedList<E> implements List<E> {
+
+ private final List<E> mBackend;
+ private final Comparator<? super E> mComparator;
+
+ /**
+ * Create a SortedList. The existing elements will be sorted.
+ *
+ * @param list list to sort
+ * @param mComparator mComparator to use.
+ */
+ public SortedList(final List<E> list, final Comparator<? super E> mComparator) {
+ this.mComparator = mComparator;
+ this.mBackend = list;
+ Collections.sort(mBackend, mComparator);
+ }
+
+ @Override
+ public int size() {
+ return mBackend.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return mBackend.isEmpty();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return mBackend.contains(o);
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return new SortedListIterator<E>(mBackend.listIterator());
+ }
+
+ @Override
+ public Object[] toArray() {
+ return mBackend.toArray();
+ }
+
+ @Override
+ public <T> T[] toArray(T[] a) {
+ return mBackend.toArray(a);
+ }
+
+ @Override
+ public boolean add(E e) {
+ for (ListIterator<E> it = mBackend.listIterator(); it.hasNext();) {
+ if (mComparator.compare(e, it.next()) < 0) {
+ if (it.hasPrevious()) {
+ it.previous();
+ }
+ it.add(e);
+ return true;
+ }
+ }
+ mBackend.add(e);
+ return true;
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ return mBackend.remove(o);
+ }
+
+ @Override
+ public boolean containsAll(Collection<?> c) {
+ return mBackend.containsAll(c);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends E> c) {
+ boolean result = false;
+ for (E e : c) {
+ boolean t = add(e);
+ if (t) {
+ result = t;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Add all the elements in the specified collection.
+ * The index param is ignored.
+ *
+ * @param index ignored
+ * @param c collection containing elements to be added to this list
+ * @return true if this list changed as a result of the call
+ */
+ @Override
+ public boolean addAll(int index, Collection<? extends E> c) {
+ return addAll(c);
+ }
+
+ /**
+ * Add all the elements in the specified collection.
+ * The index param is ignored.
+ *
+ * @param l collection containing elements to be added to this list
+ * @return true if this list changed as a result of the call
+ * @see addAll(Collection)
+ */
+ public boolean addAll(SortedList<? extends E> l) {
+ if (!l.isEmpty()) {
+ if (mBackend.isEmpty()) {
+ return mBackend.addAll(l);
+ }
+ boolean result = false;
+ E myfirst = mBackend.get(0);
+ E last = l.get(l.size() - 1);
+ E mylast = mBackend.get(mBackend.size() - 1);
+ E first = l.get(0);
+ if (mComparator.compare(last, myfirst) < 0) {
+ result = mBackend.addAll(0, l);
+ } else if (mComparator.compare(first, mylast) > 0) {
+ result = mBackend.addAll(l);
+ } else {
+ Collection<? extends E> c = l;
+ result = addAll(c);
+ }
+ return result;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean removeAll(Collection<?> c) {
+ return mBackend.removeAll(c);
+ }
+
+ @Override
+ public boolean retainAll(Collection<?> c) {
+ return mBackend.retainAll(c);
+ }
+
+ @Override
+ public void clear() {
+ mBackend.clear();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return mBackend.equals(o);
+ }
+
+ @Override
+ public int hashCode() {
+ return mBackend.hashCode();
+ }
+
+ @Override
+ public E get(int index) {
+ return mBackend.get(index);
+ }
+
+ @Override
+ public E set(int index, E element) {
+ throw new UnsupportedOperationException("set() is not supported in SortedList");
+ }
+
+ @Override
+ public void add(int index, E element) {
+ throw new UnsupportedOperationException("add at specific index is not supported in SortedList");
+ }
+
+ @Override
+ public E remove(int index) {
+ return mBackend.remove(index);
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ return mBackend.indexOf(o);
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ return mBackend.lastIndexOf(o);
+ }
+
+ @Override
+ public ListIterator<E> listIterator() {
+ return new SortedListIterator<E>(mBackend.listIterator());
+ }
+
+ @Override
+ public ListIterator<E> listIterator(int index) {
+ return new SortedListIterator<E>(mBackend.listIterator(index));
+ }
+
+ @Override
+ public List<E> subList(int fromIndex, int toIndex) {
+ return mBackend.subList(fromIndex, toIndex);
+ }
+
+ @Override
+ public String toString() {
+ return mBackend.toString();
+ }
+
+ /**
+ * A SortedList.iterator don't allow list modification.
+ * It use the mBackend iterator for the other operations.
+ */
+ private class SortedListIterator<E> implements ListIterator<E> {
+
+ private ListIterator<E> mIt;
+
+ /**
+ * Construct SortedList.Iterator.
+ *
+ * @param iterator the iterator of the backend list
+ */
+ SortedListIterator(final ListIterator<E> iterator) {
+ mIt = iterator;
+ }
+
+ @Override
+ public void add(E e) {
+ throw new UnsupportedOperationException("add() not supported in SortedList iterator");
+ }
+
+ @Override
+ public boolean hasNext() {
+ return mIt.hasNext();
+ }
+
+ @Override
+ public E next() {
+ return mIt.next();
+ }
+
+ @Override
+ public boolean hasPrevious() {
+ return mIt.hasPrevious();
+ }
+
+ @Override
+ public E previous() {
+ return mIt.previous();
+ }
+
+ @Override
+ public int nextIndex() {
+ return mIt.nextIndex();
+ }
+
+ @Override
+ public int previousIndex() {
+ return mIt.previousIndex();
+ }
+
+ @Override
+ public void remove() {
+ mIt.remove();
+ }
+
+ @Override
+ public void set(E e) {
+ throw new UnsupportedOperationException("set () not supported in SortedList iterator");
+ }
+ }
+}
--- a/src/com/beem/project/beem/utils/Status.java Mon Jun 14 22:45:56 2010 +0200
+++ b/src/com/beem/project/beem/utils/Status.java Mon Jun 14 22:47:22 2010 +0200
@@ -147,10 +147,10 @@
/**
* Check if contact is online by his status.
* @param status contact status
- * @return is obline
+ * @return is online
*/
public static boolean statusOnline(final int status) {
- return status != Status.CONTACT_STATUS_DISCONNECT && status != Status.CONTACT_STATUS_UNAVAILABLE;
+ return status != Status.CONTACT_STATUS_DISCONNECT;
}
}