Skip to content

Commit 47c148c

Browse files
committed
Implement the Stop Download if Battery is Low feature.
1 parent b4bc3ff commit 47c148c

File tree

1 file changed

+53
-13
lines changed

1 file changed

+53
-13
lines changed

lib/Pages/home_screen/home_screen.dart

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,37 @@
1+
import 'dart:async';
12
import 'dart:convert';
23
import 'dart:io';
34
import 'package:awesome_notifications/awesome_notifications.dart';
45
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';
516
import 'package:flood_mobile/Blocs/user_interface_bloc/user_interface_bloc.dart';
617
import 'package:flood_mobile/Notifications/notification_controller.dart';
18+
import 'package:flood_mobile/Pages/about_screen/about_screen.dart';
719
import 'package:flood_mobile/Pages/home_screen/widgets/add_torrent_file.dart';
20+
import 'package:flood_mobile/Pages/home_screen/widgets/dark_transition.dart';
821
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';
923
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';
1027
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';
1428
import 'package:flood_mobile/l10n/l10n.dart';
1529
import 'package:flutter/material.dart' hide Badge;
1630
import 'package:flutter/scheduler.dart';
1731
import 'package:flutter_bloc/flutter_bloc.dart';
1832
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
1933
import 'package:fluttertoast/fluttertoast.dart';
2034
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';
3135
import 'package:uni_links/uni_links.dart';
3236
import 'package:uri_to_file/uri_to_file.dart';
3337

@@ -47,6 +51,32 @@ class _HomeScreenState extends State<HomeScreen> {
4751
late String directoryDefault;
4852
DateTime timeBackPressed = DateTime.now();
4953
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+
5080
@override
5181
void initState() {
5282
super.initState();
@@ -60,13 +90,23 @@ class _HomeScreenState extends State<HomeScreen> {
6090
.add(GetPreviousSetUserInterfaceEvent());
6191
}
6292

93+
@override
94+
void dispose() {
95+
if (_batteryStateSubscription != null) {
96+
_batteryStateSubscription!.cancel();
97+
}
98+
super.dispose();
99+
}
100+
63101
@override
64102
void didChangeDependencies() {
65103
//Initialize the app
66104
BlocProvider.of<SSEBloc>(context, listen: false)
67105
.add(SetSSEListenEvent(context: context));
68106
ClientApi.getClientSettings(context);
69107
NotificationApi.getNotifications(context: context);
108+
_batteryStateSubscription =
109+
_battery.onBatteryStateChanged.listen(_updateBatteryState);
70110
super.didChangeDependencies();
71111
}
72112

0 commit comments

Comments
 (0)