package com.fastwechat import android.util.Log import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.LifecycleEventListener import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContextBaseJavaModule import com.facebook.react.bridge.ReactMethod import com.facebook.react.bridge.Promise import com.facebook.react.bridge.ReadableMap import com.facebook.react.modules.core.DeviceEventManagerModule import java.lang.Exception class FastWechatModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext), LifecycleEventListener { override fun getName(): String { return NAME } private var listenerCount: Int = 0 @ReactMethod fun addListener(eventName: String) { if (listenerCount == 0) { // Set up any upstream listeners or background tasks as necessary } listenerCount += 1 } @ReactMethod fun removeListeners(count: Int) { listenerCount -= count if (listenerCount == 0) { // Remove upstream listeners or background tasks as necessary } } init { context = reactContext context?.addLifecycleEventListener(this) } companion object { const val NAME = "FastWechat" var context: ReactApplicationContext? = null var isProcessPaying: Boolean = false fun send(data: Map<*, *>) { val code = data["code"] as Number val map = Arguments.createMap() map.putString("type", "pay") map.putInt("code", code as Int) context?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)?.emit("wechat", map) } } @ReactMethod fun init(appId: String, promise: Promise) { if (this.currentActivity != null) { WechatCenter.shared().register(this.currentActivity!!, appId) promise.resolve(true) } else { promise.reject("-1", "Module Uninitialized") } } @ReactMethod fun isInstalled(promise: Promise) { try { val installed = WechatCenter.shared().isInstalled() promise.resolve(installed) }catch (e: Exception){ promise.reject("-1","Wechat SDK Uninitialized") } } @ReactMethod fun pay(params: ReadableMap, promise: Promise) { isProcessPaying = true try { WechatCenter.shared().pay( WechatCenter.Companion.PayParams( params.getString("appId") ?: "", params.getString("partnerId") ?: "", params.getString("prepayId") ?: "", params.getString("nonceStr") ?: "", params.getString("timestamp") ?: "", params.getString("sign") ?: "" ) ) promise.resolve(true) } catch (e: Exception) { promise.reject("-1", "Wechat SDK Uninitialized") } } override fun onHostResume() { if (isProcessPaying) { isProcessPaying = false send(mapOf("code" to -666)) } } override fun onHostPause() { } override fun onHostDestroy() { } }