From 2cd8a41ea53025bccd56e50357b71c611e792eba Mon Sep 17 00:00:00 2001 From: MatthewTighe Date: Fri, 19 Aug 2022 10:15:00 -0700 Subject: [PATCH] Closes #26213: Add wallpaper use case to load thumbnails. --- .../fenix/wallpapers/WallpapersUseCases.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt index b7d51f171..b0bad7e31 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt @@ -43,6 +43,7 @@ class WallpapersUseCases( store: AppStore, client: Client, strictMode: StrictModeManager, + filesDir: File, ) { val initialize: InitializeWallpapersUseCase by lazy { if (FeatureFlags.wallpaperV2Enabled) { @@ -89,6 +90,13 @@ class WallpapersUseCases( LegacyLoadBitmapUseCase(context) } } + val loadThumbnail: LoadThumbnailUseCase by lazy { + if (FeatureFlags.wallpaperV2Enabled) { + DefaultLoadThumbnailUseCase(filesDir) + } else { + LegacyLoadThumbnailUseCase(context) + } + } val selectWallpaper: SelectWallpaperUseCase by lazy { DefaultSelectWallpaperUseCase(context.settings(), store) } /** @@ -380,6 +388,37 @@ class WallpapersUseCases( } } + /** + * Contract for usecase for loading thumbnail bitmaps related to a specific wallpaper. + */ + interface LoadThumbnailUseCase { + /** + * Load the bitmap for a [wallpaper] thumbnail, if available. + * + * @param wallpaper The wallpaper to load a thumbnail for. + */ + suspend operator fun invoke(wallpaper: Wallpaper): Bitmap? + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + internal class LegacyLoadThumbnailUseCase(private val context: Context): LoadThumbnailUseCase { + override suspend fun invoke(wallpaper: Wallpaper): Bitmap? = + LegacyLoadBitmapUseCase(context).invoke(wallpaper) + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + internal class DefaultLoadThumbnailUseCase(private val filesDir: File): LoadThumbnailUseCase { + override suspend fun invoke(wallpaper: Wallpaper): Bitmap? = withContext(Dispatchers.IO) { + Result.runCatching { + val path = Wallpaper.getLocalPath(wallpaper.name, Wallpaper.ImageType.Thumbnail) + withContext(Dispatchers.IO) { + val file = File(filesDir, path) + BitmapFactory.decodeStream(file.inputStream()) + } + }.getOrNull() + } + } + /** * Contract for usecase of selecting a new wallpaper. */