summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-05-23 20:44:46 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-05-23 20:44:46 +0000
commit160289301fe214fa092f43cb0581a8688dca2487 (patch)
treea0d4a089788fd4e593ef9bc26f4251d46c132ea2 /java/src
parent08da0f1838748ea0632389c10f362eb3c308a7ae (diff)
parent1dc90519a76292138c346a5622ac5571713fc030 (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.kt36
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
}