/** Position is being saved per User and per TimeleneType */ private void savePosition() { int firstItem = getListView().getLastVisiblePosition(); long firstItemId = getListView().getAdapter().getItemId(firstItem); if (firstItemId < 1) { // Maybe we can find previous tweet firstItemId = getListView().getAdapter().getItemId(firstItem - 1); } TwitterUser tu = TwitterUser.getTwitterUser(this); tu.getSharedPreferences().edit().putLong(positionKey(), firstItemId).commit(); if (mSearchMode) { // Remember query string for which the position was saved tu.getSharedPreferences().edit().putString(positionQueryStringKey(), mQueryString).commit(); } if (Log.isLoggable(QuicksyncService.APPTAG, Log.VERBOSE)) { Log.v( TAG, "Saved position " + tu.getUsername() + "-" + positionKey() + "=" + firstItemId + "; list position=" + firstItem); } }
/** Load position saved for this user and for this type of timeline */ private void loadPosition() { TwitterUser tu = TwitterUser.getTwitterUser(this); boolean loaded = false; long firstItemId = -3; try { int scrollPos = -1; firstItemId = getSavedPosition(); if (firstItemId > 0) { scrollPos = listPosForId(firstItemId); } if (scrollPos > 0) { getListView().setSelectionFromTop(scrollPos - 1, 0); loaded = true; if (Log.isLoggable(QuicksyncService.APPTAG, Log.VERBOSE)) { Log.v( TAG, "Loaded position " + tu.getUsername() + "-" + positionKey() + "=" + firstItemId); } } else { // There is no stored position if (mSearchMode) { // In search mode start from the most recent tweet! scrollPos = 1; } else { scrollPos = getListView().getCount() - 1; } setSelectionAtBottom(scrollPos); } } catch (Exception e) { Editor ed = tu.getSharedPreferences().edit(); ed.remove(positionKey()); ed.commit(); firstItemId = -2; } if (!loaded && Log.isLoggable(QuicksyncService.APPTAG, Log.VERBOSE)) { Log.v( TAG, "Didn't load position " + tu.getUsername() + "-" + positionKey() + "=" + firstItemId); } positionLoaded = true; }