package ai.sirrus.reactnativesdk import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.util.Log import org.json.JSONObject class SirrusNotificationActionReceiver : BroadcastReceiver() { private val logTag = "SirrusSDK" override fun onReceive(context: Context, intent: Intent) { val payload = parsePayloadJson(intent) ?: fallbackPayload(intent) val event = JSONObject().apply { put("type", intent.getStringExtra("interactionType") ?: "opened") put("actionId", intent.getStringExtra("actionId") ?: "") put("deeplinkUrl", intent.getStringExtra("actionDeeplinkUrl") ?: intent.getStringExtra("deeplinkUrl") ?: "") put("payload", payload) } if (!intent.getStringExtra("actionId").isNullOrBlank()) { event.put( "action", JSONObject().apply { put("id", intent.getStringExtra("actionId") ?: "") put("title", intent.getStringExtra("actionTitle") ?: "") put("label", intent.getStringExtra("actionLabel") ?: intent.getStringExtra("actionTitle") ?: "") put("actionType", intent.getStringExtra("actionType") ?: "") put("postback", intent.getStringExtra("actionPostback") ?: "") put("deeplinkUrl", intent.getStringExtra("actionDeeplinkUrl") ?: "") put("foreground", intent.getBooleanExtra("actionForeground", true)) put("destructive", intent.getBooleanExtra("actionDestructive", false)) put( "authenticationRequired", intent.getBooleanExtra("actionAuthenticationRequired", false) ) } ) } Log.i(logTag, "Sirrus notification interaction payload: ${event}") SirrusNotificationEventDispatcher.emitOrStore(context, event) if (intent.getBooleanExtra("launchApp", true)) { val launchIntent = context.packageManager.getLaunchIntentForPackage(context.packageName) ?.apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP) val deeplinkUrl = intent.getStringExtra("actionDeeplinkUrl") ?: intent.getStringExtra("deeplinkUrl") if (!deeplinkUrl.isNullOrBlank()) { putExtra("sirrus_deeplink_url", deeplinkUrl) data = android.net.Uri.parse(deeplinkUrl) } } if (launchIntent != null) { context.startActivity(launchIntent) } } } private fun parsePayloadJson(intent: Intent): JSONObject? { val payloadJson = intent.getStringExtra("payloadJson") ?: return null return try { JSONObject(payloadJson) } catch (_: Throwable) { null } } private fun fallbackPayload(intent: Intent): JSONObject { return JSONObject().apply { put("title", intent.getStringExtra("title") ?: "") put("body", intent.getStringExtra("body") ?: "") put("subtitle", intent.getStringExtra("subtitle") ?: "") put("messageId", intent.getStringExtra("messageId") ?: "") put("campaignId", intent.getStringExtra("campaignId") ?: "") put("templateId", intent.getStringExtra("templateId") ?: "") put("deeplinkUrl", intent.getStringExtra("deeplinkUrl") ?: "") put("provider", intent.getStringExtra("provider") ?: "fcm") } } }