Coverage Summary for Class: HuaweiServiceHandler (cloud.mindbox.mindbox_huawei)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| HuaweiServiceHandler |
0%
(0/7)
|
0%
(0/16)
|
0%
(0/26)
|
0%
(0/142)
|
| HuaweiServiceHandler$Companion |
|
| HuaweiServiceHandler$convertToRemoteMessage$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/4)
|
| HuaweiServiceHandler$getToken$1 |
|
| Total |
0%
(0/8)
|
0%
(0/16)
|
0%
(0/27)
|
0%
(0/146)
|
package cloud.mindbox.mindbox_huawei
import android.content.Context
import cloud.mindbox.mobile_sdk.logger.MindboxLogger
import cloud.mindbox.mobile_sdk.pushes.PushServiceHandler
import cloud.mindbox.mobile_sdk.utils.ExceptionHandler
import com.huawei.agconnect.AGConnectOptionsBuilder
import com.huawei.hms.aaid.HmsInstanceId
import com.huawei.hms.ads.identifier.AdvertisingIdClient
import com.huawei.hms.api.ConnectionResult
import com.huawei.hms.api.HuaweiApiAvailability
import com.huawei.hms.push.HmsMessaging
import com.huawei.hms.push.RemoteMessage
import kotlinx.coroutines.delay
internal class HuaweiServiceHandler(
private val logger: MindboxLogger,
private val exceptionHandler: ExceptionHandler,
) : PushServiceHandler() {
companion object {
private const val HMS_APP_ID_KEY = "client/app_id"
private const val HMS_TOKEN_SCOPE = "HCM"
private const val TOKEN_ACQUISITION_DELAY = 2000L
}
override val notificationProvider: String = MindboxHuawei.tag
override suspend fun initService(context: Context) {
HmsMessaging.getInstance(context).isAutoInitEnabled = true
val appId = getAppId(context)
HmsInstanceId.getInstance(context).getToken(appId, HMS_TOKEN_SCOPE)
}
override suspend fun getToken(context: Context): String? {
val appId = getAppId(context)
val hms = HmsInstanceId.getInstance(context)
return hms.getToken(appId, HMS_TOKEN_SCOPE)?.takeIf(String::isNotEmpty) ?: run {
delay(TOKEN_ACQUISITION_DELAY)
hms.getToken(appId, HMS_TOKEN_SCOPE)
}
}
private fun getAppId(
context: Context,
) = AGConnectOptionsBuilder().build(context).getString(HMS_APP_ID_KEY)
override fun getAdsId(context: Context): Pair<String?, Boolean> {
val info: AdvertisingIdClient.Info? = AdvertisingIdClient.getAdvertisingIdInfo(context)
if (info == null) {
logger.w(
this,
"Cannot retrieve $notificationProvider AdvertisingIdClient.Info",
)
}
val id = info?.id
val isLimitAdTrackingEnabled = info?.isLimitAdTrackingEnabled ?: false
return id to isLimitAdTrackingEnabled
}
override fun isAvailable(context: Context) = HuaweiApiAvailability.getInstance()
.isHuaweiMobileServicesAvailable(context) == ConnectionResult.SUCCESS
override fun convertToRemoteMessage(message: Any) = if (message is RemoteMessage) {
exceptionHandler.runCatching(null) {
MindboxHuawei.convertToMindboxRemoteMessage(message)
}
} else {
null
}
}