summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-12-30 00:05:37 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-12-30 00:05:37 +0000
commitf54200d83880c1cc4d501e4cb5b4313eb7fc0b9a (patch)
treef9d8e55c4b7d0f19d6705a4e5d1fdd32182365c5
parent4eb66e8bac1a780c5131d478f9edf0617c4cd487 (diff)
parent8af1a757149692634a7b82b1fce018761b3bcc9b (diff)
downloadplatform_packages_apps_DocumentsUI-f54200d83880c1cc4d501e4cb5b4313eb7fc0b9a.tar.gz
platform_packages_apps_DocumentsUI-f54200d83880c1cc4d501e4cb5b4313eb7fc0b9a.tar.bz2
platform_packages_apps_DocumentsUI-f54200d83880c1cc4d501e4cb5b4313eb7fc0b9a.zip
Change-Id: I381b121006900379dc3b18919155c63c9821477b
-rw-r--r--src/com/android/documentsui/DirectoryLoader.java23
-rw-r--r--src/com/android/documentsui/MultiRootDocumentsLoader.java23
2 files changed, 42 insertions, 4 deletions
diff --git a/src/com/android/documentsui/DirectoryLoader.java b/src/com/android/documentsui/DirectoryLoader.java
index 458f86112..31963962a 100644
--- a/src/com/android/documentsui/DirectoryLoader.java
+++ b/src/com/android/documentsui/DirectoryLoader.java
@@ -281,10 +281,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();
}
}
@@ -313,4 +314,22 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
FileUtils.closeQuietly(mResult);
mResult = null;
}
+
+ private boolean checkIfCursorStale(DirectoryResult result) {
+ if (result == null || result.cursor == null || result.cursor.isClosed()) {
+ return true;
+ }
+ Cursor cursor = result.cursor;
+ try {
+ cursor.moveToPosition(-1);
+ for (int pos = 0; pos < cursor.getCount(); ++pos) {
+ 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 643f122ff..e7d09bfd3 100644
--- a/src/com/android/documentsui/MultiRootDocumentsLoader.java
+++ b/src/com/android/documentsui/MultiRootDocumentsLoader.java
@@ -303,10 +303,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();
}
}
@@ -456,4 +457,22 @@ public abstract class MultiRootDocumentsLoader extends AsyncTaskLoader<Directory
mIsClosed = true;
}
}
+
+ private boolean checkIfCursorStale(DirectoryResult result) {
+ if (result == null || result.cursor == null || result.cursor.isClosed()) {
+ return true;
+ }
+ Cursor cursor = result.cursor;
+ try {
+ cursor.moveToPosition(-1);
+ for (int pos = 0; pos < cursor.getCount(); ++pos) {
+ if (!cursor.moveToNext()) {
+ return true;
+ }
+ }
+ } catch (Exception e) {
+ return true;
+ }
+ return false;
+ }
}