diff options
Diffstat (limited to '')
-rw-r--r-- | src/main/java/de/pixart/messenger/ui/ConversationsOverviewFragment.java | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationsOverviewFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationsOverviewFragment.java index e5e5f509d..d72132366 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationsOverviewFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationsOverviewFragment.java @@ -48,11 +48,15 @@ import de.pixart.messenger.entities.Conversation; import de.pixart.messenger.ui.adapter.ConversationAdapter; import de.pixart.messenger.ui.interfaces.OnConversationSelected; import de.pixart.messenger.ui.util.PendingItem; +import de.pixart.messenger.ui.util.ScrollState; public class ConversationsOverviewFragment extends XmppFragment { + private static final String STATE_SCROLL_POSITION = ConversationsOverviewFragment.class.getName() + ".scroll_state"; + private final List<Conversation> conversations = new ArrayList<>(); private final PendingItem<Conversation> swipedConversation = new PendingItem<>(); + private final PendingItem<ScrollState> pendingScrollState = new PendingItem<>(); private FragmentConversationsOverviewBinding binding; private ConversationAdapter conversationsAdapter; private XmppActivity activity; @@ -88,6 +92,15 @@ public class ConversationsOverviewFragment extends XmppFragment { } @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + if (savedInstanceState == null) { + return; + } + pendingScrollState.push(savedInstanceState.getParcelable(STATE_SCROLL_POSITION)); + } + + @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof XmppActivity) { @@ -125,11 +138,26 @@ public class ConversationsOverviewFragment extends XmppFragment { @Override void onBackendConnected() { - Log.d(Config.LOGTAG, "nice!"); refresh(); } @Override + public void onSaveInstanceState(Bundle bundle) { + super.onSaveInstanceState(bundle); + bundle.putParcelable(STATE_SCROLL_POSITION, getScrollState()); + } + + private ScrollState getScrollState() { + int position = this.binding.list.getFirstVisiblePosition(); + final View view = this.binding.list.getChildAt(0); + if (view != null) { + return new ScrollState(position, view.getTop()); + } else { + return new ScrollState(position, 0); + } + } + + @Override public void onStart() { super.onStart(); Log.d(Config.LOGTAG, "ConversationsOverviewFragment.onStart()"); @@ -152,5 +180,15 @@ public class ConversationsOverviewFragment extends XmppFragment { } this.activity.xmppConnectionService.populateWithOrderedConversations(this.conversations); this.conversationsAdapter.notifyDataSetChanged(); + ScrollState scrollState = pendingScrollState.pop(); + if (scrollState != null) { + setScrollPosition(scrollState); + } + } + + private void setScrollPosition(ScrollState scrollPosition) { + if (scrollPosition != null) { + this.binding.list.setSelectionFromTop(scrollPosition.position, scrollPosition.offset); + } } }
\ No newline at end of file |