remember scrolling position in filechooser
This commit is contained in:
parent
7b0307653f
commit
46e0470100
@ -39,6 +39,7 @@ import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.util.LruCache;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
@ -115,6 +116,10 @@ public class LibraryPagerAdapter
|
||||
* The file adapter instance, also stored at mAdapters[MediaUtils.TYPE_FILE].
|
||||
*/
|
||||
private FileSystemAdapter mFilesAdapter;
|
||||
/**
|
||||
* LRU cache holding the last scrolling position of the filesadapter listview
|
||||
*/
|
||||
private FilePositionLruCache mFilePosLRU;
|
||||
/**
|
||||
* The adapter of the currently visible list.
|
||||
*/
|
||||
@ -200,6 +205,7 @@ public class LibraryPagerAdapter
|
||||
*/
|
||||
public LibraryPagerAdapter(LibraryActivity activity, Looper workerLooper)
|
||||
{
|
||||
mFilePosLRU = new FilePositionLruCache(32);
|
||||
mActivity = activity;
|
||||
mUiHandler = new Handler(this);
|
||||
mWorkerHandler = new Handler(workerLooper, this);
|
||||
@ -549,6 +555,10 @@ public class LibraryPagerAdapter
|
||||
if (mFilesAdapter == null) {
|
||||
mPendingFileLimiter = limiter;
|
||||
} else {
|
||||
Limiter oldLimiter = mFilesAdapter.getLimiter();
|
||||
int curPos = mLists[limiter.type].getFirstVisiblePosition();
|
||||
mFilePosLRU.putLimiter(oldLimiter, curPos);
|
||||
|
||||
mFilesAdapter.setLimiter(limiter);
|
||||
requestRequery(mFilesAdapter);
|
||||
}
|
||||
@ -620,6 +630,14 @@ public class LibraryPagerAdapter
|
||||
pos = mSavedPositions[index];
|
||||
mSavedPositions[index] = 0;
|
||||
}
|
||||
|
||||
if (index == MediaUtils.TYPE_FILE) {
|
||||
Limiter curLimiter = mAdapters[index].getLimiter();
|
||||
Integer curPos = mFilePosLRU.getLimiter(curLimiter);
|
||||
if (curPos != null)
|
||||
pos = (int)curPos;
|
||||
}
|
||||
|
||||
mLists[index].setSelection(pos);
|
||||
break;
|
||||
}
|
||||
@ -812,4 +830,34 @@ public class LibraryPagerAdapter
|
||||
mActivity.onItemClicked(intent);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* LRU implementation for filebrowser position cache
|
||||
*/
|
||||
private class FilePositionLruCache extends LruCache<String, Integer> {
|
||||
public FilePositionLruCache(int size) {
|
||||
super(size);
|
||||
}
|
||||
public void putLimiter(Limiter limiter, Integer val) {
|
||||
this.put(_k(limiter), val);
|
||||
}
|
||||
public Integer getLimiter(Limiter limiter) {
|
||||
return this.get(_k(limiter));
|
||||
}
|
||||
|
||||
/**
|
||||
* Stringify limiter or return / if null
|
||||
*/
|
||||
private String _k(Limiter limiter) {
|
||||
String result = "/";
|
||||
if (limiter != null) {
|
||||
for(String entry : limiter.names) {
|
||||
result = result + entry + "/";
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user