summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Diksha Gohlyan <dikshag@google.com> 2020-08-24 10:32:23 -0700
committer Diksha Gohlyan <dikshag@google.com> 2020-08-26 16:53:33 -0700
commit515ba9212ce614a9904d87662d79b5bac2a0a1b5 (patch)
tree457e9de97628087a6faf96bfe940186a0ca3f666
parented7ac98aca0f96ab611e6034ee0efafe4e48b03d (diff)
If stale data, forceload values
Test: atest DocumentsUIGoogleTests Bug: 162292209 Change-Id: I0b320e75a63999b23ca4ad27c8a0f3d742d55f20
-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 458f86112..d90d51f74 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 (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 643f122ff..065c99aaa 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) {
@@ -303,10 +301,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 +455,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;
+ }
}