Skip to content

Commit 1a80ee4

Browse files
authored
Merge pull request #413 from mindbox-cloud/release/2.8.1
Release/2.8.1
2 parents bdfd13a + f4ba792 commit 1a80ee4

File tree

11 files changed

+102
-37
lines changed

11 files changed

+102
-37
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.0
24+
SDK_VERSION_NAME=2.8.1

modulesCommon.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ android {
2020

2121
buildConfigField 'String', 'VERSION_NAME', '"' + SDK_VERSION_NAME + '"'
2222

23+
24+
/* kapt {
25+
arguments {
26+
arg("room.schemaLocation", "$projectDir/schemas")
27+
}
28+
}*/
29+
2330
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2431
}
2532

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import android.app.Activity
44
import android.app.ActivityManager
55
import android.app.Application
66
import android.content.Context
7+
import android.content.pm.PackageInfo
8+
import android.content.pm.PackageManager
9+
import android.content.pm.PackageManager.PackageInfoFlags
710
import android.content.res.Resources
811
import android.os.Build
912
import android.os.Process
@@ -164,8 +167,19 @@ internal fun Activity.postDelayedAnimation(action: Runnable) {
164167
this.root?.postDelayed(action, duration)
165168
}
166169

167-
internal inline fun <T> Queue<T>.addUnique(item: T, predicate: (T) -> Boolean = { it == item }): Boolean {
170+
internal inline fun <T> Queue<T>.addUnique(
171+
item: T,
172+
predicate: (T) -> Boolean = { it == item }
173+
): Boolean {
168174
if (any(predicate)) return false
169175
add(item)
170176
return true
177+
}
178+
179+
internal fun PackageManager.getPackageInfoCompat(context: Context, flags: Int): PackageInfo {
180+
return if (Build.VERSION_CODES.TIRAMISU <= Build.VERSION.SDK_INT) {
181+
getPackageInfo(context.packageName, PackageInfoFlags.of(flags.toLong()))
182+
} else {
183+
getPackageInfo(context.packageName, flags)
184+
}
171185
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,17 @@ object Mindbox: MindboxLog {
295295
}
296296
}
297297

298+
/**
299+
* This method is used to inform when the notification permission status changed to "allowed"
300+
* @param context current context is used
301+
**/
302+
fun updateNotificationPermissionStatus(context: Context) = LoggingExceptionHandler.runCatching {
303+
mindboxLogI("updateNotificationPermissionStatus was called")
304+
mindboxScope.launch {
305+
updateAppInfo(context)
306+
}
307+
}
308+
298309
/**
299310
* Creates and deliveries event of "Push delivered". Recommended call this method from
300311
* background thread.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class MindboxConfiguration private constructor(
162162
try {
163163
val packageManager = context.packageManager
164164
//noinspection deprecation
165-
val packageInfo = packageManager.getPackageInfo(context.packageName, 0)
165+
val packageInfo = packageManager.getPackageInfoCompat(context, 0)
166166
packageName = packageInfo.packageName.trim()
167167
this.versionName = packageInfo.versionName?.trim()
168168
?: PLACEHOLDER_APP_PACKAGE_NAME

sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/managers/InAppGlideImageLoaderImpl.kt

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppImageLoader
88
import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppImageSizeStorage
99
import cloud.mindbox.mobile_sdk.inapp.domain.models.InAppContentFetchingError
1010
import cloud.mindbox.mobile_sdk.logger.mindboxLogD
11+
import cloud.mindbox.mobile_sdk.logger.mindboxLogE
1112
import com.bumptech.glide.Glide
1213
import com.bumptech.glide.load.DataSource
1314
import com.bumptech.glide.load.engine.GlideException
@@ -38,10 +39,17 @@ internal class InAppGlideImageLoaderImpl(
3839
target: Target<Drawable>?,
3940
isFirstResource: Boolean
4041
): Boolean {
41-
mindboxLogD("loading image with url = $url for inapp with id $inAppId failed")
42-
cancellableContinuation.resumeWithException(InAppContentFetchingError(e))
43-
return true
44-
42+
return runCatching {
43+
mindboxLogD("loading image with url = $url for inapp with id $inAppId failed")
44+
cancellableContinuation.resumeWithException(InAppContentFetchingError(e))
45+
true
46+
}.getOrElse {
47+
mindboxLogE(
48+
"Unknown error when loading image from network failed",
49+
exception = it
50+
)
51+
true
52+
}
4553
}
4654

4755
override fun onResourceReady(
@@ -51,16 +59,23 @@ internal class InAppGlideImageLoaderImpl(
5159
dataSource: DataSource?,
5260
isFirstResource: Boolean
5361
): Boolean {
54-
mindboxLogD("loading image with url = $url for inapp with id $inAppId succeeded")
55-
inAppImageSizeStorage.addSize(inAppId, url, resource.toBitmap().width, resource.toBitmap().height)
56-
cancellableContinuation.resume(true)
57-
return true
62+
return runCatching {
63+
mindboxLogD("loading image with url = $url for inapp with id $inAppId succeeded")
64+
inAppImageSizeStorage.addSize(inAppId, url, resource.toBitmap().width, resource.toBitmap().height)
65+
cancellableContinuation.resume(true)
66+
true
67+
}.getOrElse {
68+
mindboxLogE(
69+
"Unknown error when loading image from network failed",
70+
exception = it
71+
)
72+
true
73+
}
5874
}
5975
}).preload()
6076
requests[inAppId] = target
6177

6278
}
63-
6479
}
6580

6681
override fun cancelLoading(inAppId: String) {

sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/presentation/view/AbstractInAppViewHolder.kt

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,21 @@ internal abstract class AbstractInAppViewHolder<T : InAppType> :
9090
target: Target<Drawable>?,
9191
isFirstResource: Boolean
9292
): Boolean {
93-
this.mindboxLogE(
94-
message = "Failed to load inapp image with url = $url",
95-
exception = e
96-
?: RuntimeException("Failed to load inapp image with url = $url")
97-
)
98-
hide()
99-
return false
93+
return runCatching {
94+
this.mindboxLogE(
95+
message = "Failed to load inapp image with url = $url",
96+
exception = e
97+
?: RuntimeException("Failed to load inapp image with url = $url")
98+
)
99+
hide()
100+
false
101+
}.getOrElse {
102+
mindboxLogE(
103+
"Unknown error when loading image from cache succeeded",
104+
exception = it
105+
)
106+
false
107+
}
100108
}
101109

102110
override fun onResourceReady(
@@ -106,16 +114,24 @@ internal abstract class AbstractInAppViewHolder<T : InAppType> :
106114
dataSource: DataSource?,
107115
isFirstResource: Boolean
108116
): Boolean {
109-
bind()
110-
preparedImages[imageView] = true
111-
if (!preparedImages.values.contains(false)) {
112-
mindboxLogI("In-app shown")
113-
wrapper.onInAppShown.onShown()
114-
for (image in preparedImages.keys) {
115-
image.visibility = View.VISIBLE
117+
return runCatching {
118+
bind()
119+
preparedImages[imageView] = true
120+
if (!preparedImages.values.contains(false)) {
121+
mindboxLogI("In-app shown")
122+
wrapper.onInAppShown.onShown()
123+
for (image in preparedImages.keys) {
124+
image.visibility = View.VISIBLE
125+
}
116126
}
127+
false
128+
}.getOrElse {
129+
mindboxLogE(
130+
"Unknown error when loading image from cache failed",
131+
exception = it
132+
)
133+
false
117134
}
118-
return false
119135
}
120136
})
121137
.into(imageView)

sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/presentation/view/SnackbarInAppViewHolder.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ import android.view.View
44
import android.view.ViewGroup
55
import cloud.mindbox.mobile_sdk.SnackbarPosition
66
import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppImageSizeStorage
7-
import cloud.mindbox.mobile_sdk.inapp.domain.models.Element
8-
import cloud.mindbox.mobile_sdk.inapp.domain.models.InAppType
9-
import cloud.mindbox.mobile_sdk.inapp.domain.models.InAppTypeWrapper
10-
import cloud.mindbox.mobile_sdk.inapp.domain.models.Layer
7+
import cloud.mindbox.mobile_sdk.inapp.domain.models.*
118
import cloud.mindbox.mobile_sdk.inapp.presentation.InAppCallback
129
import cloud.mindbox.mobile_sdk.logger.mindboxLogI
1310
import cloud.mindbox.mobile_sdk.px
@@ -24,6 +21,8 @@ internal class SnackbarInAppViewHolder(
2421
override val isActive: Boolean
2522
get() = isInAppMessageActive
2623

24+
private var requiredSizes: HashMap<String, Size> = HashMap()
25+
2726
override fun show(currentRoot: ViewGroup) {
2827
super.show(currentRoot)
2928
mindboxLogI("Try to show inapp with id ${wrapper.inAppType.inAppId}")
@@ -55,11 +54,14 @@ internal class SnackbarInAppViewHolder(
5554
currentDialog.addView(inAppImageView)
5655
when (wrapper.inAppType.position.margin.kind) {
5756
InAppType.Snackbar.Position.Margin.MarginKind.DP -> {
58-
inAppImageView.prepareViewForSnackBar(
59-
inAppImageSizeStorage.getSizeByIdAndUrl(
57+
if (!requiredSizes.containsKey(wrapper.inAppType.inAppId)) {
58+
requiredSizes[wrapper.inAppType.inAppId] = inAppImageSizeStorage.getSizeByIdAndUrl(
6059
wrapper.inAppType.inAppId,
6160
layer.source.url
62-
),
61+
)
62+
}
63+
inAppImageView.prepareViewForSnackBar(
64+
requiredSizes[wrapper.inAppType.inAppId]!!,
6365
wrapper.inAppType.position.margin.left.px,
6466
wrapper.inAppType.position.margin.right.px
6567
)

sdk/src/main/java/cloud/mindbox/mobile_sdk/managers/LifecycleManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ internal class LifecycleManager(
118118
}
119119

120120
fun onNewIntent(newIntent: Intent?) = newIntent?.let { intent ->
121-
if (intent.data != null || intent.extras?.get(IS_OPENED_FROM_PUSH_BUNDLE_KEY) == true) {
121+
if (intent.data != null || intent.extras?.getBoolean(IS_OPENED_FROM_PUSH_BUNDLE_KEY) == true) {
122122
isIntentChanged = updateHashesList(intent.hashCode())
123123
sendTrackVisit(intent)
124124
skipSendingTrackVisit = isAppInBackground

sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/data/room/MonitoringDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
77
import cloud.mindbox.mobile_sdk.monitoring.data.room.dao.MonitoringDao
88
import cloud.mindbox.mobile_sdk.monitoring.data.room.entities.MonitoringEntity
99

10-
@Database(entities = [MonitoringEntity::class], version = 2)
10+
@Database(entities = [MonitoringEntity::class], exportSchema = false, version = 2)
1111
internal abstract class MonitoringDatabase : RoomDatabase() {
1212

1313
companion object {

0 commit comments

Comments
 (0)