22/* SPDX-License-Identifier: Apache-2.0 */
33
44#include "health_hr_summary_card.h"
5+ #include "health_hr_summary_card_segments.h"
56#include "health_hr_detail_card.h"
7+ #include "health_progress.h"
68#include "services/normal/activity/health_util.h"
79
8- #include "applib/graphics/graphics_circle.h"
910#include "applib/pbl_std/pbl_std.h"
1011#include "applib/ui/kino/kino_reel.h"
1112#include "applib/ui/text_layer.h"
1819#include "system/logging.h"
1920#include "util/size.h"
2021#include "util/string.h"
21- #include "util/trig.h"
2222
2323// Compile-time display offset calculations
2424#define HEALTH_X_OFFSET ((DISP_COLS - LEGACY_2X_DISP_COLS) / 2)
2525#define HEALTH_Y_OFFSET ((DISP_ROWS - LEGACY_2X_DISP_ROWS) / 2)
2626
2727typedef struct HealthHrSummaryCardData {
2828 HealthData * health_data ;
29+ HealthProgressBar progress_bar ;
2930 GDrawCommandSequence * pulsing_heart ;
3031 uint32_t pulsing_heart_frame_index ;
3132 AppTimer * pulsing_heart_timer ;
@@ -40,16 +41,11 @@ typedef struct HealthHrSummaryCardData {
4041
4142#define PULSING_HEART_TIMEOUT (30 * MS_PER_SECOND)
4243
43- #define CIRCLE_COLOR (PBL_IF_COLOR_ELSE(GColorDarkCandyAppleRed, GColorBlack))
44- // Outer radius, inner radius and center of the ring around the heart icon.
45- // The center is in layer coordinates (legacy 144x168 base, before display offset).
46- #define CIRCLE_RADIUS_OUTER 43
47- #define CIRCLE_RADIUS_INNER 33
48- #define CIRCLE_CENTER_X (71 + HEALTH_X_OFFSET)
49- #define CIRCLE_CENTER_Y (58 + HEALTH_Y_OFFSET)
44+ #define PROGRESS_BACKGROUND_COLOR (PBL_IF_COLOR_ELSE(GColorRoseVale, GColorBlack))
45+ #define PROGRESS_OUTLINE_COLOR (PBL_IF_COLOR_ELSE(GColorClear, GColorBlack))
5046
51- #define TEXT_COLOR (PBL_IF_COLOR_ELSE(GColorBulgarianRose , GColorBlack))
52- #define CARD_BACKGROUND_COLOR (PBL_IF_COLOR_ELSE(GColorWhite , GColorWhite))
47+ #define TEXT_COLOR (PBL_IF_COLOR_ELSE(GColorSunsetOrange , GColorBlack))
48+ #define CARD_BACKGROUND_COLOR (PBL_IF_COLOR_ELSE(GColorBulgarianRose , GColorWhite))
5349
5450
5551static void prv_pulsing_heart_timer_cb (void * context ) {
@@ -77,12 +73,11 @@ static void prv_pulsing_heart_timer_cb(void *context) {
7773 layer_mark_dirty (base_layer );
7874}
7975
80- static void prv_render_circle (GContext * ctx ) {
81- graphics_context_set_fill_color (ctx , CIRCLE_COLOR );
82- graphics_fill_radial_internal (ctx ,
83- GPoint (CIRCLE_CENTER_X , CIRCLE_CENTER_Y ),
84- CIRCLE_RADIUS_INNER , CIRCLE_RADIUS_OUTER ,
85- 0 , TRIG_MAX_ANGLE );
76+ static void prv_render_progress_bar (GContext * ctx , Layer * base_layer ) {
77+ HealthHrSummaryCardData * data = layer_get_data (base_layer );
78+
79+ health_progress_bar_fill (ctx , & data -> progress_bar , PROGRESS_BACKGROUND_COLOR ,
80+ 0 , HEALTH_PROGRESS_BAR_MAX_VALUE );
8681}
8782
8883static void prv_render_icon (GContext * ctx , Layer * base_layer ) {
@@ -175,10 +170,10 @@ static void prv_base_layer_update_proc(Layer *base_layer, GContext *ctx) {
175170 data -> now_bpm = health_data_hr_get_current_bpm (data -> health_data );
176171 data -> last_updated = health_data_hr_get_last_updated_timestamp (data -> health_data );
177172
178- prv_render_circle (ctx );
179-
180173 prv_render_icon (ctx , base_layer );
181174
175+ prv_render_progress_bar (ctx , base_layer );
176+
182177 if (!activity_prefs_heart_rate_is_enabled ()) {
183178 prv_render_hrm_disabled (ctx , base_layer );
184179 return ;
@@ -207,6 +202,10 @@ Layer *health_hr_summary_card_create(HealthData *health_data) {
207202 .health_data = health_data ,
208203 .pulsing_heart =
209204 gdraw_command_sequence_create_with_resource (RESOURCE_ID_HEALTH_APP_PULSING_HEART ),
205+ .progress_bar = {
206+ .num_segments = ARRAY_LENGTH (s_hr_summary_progress_segments ),
207+ .segments = s_hr_summary_progress_segments ,
208+ },
210209 .now_bpm = health_data_hr_get_current_bpm (health_data ),
211210 .resting_bpm = health_data_hr_get_resting_bpm (health_data ),
212211 .last_updated = health_data_hr_get_last_updated_timestamp (health_data ),
0 commit comments