Skip to content

Commit 750973f

Browse files
authored
[MOB-9326] Use ArgsRegistry as SSOT (#699)
* Use `ArgsRegistry` as SSOT on Android * Use a more type-safe implementation instead of `getDeserializedValue` and `getRawValue`. * Centralize the constant conversion logic in one place, instead of the scattered methods and implementations. * Reduce the complexity and boilerplate of adding new constant. * Use `ArgsRegistry` as SSOT on iOS * Centralize constants values in `ArgsRegistry`, instead of defining it in both `constantsToExport` and `RCTConvert`. * Remove Deprecated Strings * Remove Inovation Modes * Remove `doneButtonText` * Update Android Unit Tests
1 parent 17b4dce commit 750973f

16 files changed

+786
-1243
lines changed

android/src/main/java/com/instabug/reactlibrary/ArgsRegistry.java

Lines changed: 217 additions & 242 deletions
Large diffs are not rendered by default.

android/src/main/java/com/instabug/reactlibrary/RNInstabugAPMModule.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.facebook.react.bridge.ReactMethod;
1313
import com.instabug.apm.APM;
1414
import com.instabug.apm.model.ExecutionTrace;
15+
import com.instabug.apm.model.LogLevel;
1516
import com.instabug.apm.networking.APMNetworkLogger;
1617
import com.instabug.bug.BugReporting;
1718
import com.instabug.library.Feature;
@@ -80,10 +81,9 @@ public void setLogLevel(final String logLevel) {
8081
@Override
8182
public void run() {
8283
try {
83-
if (ArgsRegistry.getDeserializedValue(logLevel, Integer.class) == null) {
84-
return;
85-
}
86-
APM.setLogLevel((int) ArgsRegistry.getRawValue(logLevel));
84+
final Integer parsedLevel = ArgsRegistry.logLevels.get(logLevel);
85+
if (parsedLevel == null) return;
86+
APM.setLogLevel(parsedLevel);
8787
} catch (Exception e) {
8888
e.printStackTrace();
8989
}

android/src/main/java/com/instabug/reactlibrary/RNInstabugBugReportingModule.java

Lines changed: 40 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import android.annotation.SuppressLint;
44
import android.annotation.TargetApi;
5-
import android.os.Handler;
6-
import android.os.Looper;
75

86
import com.facebook.react.bridge.Arguments;
97
import com.facebook.react.bridge.Callback;
@@ -14,7 +12,6 @@
1412
import com.facebook.react.bridge.WritableMap;
1513
import com.instabug.bug.BugReporting;
1614
import com.instabug.bug.invocation.Option;
17-
import com.instabug.chat.Replies;
1815
import com.instabug.library.Feature;
1916
import com.instabug.library.OnSdkDismissCallback;
2017
import com.instabug.library.extendedbugreport.ExtendedBugReport;
@@ -27,7 +24,6 @@
2724
import com.instabug.reactlibrary.utils.MainThreadHandler;
2825

2926
import java.util.ArrayList;
30-
import java.util.Arrays;
3127

3228
import javax.annotation.Nonnull;
3329

@@ -100,8 +96,9 @@ public void setExtendedBugReportMode(final String extendedBugReportMode) {
10096
@Override
10197
public void run() {
10298
try {
103-
BugReporting.setExtendedBugReportState(
104-
ArgsRegistry.getDeserializedValue(extendedBugReportMode, ExtendedBugReport.State.class));
99+
final ExtendedBugReport.State parsedState = ArgsRegistry.extendedBugReportStates.get(extendedBugReportMode);
100+
if (parsedState == null) return;
101+
BugReporting.setExtendedBugReportState(parsedState);
105102
} catch (Exception e) {
106103
e.printStackTrace();
107104
}
@@ -142,8 +139,9 @@ public void setVideoRecordingFloatingButtonPosition(final String corner) {
142139
@Override
143140
public void run() {
144141
try {
145-
BugReporting.setVideoRecordingFloatingButtonPosition(
146-
ArgsRegistry.getDeserializedValue(corner, InstabugVideoRecordingButtonPosition.class));
142+
final InstabugVideoRecordingButtonPosition parsedPosition = ArgsRegistry.recordButtonPositions.get(corner);
143+
if (parsedPosition == null) return;
144+
BugReporting.setVideoRecordingFloatingButtonPosition(parsedPosition);
147145
} catch (Exception e) {
148146
e.printStackTrace();
149147
}
@@ -183,28 +181,18 @@ public void run() {
183181
*/
184182
@ReactMethod
185183
public void setInvocationEvents(ReadableArray invocationEventValues) {
186-
187-
try {
188-
Object[] objectArray = ArrayUtil.toArray(invocationEventValues);
189-
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
190-
final ArrayList<InstabugInvocationEvent> parsedInvocationEvents = new ArrayList<>();
191-
192-
for (String event : stringArray) {
193-
parsedInvocationEvents.add(ArgsRegistry.getDeserializedValue(event, InstabugInvocationEvent.class));
194-
}
195-
MainThreadHandler.runOnMainThread(new Runnable() {
196-
@Override
197-
public void run() {
198-
try {
199-
BugReporting.setInvocationEvents(parsedInvocationEvents.toArray(new InstabugInvocationEvent[0]));
200-
} catch (Exception e) {
201-
e.printStackTrace();
202-
}
184+
MainThreadHandler.runOnMainThread(new Runnable() {
185+
@Override
186+
public void run() {
187+
try {
188+
final ArrayList<String> keys = ArrayUtil.parseReadableArrayOfStrings(invocationEventValues);
189+
final ArrayList<InstabugInvocationEvent> parsedInvocationEvents = ArgsRegistry.invocationEvents.getAll(keys);
190+
BugReporting.setInvocationEvents(parsedInvocationEvents.toArray(new InstabugInvocationEvent[0]));
191+
} catch (Exception e) {
192+
e.printStackTrace();
203193
}
204-
});
205-
} catch (Exception e) {
206-
e.printStackTrace();
207-
}
194+
}
195+
});
208196
}
209197

210198
/**
@@ -215,14 +203,17 @@ public void run() {
215203
@ReactMethod
216204
public void setOptions(final ReadableArray optionValues) {
217205
MainThreadHandler.runOnMainThread(new Runnable() {
206+
@SuppressLint("WrongConstant")
218207
@Override
219208
public void run() {
220209
try {
221-
Object[] objectArray = ArrayUtil.toArray(optionValues);
222-
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
223-
for (String option : stringArray) {
224-
BugReporting.setOptions((int) ArgsRegistry.getRawValue(option));
210+
final ArrayList<String> keys = ArrayUtil.parseReadableArrayOfStrings(optionValues);
211+
final ArrayList<Integer> options = ArgsRegistry.invocationOptions.getAll(keys);
212+
213+
for (int i = 0; i < options.size(); i++) {
214+
BugReporting.setOptions(options.get(i));
225215
}
216+
226217
} catch (Exception e) {
227218
e.printStackTrace();
228219
}
@@ -267,11 +258,10 @@ public void setFloatingButtonEdge(final String floatingButtonEdge, final int flo
267258
MainThreadHandler.runOnMainThread(new Runnable() {
268259
@Override
269260
public void run() {
261+
final InstabugFloatingButtonEdge parsedEdge = ArgsRegistry.floatingButtonEdges
262+
.getOrDefault(floatingButtonEdge, InstabugFloatingButtonEdge.RIGHT);
270263
BugReporting.setFloatingButtonOffset(floatingButtonOffset);
271-
if (floatingButtonEdge.equals("left"))
272-
BugReporting.setFloatingButtonEdge(InstabugFloatingButtonEdge.LEFT);
273-
else
274-
BugReporting.setFloatingButtonEdge(InstabugFloatingButtonEdge.RIGHT);
264+
BugReporting.setFloatingButtonEdge(parsedEdge);
275265
}
276266
});
277267
}
@@ -333,20 +323,22 @@ public void run() {
333323
* @param types
334324
* @see BugReporting.ReportType
335325
*/
336-
@SuppressLint("WrongConstant")
337326
@ReactMethod
338327
public void setReportTypes(ReadableArray types) {
339-
Object[] objectArray = ArrayUtil.toArray(types);
340-
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
341-
final int[] parsedReportTypes = new int[stringArray.length];
342-
for (int i = 0; i < stringArray.length; i++) {
343-
parsedReportTypes[i] = (int) ArgsRegistry.getRawValue(stringArray[i]);
344-
}
345328
MainThreadHandler.runOnMainThread(new Runnable() {
329+
@SuppressLint("WrongConstant")
346330
@Override
347331
public void run() {
348332
try {
349-
BugReporting.setReportTypes(parsedReportTypes);
333+
final ArrayList<String> keys = ArrayUtil.parseReadableArrayOfStrings(types);
334+
final ArrayList<Integer> types = ArgsRegistry.reportTypes.getAll(keys);
335+
336+
final int[] typesInts = new int[types.size()];
337+
for (int i = 0; i < types.size(); i++) {
338+
typesInts[i] = types.get(i);
339+
}
340+
341+
BugReporting.setReportTypes(typesInts);
350342
} catch (Exception e) {
351343
e.printStackTrace();
352344
}
@@ -366,10 +358,9 @@ public void show(final String reportType, final ReadableArray options) {
366358
MainThreadHandler.runOnMainThread(new Runnable() {
367359
@Override
368360
public void run() {
369-
if (ArgsRegistry.getDeserializedValue(reportType, Integer.class) == null) {
370-
return;
371-
}
372-
BugReporting.show((int) ArgsRegistry.getRawValue(reportType));
361+
final Integer parsedReportType = ArgsRegistry.reportTypes.get(reportType);
362+
if (parsedReportType == null) return;
363+
BugReporting.show(parsedReportType);
373364
setOptions(options);
374365
}
375366
});

android/src/main/java/com/instabug/reactlibrary/RNInstabugFeatureRequestsModule.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.instabug.reactlibrary.utils.InstabugUtil;
1515
import com.instabug.reactlibrary.utils.MainThreadHandler;
1616

17+
import java.util.ArrayList;
1718
import java.util.Arrays;
1819

1920
import javax.annotation.Nonnull;
@@ -37,22 +38,22 @@ public String getName() {
3738
* @param isEmailRequired set true to make email field required
3839
* @param actionTypes Bitwise-or of actions
3940
*/
40-
@SuppressLint("WrongConstant")
4141
@ReactMethod
4242
public void setEmailFieldRequiredForFeatureRequests(final boolean isEmailRequired, final ReadableArray actionTypes) {
4343
MainThreadHandler.runOnMainThread(new Runnable() {
44+
@SuppressLint("WrongConstant")
4445
@Override
4546
public void run() {
4647
try {
47-
Object[] objectArray = ArrayUtil.toArray(actionTypes);
48-
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
49-
int[] parsedActionTypes = new int[stringArray.length];
50-
int i = 0;
51-
for (String action : stringArray) {
52-
parsedActionTypes[i++] = (int) ArgsRegistry.getRawValue(action);
48+
final ArrayList<String> keys = ArrayUtil.parseReadableArrayOfStrings(actionTypes);
49+
final ArrayList<Integer> types = ArgsRegistry.actionTypes.getAll(keys);
50+
51+
final int[] typesInts = new int[types.size()];
52+
for (int i = 0; i < types.size(); i++) {
53+
typesInts[i] = types.get(i);
5354
}
5455

55-
FeatureRequests.setEmailFieldRequired(isEmailRequired, parsedActionTypes);
56+
FeatureRequests.setEmailFieldRequired(isEmailRequired, typesInts);
5657
} catch (Exception e) {
5758
e.printStackTrace();
5859
}

0 commit comments

Comments
 (0)