SMS conversation list doesn't mantain scroll position
Bug 7585885
Change-Id: Ic500e0b3245b5f42a9e7994827a3825b041b1c01
diff --git a/src/com/android/mms/ui/ConversationList.java b/src/com/android/mms/ui/ConversationList.java
index 4d5ca6b..ac71baa 100644
--- a/src/com/android/mms/ui/ConversationList.java
+++ b/src/com/android/mms/ui/ConversationList.java
@@ -109,6 +109,12 @@
private TextView mUnreadConvCount;
private MenuItem mSearchItem;
private SearchView mSearchView;
+ private int mSavedFirstVisiblePosition = AdapterView.INVALID_POSITION;
+ private int mSavedFirstItemOffset;
+
+ // keys for extras and icicles
+ private final static String LAST_LIST_POS = "last_list_pos";
+ private final static String LAST_LIST_OFFSET = "last_list_offset";
static private final String CHECKED_MESSAGE_LIMITS = "checked_message_limits";
@@ -142,6 +148,36 @@
if (!checkedMessageLimits || DEBUG) {
runOneTimeStorageLimitCheckForLegacyMessages();
}
+
+ if (savedInstanceState != null) {
+ mSavedFirstVisiblePosition = savedInstanceState.getInt(LAST_LIST_POS,
+ AdapterView.INVALID_POSITION);
+ mSavedFirstItemOffset = savedInstanceState.getInt(LAST_LIST_OFFSET, 0);
+ } else {
+ mSavedFirstVisiblePosition = AdapterView.INVALID_POSITION;
+ mSavedFirstItemOffset = 0;
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putInt(LAST_LIST_POS, mSavedFirstVisiblePosition);
+ outState.putInt(LAST_LIST_OFFSET, mSavedFirstItemOffset);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+
+ // Remember where the list is scrolled to so we can restore the scroll position
+ // when we come back to this activity and *after* we complete querying for the
+ // conversations.
+ ListView listView = getListView();
+ mSavedFirstVisiblePosition = listView.getFirstVisiblePosition();
+ View firstChild = listView.getChildAt(0);
+ mSavedFirstItemOffset = (firstChild == null) ? 0 : firstChild.getTop();
}
private void setupActionBar() {
@@ -756,6 +792,12 @@
// 2. Mark all the conversations as seen.
Conversation.markAllConversationsAsSeen(getApplicationContext());
}
+ if (mSavedFirstVisiblePosition != AdapterView.INVALID_POSITION) {
+ // Restore the list to its previous position.
+ getListView().setSelectionFromTop(mSavedFirstVisiblePosition,
+ mSavedFirstItemOffset);
+ mSavedFirstVisiblePosition = AdapterView.INVALID_POSITION;
+ }
break;
case UNREAD_THREADS_QUERY_TOKEN: