mirror of
https://gitlab.com/xynngh/YetAnotherCallBlocker.git
synced 2025-06-05 22:19:12 +02:00
Fix BlacklistActivity crash after deleting items
This commit is contained in:
@@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fixed importing blacklist files larger than 4000 bytes.
|
- Fixed importing blacklist files larger than 4000 bytes.
|
||||||
|
- Fixed occasional crash after deleting blacklist items.
|
||||||
|
|
||||||
|
|
||||||
## [0.5.9] - 2020-10-20
|
## [0.5.9] - 2020-10-20
|
||||||
|
@@ -53,17 +53,36 @@ public class BlacklistDataSource extends PositionalDataSource<BlacklistItem> {
|
|||||||
@NonNull LoadInitialCallback<BlacklistItem> callback) {
|
@NonNull LoadInitialCallback<BlacklistItem> callback) {
|
||||||
LOG.debug("loadInitial({}, {})", params.requestedStartPosition, params.requestedLoadSize);
|
LOG.debug("loadInitial({}, {})", params.requestedStartPosition, params.requestedLoadSize);
|
||||||
|
|
||||||
List<BlacklistItem> items = getQueryBuilder()
|
int offset = params.requestedStartPosition;
|
||||||
.offset(params.requestedStartPosition)
|
|
||||||
.limit(params.requestedLoadSize)
|
|
||||||
.list();
|
|
||||||
|
|
||||||
items = blacklistDao.detach(items); // for DiffUtil to work
|
List<BlacklistItem> items = loadItems(offset, params.requestedLoadSize);
|
||||||
|
|
||||||
|
Integer totalCount = null;
|
||||||
|
|
||||||
|
if (items.isEmpty()) {
|
||||||
|
totalCount = (int) blacklistDao.countAll();
|
||||||
|
if (totalCount > 0) {
|
||||||
|
LOG.debug("loadInitial() initial range is empty: totalCount={}, offset={}",
|
||||||
|
totalCount, offset);
|
||||||
|
|
||||||
|
offset = (totalCount - params.requestedLoadSize)
|
||||||
|
/ params.pageSize * params.pageSize; // align to pageSize using integer math
|
||||||
|
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
|
||||||
|
LOG.debug("loadInitial() reloading with offset={}", offset);
|
||||||
|
items = loadItems(offset, params.requestedLoadSize);
|
||||||
|
} else {
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (params.placeholdersEnabled) {
|
if (params.placeholdersEnabled) {
|
||||||
callback.onResult(items, params.requestedStartPosition, (int) blacklistDao.countAll());
|
if (totalCount == null) totalCount = (int) blacklistDao.countAll();
|
||||||
|
|
||||||
|
callback.onResult(items, offset, totalCount);
|
||||||
} else {
|
} else {
|
||||||
callback.onResult(items, params.requestedStartPosition);
|
callback.onResult(items, offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,12 +91,16 @@ public class BlacklistDataSource extends PositionalDataSource<BlacklistItem> {
|
|||||||
@NonNull LoadRangeCallback<BlacklistItem> callback) {
|
@NonNull LoadRangeCallback<BlacklistItem> callback) {
|
||||||
LOG.debug("loadRange({}, {})", params.startPosition, params.loadSize);
|
LOG.debug("loadRange({}, {})", params.startPosition, params.loadSize);
|
||||||
|
|
||||||
|
callback.onResult(loadItems(params.startPosition, params.loadSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<BlacklistItem> loadItems(int offset, int limit) {
|
||||||
List<BlacklistItem> items = getQueryBuilder()
|
List<BlacklistItem> items = getQueryBuilder()
|
||||||
.offset(params.startPosition)
|
.offset(offset)
|
||||||
.limit(params.loadSize)
|
.limit(limit)
|
||||||
.list();
|
.list();
|
||||||
|
|
||||||
callback.onResult(blacklistDao.detach(items));
|
return blacklistDao.detach(items); // for DiffUtil to work
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryBuilder<BlacklistItem> getQueryBuilder() {
|
private QueryBuilder<BlacklistItem> getQueryBuilder() {
|
||||||
|
Reference in New Issue
Block a user