ente/lib/services/machine_learning/machine_learning_controller.dart

55 lines
1.8 KiB
Dart
Raw Normal View History

2024-02-17 13:10:20 +00:00
import "dart:io";
import "package:battery_info/battery_info_plugin.dart";
import "package:battery_info/enums/charging_status.dart";
import "package:battery_info/model/android_battery_info.dart";
import "package:logging/logging.dart";
import "package:photos/core/event_bus.dart";
import "package:photos/events/machine_learning_control_event.dart";
class MachineLearningController {
MachineLearningController._privateConstructor();
static final MachineLearningController instance =
MachineLearningController._privateConstructor();
final _logger = Logger("MachineLearningController");
static const kMaximumTemperature = 36; // 36 degree celsius
static const kMinimumBatteryLevel = 20; // 20%
void init() {
if (Platform.isAndroid) {
BatteryInfoPlugin()
.androidBatteryInfoStream
.listen((AndroidBatteryInfo? batteryInfo) {
_logger.info("Battery info: ${batteryInfo!.toJson()}");
if (_shouldRunMachineLearning(batteryInfo)) {
Bus.instance.fire(MachineLearningControlEvent(true));
} else {
Bus.instance.fire(MachineLearningControlEvent(false));
}
});
}
}
bool _shouldRunMachineLearning(AndroidBatteryInfo info) {
if (info.chargingStatus == ChargingStatus.Charging ||
info.chargingStatus == ChargingStatus.Full) {
return _isAcceptableTemperature(
info.temperature ?? kMaximumTemperature,
);
}
return _hasSufficientBattery(info.batteryLevel ?? kMinimumBatteryLevel) &&
_isAcceptableTemperature(info.temperature ?? kMaximumTemperature);
}
bool _hasSufficientBattery(int batteryLevel) {
return batteryLevel >= kMinimumBatteryLevel;
}
bool _isAcceptableTemperature(int temperature) {
return temperature <= kMaximumTemperature;
}
}