package com.robinpowered.react.Intercom; import android.util.Log; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.modules.core.DeviceEventManagerModule; import javax.annotation.Nullable; import android.util.Log; import java.util.Map; import java.util.HashMap; import io.intercom.android.sdk.Intercom; import io.intercom.android.sdk.UnreadConversationCountListener; public class IntercomEventEmitter extends ReactContextBaseJavaModule { private static final String MODULE_NAME = "IntercomEventEmitter"; public static final String TAG = "Intercom Event"; private static final String UNREAD_CHANGE_NOTIFICATION = "IntercomUnreadConversationCountDidChangeNotification"; public IntercomEventEmitter(ReactApplicationContext reactContext) { super(reactContext); try { Intercom.client().addUnreadConversationCountListener(unreadConversationCountListener); } catch (Exception e) { Log.e(TAG, "client called before Intercom initialization"); } } @Override public String getName() { return MODULE_NAME; } @Override public boolean canOverrideExistingModule() { return true; } @Override public Map<String, Object> getConstants() { final Map<String, Object> constants = new HashMap<>(); constants.put("UNREAD_CHANGE_NOTIFICATION", UNREAD_CHANGE_NOTIFICATION); return constants; } private void handleUpdateUnreadCount() { try { WritableMap params = Arguments.createMap(); params.putInt("count", Intercom.client().getUnreadConversationCount()); sendEvent(UNREAD_CHANGE_NOTIFICATION, params); } catch (Exception e) { Log.e(TAG, "client called before Intercom initialization"); } } private void sendEvent(String eventName, @Nullable WritableMap params) { if(getReactApplicationContext().hasActiveCatalystInstance()) { try { getReactApplicationContext() .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(eventName, params); } catch (Exception e) { Log.e(TAG, "sendEvent called before bundle loaded"); } } } private final UnreadConversationCountListener unreadConversationCountListener = new UnreadConversationCountListener() { @Override public void onCountUpdate(int conversationCount) { handleUpdateUnreadCount(); } }; }