Skip to content

Commit b734e0f

Browse files
authored
Replace PlatformManager with IBGBuildInfo (#229)
* itReplace `PlatformManager` with `InstaBuildInfo` * Rename to `IBGBuildInfo`
1 parent a1e7ebd commit b734e0f

File tree

9 files changed

+75
-48
lines changed

9 files changed

+75
-48
lines changed

lib/APM.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// ignore_for_file: avoid_classes_with_only_static_members
22

33
import 'dart:async';
4-
import 'dart:io';
54

65
import 'package:flutter/services.dart';
76
import 'package:instabug_flutter/models/network_data.dart';
87
import 'package:instabug_flutter/models/trace.dart';
8+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
99
import 'package:instabug_flutter/utils/ibg_date_time.dart';
1010

1111
enum LogLevel {
@@ -110,7 +110,7 @@ class APM {
110110
}
111111

112112
static Future<bool?> networkLogAndroid(NetworkData data) async {
113-
if (Platform.isAndroid) {
113+
if (IBGBuildInfo.instance.isAndroid) {
114114
final params = <dynamic>[data.toMap()];
115115
return await _channel.invokeMethod<bool>(
116116
'apmNetworkLogByReflection:', params);

lib/BugReporting.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'dart:async';
44

55
import 'package:flutter/services.dart';
66
import 'package:instabug_flutter/Instabug.dart';
7-
import 'package:instabug_flutter/utils/platform_manager.dart';
7+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
88

99
enum InvocationOption {
1010
commentFieldRequired,
@@ -183,7 +183,7 @@ class BugReporting {
183183
/// [iPhoneShakingThreshold] iPhoneShakingThreshold double
184184
static Future<void> setShakingThresholdForiPhone(
185185
double iPhoneShakingThreshold) async {
186-
if (PlatformManager.instance.isIOS()) {
186+
if (IBGBuildInfo.instance.isIOS) {
187187
final List<dynamic> params = <dynamic>[iPhoneShakingThreshold];
188188
await _channel.invokeMethod<Object>(
189189
'setShakingThresholdForiPhone:', params);
@@ -195,7 +195,7 @@ class BugReporting {
195195
/// [iPadShakingThreshold] iPhoneShakingThreshold double
196196
static Future<void> setShakingThresholdForiPad(
197197
double iPadShakingThreshold) async {
198-
if (PlatformManager.instance.isIOS()) {
198+
if (IBGBuildInfo.instance.isIOS) {
199199
final List<dynamic> params = <dynamic>[iPadShakingThreshold];
200200
await _channel.invokeMethod<Object>(
201201
'setShakingThresholdForiPad:', params);
@@ -209,7 +209,7 @@ class BugReporting {
209209
/// [androidThreshold] iPhoneShakingThreshold int
210210
static Future<void> setShakingThresholdForAndroid(
211211
int androidThreshold) async {
212-
if (PlatformManager.instance.isAndroid()) {
212+
if (IBGBuildInfo.instance.isAndroid) {
213213
final List<dynamic> params = <dynamic>[androidThreshold];
214214
await _channel.invokeMethod<Object>(
215215
'setShakingThresholdForAndroid:', params);

lib/CrashReporting.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import 'dart:async';
44
import 'dart:convert';
5-
import 'dart:io' show Platform;
65

76
import 'package:flutter/foundation.dart';
87
import 'package:flutter/services.dart';
98
import 'package:instabug_flutter/models/crash_data.dart';
109
import 'package:instabug_flutter/models/exception_data.dart';
10+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
1111
import 'package:stack_trace/stack_trace.dart';
1212

1313
class CrashReporting {
@@ -25,7 +25,7 @@ class CrashReporting {
2525
}
2626

2727
static Future<void> reportCrash(dynamic exception, StackTrace stack) async {
28-
if (kReleaseMode && enabled) {
28+
if (IBGBuildInfo.instance.isReleaseMode && enabled) {
2929
await _reportUnhandledCrash(exception, stack);
3030
} else {
3131
FlutterError.dumpErrorToConsole(
@@ -58,7 +58,10 @@ class CrashReporting {
5858
trace.frames[i].column ?? 0));
5959
}
6060
final CrashData crashData = CrashData(
61-
exception.toString(), Platform.operatingSystem.toString(), frames);
61+
exception.toString(),
62+
IBGBuildInfo.instance.operatingSystem,
63+
frames,
64+
);
6265
final List<dynamic> params = <dynamic>[jsonEncode(crashData), handled];
6366
await _channel.invokeMethod<Object>(
6467
'sendJSCrashByReflection:handled:', params);

lib/Instabug.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
// ignore_for_file: avoid_classes_with_only_static_members
22

33
import 'dart:async';
4-
import 'dart:io' show Platform;
54
import 'dart:typed_data';
65
import 'dart:ui';
76

87
import 'package:flutter/services.dart';
9-
import 'package:instabug_flutter/utils/platform_manager.dart';
8+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
109

1110
enum InvocationEvent {
1211
shake,
@@ -250,7 +249,7 @@ class Instabug {
250249
/// Enable/disable SDK logs
251250
/// [debugEnabled] desired state of debug mode.
252251
static Future<void> setDebugEnabled(bool debugEnabled) async {
253-
if (PlatformManager.instance.isAndroid()) {
252+
if (IBGBuildInfo.instance.isAndroid) {
254253
final List<dynamic> params = <dynamic>[debugEnabled];
255254
await _channel.invokeMethod<Object>('setDebugEnabled:', params);
256255
}
@@ -276,7 +275,7 @@ class Instabug {
276275
///[fileName] of the file
277276
static Future<void> addFileAttachmentWithURL(
278277
String filePath, String fileName) async {
279-
if (Platform.isIOS) {
278+
if (IBGBuildInfo.instance.isIOS) {
280279
final List<dynamic> params = <dynamic>[filePath];
281280
await _channel.invokeMethod<Object>('addFileAttachmentWithURL:', params);
282281
} else {
@@ -290,7 +289,7 @@ class Instabug {
290289
///[fileName] of the file
291290
static Future<void> addFileAttachmentWithData(
292291
Uint8List data, String fileName) async {
293-
if (Platform.isIOS) {
292+
if (IBGBuildInfo.instance.isIOS) {
294293
final List<dynamic> params = <dynamic>[data];
295294
await _channel.invokeMethod<Object>('addFileAttachmentWithData:', params);
296295
} else {
@@ -330,15 +329,15 @@ class Instabug {
330329
///Android Only
331330
///Enables all Instabug functionality
332331
static Future<void> enableAndroid() async {
333-
if (Platform.isAndroid) {
332+
if (IBGBuildInfo.instance.isAndroid) {
334333
await _channel.invokeMethod<Object>('enable:');
335334
}
336335
}
337336

338337
///Android Only
339338
///Disables all Instabug functionality
340339
static Future<void> disableAndroid() async {
341-
if (Platform.isAndroid) {
340+
if (IBGBuildInfo.instance.isAndroid) {
342341
await _channel.invokeMethod<Object>('disable:');
343342
}
344343
}

lib/Replies.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import 'dart:async';
44

55
import 'package:flutter/services.dart';
6-
import 'package:instabug_flutter/utils/platform_manager.dart';
6+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
77

88
class Replies {
99
static Function? _hasChatsCallback;
@@ -78,7 +78,7 @@ class Replies {
7878
/// [isEnabled] A boolean to set whether notifications sound should be played.
7979
/// @android ONLY
8080
static Future<void> setInAppNotificationSound(bool isEnabled) async {
81-
if (PlatformManager.instance.isAndroid()) {
81+
if (IBGBuildInfo.instance.isAndroid) {
8282
final List<dynamic> params = <dynamic>[isEnabled];
8383
await _channel.invokeMethod<Object>(
8484
'setEnableInAppNotificationSound:', params);

lib/Surveys.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import 'dart:async';
44

55
import 'package:flutter/services.dart';
6-
import 'package:instabug_flutter/utils/platform_manager.dart';
6+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
77

88
class Surveys {
99
static Function? _onShowCallback;
@@ -131,7 +131,7 @@ class Surveys {
131131
/// NPS Surveys or AppRating Surveys to AppStore to let users rate your app on AppStore itself.
132132
/// [appStoreURL] A String url for the published iOS app on AppStore
133133
static Future<void> setAppStoreURL(String appStoreURL) async {
134-
if (PlatformManager.instance.isIOS()) {
134+
if (IBGBuildInfo.instance.isIOS) {
135135
final List<dynamic> params = <dynamic>[appStoreURL];
136136
await _channel.invokeMethod<Object>('setAppStoreURL:', params);
137137
}

lib/utils/ibg_build_info.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'dart:io';
2+
3+
import 'package:flutter/foundation.dart';
4+
5+
/// Mockable class that contains info about the
6+
/// [Platform], the OS and build modes.
7+
class IBGBuildInfo {
8+
IBGBuildInfo._();
9+
10+
static IBGBuildInfo _instance = IBGBuildInfo._();
11+
static IBGBuildInfo get instance => _instance;
12+
13+
/// Shorthand for [instance]
14+
static IBGBuildInfo get I => instance;
15+
16+
@visibleForTesting
17+
static void setInstance(IBGBuildInfo instance) {
18+
_instance = instance;
19+
}
20+
21+
bool get isAndroid => Platform.isAndroid;
22+
bool get isIOS => Platform.isIOS;
23+
24+
String get operatingSystem => Platform.operatingSystem;
25+
26+
bool get isReleaseMode => kReleaseMode;
27+
bool get isDebugMode => kDebugMode;
28+
}

lib/utils/platform_manager.dart

Lines changed: 0 additions & 14 deletions
This file was deleted.

test/instabug_flutter_test.dart

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import 'dart:convert';
2-
import 'dart:io';
32
import 'dart:typed_data';
4-
import 'dart:ui';
53

64
import 'package:flutter/cupertino.dart';
75
import 'package:flutter/services.dart';
@@ -19,16 +17,16 @@ import 'package:instabug_flutter/models/crash_data.dart';
1917
import 'package:instabug_flutter/models/exception_data.dart';
2018
import 'package:instabug_flutter/models/network_data.dart';
2119
import 'package:instabug_flutter/models/trace.dart' as execution_trace;
20+
import 'package:instabug_flutter/utils/ibg_build_info.dart';
2221
import 'package:instabug_flutter/utils/ibg_date_time.dart';
23-
import 'package:instabug_flutter/utils/platform_manager.dart';
2422
import 'package:mockito/annotations.dart';
2523
import 'package:mockito/mockito.dart';
2624
import 'package:stack_trace/stack_trace.dart';
2725

2826
import 'instabug_flutter_test.mocks.dart';
2927

3028
@GenerateMocks([
31-
PlatformManager,
29+
IBGBuildInfo,
3230
IBGDateTime,
3331
])
3432
void main() {
@@ -46,7 +44,7 @@ void main() {
4644
const Map<String, String> userAttributePair = <String, String>{
4745
'gender': 'female'
4846
};
49-
late MockPlatformManager mockPlatform;
47+
late MockIBGBuildInfo mockBuildInfo;
5048

5149
const String url = 'https://jsonplaceholder.typicode.com';
5250
const String method = 'POST';
@@ -98,8 +96,8 @@ void main() {
9896
});
9997

10098
setUp(() {
101-
mockPlatform = MockPlatformManager();
102-
PlatformManager.setPlatformInstance(mockPlatform);
99+
mockBuildInfo = MockIBGBuildInfo();
100+
IBGBuildInfo.setInstance(mockBuildInfo);
103101
});
104102

105103
tearDown(() async {
@@ -419,7 +417,7 @@ void main() {
419417
});
420418

421419
test('setDebugEnabled: Test', () async {
422-
when(mockPlatform.isAndroid()).thenAnswer((_) => true);
420+
when(mockBuildInfo.isAndroid).thenReturn(true);
423421

424422
const bool debugEnabled = true;
425423
final List<dynamic> args = <dynamic>[debugEnabled];
@@ -460,7 +458,10 @@ void main() {
460458
const filePath = 'filePath';
461459
const fileName = 'fileName';
462460
final List<dynamic> args = <dynamic>[filePath, fileName];
461+
462+
when(mockBuildInfo.isIOS).thenReturn(false);
463463
await Instabug.addFileAttachmentWithURL(filePath, fileName);
464+
464465
expect(log, <Matcher>[
465466
isMethodCall(
466467
'addFileAttachmentWithURL:',
@@ -473,7 +474,10 @@ void main() {
473474
final bdata = Uint8List(10);
474475
const fileName = 'fileName';
475476
final List<dynamic> args = <dynamic>[bdata, fileName];
477+
478+
when(mockBuildInfo.isIOS).thenReturn(false);
476479
await Instabug.addFileAttachmentWithData(bdata, fileName);
480+
477481
expect(log, <Matcher>[
478482
isMethodCall(
479483
'addFileAttachmentWithData:',
@@ -542,7 +546,7 @@ void main() {
542546
const iPhoneShakingThreshold = 1.6;
543547
final List<dynamic> args = <dynamic>[iPhoneShakingThreshold];
544548

545-
when(mockPlatform.isIOS()).thenAnswer((_) => true);
549+
when(mockBuildInfo.isIOS).thenReturn(true);
546550

547551
await BugReporting.setShakingThresholdForiPhone(iPhoneShakingThreshold);
548552
expect(log, <Matcher>[
@@ -557,7 +561,7 @@ void main() {
557561
const iPadShakingThreshold = 1.6;
558562
final List<dynamic> args = <dynamic>[iPadShakingThreshold];
559563

560-
when(mockPlatform.isIOS()).thenAnswer((_) => true);
564+
when(mockBuildInfo.isIOS).thenReturn(true);
561565

562566
await BugReporting.setShakingThresholdForiPad(iPadShakingThreshold);
563567
expect(log, <Matcher>[
@@ -572,7 +576,7 @@ void main() {
572576
const androidThreshold = 1000;
573577
final List<dynamic> args = <dynamic>[androidThreshold];
574578

575-
when(mockPlatform.isAndroid()).thenAnswer((_) => true);
579+
when(mockBuildInfo.isAndroid).thenReturn(true);
576580

577581
await BugReporting.setShakingThresholdForAndroid(androidThreshold);
578582
expect(log, <Matcher>[
@@ -814,7 +818,7 @@ void main() {
814818
const appStoreURL = 'appStoreURL';
815819
final List<dynamic> args = <dynamic>[appStoreURL];
816820

817-
when(mockPlatform.isIOS()).thenAnswer((_) => true);
821+
when(mockBuildInfo.isIOS).thenReturn(true);
818822

819823
await Surveys.setAppStoreURL(appStoreURL);
820824
expect(log, <Matcher>[
@@ -863,7 +867,7 @@ void main() {
863867
const isEnabled = false;
864868
final List<dynamic> args = <dynamic>[isEnabled];
865869

866-
when(mockPlatform.isAndroid()).thenAnswer((_) => true);
870+
when(mockBuildInfo.isAndroid).thenReturn(true);
867871

868872
await Replies.setInAppNotificationSound(isEnabled);
869873
expect(log, <Matcher>[
@@ -914,7 +918,10 @@ void main() {
914918
NetworkData(method: 'method', url: 'url', startTime: DateTime.now());
915919
final List<dynamic> args = <dynamic>[data.toMap()];
916920
final networkLogger = NetworkLogger();
921+
922+
when(mockBuildInfo.isAndroid).thenReturn(false);
917923
await networkLogger.networkLog(data);
924+
918925
expect(log, <Matcher>[
919926
isMethodCall(
920927
'networkLog:',
@@ -950,8 +957,12 @@ void main() {
950957
trace.frames[i].line,
951958
trace.frames[i].column == null ? 0 : trace.frames[i].column!));
952959
}
960+
when(mockBuildInfo.operatingSystem).thenReturn('test');
953961
final crashData = CrashData(
954-
exception.toString(), Platform.operatingSystem.toString(), frames);
962+
exception.toString(),
963+
IBGBuildInfo.instance.operatingSystem,
964+
frames,
965+
);
955966
final List<dynamic> args = <dynamic>[jsonEncode(crashData), handled];
956967
await CrashReporting.reportHandledCrash(exception, stack);
957968
expect(log, <Matcher>[

0 commit comments

Comments
 (0)