| package org.wordpress.android.util.helpers; |
| |
| import android.content.Context; |
| import android.content.SharedPreferences; |
| import android.content.SharedPreferences.Editor; |
| import android.preference.PreferenceManager; |
| import android.view.View; |
| import android.widget.ListView; |
| |
| public class ListScrollPositionManager { |
| private int mSelectedPosition; |
| private int mListViewScrollStateIndex; |
| private int mListViewScrollStateOffset; |
| private ListView mListView; |
| private boolean mSetSelection; |
| |
| public ListScrollPositionManager(ListView listView, boolean setSelection) { |
| mListView = listView; |
| mSetSelection = setSelection; |
| } |
| |
| public void saveScrollOffset() { |
| mListViewScrollStateIndex = mListView.getFirstVisiblePosition(); |
| View view = mListView.getChildAt(0); |
| mListViewScrollStateOffset = 0; |
| if (view != null) { |
| mListViewScrollStateOffset = view.getTop(); |
| } |
| if (mSetSelection) { |
| mSelectedPosition = mListView.getCheckedItemPosition(); |
| } |
| } |
| |
| public void restoreScrollOffset() { |
| mListView.setSelectionFromTop(mListViewScrollStateIndex, mListViewScrollStateOffset); |
| if (mSetSelection) { |
| mListView.setItemChecked(mSelectedPosition, true); |
| } |
| } |
| |
| public void saveToPreferences(Context context, String uniqueId) { |
| saveScrollOffset(); |
| SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); |
| Editor editor = settings.edit(); |
| editor.putInt("scroll-position-manager-index-" + uniqueId, mListViewScrollStateIndex); |
| editor.putInt("scroll-position-manager-offset-" + uniqueId, mListViewScrollStateOffset); |
| editor.putInt("scroll-position-manager-selected-position-" + uniqueId, mSelectedPosition); |
| editor.apply(); |
| } |
| |
| public void restoreFromPreferences(Context context, String uniqueId) { |
| SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); |
| mListViewScrollStateIndex = settings.getInt("scroll-position-manager-index-" + uniqueId, 0); |
| mListViewScrollStateOffset = settings.getInt("scroll-position-manager-offset-" + uniqueId, 0); |
| mSelectedPosition = settings.getInt("scroll-position-manager-selected-position-" + uniqueId, 0); |
| restoreScrollOffset(); |
| } |
| } |