aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui/ConversationFragment.java')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationFragment.java81
1 files changed, 47 insertions, 34 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 169c5bbe..ea3d7e71 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -8,6 +8,7 @@ import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.support.annotation.Nullable;
@@ -23,6 +24,8 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ImageButton;
@@ -41,6 +44,8 @@ import net.java.otr4j.session.SessionStatus;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.concurrent.ConcurrentLinkedQueue;
import de.thedevstack.conversationsplus.ConversationsPlusPreferences;
import eu.siacs.conversations.Config;
@@ -52,6 +57,7 @@ import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.MucOptions;
+import eu.siacs.conversations.entities.Presence;
import eu.siacs.conversations.entities.Presences;
import eu.siacs.conversations.entities.Transferable;
import eu.siacs.conversations.entities.TransferablePlaceholder;
@@ -237,6 +243,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
private ConversationActivity activity;
private Message selectedMessage;
+ public void setMessagesLoaded() {
+ this.messagesLoaded = true;
+ }
+
private void sendMessage() {
final String body = mEditMessage.getText().toString();
if (body.length() == 0 || this.conversation == null) {
@@ -887,82 +897,82 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
enum SendButtonAction {TEXT, TAKE_PHOTO, SEND_LOCATION, RECORD_VOICE, CANCEL, CHOOSE_PICTURE}
- private int getSendButtonImageResource(SendButtonAction action, int status) {
+ private int getSendButtonImageResource(SendButtonAction action, Presence.Status status) {
switch (action) {
case TEXT:
switch (status) {
- case Presences.CHAT:
- case Presences.ONLINE:
+ case CHAT:
+ case ONLINE:
return R.drawable.ic_send_text_online;
- case Presences.AWAY:
+ case AWAY:
return R.drawable.ic_send_text_away;
- case Presences.XA:
- case Presences.DND:
+ case XA:
+ case DND:
return R.drawable.ic_send_text_dnd;
default:
return R.drawable.ic_send_text_offline;
}
case TAKE_PHOTO:
switch (status) {
- case Presences.CHAT:
- case Presences.ONLINE:
+ case CHAT:
+ case ONLINE:
return R.drawable.ic_send_photo_online;
- case Presences.AWAY:
+ case AWAY:
return R.drawable.ic_send_photo_away;
- case Presences.XA:
- case Presences.DND:
+ case XA:
+ case DND:
return R.drawable.ic_send_photo_dnd;
default:
return R.drawable.ic_send_photo_offline;
}
case RECORD_VOICE:
switch (status) {
- case Presences.CHAT:
- case Presences.ONLINE:
+ case CHAT:
+ case ONLINE:
return R.drawable.ic_send_voice_online;
- case Presences.AWAY:
+ case AWAY:
return R.drawable.ic_send_voice_away;
- case Presences.XA:
- case Presences.DND:
+ case XA:
+ case DND:
return R.drawable.ic_send_voice_dnd;
default:
return R.drawable.ic_send_voice_offline;
}
case SEND_LOCATION:
switch (status) {
- case Presences.CHAT:
- case Presences.ONLINE:
+ case CHAT:
+ case ONLINE:
return R.drawable.ic_send_location_online;
- case Presences.AWAY:
+ case AWAY:
return R.drawable.ic_send_location_away;
- case Presences.XA:
- case Presences.DND:
+ case XA:
+ case DND:
return R.drawable.ic_send_location_dnd;
default:
return R.drawable.ic_send_location_offline;
}
case CANCEL:
switch (status) {
- case Presences.CHAT:
- case Presences.ONLINE:
+ case CHAT:
+ case ONLINE:
return R.drawable.ic_send_cancel_online;
- case Presences.AWAY:
+ case AWAY:
return R.drawable.ic_send_cancel_away;
- case Presences.XA:
- case Presences.DND:
+ case XA:
+ case DND:
return R.drawable.ic_send_cancel_dnd;
default:
return R.drawable.ic_send_cancel_offline;
}
case CHOOSE_PICTURE:
switch (status) {
- case Presences.CHAT:
- case Presences.ONLINE:
+ case CHAT:
+ case ONLINE:
return R.drawable.ic_send_picture_online;
- case Presences.AWAY:
+ case AWAY:
return R.drawable.ic_send_picture_away;
- case Presences.XA:
- case Presences.DND:
+ case XA:
+ case DND:
return R.drawable.ic_send_picture_dnd;
default:
return R.drawable.ic_send_picture_offline;
@@ -974,7 +984,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
public void updateSendButton() {
final Conversation c = this.conversation;
final SendButtonAction action;
- final int status;
+ final Presence.Status status;
final boolean empty = this.mEditMessage == null || this.mEditMessage.getText().length() == 0;
final boolean conference = c.getMode() == Conversation.MODE_MULTI;
if (conference && !c.getAccount().httpUploadAvailable()) {
@@ -1021,10 +1031,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
if (c.getMode() == Conversation.MODE_SINGLE) {
status = c.getContact().getMostAvailableStatus();
} else {
- status = c.getMucOptions().online() ? Presences.ONLINE : Presences.OFFLINE;
+ status = c.getMucOptions().online() ? Presence.Status.ONLINE : Presence.Status.OFFLINE;
}
} else {
- status = Presences.OFFLINE;
+ status = Presence.Status.OFFLINE;
}
this.mSendButton.setTag(action);
this.mSendButton.setImageResource(getSendButtonImageResource(action, status));
@@ -1032,6 +1042,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
public void updateStatusMessages() {
synchronized (this.messageList) {
+ if (conversation.getLastClearHistory() != 0) {
+ this.messageList.add(0, Message.createLoadMoreMessage(conversation));
+ }
if (conversation.getMode() == Conversation.MODE_SINGLE) {
ChatState state = conversation.getIncomingChatState();
if (state == ChatState.COMPOSING) {