diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0cb9cd5..230c9315 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+### Changes
+- Fix: issue with no size found text
+
### 2.12.13
- Fix: External Link redirect issue
diff --git a/virtusize-core/src/main/java/com/virtusize/android/data/remote/I18nLocalization.kt b/virtusize-core/src/main/java/com/virtusize/android/data/remote/I18nLocalization.kt
index 8346ae2c..5ac58b29 100644
--- a/virtusize-core/src/main/java/com/virtusize/android/data/remote/I18nLocalization.kt
+++ b/virtusize-core/src/main/java/com/virtusize/android/data/remote/I18nLocalization.kt
@@ -22,6 +22,7 @@ data class I18nLocalization(
val sizeComparisonMultiSizeText: String,
val willFitResultText: String,
val willNotFitResultText: String,
+ val willNotFitResultDefaultText: String,
val bodyDataEmptyText: String,
) {
enum class TrimType {
diff --git a/virtusize-core/src/main/java/com/virtusize/android/data/remote/Product.kt b/virtusize-core/src/main/java/com/virtusize/android/data/remote/Product.kt
index 981614ad..cd3e7a59 100644
--- a/virtusize-core/src/main/java/com/virtusize/android/data/remote/Product.kt
+++ b/virtusize-core/src/main/java/com/virtusize/android/data/remote/Product.kt
@@ -41,6 +41,7 @@ data class Product(
i18nLocalization: I18nLocalization,
sizeComparisonRecommendedSize: SizeComparisonRecommendedSize?,
bodyProfileRecommendedSizeName: String?,
+ bodyProfileWillFit: Boolean? = null,
): String {
return when {
isAccessory() -> accessoryText(i18nLocalization, sizeComparisonRecommendedSize)
@@ -49,12 +50,14 @@ data class Product(
i18nLocalization = i18nLocalization,
sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
+ bodyProfileWillFit = bodyProfileWillFit,
)
else ->
multiSizeText(
i18nLocalization,
sizeComparisonRecommendedSize,
bodyProfileRecommendedSizeName,
+ bodyProfileWillFit,
)
}
}
@@ -88,13 +91,27 @@ data class Product(
i18nLocalization: I18nLocalization,
sizeComparisonRecommendedSize: SizeComparisonRecommendedSize?,
bodyProfileRecommendedSizeName: String?,
+ bodyProfileWillFit: Boolean?,
): String {
- bodyProfileRecommendedSizeName?.let {
- return i18nLocalization.oneSizeWillFitResultText
+ // Check if body data is provided (bodyProfileRecommendedSizeName is not null means body data was provided)
+ val hasBodyData = bodyProfileRecommendedSizeName != null
+
+ // For one-size products with body data provided
+ if (hasBodyData) {
+ // If willFit is true and we have a recommended size, show the will fit message
+ if (bodyProfileWillFit == true) {
+ return i18nLocalization.oneSizeWillFitResultText
+ }
+ // If willFit is false or no recommended size, show "Your size not found"
+ return i18nLocalization.willNotFitResultDefaultText
}
+
+ // No body data provided, check for product comparison
sizeComparisonRecommendedSize?.let {
return i18nLocalization.getOneSizeProductComparisonText(it)
}
+
+ // No data at all, show body data empty message
return i18nLocalization.bodyDataEmptyText
}
@@ -105,15 +122,29 @@ data class Product(
i18nLocalization: I18nLocalization,
sizeComparisonRecommendedSize: SizeComparisonRecommendedSize?,
bodyProfileRecommendedSizeName: String?,
+ bodyProfileWillFit: Boolean?,
): String {
- bodyProfileRecommendedSizeName?.let {
- return i18nLocalization.getMultiSizeBodyProfileText(
- bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
- )
+ // Check if body data is provided
+ val hasBodyData = bodyProfileRecommendedSizeName != null
+
+ // For multi-size products with body data provided
+ if (hasBodyData) {
+ // If willFit is true and we have a recommended size, show it
+ if (bodyProfileWillFit == true && bodyProfileRecommendedSizeName.isNotEmpty()) {
+ return i18nLocalization.getMultiSizeBodyProfileText(
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
+ )
+ }
+ // If willFit is false or no recommended size, show "Your size not found"
+ return i18nLocalization.willNotFitResultDefaultText
}
+
+ // No body data provided, check for product comparison
sizeComparisonRecommendedSize?.bestStoreProductSize?.name?.let {
return i18nLocalization.getMultiSizeProductComparisonText(it)
}
+
+ // No data at all, show body data empty message
return i18nLocalization.bodyDataEmptyText
}
diff --git a/virtusize-core/src/main/res/values/strings.xml b/virtusize-core/src/main/res/values/strings.xml
index 7dcc9b81..64bc51bf 100644
--- a/virtusize-core/src/main/res/values/strings.xml
+++ b/virtusize-core/src/main/res/values/strings.xml
@@ -11,6 +11,6 @@
This item should fit you
The closest size to your item is
Your recommended size is
- Check how it fits you
+ Your size not found
Find your right size
\ No newline at end of file
diff --git a/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt b/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt
index e6974ed9..9cf7de26 100644
--- a/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt
+++ b/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt
@@ -247,6 +247,7 @@ internal class VirtusizeImpl(
externalProductId: String,
userProductRecommendedSize: SizeComparisonRecommendedSize?,
userBodyRecommendedSize: String?,
+ userBodyWillFit: Boolean?,
) {
val storeProduct = virtusizeRepository.getProductBy(externalProductId)
virtusizeViews
@@ -266,6 +267,7 @@ internal class VirtusizeImpl(
i18nLocalization = i18nLocalization,
sizeComparisonRecommendedSize = userProductRecommendedSize,
bodyProfileRecommendedSizeName = userBodyRecommendedSize,
+ bodyProfileWillFit = userBodyWillFit,
).trimI18nText(trimType)
virtusizeView.setRecommendationText(
externalProductId,
diff --git a/virtusize/src/main/java/com/virtusize/android/VirtusizePresenter.kt b/virtusize/src/main/java/com/virtusize/android/VirtusizePresenter.kt
index 7984e9b1..5a3401ec 100644
--- a/virtusize/src/main/java/com/virtusize/android/VirtusizePresenter.kt
+++ b/virtusize/src/main/java/com/virtusize/android/VirtusizePresenter.kt
@@ -12,6 +12,7 @@ internal interface VirtusizePresenter {
externalProductId: String,
userProductRecommendedSize: SizeComparisonRecommendedSize?,
userBodyRecommendedSize: String?,
+ userBodyWillFit: Boolean?,
)
fun hasInPageError(
diff --git a/virtusize/src/main/java/com/virtusize/android/VirtusizeRepository.kt b/virtusize/src/main/java/com/virtusize/android/VirtusizeRepository.kt
index 957c44af..31d7cf3f 100644
--- a/virtusize/src/main/java/com/virtusize/android/VirtusizeRepository.kt
+++ b/virtusize/src/main/java/com/virtusize/android/VirtusizeRepository.kt
@@ -48,6 +48,7 @@ class VirtusizeRepository internal constructor(
private var userProducts: List? = null
private var userProductRecommendedSize: SizeComparisonRecommendedSize? = null
private var userBodyRecommendedSize: String? = null
+ private var userBodyWillFit: Boolean? = null
// This variable holds the list of product types from the Virtusize API
private var productTypes: List? = null
@@ -373,6 +374,7 @@ class VirtusizeRepository internal constructor(
externalProductId = productId,
userProductRecommendedSize = userProductRecommendedSize,
userBodyRecommendedSize = null,
+ userBodyWillFit = null,
)
}
@@ -381,6 +383,7 @@ class VirtusizeRepository internal constructor(
externalProductId = productId,
userProductRecommendedSize = null,
userBodyRecommendedSize = userBodyRecommendedSize,
+ userBodyWillFit = userBodyWillFit,
)
}
@@ -389,6 +392,7 @@ class VirtusizeRepository internal constructor(
externalProductId = productId,
userProductRecommendedSize = userProductRecommendedSize,
userBodyRecommendedSize = userBodyRecommendedSize,
+ userBodyWillFit = userBodyWillFit,
)
}
}
@@ -406,6 +410,7 @@ class VirtusizeRepository internal constructor(
userProducts = null
userProductRecommendedSize = null
userBodyRecommendedSize = null
+ userBodyWillFit = null
}
/**
@@ -419,6 +424,7 @@ class VirtusizeRepository internal constructor(
productTypes: List?,
): String? {
if (storeProduct == null || productTypes == null || storeProduct.isAccessory()) {
+ userBodyWillFit = null
return null
}
val userBodyProfileResponse = virtusizeAPIService.getUserBodyProfile()
@@ -430,6 +436,7 @@ class VirtusizeRepository internal constructor(
storeProduct,
userBodyProfileResponse.successData!!,
)
+ userBodyWillFit = bodyProfileRecommendedSizeResponse.successData?.willFit
return bodyProfileRecommendedSizeResponse.successData?.sizeName
} else {
val bodyProfileRecommendedSizeResponse =
@@ -438,6 +445,7 @@ class VirtusizeRepository internal constructor(
storeProduct,
userBodyProfileResponse.successData!!,
)
+ userBodyWillFit = bodyProfileRecommendedSizeResponse.successData?.get(0)?.willFit
return bodyProfileRecommendedSizeResponse.successData?.get(0)?.sizeName
}
} else if (userBodyProfileResponse.failureData?.code != HttpURLConnection.HTTP_NOT_FOUND) {
@@ -445,6 +453,7 @@ class VirtusizeRepository internal constructor(
messageHandler.onError(it)
}
}
+ userBodyWillFit = null
return null
}
diff --git a/virtusize/src/main/java/com/virtusize/android/data/parsers/I18nLocalizationJsonParser.kt b/virtusize/src/main/java/com/virtusize/android/data/parsers/I18nLocalizationJsonParser.kt
index a854bb30..c13a8bce 100644
--- a/virtusize/src/main/java/com/virtusize/android/data/parsers/I18nLocalizationJsonParser.kt
+++ b/virtusize/src/main/java/com/virtusize/android/data/parsers/I18nLocalizationJsonParser.kt
@@ -123,6 +123,10 @@ internal class I18nLocalizationJsonParser(
),
)?.trim().orEmpty()
+ val willNotFitResultDefaultText = configuredContext.getString(
+ com.virtusize.android.core.R.string.inpage_will_not_fit_result_text,
+ )
+
val bodyDataEmptyText =
inpageJSONObject?.optString(
FIELD_BODY_DATA_EMPTY,
@@ -146,6 +150,7 @@ internal class I18nLocalizationJsonParser(
sizeComparisonMultiSizeText = sizeComparisonMultiSizeText,
willFitResultText = willFitResultText,
willNotFitResultText = willNotFitResultText,
+ willNotFitResultDefaultText = willNotFitResultDefaultText,
bodyDataEmptyText = bodyDataEmptyText,
)
}
diff --git a/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterImpl.kt b/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterImpl.kt
index f4bf2eb5..e5a71404 100644
--- a/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterImpl.kt
+++ b/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterImpl.kt
@@ -250,6 +250,7 @@ internal class VirtusizeFlutterImpl(
externalProductId: String,
userProductRecommendedSize: SizeComparisonRecommendedSize?,
userBodyRecommendedSize: String?,
+ userBodyWillFit: Boolean?,
) {
val storeProduct = virtusizeRepository.getProductBy(externalProductId)
val i18nLocalization = virtusizeRepository.i18nLocalization
@@ -271,6 +272,7 @@ internal class VirtusizeFlutterImpl(
i18nLocalization = i18nLocalization,
sizeComparisonRecommendedSize = userProductRecommendedSize,
bodyProfileRecommendedSizeName = userBodyRecommendedSize,
+ bodyProfileWillFit = userBodyWillFit,
).trimI18nText(I18nLocalization.TrimType.MULTIPLELINES)
virtusizeFlutterPresenter?.gotSizeRecommendations(
@@ -278,6 +280,7 @@ internal class VirtusizeFlutterImpl(
storeProduct,
userProductRecommendedSize?.bestUserProduct,
recommendationText,
+ userBodyWillFit,
)
}
}
diff --git a/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterPresenter.kt b/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterPresenter.kt
index b1a2b15e..b98aa323 100644
--- a/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterPresenter.kt
+++ b/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterPresenter.kt
@@ -14,6 +14,7 @@ interface VirtusizeFlutterPresenter {
storeProduct: Product?,
bestUserProduct: Product?,
recommendationText: String?,
+ willFit: Boolean?,
)
fun onLangugeClick(language: VirtusizeLanguage)
diff --git a/virtusize/src/test/java/com/virtusize/android/parsers/I18nLocalizationJsonParserTest.kt b/virtusize/src/test/java/com/virtusize/android/parsers/I18nLocalizationJsonParserTest.kt
index 36d69f1a..bd1fe09d 100644
--- a/virtusize/src/test/java/com/virtusize/android/parsers/I18nLocalizationJsonParserTest.kt
+++ b/virtusize/src/test/java/com/virtusize/android/parsers/I18nLocalizationJsonParserTest.kt
@@ -36,35 +36,6 @@ class I18nLocalizationJsonParserTest {
assertThat(actualI18nLocalization).isEqualTo(expectedI18nLocalization)
}
- @Test
- fun parseI18N_emptyJsonData_shouldReturnExpectedObject() {
- val actualI18nLocalization =
- I18nLocalizationJsonParser(context, VirtusizeLanguage.EN).parse(
- TestFixtures.EMPTY_JSON_DATA,
- )
-
- val expectedI18nLocalization =
- I18nLocalization(
- VirtusizeLanguage.EN,
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- )
-
- assertThat(actualI18nLocalization).isEqualTo(expectedI18nLocalization)
- }
-
@Test
fun parseI18NJP_japaneseLocalization_shouldReturnExpectedObject() {
val actualI18nLocalization =
@@ -126,6 +97,7 @@ class I18nLocalizationJsonParserTest {
localizedContext.getString(com.virtusize.android.core.R.string.inpage_multi_size_comparison_text),
localizedContext.getString(com.virtusize.android.core.R.string.inpage_will_fit_result_text),
localizedContext.getString(com.virtusize.android.core.R.string.inpage_will_not_fit_result_text),
+ localizedContext.getString(com.virtusize.android.core.R.string.inpage_will_not_fit_result_text),
localizedContext.getString(com.virtusize.android.core.R.string.inpage_body_data_empty_text),
)
}
diff --git a/virtusize/src/test/resources/i18n_en.json b/virtusize/src/test/resources/i18n_en.json
index 37b4aea1..5c255577 100644
--- a/virtusize/src/test/resources/i18n_en.json
+++ b/virtusize/src/test/resources/i18n_en.json
@@ -23,7 +23,7 @@
"errorTextShort": "Virtusize is not available at the moment.",
"oneSizeText": "There is only size %{value}",
"details": "Details",
- "willNotFitResult": "Check how it fits you",
+ "willNotFitResult": "Your size not found",
"tryItOn": "Try it on",
"accessoriesEmpty": "See what fits inside",
"hasProductAccessoryText": "See the size difference from %{boldStart}your own item%{boldEnd}",