aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2016-09-12 21:18:56 +0200
committerChristian Schneppe <christian@pix-art.de>2016-09-14 21:45:06 +0200
commit31fdccccb341c071ca5c9cc558e18f2446c80ea8 (patch)
tree66965d93c5d963e39fc7dab2edb01177de954e3a /src/main/java/de/pixart/messenger/ui/ConversationFragment.java
parentf1ca63e955a79cd12ef73b7c1f923fcd63732dac (diff)
remember scroll position on rotate. fixes #2011
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index 736c07aa9..1c9e215af 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/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,8 +155,12 @@ 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();
- messageListAdapter.notifyDataSetChanged();
+ 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);
messagesLoaded = true;
@@ -210,7 +216,29 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
return -1;
}
- protected OnClickListener clickToDecryptListener = new OnClickListener() {
+
+ 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
public void onClick(View v) {
@@ -747,9 +775,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();
@@ -785,6 +813,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
pos = i < 0 ? bottom : i;
}
messagesView.setSelection(pos);
+ return pos == bottom;
}
}