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.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.util.LruCache;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@ -115,6 +116,10 @@ public class LibraryPagerAdapter
|
|||||||
* The file adapter instance, also stored at mAdapters[MediaUtils.TYPE_FILE].
|
* The file adapter instance, also stored at mAdapters[MediaUtils.TYPE_FILE].
|
||||||
*/
|
*/
|
||||||
private FileSystemAdapter mFilesAdapter;
|
private FileSystemAdapter mFilesAdapter;
|
||||||
|
/**
|
||||||
|
* LRU cache holding the last scrolling position of the filesadapter listview
|
||||||
|
*/
|
||||||
|
private FilePositionLruCache mFilePosLRU;
|
||||||
/**
|
/**
|
||||||
* The adapter of the currently visible list.
|
* The adapter of the currently visible list.
|
||||||
*/
|
*/
|
||||||
@ -200,6 +205,7 @@ public class LibraryPagerAdapter
|
|||||||
*/
|
*/
|
||||||
public LibraryPagerAdapter(LibraryActivity activity, Looper workerLooper)
|
public LibraryPagerAdapter(LibraryActivity activity, Looper workerLooper)
|
||||||
{
|
{
|
||||||
|
mFilePosLRU = new FilePositionLruCache(32);
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mUiHandler = new Handler(this);
|
mUiHandler = new Handler(this);
|
||||||
mWorkerHandler = new Handler(workerLooper, this);
|
mWorkerHandler = new Handler(workerLooper, this);
|
||||||
@ -549,6 +555,10 @@ public class LibraryPagerAdapter
|
|||||||
if (mFilesAdapter == null) {
|
if (mFilesAdapter == null) {
|
||||||
mPendingFileLimiter = limiter;
|
mPendingFileLimiter = limiter;
|
||||||
} else {
|
} else {
|
||||||
|
Limiter oldLimiter = mFilesAdapter.getLimiter();
|
||||||
|
int curPos = mLists[limiter.type].getFirstVisiblePosition();
|
||||||
|
mFilePosLRU.putLimiter(oldLimiter, curPos);
|
||||||
|
|
||||||
mFilesAdapter.setLimiter(limiter);
|
mFilesAdapter.setLimiter(limiter);
|
||||||
requestRequery(mFilesAdapter);
|
requestRequery(mFilesAdapter);
|
||||||
}
|
}
|
||||||
@ -620,6 +630,14 @@ public class LibraryPagerAdapter
|
|||||||
pos = mSavedPositions[index];
|
pos = mSavedPositions[index];
|
||||||
mSavedPositions[index] = 0;
|
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);
|
mLists[index].setSelection(pos);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -812,4 +830,34 @@ public class LibraryPagerAdapter
|
|||||||
mActivity.onItemClicked(intent);
|
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