aboutsummaryrefslogtreecommitdiff
path: root/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/ListScrollPositionManager.java
blob: 914373c8f2e1e0361fefb6cca437c8c136b43915 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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();
    }
}