Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce484e5a authored by Diksha Gohlyan's avatar Diksha Gohlyan
Browse files

Check if cursor is closed for staleDataException

Test: atest DocumentsUIGoogleTests
Bug: 162292209

Change-Id: Ia4df46e4a1938bc421754763fa9d8ca12fde6280
Merged-In: Ia4df46e4a1938bc421754763fa9d8ca12fde6280
(cherry picked from commit 56e7a5f9)
parent 1894d482
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -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;
    }
}
+21 −2
Original line number Diff line number Diff line
@@ -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;
    }
}