| ... | ... |
@@ -7,39 +7,48 @@ |
| 7 | 7 |
#define MSG_KEY_DATA_LINE 220 |
| 8 | 8 |
|
| 9 | 9 |
static Window *window; |
| 10 |
-static TextLayer *text_layer; |
|
| 11 |
-static char buffer[256]; |
|
| 10 |
+static TextLayer *modal_text_layer; |
|
| 11 |
+static char modal_text[256]; |
|
| 12 | 12 |
static HealthMinuteData minute_data[1440]; |
| 13 | 13 |
static uint16_t minute_data_size = 0; |
| 14 | 14 |
static uint16_t minute_index = 0; |
| 15 | 15 |
static time_t minute_first = 0, minute_last = 0; |
| 16 | 16 |
static unsigned sent = 0; |
| 17 |
+static bool modal_displayed = false; |
|
| 17 | 18 |
static char global_buffer[1024]; |
| 18 | 19 |
|
| 20 |
+static void |
|
| 21 |
+set_modal_mode(bool is_modal) {
|
|
| 22 |
+ if (is_modal == modal_displayed) return; |
|
| 23 |
+ layer_set_hidden(text_layer_get_layer(modal_text_layer), is_modal); |
|
| 24 |
+} |
|
| 25 |
+ |
|
| 19 | 26 |
static void |
| 20 | 27 |
window_load(Window *window) {
|
| 21 | 28 |
Layer *window_layer = window_get_root_layer(window); |
| 22 | 29 |
GRect bounds = layer_get_bounds(window_layer); |
| 23 | 30 |
|
| 24 |
- text_layer = text_layer_create((GRect) { .origin = { 0, bounds.size.h / 3 }, .size = { bounds.size.w, bounds.size.h / 3 } });
|
|
| 25 |
- text_layer_set_text(text_layer, buffer); |
|
| 26 |
- text_layer_set_text_alignment(text_layer, GTextAlignmentCenter); |
|
| 27 |
- text_layer_set_font(text_layer, |
|
| 31 |
+ modal_text_layer = text_layer_create(GRect(0, bounds.size.h / 3, |
|
| 32 |
+ bounds.size.w, bounds.size.h / 3)); |
|
| 33 |
+ text_layer_set_text(modal_text_layer, modal_text); |
|
| 34 |
+ text_layer_set_text_alignment(modal_text_layer, GTextAlignmentCenter); |
|
| 35 |
+ text_layer_set_font(modal_text_layer, |
|
| 28 | 36 |
fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD)); |
| 29 |
- layer_add_child(window_layer, text_layer_get_layer(text_layer)); |
|
| 37 |
+ layer_add_child(window_layer, text_layer_get_layer(modal_text_layer)); |
|
| 38 |
+ |
|
| 39 |
+ set_modal_mode(true); |
|
| 30 | 40 |
} |
| 31 | 41 |
|
| 32 | 42 |
static void |
| 33 | 43 |
window_unload(Window *window) {
|
| 34 |
- text_layer_destroy(text_layer); |
|
| 44 |
+ text_layer_destroy(modal_text_layer); |
|
| 35 | 45 |
} |
| 36 | 46 |
|
| 37 | 47 |
static void |
| 38 | 48 |
set_modal_message(const char *msg) {
|
| 39 |
- GRect content_size; |
|
| 40 |
- strncpy(buffer, msg, sizeof buffer); |
|
| 41 |
- buffer[sizeof buffer - 1] = 0; |
|
| 42 |
- layer_mark_dirty(text_layer_get_layer(text_layer)); |
|
| 49 |
+ strncpy(modal_text, msg, sizeof modal_text); |
|
| 50 |
+ modal_text[sizeof modal_text - 1] = 0; |
|
| 51 |
+ layer_mark_dirty(text_layer_get_layer(modal_text_layer)); |
|
| 43 | 52 |
} |
| 44 | 53 |
|
| 45 | 54 |
/* minute_data_image - fill a buffer with CSV data without line terminator */ |
| ... | ... |
@@ -181,47 +190,6 @@ send_next_line(void) {
|
| 181 | 190 |
minute_index += 1; |
| 182 | 191 |
} |
| 183 | 192 |
|
| 184 |
-static int16_t |
|
| 185 |
-get_next_minute_index(time_t previous_t) {
|
|
| 186 |
- time_t t = previous_t ? previous_t + 60 - (previous_t % 60) : 0; |
|
| 187 |
- int16_t index = 0; |
|
| 188 |
- |
|
| 189 |
- if (t < minute_first || t >= minute_last) {
|
|
| 190 |
- uint32_t u; |
|
| 191 |
- minute_first = t; |
|
| 192 |
- minute_last = time(0); |
|
| 193 |
- u = health_service_get_minute_history(minute_data, |
|
| 194 |
- ARRAY_LENGTH(minute_data), |
|
| 195 |
- &minute_first, &minute_last); |
|
| 196 |
- |
|
| 197 |
- if (!u) {
|
|
| 198 |
- APP_LOG(APP_LOG_LEVEL_ERROR, |
|
| 199 |
- "health_service_get_minute_history returned 0"); |
|
| 200 |
- minute_first = minute_last = 0; |
|
| 201 |
- return -1; |
|
| 202 |
- } |
|
| 203 |
- |
|
| 204 |
- if (t >= minute_last) {
|
|
| 205 |
- APP_LOG(APP_LOG_LEVEL_ERROR, |
|
| 206 |
- "Unexpected minute_last %" PRIi32 |
|
| 207 |
- " when t is %" PRIi32, |
|
| 208 |
- minute_last, t); |
|
| 209 |
- return -1; |
|
| 210 |
- } |
|
| 211 |
- } else {
|
|
| 212 |
- index = (t - minute_first) / 60; |
|
| 213 |
- } |
|
| 214 |
- |
|
| 215 |
- while (minute_data[index].is_invalid) {
|
|
| 216 |
- index += 1; |
|
| 217 |
- t = minute_first + 60 * index; |
|
| 218 |
- if (t >= minute_last) |
|
| 219 |
- return get_next_minute_index(t); |
|
| 220 |
- } |
|
| 221 |
- |
|
| 222 |
- return index; |
|
| 223 |
-} |
|
| 224 |
- |
|
| 225 | 193 |
static void |
| 226 | 194 |
handle_last_sent(Tuple *tuple) {
|
| 227 | 195 |
uint32_t ikey = 0; |
| ... | ... |
@@ -238,12 +206,10 @@ handle_last_sent(Tuple *tuple) {
|
| 238 | 206 |
} |
| 239 | 207 |
APP_LOG(APP_LOG_LEVEL_INFO, "received LAST_SENT %" PRIu32, ikey); |
| 240 | 208 |
|
| 241 |
- int16_t index = get_next_minute_index(ikey * 60); |
|
| 242 |
- if (index < 0) return; |
|
| 243 |
- |
|
| 244 |
- APP_LOG(APP_LOG_LEVEL_INFO, |
|
| 245 |
- "got index %" PRIi16 ", sending time %" PRIi32, |
|
| 246 |
- index, minute_first + index * 60); |
|
| 209 |
+ minute_index = 0; |
|
| 210 |
+ minute_data_size = 0; |
|
| 211 |
+ minute_last = ikey * 60; |
|
| 212 |
+ set_modal_mode(false); |
|
| 247 | 213 |
|
| 248 | 214 |
if (load_minute_data_page(ikey * 60)) |
| 249 | 215 |
send_next_line(); |
| ... | ... |
@@ -264,28 +230,12 @@ inbox_received_handler(DictionaryIterator *iterator, void *context) {
|
| 264 | 230 |
"Unexpected type %d for MSG_KEY_MODAL_MESSAGE", |
| 265 | 231 |
(int)tuple->type); |
| 266 | 232 |
} else {
|
| 233 |
+ set_modal_mode(true); |
|
| 267 | 234 |
set_modal_message(tuple->value->cstring); |
| 268 | 235 |
} |
| 269 | 236 |
} |
| 270 | 237 |
} |
| 271 | 238 |
|
| 272 |
-static time_t |
|
| 273 |
-get_first_health_minute(void) {
|
|
| 274 |
- time_t start = 0, end = time(0); |
|
| 275 |
- uint32_t ret; |
|
| 276 |
- |
|
| 277 |
- ret = health_service_get_minute_history(minute_data, 1, &start, &end); |
|
| 278 |
- return ret ? start : 0; |
|
| 279 |
-} |
|
| 280 |
- |
|
| 281 |
-static void |
|
| 282 |
-init_text(void) {
|
|
| 283 |
- time_t t = get_first_health_minute(); |
|
| 284 |
- struct tm *tm = localtime(&t); |
|
| 285 |
- strftime(buffer, sizeof buffer, "First health minute: %FT%T%z", tm); |
|
| 286 |
- minute_first = t; |
|
| 287 |
-} |
|
| 288 |
- |
|
| 289 | 239 |
static void |
| 290 | 240 |
outbox_sent_handler(DictionaryIterator *iterator, void *context) {
|
| 291 | 241 |
(void)iterator; |
| ... | ... |
@@ -308,7 +258,7 @@ init(void) {
|
| 308 | 258 |
app_message_register_outbox_sent(outbox_sent_handler); |
| 309 | 259 |
app_message_open(256, 2048); |
| 310 | 260 |
|
| 311 |
- init_text(); |
|
| 261 |
+ strncpy(modal_text, "Waiting for JS part", sizeof modal_text); |
|
| 312 | 262 |
window = window_create(); |
| 313 | 263 |
window_set_window_handlers(window, (WindowHandlers) {
|
| 314 | 264 |
.load = window_load, |