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.java35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index edee551b..80b5ff82 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -12,6 +12,8 @@ import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.os.Handler;
import android.text.InputType;
+import android.util.Log;
+import android.util.Pair;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
@@ -153,7 +155,11 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
View v = messagesView.getChildAt(0);
final int pxOffset = (v == null) ? 0 : v.getTop();
ConversationFragment.this.conversation.populateWithMessages(ConversationFragment.this.messageList);
- updateStatusMessages();
+ try {
+ updateStatusMessages();
+ } catch (IllegalStateException e) {
+ Log.d(Config.LOGTAG,"caught illegal state exception while updating status messages");
+ }
messageListAdapter.notifyDataSetChanged();
int pos = Math.max(getIndexOf(uuid,messageList),0);
messagesView.setSelectionFromTop(pos, pxOffset);
@@ -210,6 +216,28 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
return -1;
}
+
+ public Pair<Integer,Integer> getScrollPosition() {
+ if (this.messagesView.getCount() == 0 ||
+ this.messagesView.getLastVisiblePosition() == this.messagesView.getCount() - 1) {
+ return null;
+ } else {
+ final int pos = messagesView.getFirstVisiblePosition();
+ final View view = messagesView.getChildAt(0);
+ if (view == null) {
+ return null;
+ } else {
+ return new Pair<>(pos, view.getTop());
+ }
+ }
+ }
+
+ public void setScrollPosition(Pair<Integer,Integer> scrollPosition) {
+ if (scrollPosition != null) {
+ this.messagesView.setSelectionFromTop(scrollPosition.first, scrollPosition.second);
+ }
+ }
+
protected OnClickListener clickToDecryptListener = new OnClickListener() {
@Override
@@ -736,9 +764,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
}
- public void reInit(Conversation conversation) {
+ public boolean reInit(Conversation conversation) {
if (conversation == null) {
- return;
+ return false;
}
this.activity = (ConversationActivity) getActivity();
setupIme();
@@ -774,6 +802,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
pos = i < 0 ? bottom : i;
}
messagesView.setSelection(pos);
+ return pos == bottom;
}
}