Coverage Summary for Class: RuStoreServiceHandler (cloud.mindbox.mindbox_rustore)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| RuStoreServiceHandler |
0%
(0/6)
|
0%
(0/6)
|
0%
(0/20)
|
0%
(0/96)
|
| RuStoreServiceHandler$Companion |
|
| RuStoreServiceHandler$convertToRemoteMessage$2$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/8)
|
| RuStoreServiceHandler$getToken$2$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/7)
|
| RuStoreServiceHandler$getToken$2$2 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/9)
|
| RuStoreServiceHandler$initService$2 |
0%
(0/1)
|
0%
(0/10)
|
0%
(0/10)
|
0%
(0/108)
|
| Total |
0%
(0/10)
|
0%
(0/16)
|
0%
(0/33)
|
0%
(0/228)
|
package cloud.mindbox.mindbox_rustore
import android.app.Application
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import cloud.mindbox.mobile_sdk.logger.MindboxLogger
import cloud.mindbox.mobile_sdk.pushes.MindboxRemoteMessage
import cloud.mindbox.mobile_sdk.pushes.PushServiceHandler
import cloud.mindbox.mobile_sdk.utils.ExceptionHandler
import kotlinx.coroutines.suspendCancellableCoroutine
import ru.rustore.sdk.core.util.RuStoreUtils
import ru.rustore.sdk.pushclient.RuStorePushClient
import ru.rustore.sdk.pushclient.common.logger.DefaultLogger
import ru.rustore.sdk.pushclient.messaging.model.RemoteMessage
import java.util.UUID
import kotlin.coroutines.resumeWithException
internal class RuStoreServiceHandler(
private val logger: MindboxLogger,
private val exceptionHandler: ExceptionHandler,
private val projectId: String,
) : PushServiceHandler() {
companion object {
const val RU_STORE_MIN_API_VERSION = Build.VERSION_CODES.N
const val RU_STORE_META_DATA = "ru.rustore.sdk.pushclient.project_id"
}
override val notificationProvider: String = MindboxRuStore.tag
override suspend fun initService(context: Context) {
exceptionHandler.runCatchingSuspending {
logger.d(this, "RuStoreServiceHandler initService")
RuStorePushClient.init(
application = context.applicationContext as Application,
projectId = projectId.takeIf { it.isNotBlank() }
?: runCatching {
context.packageManager
.getApplicationInfo(context.packageName, PackageManager.GET_META_DATA)
.metaData?.getString(RU_STORE_META_DATA) ?: ""
}.getOrDefault(""),
logger = DefaultLogger(),
)
}
}
override fun convertToRemoteMessage(message: Any): MindboxRemoteMessage? =
message.takeIf { it is RemoteMessage }?.let {
exceptionHandler.runCatching(null) {
MindboxRuStore.convertToMindboxRemoteMessage(message as RemoteMessage)
}
}
override fun getAdsId(context: Context): Pair<String?, Boolean> =
UUID.randomUUID().toString() to false
override fun isAvailable(context: Context): Boolean {
if (Build.VERSION.SDK_INT < RU_STORE_MIN_API_VERSION) {
logger.w(
this,
"RuStore push notifications do not work on this device. " +
"Requires at least Android API $RU_STORE_MIN_API_VERSION"
)
return false
}
return RuStoreUtils.isRuStoreInstalled(context)
}
override suspend fun getToken(context: Context): String? =
suspendCancellableCoroutine { continuation ->
RuStorePushClient.getToken()
.addOnSuccessListener { token ->
continuation.resumeWith(Result.success(token))
}
.addOnFailureListener { throwable ->
continuation.resumeWithException(throwable)
}
}
}