Skip to content

Commit 6d7ae23

Browse files
committed
Implement the power management bloc .
1 parent 395f756 commit 6d7ae23

File tree

3 files changed

+243
-0
lines changed

3 files changed

+243
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import 'package:battery_plus/battery_plus.dart';
2+
import 'package:bloc/bloc.dart';
3+
import 'package:equatable/equatable.dart';
4+
import 'package:flutter_bloc/flutter_bloc.dart';
5+
import 'package:wakelock/wakelock.dart';
6+
7+
part 'power_management_event.dart';
8+
part 'power_management_state.dart';
9+
10+
class PowerManagementBloc
11+
extends Bloc<PowerManagementEvent, PowerManagementState> {
12+
PowerManagementBloc() : super(PowerManagementState.initial()) {
13+
on<PowerManagementEvent>((event, emit) {});
14+
15+
on<SetWifiOnlyDownloadEvent>(
16+
(event, emit) => _setWifiOnlyDownloadEvent(event, emit),
17+
);
18+
19+
on<SetShutDownWhenFinishDownloadEvent>(
20+
(event, emit) => _setShutDownWhenFinishDownloadEvent(event, emit),
21+
);
22+
23+
on<SetKeepRunningBackgroundEvent>(
24+
(event, emit) => _setKeepRunningBackgroundEvent(event, emit),
25+
);
26+
27+
on<SetKeepCpuAwakeEvent>(
28+
(event, emit) => _setKeepCpuAwakeEvent(event, emit),
29+
);
30+
31+
on<SetDownloadChargingConnectedEvent>(
32+
(event, emit) => _setDownloadChargingConnectedEvent(event, emit),
33+
);
34+
35+
on<SetShutDownWifiEvent>(
36+
(event, emit) => _setShutDownWifiEvent(event, emit),
37+
);
38+
39+
on<SetBatteryLimitLevelEvent>(
40+
(event, emit) => _setBatteryLimitLevelEvent(event, emit),
41+
);
42+
}
43+
44+
void _setWifiOnlyDownloadEvent(
45+
SetWifiOnlyDownloadEvent event,
46+
Emitter<PowerManagementState> emit,
47+
) {
48+
emit(state.copyWith(wifiOnlyDownload: event.wifiOnlyDownload));
49+
}
50+
51+
void _setShutDownWhenFinishDownloadEvent(
52+
SetShutDownWhenFinishDownloadEvent event,
53+
Emitter<PowerManagementState> emit,
54+
) {
55+
emit(state.copyWith(
56+
shutDownWhenFinishDownload: event.shutDownWhenFinishDownload));
57+
}
58+
59+
void _setKeepRunningBackgroundEvent(
60+
SetKeepRunningBackgroundEvent event,
61+
Emitter<PowerManagementState> emit,
62+
) {
63+
emit(state.copyWith(keepRunningBackground: event.keepRunningBackground));
64+
}
65+
66+
void _setKeepCpuAwakeEvent(
67+
SetKeepCpuAwakeEvent event,
68+
Emitter<PowerManagementState> emit,
69+
) {
70+
Wakelock.toggle(enable: event.keepCpuAwake);
71+
emit(state.copyWith(keepCpuAwake: event.keepCpuAwake));
72+
}
73+
74+
void _setDownloadChargingConnectedEvent(
75+
SetDownloadChargingConnectedEvent event,
76+
Emitter<PowerManagementState> emit,
77+
) {
78+
emit(state.copyWith(
79+
downloadChargingConnected: event.downloadChargingConnected,
80+
currentBatteryState: event.currentBatteryState,
81+
));
82+
}
83+
84+
void _setShutDownWifiEvent(
85+
SetShutDownWifiEvent event,
86+
Emitter<PowerManagementState> emit,
87+
) {
88+
emit(state.copyWith(shutDownWifi: event.shutDownWifi));
89+
}
90+
91+
void _setBatteryLimitLevelEvent(
92+
SetBatteryLimitLevelEvent event, Emitter<PowerManagementState> emit) {
93+
emit(state.copyWith(
94+
batteryLimitLevel: event.batteryLimitLevel,
95+
));
96+
}
97+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
part of 'power_management_bloc.dart';
2+
3+
abstract class PowerManagementEvent extends Equatable {
4+
const PowerManagementEvent();
5+
6+
@override
7+
List<Object> get props => [];
8+
}
9+
10+
class SetWifiOnlyDownloadEvent extends PowerManagementEvent {
11+
final bool wifiOnlyDownload;
12+
13+
const SetWifiOnlyDownloadEvent({required this.wifiOnlyDownload});
14+
15+
@override
16+
List<Object> get props => [wifiOnlyDownload];
17+
}
18+
19+
class SetShutDownWhenFinishDownloadEvent extends PowerManagementEvent {
20+
final bool shutDownWhenFinishDownload;
21+
22+
const SetShutDownWhenFinishDownloadEvent(
23+
{required this.shutDownWhenFinishDownload});
24+
25+
@override
26+
List<Object> get props => [shutDownWhenFinishDownload];
27+
}
28+
29+
class SetKeepRunningBackgroundEvent extends PowerManagementEvent {
30+
final bool keepRunningBackground;
31+
32+
const SetKeepRunningBackgroundEvent({required this.keepRunningBackground});
33+
34+
@override
35+
List<Object> get props => [keepRunningBackground];
36+
}
37+
38+
class SetKeepCpuAwakeEvent extends PowerManagementEvent {
39+
final bool keepCpuAwake;
40+
41+
const SetKeepCpuAwakeEvent({required this.keepCpuAwake});
42+
43+
@override
44+
List<Object> get props => [keepCpuAwake];
45+
}
46+
47+
class SetShutDownWifiEvent extends PowerManagementEvent {
48+
final bool shutDownWifi;
49+
50+
const SetShutDownWifiEvent({required this.shutDownWifi});
51+
52+
@override
53+
List<Object> get props => [shutDownWifi];
54+
}
55+
56+
class SetDownloadChargingConnectedEvent extends PowerManagementEvent {
57+
final bool? downloadChargingConnected;
58+
final BatteryState? currentBatteryState;
59+
const SetDownloadChargingConnectedEvent(
60+
{this.downloadChargingConnected, this.currentBatteryState});
61+
62+
@override
63+
List<Object> get props => [
64+
downloadChargingConnected ?? false,
65+
currentBatteryState ?? BatteryState.unknown
66+
];
67+
}
68+
69+
class SetBatteryLimitLevelEvent extends PowerManagementEvent {
70+
final int batteryLimitLevel;
71+
72+
const SetBatteryLimitLevelEvent({required this.batteryLimitLevel});
73+
74+
@override
75+
List<Object> get props => [batteryLimitLevel];
76+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
part of 'power_management_bloc.dart';
2+
3+
class PowerManagementState extends Equatable {
4+
final bool wifiOnlyDownload;
5+
final bool shutDownWhenFinishDownload;
6+
final bool keepRunningBackground;
7+
final bool keepCpuAwake;
8+
final bool downloadChargingConnected;
9+
final bool shutDownWifi;
10+
final BatteryState currentBatteryState;
11+
final int batteryLimitLevel;
12+
13+
const PowerManagementState({
14+
required this.wifiOnlyDownload,
15+
required this.shutDownWhenFinishDownload,
16+
required this.keepRunningBackground,
17+
required this.keepCpuAwake,
18+
required this.downloadChargingConnected,
19+
required this.currentBatteryState,
20+
required this.shutDownWifi,
21+
required this.batteryLimitLevel,
22+
});
23+
24+
factory PowerManagementState.initial() => PowerManagementState(
25+
wifiOnlyDownload: false,
26+
shutDownWhenFinishDownload: false,
27+
keepRunningBackground: false,
28+
keepCpuAwake: false,
29+
downloadChargingConnected: false,
30+
currentBatteryState: BatteryState.unknown,
31+
shutDownWifi: false,
32+
batteryLimitLevel: 0,
33+
);
34+
35+
PowerManagementState copyWith({
36+
bool? wifiOnlyDownload,
37+
bool? shutDownWhenFinishDownload,
38+
bool? keepRunningBackground,
39+
bool? keepCpuAwake,
40+
bool? downloadChargingConnected,
41+
BatteryState? currentBatteryState,
42+
bool? shutDownWifi,
43+
int? batteryLimitLevel,
44+
}) =>
45+
PowerManagementState(
46+
wifiOnlyDownload: wifiOnlyDownload ?? this.wifiOnlyDownload,
47+
shutDownWhenFinishDownload:
48+
shutDownWhenFinishDownload ?? this.shutDownWhenFinishDownload,
49+
keepRunningBackground:
50+
keepRunningBackground ?? this.keepRunningBackground,
51+
keepCpuAwake: keepCpuAwake ?? this.keepCpuAwake,
52+
downloadChargingConnected:
53+
downloadChargingConnected ?? this.downloadChargingConnected,
54+
currentBatteryState: currentBatteryState ?? this.currentBatteryState,
55+
shutDownWifi: shutDownWifi ?? this.shutDownWifi,
56+
batteryLimitLevel: batteryLimitLevel ?? this.batteryLimitLevel,
57+
);
58+
59+
@override
60+
List<Object> get props => [
61+
wifiOnlyDownload,
62+
shutDownWhenFinishDownload,
63+
keepRunningBackground,
64+
keepCpuAwake,
65+
downloadChargingConnected,
66+
currentBatteryState,
67+
shutDownWifi,
68+
batteryLimitLevel,
69+
];
70+
}

0 commit comments

Comments
 (0)