diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-09-12 21:18:56 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2016-09-12 21:18:56 +0200 |
commit | 6cb2b0b5d1654c0a91aca09d791568b12850f9c9 (patch) | |
tree | 2e7b6d91937b65be14b65207bddd4c80a8728c45 /src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | |
parent | 75fcab31707cf73ec69207e1147ca911a6ded6ce (diff) |
remember scroll position on rotate. fixes #2011
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui/ConversationFragment.java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 35 |
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; } } |