Skip to content

Commit 17ae421

Browse files
authored
Merge pull request #30 from CoderJava/feature/setelah-logout-reset-nilai-timer-nya
Feature - Reset timer setelah user logout dan cegah si user agar tidak bisa logout jika timer-nya hidup
2 parents 38e7a94 + 2bb29c3 commit 17ae421

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

assets/translations/en-US.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,5 +293,6 @@
293293
"please_set_finish_date": "Please set finish date",
294294
"finish_date_time_must_be_after_of_start_date_time": "The finish date time must be after the start date time",
295295
"reason": "Reason",
296-
"why_are_you_adding_manual_track": "e.g. Forgot to start timer"
296+
"why_are_you_adding_manual_track": "e.g. Forgot to start timer",
297+
"please_stop_the_timer_if_you_want_to_logout": "Please stop the timer if you want to logout."
297298
}

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import 'package:tray_manager/tray_manager.dart';
4545
import 'package:window_manager/window_manager.dart';
4646

4747
var countTimeReminderTrackInSeconds = 0;
48+
var isGlobalTimerStart = false;
4849

4950
class HomePage extends StatefulWidget {
5051
static const routePath = '/home';
@@ -83,7 +84,6 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
8384
var isWindowVisible = true;
8485
var userId = '';
8586
var email = '';
86-
var isTimerStart = false;
8787
var isTimerStartTemp = false;
8888
TrackUserLiteResponse? trackUserLite;
8989
ItemProjectResponse? selectedProject;
@@ -147,7 +147,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
147147
now.day,
148148
);
149149
timerDate = Timer.periodic(const Duration(seconds: 1), (_) {
150-
if (!isTimerStart) {
150+
if (!isGlobalTimerStart) {
151151
// reminder track
152152
var isShowReminderTrack = false;
153153
final now = DateTime.now();
@@ -533,7 +533,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
533533
final firstTask = filteredTask.first;
534534
startTime = DateTime.now();
535535
selectedTask = firstTask;
536-
isTimerStart = true;
536+
isGlobalTimerStart = true;
537537
setTrayContextMenu();
538538
valueNotifierTaskTracked.value = firstTask.trackedInSeconds;
539539
resetCountTimer();
@@ -666,7 +666,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
666666
}
667667
startTime = DateTime.now();
668668
selectedTask = itemTask;
669-
isTimerStart = true;
669+
isGlobalTimerStart = true;
670670
setTrayContextMenu();
671671
valueNotifierTaskTracked.value = itemTask.trackedInSeconds;
672672
resetCountTimer();
@@ -733,7 +733,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
733733
}
734734

735735
void stopTimerFromButton(TrackTask itemTask) {
736-
isTimerStart = false;
736+
isGlobalTimerStart = false;
737737
setTrayContextMenu();
738738
itemTask.trackedInSeconds = valueNotifierTaskTracked.value;
739739
stopTimer();
@@ -747,7 +747,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
747747
borderRadius: BorderRadius.circular(8),
748748
child: InkWell(
749749
borderRadius: BorderRadius.circular(8),
750-
onTap: isTimerStart || isTimerStartTemp
750+
onTap: isGlobalTimerStart || isTimerStartTemp
751751
? null
752752
: () async {
753753
final selectedProjectTemp = await showModalBottomSheet(
@@ -806,7 +806,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
806806
height: 8,
807807
decoration: BoxDecoration(
808808
shape: BoxShape.circle,
809-
color: isTimerStart || isTimerStartTemp ? Colors.green : Colors.grey,
809+
color: isGlobalTimerStart || isTimerStartTemp ? Colors.green : Colors.grey,
810810
),
811811
),
812812
const SizedBox(width: 4),
@@ -822,7 +822,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
822822
),
823823
),
824824
const SizedBox(width: 16),
825-
isTimerStart || isTimerStartTemp
825+
isGlobalTimerStart || isTimerStartTemp
826826
? Container()
827827
: const Icon(
828828
Icons.keyboard_arrow_down,
@@ -995,7 +995,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
995995
void setTrayContextMenu() {
996996
final items = <MenuItem>[];
997997
if (listTrackTask.isNotEmpty) {
998-
if (!isTimerStart) {
998+
if (!isGlobalTimerStart) {
999999
items.add(
10001000
MenuItem(
10011001
key: keyTrayStartWorking,
@@ -1096,7 +1096,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
10961096
final task = listTrackTask.first;
10971097
startTime = DateTime.now();
10981098
selectedTask = task;
1099-
isTimerStart = true;
1099+
isGlobalTimerStart = true;
11001100
setTrayContextMenu();
11011101
valueNotifierTaskTracked.value = task.trackedInSeconds;
11021102
resetCountTimer();
@@ -1107,7 +1107,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
11071107
final task = filteredTask.first;
11081108
startTime = DateTime.now();
11091109
selectedTask = task;
1110-
isTimerStart = true;
1110+
isGlobalTimerStart = true;
11111111
setTrayContextMenu();
11121112
valueNotifierTaskTracked.value = task.trackedInSeconds;
11131113
resetCountTimer();
@@ -1117,7 +1117,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
11171117
}
11181118

11191119
void stopTimerFromSystemTray() {
1120-
isTimerStart = false;
1120+
isGlobalTimerStart = false;
11211121
setTrayContextMenu();
11221122
selectedTask?.trackedInSeconds = valueNotifierTaskTracked.value;
11231123
stopTimer();
@@ -1158,8 +1158,8 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
11581158
isHaveActivity = true;
11591159
} else if (strEvent == 'screen_is_locked') {
11601160
// auto stop timer dan ambil screenshot-nya
1161-
if (isTimerStart) {
1162-
isTimerStart = false;
1161+
if (isGlobalTimerStart) {
1162+
isGlobalTimerStart = false;
11631163
setTrayContextMenu();
11641164
stopTimer();
11651165
finishTime = DateTime.now();
@@ -1271,7 +1271,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
12711271
// stop timer-nya jika permission screen recording-nya tidak diallow-kan atau
12721272
// gagal ambil screenshot-nya di end time
12731273
stopTimer();
1274-
isTimerStart = false;
1274+
isGlobalTimerStart = false;
12751275
setTrayContextMenu();
12761276
selectedTask = null;
12771277
setState(() {});
@@ -1294,7 +1294,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
12941294
// stop timer-nya jika isForceStop bernilai true
12951295
listPathScreenshots.clear();
12961296
stopTimer();
1297-
isTimerStart = false;
1297+
isGlobalTimerStart = false;
12981298
setTrayContextMenu();
12991299
selectedTask = null;
13001300
setState(() {});

lib/feature/presentation/page/setting/setting_page.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import 'package:flutter/scheduler.dart';
2727
import 'package:flutter_bloc/flutter_bloc.dart';
2828
import 'package:go_router/go_router.dart';
2929
import 'package:launch_at_startup/launch_at_startup.dart';
30+
import 'package:tray_manager/tray_manager.dart';
3031
import 'package:window_manager/window_manager.dart';
3132

3233
class SettingPage extends StatefulWidget {
@@ -1002,6 +1003,25 @@ class _SettingPageState extends State<SettingPage> {
10021003
}
10031004

10041005
Future<void> doLogout() async {
1006+
if (isGlobalTimerStart) {
1007+
showDialog(
1008+
context: context,
1009+
builder: (context) {
1010+
return AlertDialog(
1011+
title: Text('warning'.tr()),
1012+
content: Text('please_stop_the_timer_if_you_want_to_logout'.tr()),
1013+
actions: [
1014+
TextButton(
1015+
onPressed: () => context.pop(),
1016+
child: Text('dismiss'.tr()),
1017+
),
1018+
],
1019+
);
1020+
},
1021+
);
1022+
return;
1023+
}
1024+
10051025
final isLogout = await showDialog(
10061026
context: context,
10071027
builder: (context) {
@@ -1032,6 +1052,7 @@ class _SettingPageState extends State<SettingPage> {
10321052
if (isLogout != null && mounted) {
10331053
await helper.setLogout();
10341054
if (mounted) {
1055+
trayManager.setTitle('--:--:--');
10351056
context.goNamed(SplashPage.routeName);
10361057
}
10371058
}

macos/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,6 @@ SPEC CHECKSUMS:
9090
tray_manager: 9064e219c56d75c476e46b9a21182087930baf90
9191
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
9292

93-
PODFILE CHECKSUM: 7b8886a4ad89b3a2f7a16642e81ab6bed5c5d3ac
93+
PODFILE CHECKSUM: 8d40c19d3cbdb380d870685c3a564c989f1efa52
9494

9595
COCOAPODS: 1.13.0

0 commit comments

Comments
 (0)