power_off.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "power_off.h"
  2. #include <furi.h>
  3. #include <gui/elements.h>
  4. struct PowerOff {
  5. View* view;
  6. };
  7. typedef struct {
  8. uint32_t time_left_sec;
  9. } PowerOffModel;
  10. static void power_off_draw_callback(Canvas* canvas, void* _model) {
  11. furi_assert(_model);
  12. PowerOffModel* model = _model;
  13. char buff[32];
  14. canvas_set_color(canvas, ColorBlack);
  15. canvas_set_font(canvas, FontPrimary);
  16. canvas_draw_str_aligned(canvas, 64, 1, AlignCenter, AlignTop, "Battery low!");
  17. canvas_draw_icon(canvas, 0, 18, &I_BatteryBody_52x28);
  18. canvas_draw_icon(canvas, 16, 25, &I_FaceNopower_29x14);
  19. elements_bubble(canvas, 54, 17, 70, 30);
  20. canvas_set_font(canvas, FontSecondary);
  21. elements_multiline_text_aligned(
  22. canvas, 70, 23, AlignLeft, AlignTop, "Connect me\n to charger.");
  23. snprintf(buff, sizeof(buff), "Poweroff in %lds.", model->time_left_sec);
  24. canvas_draw_str_aligned(canvas, 64, 60, AlignCenter, AlignBottom, buff);
  25. }
  26. PowerOff* power_off_alloc() {
  27. PowerOff* power_off = malloc(sizeof(PowerOff));
  28. power_off->view = view_alloc();
  29. view_allocate_model(power_off->view, ViewModelTypeLocking, sizeof(PowerOffModel));
  30. view_set_draw_callback(power_off->view, power_off_draw_callback);
  31. return power_off;
  32. }
  33. void power_off_free(PowerOff* power_off) {
  34. furi_assert(power_off);
  35. view_free(power_off->view);
  36. free(power_off);
  37. }
  38. View* power_off_get_view(PowerOff* power_off) {
  39. furi_assert(power_off);
  40. return power_off->view;
  41. }
  42. void power_off_set_time_left(PowerOff* power_off, uint8_t time_left) {
  43. furi_assert(power_off);
  44. with_view_model(
  45. power_off->view, (PowerOffModel * model) {
  46. model->time_left_sec = time_left;
  47. return true;
  48. });
  49. }