aboutsummaryrefslogtreecommitdiffstats
path: root/src/de/gultsch/chat/ui/ConversationFragment.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/de/gultsch/chat/ui/ConversationFragment.java165
1 files changed, 115 insertions, 50 deletions
diff --git a/src/de/gultsch/chat/ui/ConversationFragment.java b/src/de/gultsch/chat/ui/ConversationFragment.java
index fca5202a..5ba58bbf 100644
--- a/src/de/gultsch/chat/ui/ConversationFragment.java
+++ b/src/de/gultsch/chat/ui/ConversationFragment.java
@@ -1,11 +1,13 @@
package de.gultsch.chat.ui;
+import java.util.ArrayList;
+import java.util.List;
+
import de.gultsch.chat.R;
import de.gultsch.chat.entities.Conversation;
import de.gultsch.chat.entities.Message;
import de.gultsch.chat.utils.Beautifier;
import android.app.Fragment;
-import android.content.Context;
import android.database.Cursor;
import android.graphics.Typeface;
import android.net.Uri;
@@ -18,85 +20,118 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
-import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
public class ConversationFragment extends Fragment {
+
+ protected Conversation conversation;
+ protected ListView messagesView;
+ protected LayoutInflater inflater;
+ protected List<Message> messageList = new ArrayList<Message>();
- Conversation conversation;
+ @Override
+ public View onCreateView(final LayoutInflater inflater,
+ ViewGroup container, Bundle savedInstanceState) {
- public void setConversation(Conversation conv) {
- this.conversation = conv;
- }
+ this.inflater = inflater;
- @Override
- public View onCreateView(final LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
-
- String[] mProjection = new String[]
- {
- Profile._ID,
- Profile.PHOTO_THUMBNAIL_URI
- };
- Cursor mProfileCursor = getActivity().getContentResolver().query(
- Profile.CONTENT_URI,
- mProjection ,
- null,
- null,
- null);
-
- mProfileCursor.moveToFirst();
- final Uri profilePicture = Uri.parse(mProfileCursor.getString(1));
-
- Log.d("gultsch","found user profile pic "+profilePicture.toString());
-
- final View view = inflater.inflate(R.layout.fragment_conversation, container,
- false);
+
+
+ final View view = inflater.inflate(R.layout.fragment_conversation,
+ container, false);
((ImageButton) view.findViewById(R.id.textSendButton))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- EditText chatMsg = (EditText) view.findViewById(R.id.textinput);
- if (chatMsg.getText().length() < 1) return;
- Message message = new Message(conversation,chatMsg.getText().toString(),
- Message.ENCRYPTION_NONE);
- XmppActivity activity = (XmppActivity) getActivity();
+ ConversationActivity activity = (ConversationActivity) getActivity();
+ EditText chatMsg = (EditText) view
+ .findViewById(R.id.textinput);
+ if (chatMsg.getText().length() < 1)
+ return;
+ Message message = new Message(conversation, chatMsg
+ .getText().toString(), Message.ENCRYPTION_NONE);
activity.xmppConnectionService.sendMessage(message);
conversation.getMessages().add(message);
chatMsg.setText("");
- ListView messagesView = (ListView) view.findViewById(R.id.messages_view);
- ArrayAdapter<Message> adapter = (ArrayAdapter<Message>) messagesView.getAdapter();
- adapter.notifyDataSetChanged();
+ messageList.add(message);
+
+ activity.updateConversationList();
- messagesView.setSelection(conversation.getMessages().size() -1);
+ messagesView.setSelection(messageList.size() - 1);
}
});
- ListView messagesView = (ListView) view
- .findViewById(R.id.messages_view);
+ messagesView = (ListView) view.findViewById(R.id.messages_view);
+
+ String[] mProjection = new String[] { Profile._ID,
+ Profile.PHOTO_THUMBNAIL_URI };
+ Cursor mProfileCursor = getActivity().getContentResolver().query(
+ Profile.CONTENT_URI, mProjection, null, null, null);
+
+ mProfileCursor.moveToFirst();
+ final Uri profilePicture = Uri.parse(mProfileCursor.getString(1));
+
messagesView.setAdapter(new ArrayAdapter<Message>(this.getActivity()
- .getApplicationContext(), R.layout.message_sent,
- this.conversation.getMessages()) {
+ .getApplicationContext(), R.layout.message_sent, this.messageList) {
+
+ private static final int SENT = 0;
+ private static final int RECIEVED = 1;
+
+ @Override
+ public int getViewTypeCount() {
+ return 2;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (getItem(position).getStatus() == Message.STATUS_RECIEVED) {
+ return RECIEVED;
+ } else {
+ return SENT;
+ }
+ }
@Override
public View getView(int position, View view, ViewGroup parent) {
Message item = getItem(position);
- if ((item.getStatus() != Message.STATUS_RECIEVED)
- || (item.getStatus() == Message.STATUS_SEND)) {
- view = (View) inflater.inflate(R.layout.message_sent, null);
- ((ImageView) view.findViewById(R.id.message_photo)).setImageURI(profilePicture);
+ int type = getItemViewType(position);
+ if (view == null) {
+ switch (type) {
+ case SENT:
+ view = (View) inflater.inflate(R.layout.message_sent,
+ null);
+ Log.d("gultsch", "inflated new message_sent view");
+ break;
+ case RECIEVED:
+ view = (View) inflater.inflate(
+ R.layout.message_recieved, null);
+ Log.d("gultsch", "inflated new message_recieved view");
+ break;
+ }
+ } else {
+ Log.d("gultsch", "recylecd a view");
+ }
+ if (type == RECIEVED) {
+ ((ImageView) view.findViewById(R.id.message_photo))
+ .setImageURI(item.getConversation()
+ .getProfilePhotoUri());
+ } else {
+ ((ImageView) view.findViewById(R.id.message_photo))
+ .setImageURI(profilePicture);
}
- ((TextView) view.findViewById(R.id.message_body)).setText(item.getBody());
+ ((TextView) view.findViewById(R.id.message_body)).setText(item
+ .getBody());
TextView time = (TextView) view.findViewById(R.id.message_time);
if (item.getStatus() == Message.STATUS_UNSEND) {
time.setTypeface(null, Typeface.ITALIC);
} else {
- time.setText(Beautifier.readableTimeDifference(item.getTimeSent()));
+ time.setText(Beautifier.readableTimeDifference(item
+ .getTimeSent()));
}
return view;
}
@@ -105,7 +140,37 @@ public class ConversationFragment extends Fragment {
return view;
}
- public Conversation getConversation() {
- return conversation;
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ Log.d("gultsch","conversationfragment onStart");
+
+ final ConversationActivity activity = (ConversationActivity) getActivity();
+
+ // TODO check if bond and get data back
+
+ if (activity.xmppConnectionServiceBound) {
+ this.conversation = activity.getConversationList().get(activity.getSelectedConversation());
+ this.messageList.clear();
+ this.messageList.addAll(this.conversation.getMessages());
+ }
+
+
+ // rendering complete. now go tell activity to close pane
+ if (!activity.shouldPaneBeOpen()) {
+ activity.getSlidingPaneLayout().closePane();
+ }
+
+ int size = this.messageList.size();
+ if (size >= 1)
+ messagesView.setSelection(size - 1);
+ }
+
+ public void onBackendConnected() {
+ final ConversationActivity activity = (ConversationActivity) getActivity();
+ this.conversation = activity.getConversationList().get(activity.getSelectedConversation());
+ this.messageList.clear();
+ this.messageList.addAll(this.conversation.getMessages());
}
}