2424#include "util/style.h"
2525#include "util/time.h"
2626#include "version/version.h"
27+ #include "vibes/haptic_feedback.h"
2728
2829struct RootWindow {
2930 Window * window ;
@@ -36,9 +37,11 @@ struct RootWindow {
3637 TextLayer * version_layer ;
3738 TalkingHorseLayer * talking_horse_layer ;
3839 EventHandle event_handle ;
40+ EventHandle app_message_handle ;
3941 char time_string [6 ];
4042 char version_string [9 ];
4143 char * * sample_prompts ;
44+ bool talking_horse_overridden ;
4245};
4346
4447static void prv_window_load (Window * window );
@@ -52,6 +55,7 @@ static void prv_time_changed(struct tm *tick_time, TimeUnits time_changed, void
5255static int prv_load_suggestions (char * * * suggestions );
5356static void prv_action_menu_closed (ActionMenu * action_menu , const ActionMenuItem * performed_action , void * context );
5457static void prv_suggestion_clicked (ActionMenu * action_menu , const ActionMenuItem * action , void * context );
58+ static void prv_app_message_handler (DictionaryIterator * iter , void * context );
5559
5660RootWindow * root_window_create () {
5761 RootWindow * window = malloc (sizeof (RootWindow ));
@@ -81,6 +85,7 @@ RootWindow* root_window_create() {
8185 layer_add_child (window_get_root_layer (window -> window ), (Layer * )window -> time_layer );
8286 window -> talking_horse_layer = talking_horse_layer_create (GRect (0 , 56 , 144 - ACTION_BAR_WIDTH , 112 ));
8387 layer_add_child (window_get_root_layer (window -> window ), (Layer * )window -> talking_horse_layer );
88+ window -> talking_horse_overridden = false;
8489
8590 VersionInfo version_info = version_get_current ();
8691 snprintf (window -> version_string , sizeof (window -> version_string ), "v%d.%d" , version_info .major , version_info .minor );
@@ -128,6 +133,9 @@ static void prv_window_appear(Window* window) {
128133 time_t now = time (NULL );
129134 prv_time_changed (localtime (& now ), MINUTE_UNIT , rw );
130135 }
136+ if (!rw -> app_message_handle ) {
137+ rw -> app_message_handle = events_app_message_register_inbox_received (prv_app_message_handler , rw );
138+ }
131139}
132140
133141static void prv_window_disappear (Window * window ) {
@@ -136,11 +144,27 @@ static void prv_window_disappear(Window* window) {
136144 events_tick_timer_service_unsubscribe (rw -> event_handle );
137145 rw -> event_handle = NULL ;
138146 }
147+ if (rw -> app_message_handle ) {
148+ events_app_message_unsubscribe (rw -> app_message_handle );
149+ }
139150}
140151
152+ static void prv_app_message_handler (DictionaryIterator * iter , void * context ) {
153+ RootWindow * rw = context ;
154+ Tuple * tuple = dict_find (iter , MESSAGE_KEY_COBBLE_WARNING );
155+ if (tuple -> value -> int32 == 1 ) {
156+ rw -> talking_horse_overridden = true;
157+ talking_horse_layer_set_text (rw -> talking_horse_layer , "Cobble has many Bobby bugs." );
158+ window_set_background_color (rw -> window , COLOR_FALLBACK (GColorRed , GColorDarkGray ));
159+ vibe_haptic_feedback ();
160+ }
161+ }
141162
142163static void prv_time_changed (struct tm * tick_time , TimeUnits time_changed , void * context ) {
143164 RootWindow * rw = context ;
165+ if (rw -> talking_horse_overridden ) {
166+ return ;
167+ }
144168 format_time (rw -> time_string , sizeof (rw -> time_string ), tick_time );
145169 if (tick_time -> tm_hour >= 6 && tick_time -> tm_hour < 12 ) {
146170 talking_horse_layer_set_text (rw -> talking_horse_layer , "Good morning!" );
0 commit comments