aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2016-09-12 21:18:56 +0200
committerDaniel Gultsch <daniel@gultsch.de>2016-09-12 21:18:56 +0200
commit6cb2b0b5d1654c0a91aca09d791568b12850f9c9 (patch)
tree2e7b6d91937b65be14b65207bddd4c80a8728c45 /src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
parent75fcab31707cf73ec69207e1147ca911a6ded6ce (diff)
remember scroll position on rotate. fixes #2011
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui/ConversationActivity.java')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationActivity.java33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
index e891f00b..2c8b27b0 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
@@ -67,8 +67,6 @@ import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
-import static eu.siacs.conversations.crypto.axolotl.AxolotlService.AxolotlCapability.MISSING_PRESENCE;
-
public class ConversationActivity extends XmppActivity
implements OnAccountUpdate, OnConversationUpdate, OnRosterUpdate, OnUpdateBlocklist, XmppConnectionService.OnShowErrorToast {
@@ -94,9 +92,12 @@ public class ConversationActivity extends XmppActivity
private static final String STATE_OPEN_CONVERSATION = "state_open_conversation";
private static final String STATE_PANEL_OPEN = "state_panel_open";
private static final String STATE_PENDING_URI = "state_pending_uri";
+ private static final String STATE_FIRST_VISIBLE = "first_visible";
+ private static final String STATE_OFFSET_FROM_TOP = "offset_from_top";
- private String mOpenConverstaion = null;
+ private String mOpenConversation = null;
private boolean mPanelOpen = true;
+ private Pair<Integer,Integer> mScrollPosition = null;
final private List<Uri> mPendingImageUris = new ArrayList<>();
final private List<Uri> mPendingFileUris = new ArrayList<>();
private Uri mPendingGeoUri = null;
@@ -172,8 +173,16 @@ public class ConversationActivity extends XmppActivity
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
- mOpenConverstaion = savedInstanceState.getString(STATE_OPEN_CONVERSATION, null);
+ mOpenConversation = savedInstanceState.getString(STATE_OPEN_CONVERSATION, null);
mPanelOpen = savedInstanceState.getBoolean(STATE_PANEL_OPEN, true);
+ int pos = savedInstanceState.getInt(STATE_FIRST_VISIBLE, -1);
+ int offset = savedInstanceState.getInt(STATE_OFFSET_FROM_TOP, 1);
+ if (pos >= 0 && offset <= 0) {
+ Log.d(Config.LOGTAG,"retrieved scroll position from instanceState "+pos+":"+offset);
+ mScrollPosition = new Pair<>(pos,offset);
+ } else {
+ mScrollPosition = null;
+ }
String pending = savedInstanceState.getString(STATE_PENDING_URI, null);
if (pending != null) {
mPendingImageUris.clear();
@@ -1081,7 +1090,7 @@ public class ConversationActivity extends XmppActivity
@Override
protected void onNewIntent(final Intent intent) {
if (intent != null && ACTION_VIEW_CONVERSATION.equals(intent.getAction())) {
- mOpenConverstaion = null;
+ mOpenConversation = null;
if (xmppConnectionServiceBound) {
handleViewConversationIntent(intent);
intent.setAction(Intent.ACTION_MAIN);
@@ -1131,6 +1140,11 @@ public class ConversationActivity extends XmppActivity
Conversation conversation = getSelectedConversation();
if (conversation != null) {
savedInstanceState.putString(STATE_OPEN_CONVERSATION, conversation.getUuid());
+ Pair<Integer,Integer> scrollPosition = mConversationFragment.getScrollPosition();
+ if (scrollPosition != null) {
+ savedInstanceState.putInt(STATE_FIRST_VISIBLE, scrollPosition.first);
+ savedInstanceState.putInt(STATE_OFFSET_FROM_TOP, scrollPosition.second);
+ }
} else {
savedInstanceState.remove(STATE_OPEN_CONVERSATION);
}
@@ -1190,7 +1204,7 @@ public class ConversationActivity extends XmppActivity
}
finish();
}
- } else if (selectConversationByUuid(mOpenConverstaion)) {
+ } else if (selectConversationByUuid(mOpenConversation)) {
if (mPanelOpen) {
showConversationsOverview();
} else {
@@ -1199,8 +1213,11 @@ public class ConversationActivity extends XmppActivity
updateActionBarTitle(true);
}
}
- this.mConversationFragment.reInit(getSelectedConversation());
- mOpenConverstaion = null;
+ if (this.mConversationFragment.reInit(getSelectedConversation())) {
+ Log.d(Config.LOGTAG,"setting scroll position on fragment");
+ this.mConversationFragment.setScrollPosition(mScrollPosition);
+ }
+ mOpenConversation = null;
} else if (intent != null && ACTION_VIEW_CONVERSATION.equals(intent.getAction())) {
clearPending();
handleViewConversationIntent(intent);