Browse code

Add a progress bar to the main display

Natasha Kerensikova authored on21/03/2016 19:05:16
Showing1 changed files
... ...
@@ -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;