Skip to content

[MOB-9962] Migrate to NativeEventEmitter #924

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Mar 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableMap;
Expand All @@ -20,15 +19,14 @@
import com.instabug.library.invocation.util.InstabugFloatingButtonEdge;
import com.instabug.library.invocation.util.InstabugVideoRecordingButtonPosition;
import com.instabug.reactlibrary.utils.ArrayUtil;
import com.instabug.reactlibrary.utils.InstabugUtil;
import com.instabug.reactlibrary.utils.EventEmitterModule;
import com.instabug.reactlibrary.utils.MainThreadHandler;

import java.util.ArrayList;

import javax.annotation.Nonnull;

public class RNInstabugBugReportingModule extends ReactContextBaseJavaModule {

public class RNInstabugBugReportingModule extends EventEmitterModule {
public RNInstabugBugReportingModule(ReactApplicationContext reactContext) {
super(reactContext);
}
Expand All @@ -39,6 +37,16 @@ public String getName() {
return "IBGBugReporting";
}

@ReactMethod
public void addListener(String event) {
super.addListener(event);
}

@ReactMethod
public void removeListeners(Integer count) {
super.removeListeners(count);
}

/**
* Enable or disable all BugReporting related features.
* @param isEnabled boolean indicating enabled or disabled.
Expand Down Expand Up @@ -235,10 +243,10 @@ public void setOnInvokeHandler(final Callback onInvokeHandler) {
@Override
public void run() {
try {
BugReporting.setOnInvokeCallback(new OnInvokeCallback() {
BugReporting.setOnInvokeCallback(new OnInvokeCallback() {
@Override
public void onInvoke() {
InstabugUtil.sendEvent(getReactApplicationContext(), Constants.IBG_PRE_INVOCATION_HANDLER, null);
sendEvent(Constants.IBG_PRE_INVOCATION_HANDLER, null);
}
});
} catch (java.lang.Exception exception) {
Expand Down Expand Up @@ -286,7 +294,7 @@ public void call(DismissType dismissType, ReportType reportType) {
WritableMap params = Arguments.createMap();
params.putString("dismissType", dismissType.toString());
params.putString("reportType", reportType.toString());
InstabugUtil.sendEvent(getReactApplicationContext(), Constants.IBG_POST_INVOCATION_HANDLER, params);
sendEvent(Constants.IBG_POST_INVOCATION_HANDLER, params);
}
});
} catch (java.lang.Exception exception) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,42 +1,32 @@
package com.instabug.reactlibrary;

import android.annotation.SuppressLint;
import android.app.Application;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.View;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableNativeArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableNativeMap;
import com.facebook.react.bridge.Callback;

import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.NativeViewHierarchyManager;
import com.facebook.react.uimanager.UIBlock;
import com.facebook.react.uimanager.UIManagerModule;
import com.instabug.apm.APM;
import com.instabug.bug.BugReporting;
import com.instabug.bug.instabugdisclaimer.Internal;
import com.instabug.bug.invocation.Option;
import com.instabug.chat.Replies;
import com.instabug.crash.CrashReporting;
import com.instabug.featuresrequest.FeatureRequests;
import com.instabug.featuresrequest.ActionType;
import com.instabug.library.Feature;
import com.instabug.library.Instabug;
import com.instabug.library.InstabugState;
import com.instabug.library.OnSdkDismissCallback;
import com.instabug.library.Platform;
import com.instabug.library.LogLevel;
Expand All @@ -45,8 +35,6 @@
import com.instabug.library.invocation.InstabugInvocationEvent;
import com.instabug.library.InstabugColorTheme;
import com.instabug.library.invocation.OnInvokeCallback;
import com.instabug.library.invocation.util.InstabugFloatingButtonEdge;
import com.instabug.library.invocation.util.InstabugVideoRecordingButtonPosition;
import com.instabug.library.logging.InstabugLog;
import com.instabug.library.ui.onboarding.WelcomeMessage;
import com.instabug.library.InstabugCustomTextPlaceHolder;
Expand All @@ -55,6 +43,7 @@
import com.instabug.library.visualusersteps.State;

import com.instabug.reactlibrary.utils.ArrayUtil;
import com.instabug.reactlibrary.utils.EventEmitterModule;
import com.instabug.reactlibrary.utils.InstabugUtil;
import com.instabug.reactlibrary.utils.MainThreadHandler;
import com.instabug.reactlibrary.utils.ReportUtil;
Expand Down Expand Up @@ -84,7 +73,7 @@
/**
* The type Rn instabug reactnative module.
*/
public class RNInstabugReactnativeModule extends ReactContextBaseJavaModule {
public class RNInstabugReactnativeModule extends EventEmitterModule {

private static final String TAG = RNInstabugReactnativeModule.class.getSimpleName();

Expand All @@ -98,15 +87,26 @@ public class RNInstabugReactnativeModule extends ReactContextBaseJavaModule {
*/
public RNInstabugReactnativeModule(ReactApplicationContext reactContext) {
super(reactContext);
//init placHolders
//init placeHolders
placeHolders = new InstabugCustomTextPlaceHolder();
}

@Override
public String getName() {
return "Instabug";
}



@ReactMethod
public void addListener(String event) {
super.addListener(event);
}

@ReactMethod
public void removeListeners(Integer count) {
super.removeListeners(count);
}

/**
* Enables or disables Instabug functionality.
* @param isEnabled A boolean to enable/disable Instabug.
Expand Down Expand Up @@ -953,7 +953,7 @@ public void run() {
BugReporting.setOnInvokeCallback(new OnInvokeCallback() {
@Override
public void onInvoke() {
sendEvent(getReactApplicationContext(), "IBGpreInvocationHandler", null);
sendEvent("IBGpreInvocationHandler", null);
}
});
} catch (java.lang.Exception exception) {
Expand Down Expand Up @@ -986,7 +986,7 @@ public void onReportCreated(Report report) {
reportParam.putString("userData", report.getUserData());
reportParam.putMap("userAttributes", convertFromHashMapToWriteableMap(report.getUserAttributes()));
reportParam.putMap("fileAttachments", convertFromHashMapToWriteableMap(report.getFileAttachments()));
sendEvent(getReactApplicationContext(), "IBGpreSendingHandler", reportParam);
sendEvent("IBGpreSendingHandler", reportParam);
currentReport = report;
}
});
Expand Down Expand Up @@ -1159,7 +1159,7 @@ public void call(DismissType dismissType, ReportType reportType) {
WritableMap params = Arguments.createMap();
params.putString("dismissType", dismissType.toString());
params.putString("reportType", reportType.toString());
sendEvent(getReactApplicationContext(), "IBGpostInvocationHandler", params);
sendEvent("IBGpostInvocationHandler", params);
}
});
} catch (java.lang.Exception exception) {
Expand Down Expand Up @@ -1203,7 +1203,7 @@ public void run() {
Surveys.setOnShowCallback(new OnShowCallback() {
@Override
public void onShow() {
sendEvent(getReactApplicationContext(), "IBGWillShowSurvey", null);
sendEvent("IBGWillShowSurvey", null);
}
});
}
Expand All @@ -1225,7 +1225,7 @@ public void run() {
Surveys.setOnDismissCallback(new OnDismissCallback() {
@Override
public void onDismiss() {
sendEvent(getReactApplicationContext(), "IBGDidDismissSurvey", null);
sendEvent("IBGDidDismissSurvey", null);
}
});
}
Expand Down Expand Up @@ -1347,7 +1347,7 @@ public void run() {
Runnable onNewReplyReceivedRunnable = new Runnable() {
@Override
public void run() {
sendEvent(getReactApplicationContext(), "IBGOnNewReplyReceivedCallback", null);
sendEvent("IBGOnNewReplyReceivedCallback", null);
}
};
Replies.setOnNewReplyReceivedCallback(onNewReplyReceivedRunnable);
Expand Down Expand Up @@ -1697,14 +1697,6 @@ public void run() {
});
}

private void sendEvent(ReactApplicationContext reactContext,
String eventName,
WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}

@ReactMethod
public void addExperiments(final ReadableArray experiments) {
MainThreadHandler.runOnMainThread(new Runnable() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
package com.instabug.reactlibrary;

import android.os.Handler;
import android.os.Looper;

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableType;
import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.instabug.chat.Replies;
import com.instabug.library.Feature;
import com.instabug.reactlibrary.utils.InstabugUtil;
import com.instabug.reactlibrary.utils.EventEmitterModule;
import com.instabug.reactlibrary.utils.MainThreadHandler;

import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;

public class RNInstabugRepliesModule extends ReactContextBaseJavaModule {
public class RNInstabugRepliesModule extends EventEmitterModule {

public RNInstabugRepliesModule(ReactApplicationContext reactApplicationContext) {
super(reactApplicationContext);
Expand All @@ -31,6 +27,16 @@ public String getName() {
return "IBGReplies";
}

@ReactMethod
public void addListener(String event) {
super.addListener(event);
}

@ReactMethod
public void removeListeners(Integer count) {
super.removeListeners(count);
}

@ReactMethod
public void setEnabled(final boolean isEnabled) {
MainThreadHandler.runOnMainThread(new Runnable() {
Expand Down Expand Up @@ -278,7 +284,7 @@ public void run() {
Runnable onNewReplyReceivedRunnable = new Runnable() {
@Override
public void run() {
InstabugUtil.sendEvent(getReactApplicationContext(), Constants.IBG_ON_NEW_REPLY_RECEIVED_CALLBACK, null);
sendEvent(Constants.IBG_ON_NEW_REPLY_RECEIVED_CALLBACK, null);
}
};
Replies.setOnNewReplyReceivedCallback(onNewReplyReceivedRunnable);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.instabug.reactlibrary;

import android.os.Handler;
import android.os.Looper;

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableArray;
import com.instabug.library.Feature;
import com.instabug.reactlibrary.utils.ArrayUtil;
import com.instabug.reactlibrary.utils.EventEmitterModule;
import com.instabug.reactlibrary.utils.InstabugUtil;
import com.instabug.reactlibrary.utils.MainThreadHandler;
import com.instabug.survey.callbacks.*;
Expand All @@ -22,7 +19,7 @@

import javax.annotation.Nonnull;

public class RNInstabugSurveysModule extends ReactContextBaseJavaModule {
public class RNInstabugSurveysModule extends EventEmitterModule {

public RNInstabugSurveysModule(ReactApplicationContext reactContext) {
super(reactContext);
Expand All @@ -34,6 +31,16 @@ public String getName() {
return "IBGSurveys";
}

@ReactMethod
public void addListener(String event) {
super.addListener(event);
}

@ReactMethod
public void removeListeners(Integer count) {
super.removeListeners(count);
}

/**
* Returns true if the survey with a specific token was answered before.
* Will return false if the token does not exist or if the survey was not answered before.
Expand Down Expand Up @@ -137,7 +144,7 @@ public void run() {
Surveys.setOnShowCallback(new OnShowCallback() {
@Override
public void onShow() {
InstabugUtil.sendEvent(getReactApplicationContext(), Constants.IBG_ON_SHOW_SURVEY_HANDLER, null);
sendEvent(Constants.IBG_ON_SHOW_SURVEY_HANDLER, null);
}
});
}
Expand All @@ -159,7 +166,7 @@ public void run() {
Surveys.setOnDismissCallback(new OnDismissCallback() {
@Override
public void onDismiss() {
InstabugUtil.sendEvent(getReactApplicationContext(), Constants.IBG_ON_DISMISS_SURVEY_HANDLER, null);
sendEvent(Constants.IBG_ON_DISMISS_SURVEY_HANDLER, null);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.instabug.reactlibrary.utils;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

public abstract class EventEmitterModule extends ReactContextBaseJavaModule {
private int listenerCount = 0;

public EventEmitterModule(ReactApplicationContext context) {
super(context);
}

@VisibleForTesting
public void sendEvent(String event, @Nullable WritableMap params) {
if (listenerCount > 0) {
getReactApplicationContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(event, params);
}
}

protected void addListener(String ignoredEvent) {
listenerCount++;
}

protected void removeListeners(Integer count) {
listenerCount -= count;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,6 @@ public static Method getMethod(Class clazz, String methodName, Class... paramete
return null;
}

public static void sendEvent(ReactApplicationContext reactContext,
String eventName,
WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}

/**
* Convenience method to convert from a list of Surveys to a JSON array
*
Expand Down
Loading