package com.contentsquare.rn.csq import android.util.Log import com.contentsquare.CSQ import com.contentsquare.api.model.ProductAnalyticsOptions import com.contentsquare.rn.BuildConfig import com.contentsquare.rn.utils.MapUtil import com.contentsquare.rn.utils.ReactNativeUiThreadUtil import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReadableMap class CSQInitialization( private val reactContext: ReactApplicationContext, private val reactNativeUiThreadUtil: ReactNativeUiThreadUtil ) { fun start() { reactNativeUiThreadUtil.runOnUiThread { CSQ.start(reactContext.applicationContext) } } fun configureProductAnalytics(envId: String, productAnalyticsOptions: ProductAnalyticsOptions) { reactNativeUiThreadUtil.runOnUiThread { CSQ.configureProductAnalytics(reactContext, envId, productAnalyticsOptions) } } fun initComponents(params: ReadableMap) { reactNativeUiThreadUtil.runOnUiThread { try { val updatedParams = Arguments.createMap() updatedParams.merge(params) if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { updatedParams.putBoolean("xpf_rn_new_arch_enabled", BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) } updatedParams.putBoolean("xpf_rn_csq_sdk_enabled", true) val telemetryInterface = Class.forName("com.contentsquare.android.api.bridge.telemetry.TelemetryInterface").newInstance() val telemetryCollect = telemetryInterface::class.java.declaredMethods.first { it.name == "telemetryCollect" } val setXPFType = telemetryInterface::class.java.declaredMethods.first { it.name == "setXPFType" } val setXPFVersion = telemetryInterface::class.java.declaredMethods.first { it.name == "setXPFVersion" } val setXPFBridgeVersion = telemetryInterface::class.java.declaredMethods.first { it.name == "setXPFBridgeVersion" } val iterator = updatedParams.keySetIterator() while (iterator.hasNextKey()) { val key = iterator.nextKey() when (key) { "xpf_type" -> { try { setXPFType.invoke(telemetryInterface, updatedParams.getString(key)) } catch (e: Exception) { Log.d("CSLIB", "Exception failure while calling setXPFType", e) } } "xpf_version" -> { try { setXPFVersion.invoke(telemetryInterface, updatedParams.getString(key)) } catch (e: Exception) { Log.d("CSLIB", "Exception failure while calling setXPFVersion", e) } } "xpf_bridge_version" -> { try { setXPFBridgeVersion.invoke(telemetryInterface, updatedParams.getString(key)) } catch (e: Exception) { Log.d("CSLIB", "Exception failure while calling setXPFBridgeVersion", e) } } else -> { try { telemetryCollect.invoke(telemetryInterface, key, MapUtil.getValueForKey(updatedParams, key)) } catch (e: Exception) { Log.d("CSLIB", "Exception failure while calling telemetryCollect", e) } } } } } catch (e: Exception) { Log.e("CSLIB", "Exception failure while initializing components", e) e.printStackTrace() } } } }