aboutsummaryrefslogtreecommitdiff
path: root/src/battery.c
blob: 3072c9bbfd06e0e0f3a8180935e7b250cb2ac9f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "pebble.h"

#define TEXT_HIDDEN_KEY 1
#define ENABLE_COLOR_KEY 2
//#define PBL_COLOR

Window *window;
TextLayer *battery_percentage;
TextLayer *charge_status;
char percent_show[5];

void battery_state_receiver(BatteryChargeState chargeState){
  uint8_t percent = chargeState.charge_percent;

  snprintf(percent_show, 5, "%d%%", percent);
  text_layer_set_text(battery_percentage, percent_show);

  if (!persist_read_bool(TEXT_HIDDEN_KEY)) {
    if(chargeState.is_plugged && chargeState.is_charging)
      text_layer_set_text(charge_status, "Charging");
    else if(chargeState.is_plugged && !chargeState.is_charging)
      text_layer_set_text(charge_status, "Plugged - Not Charging");
    else if(!chargeState.is_plugged && !chargeState.is_charging)
      text_layer_set_text(charge_status, "Discharging");
  }

#ifdef PBL_COLOR
//  if (persist_read_bool(ENABLE_COLOR_KEY)) {
//    APP_LOG(APP_LOG_LEVEL_DEBUG, "No color setting");
//    return;
//  }



  if (percent > 40) {
    window_set_background_color(window, GColorDarkGreen);
  } else if(percent <=40 && percent > 20) {
    window_set_background_color(window, GColorChromeYellow);
  } else if(percent <= 20) {
    window_set_background_color(window, GColorDarkCandyAppleRed);
  }
#endif
}

void click_handler(ClickRecognizerRef recognizer, void *context) {
  // APP_LOG(APP_LOG_LEVEL_DEBUG, "Single Click");

  if (persist_read_bool(TEXT_HIDDEN_KEY)) {
    persist_write_bool(TEXT_HIDDEN_KEY, false);
    battery_state_receiver(battery_state_service_peek());
  } else {
    persist_write_bool(TEXT_HIDDEN_KEY, true);
    text_layer_set_text(charge_status, "");
  }
}

void long_click_handler(ClickRecognizerRef recognizer, void *context) {

  if (persist_read_bool(ENABLE_COLOR_KEY)) {
    persist_write_bool(ENABLE_COLOR_KEY, false);
    battery_state_receiver(battery_state_service_peek());
  } else {
    persist_write_bool(ENABLE_COLOR_KEY, true);
    battery_state_receiver(battery_state_service_peek());
  }

}

void click_config_provider(void *context) {
  window_single_click_subscribe(BUTTON_ID_SELECT, click_handler);
//#ifdef PBL_COLOR
//  window_long_click_subscribe(BUTTON_ID_SELECT, 0, long_click_handler, NULL);
// #endif
}

void window_load(Window *window) {
  Layer *window_layer = window_get_root_layer(window);
  GRect bounds = layer_get_bounds(window_layer);

#ifdef PBL_ROUND
  battery_percentage = text_layer_create((GRect) { .origin = { 0, 55 }, .size = { bounds.size.w, 45 } });
#elif PBL_COLOR
  battery_percentage = text_layer_create((GRect) { .origin = { 0, 45 }, .size = { bounds.size.w, 45 } });
#else
  battery_percentage = text_layer_create((GRect) { .origin = { 0, 32 }, .size = { bounds.size.w, 45 } });
#endif
  text_layer_set_text_alignment(battery_percentage, GTextAlignmentCenter);
  text_layer_set_font(battery_percentage, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD));
  text_layer_set_background_color(battery_percentage, GColorClear);

#ifdef PBL_ROUND
  charge_status = text_layer_create((GRect) { .origin = { 0, 102 }, .size = { bounds.size.w, 20 } });
#elif PBL_COLOR
  charge_status = text_layer_create((GRect) { .origin = { 0, 92 }, .size = { bounds.size.w, 20 } });
#else
  charge_status = text_layer_create((GRect) { .origin = { 0, 82 }, .size = { bounds.size.w, 20 } });
#endif
  text_layer_set_text_alignment(charge_status, GTextAlignmentCenter);
  text_layer_set_background_color(charge_status, GColorClear);

  // make a peek to start
  battery_state_receiver(battery_state_service_peek());

  layer_add_child(window_layer, text_layer_get_layer(battery_percentage));
  layer_add_child(window_layer, text_layer_get_layer(charge_status));
}

void window_unload(Window *window) {
  text_layer_destroy(battery_percentage);
  text_layer_destroy(charge_status);
}

void init(void) {
  window = window_create();
  window_set_window_handlers(window, (WindowHandlers) {
    .load = window_load,
    .unload = window_unload,
  });
  const bool animated = true;
  window_stack_push(window, animated);
  battery_state_service_subscribe(battery_state_receiver);

  window_set_click_config_provider(window, click_config_provider);
}

void deinit(void) {
  window_destroy(window);
}

int main(void) {
  init();

  // APP_LOG(APP_LOG_LEVEL_DEBUG, "Done initializing, pushed window: %p", window);

  app_event_loop();
  deinit();
}