Skip to content

Commit 0ac87e4

Browse files
authored
Merge pull request #426 from mindbox-cloud/release/2.8.3
Release/2.8.3
2 parents 03e7a2e + d661069 commit 0ac87e4

File tree

26 files changed

+213
-67
lines changed

26 files changed

+213
-67
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ android.enableJetifier=true
2121
kotlin.code.style=official
2222

2323
# SDK version property
24-
SDK_VERSION_NAME=2.8.2
24+
SDK_VERSION_NAME=2.8.3

mindbox-firebase/src/main/java/cloud/mindbox/mindbox_firebase/MindboxFirebase.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import cloud.mindbox.mobile_sdk.logger.MindboxLogger
44
import cloud.mindbox.mobile_sdk.pushes.MindboxPushService
55
import cloud.mindbox.mobile_sdk.pushes.PushServiceHandler
66
import cloud.mindbox.mobile_sdk.utils.ExceptionHandler
7-
7+
/**
8+
* An object to use when choosing push provider in Mindbox.initPushServices or Mindbox.init.
9+
* Represents FCM
10+
* */
811
object MindboxFirebase : MindboxPushService {
912

1013
override val tag: String = "FCM"

mindbox-huawei/src/main/java/cloud/mindbox/mindbox_huawei/MindboxHuawei.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import cloud.mindbox.mobile_sdk.logger.MindboxLogger
44
import cloud.mindbox.mobile_sdk.pushes.MindboxPushService
55
import cloud.mindbox.mobile_sdk.pushes.PushServiceHandler
66
import cloud.mindbox.mobile_sdk.utils.ExceptionHandler
7-
7+
/**
8+
* An object to use when choosing push provider in Mindbox.initPushServices or Mindbox.init.
9+
* Represents HCM
10+
* */
811
object MindboxHuawei : MindboxPushService {
912

1013
override val tag: String = "HCM"

sdk/src/main/java/cloud/mindbox/mobile_sdk/Extensions.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@ import androidx.annotation.IdRes
1818
import cloud.mindbox.mobile_sdk.inapp.domain.models.InAppType
1919
import cloud.mindbox.mobile_sdk.logger.MindboxLoggerImpl
2020
import cloud.mindbox.mobile_sdk.utils.LoggingExceptionHandler
21+
import com.android.volley.VolleyError
22+
import com.android.volley.toolbox.HttpHeaderParser
2123
import org.threeten.bp.Instant
2224
import org.threeten.bp.LocalDateTime
2325
import org.threeten.bp.ZoneOffset
2426
import org.threeten.bp.ZonedDateTime
2527
import org.threeten.bp.format.DateTimeFormatter
28+
import java.nio.charset.Charset
2629
import java.util.Queue
2730
import kotlin.math.roundToInt
2831

@@ -182,4 +185,17 @@ internal fun PackageManager.getPackageInfoCompat(context: Context, flags: Int):
182185
} else {
183186
getPackageInfo(context.packageName, flags)
184187
}
188+
}
189+
190+
internal fun VolleyError.getErrorResponseBodyData(): String {
191+
return this.networkResponse?.data
192+
?.takeIf { it.isNotEmpty() }
193+
?.toString(
194+
Charset.forName(
195+
HttpHeaderParser.parseCharset(
196+
this.networkResponse?.headers ?: emptyMap()
197+
)
198+
)
199+
)
200+
?: ""
185201
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
package cloud.mindbox.mobile_sdk
2-
2+
/**
3+
* An error thrown during initialization in case validation of initialization fails
4+
* */
35
class InitializeMindboxException(message: String) : Exception(message)

sdk/src/main/java/cloud/mindbox/mobile_sdk/Mindbox.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,9 @@ object Mindbox : MindboxLog {
346346
* Creates and deliveries event of "Push delivered". Recommended call this method from
347347
* background thread.
348348
*
349+
* Use this method only if you have custom push handling you don't use [Mindbox.handleRemoteMessage].
350+
* You must not call it otherwise.
351+
*
349352
* @param context used to initialize the main tools
350353
* @param uniqKey - unique identifier of push notification
351354
*/
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package cloud.mindbox.mobile_sdk.abtests
22

3-
interface CustomerAbMixer {
3+
internal interface CustomerAbMixer {
44
fun stringModulusHash(identifier: String, salt: String): Int
55
}

sdk/src/main/java/cloud/mindbox/mobile_sdk/di/Modules.kt

Whitespace-only changes.
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package cloud.mindbox.mobile_sdk.inapp.data.validators
22

3+
import com.google.gson.JsonParser
34

45
internal class JsonValidator : Validator<String?> {
56

67
override fun isValid(item: String?): Boolean {
78
if (item.isNullOrBlank()) return false
8-
val jsonRegex = "^\\s*(\\{.*\\}|\\[.*])\\s*$"
9-
return item.trim().matches(jsonRegex.toRegex())
9+
10+
return runCatching {
11+
JsonParser.parseString(item).let { it.isJsonObject || it.isJsonArray }
12+
}.getOrElse { false }
1013
}
1114
}

sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/domain/InAppChoosingManagerImpl.kt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
11
package cloud.mindbox.mobile_sdk.inapp.domain
22

3+
import cloud.mindbox.mobile_sdk.getErrorResponseBodyData
34
import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppContentFetcher
45
import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.managers.InAppChoosingManager
56
import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.repositories.InAppGeoRepository
67
import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.repositories.InAppSegmentationRepository
78
import cloud.mindbox.mobile_sdk.inapp.domain.models.*
89
import cloud.mindbox.mobile_sdk.logger.MindboxLoggerImpl
910
import cloud.mindbox.mobile_sdk.logger.mindboxLogD
11+
import cloud.mindbox.mobile_sdk.logger.mindboxLogI
12+
import cloud.mindbox.mobile_sdk.logger.mindboxLogW
1013
import cloud.mindbox.mobile_sdk.models.InAppEventType
14+
import com.android.volley.VolleyError
1115
import kotlinx.coroutines.*
1216

1317
internal class InAppChoosingManagerImpl(
1418
private val inAppGeoRepository: InAppGeoRepository,
1519
private val inAppSegmentationRepository: InAppSegmentationRepository,
1620
private val inAppContentFetcher: InAppContentFetcher
17-
) :
18-
InAppChoosingManager {
21+
) : InAppChoosingManager {
1922

23+
companion object {
24+
private const val RESPONSE_STATUS_CUSTOMER_SEGMENTS_REQUIRE_CUSTOMER =
25+
"CheckCustomerSegments requires customer"
26+
}
2027
override suspend fun chooseInAppToShow(
2128
inApps: List<InApp>,
2229
triggerEvent: InAppEventType,
@@ -66,11 +73,7 @@ internal class InAppChoosingManagerImpl(
6673
inAppSegmentationRepository.setCustomerSegmentationStatus(
6774
CustomerSegmentationFetchStatus.SEGMENTATION_FETCH_ERROR
6875
)
69-
MindboxLoggerImpl.e(
70-
this,
71-
"Error fetching customer segmentations",
72-
throwable
73-
)
76+
handleCustomerSegmentationErrorLog(throwable)
7477
}
7578

7679
else -> {
@@ -124,6 +127,19 @@ internal class InAppChoosingManagerImpl(
124127
)
125128
}
126129

130+
private fun handleCustomerSegmentationErrorLog(error: CustomerSegmentationError) {
131+
val volleyError = error.cause as? VolleyError
132+
volleyError?.let { error ->
133+
if ((error.networkResponse?.statusCode == 400) && (error.getErrorResponseBodyData()
134+
.contains(RESPONSE_STATUS_CUSTOMER_SEGMENTS_REQUIRE_CUSTOMER))
135+
) {
136+
mindboxLogI("Cannot check customer segment. It's a new customer")
137+
return
138+
}
139+
}
140+
mindboxLogW("Error fetching customer segmentations", error)
141+
}
142+
127143
private class TargetingDataWrapper(
128144
override val triggerEventName: String,
129145
override val operationBody: String? = null,

0 commit comments

Comments
 (0)