Skip to content

Commit f7d5540

Browse files
authored
[IBGCORE-17136] Add BugReporting.setVideoRecordingFloatingButtonPosition API (#269)
* Add `Position` enum to ArgsRegistry and Constants * Add `setVideoRecordingFloatingButtonPosition` on Android * Add Dart API for `setVideoRecordingFloatingButtonPosition` * Add `setVideoRecordingFloatingButtonPosition` on iOS * Update CHANGELOG * Test `setVideoRecordingFloatingButtonPosition` * Test iOS `setVideoRecordingFloatingButtonPosition` * Test Android `setVideoRecordingFloatingButtonPosition` * Fix typo in CHANGELOG * Update CHANGELOG Remove backticks as they cause issues on the dashboard
1 parent 0fc99fa commit f7d5540

File tree

10 files changed

+113
-0
lines changed

10 files changed

+113
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## Unreleased
2+
3+
* Adds BugReporting.setVideoRecordingFloatingButtonPosition API
4+
15
## 11.2.0 (2022-09-08)
26

37
* Bumps Instabug Android SDK to v11.4.1

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.instabug.featuresrequest.ActionType;
66
import com.instabug.library.InstabugColorTheme;
77
import com.instabug.library.invocation.util.InstabugFloatingButtonEdge;
8+
import com.instabug.library.invocation.util.InstabugVideoRecordingButtonPosition;
89
import com.instabug.library.InstabugCustomTextPlaceHolder;
910
import com.instabug.library.extendedbugreport.ExtendedBugReport;
1011
import com.instabug.library.visualusersteps.State;
@@ -58,6 +59,7 @@ final class ArgsRegistry {
5859
registerLocaleArgs(ARGS);
5960
registerInvocationOptionsArgs(ARGS);
6061
registerInstabugFloatingButtonEdgeArgs(ARGS);
62+
registerInstabugVideoRecordingButtonPositionArgs(ARGS);
6163
registerCustomTextPlaceHolderKeysArgs(ARGS);
6264
registerInstabugReportTypesArgs(ARGS);
6365
registerInstabugExtendedBugReportModeArgs(ARGS);
@@ -130,6 +132,13 @@ static void registerInstabugFloatingButtonEdgeArgs(Map<String, Object> args) {
130132
args.put("FloatingButtonEdge.right", InstabugFloatingButtonEdge.RIGHT);
131133
}
132134

135+
static void registerInstabugVideoRecordingButtonPositionArgs(Map<String, Object> args) {
136+
args.put("Position.topRight", InstabugVideoRecordingButtonPosition.TOP_RIGHT);
137+
args.put("Position.topLeft", InstabugVideoRecordingButtonPosition.TOP_LEFT);
138+
args.put("Position.bottomRight", InstabugVideoRecordingButtonPosition.BOTTOM_RIGHT);
139+
args.put("Position.bottomLeft", InstabugVideoRecordingButtonPosition.BOTTOM_LEFT);
140+
}
141+
133142
static void registerInvocationOptionsArgs(Map<String, Object> args) {
134143
args.put("InvocationOption.commentFieldRequired", Option.COMMENT_FIELD_REQUIRED);
135144
args.put("InvocationOption.disablePostSendingDialog", Option.DISABLE_POST_SENDING_DIALOG);

android/src/main/java/com/instabug/flutter/InstabugFlutterPlugin.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.instabug.library.invocation.InstabugInvocationEvent;
2929
import com.instabug.library.invocation.OnInvokeCallback;
3030
import com.instabug.library.invocation.util.InstabugFloatingButtonEdge;
31+
import com.instabug.library.invocation.util.InstabugVideoRecordingButtonPosition;
3132
import com.instabug.library.logging.InstabugLog;
3233
import com.instabug.library.model.NetworkLog;
3334
import com.instabug.library.ui.onboarding.WelcomeMessage;
@@ -297,6 +298,16 @@ public void setFloatingButtonEdge(String floatingButtonEdge, int floatingButtonO
297298
BugReporting.setFloatingButtonOffset(floatingButtonOffset);
298299
}
299300

301+
/**
302+
* Sets the position of the video recording button when using the screen recording attachment functionality.
303+
*
304+
* @param videoRecordingButtonPosition position of the video recording floating button on the screen.
305+
*/
306+
public void setVideoRecordingFloatingButtonPosition(String videoRecordingButtonPosition) {
307+
InstabugVideoRecordingButtonPosition resolvedVideoRecordingButtonPosition = ArgsRegistry.getDeserializedValue(videoRecordingButtonPosition, InstabugVideoRecordingButtonPosition.class);
308+
BugReporting.setVideoRecordingFloatingButtonPosition(resolvedVideoRecordingButtonPosition);
309+
}
310+
300311
/**
301312
* Appends a set of tags to previously added tags of reported feedback, bug or
302313
* crash.

example/android/app/src/main/kotlin/com/example/InstabugSample/OnMethodCallTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,15 @@ public void testSetFloatingButtonEdge(){
158158
verify(instabugMock).setFloatingButtonEdge("FloatingButtonEdge.left", 300);
159159
}
160160

161+
public void testSetVideoRecordingFloatingButtonPosition(){
162+
String methodName = "setVideoRecordingFloatingButtonPosition";
163+
ArrayList<Object> argsList = new ArrayList<>();
164+
argsList.add("Position.topRight");
165+
Mockito.doNothing().when(instabugMock).setVideoRecordingFloatingButtonPosition(any(String.class));
166+
testMethodCall(methodName, argsList);
167+
verify(instabugMock).setVideoRecordingFloatingButtonPosition("Position.topRight");
168+
}
169+
161170
public void testAddFileAttachmentWithData() {
162171
String methodName = "addFileAttachmentWithData";
163172
ArrayList<Object> argsList = new ArrayList<>();

example/android/app/src/test/java/com/example/InstabugSample/InstabugFlutterPluginTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ public void testSetFloatingButtonEdge() {
105105
new OnMethodCallTests().testSetFloatingButtonEdge();
106106
}
107107

108+
/**
109+
* (String)
110+
*/
111+
@Test
112+
public void testSetVideoRecordingFloatingButtonPosition() {
113+
new OnMethodCallTests().testSetVideoRecordingFloatingButtonPosition();
114+
}
115+
108116
/**
109117
* (byte[], String)
110118
*/

example/ios/InstabugSampleTests/InstabugSampleTests.m

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,24 @@ - (void)testSetFloatingButtonEdge {
217217
[self waitForExpectationsWithTimeout:kTimeout handler:nil];
218218
}
219219

220+
- (void)testSetVideoRecordingFloatingButtonPosition {
221+
id mock = OCMClassMock([InstabugFlutterPlugin class]);
222+
InstabugFlutterPlugin *instabug = [[InstabugFlutterPlugin alloc] init];
223+
224+
NSArray *arguments = [NSArray arrayWithObjects:@"Position.topRight", nil];
225+
FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"setVideoRecordingFloatingButtonPosition:" arguments:arguments];
226+
[[[mock stub] classMethod] setVideoRecordingFloatingButtonPosition:@"Position.topRight"];
227+
228+
XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
229+
[instabug handleMethodCall:call result:^(id _Nullable result) {
230+
XCTAssertNil(result);
231+
[expectation fulfill];
232+
}];
233+
234+
[[[mock verify] classMethod] setVideoRecordingFloatingButtonPosition:@"Position.topRight"];
235+
[self waitForExpectationsWithTimeout:kTimeout handler:nil];
236+
}
237+
220238
- (void)testAddFileAttachmentWithData {
221239
id mock = OCMClassMock([InstabugFlutterPlugin class]);
222240
InstabugFlutterPlugin *instabug = [[InstabugFlutterPlugin alloc] init];

ios/Classes/InstabugFlutterPlugin.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@
109109
*/
110110
+ (void)setFloatingButtonEdge:(NSString *)floatingButtonEdge withTopOffset:(NSNumber *)floatingButtonTopOffset;
111111

112+
/**
113+
* Sets the position of the video recording button when using the screen recording attachment functionality.
114+
* @param position Position of the video recording floating button on the screen.
115+
*/
116+
+ (void)setVideoRecordingFloatingButtonPosition:(NSString *)position;
117+
112118
/**
113119
* Appends a set of tags to previously added tags of reported feedback, bug or crash.
114120
* @param tags An array of tags to append to current tags.

ios/Classes/InstabugFlutterPlugin.m

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,16 @@ + (void)setFloatingButtonEdge:(NSString *)floatingButtonEdge withTopOffset:(NSNu
225225
IBGBugReporting.floatingButtonTopOffset = offsetFromTop;
226226
}
227227

228+
/**
229+
* Sets the position of the video recording button when using the screen recording attachment functionality.
230+
* @param position Position of the video recording floating button on the screen.
231+
*/
232+
+ (void)setVideoRecordingFloatingButtonPosition:(NSString *)position {
233+
NSDictionary *constants = [self constants];
234+
IBGPosition intPosition = ((NSNumber *) constants[position]).doubleValue;
235+
IBGBugReporting.videoRecordingFloatingButtonPosition = intPosition;
236+
}
237+
228238
/**
229239
* Appends a set of tags to previously added tags of reported feedback, bug or crash.
230240
* @param tags An array of tags to append to current tags.
@@ -1018,6 +1028,11 @@ + (NSDictionary *)constants {
10181028

10191029
@"FloatingButtonEdge.left": @(CGRectMinXEdge),
10201030
@"FloatingButtonEdge.right": @(CGRectMaxXEdge),
1031+
1032+
@"Position.topRight": @(IBGPositionTopRight),
1033+
@"Position.topLeft": @(IBGPositionTopLeft),
1034+
@"Position.bottomRight": @(IBGPositionBottomRight),
1035+
@"Position.bottomLeft": @(IBGPositionBottomLeft),
10211036

10221037
@"InvocationOption.commentFieldRequired": @(IBGBugReportingOptionCommentFieldRequired),
10231038
@"InvocationOption.disablePostSendingDialog": @(IBGBugReportingOptionDisablePostSendingDialog),

lib/src/modules/bug_reporting.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ enum ExtendedBugReportMode {
2525

2626
enum FloatingButtonEdge { left, right }
2727

28+
enum Position {
29+
topRight,
30+
topLeft,
31+
bottomRight,
32+
bottomLeft,
33+
}
34+
2835
typedef OnSDKInvokeCallback = void Function();
2936
typedef OnSDKDismissCallback = void Function(DismissType, ReportType);
3037

@@ -191,6 +198,18 @@ class BugReporting {
191198
);
192199
}
193200

201+
/// Sets the position of the video recording button when using the screen recording attachment functionality.
202+
/// [position] Position of the video recording floating button on the screen.
203+
static Future<void> setVideoRecordingFloatingButtonPosition(
204+
Position position,
205+
) async {
206+
final params = <dynamic>[position.toString()];
207+
return _channel.invokeMethod(
208+
'setVideoRecordingFloatingButtonPosition:',
209+
params,
210+
);
211+
}
212+
194213
/// Invoke bug reporting with report type and options.
195214
/// [reportType] type
196215
/// [invocationOptions] List of invocation options

test/instabug_flutter_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,20 @@ void main() {
248248
]);
249249
});
250250

251+
test(
252+
'test setVideoRecordingFloatingButtonPosition should be called with argument position',
253+
() async {
254+
const position = Position.topRight;
255+
await BugReporting.setVideoRecordingFloatingButtonPosition(position);
256+
final args = <dynamic>[position.toString()];
257+
expect(log, <Matcher>[
258+
isMethodCall(
259+
'setVideoRecordingFloatingButtonPosition:',
260+
arguments: args,
261+
)
262+
]);
263+
});
264+
251265
test('test appendTags should be called with argument List of strings',
252266
() async {
253267
const tags = ['tag1', 'tag2'];

0 commit comments

Comments
 (0)