diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index f6f459d408af..d7f93d3f66f1 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -2,6 +2,7 @@
20.5
-----
+* [*] Use larger thumbnail previews for recommended themes during site creation [https://github.com/wordpress-mobile/WordPress-Android/pull/16848]
20.4
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/SiteDesignRecommendedDimensionProvider.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/SiteDesignRecommendedDimensionProvider.kt
index db5ddbcc73a5..735293153538 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/SiteDesignRecommendedDimensionProvider.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/SiteDesignRecommendedDimensionProvider.kt
@@ -15,4 +15,9 @@ class SiteDesignRecommendedDimensionProvider @Inject constructor(private val con
override val rowHeight: Int
get() = contextProvider.getContext().resources.getDimensionPixelSize(dimen.hpp_recommended_row_height)
+
+ // For larger images, we must provide a scale of 2.0 to the API due to a limitation in MShots and our endpoint
+ // integration (currently, MShots only supports a scale value of 1 or 2).
+ override val scale: Double
+ get() = if (1f < contextProvider.getContext().resources.displayMetrics.density) 2.0 else 1.0
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchHomePageLayoutsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchHomePageLayoutsUseCase.kt
index d7e0547dffe4..578edc11ec95 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchHomePageLayoutsUseCase.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchHomePageLayoutsUseCase.kt
@@ -7,7 +7,7 @@ import org.wordpress.android.fluxc.generated.ThemeActionBuilder
import org.wordpress.android.fluxc.store.ThemeStore
import org.wordpress.android.fluxc.store.ThemeStore.FetchStarterDesignsPayload
import org.wordpress.android.fluxc.store.ThemeStore.OnStarterDesignsFetched
-import org.wordpress.android.ui.sitecreation.theme.SiteDesignPickerDimensionProvider
+import org.wordpress.android.ui.sitecreation.theme.SiteDesignRecommendedDimensionProvider
import org.wordpress.android.util.config.BetaSiteDesignsFeatureConfig
import javax.inject.Inject
import kotlin.coroutines.Continuation
@@ -17,7 +17,7 @@ import kotlin.coroutines.suspendCoroutine
class FetchHomePageLayoutsUseCase @Inject constructor(
val dispatcher: Dispatcher,
@Suppress("unused") val themeStore: ThemeStore,
- private val thumbDimensionProvider: SiteDesignPickerDimensionProvider,
+ private val thumbDimensionProvider: SiteDesignRecommendedDimensionProvider,
private val betaSiteDesigns: BetaSiteDesignsFeatureConfig
) {
enum class GROUP(val key: String) {
@@ -31,16 +31,18 @@ class FetchHomePageLayoutsUseCase @Inject constructor(
if (continuation != null) {
throw IllegalStateException("Fetch already in progress.")
}
- val payload = if (betaSiteDesigns.isEnabled()) FetchStarterDesignsPayload(
- thumbDimensionProvider.previewWidth.toFloat(),
- thumbDimensionProvider.previewHeight.toFloat(),
- thumbDimensionProvider.scale.toFloat(),
- GROUP.STABLE.key, GROUP.BETA.key
- ) else FetchStarterDesignsPayload(
- thumbDimensionProvider.previewWidth.toFloat(),
- thumbDimensionProvider.previewHeight.toFloat(),
- thumbDimensionProvider.scale.toFloat()
- )
+
+ val previewScale = thumbDimensionProvider.scale.toFloat()
+ // Since dimensions are scaled in the WPCOM endpoint for MShots, we divide by the scale factor here to avoid
+ // having the dimensions scaled twice.
+ @Suppress("ForbiddenComment")
+ // TODO: revisit this after the endpoint is modified to scale on the client instead.
+ val previewWidth = thumbDimensionProvider.previewWidth.toFloat() / previewScale
+ val previewHeight = thumbDimensionProvider.previewHeight.toFloat() / previewScale
+ val groups = if (betaSiteDesigns.isEnabled()) arrayOf(GROUP.STABLE.key, GROUP.BETA.key) else emptyArray()
+ @Suppress("SpreadOperator")
+ val payload = FetchStarterDesignsPayload(previewWidth, previewHeight, previewScale, *groups)
+
return suspendCoroutine { cont ->
continuation = cont
dispatcher.dispatch(ThemeActionBuilder.newFetchStarterDesignsAction(payload))
diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml
index cda0c8e6e854..77f75d853b7c 100644
--- a/WordPress/src/main/res/values/dimens.xml
+++ b/WordPress/src/main/res/values/dimens.xml
@@ -663,9 +663,9 @@
260dp
200dp
330dp
- 260dp
- 200dp
- 350dp
+ 416dp
+ 320dp
+ 500dp
5dp
diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/FetchHomePageLayoutsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/FetchHomePageLayoutsUseCaseTest.kt
index 047bb466319d..c6c5f13d965f 100644
--- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/FetchHomePageLayoutsUseCaseTest.kt
+++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/FetchHomePageLayoutsUseCaseTest.kt
@@ -32,7 +32,7 @@ class FetchHomePageLayoutsUseCaseTest {
@Mock lateinit var dispatcher: Dispatcher
@Mock lateinit var store: ThemeStore
- @Mock lateinit var thumbDimensionProvider: SiteDesignPickerDimensionProvider
+ @Mock lateinit var thumbDimensionProvider: SiteDesignRecommendedDimensionProvider
@Mock lateinit var betaSiteDesigns: BetaSiteDesignsFeatureConfig
private lateinit var useCase: FetchHomePageLayoutsUseCase