diff --git a/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java b/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java index 34bb0f33f0..ef5141681f 100644 --- a/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java +++ b/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java @@ -114,38 +114,29 @@ public abstract class LimitOffsetDataSource extends PositionalDataSource { int firstLoadPosition = 0; RoomSQLiteQuery sqLiteQuery = null; Cursor cursor = null; - int retry = 0; - while (cursor == null) { - mDb.beginTransaction(); - try { - totalCount = countItems(); - if (totalCount != 0) { - // bound the size requested, based on known count - firstLoadPosition = computeInitialLoadPosition(params, totalCount); - int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount); + mDb.beginTransaction(); + try { + totalCount = countItems(); + if (totalCount != 0) { + // bound the size requested, based on known count + firstLoadPosition = computeInitialLoadPosition(params, totalCount); + int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount); - sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize); - cursor = mDb.query(sqLiteQuery); - List rows = convertRows(cursor); - mDb.setTransactionSuccessful(); - list = rows; - } - } catch (Throwable ex) { - if (++retry > 10) - throw ex; - eu.faircode.email.Log.w(ex); - try { - Thread.sleep(3000L); - } catch (InterruptedException ignored) { - } - } finally { - if (cursor != null) { - cursor.close(); - } - mDb.endTransaction(); - if (sqLiteQuery != null) { - sqLiteQuery.release(); - } + sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize); + cursor = mDb.query(sqLiteQuery); + List rows = convertRows(cursor); + mDb.setTransactionSuccessful(); + list = rows; + } + } catch (Throwable ex) { + eu.faircode.email.Log.w(ex); + } finally { + if (cursor != null) { + cursor.close(); + } + mDb.endTransaction(); + if (sqLiteQuery != null) { + sqLiteQuery.release(); } } diff --git a/patches/LimitOffsetDataSource.patch b/patches/LimitOffsetDataSource.patch index f86b23587f..5931692424 100644 --- a/patches/LimitOffsetDataSource.patch +++ b/patches/LimitOffsetDataSource.patch @@ -1,5 +1,5 @@ --- /home/marcel/support/room/runtime/src/main/java/androidx/room/paging/LimitOffsetDataSource.java 2020-05-18 15:59:35.380887546 +0200 -+++ /home/marcel/email/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java 2020-06-15 15:44:12.388117961 +0200 ++++ /home/marcel/email/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java 2020-06-15 16:11:37.701097921 +0200 @@ -20,6 +20,7 @@ import android.database.Cursor; import androidx.annotation.NonNull; @@ -19,63 +19,12 @@ private final RoomSQLiteQuery mSourceQuery; private final String mCountQuery; private final String mLimitOffsetQuery; -@@ -114,27 +114,38 @@ public abstract class LimitOffsetDataSou - int firstLoadPosition = 0; - RoomSQLiteQuery sqLiteQuery = null; - Cursor cursor = null; -- mDb.beginTransaction(); -- try { -- totalCount = countItems(); -- if (totalCount != 0) { -- // bound the size requested, based on known count -- firstLoadPosition = computeInitialLoadPosition(params, totalCount); -- int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount); -- -- sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize); -- cursor = mDb.query(sqLiteQuery); -- List rows = convertRows(cursor); -- mDb.setTransactionSuccessful(); -- list = rows; -- } -- } finally { -- if (cursor != null) { -- cursor.close(); -- } -- mDb.endTransaction(); -- if (sqLiteQuery != null) { -- sqLiteQuery.release(); -+ int retry = 0; -+ while (cursor == null) { -+ mDb.beginTransaction(); -+ try { -+ totalCount = countItems(); -+ if (totalCount != 0) { -+ // bound the size requested, based on known count -+ firstLoadPosition = computeInitialLoadPosition(params, totalCount); -+ int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount); -+ -+ sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize); -+ cursor = mDb.query(sqLiteQuery); -+ List rows = convertRows(cursor); -+ mDb.setTransactionSuccessful(); -+ list = rows; -+ } -+ } catch (Throwable ex) { -+ if (++retry > 10) -+ throw ex; -+ eu.faircode.email.Log.w(ex); -+ try { -+ Thread.sleep(3000L); -+ } catch (InterruptedException ignored) { -+ } -+ } finally { -+ if (cursor != null) { -+ cursor.close(); -+ } -+ mDb.endTransaction(); -+ if (sqLiteQuery != null) { -+ sqLiteQuery.release(); -+ } +@@ -128,6 +128,8 @@ public abstract class LimitOffsetDataSou + mDb.setTransactionSuccessful(); + list = rows; } - } - ++ } catch (Throwable ex) { ++ eu.faircode.email.Log.w(ex); + } finally { + if (cursor != null) { + cursor.close();