| ... | ... |
@@ -17,6 +17,8 @@ |
| 17 | 17 |
#include <inttypes.h> |
| 18 | 18 |
#include <pebble.h> |
| 19 | 19 |
|
| 20 |
+#include "progress_layer.h" |
|
| 21 |
+ |
|
| 20 | 22 |
#define MSG_KEY_LAST_SENT 110 |
| 21 | 23 |
#define MSG_KEY_MODAL_MESSAGE 120 |
| 22 | 24 |
#define MSG_KEY_DATA_KEY 210 |
| ... | ... |
@@ -33,12 +35,39 @@ static unsigned sent = 0; |
| 33 | 35 |
static bool modal_displayed = false; |
| 34 | 36 |
static char global_buffer[1024]; |
| 35 | 37 |
|
| 38 |
+static struct {
|
|
| 39 |
+ char label[64]; |
|
| 40 |
+ TextLayer *label_layer; |
|
| 41 |
+ ProgressLayer *progress_layer; |
|
| 42 |
+ uint32_t first_key; |
|
| 43 |
+ uint32_t current_key; |
|
| 44 |
+} ui; |
|
| 45 |
+ |
|
| 36 | 46 |
static void |
| 37 | 47 |
set_modal_mode(bool is_modal) {
|
| 38 | 48 |
if (is_modal == modal_displayed) return; |
| 39 |
- layer_set_hidden(text_layer_get_layer(modal_text_layer), is_modal); |
|
| 49 |
+ layer_set_hidden(text_layer_get_layer(modal_text_layer), !is_modal); |
|
| 50 |
+ layer_set_hidden(text_layer_get_layer(ui.label_layer), is_modal); |
|
| 51 |
+ layer_set_hidden(ui.progress_layer, is_modal); |
|
| 52 |
+ modal_displayed = is_modal; |
|
| 53 |
+} |
|
| 54 |
+ |
|
| 55 |
+static void |
|
| 56 |
+update_progress(void) {
|
|
| 57 |
+ int32_t last_key = (time(0) + 59) / 60; |
|
| 58 |
+ int32_t key_span = last_key - ui.first_key; |
|
| 59 |
+ int32_t keys_done = ui.current_key - ui.first_key + 1; |
|
| 60 |
+ |
|
| 61 |
+ progress_layer_set_progress(ui.progress_layer, |
|
| 62 |
+ (keys_done * 100 + key_span / 2) / key_span); |
|
| 63 |
+ snprintf(ui.label, sizeof ui.label, "%" PRIi32 " / %" PRIi32, |
|
| 64 |
+ keys_done, key_span); |
|
| 40 | 65 |
} |
| 41 | 66 |
|
| 67 |
+#define PROGRESS_HEIGHT 10 |
|
| 68 |
+#define PROGRESS_MARGIN 8 |
|
| 69 |
+#define LABEL_HEIGHT 22 |
|
| 70 |
+ |
|
| 42 | 71 |
static void |
| 43 | 72 |
window_load(Window *window) {
|
| 44 | 73 |
Layer *window_layer = window_get_root_layer(window); |
| ... | ... |
@@ -52,12 +81,35 @@ window_load(Window *window) {
|
| 52 | 81 |
fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD)); |
| 53 | 82 |
layer_add_child(window_layer, text_layer_get_layer(modal_text_layer)); |
| 54 | 83 |
|
| 84 |
+ ui.label_layer = text_layer_create(GRect(0, |
|
| 85 |
+ bounds.size.h / 2 - LABEL_HEIGHT - PROGRESS_MARGIN / 2, |
|
| 86 |
+ bounds.size.w, |
|
| 87 |
+ LABEL_HEIGHT)); |
|
| 88 |
+ text_layer_set_text(ui.label_layer, ui.label); |
|
| 89 |
+ text_layer_set_text_alignment(ui.label_layer, GTextAlignmentCenter); |
|
| 90 |
+ text_layer_set_font(ui.label_layer, |
|
| 91 |
+ fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD)); |
|
| 92 |
+ layer_add_child(window_layer, text_layer_get_layer(ui.label_layer)); |
|
| 93 |
+ |
|
| 94 |
+ ui.progress_layer = progress_layer_create(GRect(bounds.size.w / 4, |
|
| 95 |
+ bounds.size.h / 2 + PROGRESS_MARGIN / 2, |
|
| 96 |
+ bounds.size.w / 2, |
|
| 97 |
+ PROGRESS_HEIGHT)); |
|
| 98 |
+ progress_layer_set_progress(ui.progress_layer, 0); |
|
| 99 |
+ progress_layer_set_corner_radius(ui.progress_layer, 3); |
|
| 100 |
+ progress_layer_set_foreground_color(ui.progress_layer, GColorBlack); |
|
| 101 |
+ progress_layer_set_background_color(ui.progress_layer, |
|
| 102 |
+ GColorLightGray); |
|
| 103 |
+ layer_add_child(window_layer, ui.progress_layer); |
|
| 104 |
+ |
|
| 55 | 105 |
set_modal_mode(true); |
| 56 | 106 |
} |
| 57 | 107 |
|
| 58 | 108 |
static void |
| 59 | 109 |
window_unload(Window *window) {
|
| 60 | 110 |
text_layer_destroy(modal_text_layer); |
| 111 |
+ text_layer_destroy(ui.label_layer); |
|
| 112 |
+ progress_layer_destroy(ui.progress_layer); |
|
| 61 | 113 |
} |
| 62 | 114 |
|
| 63 | 115 |
static void |
| ... | ... |
@@ -170,6 +222,10 @@ send_minute_data(HealthMinuteData *data, time_t key) {
|
| 170 | 222 |
(int)msg_result); |
| 171 | 223 |
} |
| 172 | 224 |
|
| 225 |
+ if (!ui.first_key) ui.first_key = int_key; |
|
| 226 |
+ ui.current_key = int_key; |
|
| 227 |
+ update_progress(); |
|
| 228 |
+ |
|
| 173 | 229 |
APP_LOG(APP_LOG_LEVEL_INFO, "sent data for key %" PRIi32, int_key); |
| 174 | 230 |
|
| 175 | 231 |
sent += 1; |