Skip to content

Commit e6c5812

Browse files
committed
feat: Buat fitur pengaturan reminder track time berdasarkan pengaturan yang tersimpan di lokal
1 parent 773cfe6 commit e6c5812

File tree

1 file changed

+89
-10
lines changed

1 file changed

+89
-10
lines changed

lib/feature/presentation/page/home/home_page.dart

Lines changed: 89 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import 'package:path_provider/path_provider.dart';
3838
import 'package:tray_manager/tray_manager.dart';
3939
import 'package:window_manager/window_manager.dart';
4040

41+
var countTimeReminderTrackInSeconds = 0;
42+
4143
class 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

Comments
 (0)