Coverage Summary for Class: MobileConfigSettingsManagerImpl (cloud.mindbox.mobile_sdk.managers)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| MobileConfigSettingsManagerImpl |
100%
(4/4)
|
78.6%
(11/14)
|
100%
(27/27)
|
100%
(148/148)
|
| MobileConfigSettingsManagerImpl$checkPushTokenKeepalive$1 |
100%
(1/1)
|
100%
(18/18)
|
100%
(14/14)
|
100%
(105/105)
|
| Total |
100%
(5/5)
|
90.6%
(29/32)
|
100%
(41/41)
|
100%
(253/253)
|
package cloud.mindbox.mobile_sdk.managers
import android.content.Context
import androidx.annotation.VisibleForTesting
import cloud.mindbox.mobile_sdk.inapp.data.managers.SessionStorageManager
import cloud.mindbox.mobile_sdk.logger.mindboxLogI
import cloud.mindbox.mobile_sdk.models.UpdateData
import cloud.mindbox.mobile_sdk.models.operation.response.InAppConfigResponse
import cloud.mindbox.mobile_sdk.models.toTokenData
import cloud.mindbox.mobile_sdk.pushes.PushNotificationManager
import cloud.mindbox.mobile_sdk.repository.MindboxPreferences
import cloud.mindbox.mobile_sdk.utils.TimeProvider
import cloud.mindbox.mobile_sdk.utils.loggingRunCatching
import java.util.Date
import kotlin.time.Duration.Companion.milliseconds
internal class MobileConfigSettingsManagerImpl(
private val appContext: Context,
private val sessionStorageManager: SessionStorageManager,
private val timeProvider: TimeProvider
) : MobileConfigSettingsManager {
override fun saveSessionTime(config: InAppConfigResponse) {
config.settings?.slidingExpiration?.config?.interval
?.takeIf { it > 0 }
?.let { sessionTime ->
sessionStorageManager.sessionTime = sessionTime.milliseconds
mindboxLogI("Session time set to ${sessionStorageManager.sessionTime.inWholeMilliseconds} ms")
} ?: mindboxLogI("SessionTime is not set")
}
override fun checkPushTokenKeepalive(config: InAppConfigResponse): Unit = loggingRunCatching {
config.settings?.slidingExpiration?.pushTokenKeepalive?.interval
?.takeIf { it > 0 }
?.let { pushTokenKeepalive ->
val lastInfoUpdateTime = MindboxPreferences.lastInfoUpdateTime
val currentTime = timeProvider.currentTimeMillis()
if (lastInfoUpdateTime == null) {
mindboxLogI("LastInfoUpdateTime is not set")
} else if (lastInfoUpdateTime + pushTokenKeepalive > currentTime) {
mindboxLogI(
"Next ApplicationKeepalive = ${Date(lastInfoUpdateTime + pushTokenKeepalive)}, " +
"lastInfoUpdateTime = ${Date(lastInfoUpdateTime)}, " +
"pushTokenKeepalive = ${pushTokenKeepalive.milliseconds}"
)
return@loggingRunCatching
}
sendAppKeepalive(pushTokenKeepalive)
} ?: mindboxLogI("PushTokenKeepalive is not set")
}
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
internal fun sendAppKeepalive(pushTokenKeepalive: Long) {
val pushTokens = MindboxPreferences.pushTokens
val savedPushTokens = pushTokens.mapValues { it.value.token }
val isNotificationEnabled = PushNotificationManager.isNotificationsEnabled(appContext)
val infoUpdatedVersion = MindboxPreferences.infoUpdatedVersion
val updateData = UpdateData(
isNotificationsEnabled = isNotificationEnabled,
instanceId = MindboxPreferences.instanceId,
version = infoUpdatedVersion,
tokens = savedPushTokens.toTokenData(),
)
MindboxEventManager.appKeepalive(appContext, updateData)
MindboxPreferences.isNotificationEnabled = isNotificationEnabled
val nextSendTime = Date(timeProvider.currentTimeMillis() + pushTokenKeepalive)
mindboxLogI(
"Send ApplicationKeepalive: " +
"next ApplicationKeepalive = $nextSendTime, " +
"current pushTokenKeepalive = ${pushTokenKeepalive.milliseconds}"
)
}
}