Browse code

Add a widget to display the transfer rate between watch and phone

Natasha Kerensikova authored on05/04/2016 00:09:08
Showing1 changed files
... ...
@@ -39,10 +39,13 @@ static char global_buffer[1024];
39 39
 
40 40
 static struct widget {
41 41
 	char		label[64];
42
+	char		rate[32];
42 43
 	TextLayer	*label_layer;
44
+	TextLayer	*rate_layer;
43 45
 	ProgressLayer	*progress_layer;
44 46
 	uint32_t	first_key;
45 47
 	uint32_t	current_key;
48
+	time_t		start_time;
46 49
 } phone, web;
47 50
 
48 51
 static void
... ...
@@ -50,8 +53,10 @@ set_modal_mode(bool is_modal) {
50 53
 	if (is_modal == modal_displayed) return;
51 54
 	layer_set_hidden(text_layer_get_layer(modal_text_layer), !is_modal);
52 55
 	layer_set_hidden(text_layer_get_layer(phone.label_layer), is_modal);
56
+	layer_set_hidden(text_layer_get_layer(phone.rate_layer), is_modal);
53 57
 	layer_set_hidden(phone.progress_layer, is_modal);
54 58
 	layer_set_hidden(text_layer_get_layer(web.label_layer), is_modal);
59
+	layer_set_hidden(text_layer_get_layer(web.rate_layer), is_modal);
55 60
 	layer_set_hidden(web.progress_layer, is_modal);
56 61
 	modal_displayed = is_modal;
57 62
 }
... ...
@@ -60,11 +65,13 @@ static void
60 65
 update_half_progress(struct widget *widget) {
61 66
 	if (!widget || !widget->current_key) return;
62 67
 
63
-	time_t t;
68
+	time_t t, now = time(0);
64 69
 	struct tm *tm;
65
-	int32_t last_key = (time(0) + 59) / 60;
70
+	int32_t last_key = (now + 59) / 60;
66 71
 	int32_t key_span = last_key - widget->first_key;
67 72
 	int32_t keys_done = widget->current_key - widget->first_key + 1;
73
+	int32_t running_time = widget->start_time
74
+	    ? now - widget->start_time : 0;
68 75
 
69 76
 	progress_layer_set_progress(widget->progress_layer,
70 77
 	    (keys_done * 100 + key_span / 2) / key_span);
... ...
@@ -72,6 +79,13 @@ update_half_progress(struct widget *widget) {
72 79
 	t = widget->current_key * 60;
73 80
 	tm = localtime(&t);
74 81
 	strftime(widget->label, sizeof widget->label, "%F %H:%M", tm);
82
+
83
+	if (running_time > 0) {
84
+		int32_t i = ((widget->current_key - widget->first_key) * 60
85
+		    + running_time / 2) / running_time;
86
+		snprintf(widget->rate, sizeof widget->rate,
87
+		    "%" PRIi32 " /min", i);
88
+	}
75 89
 }
76 90
 
77 91
 static void
... ...
@@ -98,6 +112,16 @@ window_load(Window *window) {
98 112
 	    fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
99 113
 	layer_add_child(window_layer, text_layer_get_layer(modal_text_layer));
100 114
 
115
+	phone.rate_layer = text_layer_create(GRect(0,
116
+	    bounds.size.h / 2 - LABEL_MARGIN - 2 * LABEL_HEIGHT,
117
+	    bounds.size.w,
118
+	    LABEL_HEIGHT));
119
+	text_layer_set_text(phone.rate_layer, phone.rate);
120
+	text_layer_set_text_alignment(phone.rate_layer, GTextAlignmentCenter);
121
+	text_layer_set_font(phone.rate_layer,
122
+	    fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
123
+	layer_add_child(window_layer, text_layer_get_layer(phone.rate_layer));
124
+
101 125
 	phone.label_layer = text_layer_create(GRect(0,
102 126
 	    bounds.size.h / 2 - LABEL_HEIGHT - LABEL_MARGIN,
103 127
 	    bounds.size.w,
... ...
@@ -140,6 +164,16 @@ window_load(Window *window) {
140 164
 	    fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
141 165
 	layer_add_child(window_layer, text_layer_get_layer(web.label_layer));
142 166
 
167
+	web.rate_layer = text_layer_create(GRect(0,
168
+	    bounds.size.h / 2 + LABEL_MARGIN + LABEL_HEIGHT,
169
+	    bounds.size.w,
170
+	    LABEL_HEIGHT));
171
+	text_layer_set_text(web.rate_layer, web.rate);
172
+	text_layer_set_text_alignment(web.rate_layer, GTextAlignmentCenter);
173
+	text_layer_set_font(web.rate_layer,
174
+	    fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
175
+	layer_add_child(window_layer, text_layer_get_layer(web.rate_layer));
176
+
143 177
 	set_modal_mode(true);
144 178
 }
145 179
 
... ...
@@ -351,6 +385,7 @@ handle_last_sent(Tuple *tuple) {
351 385
 	}
352 386
 	APP_LOG(APP_LOG_LEVEL_INFO, "received LAST_SENT %" PRIu32, ikey);
353 387
 
388
+	phone.start_time = time(0);
354 389
 	minute_index = 0;
355 390
 	minute_data_size = 0;
356 391
 	minute_last = ikey ? (ikey + 1) * 60 : 0;