ConversationFragment.java

  1package de.gultsch.chat.ui;
  2
  3import de.gultsch.chat.R;
  4import de.gultsch.chat.entities.Conversation;
  5import de.gultsch.chat.entities.Message;
  6import de.gultsch.chat.utils.Beautifier;
  7import android.app.Fragment;
  8import android.content.Context;
  9import android.database.Cursor;
 10import android.graphics.Typeface;
 11import android.net.Uri;
 12import android.os.Bundle;
 13import android.provider.ContactsContract.Profile;
 14import android.util.Log;
 15import android.view.LayoutInflater;
 16import android.view.View;
 17import android.view.View.OnClickListener;
 18import android.view.ViewGroup;
 19import android.widget.ArrayAdapter;
 20import android.widget.EditText;
 21import android.widget.ListAdapter;
 22import android.widget.ListView;
 23import android.widget.ImageButton;
 24import android.widget.ImageView;
 25import android.widget.TextView;
 26
 27public class ConversationFragment extends Fragment {
 28
 29	Conversation conversation;
 30
 31	public void setConversation(Conversation conv) {
 32		this.conversation = conv;
 33	}
 34
 35	@Override
 36	public View onCreateView(final LayoutInflater inflater, ViewGroup container,
 37			Bundle savedInstanceState) {
 38		
 39		String[] mProjection = new String[]
 40			    {
 41			        Profile._ID,
 42			        Profile.PHOTO_THUMBNAIL_URI
 43			    };
 44			Cursor mProfileCursor = getActivity().getContentResolver().query(
 45			        Profile.CONTENT_URI,
 46			        mProjection ,
 47			        null,
 48			        null,
 49			        null);
 50			
 51		mProfileCursor.moveToFirst();
 52		final Uri profilePicture = Uri.parse(mProfileCursor.getString(1));
 53		
 54		Log.d("gultsch","found user profile pic "+profilePicture.toString());
 55		
 56		final View view = inflater.inflate(R.layout.fragment_conversation, container,
 57				false);
 58		((ImageButton) view.findViewById(R.id.textSendButton))
 59				.setOnClickListener(new OnClickListener() {
 60
 61					@Override
 62					public void onClick(View v) {
 63						EditText chatMsg = (EditText) view.findViewById(R.id.textinput);
 64						if (chatMsg.getText().length() < 1) return;
 65						Message message = new Message(conversation,chatMsg.getText().toString(),
 66								Message.ENCRYPTION_NONE);
 67						XmppActivity activity = (XmppActivity) getActivity();
 68						activity.xmppConnectionService.sendMessage(message);
 69						conversation.getMessages().add(message);
 70						chatMsg.setText("");
 71						
 72						ListView messagesView = (ListView) view.findViewById(R.id.messages_view);
 73						ArrayAdapter<Message> adapter = (ArrayAdapter<Message>) messagesView.getAdapter();
 74						adapter.notifyDataSetChanged();
 75						
 76						messagesView.setSelection(conversation.getMessages().size() -1);
 77					}
 78				});
 79
 80		ListView messagesView = (ListView) view
 81				.findViewById(R.id.messages_view);
 82		messagesView.setAdapter(new ArrayAdapter<Message>(this.getActivity()
 83				.getApplicationContext(), R.layout.message_sent,
 84				this.conversation.getMessages()) {
 85
 86			@Override
 87			public View getView(int position, View view, ViewGroup parent) {
 88				Message item = getItem(position);
 89				if ((item.getStatus() != Message.STATUS_RECIEVED)
 90						|| (item.getStatus() == Message.STATUS_SEND)) {
 91					view = (View) inflater.inflate(R.layout.message_sent, null);
 92					((ImageView) view.findViewById(R.id.message_photo)).setImageURI(profilePicture);
 93				}
 94				((TextView) view.findViewById(R.id.message_body)).setText(item.getBody());
 95				TextView time = (TextView) view.findViewById(R.id.message_time);
 96				if (item.getStatus() == Message.STATUS_UNSEND) {
 97					time.setTypeface(null, Typeface.ITALIC);
 98				} else {
 99					time.setText(Beautifier.readableTimeDifference(item.getTimeSent()));
100				}
101				return view;
102			}
103		});
104
105		return view;
106	}
107
108	public Conversation getConversation() {
109		return conversation;
110	}
111}