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}