summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/documentsui/DirectoryLoader.java23
-rw-r--r--src/com/android/documentsui/MultiRootDocumentsLoader.java25
2 files changed, 42 insertions, 6 deletions
diff --git a/src/com/android/documentsui/DirectoryLoader.java b/src/com/android/documentsui/DirectoryLoader.java
index 90dc19ef9..2775ec4bb 100644
--- a/src/com/android/documentsui/DirectoryLoader.java
+++ b/src/com/android/documentsui/DirectoryLoader.java
@@ -279,10 +279,11 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
@Override
protected void onStartLoading() {
- if (mResult != null) {
+ boolean isCursorStale = checkIfCursorStale(mResult);
+ if (mResult != null && !isCursorStale) {
deliverResult(mResult);
}
- if (takeContentChanged() || mResult == null) {
+ if (takeContentChanged() || mResult == null || isCursorStale) {
forceLoad();
}
}
@@ -311,4 +312,22 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
FileUtils.closeQuietly(mResult);
mResult = null;
}
+
+ private boolean checkIfCursorStale(DirectoryResult result) {
+ if (mResult == null) {
+ return true;
+ }
+ Cursor cursor = result.cursor;
+ cursor.moveToPosition(-1);
+ for (int pos = 0; pos < cursor.getCount(); ++pos) {
+ try {
+ if (!cursor.moveToNext()) {
+ return true;
+ }
+ } catch (Exception e) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/com/android/documentsui/MultiRootDocumentsLoader.java b/src/com/android/documentsui/MultiRootDocumentsLoader.java
index 62c4ba828..b25828dda 100644
--- a/src/com/android/documentsui/MultiRootDocumentsLoader.java
+++ b/src/com/android/documentsui/MultiRootDocumentsLoader.java
@@ -104,8 +104,6 @@ public abstract class MultiRootDocumentsLoader extends AsyncTaskLoader<Directory
* @param state current state
* @param executors the executors of authorities
* @param fileTypeMap the map of mime types and file types.
- * @param lock the selection lock
- * @param contentChangedCallback callback when content changed
*/
public MultiRootDocumentsLoader(Context context, ProvidersAccess providers, State state,
Lookup<String, Executor> executors, Lookup<String, String> fileTypeMap) {
@@ -304,10 +302,11 @@ public abstract class MultiRootDocumentsLoader extends AsyncTaskLoader<Directory
@Override
protected void onStartLoading() {
- if (mResult != null) {
+ boolean isCursorStale = checkIfCursorStale(mResult);
+ if (mResult != null && !isCursorStale) {
deliverResult(mResult);
}
- if (takeContentChanged() || mResult == null) {
+ if (takeContentChanged() || mResult == null || isCursorStale) {
forceLoad();
}
}
@@ -457,4 +456,22 @@ public abstract class MultiRootDocumentsLoader extends AsyncTaskLoader<Directory
mIsClosed = true;
}
}
+
+ private boolean checkIfCursorStale(DirectoryResult result) {
+ if (mResult == null) {
+ return true;
+ }
+ Cursor cursor = result.cursor;
+ cursor.moveToPosition(-1);
+ for (int pos = 0; pos < cursor.getCount(); ++pos) {
+ try {
+ if (!cursor.moveToNext()) {
+ return true;
+ }
+ } catch (Exception e) {
+ return true;
+ }
+ }
+ return false;
+ }
}