11import 'dart:async' ;
22import 'dart:io' ;
3-
43import 'package:app/access/bugsee/bugsee_configuration_data.dart' ;
54import 'package:app/access/bugsee/bugsee_repository.dart' ;
5+ import 'package:app/business/bugsee/bugsee_config_state.dart' ;
66import 'package:bugsee_flutter/bugsee_flutter.dart' ;
77import 'package:flutter/foundation.dart' ;
8+ import 'package:flutter_dotenv/flutter_dotenv.dart' ;
89import 'package:logger/logger.dart' ;
910import 'package:logger/web.dart' ;
1011
@@ -18,25 +19,8 @@ abstract interface class BugseeManager {
1819 required BugseeRepository bugseeRepository,
1920 }) = _BugseeManager ;
2021
21- /// indicate if the app require a restart to reactivate the bugsee configurations
22- ///
23- /// `true` only if `isConfigurationValid == true` and bugsee is turned on
24- bool get isRestartRequired;
25-
26- /// indicate if bugsee is enabled or not
27- /// by default bugsee is enabled if `isConfigurationValid == true` .
28- bool get isBugseeEnabled;
29-
30- /// indicate whether video capturing is enabled or not.
31- /// enabled by default if `isBugseeEnabled == true` .
32- ///
33- /// cannot be true if `isBugseeEnabled == false` .
34- bool get isVideoCaptureEnabled;
35-
36- /// indicate if bugsee configuration is valid
37- /// config is valid if app in release mode and the provided token is valid
38- /// following the [bugseeTokenFormat] regex.
39- bool get isConfigurationValid;
22+ /// Current BugseeManager state
23+ BugseeConfigState get bugseeConfigState;
4024
4125 /// initialize bugsee with given token
4226 /// bugsee is not available in debug mode
@@ -61,10 +45,13 @@ abstract interface class BugseeManager {
6145 });
6246
6347 /// Manually update the current BugseeEnabled flag in shared prefs and in current manager singleton.
64- Future <void > setIsBugseeEnabled (bool isBugseeEnabled);
48+ Future <void > setIsBugseeEnabled (bool value);
49+
50+ /// Manually update isDataObscured flag in shared prefs and in current state [bugseeConfigState] .
51+ Future <void > setIsDataObscured (bool value);
6552
6653 /// Manually update the current enableVideoCapture flag in shared prefs and in current manager singleton.
67- Future <void > setIsVideoCaptureEnabled (bool isBugseeEnabled );
54+ Future <void > setIsVideoCaptureEnabled (bool value );
6855
6956 /// Manually shows the built-in capture log report screen of Bugsee.
7057 Future <void > showCaptureLogReport ();
@@ -79,17 +66,11 @@ final class _BugseeManager implements BugseeManager {
7966 required this .bugseeRepository,
8067 });
8168
82- @override
83- bool isRestartRequired = false ;
84-
85- @override
86- bool isBugseeEnabled = false ;
87-
88- @override
89- late bool isVideoCaptureEnabled = false ;
69+ bool _initialDataObscuredState = false ;
70+ BugseeConfigState _currentState = BugseeConfigState ();
9071
9172 @override
92- bool isConfigurationValid = true ;
73+ BugseeConfigState get bugseeConfigState => _currentState ;
9374
9475 late bool _isBugSeeInitialized;
9576 BugseeLaunchOptions ? launchOptions;
@@ -105,14 +86,18 @@ final class _BugseeManager implements BugseeManager {
10586 _isBugSeeInitialized = false ;
10687
10788 if (kDebugMode) {
108- isConfigurationValid = false ;
89+ _currentState = _currentState.copyWith (
90+ isConfigurationValid: false ,
91+ );
10992 logger.i ("BUGSEE: deactivated in debug mode" );
11093 return ;
11194 }
11295
11396 if (bugseeToken == null ||
11497 ! RegExp (bugseeTokenFormat).hasMatch (bugseeToken)) {
115- isConfigurationValid = false ;
98+ _currentState = _currentState.copyWith (
99+ isConfigurationValid: false ,
100+ );
116101 logger.i (
117102 "BUGSEE: token is null or invalid, bugsee won't be initialized" ,
118103 );
@@ -123,9 +108,17 @@ final class _BugseeManager implements BugseeManager {
123108 await _launchBugseeLogger (bugseeToken);
124109 }
125110
126- isBugseeEnabled = _isBugSeeInitialized;
127- isVideoCaptureEnabled = _isBugSeeInitialized &&
128- (bugseeConfigurationData.isVideoCaptureEnabled ?? true );
111+ var isDataObscured = bugseeConfigurationData.isDataObscrured ??
112+ bool .parse (dotenv.env['IS_DATA_OBSCURE' ] ?? 'false' );
113+
114+ _currentState = _currentState.copyWith (
115+ isConfigurationValid: _isBugSeeInitialized,
116+ isBugseeEnabled: _isBugSeeInitialized,
117+ isVideoCaptureEnabled: _isBugSeeInitialized &&
118+ (bugseeConfigurationData.isVideoCaptureEnabled ?? true ),
119+ isDataObscured: isDataObscured,
120+ );
121+ _initialDataObscuredState = isDataObscured;
129122 }
130123
131124 Future _launchBugseeLogger (String bugseeToken) async {
@@ -158,7 +151,7 @@ final class _BugseeManager implements BugseeManager {
158151 required Exception exception,
159152 StackTrace ? stackTrace,
160153 }) async {
161- if (isBugseeEnabled) {
154+ if (_currentState. isBugseeEnabled) {
162155 await Bugsee .logException (exception, stackTrace);
163156 }
164157 }
@@ -168,32 +161,38 @@ final class _BugseeManager implements BugseeManager {
168161 required Exception exception,
169162 StackTrace ? stackTrace,
170163 }) async {
171- if (isBugseeEnabled) {
164+ if (_currentState. isBugseeEnabled) {
172165 await Bugsee .logUnhandledException (exception);
173166 }
174167 }
175168
176169 @override
177170 Future <void > setIsBugseeEnabled (bool value) async {
178- if (isConfigurationValid) {
179- isBugseeEnabled = value;
180- await bugseeRepository.setIsBugseeEnabled (isBugseeEnabled);
181-
182- isRestartRequired = _isBugSeeInitialized && isBugseeEnabled;
183- isVideoCaptureEnabled = isBugseeEnabled;
171+ if (_currentState.isConfigurationValid) {
172+ await bugseeRepository.setIsBugseeEnabled (value);
173+ _currentState = _currentState.copyWith (
174+ isBugseeEnabled: value,
175+ isRestartRequired: value,
176+ isVideoCaptureEnabled: value,
177+ isDataObscured: value,
178+ );
184179
185- if (! isRestartRequired) {
180+ if (! _currentState. isRestartRequired) {
186181 await Bugsee .stop ();
187182 }
188183 }
189184 }
190185
191186 @override
192187 Future <void > setIsVideoCaptureEnabled (bool value) async {
193- if (isBugseeEnabled) {
194- isVideoCaptureEnabled = value;
195- await bugseeRepository.setIsVideoCaptureEnabled (isVideoCaptureEnabled);
196- if (! isVideoCaptureEnabled) {
188+ if (_currentState.isBugseeEnabled) {
189+ _currentState = _currentState.copyWith (
190+ isVideoCaptureEnabled: value,
191+ );
192+ await bugseeRepository.setIsVideoCaptureEnabled (
193+ _currentState.isVideoCaptureEnabled,
194+ );
195+ if (! _currentState.isVideoCaptureEnabled) {
197196 await Bugsee .pause ();
198197 } else {
199198 await Bugsee .resume ();
@@ -203,8 +202,19 @@ final class _BugseeManager implements BugseeManager {
203202
204203 @override
205204 Future <void > showCaptureLogReport () async {
206- if (isBugseeEnabled) {
205+ if (_currentState. isBugseeEnabled) {
207206 await Bugsee .showReportDialog ();
208207 }
209208 }
209+
210+ @override
211+ Future <void > setIsDataObscured (bool value) async {
212+ if (_currentState.isBugseeEnabled) {
213+ await bugseeRepository.setIsDataObscure (value);
214+ _currentState = _currentState.copyWith (
215+ isRestartRequired: value != _initialDataObscuredState,
216+ isDataObscured: value,
217+ );
218+ }
219+ }
210220}
0 commit comments