diff options
| author | 2024-05-23 20:44:46 +0000 | |
|---|---|---|
| committer | 2024-05-23 20:44:46 +0000 | |
| commit | 160289301fe214fa092f43cb0581a8688dca2487 (patch) | |
| tree | a0d4a089788fd4e593ef9bc26f4251d46c132ea2 /java/src | |
| parent | 08da0f1838748ea0632389c10f362eb3c308a7ae (diff) | |
| parent | 1dc90519a76292138c346a5622ac5571713fc030 (diff) | |
Merge "Preload full set of preview image metadata pages" into main
Diffstat (limited to 'java/src')
| -rw-r--r-- | java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt index 97b087e1..f02834e0 100644 --- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt +++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt @@ -76,10 +76,42 @@ constructor( .toMap(ConcurrentHashMap()) val pagedCursor: PagedCursor<CursorRow?> = uriCursor.paged(pageSize) val startPosition = uriCursor.extras?.getInt(POSITION, 0) ?: 0 - val state = readInitialState(pagedCursor, startPosition, unclaimedRecords) + val state = + loadToMaxPages( + initialState = readInitialState(pagedCursor, startPosition, unclaimedRecords), + pagedCursor = pagedCursor, + unclaimedRecords = unclaimedRecords, + ) processLoadRequests(state, pagedCursor, unclaimedRecords) } + private suspend fun loadToMaxPages( + initialState: CursorWindow, + pagedCursor: PagedCursor<CursorRow?>, + unclaimedRecords: MutableUnclaimedMap, + ): CursorWindow { + var state = initialState + val startPageNum = state.firstLoadedPageNum + while ((state.hasMoreLeft || state.hasMoreRight) && state.numLoadedPages < maxLoadedPages) { + interactor.setPreviews( + previewsByKey = state.merged.values.toSet(), + startIndex = startPageNum, + hasMoreLeft = state.hasMoreLeft, + hasMoreRight = state.hasMoreRight, + ) + val loadedLeft = startPageNum - state.firstLoadedPageNum + val loadedRight = state.lastLoadedPageNum - startPageNum + state = + when { + state.hasMoreLeft && loadedLeft < loadedRight -> + state.loadMoreLeft(pagedCursor, unclaimedRecords) + state.hasMoreRight -> state.loadMoreRight(pagedCursor, unclaimedRecords) + else -> state.loadMoreLeft(pagedCursor, unclaimedRecords) + } + } + return state + } + /** Loop forever, processing any loading requests from the UI and updating local cache. */ private suspend fun processLoadRequests( initialState: CursorWindow, @@ -301,5 +333,5 @@ annotation class MaxLoadedPages object ShareouselConstants { @Provides @PageSize fun pageSize(): Int = 16 - @Provides @MaxLoadedPages fun maxLoadedPages(): Int = 3 + @Provides @MaxLoadedPages fun maxLoadedPages(): Int = 8 } |