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 | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![InPageStandardTeal](https://user-images.githubusercontent.com/7802052/92672035-b9e6cd00-f352-11ea-9e9e-5385a19e96da.png) | ![InPageStandardBlack](https://user-images.githubusercontent.com/7802052/92672031-b81d0980-f352-11ea-8b7a-564dd6c2a7f1.png) | - ##### 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 + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399368-5e879300-1930-11eb-8b77-b49e06813550.png) | ![2 thumbnails + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399370-5f202980-1930-11eb-9a2d-7b71714aa7b4.png) | | **1 thumbnail + 1 line of message** | **2 animated thumbnails + 2 lines of message** | | ![1 thumbnail + 1 line of message](https://user-images.githubusercontent.com/7802052/97399373-5f202980-1930-11eb-81fe-9946b656eb4c.png) | ![2 animated thumbnails + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399355-59c2df00-1930-11eb-8a52-292956b8762d.gif) | @@ -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 | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![InPageMiniTeal](https://user-images.githubusercontent.com/7802052/92672234-2d88da00-f353-11ea-99d9-b9e9b6aa5620.png) | ![InPageMiniBlack](https://user-images.githubusercontent.com/7802052/92672232-2c57ad00-f353-11ea-80f6-55a9c72fb0b5.png) | - ##### 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 | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![InPageStandardTeal](https://user-images.githubusercontent.com/7802052/92672035-b9e6cd00-f352-11ea-9e9e-5385a19e96da.png) | ![InPageStandardBlack](https://user-images.githubusercontent.com/7802052/92672031-b81d0980-f352-11ea-8b7a-564dd6c2a7f1.png) | - ##### レイアウトのバリエーション @@ -529,7 +529,7 @@ Virtusize SDKには2種類のInPageがあります。 設定可能なレイアウト例 | 1 thumbnail + 2 lines of message | 2 thumbnails + 2 lines of message | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![1 thumbnail + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399368-5e879300-1930-11eb-8b77-b49e06813550.png) | ![2 thumbnails + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399370-5f202980-1930-11eb-9a2d-7b71714aa7b4.png) | | **1 thumbnail + 1 line of message** | **2 animated thumbnails + 2 lines of message** | | ![1 thumbnail + 1 line of message](https://user-images.githubusercontent.com/7802052/97399373-5f202980-1930-11eb-81fe-9946b656eb4c.png) | ![2 animated thumbnails + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399355-59c2df00-1930-11eb-8a52-292956b8762d.gif) | @@ -643,13 +643,13 @@ Virtusize SDKには2種類のInPageがあります。 2種類のでフォルトデザインを用意しています。 | Teal Theme | Black Theme | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![InPageMiniTeal](https://user-images.githubusercontent.com/7802052/92672234-2d88da00-f353-11ea-99d9-b9e9b6aa5620.png) | ![InPageMiniBlack](https://user-images.githubusercontent.com/7802052/92672232-2c57ad00-f353-11ea-80f6-55a9c72fb0b5.png) | - ##### 推奨設置箇所 | 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 | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![InPageStandardTeal](https://user-images.githubusercontent.com/7802052/92672035-b9e6cd00-f352-11ea-9e9e-5385a19e96da.png) | ![InPageStandardBlack](https://user-images.githubusercontent.com/7802052/92672031-b81d0980-f352-11ea-8b7a-564dd6c2a7f1.png) | - ##### 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 + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399368-5e879300-1930-11eb-8b77-b49e06813550.png) | ![2 thumbnails + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399370-5f202980-1930-11eb-9a2d-7b71714aa7b4.png) | | **1 thumbnail + 1 line of message** | **2 animated thumbnails + 2 lines of message** | | ![1 thumbnail + 1 line of message](https://user-images.githubusercontent.com/7802052/97399373-5f202980-1930-11eb-81fe-9946b656eb4c.png) | ![2 animated thumbnails + 2 lines of message](https://user-images.githubusercontent.com/7802052/97399355-59c2df00-1930-11eb-8a52-292956b8762d.gif) | @@ -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 | - | :----------------------------------------------------------: | :----------------------------------------------------------: | + | :----------------------------------------------------------: | :----------------------------------------------------------: | | ![InPageMiniTeal](https://user-images.githubusercontent.com/7802052/92672234-2d88da00-f353-11ea-99d9-b9e9b6aa5620.png) | ![InPageMiniBlack](https://user-images.githubusercontent.com/7802052/92672232-2c57ad00-f353-11ea-80f6-55a9c72fb0b5.png) | - ##### 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" />