package com.contentsquare.rn.utils import android.util.Log import com.facebook.react.bridge.ReadableMap import java.lang.reflect.Method class LogMonitorUtil { companion object { @JvmStatic fun monitorWarn(params: ReadableMap) { try { val interfaceClass = Class.forName("com.contentsquare.android.api.bridge.logmonitor.LogMonitorInterface") val logMonitorInterfaceObj = interfaceClass.newInstance() val paramsMap: Map = ReactNativeTypesConverter.readableMapToMap(params, null, null) try { val monitorWarnMethod: Method = interfaceClass.getDeclaredMethod( "warn", // methodName String::class.java, // description Map::class.java // additionalContext: Map ) monitorWarnMethod.isAccessible = true val args = paramsMap["args"] val description = paramsMap["description"] as String var additionalContext: Map = HashMap() if (args is Map<*, *>) { additionalContext = args as Map } else if (args is ArrayList<*>) { Log.d("CSLIB", "Received args as an ArrayList: $args") } monitorWarnMethod.invoke( logMonitorInterfaceObj, description, // description additionalContext // additionalContext ) } catch (e: Exception) { Log.d("CSLIB", "Exception failure while calling monitorWarnMethod", e) } } catch (e: Exception) { Log.e("CSLIB", "Exception failure while monitorWarn", e) e.printStackTrace() } } @JvmStatic fun monitorError(params: ReadableMap) { try { val interfaceClass = Class.forName("com.contentsquare.android.api.bridge.logmonitor.LogMonitorInterface") val logMonitorInterfaceObj = interfaceClass.newInstance() val paramsMap: Map = ReactNativeTypesConverter.readableMapToMap(params, null, null) try { val monitorErrorMethod: Method = interfaceClass.getDeclaredMethod( "error", // methodName String::class.java, // description String::class.java, // errorType (empty string in this case) String::class.java, // errorMessage String::class.java, // stacktrace Map::class.java // additionalContext: Map ) monitorErrorMethod.isAccessible = true val args = paramsMap["args"] val description = paramsMap["description"] as String var errorDescription = paramsMap["errorDescription"] as? String ?: "Unknown error" var additionalContext: Map = HashMap() if (args is Map<*, *>) { additionalContext = args as Map } else if (args is ArrayList<*>) { Log.d("CSLIB", "Received args as an ArrayList: $args") } monitorErrorMethod.invoke( logMonitorInterfaceObj, description, // description "", // errorType errorDescription, // errorDescription "", // stacktrace additionalContext // additionalContext ) } catch (e: Exception) { Log.d("CSLIB", "Exception failure while calling monitorErrorMethod", e) } } catch (e: Exception) { Log.e("CSLIB", "Exception failure while monitorError", e) e.printStackTrace() } } } }