diff --git a/CHANGELOG.md b/CHANGELOG.md
index 080c879c..59b0a3c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,9 @@
+### 2.7.4
+* Fix: Inpage text is not appropriate when the size is recommended
+* Fix: Inpage text for on-boarding user has 2 patterns at random
+
### 2.7.3
* Fix: Inpage doesn’t recommend anything after coming back to PDP from Comparison screen
-* Fix: Inpage text for on-boarding user has 2 patterns at random
* Fix: Inpage shows different size from that VS widget shows
* Fix: Body data tuning is not saved once closing the widget
diff --git a/README-COMPOSE.md b/README-COMPOSE.md
index b639baf3..f33daaa6 100644
--- a/README-COMPOSE.md
+++ b/README-COMPOSE.md
@@ -74,7 +74,7 @@ In your app `build.gradle` file, add the following dependencies:
```groovy
dependencies {
- implementation 'com.virtusize.android:virtusize:2.7.3'
+ implementation 'com.virtusize.android:virtusize:2.7.4'
}
```
@@ -82,7 +82,7 @@ In your app `build.gradle` file, add the following dependencies:
```kotlin
dependencies {
- implementation("com.virtusize.android:virtusize:2.7.3")
+ implementation("com.virtusize.android:virtusize:2.7.4")
}
```
@@ -354,7 +354,7 @@ There are two types of InPage in our Virtusize SDK.
There are two default design variations.
| Teal Theme | Black Theme |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
- ##### Layout Variations
@@ -362,7 +362,7 @@ There are two types of InPage in our Virtusize SDK.
Here are some possible layouts
| 1 thumbnail + 2 lines of message | 2 thumbnails + 2 lines of message |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
| **1 thumbnail + 1 line of message** | **2 animated thumbnails + 2 lines of message** |
|  |  |
@@ -443,13 +443,13 @@ for layouts where customers are browsing product images and size tables.
There are two default design variations.
| Teal Theme | Black Theme |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
- ##### Recommended Placements
| Underneath the product image | Underneath or near the size table |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|
|
|
- ##### Default Fonts
diff --git a/README-JP.md b/README-JP.md
index 59b178c4..5c60f6ea 100644
--- a/README-JP.md
+++ b/README-JP.md
@@ -78,7 +78,7 @@ In your appの`build.gradle`ファイルに下記のdependencyを追加
```groovy
dependencies {
- implementation 'com.virtusize.android:virtusize:2.7.3'
+ implementation 'com.virtusize.android:virtusize:2.7.4'
}
```
@@ -86,7 +86,7 @@ In your appの`build.gradle`ファイルに下記のdependencyを追加
```kotlin
dependencies {
- implementation("com.virtusize.android:virtusize:2.7.3")
+ implementation("com.virtusize.android:virtusize:2.7.4")
}
```
@@ -521,7 +521,7 @@ Virtusize SDKには2種類のInPageがあります。
デフォルトデザインは2種類あります。
| Teal Theme | Black Theme |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
- ##### レイアウトのバリエーション
@@ -529,7 +529,7 @@ Virtusize SDKには2種類のInPageがあります。
設定可能なレイアウト例
| 1 thumbnail + 2 lines of message | 2 thumbnails + 2 lines of message |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
| **1 thumbnail + 1 line of message** | **2 animated thumbnails + 2 lines of message** |
|  |  |
@@ -643,13 +643,13 @@ Virtusize SDKには2種類のInPageがあります。
2種類のでフォルトデザインを用意しています。
| Teal Theme | Black Theme |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
- ##### 推奨設置箇所
| Underneath the product image | Underneath or near the size table |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|
|
|
- ##### デフォルトのフォント
diff --git a/README.md b/README.md
index 7b24a68f..21b5c163 100644
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@ In your app `build.gradle` file, add the following dependencies:
```groovy
dependencies {
- implementation 'com.virtusize.android:virtusize:2.7.3'
+ implementation 'com.virtusize.android:virtusize:2.7.4'
}
```
@@ -88,7 +88,7 @@ In your app `build.gradle` file, add the following dependencies:
```kotlin
dependencies {
- implementation("com.virtusize.android:virtusize:2.7.3")
+ implementation("com.virtusize.android:virtusize:2.7.4")
}
```
@@ -521,7 +521,7 @@ There are two types of InPage in our Virtusize SDK.
There are two default design variations.
| Teal Theme | Black Theme |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
- ##### Layout Variations
@@ -529,7 +529,7 @@ There are two types of InPage in our Virtusize SDK.
Here are some possible layouts
| 1 thumbnail + 2 lines of message | 2 thumbnails + 2 lines of message |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
| **1 thumbnail + 1 line of message** | **2 animated thumbnails + 2 lines of message** |
|  |  |
@@ -641,13 +641,13 @@ for layouts where customers are browsing product images and size tables.
There are two default design variations.
| Teal Theme | Black Theme |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|  |  |
- ##### Recommended Placements
| Underneath the product image | Underneath or near the size table |
- | :----------------------------------------------------------: | :----------------------------------------------------------: |
+ | :----------------------------------------------------------: | :----------------------------------------------------------: |
|
|
|
- ##### Default Fonts
diff --git a/buildSrc/src/main/java/com/virtusize/android/constants/Constants.kt b/buildSrc/src/main/java/com/virtusize/android/constants/Constants.kt
index bc6cbae2..491e8201 100644
--- a/buildSrc/src/main/java/com/virtusize/android/constants/Constants.kt
+++ b/buildSrc/src/main/java/com/virtusize/android/constants/Constants.kt
@@ -6,6 +6,6 @@ object Constants {
const val TARGET_SDK = 34
// Update versionName when publishing a new release
- const val VERSION_NAME = "2.7.3"
+ const val VERSION_NAME = "2.7.4"
const val GROUP_ID = "com.virtusize.android"
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index cd25bcfc..3c26c048 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -16,7 +16,7 @@ material = "1.12.0"
nextPublish = "1.1.0"
robolectric = "4.13"
truth = "1.4.4"
-virtusize = "2.7.3"
+virtusize = "2.7.4"
virtusizeAuth = "1.0.6"
[libraries]
diff --git a/virtusize-core/src/main/java/com/virtusize/android/data/local/VirtusizeStoreRepository.kt b/virtusize-core/src/main/java/com/virtusize/android/data/local/VirtusizeStoreRepository.kt
new file mode 100644
index 00000000..2d0724d0
--- /dev/null
+++ b/virtusize-core/src/main/java/com/virtusize/android/data/local/VirtusizeStoreRepository.kt
@@ -0,0 +1,22 @@
+package com.virtusize.android.data.local
+
+import java.lang.UnsupportedOperationException
+
+@JvmInline
+value class StoreId(val value: Int)
+
+enum class StoreName(val value: String) {
+ UNITED_ARROWS("united_arrows"),
+}
+
+object VirtusizeStoreRepository {
+ private val storeMap: Map =
+ mapOf(
+ StoreName.UNITED_ARROWS to StoreId(99),
+ )
+
+ fun getStoreId(storeName: StoreName): StoreId = storeMap[storeName] ?: throw UnsupportedOperationException("Store name not found")
+}
+
+val StoreId?.isUnitedArrows: Boolean
+ get() = this?.value == VirtusizeStoreRepository.getStoreId(StoreName.UNITED_ARROWS).value
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 db5f6ba8..155ca0e1 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
@@ -1,12 +1,18 @@
package com.virtusize.android.data.remote
+import android.content.Context
import com.virtusize.android.data.local.SizeComparisonRecommendedSize
+import com.virtusize.android.data.local.VirtusizeLanguage
+import com.virtusize.android.data.local.isUnitedArrows
+import com.virtusize.android.network.VirtusizeApi
+import com.virtusize.android.util.ConfigurationUtils
import com.virtusize.android.util.I18nConstants
/**
* This class wraps the i18n localization texts
*/
data class I18nLocalization(
+ val language: VirtusizeLanguage?,
val defaultAccessoryText: String,
val hasProductAccessoryTopText: String,
val hasProductAccessoryBottomText: String,
@@ -16,10 +22,11 @@ data class I18nLocalization(
val oneSizeCloseBottomText: String,
val oneSizeSmallerBottomText: String,
val oneSizeLargerBottomText: String,
- val bodyProfileOneSizeText: String,
+ val oneSizeWillFitResultText: String,
val sizeComparisonMultiSizeText: String,
- val bodyProfileMultiSizeText: String,
- val defaultNoDataText: String,
+ val willFitResultText: String,
+ val willNotFitResultText: String,
+ val bodyDataEmptyText: String,
) {
enum class TrimType {
ONELINE,
@@ -61,8 +68,19 @@ data class I18nLocalization(
/**
* Gets the recommendation text for a multi-size product based on a user body profile
*/
- internal fun getMultiSizeBodyProfileText(bodyProfileRecommendedSizeName: String): String {
- return "$bodyProfileMultiSizeText ${I18nConstants.BOLD_START_PLACEHOLDER}" +
+ internal fun getMultiSizeBodyProfileText(
+ context: Context,
+ bodyProfileRecommendedSizeName: String,
+ ): String {
+ val configuredContext = ConfigurationUtils.getConfiguredContext(context, language)
+ // Override the willFitResultText for United Arrows
+ val adjustedWillFitResultText =
+ if (VirtusizeApi.currentStoreId.isUnitedArrows) {
+ configuredContext.getString(com.virtusize.android.core.R.string.inpage_will_fit_result_text_united_arrows)
+ } else {
+ willFitResultText
+ }
+ return "$adjustedWillFitResultText ${I18nConstants.BOLD_START_PLACEHOLDER}" +
"$bodyProfileRecommendedSizeName${I18nConstants.BOLD_END_PLACEHOLDER}"
}
}
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 cba1c3d8..12c27bd8 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
@@ -1,5 +1,6 @@
package com.virtusize.android.data.remote
+import android.content.Context
import com.virtusize.android.data.local.SizeComparisonRecommendedSize
import com.virtusize.android.util.dpInPx
@@ -36,6 +37,7 @@ data class Product(
* @return the InPage text
*/
fun getRecommendationText(
+ context: Context,
i18nLocalization: I18nLocalization,
sizeComparisonRecommendedSize: SizeComparisonRecommendedSize?,
bodyProfileRecommendedSizeName: String?,
@@ -44,12 +46,13 @@ data class Product(
isAccessory() -> accessoryText(i18nLocalization, sizeComparisonRecommendedSize)
sizes.size == 1 ->
oneSizeText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
)
else ->
multiSizeText(
+ context = context,
i18nLocalization,
sizeComparisonRecommendedSize,
bodyProfileRecommendedSizeName,
@@ -88,29 +91,33 @@ data class Product(
bodyProfileRecommendedSizeName: String?,
): String {
bodyProfileRecommendedSizeName?.let {
- return i18nLocalization.bodyProfileOneSizeText
+ return i18nLocalization.oneSizeWillFitResultText
}
sizeComparisonRecommendedSize?.let {
return i18nLocalization.getOneSizeProductComparisonText(it)
}
- return i18nLocalization.defaultNoDataText
+ return i18nLocalization.bodyDataEmptyText
}
/**
* Gets the text for a multi-size product
*/
private fun multiSizeText(
+ context: Context,
i18nLocalization: I18nLocalization,
sizeComparisonRecommendedSize: SizeComparisonRecommendedSize?,
bodyProfileRecommendedSizeName: String?,
): String {
bodyProfileRecommendedSizeName?.let {
- return i18nLocalization.getMultiSizeBodyProfileText(it)
+ return i18nLocalization.getMultiSizeBodyProfileText(
+ context = context,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
+ )
}
sizeComparisonRecommendedSize?.bestStoreProductSize?.name?.let {
return i18nLocalization.getMultiSizeProductComparisonText(it)
}
- return i18nLocalization.defaultNoDataText
+ return i18nLocalization.bodyDataEmptyText
}
/**
diff --git a/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApi.kt b/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApi.kt
index 8ca38dcf..37b85be3 100644
--- a/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApi.kt
+++ b/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApi.kt
@@ -3,6 +3,7 @@ package com.virtusize.android.network
import android.net.Uri
import com.virtusize.android.data.local.BodyProfileRecommendedSizeParams
import com.virtusize.android.data.local.I18N_URL
+import com.virtusize.android.data.local.StoreId
import com.virtusize.android.data.local.VirtusizeEnvironment
import com.virtusize.android.data.local.VirtusizeEvent
import com.virtusize.android.data.local.VirtusizeLanguage
@@ -49,7 +50,7 @@ data class ApiRequest(
* @param userId the user ID that is unique from the client system
*/
object VirtusizeApi {
- const val DEFAULT_AOYAMA_VERSION = "3.3.1"
+ const val DEFAULT_AOYAMA_VERSION = "3.3.6"
private var environment = VirtusizeEnvironment.GLOBAL
private lateinit var apiKey: String
@@ -57,7 +58,7 @@ object VirtusizeApi {
var currentUserId: String? = null
private set
- var currentStoreId: String? = null
+ var currentStoreId: StoreId? = null
private set
/**
@@ -80,8 +81,8 @@ object VirtusizeApi {
currentUserId = userId
}
- fun setStoreId(storeId: Int) {
- currentStoreId = storeId.toString()
+ fun setStoreId(storeId: StoreId) {
+ currentStoreId = storeId
}
/**
diff --git a/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApiTask.kt b/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApiTask.kt
index 395fc141..579c9d40 100644
--- a/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApiTask.kt
+++ b/virtusize-core/src/main/java/com/virtusize/android/network/VirtusizeApiTask.kt
@@ -97,7 +97,7 @@ class VirtusizeApiTask(
VirtusizeApi.currentStoreId?.let { storeId ->
setRequestProperty(
HEADER_VS_STORE_ID,
- storeId,
+ storeId.value.toString(),
)
}
diff --git a/virtusize-core/src/main/java/com/virtusize/android/util/ConfigurationUtils.kt b/virtusize-core/src/main/java/com/virtusize/android/util/ConfigurationUtils.kt
new file mode 100644
index 00000000..a4640004
--- /dev/null
+++ b/virtusize-core/src/main/java/com/virtusize/android/util/ConfigurationUtils.kt
@@ -0,0 +1,55 @@
+package com.virtusize.android.util
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.os.Build
+import android.os.LocaleList
+import com.virtusize.android.data.local.VirtusizeLanguage
+import java.util.Locale
+
+object ConfigurationUtils {
+ // The context wrapper that is configured to a designated locale
+ class ConfiguredContext(base: Context?) : ContextWrapper(base)
+
+ /**
+ * Gets the ContextWrapper that is switched to a designated locale
+ * @param context the base application Context
+ * @param locale the locale to switch to
+ */
+ private fun configureLocale(
+ context: Context,
+ locale: Locale?,
+ ): ContextWrapper {
+ var updatedContext = context
+ val resources = context.resources
+ val configuration = resources.configuration
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ val localeList = LocaleList(locale)
+ LocaleList.setDefault(localeList)
+ configuration.setLocales(localeList)
+ } else {
+ configuration.locale = locale
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
+ updatedContext = context.createConfigurationContext(configuration)
+ } else {
+ resources.updateConfiguration(configuration, resources.displayMetrics)
+ }
+ return ConfiguredContext(updatedContext)
+ }
+
+ /**
+ * Gets configured context base on the language that clients set up with the Virtusize Builder in the application
+ */
+ fun getConfiguredContext(
+ context: Context,
+ language: VirtusizeLanguage?,
+ ): ContextWrapper {
+ return when (language) {
+ VirtusizeLanguage.EN -> configureLocale(context, Locale.ENGLISH)
+ VirtusizeLanguage.JP -> configureLocale(context, Locale.JAPAN)
+ VirtusizeLanguage.KR -> configureLocale(context, Locale.KOREA)
+ else -> configureLocale(context, Locale.getDefault())
+ }
+ }
+}
diff --git a/virtusize-core/src/main/res/values-ja/strings.xml b/virtusize-core/src/main/res/values-ja/strings.xml
index f62c73e1..708c4f88 100644
--- a/virtusize-core/src/main/res/values-ja/strings.xml
+++ b/virtusize-core/src/main/res/values-ja/strings.xml
@@ -1,5 +1,5 @@
- 日用品と比較する
+ サイズ感を確認する
あなたのアイテムと
大きさを比較
持っている服と
@@ -8,8 +8,9 @@
近いサイズ感です
小さめです
大きめです
- あなたの体で\nサイズを簡単チェック
- あなたのアイテムに近いサイズ
- あなたにおすすめのサイズ
- 購入前に簡単サイズチェック
+ あなたにフィットします
+ あなたの服に近いサイズ
+ あなたにフィットするサイズ
+ 試着をおすすめします
+ 簡単サイズチェック
\ No newline at end of file
diff --git a/virtusize-core/src/main/res/values-ja/united_arrows.xml b/virtusize-core/src/main/res/values-ja/united_arrows.xml
new file mode 100644
index 00000000..39417d28
--- /dev/null
+++ b/virtusize-core/src/main/res/values-ja/united_arrows.xml
@@ -0,0 +1,4 @@
+
+
+ あなたの体型に人気のサイズ
+
\ No newline at end of file
diff --git a/virtusize-core/src/main/res/values-ko/strings.xml b/virtusize-core/src/main/res/values-ko/strings.xml
index 06441c84..f54f0fe8 100644
--- a/virtusize-core/src/main/res/values-ko/strings.xml
+++ b/virtusize-core/src/main/res/values-ko/strings.xml
@@ -8,8 +8,9 @@
당신의 상품과 유사합니다
작습니다
큽니다
- 입어보고 당신의 사이즈를 찾아보세요.
+ 당신에게 잘 맞는 핏입니다
가장 유사한 상품은
- 추천하는 사이즈는
- 구매 전에 당신에게 맞는 사이즈를 찾아보세요.
+ 추천하는 사이즈는
+ 당신에게 잘 맞는지 확인해 보세요
+ 당신에게 맞는 사이즈를 찾아보세요
\ No newline at end of file
diff --git a/virtusize-core/src/main/res/values-ko/united_arrows.xml b/virtusize-core/src/main/res/values-ko/united_arrows.xml
new file mode 100644
index 00000000..cd859961
--- /dev/null
+++ b/virtusize-core/src/main/res/values-ko/united_arrows.xml
@@ -0,0 +1,4 @@
+
+
+ 추천하는 사이즈는
+
\ No newline at end of file
diff --git a/virtusize-core/src/main/res/values/strings.xml b/virtusize-core/src/main/res/values/strings.xml
index ff3da13f..7dcc9b81 100644
--- a/virtusize-core/src/main/res/values/strings.xml
+++ b/virtusize-core/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- See how everyday items fit
+ See what fits inside
See the size difference from
your own item
This item size is
@@ -8,8 +8,9 @@
close to your item
smaller than your item
larger than your item
- Try it on and find your size
+ This item should fit you
The closest size to your item is
- Your recommended size is
- Find the right size before purchasing
+ Your recommended size is
+ Check how it fits you
+ Find your right size
\ No newline at end of file
diff --git a/virtusize-core/src/main/res/values/united_arrows.xml b/virtusize-core/src/main/res/values/united_arrows.xml
new file mode 100644
index 00000000..f5f2cdfb
--- /dev/null
+++ b/virtusize-core/src/main/res/values/united_arrows.xml
@@ -0,0 +1,4 @@
+
+
+ Your recommended size is
+
\ No newline at end of file
diff --git a/virtusize-core/src/test/java/com/virtusize/android/data/remote/ProductTest.kt b/virtusize-core/src/test/java/com/virtusize/android/data/remote/ProductTest.kt
index 7e5aafea..9871a9ea 100644
--- a/virtusize-core/src/test/java/com/virtusize/android/data/remote/ProductTest.kt
+++ b/virtusize-core/src/test/java/com/virtusize/android/data/remote/ProductTest.kt
@@ -6,6 +6,7 @@ import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import com.virtusize.android.core.R
import com.virtusize.android.data.local.SizeComparisonRecommendedSize
+import com.virtusize.android.data.local.VirtusizeLanguage
import com.virtusize.android.fixtures.ProductFixtures
import org.junit.Before
import org.junit.Test
@@ -26,19 +27,21 @@ class ProductTest {
fun setup() {
i18nLocalization =
I18nLocalization(
- context.getString(R.string.inpage_default_accessory_text),
- context.getString(R.string.inpage_has_product_top_text),
- context.getString(R.string.inpage_has_product_bottom_text),
- context.getString(R.string.inpage_one_size_close_top_text),
- context.getString(R.string.inpage_one_size_smaller_top_text),
- context.getString(R.string.inpage_one_size_larger_top_text),
- context.getString(R.string.inpage_one_size_close_bottom_text),
- context.getString(R.string.inpage_one_size_smaller_bottom_text),
- context.getString(R.string.inpage_one_size_larger_bottom_text),
- context.getString(R.string.inpage_one_size_body_profile_text),
- context.getString(R.string.inpage_multi_size_comparison_text),
- context.getString(R.string.inpage_multi_size_body_profile_text),
- context.getString(R.string.inpage_no_data_text),
+ language = VirtusizeLanguage.EN,
+ defaultAccessoryText = context.getString(R.string.inpage_default_accessory_text),
+ hasProductAccessoryTopText = context.getString(R.string.inpage_has_product_top_text),
+ hasProductAccessoryBottomText = context.getString(R.string.inpage_has_product_bottom_text),
+ oneSizeCloseTopText = context.getString(R.string.inpage_one_size_close_top_text),
+ oneSizeSmallerTopText = context.getString(R.string.inpage_one_size_smaller_top_text),
+ oneSizeLargerTopText = context.getString(R.string.inpage_one_size_larger_top_text),
+ oneSizeCloseBottomText = context.getString(R.string.inpage_one_size_close_bottom_text),
+ oneSizeSmallerBottomText = context.getString(R.string.inpage_one_size_smaller_bottom_text),
+ oneSizeLargerBottomText = context.getString(R.string.inpage_one_size_larger_bottom_text),
+ oneSizeWillFitResultText = context.getString(R.string.inpage_one_size_will_fit_result_text),
+ sizeComparisonMultiSizeText = context.getString(R.string.inpage_multi_size_comparison_text),
+ willFitResultText = context.getString(R.string.inpage_will_fit_result_text),
+ willNotFitResultText = context.getString(R.string.inpage_will_not_fit_result_text),
+ bodyDataEmptyText = context.getString(R.string.inpage_body_data_empty_text),
)
}
@@ -47,30 +50,34 @@ class ProductTest {
val defaultAccessoryText = context.getString(R.string.inpage_default_accessory_text)
assertThat(
ProductFixtures.storeProduct(18).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).isEqualTo(defaultAccessoryText)
assertThat(
ProductFixtures.storeProduct(19).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).isEqualTo(defaultAccessoryText)
assertThat(
ProductFixtures.storeProduct(25).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).isEqualTo(defaultAccessoryText)
assertThat(
ProductFixtures.storeProduct(26).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).isEqualTo(defaultAccessoryText)
}
@@ -83,30 +90,34 @@ class ProductTest {
val hasProductAccessoryTopText = context.getString(R.string.inpage_has_product_top_text)
assertThat(
ProductFixtures.storeProduct(18).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(hasProductAccessoryTopText)
assertThat(
ProductFixtures.storeProduct(19).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(hasProductAccessoryTopText)
assertThat(
ProductFixtures.storeProduct(25).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(hasProductAccessoryTopText)
assertThat(
ProductFixtures.storeProduct(26).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(hasProductAccessoryTopText)
}
@@ -123,9 +134,10 @@ class ProductTest {
ProductSize("FREE", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(oneSizeCloseTopText)
}
@@ -142,9 +154,10 @@ class ProductTest {
ProductSize("FREE", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(oneSizeSmallerTopText)
}
@@ -162,9 +175,10 @@ class ProductTest {
ProductSize("FREE", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(oneSizeLargerTopText)
}
@@ -172,7 +186,7 @@ class ProductTest {
@Test
fun getRecText_oneSizeProduct_onlyHasBodyProfileRecommendedSize_returnOneSizeBodyProfileText() {
bodyProfileRecommendedSizeName = "Small"
- val oneSizeBodyProfileText = context.getString(R.string.inpage_one_size_body_profile_text)
+ val oneSizeBodyProfileText = context.getString(R.string.inpage_one_size_will_fit_result_text)
assertThat(
ProductFixtures.storeProduct(
sizeList =
@@ -180,9 +194,10 @@ class ProductTest {
ProductSize("FREE", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(oneSizeBodyProfileText)
}
@@ -207,9 +222,10 @@ class ProductTest {
ProductSize("M", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(multiSizeComparisonText)
}
@@ -218,7 +234,7 @@ class ProductTest {
fun getRecText_multiSizeProduct_hasBodyProfileRecommendedSize_returnMultiSizeBodyProfileText() {
bodyProfileRecommendedSizeName = "S"
val multiSizeBodyProfileText =
- context.getString(R.string.inpage_multi_size_body_profile_text)
+ context.getString(R.string.inpage_will_fit_result_text)
assertThat(
ProductFixtures.storeProduct(
sizeList =
@@ -227,16 +243,17 @@ class ProductTest {
ProductSize("M", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
).contains(multiSizeBodyProfileText)
}
@Test
- fun getRecommendationText_multiSizeProduct_noRecommendedSizes_returnNoDataText() {
- val noDataText = context.getString(R.string.inpage_no_data_text)
+ fun getRecommendationText_multiSizeProduct_noRecommendedSizes_returnBodyDataEmptyText() {
+ val bodyDataEmptyText = context.getString(R.string.inpage_body_data_empty_text)
assertThat(
ProductFixtures.storeProduct(
sizeList =
@@ -245,36 +262,40 @@ class ProductTest {
ProductSize("M", mutableSetOf()),
),
).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
- ).contains(noDataText)
+ ).contains(bodyDataEmptyText)
}
@Test
- fun getRecommendationText_productIsNotAnAccessory_returnNoDataText() {
- val noDataText = context.getString(R.string.inpage_no_data_text)
+ fun getRecommendationText_productIsNotAnAccessory_returnBodyDataEmptyText() {
+ val bodyDataEmptyText = context.getString(R.string.inpage_body_data_empty_text)
assertThat(
ProductFixtures.storeProduct(4).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
- ).isEqualTo(noDataText)
+ ).isEqualTo(bodyDataEmptyText)
assertThat(
ProductFixtures.storeProduct(7).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
- ).isEqualTo(noDataText)
+ ).isEqualTo(bodyDataEmptyText)
assertThat(
ProductFixtures.storeProduct(15).getRecommendationText(
- i18nLocalization,
- sizeComparisonRecommendedSize,
- bodyProfileRecommendedSizeName,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = sizeComparisonRecommendedSize,
+ bodyProfileRecommendedSizeName = bodyProfileRecommendedSizeName,
),
- ).isEqualTo(noDataText)
+ ).isEqualTo(bodyDataEmptyText)
}
}
diff --git a/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt b/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt
index f08c0767..ca69df67 100644
--- a/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt
+++ b/virtusize/src/main/java/com/virtusize/android/VirtusizeImpl.kt
@@ -235,9 +235,10 @@ internal class VirtusizeImpl(
}
val recommendationText =
getRecommendationText(
- i18nLocalization,
- userProductRecommendedSize,
- userBodyRecommendedSize,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = userProductRecommendedSize,
+ bodyProfileRecommendedSizeName = userBodyRecommendedSize,
).trimI18nText(trimType)
virtusizeView.setRecommendationText(
externalProductId,
diff --git a/virtusize/src/main/java/com/virtusize/android/data/local/VirtusizeStoreRepository.kt b/virtusize/src/main/java/com/virtusize/android/data/local/VirtusizeStoreRepository.kt
deleted file mode 100644
index d5aa2059..00000000
--- a/virtusize/src/main/java/com/virtusize/android/data/local/VirtusizeStoreRepository.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.virtusize.android.data.local
-
-internal typealias StoreId = Int
-
-internal enum class StoreName(val value: String) {
- UNITED_ARROWS("united_arrows"),
-}
-
-internal class VirtusizeStoreRepository {
- private val storeMap: Map =
- mapOf(
- StoreName.UNITED_ARROWS to 99,
- )
-
- fun getStoreId(storeName: StoreName): StoreId? {
- return storeMap[storeName]
- }
-}
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 fd780221..a854bb30 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
@@ -1,10 +1,9 @@
package com.virtusize.android.data.parsers
import android.content.Context
-import com.virtusize.android.R
import com.virtusize.android.data.local.VirtusizeLanguage
import com.virtusize.android.data.remote.I18nLocalization
-import com.virtusize.android.util.VirtusizeUtils
+import com.virtusize.android.util.ConfigurationUtils
import org.json.JSONObject
/**
@@ -15,134 +14,139 @@ internal class I18nLocalizationJsonParser(
private val virtusizeLanguage: VirtusizeLanguage?,
) : VirtusizeJsonParser {
override fun parse(json: JSONObject): I18nLocalization {
- val aoyamaJSONObject =
- json.optJSONObject(FIELD_KEYS)
- ?.optJSONObject(FIELD_APPS)
- ?.optJSONObject(FIELD_AOYAMA)
+ val aoyamaJSONObject = json.optJSONObject(FIELD_KEYS)?.optJSONObject(FIELD_APPS)?.optJSONObject(FIELD_AOYAMA)
val inpageJSONObject = aoyamaJSONObject?.optJSONObject(FIELD_INPAGE)
val oneSizeJSONObject = inpageJSONObject?.optJSONObject(FIELD_ONE_SIZE)
val multiSizeJSONObject = inpageJSONObject?.optJSONObject(FIELD_MULTI_SIZE)
val accessoryJSONObject = inpageJSONObject?.optJSONObject(FIELD_ACCESSORY)
- val configuredContext = VirtusizeUtils.getConfiguredContext(context, virtusizeLanguage)
+ val configuredContext = ConfigurationUtils.getConfiguredContext(context, virtusizeLanguage)
val defaultAccessoryText =
inpageJSONObject?.optString(
FIELD_DEFAULT_ACCESSORY_TEXT,
- configuredContext?.getString(
- com.virtusize.android.core.R.string.inpage_default_accessory_text,
- ) ?: "",
- ) ?: ""
+ configuredContext.getString(com.virtusize.android.core.R.string.inpage_default_accessory_text),
+ )?.trim().orEmpty()
val hasProductAccessoryTopText =
accessoryJSONObject?.optString(
FIELD_HAS_PRODUCT_LEAD,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_has_product_top_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val hasProductAccessoryBottomText =
accessoryJSONObject?.optString(
FIELD_HAS_PRODUCT,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_has_product_bottom_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val oneSizeCloseTopText =
oneSizeJSONObject?.optString(
FIELD_CLOSE_LEAD,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_one_size_close_top_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val oneSizeSmallerTopText =
oneSizeJSONObject?.optString(
FIELD_SMALLER_LEAD,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_one_size_smaller_top_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val oneSizeLargerTopText =
oneSizeJSONObject?.optString(
FIELD_LARGER_LEAD,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_one_size_larger_top_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val oneSizeCloseBottomText =
oneSizeJSONObject?.optString(
FIELD_CLOSE,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_one_size_close_bottom_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val oneSizeSmallerBottomText =
oneSizeJSONObject?.optString(
FIELD_SMALLER,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_one_size_smaller_bottom_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
val oneSizeLargerBottomText =
oneSizeJSONObject?.optString(
FIELD_LARGER,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_one_size_larger_bottom_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
- val bodyProfileOneSizeText =
- oneSizeJSONObject?.optString(
- FIELD_BODY_PROFILE,
- configuredContext?.getString(
- com.virtusize.android.core.R.string.inpage_one_size_body_profile_text,
- ) ?: "",
- ) ?: ""
+ val oneSizeWillFitResultText =
+ inpageJSONObject?.optString(
+ FIELD_ONE_SIZE_WILL_FIT_RESULT,
+ configuredContext.getString(
+ com.virtusize.android.core.R.string.inpage_one_size_will_fit_result_text,
+ ),
+ )?.trim().orEmpty()
val sizeComparisonMultiSizeText =
multiSizeJSONObject?.optString(
FIELD_SIZE_COMPARISON,
- configuredContext?.getString(
+ configuredContext.getString(
com.virtusize.android.core.R.string.inpage_multi_size_comparison_text,
- ) ?: "",
- ) ?: ""
+ ),
+ )?.trim().orEmpty()
- val bodyProfileMultiSizeText =
- multiSizeJSONObject?.optString(
- FIELD_BODY_PROFILE,
- configuredContext?.getString(
- com.virtusize.android.core.R.string.inpage_multi_size_body_profile_text,
- ) ?: "",
- ) ?: ""
+ val willFitResultText =
+ inpageJSONObject?.optString(
+ FIELD_WILL_FIT_RESULT,
+ configuredContext.getString(
+ com.virtusize.android.core.R.string.inpage_will_fit_result_text,
+ ),
+ )?.trim().orEmpty()
+
+ val willNotFitResultText =
+ inpageJSONObject?.optString(
+ FIELD_WILL_NOT_FIT_RESULT,
+ configuredContext.getString(
+ com.virtusize.android.core.R.string.inpage_will_not_fit_result_text,
+ ),
+ )?.trim().orEmpty()
- val defaultNoDataText =
+ val bodyDataEmptyText =
inpageJSONObject?.optString(
- FIELD_NO_DATA_TEXT,
- configuredContext?.getString(
- com.virtusize.android.core.R.string.inpage_no_data_text,
- ) ?: "",
- ) ?: ""
+ FIELD_BODY_DATA_EMPTY,
+ configuredContext.getString(
+ com.virtusize.android.core.R.string.inpage_body_data_empty_text,
+ ),
+ )?.trim().orEmpty()
return I18nLocalization(
- defaultAccessoryText,
- hasProductAccessoryTopText,
- hasProductAccessoryBottomText,
- oneSizeCloseTopText,
- oneSizeSmallerTopText,
- oneSizeLargerTopText,
- oneSizeCloseBottomText,
- oneSizeSmallerBottomText,
- oneSizeLargerBottomText,
- bodyProfileOneSizeText,
- sizeComparisonMultiSizeText,
- bodyProfileMultiSizeText,
- defaultNoDataText,
+ language = virtusizeLanguage,
+ defaultAccessoryText = defaultAccessoryText,
+ hasProductAccessoryTopText = hasProductAccessoryTopText,
+ hasProductAccessoryBottomText = hasProductAccessoryBottomText,
+ oneSizeCloseTopText = oneSizeCloseTopText,
+ oneSizeSmallerTopText = oneSizeSmallerTopText,
+ oneSizeLargerTopText = oneSizeLargerTopText,
+ oneSizeCloseBottomText = oneSizeCloseBottomText,
+ oneSizeSmallerBottomText = oneSizeSmallerBottomText,
+ oneSizeLargerBottomText = oneSizeLargerBottomText,
+ oneSizeWillFitResultText = oneSizeWillFitResultText,
+ sizeComparisonMultiSizeText = sizeComparisonMultiSizeText,
+ willFitResultText = willFitResultText,
+ willNotFitResultText = willNotFitResultText,
+ bodyDataEmptyText = bodyDataEmptyText,
)
}
@@ -162,9 +166,11 @@ internal class I18nLocalizationJsonParser(
private const val FIELD_CLOSE_LEAD = "closeLead"
private const val FIELD_SMALLER_LEAD = "smallerLead"
private const val FIELD_LARGER_LEAD = "largerLead"
- private const val FIELD_BODY_PROFILE = "bodyProfile"
+ private const val FIELD_ONE_SIZE_WILL_FIT_RESULT = "oneSizeWillFitResult"
+ private const val FIELD_WILL_FIT_RESULT = "willFitResult"
+ private const val FIELD_WILL_NOT_FIT_RESULT = "willNotFitResult"
private const val FIELD_SIZE_COMPARISON = "sizeComparison"
private const val FIELD_DEFAULT_ACCESSORY_TEXT = "defaultAccessoryText"
- private const val FIELD_NO_DATA_TEXT = "noDataText"
+ private const val FIELD_BODY_DATA_EMPTY = "bodydataEmpty"
}
}
diff --git a/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterUtils.kt b/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterUtils.kt
index 820a8bde..dc412e8f 100644
--- a/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterUtils.kt
+++ b/virtusize/src/main/java/com/virtusize/android/flutter/VirtusizeFlutterUtils.kt
@@ -13,6 +13,7 @@ import com.virtusize.android.data.remote.BodyProfileRecommendedSize
import com.virtusize.android.data.remote.I18nLocalization
import com.virtusize.android.data.remote.Product
import com.virtusize.android.data.remote.ProductType
+import com.virtusize.android.util.ConfigurationUtils
import com.virtusize.android.util.VirtusizeUtils
import com.virtusize.android.util.trimI18nText
@@ -50,6 +51,7 @@ object VirtusizeFlutterUtils {
}
fun getRecommendationText(
+ context: Context,
selectedRecommendedType: SizeRecommendationType? = null,
storeProduct: Product,
userProductRecommendedSize: SizeComparisonRecommendedSize?,
@@ -63,9 +65,10 @@ object VirtusizeFlutterUtils {
}
return storeProduct.getRecommendationText(
- i18nLocalization,
- userProductRecommendedSize,
- userBodyRecommendedSize,
+ context = context,
+ i18nLocalization = i18nLocalization,
+ sizeComparisonRecommendedSize = userProductRecommendedSize,
+ bodyProfileRecommendedSizeName = userBodyRecommendedSize,
).trimI18nText(I18nLocalization.TrimType.MULTIPLELINES)
}
@@ -74,10 +77,10 @@ object VirtusizeFlutterUtils {
language: VirtusizeLanguage?,
): String? {
val configuredContext =
- VirtusizeUtils.getConfiguredContext(
+ ConfigurationUtils.getConfiguredContext(
context,
language,
)
- return configuredContext?.getString(R.string.virtusize_privacy_policy_link)
+ return configuredContext.getString(R.string.virtusize_privacy_policy_link)
}
}
diff --git a/virtusize/src/main/java/com/virtusize/android/network/VirtusizeAPIService.kt b/virtusize/src/main/java/com/virtusize/android/network/VirtusizeAPIService.kt
index bd662edd..3ebde3ed 100644
--- a/virtusize/src/main/java/com/virtusize/android/network/VirtusizeAPIService.kt
+++ b/virtusize/src/main/java/com/virtusize/android/network/VirtusizeAPIService.kt
@@ -8,6 +8,7 @@ import android.view.WindowManager
import com.virtusize.android.BuildConfig
import com.virtusize.android.R
import com.virtusize.android.SharedPreferencesHelper
+import com.virtusize.android.data.local.StoreId
import com.virtusize.android.data.local.VirtusizeErrorType
import com.virtusize.android.data.local.VirtusizeEvent
import com.virtusize.android.data.local.VirtusizeLanguage
@@ -126,7 +127,7 @@ internal class VirtusizeAPIService(
.also { response ->
val storeId = response.successData?.data?.storeId
if (storeId != null) {
- VirtusizeApi.setStoreId(storeId)
+ VirtusizeApi.setStoreId(StoreId(storeId))
}
}
}
@@ -357,7 +358,7 @@ internal class VirtusizeAPIService(
/**
* Gets the API response for fetching the i18n localization texts
- * @param params [VirtusizeParams] to get the language that is set by a client
+ * @param language [VirtusizeLanguage] that is set by a client
* @return the [VirtusizeApiResponse] with the data class [I18nLocalization]
*/
internal suspend fun getI18n(language: VirtusizeLanguage?): VirtusizeApiResponse =
@@ -365,7 +366,7 @@ internal class VirtusizeAPIService(
val apiRequest =
VirtusizeApi.getI18n(
language ?: (
- VirtusizeLanguage.values()
+ VirtusizeLanguage.entries
.find { it.value == Locale.getDefault().language } ?: VirtusizeLanguage.EN
),
)
diff --git a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeButton.kt b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeButton.kt
index 16b85fbd..68149aa2 100644
--- a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeButton.kt
+++ b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeButton.kt
@@ -12,7 +12,7 @@ import com.virtusize.android.data.local.VirtusizeMessageHandler
import com.virtusize.android.data.local.VirtusizeParams
import com.virtusize.android.data.local.VirtusizeProduct
import com.virtusize.android.data.local.VirtusizeViewStyle
-import com.virtusize.android.util.VirtusizeUtils
+import com.virtusize.android.util.ConfigurationUtils
class VirtusizeButton
@JvmOverloads
@@ -138,10 +138,10 @@ class VirtusizeButton
*/
private fun setupButtonTextConfiguredLocalization() {
val configuredContext =
- VirtusizeUtils.getConfiguredContext(context, virtusizeParams.language)
+ ConfigurationUtils.getConfiguredContext(context, virtusizeParams.language)
if (text.isNullOrEmpty()) {
- text = configuredContext?.getText(R.string.virtusize_button_text)
- configuredContext?.resources?.getDimension(R.dimen.virtusize_button_textSize)?.let {
+ text = configuredContext.getText(R.string.virtusize_button_text)
+ configuredContext.resources?.getDimension(R.dimen.virtusize_button_textSize)?.let {
setTextSize(TypedValue.COMPLEX_UNIT_PX, it)
}
}
diff --git a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageMini.kt b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageMini.kt
index 29c42d76..551255bc 100644
--- a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageMini.kt
+++ b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageMini.kt
@@ -16,8 +16,8 @@ import com.virtusize.android.data.local.VirtusizeParams
import com.virtusize.android.data.local.VirtusizeProduct
import com.virtusize.android.data.local.VirtusizeViewStyle
import com.virtusize.android.databinding.ViewInpageMiniBinding
+import com.virtusize.android.util.ConfigurationUtils
import com.virtusize.android.util.FontUtils
-import com.virtusize.android.util.VirtusizeUtils
import com.virtusize.android.util.rightDrawable
import com.virtusize.android.util.spToPx
@@ -259,7 +259,7 @@ class VirtusizeInPageMini
FontUtils.FontType.REGULAR,
)
configuredContext =
- VirtusizeUtils.getConfiguredContext(
+ ConfigurationUtils.getConfiguredContext(
context,
virtusizeParams.language,
)
diff --git a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageStandard.kt b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageStandard.kt
index ffcb4a61..c41e6d85 100644
--- a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageStandard.kt
+++ b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeInPageStandard.kt
@@ -31,8 +31,8 @@ import com.virtusize.android.data.local.VirtusizeViewStyle
import com.virtusize.android.data.local.virtusizeError
import com.virtusize.android.data.remote.Product
import com.virtusize.android.databinding.ViewInpageStandardBinding
+import com.virtusize.android.util.ConfigurationUtils
import com.virtusize.android.util.FontUtils
-import com.virtusize.android.util.VirtusizeUtils
import com.virtusize.android.util.dpInPx
import com.virtusize.android.util.onSizeChanged
import com.virtusize.android.util.rightDrawable
@@ -548,19 +548,19 @@ class VirtusizeInPageStandard
)
val configuredContext =
- VirtusizeUtils.getConfiguredContext(
+ ConfigurationUtils.getConfiguredContext(
context,
virtusizeParams.language,
)
- binding.inpageButton.text = configuredContext?.getText(R.string.virtusize_button_text)
+ binding.inpageButton.text = configuredContext.getText(R.string.virtusize_button_text)
binding.privacyPolicyText.text =
- configuredContext?.getText(R.string.virtusize_privacy_policy)
+ configuredContext.getText(R.string.virtusize_privacy_policy)
binding.inpageLoadingText.text =
- configuredContext?.getText(
+ configuredContext.getText(
R.string.inpage_loading_text,
)
binding.inpageErrorText.text =
- configuredContext?.getText(
+ configuredContext.getText(
R.string.inpage_long_error_text,
)
@@ -575,7 +575,7 @@ class VirtusizeInPageStandard
Intent(
Intent.ACTION_VIEW,
Uri.parse(
- configuredContext?.getString(R.string.virtusize_privacy_policy_link),
+ configuredContext.getString(R.string.virtusize_privacy_policy_link),
),
)
try {
diff --git a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeWebViewFragment.kt b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeWebViewFragment.kt
index 22adef66..71b389d6 100644
--- a/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeWebViewFragment.kt
+++ b/virtusize/src/main/java/com/virtusize/android/ui/VirtusizeWebViewFragment.kt
@@ -26,11 +26,11 @@ import com.virtusize.android.R
import com.virtusize.android.SharedPreferencesHelper
import com.virtusize.android.auth.VirtusizeAuth
import com.virtusize.android.auth.utils.VirtusizeURLCheck
-import com.virtusize.android.data.local.StoreName
+import com.virtusize.android.data.local.StoreId
import com.virtusize.android.data.local.VirtusizeEvent
import com.virtusize.android.data.local.VirtusizeMessageHandler
import com.virtusize.android.data.local.VirtusizeProduct
-import com.virtusize.android.data.local.VirtusizeStoreRepository
+import com.virtusize.android.data.local.isUnitedArrows
import com.virtusize.android.data.parsers.VirtusizeEventJsonParser
import com.virtusize.android.databinding.FragmentVirtusizeWebviewBinding
import com.virtusize.android.network.VirtusizeAPIService
@@ -53,8 +53,6 @@ class VirtusizeWebViewFragment : DialogFragment() {
VirtusizeAPIService.getInstance(requireContext(), virtusizeMessageHandler)
}
- private val storeRepository by lazy { VirtusizeStoreRepository() }
-
private lateinit var clientProduct: VirtusizeProduct
private lateinit var sharedPreferencesHelper: SharedPreferencesHelper
@@ -232,7 +230,7 @@ class VirtusizeWebViewFragment : DialogFragment() {
val productStoreId = clientProduct.productCheckData?.data?.storeId
when {
- productStoreId == storeRepository.getStoreId(StoreName.UNITED_ARROWS) -> {
+ productStoreId != null && StoreId(productStoreId).isUnitedArrows -> {
virtusizeWebAppUrl = VirtusizeApi.getVirtusizeWebViewURLForSpecificClients()
binding.webView.loadUrl(virtusizeWebAppUrl)
}
diff --git a/virtusize/src/main/java/com/virtusize/android/util/VirtusizeUtils.kt b/virtusize/src/main/java/com/virtusize/android/util/VirtusizeUtils.kt
index cd47769c..9c333ac9 100644
--- a/virtusize/src/main/java/com/virtusize/android/util/VirtusizeUtils.kt
+++ b/virtusize/src/main/java/com/virtusize/android/util/VirtusizeUtils.kt
@@ -1,14 +1,10 @@
package com.virtusize.android.util
import android.content.Context
-import android.content.ContextWrapper
import android.content.Intent
-import android.os.Build
import android.os.Bundle
-import android.os.LocaleList
import com.virtusize.android.data.local.ProductComparisonFitInfo
import com.virtusize.android.data.local.SizeComparisonRecommendedSize
-import com.virtusize.android.data.local.VirtusizeLanguage
import com.virtusize.android.data.local.VirtusizeMessageHandler
import com.virtusize.android.data.local.VirtusizeParams
import com.virtusize.android.data.local.VirtusizeProduct
@@ -18,56 +14,10 @@ import com.virtusize.android.data.remote.ProductSize
import com.virtusize.android.data.remote.ProductType
import com.virtusize.android.data.remote.Weight
import com.virtusize.android.ui.VirtusizeWebViewActivity
-import java.util.Locale
import kotlin.math.abs
// The object that wraps Virtusize utility functions
internal object VirtusizeUtils {
- // The context wrapper that is configured to a designated locale
- class ConfiguredContext(base: Context?) : ContextWrapper(base)
-
- /**
- * Gets the ContextWrapper that is switched to a designated locale
- * @param context the base application Context
- * @param locale the locale to switch to
- */
- private fun configureLocale(
- context: Context,
- locale: Locale?,
- ): ContextWrapper {
- var updatedContext = context
- val resources = context.resources
- val configuration = resources.configuration
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- val localeList = LocaleList(locale)
- LocaleList.setDefault(localeList)
- configuration.setLocales(localeList)
- } else {
- configuration.locale = locale
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
- updatedContext = context.createConfigurationContext(configuration)
- } else {
- resources.updateConfiguration(configuration, resources.displayMetrics)
- }
- return ConfiguredContext(updatedContext)
- }
-
- /**
- * Gets configured context base on the language that clients set up with the Virtusize Builder in the application
- */
- fun getConfiguredContext(
- context: Context,
- language: VirtusizeLanguage?,
- ): ContextWrapper {
- return when (language) {
- VirtusizeLanguage.EN -> configureLocale(context, Locale.ENGLISH)
- VirtusizeLanguage.JP -> configureLocale(context, Locale.JAPAN)
- VirtusizeLanguage.KR -> configureLocale(context, Locale.KOREA)
- else -> configureLocale(context, Locale.getDefault())
- }
- }
-
/**
* Finds the size of the best fit product by comparing user products with the store product
* @param userProducts the list of user products
diff --git a/virtusize/src/main/res/layout/view_inpage_mini.xml b/virtusize/src/main/res/layout/view_inpage_mini.xml
index 6da65947..b3497e60 100644
--- a/virtusize/src/main/res/layout/view_inpage_mini.xml
+++ b/virtusize/src/main/res/layout/view_inpage_mini.xml
@@ -32,7 +32,7 @@
android:layout_toEndOf="@+id/inpageMiniImageView"
android:layout_toRightOf="@+id/inpageMiniImageView"
android:textColor="@color/virtusizeWhite"
- tools:text="@string/inpage_no_data_text" />
+ tools:text="@string/inpage_body_data_empty_text" />