muc add specific chat activity
authorVincent V.<marseille@beem-project.com>
Tue, 21 Feb 2012 20:10:27 +0100
changeset 934 53e19596d22c
parent 933 20b3b1db3d29
child 935 5801f1f5f0bd
muc add specific chat activity
AndroidManifest.xml
src/com/beem/project/beem/ui/ContactList.java
src/com/beem/project/beem/ui/MucChat.java
--- a/AndroidManifest.xml	Tue Feb 21 19:35:15 2012 +0100
+++ b/AndroidManifest.xml	Tue Feb 21 20:10:27 2012 +0100
@@ -68,6 +68,14 @@
             </intent-filter>
         </activity>
         <activity
+            android:label="@string/chat_name"
+            android:launchMode="singleTop"
+            android:name=".ui.MucChat" >
+            <intent-filter android:label="Beem Connection" >
+                <action android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
+            </intent-filter>
+        </activity>
+        <activity
             android:label="@string/ChangeStatusActTitle"
             android:launchMode="singleTask"
             android:name=".ui.ChangeStatus"
--- a/src/com/beem/project/beem/ui/ContactList.java	Tue Feb 21 19:35:15 2012 +0100
+++ b/src/com/beem/project/beem/ui/ContactList.java	Tue Feb 21 20:10:27 2012 +0100
@@ -575,9 +575,9 @@
 	    intent.putExtra(BeemIntent.EXTRA_JID, jid);
 	    startService(intent);
 
-	    	    Intent i = new Intent(ContactList.this, Chat.class);
-	    	    i.setData(Uri.parse("imto://jabber/" + jid));
-	    	    startActivity(i);
+	    Intent i = new Intent(ContactList.this, MucChat.class);
+	    i.setData(Uri.parse("imto://jabber/" + jid));
+	    startActivity(i);
 	}
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/ui/MucChat.java	Tue Feb 21 20:10:27 2012 +0100
@@ -0,0 +1,230 @@
+/*
+    BEEM is a videoconference application on the Android Platform.
+
+    Copyright (C) 2009 by Frederic-Charles Barthelery,
+                          Jean-Manuel Da Silva,
+                          Nikita Kozlov,
+                          Philippe Lago,
+                          Jean Baptiste Vergely,
+                          Vincent Veronis.
+
+    This file is part of BEEM.
+
+    BEEM is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    BEEM is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
+
+    Please send bug reports with examples or suggestions to
+    contact@beem-project.com or http://dev.beem-project.com/
+
+    Epitech, hereby disclaims all copyright interest in the program "Beem"
+    written by Frederic-Charles Barthelery,
+               Jean-Manuel Da Silva,
+               Nikita Kozlov,
+               Philippe Lago,
+               Jean Baptiste Vergely,
+               Vincent Veronis.
+
+    Nicolas Sadirac, November 26, 2009
+    President of Epitech.
+
+    Flavien Astraud, November 26, 2009
+    Head of the EIP Laboratory.
+
+ */
+package com.beem.project.beem.ui;
+
+import org.jivesoftware.smack.util.StringUtils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.graphics.drawable.LayerDrawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnKeyListener;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Filterable;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.SimpleCursorAdapter;
+import android.widget.TextView;
+
+import com.beem.project.beem.BeemIntent;
+import com.beem.project.beem.R;
+import com.beem.project.beem.providers.Messages;
+
+/**
+ * The chat activity for communication with 1 contact.
+ * @author Vincent V. <marseille@beem-project.com>
+ */
+public class MucChat extends Activity implements OnKeyListener {
+
+    private static final String TAG = "MucChat";
+    private String mjid;
+    private String mAccount;
+
+    /**
+     * Constructor.
+     */
+    public MucChat() {
+	super();
+    }
+
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
+    protected void onCreate(Bundle savedBundle) {
+	super.onCreate(savedBundle);
+
+	Uri contactURI = getIntent().getData();
+	mjid = contactURI.getPathSegments().get(0);
+
+	Cursor cursorAccount = getContentResolver().query(RawContacts.CONTENT_URI,
+	    new String[] { RawContacts._ID, RawContacts.ACCOUNT_NAME }, RawContacts.SOURCE_ID + "=?",
+	    new String[] { mjid }, null);
+
+	if (cursorAccount.getCount() == 1) {
+	    cursorAccount.moveToFirst();
+	    mAccount = cursorAccount.getString(cursorAccount.getColumnIndex(RawContacts.ACCOUNT_NAME));
+	} else if (cursorAccount.getCount() > 1) {
+	    // TODO : get account from jid. if multi account propose select
+	}
+
+	SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
+	boolean isCompact = settings.getBoolean("settings_chat_compact_key", false);
+	// UI
+	if (!isCompact) {
+	    setNormalView();
+	} else {
+	    setContentView(R.layout.chat_compact);
+	}
+
+	Button sendButton = (Button) findViewById(R.id.chat_send_message);
+	sendButton.setOnClickListener(new OnClickListener() {
+	    @Override
+	    public void onClick(View v) {
+		sendMessage();
+	    }
+	});
+
+    }
+
+    private void setNormalView() {
+	setContentView(R.layout.chat);
+	TextView ContactNameTextView = (TextView) findViewById(R.id.chat_contact_name);
+	ContactNameTextView.setText(mjid);
+	TextView ContactStatusMsgTextView = (TextView) findViewById(R.id.chat_contact_status_msg);
+	TextView ContactChatStateTextView = (TextView) findViewById(R.id.chat_contact_chat_state);
+	ImageView ContactStatusIcon = (ImageView) findViewById(R.id.chat_contact_status_icon);
+	LayerDrawable AvatarStatusDrawable = (LayerDrawable) ContactStatusIcon.getDrawable();
+	AvatarStatusDrawable.setLayerInset(1, 36, 36, 0, 0);
+
+	final Cursor cursorMessage = getContentResolver().query(Messages.CONTENT_URI,
+	    new String[] { Messages._ID, Messages.TO, Messages.FROM, Messages.DATE_READ, Messages.BODY },
+	    Messages.TO + "=? OR " + Messages.FROM + " like '%" + mjid + "%'", new String[] { mjid }, null);
+
+	BeemMessageList mAdapterMessageList = new BeemMessageList(this, R.layout.chat_msg_row, cursorMessage,
+	    new String[] { Messages._ID, Messages.TO, Messages.FROM, Messages.DATE_READ, Messages.BODY }, new int[] {
+		R.id.chatmessagename, R.id.chatmessagedate, R.id.chatmessagetext });
+
+	ListView listView = (ListView) findViewById(R.id.chat_messages);
+	registerForContextMenu(listView);
+	listView.setAdapter(mAdapterMessageList);
+
+    }
+
+    @Override
+    public boolean onKey(View v, int keyCode, KeyEvent event) {
+	Log.e(TAG, "ONKEY");
+	if (event.getAction() == KeyEvent.ACTION_DOWN) {
+	    Log.e(TAG, "ONKEY");
+	    switch (keyCode) {
+		case KeyEvent.KEYCODE_ENTER:
+		    sendMessage();
+		    return true;
+		default:
+		    return false;
+	    }
+	}
+	return false;
+    }
+
+    private void sendMessage() {
+	EditText inputField = (EditText) findViewById(R.id.chat_input);
+	final String inputContent = inputField.getText().toString();
+
+	Intent intent = new Intent(BeemIntent.ACTION_SEND_MESSAGE);
+	intent.putExtra(BeemIntent.EXTRA_ACCOUNT, mAccount);
+	intent.putExtra(BeemIntent.EXTRA_JID, mjid);
+	intent.putExtra(BeemIntent.EXTRA_MESSAGE, inputContent);
+	startService(intent);
+
+	inputField.setText(null);
+    }
+
+    /**
+     * Adapter message list.
+     */
+    private static class BeemMessageList extends SimpleCursorAdapter implements Filterable {
+
+	private Context mContext;
+	private int mLayout;
+
+	public BeemMessageList(Context context, int layout, Cursor c, String[] from, int[] to) {
+	    super(context, layout, c, from, to);
+	    mContext = context;
+	    mLayout = layout;
+	}
+
+	@Override
+	public View newView(Context context, Cursor cursor, ViewGroup parent) {
+	    final LayoutInflater inflater = LayoutInflater.from(mContext);
+	    return inflater.inflate(mLayout, parent, false);
+	}
+
+	@Override
+	public void bindView(View view, Context context, Cursor cursor) {
+	    String jid = cursor.getString(cursor.getColumnIndex(Messages.FROM));
+	    String date = cursor.getString(cursor.getColumnIndex(Messages.DATE_READ));
+	    String body = cursor.getString(cursor.getColumnIndex(Messages.BODY));
+	    TextView nameText = (TextView) view.findViewById(R.id.chatmessagename);
+	    if (nameText != null) {
+		nameText.setText(StringUtils.parseResource(jid));
+	    }
+
+	    TextView dateText = (TextView) view.findViewById(R.id.chatmessagedate);
+	    if (dateText != null) {
+		dateText.setText(date);
+	    }
+
+	    TextView bodyText = (TextView) view.findViewById(R.id.chatmessagetext);
+	    if (bodyText != null) {
+		bodyText.setText(body);
+	    }
+
+	}
+
+    }
+}