@@ -38,6 +38,8 @@ import 'package:path_provider/path_provider.dart';
3838import 'package:tray_manager/tray_manager.dart' ;
3939import 'package:window_manager/window_manager.dart' ;
4040
41+ var countTimeReminderTrackInSeconds = 0 ;
42+
4143class HomePage extends StatefulWidget {
4244 static const routePath = '/home' ;
4345 static const routeName = 'home' ;
@@ -65,7 +67,6 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
6567 final notificationHelper = sl <NotificationHelper >();
6668 final intervalScreenshot = 60 * 5 ; // 300 detik (5 menit)
6769 final listTrackLocal = < Track > [];
68- final intervalReminderNotTrack = 60 * 10 ; // 600 detik (10 menit)
6970
7071 var isWindowVisible = true ;
7172 var userId = '' ;
@@ -76,7 +77,6 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
7677 TrackTask ? selectedTask;
7778 Timer ? timeTrack, timerCronTrack, timerDate;
7879 var countTimerInSeconds = 0 ;
79- var countTimerReminderNotTrack = 0 ;
8080 var isHaveActivity = false ;
8181 var counterActivity = 0 ;
8282 DateTime ? startTime;
@@ -127,13 +127,93 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
127127 );
128128 timerDate = Timer .periodic (const Duration (seconds: 1 ), (_) {
129129 if (! isTimerStart) {
130- countTimerReminderNotTrack += 1 ;
131- if (countTimerReminderNotTrack == intervalReminderNotTrack) {
132- countTimerReminderNotTrack = 0 ;
133- notificationHelper.showReminderNotTrackNotification ();
130+ // reminder track
131+ var isShowReminderTrack = false ;
132+ final now = DateTime .now ();
133+ countTimeReminderTrackInSeconds += 1 ;
134+ final isEnableReminderTrack =
135+ sharedPreferencesManager.getBool (SharedPreferencesManager .keyIsEnableReminderTrack) ?? false ;
136+ if (isEnableReminderTrack) {
137+ DateTime ? startReminderTrack, finishReminderTrack;
138+ final strStartReminderTrack = sharedPreferencesManager.getString (
139+ SharedPreferencesManager .keyStartTimeReminderTrack,
140+ ) ??
141+ '' ;
142+ if (strStartReminderTrack.contains (':' ) && strStartReminderTrack.split (':' ).length == 2 ) {
143+ final splitStrStartReminderTrack = strStartReminderTrack.split (':' );
144+ final strStartHourReminderTrack = splitStrStartReminderTrack.first;
145+ final strStartMinuteReminderTrack = splitStrStartReminderTrack.last;
146+ final startHourReminderTrack = int .tryParse (strStartHourReminderTrack);
147+ final startMinuteReminderTrack = int .tryParse (strStartMinuteReminderTrack);
148+ if (startHourReminderTrack != null && startMinuteReminderTrack != null ) {
149+ startReminderTrack = DateTime (
150+ now.year,
151+ now.month,
152+ now.day,
153+ startHourReminderTrack,
154+ startMinuteReminderTrack,
155+ );
156+ }
157+ }
158+
159+ final strFinishReminderTrack = sharedPreferencesManager.getString (
160+ SharedPreferencesManager .keyFinishTimeReminderTrack,
161+ ) ??
162+ '' ;
163+ if (strFinishReminderTrack.contains (':' ) && strFinishReminderTrack.split (':' ).length == 2 ) {
164+ final splitStrFinishReminderTrack = strFinishReminderTrack.split (':' );
165+ final strFinishHourReminderTrack = splitStrFinishReminderTrack.first;
166+ final strFinishMinuteReminderTrack = splitStrFinishReminderTrack.last;
167+ final finishHourReminderTrack = int .tryParse (strFinishHourReminderTrack);
168+ final finishMinuteReminderTrack = int .tryParse (strFinishMinuteReminderTrack);
169+ if (finishHourReminderTrack != null && finishMinuteReminderTrack != null ) {
170+ finishReminderTrack = DateTime (
171+ now.year,
172+ now.month,
173+ now.day,
174+ finishHourReminderTrack,
175+ finishMinuteReminderTrack,
176+ );
177+ }
178+ }
179+
180+ final daysReminderTrack =
181+ sharedPreferencesManager.getStringList (SharedPreferencesManager .keyDayReminderTrack) ?? [];
182+ final nowWeekday = now.weekday;
183+ final isTodayReminderTrackEnabled =
184+ daysReminderTrack.where ((element) => element == nowWeekday.toString ()).isNotEmpty;
185+
186+ int ? intervalReminderTrackInSeconds;
187+ final intervalReminderTrackInMinutes =
188+ sharedPreferencesManager.getInt (SharedPreferencesManager .keyIntervalReminderTrack) ?? - 1 ;
189+ if (intervalReminderTrackInMinutes != - 1 && intervalReminderTrackInMinutes > 0 ) {
190+ intervalReminderTrackInSeconds = intervalReminderTrackInMinutes * 60 ;
191+ }
192+
193+ if (startReminderTrack != null &&
194+ finishReminderTrack != null &&
195+ isTodayReminderTrackEnabled &&
196+ countTimeReminderTrackInSeconds == intervalReminderTrackInSeconds) {
197+ if (now.isAfter (startReminderTrack) && now.isBefore (finishReminderTrack) ||
198+ (now.isAtSameMomentAs (startReminderTrack) || now.isAtSameMomentAs (finishReminderTrack))) {
199+ isShowReminderTrack = true ;
200+ }
201+ }
202+
203+ if (countTimeReminderTrackInSeconds == intervalReminderTrackInSeconds ||
204+ intervalReminderTrackInSeconds == null ) {
205+ countTimeReminderTrackInSeconds = 0 ;
206+ }
207+
208+ if (isShowReminderTrack) {
209+ notificationHelper.showReminderNotTrackNotification ();
210+ }
211+ } else {
212+ countTimeReminderTrackInSeconds = 0 ;
134213 }
135214 }
136215
216+ // reset timer jika berpindah hari
137217 final now = DateTime .now ();
138218 final dateTimeNow = DateTime (
139219 now.year,
@@ -965,8 +1045,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
9651045 final activity = percentActivity.round ();
9661046
9671047 final listPathScreenshots = await platformChannelHelper.doTakeScreenshot ();
968- final isPermissionScreenRecordingGranted =
969- await platformChannelHelper.checkPermissionScreenRecording ();
1048+ final isPermissionScreenRecordingGranted = await platformChannelHelper.checkPermissionScreenRecording ();
9701049 if (isPermissionScreenRecordingGranted != null && ! isPermissionScreenRecordingGranted) {
9711050 debugPrint ('screen recording not granted' );
9721051 notificationHelper.showPermissionScreenRecordingIssuedNotification ();
@@ -1047,15 +1126,15 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
10471126 }
10481127
10491128 void startTimer () {
1050- countTimerReminderNotTrack = 0 ;
1129+ countTimeReminderTrackInSeconds = 0 ;
10511130 stopTimer ();
10521131 timeTrack = Timer .periodic (const Duration (seconds: 1 ), (_) {
10531132 increaseTimerTray ();
10541133 });
10551134 }
10561135
10571136 void stopTimer () {
1058- countTimerReminderNotTrack = 0 ;
1137+ countTimeReminderTrackInSeconds = 0 ;
10591138 if (timeTrack != null && timeTrack! .isActive) {
10601139 timeTrack! .cancel ();
10611140 }
0 commit comments