machine_learning_controller.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import "dart:io";
  2. import "package:battery_info/battery_info_plugin.dart";
  3. import "package:battery_info/enums/charging_status.dart";
  4. import "package:battery_info/model/android_battery_info.dart";
  5. import "package:logging/logging.dart";
  6. import "package:photos/core/event_bus.dart";
  7. import "package:photos/events/machine_learning_control_event.dart";
  8. class MachineLearningController {
  9. MachineLearningController._privateConstructor();
  10. static final MachineLearningController instance =
  11. MachineLearningController._privateConstructor();
  12. final _logger = Logger("MachineLearningController");
  13. static const kMaximumTemperature = 36; // 36 degree celsius
  14. static const kMinimumBatteryLevel = 20; // 20%
  15. void init() {
  16. if (Platform.isAndroid) {
  17. BatteryInfoPlugin()
  18. .androidBatteryInfoStream
  19. .listen((AndroidBatteryInfo? batteryInfo) {
  20. _logger.info("Battery info: ${batteryInfo!.toJson()}");
  21. if (_shouldRunMachineLearning(batteryInfo)) {
  22. Bus.instance.fire(MachineLearningControlEvent(true));
  23. } else {
  24. Bus.instance.fire(MachineLearningControlEvent(false));
  25. }
  26. });
  27. }
  28. }
  29. bool _shouldRunMachineLearning(AndroidBatteryInfo info) {
  30. if (info.chargingStatus == ChargingStatus.Charging ||
  31. info.chargingStatus == ChargingStatus.Full) {
  32. return _isAcceptableTemperature(
  33. info.temperature ?? kMaximumTemperature,
  34. );
  35. }
  36. return _hasSufficientBattery(info.batteryLevel ?? kMinimumBatteryLevel) &&
  37. _isAcceptableTemperature(info.temperature ?? kMaximumTemperature);
  38. }
  39. bool _hasSufficientBattery(int batteryLevel) {
  40. return batteryLevel >= kMinimumBatteryLevel;
  41. }
  42. bool _isAcceptableTemperature(int temperature) {
  43. return temperature <= kMaximumTemperature;
  44. }
  45. }