1
+ import 'dart:async' ;
1
2
import 'dart:convert' ;
2
3
import 'dart:io' ;
3
4
import 'package:awesome_notifications/awesome_notifications.dart' ;
4
5
import 'package:badges/badges.dart' ;
6
+ import 'package:battery_plus/battery_plus.dart' ;
7
+ import 'package:flood_mobile/Api/auth_api.dart' ;
8
+ import 'package:flood_mobile/Api/client_api.dart' ;
9
+ import 'package:flood_mobile/Api/notifications_api.dart' ;
10
+ import 'package:flood_mobile/Api/torrent_api.dart' ;
11
+ import 'package:flood_mobile/Blocs/home_screen_bloc/home_screen_bloc.dart' ;
12
+ import 'package:flood_mobile/Blocs/multiple_select_torrent_bloc/multiple_select_torrent_bloc.dart' ;
13
+ import 'package:flood_mobile/Blocs/power_management_bloc/power_management_bloc.dart' ;
14
+ import 'package:flood_mobile/Blocs/sse_bloc/sse_bloc.dart' ;
15
+ import 'package:flood_mobile/Blocs/theme_bloc/theme_bloc.dart' ;
5
16
import 'package:flood_mobile/Blocs/user_interface_bloc/user_interface_bloc.dart' ;
6
17
import 'package:flood_mobile/Notifications/notification_controller.dart' ;
18
+ import 'package:flood_mobile/Pages/about_screen/about_screen.dart' ;
7
19
import 'package:flood_mobile/Pages/home_screen/widgets/add_torrent_file.dart' ;
20
+ import 'package:flood_mobile/Pages/home_screen/widgets/dark_transition.dart' ;
8
21
import 'package:flood_mobile/Pages/home_screen/widgets/menu_widget.dart' ;
22
+ import 'package:flood_mobile/Pages/home_screen/widgets/notification_popup_dialogue_container.dart' ;
9
23
import 'package:flood_mobile/Pages/home_screen/widgets/popup_menu_buttons.dart' ;
24
+ import 'package:flood_mobile/Pages/home_screen/widgets/rss_feed_button_widget.dart' ;
25
+ import 'package:flood_mobile/Pages/settings_screen/settings_screen.dart' ;
26
+ import 'package:flood_mobile/Pages/torrent_screen/torrent_screen.dart' ;
10
27
import 'package:flood_mobile/Pages/widgets/toast_component.dart' ;
11
- import 'package:flood_mobile/Blocs/home_screen_bloc/home_screen_bloc.dart' ;
12
- import 'package:flood_mobile/Blocs/multiple_select_torrent_bloc/multiple_select_torrent_bloc.dart' ;
13
- import 'package:flood_mobile/Blocs/theme_bloc/theme_bloc.dart' ;
14
28
import 'package:flood_mobile/l10n/l10n.dart' ;
15
29
import 'package:flutter/material.dart' hide Badge;
16
30
import 'package:flutter/scheduler.dart' ;
17
31
import 'package:flutter_bloc/flutter_bloc.dart' ;
18
32
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart' ;
19
33
import 'package:fluttertoast/fluttertoast.dart' ;
20
34
import 'package:hidden_drawer_menu/simple_hidden_drawer/simple_hidden_drawer.dart' ;
21
- import 'package:flood_mobile/Api/auth_api.dart' ;
22
- import 'package:flood_mobile/Api/client_api.dart' ;
23
- import 'package:flood_mobile/Api/notifications_api.dart' ;
24
- import 'package:flood_mobile/Pages/about_screen/about_screen.dart' ;
25
- import 'package:flood_mobile/Pages/settings_screen/settings_screen.dart' ;
26
- import 'package:flood_mobile/Pages/torrent_screen/torrent_screen.dart' ;
27
- import 'package:flood_mobile/Pages/home_screen/widgets/rss_feed_button_widget.dart' ;
28
- import 'package:flood_mobile/Pages/home_screen/widgets/dark_transition.dart' ;
29
- import 'package:flood_mobile/Pages/home_screen/widgets/notification_popup_dialogue_container.dart' ;
30
- import 'package:flood_mobile/Blocs/sse_bloc/sse_bloc.dart' ;
31
35
import 'package:uni_links/uni_links.dart' ;
32
36
import 'package:uri_to_file/uri_to_file.dart' ;
33
37
@@ -47,6 +51,32 @@ class _HomeScreenState extends State<HomeScreen> {
47
51
late String directoryDefault;
48
52
DateTime timeBackPressed = DateTime .now ();
49
53
bool isDark = false ;
54
+ final Battery _battery = Battery ();
55
+ BatteryState ? _batteryState;
56
+ StreamSubscription <BatteryState >? _batteryStateSubscription;
57
+
58
+ Future <void > _updateBatteryState (BatteryState state) async {
59
+ if (_batteryState == state) return ;
60
+ _batteryState = state;
61
+ BlocProvider .of <PowerManagementBloc >(context, listen: false ).add (
62
+ SetDownloadChargingConnectedEvent (currentBatteryState: _batteryState),
63
+ );
64
+
65
+ bool isChargingConnected = BlocProvider .of <PowerManagementBloc >(context)
66
+ .state
67
+ .downloadChargingConnected;
68
+ if (isChargingConnected && ! (_batteryState == BatteryState .charging)) {
69
+ BlocProvider .of <HomeScreenBloc >(context, listen: false )
70
+ .state
71
+ .torrentList
72
+ .forEach ((element) {
73
+ if (element.status.contains ('downloading' )) {
74
+ TorrentApi .stopTorrent (hashes: [element.hash], context: context);
75
+ }
76
+ });
77
+ }
78
+ }
79
+
50
80
@override
51
81
void initState () {
52
82
super .initState ();
@@ -60,13 +90,23 @@ class _HomeScreenState extends State<HomeScreen> {
60
90
.add (GetPreviousSetUserInterfaceEvent ());
61
91
}
62
92
93
+ @override
94
+ void dispose () {
95
+ if (_batteryStateSubscription != null ) {
96
+ _batteryStateSubscription! .cancel ();
97
+ }
98
+ super .dispose ();
99
+ }
100
+
63
101
@override
64
102
void didChangeDependencies () {
65
103
//Initialize the app
66
104
BlocProvider .of <SSEBloc >(context, listen: false )
67
105
.add (SetSSEListenEvent (context: context));
68
106
ClientApi .getClientSettings (context);
69
107
NotificationApi .getNotifications (context: context);
108
+ _batteryStateSubscription =
109
+ _battery.onBatteryStateChanged.listen (_updateBatteryState);
70
110
super .didChangeDependencies ();
71
111
}
72
112
0 commit comments