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}"
         )
     }
 }