diff options
author | 2020-08-24 10:32:23 -0700 | |
---|---|---|
committer | 2020-08-26 16:53:33 -0700 | |
commit | 515ba9212ce614a9904d87662d79b5bac2a0a1b5 (patch) | |
tree | 457e9de97628087a6faf96bfe940186a0ca3f666 | |
parent | ed7ac98aca0f96ab611e6034ee0efafe4e48b03d (diff) |
If stale data, forceload values
Test: atest DocumentsUIGoogleTests
Bug: 162292209
Change-Id: I0b320e75a63999b23ca4ad27c8a0f3d742d55f20
-rw-r--r-- | src/com/android/documentsui/DirectoryLoader.java | 23 | ||||
-rw-r--r-- | src/com/android/documentsui/MultiRootDocumentsLoader.java | 25 |
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; + } } |