merge 0.1.4_rc
authorDa Risk <darisk972@gmail.com>
Mon, 14 Jun 2010 22:47:22 +0200
changeset 774 1b88edb34d96
parent 773 489fde4ab7d4 (diff)
parent 771 0fb9a16d7c32 (current diff)
child 775 014589486da8
merge
res/drawable/beem_icon_launcher_color106.png
res/drawable/beem_icon_launcher_color160.png
res/drawable/beem_icon_launcher_color80.png
res/layout-large-land/login_anim.xml
res/layout-large/login_anim.xml
res/layout-small/login_anim.xml
res/values-de/arrays.xml
res/values-fr/arrays.xml
res/values-ru/arrays.xml
src/com/beem/project/beem/BeemService.java
src/com/beem/project/beem/service/BeemChatManager.java
src/com/beem/project/beem/service/Contact.java
src/com/beem/project/beem/ui/Chat.java
--- a/res/layout/chat_msg_row.xml	Thu Jun 10 20:08:03 2010 +0200
+++ b/res/layout/chat_msg_row.xml	Mon Jun 14 22:47:22 2010 +0200
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"
@@ -8,15 +8,28 @@
     <TextView android:id="@+id/chatmessagename"
 	android:layout_width="fill_parent"
 	android:layout_height="wrap_content"
+	android:layout_alignParentLeft="true"
+	android:layout_alignParentTop="true"
 	android:textSize="16sp"
 	android:textColor="#FFFFFF"
 	android:textStyle="bold"
 	android:paddingBottom="1dp"
 	/>
-    <TextView android:id="@+id/chatmessagetext"
-	android:layout_width="fill_parent"
+    <TextView android:id="@+id/chatmessagedate"
+	android:layout_width="wrap_content"
 	android:layout_height="wrap_content"
+	android:layout_alignParentTop="true"
+	android:layout_alignParentRight="true"
 	android:autoLink="all"
 	/>
-</LinearLayout>
+    <TextView android:id="@+id/chatmessagetext"
+	android:layout_width="wrap_content"
+	android:layout_height="wrap_content"
+	android:layout_alignParentLeft="true"
+	android:layout_below="@id/chatmessagename"
+	android:autoLink="all"
+	/>
 
+
+</RelativeLayout>
+
--- a/src/com/beem/project/beem/BeemService.java	Thu Jun 10 20:08:03 2010 +0200
+++ b/src/com/beem/project/beem/BeemService.java	Mon Jun 14 22:47:22 2010 +0200
@@ -50,6 +50,8 @@
 import org.jivesoftware.smack.Roster.SubscriptionMode;
 import org.jivesoftware.smack.provider.PrivacyProvider;
 import org.jivesoftware.smack.provider.ProviderManager;
+import org.jivesoftware.smackx.provider.DelayInfoProvider;
+import org.jivesoftware.smackx.packet.ChatStateExtension;
 import org.jivesoftware.smack.proxy.ProxyInfo;
 import org.jivesoftware.smack.proxy.ProxyInfo.ProxyType;
 import org.jivesoftware.smack.util.StringUtils;
@@ -314,7 +316,17 @@
     private void configure(ProviderManager pm) {
 	// Privacy
 	pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
+	// Delayed Delivery only the new version
+	pm.addExtensionProvider("delay", "urn:xmpp:delay", new DelayInfoProvider());
 
+	// Chat State
+	ChatStateExtension.Provider chatState = new ChatStateExtension.Provider();
+	pm.addExtensionProvider("active", "http://jabber.org/protocol/chatstates", chatState);
+	pm.addExtensionProvider("composing", "http://jabber.org/protocol/chatstates",
+	    chatState);
+	pm.addExtensionProvider("paused", "http://jabber.org/protocol/chatstates", chatState);
+	pm.addExtensionProvider("inactive", "http://jabber.org/protocol/chatstates", chatState);
+	pm.addExtensionProvider("gone", "http://jabber.org/protocol/chatstates", chatState);
 	/*
 	// Private Data Storage
 	pm.addIQProvider("query", "jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider());
@@ -328,14 +340,6 @@
 	pm.addExtensionProvider("x", "jabber:x:roster", new RosterExchangeProvider());
 	// Message Events
 	pm.addExtensionProvider("x", "jabber:x:event", new MessageEventProvider());
-	// Chat State
-	pm.addExtensionProvider("active", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
-	pm
-	.addExtensionProvider("composing", "http://jabber.org/protocol/chatstates",
-	    new ChatStateExtension.Provider());
-	pm.addExtensionProvider("paused", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
-	pm.addExtensionProvider("inactive", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
-	pm.addExtensionProvider("gone", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
 	// XHTML
 	pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider());
 	// Group Chat Invitations
@@ -352,8 +356,6 @@
 	pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin", new MUCAdminProvider());
 	// MUC Owner
 	pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner", new MUCOwnerProvider());
-	// Delayed Delivery
-	pm.addExtensionProvider("x", "jabber:x:delay", new DelayInformationProvider());
 	// Version
 	try {
 	    pm.addIQProvider("query", "jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version"));
--- a/src/com/beem/project/beem/service/BeemChatManager.java	Thu Jun 10 20:08:03 2010 +0200
+++ b/src/com/beem/project/beem/service/BeemChatManager.java	Mon Jun 14 22:47:22 2010 +0200
@@ -173,6 +173,7 @@
 	    return mChats.get(key);
 	}
 	ChatAdapter res = new ChatAdapter(chat);
+	Log.d(TAG, "getChat put " + key);
 	mChats.put(key, res);
 	return res;
     }
--- a/src/com/beem/project/beem/service/Contact.java	Thu Jun 10 20:08:03 2010 +0200
+++ b/src/com/beem/project/beem/service/Contact.java	Mon Jun 14 22:47:22 2010 +0200
@@ -357,7 +357,7 @@
     @Override
     public String toString() {
 	if (mJID != null)
-	    return mJID;
+	    return mJID + "/[" + mRes + "]";
 	return super.toString();
     }
 
--- a/src/com/beem/project/beem/service/Message.java	Thu Jun 10 20:08:03 2010 +0200
+++ b/src/com/beem/project/beem/service/Message.java	Mon Jun 14 22:47:22 2010 +0200
@@ -44,9 +44,12 @@
 package com.beem.project.beem.service;
 
 import org.jivesoftware.smack.packet.XMPPError;
+import org.jivesoftware.smackx.packet.DelayInformation;
+import org.jivesoftware.smack.packet.PacketExtension;
 
 import android.os.Parcel;
 import android.os.Parcelable;
+import java.util.Date;
 
 /**
  * This class represents a instant message.
@@ -86,6 +89,7 @@
     private String mTo;
     private String mFrom;
     private String mThread;
+    private Date mTimestamp;
 
     // TODO ajouter l'erreur
 
@@ -101,6 +105,7 @@
 	mSubject = "";
 	mThread = "";
 	mFrom = null;
+	mTimestamp = new Date();
     }
 
     /**
@@ -151,6 +156,12 @@
 	    mSubject = smackMsg.getSubject();
 	    mThread = smackMsg.getThread();
 	}
+	PacketExtension pTime = smackMsg.getExtension("delay", "urn:xmpp:delay");
+	if (pTime instanceof DelayInformation) {
+	    mTimestamp = ((DelayInformation) pTime).getStamp();
+	} else {
+	    mTimestamp = new Date();
+	}
     }
 
     /**
@@ -164,6 +175,7 @@
 	mSubject = in.readString();
 	mThread = in.readString();
 	mFrom = in.readString();
+	mTimestamp = new Date(in.readLong());
     }
 
     /**
@@ -178,6 +190,7 @@
 	dest.writeString(mSubject);
 	dest.writeString(mThread);
 	dest.writeString(mFrom);
+	dest.writeLong(mTimestamp.getTime());
     }
 
     /**
@@ -277,6 +290,24 @@
     }
 
     /**
+     * Set the Date of the message.
+     *
+     * @param date date of the message.
+     */
+    public void setTimestamp(Date date) {
+	mTimestamp = date;
+    }
+
+    /**
+     * Get the Date of the message.
+     *
+     * @return if it is a delayed message get the date the message was sended.
+     */
+    public Date getTimestamp() {
+	return mTimestamp;
+    }
+
+    /**
      * {@inheritDoc}
      */
     @Override
--- a/src/com/beem/project/beem/ui/Chat.java	Thu Jun 10 20:08:03 2010 +0200
+++ b/src/com/beem/project/beem/ui/Chat.java	Mon Jun 14 22:47:22 2010 +0200
@@ -47,6 +47,8 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Date;
+import java.text.DateFormat;
 
 import org.jivesoftware.smack.util.StringUtils;
 
@@ -269,6 +271,7 @@
 	    case R.id.chat_menu_change_chat:
 		try {
 		    final List<Contact> openedChats = mChatManager.getOpenedChatList();
+		    Log.d(TAG, "opened chats = " + openedChats);
 		    if (openedChats.size() > 0)
 			createChatSwitcherDialog(openedChats);
 		    else
@@ -384,8 +387,7 @@
 	    String fromBareJid = StringUtils.parseBareAddress(m.getFrom());
 	    if (m.getType() == Message.MSG_TYPE_ERROR) {
 		lastMessage = null;
-		result.add(new MessageText(fromBareJid, name, m.getBody(), true));
-		continue;
+		result.add(new MessageText(fromBareJid, name, m.getBody(), true, m.getTimestamp()));
 	    } else if (m.getType() == Message.MSG_TYPE_CHAT) {
 		if (fromBareJid == null) { //nofrom or from == yours
 		    name = localName;
@@ -394,7 +396,7 @@
 
 		if (m.getBody() != null) {
 		    if (lastMessage == null || !fromBareJid.equals(lastMessage.getBareJid())) {
-			lastMessage = new MessageText(fromBareJid, name, m.getBody());
+			lastMessage = new MessageText(fromBareJid, name, m.getBody(), false, m.getTimestamp());
 			result.add(lastMessage);
 		    } else {
 			lastMessage.setMessage(lastMessage.getMessage().concat("\n" + m.getBody()));
@@ -526,7 +528,7 @@
 		    @Override
 		    public void run() {
 			if (msg.getType() == Message.MSG_TYPE_ERROR) {
-			    mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody(), true));
+			    mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody(), true, msg.getTimestamp()));
 			    mMessagesListAdapter.notifyDataSetChanged();
 			} else if (msg.getBody() != null) {
 			    MessageText lastMessage = null;
@@ -535,9 +537,10 @@
 
 			    if (lastMessage != null && lastMessage.getBareJid().equals(fromBareJid)) {
 				lastMessage.setMessage(lastMessage.getMessage().concat("\n" + msg.getBody()));
+				lastMessage.setTimestamp(msg.getTimestamp());
 				mListMessages.set(mListMessages.size() - 1, lastMessage);
 			    } else if (msg.getBody() != null)
-				mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody()));
+				mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody(), false, msg.getTimestamp()));
 			    mMessagesListAdapter.notifyDataSetChanged();
 			}
 		    }
@@ -679,6 +682,10 @@
 	    msgName.setError(null);
 	    TextView msgText = (TextView) sv.findViewById(R.id.chatmessagetext);
 	    msgText.setText(msg.getMessage());
+	    TextView msgDate = (TextView) sv.findViewById(R.id.chatmessagedate);
+	    DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
+	    String date = df.format(msg.getTimestamp());
+	    msgDate.setText(date);
 	    if (msg.isError()) {
 		String err = getString(R.string.chat_error);
 		msgName.setText(err);
@@ -698,6 +705,7 @@
 	private String mName;
 	private String mMessage;
 	private boolean mIsError;
+	private Date mTimestamp;
 
 	/**
 	 * Constructor.
@@ -727,6 +735,22 @@
 	}
 
 	/**
+	 * Constructor.
+	 * @param bareJid A String containing the bare JID of the message's author.
+	 * @param name A String containing the name of the message's author.
+	 * @param message A String containing the message.
+	 * @param isError if the message is an error message.
+	 * @param date the time of the message.
+	 */
+	public MessageText(final String bareJid, final String name, final String message, final boolean isError, Date date) {
+	    mBareJid = bareJid;
+	    mName = name;
+	    mMessage = message;
+	    mIsError = isError;
+	    mTimestamp = date;
+	}
+
+	/**
 	 * JID attribute accessor.
 	 * @return A String containing the bare JID of the message's author.
 	 */
@@ -783,6 +807,25 @@
 	public boolean isError() {
 	    return mIsError;
 	}
+
+	/**
+	 * Set the Date of the message.
+	 *
+	 * @param date date of the message.
+	 */
+	public void setTimestamp(Date date) {
+	    mTimestamp = date;
+	}
+
+	/**
+	 * Get the Date of the message.
+	 *
+	 * @return if it is a delayed message get the date the message was sended.
+	 */
+	public Date getTimestamp() {
+	    return mTimestamp;
+	}
+
     }
 
     /**
@@ -811,8 +854,6 @@
 	if (!"".equals(inputContent)) {
 	    Message msgToSend = new Message(mContact.getJIDWithRes(), Message.MSG_TYPE_CHAT);
 	    msgToSend.setBody(inputContent);
-	    Log.d(TAG, "jid " + mContact.getJIDWithRes());
-
 
 	    try {
 		if (mChat == null) {
@@ -831,8 +872,9 @@
 
 	    if (lastMessage != null && lastMessage.getName().equals(self)) {
 		lastMessage.setMessage(lastMessage.getMessage().concat("\n" + inputContent));
+		lastMessage.setTimestamp(new Date());
 	    } else
-		mListMessages.add(new MessageText(self, self, inputContent));
+		mListMessages.add(new MessageText(self, self, inputContent, false, new Date()));
 	    mMessagesListAdapter.notifyDataSetChanged();
 	    mInputField.setText(null);
 	}