| ... |
... |
@@ -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;
|