tauri-plugin-broadcast 0.2.1

tauri android broadcast plugin
Documentation
package com.plugin.broadcast

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.app.Activity
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke
import java.util.HashMap

@InvokeArg
class RegisterRequest{
    var broadcastName: String? = null;
    var eventName: String? = null;
}

@InvokeArg
class UnregisterRequest{
    var broadcastName: String? = null;
}

@TauriPlugin
class BroadcastPlugin(private val activity: Activity): Plugin(activity) {
    private val receivers = HashMap<String, BroadcastReceiver>()

    @Command
    fun register(invoke: Invoke) {
        val args = invoke.parseArgs(RegisterRequest::class.java)
        val broadcastName = args.broadcastName
        val eventName = args.eventName
        if (broadcastName == null || eventName == null) {
            invoke.reject("broadcastName and eventName are required")
            return
        }

        if (receivers.containsKey(broadcastName)) {
            invoke.reject("Listener for broadcast '$broadcastName' already registered.")
            return
        }

        val filter = IntentFilter(broadcastName)
        val receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                val data = JSObject()
                val bundle = intent.extras
                if (bundle != null) {
                    for (key in bundle.keySet()) {
                        val value = bundle.get(key)
                        data.put(key, value.toString())
                    }
                }
                trigger(eventName, data)
            }
        }
        activity.registerReceiver(receiver, filter)
        receivers[broadcastName] = receiver
        invoke.resolve()
    }

    @Command
    fun unregister(invoke: Invoke) {
        val args = invoke.parseArgs(UnregisterRequest::class.java)
        val broadcastName = args.broadcastName
        val receiver = receivers[broadcastName]
        if (receiver != null) {
            activity.unregisterReceiver(receiver)
            receivers.remove(eventName)
            invoke.resolve()
        } else {
            invoke.reject("Listener for broadcast '$broadcastName' not found.")
        }
    }
}